From 1b6240b0050ad3fdf36a7a53590e11e004a47a03 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Fri, 28 Jul 2023 23:35:06 +0800 Subject: [PATCH 01/50] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/LoginController.cs | 3 + .../Learun.Application.Web.csproj | 2 +- .../XmlConfig/system.config | 2 +- .../Learun.Framework.Ultimate V7 - 副本.sln | 303 +++++++++--------- 4 files changed, 164 insertions(+), 146 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Controllers/LoginController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Controllers/LoginController.cs index fa051881f..cfeca65ef 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Controllers/LoginController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Controllers/LoginController.cs @@ -209,6 +209,8 @@ namespace Learun.Application.Web.Controllers [HttpGet] public ActionResult Index() { + #if DEBUG + #else //判断当前ip是否是123服务器,如果是123服务器,跳过授权验证 if (Net.GetLanIp() != "172.17.3.181") { @@ -219,6 +221,7 @@ namespace Learun.Application.Web.Controllers return Content(""); } } + #endif //获取错误次数 ViewBag.errornum = OperatorHelper.Instance.GetCurrentErrorNum(); //获取高职版跳转地址 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index 4f23eab4b..c8fe389e1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -23,7 +23,7 @@ ..\..\..\ true - + false diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config index ac8026e8f..ccdb6eaef 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config @@ -74,7 +74,7 @@ - + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Ultimate V7 - 副本.sln b/Learun.Framework.Ultimate V7/Learun.Framework.Ultimate V7 - 副本.sln index fbf9e9c15..f8f325e77 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Ultimate V7 - 副本.sln +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Ultimate V7 - 副本.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29025.244 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33829.357 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01 Framework 基础模块", "01 Framework 基础模块", "{C6B09613-CC72-4D16-8056-1FD68ED86BF3}" EndProject @@ -106,6 +106,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quanjiang.DigitalScholl.Pus EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quanjiang.DigitalScholl.JobService", "Quanjiang.DigitalScholl.JobService\Quanjiang.DigitalScholl.JobService.csproj", "{22D95C1F-07D6-40A4-8F14-26013EB23C12}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Learun.Application.Message", "Learun.Framework.Module\Learun.Application.Module\Learun.Application.Message\Learun.Application.Message.csproj", "{211FA31A-B9D8-4F48-80CC-573B9410828E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Learun.Workflow.Engine", "Learun.Framework.Module\Learun.Workflow\Learun.Workflow.Engine\Learun.Workflow.Engine.csproj", "{1D192591-B85A-41DB-AE3A-4BF9765786C1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Learun.Application.Language", "Learun.Framework.Module\Learun.Application.Module\Learun.Application.Language\Learun.Application.Language.csproj", "{36083FBB-CE7F-4EE0-8459-C4B60A2DD070}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Learun.Application.Extention", "Learun.Framework.Module\Learun.Application.Module\Learun.Application.Extention\Learun.Application.Extention.csproj", "{4D033392-BBB8-4B5F-9144-A42E7695847E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Android = Debug|Android @@ -1388,6 +1396,150 @@ Global {22D95C1F-07D6-40A4-8F14-26013EB23C12}.Release|Windows-x64.Build.0 = Release|Any CPU {22D95C1F-07D6-40A4-8F14-26013EB23C12}.Release|Windows-x86.ActiveCfg = Release|Any CPU {22D95C1F-07D6-40A4-8F14-26013EB23C12}.Release|Windows-x86.Build.0 = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Android.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Android.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|iOS.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|iOS.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Windows-ARM.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Windows-ARM.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Windows-x64.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Debug|Windows-x86.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Android.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Android.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Any CPU.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|iOS.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|iOS.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Windows-ARM.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Windows-ARM.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Windows-x64.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Windows-x64.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Windows-x86.ActiveCfg = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Development|Windows-x86.Build.0 = Debug|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Android.ActiveCfg = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Android.Build.0 = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Any CPU.Build.0 = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|iOS.ActiveCfg = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|iOS.Build.0 = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Windows-ARM.ActiveCfg = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Windows-ARM.Build.0 = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Windows-x64.ActiveCfg = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Windows-x64.Build.0 = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Windows-x86.ActiveCfg = Release|Any CPU + {211FA31A-B9D8-4F48-80CC-573B9410828E}.Release|Windows-x86.Build.0 = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Android.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Android.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|iOS.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|iOS.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Windows-ARM.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Windows-ARM.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Windows-x64.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Debug|Windows-x86.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Android.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Android.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Any CPU.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|iOS.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|iOS.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Windows-ARM.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Windows-ARM.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Windows-x64.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Windows-x64.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Windows-x86.ActiveCfg = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Development|Windows-x86.Build.0 = Debug|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Android.ActiveCfg = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Android.Build.0 = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Any CPU.Build.0 = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|iOS.ActiveCfg = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|iOS.Build.0 = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Windows-ARM.ActiveCfg = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Windows-ARM.Build.0 = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Windows-x64.ActiveCfg = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Windows-x64.Build.0 = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Windows-x86.ActiveCfg = Release|Any CPU + {1D192591-B85A-41DB-AE3A-4BF9765786C1}.Release|Windows-x86.Build.0 = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Android.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Android.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|iOS.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|iOS.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Windows-ARM.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Windows-ARM.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Windows-x64.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Debug|Windows-x86.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Android.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Android.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Any CPU.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|iOS.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|iOS.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Windows-ARM.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Windows-ARM.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Windows-x64.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Windows-x64.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Windows-x86.ActiveCfg = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Development|Windows-x86.Build.0 = Debug|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Android.ActiveCfg = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Android.Build.0 = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Any CPU.Build.0 = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|iOS.ActiveCfg = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|iOS.Build.0 = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Windows-ARM.ActiveCfg = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Windows-ARM.Build.0 = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Windows-x64.ActiveCfg = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Windows-x64.Build.0 = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Windows-x86.ActiveCfg = Release|Any CPU + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070}.Release|Windows-x86.Build.0 = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Android.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Android.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|iOS.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|iOS.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Windows-ARM.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Windows-ARM.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Windows-x64.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Windows-x64.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Windows-x86.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Debug|Windows-x86.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Android.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Android.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Any CPU.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Any CPU.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|iOS.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|iOS.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Windows-ARM.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Windows-ARM.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Windows-x64.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Windows-x64.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Windows-x86.ActiveCfg = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Development|Windows-x86.Build.0 = Debug|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Android.ActiveCfg = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Android.Build.0 = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Any CPU.Build.0 = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|iOS.ActiveCfg = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|iOS.Build.0 = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Windows-ARM.ActiveCfg = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Windows-ARM.Build.0 = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Windows-x64.ActiveCfg = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Windows-x64.Build.0 = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Windows-x86.ActiveCfg = Release|Any CPU + {4D033392-BBB8-4B5F-9144-A42E7695847E}.Release|Windows-x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1432,150 +1584,13 @@ Global {8F770F8B-06B3-43DA-886F-15D41CEC62EE} = {16DDB25D-3101-47A2-BDC8-161954FD77FA} {7491A0D1-23A0-43AE-A492-9D7B3D962F50} = {C6B09613-CC72-4D16-8056-1FD68ED86BF3} {9B8B014F-BF59-4578-B931-E0F27FAE3598} = {7491A0D1-23A0-43AE-A492-9D7B3D962F50} + {211FA31A-B9D8-4F48-80CC-573B9410828E} = {16DDB25D-3101-47A2-BDC8-161954FD77FA} + {1D192591-B85A-41DB-AE3A-4BF9765786C1} = {16DDB25D-3101-47A2-BDC8-161954FD77FA} + {36083FBB-CE7F-4EE0-8459-C4B60A2DD070} = {16DDB25D-3101-47A2-BDC8-161954FD77FA} + {4D033392-BBB8-4B5F-9144-A42E7695847E} = {16DDB25D-3101-47A2-BDC8-161954FD77FA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {968C278F-4142-4DFF-96B0-B3D70A649451} EnterpriseLibraryConfigurationToolBinariesPath = packages\Unity.2.1.505.0\lib\NET35 - EndGlobalSection - GlobalSection(TeamFoundationVersionControl) = preSolution - SccNumberOfProjects = 36 - SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} - SccTeamFoundationServer = http://192.168.2.126:8080/tfs/defaultcollection - SccLocalPath0 = . - SccProjectUniqueName1 = Learun.Application.IMServer\\Learun.Application.IMServer.csproj - SccProjectTopLevelParentUniqueName1 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName1 = Learun.Application.IMServer - SccLocalPath1 = Learun.Application.IMServer - SccProjectUniqueName2 = Learun.Application.Organization\\Learun.Application.Organization.csproj - SccProjectTopLevelParentUniqueName2 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName2 = Learun.Application.Organization - SccLocalPath2 = Learun.Application.Organization - SccProjectUniqueName3 = Learun.Application.WebApi\\Learun.Application.WebApi.csproj - SccProjectTopLevelParentUniqueName3 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName3 = Learun.Application.WebApi - SccLocalPath3 = Learun.Application.WebApi - SccProjectUniqueName4 = Learun.Application.WorkFlowServer\\Learun.Application.WorkFlowServer.csproj - SccProjectTopLevelParentUniqueName4 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName4 = Learun.Application.WorkFlowServer - SccLocalPath4 = Learun.Application.WorkFlowServer - SccProjectUniqueName5 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.AppMagager\\Learun.Application.AppMagager.csproj - SccProjectTopLevelParentUniqueName5 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName5 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.AppMagager - SccLocalPath5 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.AppMagager - SccProjectUniqueName6 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Base\\Learun.Application.Base.csproj - SccProjectTopLevelParentUniqueName6 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName6 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base - SccLocalPath6 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Base - SccProjectUniqueName7 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.CRM\\Learun.Application.CRM.csproj - SccProjectTopLevelParentUniqueName7 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName7 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.CRM - SccLocalPath7 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.CRM - SccProjectUniqueName8 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Excel\\Learun.Application.Excel.csproj - SccProjectTopLevelParentUniqueName8 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName8 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.Excel - SccLocalPath8 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Excel - SccProjectUniqueName9 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Form\\Learun.Application.Form.csproj - SccProjectTopLevelParentUniqueName9 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName9 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form - SccLocalPath9 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Form - SccProjectUniqueName10 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.IM\\Learun.Application.IM.csproj - SccProjectTopLevelParentUniqueName10 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName10 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.IM - SccLocalPath10 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.IM - SccProjectUniqueName11 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.OA\\Learun.Application.OA.csproj - SccProjectTopLevelParentUniqueName11 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName11 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.OA - SccLocalPath11 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.OA - SccProjectUniqueName12 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Report\\Learun.Application.Report.csproj - SccProjectTopLevelParentUniqueName12 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName12 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.Report - SccLocalPath12 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Report - SccProjectUniqueName13 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.WeChat\\Learun.Application.WeChat.csproj - SccProjectTopLevelParentUniqueName13 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName13 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.WeChat - SccLocalPath13 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.WeChat - SccProjectUniqueName14 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.WorkFlow\\Learun.Application.WorkFlow.csproj - SccProjectTopLevelParentUniqueName14 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName14 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.WorkFlow - SccLocalPath14 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.WorkFlow - SccProjectUniqueName15 = Learun.Framework.Module\\Learun.Cache\\Learun.Cache.Base\\Learun.Cache.Base.csproj - SccProjectTopLevelParentUniqueName15 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName15 = Learun.Framework.Module/Learun.Cache/Learun.Cache.Base - SccLocalPath15 = Learun.Framework.Module\\Learun.Cache\\Learun.Cache.Base - SccProjectUniqueName16 = Learun.Framework.Module\\Learun.Cache\\Learun.Cache.Factory\\Learun.Cache.Factory.csproj - SccProjectTopLevelParentUniqueName16 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName16 = Learun.Framework.Module/Learun.Cache/Learun.Cache.Factory - SccLocalPath16 = Learun.Framework.Module\\Learun.Cache\\Learun.Cache.Factory - SccProjectUniqueName17 = Learun.Framework.Module\\Learun.Cache\\Learun.Cache.Redis\\Learun.Cache.Redis.csproj - SccProjectTopLevelParentUniqueName17 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName17 = Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis - SccLocalPath17 = Learun.Framework.Module\\Learun.Cache\\Learun.Cache.Redis - SccProjectUniqueName18 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase.EF.Oracle\\Learun.DataBase.Oracle.csproj - SccProjectTopLevelParentUniqueName18 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName18 = Learun.Framework.Module/Learun.Db/Learun.DataBase.EF.Oracle - SccLocalPath18 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase.EF.Oracle - SccProjectUniqueName19 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase.EF.Sqlserver\\Learun.DataBase.SqlServer.csproj - SccProjectTopLevelParentUniqueName19 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName19 = Learun.Framework.Module/Learun.Db/Learun.DataBase.EF.Sqlserver - SccLocalPath19 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase.EF.Sqlserver - SccProjectUniqueName20 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase.MySql\\Learun.DataBase.MySqlEx.csproj - SccProjectTopLevelParentUniqueName20 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName20 = Learun.Framework.Module/Learun.Db/Learun.DataBase.MySql - SccLocalPath20 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase.MySql - SccProjectUniqueName21 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase.Repository\\Learun.DataBase.Repository.csproj - SccProjectTopLevelParentUniqueName21 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName21 = Learun.Framework.Module/Learun.Db/Learun.DataBase.Repository - SccLocalPath21 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase.Repository - SccProjectUniqueName22 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase\\Learun.DataBase.csproj - SccProjectTopLevelParentUniqueName22 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName22 = Learun.Framework.Module/Learun.Db/Learun.DataBase - SccLocalPath22 = Learun.Framework.Module\\Learun.Db\\Learun.DataBase - SccProjectUniqueName23 = Learun.Framework.Module\\Learun.Ioc\\Learun.Ioc.csproj - SccProjectTopLevelParentUniqueName23 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName23 = Learun.Framework.Module/Learun.Ioc - SccLocalPath23 = Learun.Framework.Module\\Learun.Ioc - SccProjectUniqueName24 = Learun.Framework.Module\\Learun.Log\\Learun.Loger.csproj - SccProjectTopLevelParentUniqueName24 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName24 = Learun.Framework.Module/Learun.Log - SccLocalPath24 = Learun.Framework.Module\\Learun.Log - SccProjectUniqueName25 = Learun.Framework.Module\\Learun.Util\\Learun.Util.Operat\\Learun.Util.Operat.csproj - SccProjectTopLevelParentUniqueName25 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName25 = Learun.Framework.Module/Learun.Util/Learun.Util.Operat - SccLocalPath25 = Learun.Framework.Module\\Learun.Util\\Learun.Util.Operat - SccProjectUniqueName26 = Learun.Framework.Module\\Learun.Util\\Learun.Util\\Learun.Util.csproj - SccProjectTopLevelParentUniqueName26 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName26 = Learun.Framework.Module/Learun.Util/Learun.Util - SccLocalPath26 = Learun.Framework.Module\\Learun.Util\\Learun.Util - SccProjectUniqueName27 = Xq.SpireHelper\\Xq.SpireHelper.csproj - SccProjectTopLevelParentUniqueName27 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName27 = Xq.SpireHelper - SccLocalPath27 = Xq.SpireHelper - SccProjectUniqueName28 = Quanjiang.DigitalScholl.DataSync\\Quanjiang.DigitalScholl.DataSync.csproj - SccProjectName28 = Quanjiang.DigitalScholl.DataSync - SccLocalPath28 = Quanjiang.DigitalScholl.DataSync - SccProjectUniqueName29 = Quanjiang.DigitalScholl.License\\Quanjiang.DigitalScholl.License.csproj - SccProjectName29 = Quanjiang.DigitalScholl.License - SccLocalPath29 = Quanjiang.DigitalScholl.License - SccProjectUniqueName30 = Quanjiang.DigitalScholl.WebLicense\\Quanjiang.DigitalScholl.WebLicense.csproj - SccProjectName30 = Quanjiang.DigitalScholl.WebLicense - SccLocalPath30 = Quanjiang.DigitalScholl.WebLicense - SccProjectUniqueName31 = Quanjiang.DigitalScholl.PushNotifications\\Quanjiang.DigitalScholl.PushNotifications.csproj - SccProjectName31 = Quanjiang.DigitalScholl.PushNotifications - SccLocalPath31 = Quanjiang.DigitalScholl.PushNotifications - SccProjectUniqueName32 = Quanjiang.DigitalScholl.JobService\\Quanjiang.DigitalScholl.JobService.csproj - SccProjectName32 = Quanjiang.DigitalScholl.JobService - SccLocalPath32 = Quanjiang.DigitalScholl.JobService - SccProjectUniqueName33 = Learun.Application.Web\\Learun.Application.Web.csproj - SccProjectTopLevelParentUniqueName33 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName33 = Learun.Application.Web - SccLocalPath33 = Learun.Application.Web - SccProjectUniqueName34 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.TwoDevelopment\\Learun.Application.TwoDevelopment.csproj - SccProjectTopLevelParentUniqueName34 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName34 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment - SccLocalPath34 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.TwoDevelopment - SccProjectUniqueName35 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Mapping\\Learun.Application.Mapping.csproj - SccProjectTopLevelParentUniqueName35 = Learun.Framework.Ultimate\u0020V7.sln - SccProjectName35 = Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping - SccLocalPath35 = Learun.Framework.Module\\Learun.Application.Module\\Learun.Application.Mapping + SolutionGuid = {968C278F-4142-4DFF-96B0-B3D70A649451} EndGlobalSection EndGlobal From 9591a51241940e50f56fbb13b9e1ebe0bdf58c27 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Tue, 1 Aug 2023 06:49:32 +0800 Subject: [PATCH 02/50] =?UTF-8?q?1.=E7=BC=B4=E8=B4=B9=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=8F=8A=E8=B0=83=E7=94=A8=E5=B0=81=E8=A3=85?= =?UTF-8?q?=202.=E6=94=B6=E8=B4=B9=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../App_Start/01 Handler/MvcControllerBase.cs | 23 +- .../App_Start/01 Handler/SP_OperatorHelper.cs | 63 ++++ .../Controllers/SP_FeeItemController.cs | 125 ++++++++ .../Controllers/SP_FeeItem_FlowController.cs | 135 +++++++++ .../Controllers/SP_LogController.cs | 133 +++++++++ .../StuPayManageAreaRegistration.cs | 28 ++ .../StuPayManage/Views/SP_FeeItem/Form.cshtml | 35 +++ .../StuPayManage/Views/SP_FeeItem/Form.js | 60 ++++ .../Views/SP_FeeItem/Index.cshtml | 56 ++++ .../StuPayManage/Views/SP_FeeItem/Index.js | 134 +++++++++ .../StuPayManage/Views/SP_Log/Form.cshtml | 18 ++ .../Areas/StuPayManage/Views/SP_Log/Form.js | 33 +++ .../StuPayManage/Views/SP_Log/Index.cshtml | 59 ++++ .../Areas/StuPayManage/Views/SP_Log/Index.js | 149 ++++++++++ .../Areas/StuPayManage/Views/web.config | 35 +++ .../Controllers/HomeController.cs | 5 +- .../Learun.Application.Web.csproj | 13 + .../Learun.Application.WebApi.csproj | 3 + .../Learun.Application.Base.csproj | 3 + .../Learun.Application.Mapping.csproj | 2 + .../StuPayManage/SP_FeeItemMap.cs | 29 ++ .../StuPayManage/SP_LogMap.cs | 30 ++ .../Learun.Application.TwoDevelopment.csproj | 9 + .../StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs | 125 ++++++++ .../SP_FeeItem/SP_FeeItemEntity.cs | 138 +++++++++ .../StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs | 48 +++ .../SP_FeeItem/SP_FeeItemService.cs | 176 +++++++++++ .../StuPayManage/SP_Log/SP_LogBLL.cs | 149 ++++++++++ .../StuPayManage/SP_Log/SP_LogBLLStatic.cs | 59 ++++ .../StuPayManage/SP_Log/SP_LogEntity.cs | 158 ++++++++++ .../StuPayManage/SP_Log/SP_LogIBLL.cs | 55 ++++ .../StuPayManage/SP_Log/SP_LogService.cs | 274 ++++++++++++++++++ 32 files changed, 2360 insertions(+), 2 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/SP_OperatorHelper.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItem_FlowController.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_LogController.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/StuPayManageAreaRegistration.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/web.config create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_FeeItemMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_LogMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLLStatic.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogIBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogService.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/MvcControllerBase.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/MvcControllerBase.cs index ba551d562..0ef234cc5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/MvcControllerBase.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/MvcControllerBase.cs @@ -1,4 +1,5 @@ -using Learun.Loger; +using Learun.Application.Web.App_Start._01_Handler; +using Learun.Loger; using Learun.Util; using Learun.Util.Operat; using System.Web.Mvc; @@ -101,6 +102,26 @@ namespace Learun.Application.Web return Content(new ResParameter { code = ResponseCode.success, info = info, data = new object { } }.ToJson()); } + + /// + /// 带操作日志 + /// + /// + /// + protected virtual ActionResult Success_SP(string info, string title, OperationType type, string keyValue, string content) + { + OperateLogModel operateLogModel = new OperateLogModel(); + operateLogModel.title = title; + operateLogModel.type = type; + operateLogModel.url = (string)WebHelper.GetHttpItems("currentUrl"); + operateLogModel.sourceObjectId = keyValue; + operateLogModel.sourceContentJson = content; + + SP_OperatorHelper.Instance.WriteOperateLog(operateLogModel); + + return Content(new ResParameter { code = ResponseCode.success, info = info, data = new object { } }.ToJson()); + } + /// /// 返回失败消息 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/SP_OperatorHelper.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/SP_OperatorHelper.cs new file mode 100644 index 000000000..06683bc4c --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/SP_OperatorHelper.cs @@ -0,0 +1,63 @@ +using Learun.Util.Operat; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Learun.Application.TwoDevelopment; +using Learun.Application.TwoDevelopment.StuPayManage; + +namespace Learun.Application.Web.App_Start._01_Handler +{ + public class SP_OperatorHelper + { + + private static SP_LogService sP_LogService = new SP_LogService(); + public static SP_OperatorHelper Instance + { + get { return new SP_OperatorHelper(); } + } + public void WriteOperateLog(OperateLogModel operateLogModel) + { + try + { + if (operateLogModel.userInfo == null) + { + operateLogModel.userInfo = LoginUserInfo.Get(); + } + SP_LogEntity logEntity = new SP_LogEntity(); + logEntity.F_CategoryId = 3; + logEntity.F_OperateTypeId = ((int)operateLogModel.type).ToString(); + logEntity.F_OperateType = EnumAttribute.GetDescription(operateLogModel.type); + logEntity.F_OperateAccount = operateLogModel.userInfo?.account + "(" + operateLogModel.userInfo.realName + ")"; + logEntity.F_OperateUserId = operateLogModel.userInfo?.userId; + logEntity.F_Module = operateLogModel.title; + logEntity.F_ExecuteResult = 1; + logEntity.F_ExecuteResultJson = "访问地址:" + operateLogModel.url; + logEntity.F_SourceObjectId = operateLogModel.sourceObjectId; + logEntity.F_SourceContentJson = operateLogModel.sourceContentJson; + logEntity.F_Description = "PC端"; + //logEntity.WriteLog(); + + try + { + sP_LogService.WriteLog(logEntity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + catch (Exception) + { + } + } + } +} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs new file mode 100644 index 000000000..e2a483b05 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs @@ -0,0 +1,125 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.StuPayManage; +using System.Web.Mvc; +using System.Collections.Generic; +using Learun.Util.Operat; +using Learun.Application.TwoDevelopment.EducationalAdministration; + +namespace Learun.Application.Web.Areas.StuPayManage.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-29 18:34 + /// 描 述:专业收费项目设置 + /// + public class SP_FeeItemController : MvcControllerBase + { + private SP_FeeItemIBLL sP_FeeItemIBLL = new SP_FeeItemBLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = sP_FeeItemIBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var SP_FeeItemData = sP_FeeItemIBLL.GetSP_FeeItemEntity( keyValue ); + var jsonData = new { + SP_FeeItem = SP_FeeItemData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + SP_FeeItemEntity entity =sP_FeeItemIBLL.GetSP_FeeItemEntity(keyValue); + if (entity == null) throw new System.Exception("主键无效"); + sP_FeeItemIBLL.DeleteEntity(keyValue); + //return Success("删除成功!"); + return Success_SP("删除成功!", "收费项目", OperationType.Delete, entity.F_Id, entity.ToJson()); + + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + SP_FeeItemEntity entity = strEntity.ToObject(); + sP_FeeItemIBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + //return Success("保存成功!"); + return Success_SP("保存成功!", "收费项目", string.IsNullOrEmpty(keyValue) ? OperationType.Create : OperationType.Update, entity.F_Id, entity.ToJson()); + + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItem_FlowController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItem_FlowController.cs new file mode 100644 index 000000000..caf0f1243 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItem_FlowController.cs @@ -0,0 +1,135 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.StuPayManage; +using System.Web.Mvc; +using Learun.Application.TwoDevelopment.LR_CodeDemo; +using System.Collections.Generic; +using Learun.Application.Base.SystemModule; + +namespace Learun.Application.Web.Areas.StuPayManage.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-29 21:26 + /// 描 述:专业收费项目设置 + /// + public class SP_FeeItem_FlowController : MvcControllerBase + { + private SP_FeeItem_FlowIBLL sP_FeeItem_FlowIBLL = new SP_FeeItem_FlowBLL(); + private CodeRuleIBLL codeRuleIBLL = new CodeRuleBLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = sP_FeeItem_FlowIBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var SP_FeeItemData = sP_FeeItem_FlowIBLL.GetSP_FeeItemEntity( keyValue ); + var jsonData = new { + SP_FeeItem = SP_FeeItemData, + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 流程实例主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormDataByProcessId(string processId) + { + var SP_FeeItemData = sP_FeeItem_FlowIBLL.GetEntityByProcessId( processId ); + var jsonData = new { + SP_FeeItem = SP_FeeItemData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + sP_FeeItem_FlowIBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + SP_FeeItemEntity entity = strEntity.ToObject(); + sP_FeeItem_FlowIBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_LogController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_LogController.cs new file mode 100644 index 000000000..15ccaa29e --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_LogController.cs @@ -0,0 +1,133 @@ +using Learun.Application.TwoDevelopment; +using Learun.Application.TwoDevelopment.StuPayManage; +using Learun.Application.TwoDevelopment.StuPayManage.SP_Log; +using Learun.Util; +using System.Data; +using System.Web.Mvc; + +namespace Learun.Application.Web.Areas.StuPayManage.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-31 22:20 + /// 描 述:操作日志 + /// + public class SP_LogController : MvcControllerBase + { + private SP_LogIBLL sP_LogIBLL = new SP_LogBLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取列表数据 + /// + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetList( string queryJson ) + { + var data = sP_LogIBLL.GetList(queryJson); + return Success(data); + } + /// + /// 获取列表分页数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = sP_LogIBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var data = sP_LogIBLL.GetEntity(keyValue); + return Success(data); + } + #endregion + + #region 提交数据 + + [HttpPost] + [AjaxOnly] + [ValidateAntiForgeryToken] + public ActionResult SaveRemoveLog(int categoryId, string keepTime) { + + SP_LogBLLStatic.RemoveLog(categoryId, keepTime); + return Success("清空成功"); + } + + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + sP_LogIBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue,SP_LogEntity entity) + { + sP_LogIBLL.SaveEntity(keyValue, entity); + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/StuPayManageAreaRegistration.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/StuPayManageAreaRegistration.cs new file mode 100644 index 000000000..0fc3b0747 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/StuPayManageAreaRegistration.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Mvc; + +namespace Learun.Application.Web.Areas.StuPayManage +{ + public class StuPayManageAreaRegistration : AreaRegistration + { + public override string AreaName + { + get + { + return "StuPayManage"; + } + } + + public override void RegisterArea(AreaRegistrationContext context) + { + context.MapRoute( + "StuPayManage_default", + "StuPayManage/{controller}/{action}/{id}", + new { action = "Index", id = UrlParameter.Optional } + ); + } + } +} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml new file mode 100644 index 000000000..b9825b012 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml @@ -0,0 +1,35 @@ +@{ + ViewBag.Title = "专业收费项目设置"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
+
+
收费年度*
+
+
+
+
项目代码*
+ +
+
+
项目名称*
+ +
+
+
收费标准*
+ +
+
+
项目类型*
+
+
+
+
专业*
+
+
+
+
备注
+ +
+
+@Html.AppendJsFile("/Areas/StuPayManage/Views/SP_FeeItem/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js new file mode 100644 index 000000000..605f59284 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js @@ -0,0 +1,60 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-07-29 18:34 + * 描 述:专业收费项目设置 + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + //收费年度 + $('#YearNo').lrselect({ + placeholder: "请选择收费年度", + allowSearch: true, + url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', + value: 'value', + text: 'text' + }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/StuPayManage/SP_FeeItem/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/StuPayManage/SP_FeeItem/SaveForm?keyValue=' + keyValue, postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml new file mode 100644 index 000000000..cb0e5ff79 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml @@ -0,0 +1,56 @@ +@{ + ViewBag.Title = "专业收费项目设置"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
+
+
+
+
+
+
+
+
+
收费年度
+
+
+
项目类型
+
+
+
+
项目代码
+ +
+
+
项目名称
+ +
+
+
专业
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+
+
+@Html.AppendJsFile("/Areas/StuPayManage/Views/SP_FeeItem/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js new file mode 100644 index 000000000..8d9499d86 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js @@ -0,0 +1,134 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-07-29 18:34 + * 描 述:专业收费项目设置 + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 220, 400); + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo',value: 'majorno',text: 'majorname' }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + // 新增 + $('#lr_add').on('click', function () { + learun.layerForm({ + id: 'form', + title: '新增', + url: top.$.rootUrl + '/StuPayManage/SP_FeeItem/Form', + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + }); + // 编辑 + $('#lr_edit').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('F_Id'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'form', + title: '编辑', + url: top.$.rootUrl + '/StuPayManage/SP_FeeItem/Form?keyValue=' + keyValue, + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + } + }); + // 删除 + $('#lr_delete').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('F_Id'); + if (learun.checkrow(keyValue)) { + learun.layerConfirm('是否确认删除该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/StuPayManage/SP_FeeItem/DeleteForm', { keyValue: keyValue}, function () { + refreshGirdData(); + }); + } + }); + } + }); + //  导入 + $('#lr_import').on('click', + function () { + learun.layerForm({ + id: 'form', + title: '导入', + url: top.$.rootUrl + '/PersonnelManagement/Sal_UserSalary/ImportForm', + width: 400, + height: 300, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + }); + //  导出 + $('#lr_export').on('click', function () { + }); + //  审核 + $('#lr_audit').on('click', function () { + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').lrAuthorizeJfGrid({ + url: top.$.rootUrl + '/StuPayManage/SP_FeeItem/GetPageList', + headData: [ + { label: "收费年度", name: "YearNo", width: 100, align: "center"}, + { label: "项目代码", name: "ChargeItemCode", width: 100, align: "center"}, + { label: "项目名称", name: "ChargeItemName", width: 100, align: "center"}, + { label: "专业", name: "MajorNo", width: 100, align: "center", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + }}, + { label: "项目类型", name: "ChargeItemType", width: 100, align: "center", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + { label: "收费标准", name: "Standard", width: 100, align: "center"}, + { label: "备注", name: "Remark", width: 100, align: "left"}, + ], + mainId:'F_Id', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.cshtml new file mode 100644 index 000000000..1ae0a6265 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.cshtml @@ -0,0 +1,18 @@ +@{ + ViewBag.Title = "清空日志"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
+
+
日志保留时间
+
+
    +
  • 保留近一周
  • +
  • 保留近一个月
  • +
  • 保留近三个月
  • +
  • 不保留,全部删除
  • +
+
+
+
+@Html.AppendJsFile("/Areas/StuPayManage/Views/SP_Log/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.js new file mode 100644 index 000000000..c2942cd4b --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.js @@ -0,0 +1,33 @@ +/* + * 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园(http://www.learun.cn) + * Copyright (c) 2013-2018 北京泉江科技有限公司 + * 创建人:陈彬彬 + * 日 期:2017.04.11 + * 描 述:清空日志管理 + */ +var categoryId = request('categoryId'); +var acceptClick; +var bootstrap = function ($, learun) { + "use strict"; + + var page = { + init: function () { + $('#keepTime').lrselect({ maxHeight: 75, placeholder: false }).lrselectSet(7); + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('#form').lrValidform()) { + return false; + } + var postData = $('#form').lrGetFormData(); + postData['categoryId'] = categoryId; + $.lrSaveForm(top.$.rootUrl + '/StuPayManage/SP_Log/SaveRemoveLog', postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.cshtml new file mode 100644 index 000000000..f1996dd79 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.cshtml @@ -0,0 +1,59 @@ +@{ + ViewBag.Title = "日志管理"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
+ + @*
  • 操作日志
  • *@ + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    操作用户
    + +
    +
    +
    系统功能
    + +
    +
    +
    操作类型
    + +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/StuPayManage/Views/SP_Log/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.js new file mode 100644 index 000000000..75568dadd --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.js @@ -0,0 +1,149 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-07-31 22:20 + * 描 述:操作日志 + */ +var selectedRow; +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var categoryId = '1'; + var logbegin = ''; + var logend = ''; + + var refreshGirdData = function () { + page.search(); + } + + var page = { + init: function () { + page.initGrid(); + page.bind(); + }, + bind: function () { + $('.datetime').each(function () { + $(this).lrdate({ + dfdata: [ + { name: '今天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00') }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近7天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'd', -6) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近1个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -1) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近3个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -3) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + ], + // 月 + mShow: false, + premShow: false, + // 季度 + jShow: false, + prejShow: false, + // 年 + ysShow: false, + yxShow: false, + preyShow: false, + yShow: false, + // 默认 + dfvalue: '1', + selectfn: function (begin, end) { + logbegin = begin; + logend = end; + page.search(); + } + }); + }); + // 查询 + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 200, 400); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + + // 清空 + $('#lr_removelog').on('click', function () { + learun.layerForm({ + id: 'form', + title: '清空', + url: top.$.rootUrl + '/StuPayManage/SP_Log/Form?categoryId=' + categoryId, + height: 200, + width: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + }); + // 导出 + $('#lr_export').on('click', function () { + learun.layerForm({ + id: "ExcelExportForm", + title: '导出Excel数据', + url: top.$.rootUrl + '/Utility/ExcelExportForm?gridId=gridtable&filename=SP_Log', + width: 500, + height: 380, + callBack: function (id) { + return top[id].acceptClick(); + }, + btn: ['导出Excel', '关闭'] + }); + }); + // 删除 + $('#lr_delete').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('F_LogId'); + if (learun.checkrow(keyValue)) { + learun.layerConfirm('是否确认删除该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/StuPayManage/SP_Log/DeleteForm', { keyValue: keyValue}, function () { + }); + } + }); + } + }); + }, + + initGrid: function () { + $('#gridtable').jfGrid({ + url: top.$.rootUrl + '/StuPayManage/SP_Log/GetPageList', + headData: [ + { + label: "操作时间", name: "F_OperateTime", width: 135, align: "left", + formatter: function (cellvalue) { + return learun.formatDate(cellvalue, 'yyyy-MM-dd hh:mm:ss'); + } + }, + { label: "操作用户", name: "F_OperateAccount", width: 140, align: "left" }, + { label: "IP地址", name: "F_IPAddress", width: 100, align: "left" }, + { label: "系统功能", name: "F_Module", width: 150, align: "left" }, + { label: "操作类型", name: "F_OperateType", width: 70, align: "center" }, + { + label: "执行结果", name: "F_ExecuteResult", width: 70, align: "center", + formatter: function (cellvalue) { + if (cellvalue == '1') { + return "成功"; + } else { + return "失败"; + } + } + }, + { label: "执行结果描述", name: "F_ExecuteResultJson", width: 300, align: "left" } + + ], + + mainId: 'F_ItemDetailId', + isPage: true, + sidx: 'F_OperateTime' + }); + }, + search: function (param) { + param = param || {}; + param.CategoryId = categoryId; + param.StartTime = logbegin; + param.EndTime = logend; + + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/web.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/web.config new file mode 100644 index 000000000..22271d246 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/web.config @@ -0,0 +1,35 @@ + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Controllers/HomeController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Controllers/HomeController.cs index b21289315..4c18d02e7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Controllers/HomeController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Controllers/HomeController.cs @@ -431,6 +431,8 @@ namespace Learun.Application.Web.Controllers [HttpGet] public ActionResult Index() { + #if DEBUG + #else //判断当前ip是否是123服务器,如果是123服务器,跳过授权验证 if (Net.GetLanIp() != "172.17.3.181") { @@ -441,6 +443,7 @@ namespace Learun.Application.Web.Controllers return Content(""); } } + #endif //return View("AdminTop"); string learn_UItheme = WebHelper.GetCookie("Learn_ADMS_V6.1_UItheme"); @@ -667,7 +670,7 @@ namespace Learun.Application.Web.Controllers { return View(); } - #endregion +#endregion private ICache cache = CacheFactory.CaChe(); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index c8fe389e1..e76f43ceb 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -316,6 +316,7 @@ + @@ -564,6 +565,7 @@ + @@ -885,6 +887,8 @@ + + @@ -6634,6 +6638,14 @@ + + + + + + + + @@ -7934,6 +7946,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj index 9d30b0df7..64ec50975 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj @@ -361,6 +361,9 @@ + + + 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base/Learun.Application.Base.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base/Learun.Application.Base.csproj index 896dcff84..e56b4edf5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base/Learun.Application.Base.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base/Learun.Application.Base.csproj @@ -222,6 +222,9 @@ + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj index 1f02a015f..0644fdc3a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj @@ -588,6 +588,8 @@ + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_FeeItemMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_FeeItemMap.cs new file mode 100644 index 000000000..783d00214 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_FeeItemMap.cs @@ -0,0 +1,29 @@ +using Learun.Application.TwoDevelopment.StuPayManage; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-29 21:26 + /// 描 述:专业收费项目设置 + /// + public class SP_FeeItemMap : EntityTypeConfiguration + { + public SP_FeeItemMap() + { + #region 表、主键 + //表 + this.ToTable("SP_FEEITEM"); + //主键 + this.HasKey(t => t.F_Id); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_LogMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_LogMap.cs new file mode 100644 index 000000000..3ddd459d4 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_LogMap.cs @@ -0,0 +1,30 @@ +using Learun.Application.TwoDevelopment; +using Learun.Application.TwoDevelopment.StuPayManage; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-31 22:20 + /// 描 述:操作日志 + /// + public class SP_LogMap : EntityTypeConfiguration + { + public SP_LogMap() + { + #region 表、主键 + //表 + this.ToTable("SP_LOG"); + //主键 + this.HasKey(t => t.F_LogId); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index 9039a341b..bad3a4db6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1787,6 +1787,8 @@ + + @@ -1825,6 +1827,13 @@ + + + + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs new file mode 100644 index 000000000..8aae83789 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs @@ -0,0 +1,125 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.StuPayManage +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-29 18:34 + /// 描 述:专业收费项目设置 + /// + public class SP_FeeItemBLL : SP_FeeItemIBLL + { + private SP_FeeItemService sP_FeeItemService = new SP_FeeItemService(); + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return sP_FeeItemService.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取SP_FeeItem表实体数据 + /// + /// 主键 + /// + public SP_FeeItemEntity GetSP_FeeItemEntity(string keyValue) + { + try + { + return sP_FeeItemService.GetSP_FeeItemEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + sP_FeeItemService.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, SP_FeeItemEntity entity) + { + try + { + sP_FeeItemService.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemEntity.cs new file mode 100644 index 000000000..ca89b20b5 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemEntity.cs @@ -0,0 +1,138 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Learun.Application.TwoDevelopment.StuPayManage +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-29 18:34 + /// 描 述:专业收费项目设置 + /// + public class SP_FeeItemEntity + { + #region 实体成员 + /// + /// 主键 + /// + [Column("F_ID")] + public string F_Id { get; set; } + /// + /// 创建人ID + /// + [Column("F_CREATEUSERID")] + public string F_CreateUserId { get; set; } + /// + /// 创建人 + /// + [Column("F_CREATEUSERNAME")] + public string F_CreateUserName { get; set; } + /// + /// 创建时间 + /// + [Column("F_CREATEDATE")] + public DateTime? F_CreateDate { get; set; } + /// + /// 更新人ID + /// + [Column("F_MODIFYUSERID")] + public string F_ModifyUserId { get; set; } + /// + /// 更新人 + /// + [Column("F_MODIFYUSERNAME")] + public string F_ModifyUserName { get; set; } + /// + /// 更新时间 + /// + [Column("F_MODIFYDATE")] + public DateTime? F_ModifyDate { get; set; } + /// + /// 收费年度 + /// + [Column("YEARNO")] + public string YearNo { get; set; } + /// + /// 项目代码 + /// + [Column("CHARGEITEMCODE")] + public string ChargeItemCode { get; set; } + /// + /// 项目名称 + /// + [Column("CHARGEITEMNAME")] + public string ChargeItemName { get; set; } + /// + /// 项目类型 固定/非固定 + /// + [Column("CHARGEITEMTYPE")] + public int? ChargeItemType { get; set; } + /// + /// 收费标准 decimal(10,2) + /// + [Column("STANDARD")] + public decimal? Standard { get; set; } + /// + /// 专业 + /// + [Column("MAJORNO")] + public string MajorNo { get; set; } + /// + /// 专业名称 + /// + [Column("MAJORNAME")] + public string MajorName { get; set; } + /// + /// 学校 + /// + [Column("F_SCHOOLID")] + public string F_SchoolId { get; set; } + /// + /// 备注 + /// + [Column("REMARK")] + public string Remark { get; set; } + /// + /// 审核标志 审核通过、审核不通过、待审核 + /// + [Column("F_STATUS")] + public int? F_Status { get; set; } + /// + /// 删除标记 0:未删除、1:删除,默认值:0 + /// + [Column("F_DELETEMARK")] + public int? F_DeleteMark { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.F_Id = Guid.NewGuid().ToString(); + this.F_CreateDate = DateTime.Now; + UserInfo userInfo = LoginUserInfo.Get(); + this.F_CreateUserId = userInfo.userId; + this.F_CreateUserName = userInfo.realName; + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.F_Id = keyValue; + this.F_ModifyDate = DateTime.Now; + UserInfo userInfo = LoginUserInfo.Get(); + this.F_ModifyUserId = userInfo.userId; + this.F_ModifyUserName = userInfo.realName; + } + #endregion + #region 扩展字段 + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs new file mode 100644 index 000000000..28e9fb701 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs @@ -0,0 +1,48 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.StuPayManage +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-29 18:34 + /// 描 述:专业收费项目设置 + /// + public interface SP_FeeItemIBLL + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取SP_FeeItem表实体数据 + /// + /// 主键 + /// + SP_FeeItemEntity GetSP_FeeItemEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, SP_FeeItemEntity entity); + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs new file mode 100644 index 000000000..37baf2dc4 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs @@ -0,0 +1,176 @@ +using Dapper; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Data; +using System.Text; + +namespace Learun.Application.TwoDevelopment.StuPayManage +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-29 18:34 + /// 描 述:专业收费项目设置 + /// + public class SP_FeeItemService : RepositoryFactory + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" + t.F_Id, + t.YearNo, + t.ChargeItemCode, + t.ChargeItemName, + t.MajorNo, + t.ChargeItemType, + t.Standard, + t.Remark + "); + strSql.Append(" FROM SP_FeeItem t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + if (!queryParam["YearNo"].IsEmpty()) + { + dp.Add("YearNo",queryParam["YearNo"].ToString(), DbType.String); + strSql.Append(" AND t.YearNo = @YearNo "); + } + if (!queryParam["ChargeItemType"].IsEmpty()) + { + dp.Add("ChargeItemType",queryParam["ChargeItemType"].ToString(), DbType.String); + strSql.Append(" AND t.ChargeItemType = @ChargeItemType "); + } + if (!queryParam["ChargeItemCode"].IsEmpty()) + { + dp.Add("ChargeItemCode", "%" + queryParam["ChargeItemCode"].ToString() + "%", DbType.String); + strSql.Append(" AND t.ChargeItemCode Like @ChargeItemCode "); + } + if (!queryParam["ChargeItemName"].IsEmpty()) + { + dp.Add("ChargeItemName", "%" + queryParam["ChargeItemName"].ToString() + "%", DbType.String); + strSql.Append(" AND t.ChargeItemName Like @ChargeItemName "); + } + if (!queryParam["MajorNo"].IsEmpty()) + { + dp.Add("MajorNo",queryParam["MajorNo"].ToString(), DbType.String); + strSql.Append(" AND t.MajorNo = @MajorNo "); + } + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取SP_FeeItem表实体数据 + /// + /// 主键 + /// + public SP_FeeItemEntity GetSP_FeeItemEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t=>t.F_Id == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, SP_FeeItemEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLL.cs new file mode 100644 index 000000000..5096e9861 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLL.cs @@ -0,0 +1,149 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; +using Learun.Application.Base.SystemModule; + +namespace Learun.Application.TwoDevelopment.StuPayManage +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-31 22:20 + /// 描 述:操作日志 + /// + public class SP_LogBLL : SP_LogIBLL + { + private SP_LogService sP_LogService = new SP_LogService(); + + #region 获取数据 + + /// + /// 获取列表数据 + /// + /// 查询参数 + /// + public IEnumerable GetList( string queryJson ) + { + try + { + return sP_LogService.GetList(queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取列表分页数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return sP_LogService.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取实体数据 + /// + /// 主键 + /// + public SP_LogEntity GetEntity(string keyValue) + { + try + { + return sP_LogService.GetEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + sP_LogService.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, SP_LogEntity entity) + { + try + { + sP_LogService.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLLStatic.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLLStatic.cs new file mode 100644 index 000000000..a22af67bb --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLLStatic.cs @@ -0,0 +1,59 @@ +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Learun.Application.TwoDevelopment.StuPayManage.SP_Log +{ + public static class SP_LogBLLStatic + { + private static SP_LogService sP_LogService = new SP_LogService(); + + public static void RemoveLog(int categoryId, string keepTime) + { + + try + { + sP_LogService.RemoveLog(categoryId, keepTime); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + + } + + + /// + /// 写日志 + /// + /// 对象 + public static void WriteLog(this SP_LogEntity logEntity) + { + try + { + sP_LogService.WriteLog(logEntity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogEntity.cs new file mode 100644 index 000000000..b1c331382 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogEntity.cs @@ -0,0 +1,158 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; +namespace Learun.Application.TwoDevelopment + +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-31 22:20 + /// 描 述:操作日志 + /// + public class SP_LogEntity + { + #region 实体成员 + /// + /// 日志主键 + /// + /// + [Column("F_LOGID")] + public string F_LogId { get; set; } + /// + /// 分类Id 1-登陆2-访问3-操作4-异常 + /// + /// + [Column("F_CATEGORYID")] + public int? F_CategoryId { get; set; } + /// + /// 来源对象主键 + /// + /// + [Column("F_SOURCEOBJECTID")] + public string F_SourceObjectId { get; set; } + /// + /// 来源日志内容 + /// + /// + [Column("F_SOURCECONTENTJSON")] + public string F_SourceContentJson { get; set; } + /// + /// 操作时间 + /// + /// + [Column("F_OPERATETIME")] + public DateTime? F_OperateTime { get; set; } + /// + /// 操作用户Id + /// + /// + [Column("F_OPERATEUSERID")] + public string F_OperateUserId { get; set; } + /// + /// 操作用户 + /// + /// + [Column("F_OPERATEACCOUNT")] + public string F_OperateAccount { get; set; } + /// + /// 操作类型Id + /// + /// + [Column("F_OPERATETYPEID")] + public string F_OperateTypeId { get; set; } + /// + /// 操作类型 + /// + /// + [Column("F_OPERATETYPE")] + public string F_OperateType { get; set; } + /// + /// 系统功能 + /// + /// + [Column("F_MODULE")] + public string F_Module { get; set; } + /// + /// IP地址 + /// + /// + [Column("F_IPADDRESS")] + public string F_IPAddress { get; set; } + /// + /// IP地址所在城市 + /// + /// + [Column("F_IPADDRESSNAME")] + public string F_IPAddressName { get; set; } + /// + /// 主机 + /// + /// + [Column("F_HOST")] + public string F_Host { get; set; } + /// + /// 浏览器 + /// + /// + [Column("F_BROWSER")] + public string F_Browser { get; set; } + /// + /// 执行结果状态 + /// + /// + [Column("F_EXECUTERESULT")] + public int? F_ExecuteResult { get; set; } + /// + /// 执行结果信息 + /// + /// + [Column("F_EXECUTERESULTJSON")] + public string F_ExecuteResultJson { get; set; } + /// + /// 备注 + /// + /// + [Column("F_DESCRIPTION")] + public string F_Description { get; set; } + /// + /// 删除标记 + /// + /// + [Column("F_DELETEMARK")] + public int? F_DeleteMark { get; set; } + /// + /// 有效标志 + /// + /// + [Column("F_ENABLEDMARK")] + public int? F_EnabledMark { get; set; } + /// + /// 来源 + /// + /// + [Column("F_SOURCE")] + public string F_Source { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.F_LogId = Guid.NewGuid().ToString(); + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.F_LogId = keyValue; + } + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogIBLL.cs new file mode 100644 index 000000000..f93a9c15d --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogIBLL.cs @@ -0,0 +1,55 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.StuPayManage +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-31 22:20 + /// 描 述:操作日志 + /// + public interface SP_LogIBLL + { + #region 获取数据 + + /// + /// 获取列表数据 + /// + /// 查询参数 + /// + IEnumerable GetList( string queryJson ); + /// + /// 获取列表分页数据 + /// + /// 分页参数 + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取实体数据 + /// + /// 主键 + /// + SP_LogEntity GetEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, SP_LogEntity entity); + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogService.cs new file mode 100644 index 000000000..00734a608 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogService.cs @@ -0,0 +1,274 @@ +using Dapper; +using Learun.Application.Base.SystemModule; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Learun.Application.TwoDevelopment.StuPayManage +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-07-31 22:20 + /// 描 述:操作日志 + /// + public class SP_LogService : RepositoryFactory + { + #region 构造函数和属性 + + private string fieldSql; + /// + /// 构造方法 + /// + public SP_LogService() + { + fieldSql=@" + t.F_LogId, + t.F_CategoryId, + t.F_SourceObjectId, + t.F_SourceContentJson, + t.F_OperateTime, + t.F_OperateUserId, + t.F_OperateAccount, + t.F_OperateTypeId, + t.F_OperateType, + t.F_Module, + t.F_IPAddress, + t.F_IPAddressName, + t.F_Host, + t.F_Browser, + t.F_ExecuteResult, + t.F_ExecuteResultJson, + t.F_Description, + t.F_DeleteMark, + t.F_EnabledMark, + t.F_Source + "; + } + #endregion + + #region 获取数据 + + /// + /// 获取列表数据 + /// + /// 条件参数 + /// + public IEnumerable GetList( string queryJson ) + { + try + { + //参考写法 + //var queryParam = queryJson.ToJObject(); + // 虚拟参数 + //var dp = new DynamicParameters(new { }); + //dp.Add("startTime", queryParam["StartTime"].ToDate(), DbType.DateTime); + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(fieldSql); + strSql.Append(" FROM SP_Log t "); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString()); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取列表分页数据 + /// + /// 分页参数 + /// 条件参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(fieldSql); + strSql.Append(" FROM SP_Log t "); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取实体数据 + /// + /// 主键 + /// + public SP_LogEntity GetEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 清空日志 + /// + /// 日志分类Id + /// 保留时间段内 + public void RemoveLog(int categoryId, string keepTime) { + try + { + DateTime operateTime = DateTime.Now; + if (keepTime == "7")//保留近一周 + { + operateTime = DateTime.Now.AddDays(-7); + } + else if (keepTime == "1")//保留近一个月 + { + operateTime = DateTime.Now.AddMonths(-1); + } + else if (keepTime == "3")//保留近三个月 + { + operateTime = DateTime.Now.AddMonths(-3); + } + var expression = LinqExtensions.True(); + + this.BaseRepository("CollegeMIS").Delete(expression); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 写日志 + /// + /// 对象 + public void WriteLog(SP_LogEntity logEntity) + { + try + { + logEntity.F_LogId = Guid.NewGuid().ToString(); + logEntity.F_OperateTime = DateTime.Now; + logEntity.F_DeleteMark = 0; + logEntity.F_EnabledMark = 1; + logEntity.F_IPAddress = Net.Ip; + logEntity.F_Host = Net.Host; + logEntity.F_Browser = Net.Browser; + this.BaseRepository("CollegeMIS").Insert(logEntity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + + } + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t=>t.F_LogId == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, SP_LogEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + } +} From 741239d465af81845a000c88eb57c9a6ec5daa78 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Tue, 1 Aug 2023 21:03:21 +0800 Subject: [PATCH 03/50] =?UTF-8?q?=E8=A1=A8=E7=BB=93=E6=9E=84=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1.dmx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../系统文档/表结构设计.dmx | 1648 +++++++++++++++++ 1 file changed, 1648 insertions(+) create mode 100644 Learun.Framework.Ultimate V7/Doc文档/系统文档/表结构设计.dmx diff --git a/Learun.Framework.Ultimate V7/Doc文档/系统文档/表结构设计.dmx b/Learun.Framework.Ultimate V7/Doc文档/系统文档/表结构设计.dmx new file mode 100644 index 000000000..f3b0973e7 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Doc文档/系统文档/表结构设计.dmx @@ -0,0 +1,1648 @@ + + + + 43543331 + 10 + 1 + + + + + + 1 + 学生缴费 + 2023/5/31 10:59:08 + 1 + SQLSERVER + TCtMetaSqlsvrDb + + + + 10 + + + + + + 7 + readme + TEXT + create table SP_Base +( + F_Id VARCHAR(52) not null comment '主键ID', + F_CreateUserId VARCHAR(52) not null comment '创建人ID', + F_CreateUserName VARCHAR(52) not null comment '创建人', + F_CreateDate DATETIME not null comment '创建时间', + F_ModifyUserId VARCHAR(52) comment '更新人ID', + F_ModifyUserName VARCHAR(52) comment '修改用户', + F_ModifyDate DATETIME comment '更新时间', + F_Sort int not null comment '排序', + F_DeleteMark int not null comment '删除标记', + F_Name VARCHAR(100) not null comment '名称', + F_Description VARCHAR(1000) comment '备注' +) comment '学生缴费·基础表'; +alter table SP_Base + add constraint PK_SP_Base_F_Id primary key (F_Id); + +InvoiceStatus(开票状态) String + + +SP_Log(操作日志) + 2023/5/31 18:10:46 + 1 + Left=6.50 +Top=9.33 +BLeft=3.25 +BTop=4.67 + + + + + + + + 14 + SP_Base + 学生缴费·基础表 + 2023/7/23 19:13:22 + 2 + Left=10.00 +Top=736.00 +BLeft=0.00 +BTop=0.00 + + + + 11 + + + + + + 12 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 13 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 14 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 15 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 16 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 17 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 18 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 19 + F_Sort + 8 + 排序码 + 2 + + + + 20 + F_DeleteMark + 9 + 删除标记 + 2 + + + + 21 + F_Name + 10 + 名称 + 1 + 100 + + + + 22 + F_Description + 11 + 备注 + 1 + 1000 + + + + 3 + SP_FeeItem + 收费标准 + 2023/7/25 22:19:19 + 3 + Left=10.00 +Top=1034.00 +BLeft=0.00 +BTop=0.00 + + + + 19 + + + + + + 15 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 16 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 17 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 18 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 30 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 31 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 32 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 19 + YearNo + 8 + 收费年度 + 1 + 50 + + + + 20 + ChargeItemCode + 9 + 项目代码 + 1 + 50 + + + + 21 + ChargeItemName + 10 + 项目名称 + 1 + 100 + + + + 22 + ChargeItemType + 固定/非固定 + 11 + 项目类型 + 2 + 1 + 2 + + + + 23 + Standard + decimal(10,2) + 12 + 收费标准 + 3 + 10 + + + + 29 + MajorNo + 13 + 专业 + 1 + 52 + + + + 33 + MajorName + 14 + 专业名称 + 1 + 100 + + + + 25 + F_SchoolId + 15 + 学校 + 1 + 52 + + + + 26 + Remark + 16 + 备注 + 1 + 1000 + + + + 27 + F_Status + 草稿、审核中、审核通过、审核不通过 + 17 + 审核标志 + 2 + 2 + + + + 28 + F_DeleteMark + 0:未删除、1:删除,默认值:0 + 18 + 删除标记 + 2 + 2 + + + + 34 + ProcessId + 19 + 流程id + 1 + 52 + + + + 5 + SP_StuEnrollFeeItem + 学生缴费项目 + 2023/7/25 23:37:08 + 4 + Left=10.00 +Top=1520.00 +BLeft=0.00 +BTop=0.00 + + + + 27 + + + + + + 14 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 15 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 16 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 17 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 18 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 19 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 20 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 13 + F_SchoolId + 8 + 学校 + 1 + 52 + + + + 23 + StuNo + 9 + 学号 + 1 + 52 + + + + 24 + StuName + 10 + 姓名 + 1 + 52 + + + + 27 + MajorNo + 11 + 专业 + 1 + 52 + + + + 26 + MajorName + 12 + 专业名称 + 1 + 100 + + + + 11 + DeptNo + 13 + 系所 + 1 + 52 + + + + 12 + ClassNo + 14 + 班级 + 1 + 52 + + + + 26 + YearNo + 15 + 收费年度 + 1 + 50 + + + + 21 + ChargeItemCode + 16 + 项目代码 + 1 + 50 + + + + 22 + ChargeItemName + 17 + 项目名称 + 1 + 100 + + + + 23 + ChargeItemType + 固定/非固定 + 18 + 项目类型 + 2 + 1 + 1 + + + + 24 + Standard + decimal(10,2) + 19 + 收费标准 + 3 + 10 + + + + 25 + Remark + 20 + 备注 + 1 + 1000 + + + + 32 + F_Status + 开启、停止 + 21 + 状态标志 + 2 + SP_Log + 1 + + + + 28 + IsCancel + 作废/恢复 + 22 + 作废 + 1 + 52 + + + + 29 + YJAmount + 23 + 应缴余额 + 3 + 10 + + + + 30 + SJAmount + 24 + 缴费金额 + 3 + 10 + + + + 31 + ExcessAmount + 25 + 超出应收额 + 3 + 10 + + + + 27 + PayStatus + 未缴费/部分缴费/缴费完成 + 26 + 缴费状态 + 2 + SP_Log + 1 + + + + 32 + RefundStatus + 已退费/未退费 + 27 + 退费状态 + 2 + 1 + + + + 6 + SP_StuEnrollFeeItemDetail + 学生缴费明细 + 2023/7/25 23:42:46 + 5 + Left=10.00 +Top=1802.00 +BLeft=0.00 +BTop=0.00 + + + + 27 + + + + + + 13 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 14 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 15 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 16 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 17 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 18 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 19 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 20 + F_SchoolId + 8 + 学校 + 1 + 52 + + + + 38 + OrderId + 9 + 订单号 + 1 + 100 + + + + 21 + StuNo + 10 + 学号 + 1 + 52 + + + + 22 + StuName + 11 + 姓名 + 1 + 52 + + + + 23 + MajorNo + 12 + 专业 + 1 + 52 + + + + 24 + MajorName + 13 + 专业名称 + 1 + 100 + + + + 25 + DeptNo + 14 + 系所 + 1 + 52 + + + + 26 + ClassNo + 15 + 班级 + 1 + 52 + + + + 27 + YearNo + 16 + 收费年度 + 1 + 50 + + + + 28 + ChargeItemCode + 17 + 项目代码 + 1 + 50 + + + + 29 + ChargeItemName + 18 + 项目名称 + 1 + 100 + + + + 30 + ChargeItemType + 固定/非固定 + 19 + 项目类型 + 2 + 1 + 1 + + + + 31 + Standard + decimal(10,2) + 20 + 收费标准 + 3 + 10 + + + + 32 + Remark + 21 + 备注 + 1 + 1000 + + + + 33 + PayStatus + 未缴费/部分缴费/缴费完成 + 22 + 缴费状态 + 2 + SP_Log + 1 + + + + 22 + PayType + 线上/现金/贷款 + 23 + 缴费方式 + 1 + 52 + + + + 23 + YJAmount + 24 + 应缴余额 + 3 + 10 + + + + 15 + SJAmount + 25 + 缴费金额 + 3 + 10 + + + + 39 + ExcessAmount + 26 + 超出应收额 + 3 + 10 + + + + 36 + IsCancel + 作废/恢复 + 27 + 作废 + 1 + 52 + + + + 12 + SP_StuLoanCashFeeOrder + 学生贷款现金缴费单 + 2023/7/29 12:45:04 + 6 + + + + 14 + + + + + + 23 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 24 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 25 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 26 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 27 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 28 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 29 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 30 + OrderId + 8 + 订单号 + 1 + 100 + + + + 40 + YearNo + 9 + 收费年度 + 1 + 50 + + + + 31 + StuNo + 10 + 学号 + 1 + 52 + + + + 39 + StuName + 11 + 姓名 + 1 + 52 + + + + 34 + PayAmount + 12 + 缴费金额 + 3 + 10 + + + + 38 + PayMode + 现金/贷款 + 13 + 缴费方式 + 1 + 100 + + + + 41 + Remark + 14 + 备注 + 1 + 1000 + + + + 10 + SP_StuEnrollFeeOrder + 缴费订单 + 2023/7/29 11:30:29 + 7 + Left=10.00 +Top=2670.00 +BLeft=0.00 +BTop=0.00 + + + + 17 + + + + + + 23 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 24 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 25 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 26 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 27 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 28 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 29 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 42 + YearNo + 8 + 收费年度 + 1 + 52 + + + + 43 + StuNo + 9 + 学号 + 1 + 52 + + + + 33 + OrderId + 10 + 订单号 + 1 + 100 + + + + 32 + YJAmount + 11 + 应缴金额 + 3 + 10 + + + + 35 + SJAmount + 12 + 实缴金额 + 3 + 10 + + + + 36 + Status + 13 + 付款状态 + 2 + 10 + + + + 34 + PlaceOrderTime + 14 + 生成订单时间 + 4 + + + + 38 + PayTime + 15 + 付款时间 + 4 + + + + 37 + PayMode + 16 + 付款方式 + 1 + 100 + + + + 40 + BankOrder + 17 + 银行订单号 + 1 + 100 + + + + 11 + SP_StuEnrollFeeOrderDetail + 缴费订单明细 + 2023/7/29 11:39:34 + 8 + Left=290.00 +Top=2670.00 +BLeft=0.00 +BTop=0.00 + + + + 12 + + + + + + 23 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 24 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 25 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 26 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 27 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 28 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 29 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 32 + OrderId + 8 + 订单号 + 1 + 100 + + + + 40 + ChargeItemName + 9 + 缴费项目 + 1 + 100 + + + + 41 + ChargeItemCode + 10 + 缴费项目code + 1 + 52 + + + + 33 + YJAmount + 11 + 应缴金额 + 3 + 10 + + + + 34 + SJAmount + 12 + 实缴金额 + 3 + 10 + + + + 9 + SP_StuEnrollInvoiceRecord + 开票记录 + 2023/7/29 9:04:35 + 9 + Left=605.00 +Top=2670.00 +BLeft=0.00 +BTop=0.00 + + + + 14 + + + + + + 13 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 14 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 15 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 16 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 17 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 18 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 19 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 26 + OrderId + 8 + 订单号 + 1 + 100 + + + + 20 + YearNo + 9 + 收费年度 + 1 + 52 + + + + 22 + StuNo + 10 + 学号 + 1 + 52 + + + + 21 + billNo + 11 + 电子票据号 + 1 + 52 + + + + 24 + random + 12 + 电子校验码 + 1 + 52 + + + + 23 + billStatus + 13 + 开票状态 + 2 + 1 + + + + 25 + billUrl + 14 + 发票地址 + 1 + + + + 8 + SP_Approval + 审核记录 + 2023/7/29 8:31:59 + 10 + Left=10.00 +Top=2340.00 +BLeft=0.00 +BTop=0.00 + + + + 13 + + + + + + 23 + F_Id + 1 + 主键 + 1 + 1 + 52 + + + + 24 + F_CreateUserId + 2 + 创建人ID + 1 + 1 + 52 + + + + 25 + F_CreateUserName + 3 + 创建人 + 1 + 1 + 52 + + + + 26 + F_CreateDate + 4 + 创建时间 + 4 + 1 + + + + 27 + F_ModifyUserId + 5 + 更新人ID + 1 + 52 + + + + 28 + F_ModifyUserName + 6 + 更新人 + 1 + 52 + + + + 29 + F_ModifyDate + 7 + 更新时间 + 4 + + + + 12 + ActionId + 8 + 业务ID + 1 + 3 + 52 + + + + 13 + ActionType + 业务类型 + 9 + 业务类型 + 1 + 100 + + + + 14 + ActionName + 业务名称 + 10 + 业务名称 + 1 + 1000 + + + + 16 + AppOption + 11 + 审核意见 + 1 + 1000 + + + + 30 + Remark + 12 + 备注 + 1 + 1000 + + + + 31 + F_Status + 字典:待审核、审核通过、审核拒绝 + 13 + 状态标志 + 2 + SP_Log + 1 + + + + \ No newline at end of file From 33fb37e6918f53a13bad95a0f8b3008d014fd881 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Fri, 4 Aug 2023 21:54:21 +0800 Subject: [PATCH 04/50] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SP_FeeItemController.cs | 29 ++++++-- .../StuPayManage/Views/SP_FeeItem/Form.cshtml | 22 +++--- .../StuPayManage/Views/SP_FeeItem/Form.js | 2 + .../Views/SP_FeeItem/Index.cshtml | 5 ++ .../StuPayManage/Views/SP_FeeItem/Index.js | 33 +++++++-- .../XmlConfig/database.config | 7 +- .../StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs | 38 ++++++++++ .../StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs | 14 ++++ .../SP_FeeItem/SP_FeeItemService.cs | 70 ++++++++++++++++--- 9 files changed, 192 insertions(+), 28 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs index e2a483b05..fa4ab32db 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs @@ -5,6 +5,9 @@ using System.Web.Mvc; using System.Collections.Generic; using Learun.Util.Operat; using Learun.Application.TwoDevelopment.EducationalAdministration; +using System.Text.Json.Nodes; +using Newtonsoft.Json; +using System.Linq; namespace Learun.Application.Web.Areas.StuPayManage.Controllers { @@ -28,7 +31,7 @@ namespace Learun.Application.Web.Areas.StuPayManage.Controllers [HttpGet] public ActionResult Index() { - return View(); + return View(); } /// /// 表单页 @@ -37,7 +40,7 @@ namespace Learun.Application.Web.Areas.StuPayManage.Controllers [HttpGet] public ActionResult Form() { - return View(); + return View(); } #endregion @@ -73,7 +76,7 @@ namespace Learun.Application.Web.Areas.StuPayManage.Controllers [AjaxOnly] public ActionResult GetFormData(string keyValue) { - var SP_FeeItemData = sP_FeeItemIBLL.GetSP_FeeItemEntity( keyValue ); + var SP_FeeItemData = sP_FeeItemIBLL.GetSP_FeeItemEntity(keyValue); var jsonData = new { SP_FeeItem = SP_FeeItemData, }; @@ -92,13 +95,31 @@ namespace Learun.Application.Web.Areas.StuPayManage.Controllers [AjaxOnly] public ActionResult DeleteForm(string keyValue) { - SP_FeeItemEntity entity =sP_FeeItemIBLL.GetSP_FeeItemEntity(keyValue); + SP_FeeItemEntity entity = sP_FeeItemIBLL.GetSP_FeeItemEntity(keyValue); if (entity == null) throw new System.Exception("主键无效"); sP_FeeItemIBLL.DeleteEntity(keyValue); //return Success("删除成功!"); return Success_SP("删除成功!", "收费项目", OperationType.Delete, entity.F_Id, entity.ToJson()); } + + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForms(string keyValue) { + + var jsonObj = new { + ids = string.Join(",", keyValue.Split(',').Select(x => $"'{x}'")) + }; + + string queryJson = JsonConvert.SerializeObject(jsonObj); + IEnumerable entitys = sP_FeeItemIBLL.GetList(queryJson); + if (entitys == null || entitys.Count()==0) throw new System.Exception("查无数据"); + sP_FeeItemIBLL.DeleteEntity(entitys); + //return Success("删除成功!"); + return Success_SP("删除成功!", "收费项目", OperationType.Delete, null, entitys.ToJson()); + + } + /// /// 保存实体数据(新增、修改) /// diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml index b9825b012..fd9e85c82 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml @@ -7,29 +7,33 @@
    收费年度*
    -
    +
    项目代码*
    -
    +
    项目名称*
    -
    +
    收费标准*
    -
    +
    项目类型*
    -
    +
    -
    +
    专业*
    -
    +
    -
    +
    备注
    - + +
    +
    @Html.AppendJsFile("/Areas/StuPayManage/Views/SP_FeeItem/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js index 605f59284..af7c33f81 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js @@ -25,6 +25,8 @@ var bootstrap = function ($, learun) { value: 'value', text: 'text' }); + $('#F_Status').lrDataItemSelect({ code: 'SP_AppStatus' }); + $('#F_Status').lrselectSet("0"); }, initData: function () { if (!!keyValue) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml index cb0e5ff79..12c8a0ee9 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml @@ -12,6 +12,7 @@
    收费年度
    +
    项目类型
    @@ -29,6 +30,10 @@
    专业
    +
    +
    审核状态
    +
    +
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js index 8d9499d86..ff6ae10b1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js @@ -15,9 +15,18 @@ var bootstrap = function ($, learun) { bind: function () { $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { page.search(queryJson); - }, 220, 400); + }, 250, 400); + //收费年度 + $('#YearNo').lrselect({ + placeholder: "请选择", + allowSearch: true, + url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', + value: 'value', + text: 'text' + }); $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); - $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo',value: 'majorno',text: 'majorname' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + $('#F_Status').lrDataItemSelect({ code: 'SP_AppStatus' }); // 刷新 $('#lr_refresh').on('click', function () { location.reload(); @@ -57,7 +66,7 @@ var bootstrap = function ($, learun) { if (learun.checkrow(keyValue)) { learun.layerConfirm('是否确认删除该项!', function (res) { if (res) { - learun.deleteForm(top.$.rootUrl + '/StuPayManage/SP_FeeItem/DeleteForm', { keyValue: keyValue}, function () { + learun.deleteForm(top.$.rootUrl + '/StuPayManage/SP_FeeItem/DeleteForms', { keyValue: keyValue}, function () { refreshGirdData(); }); } @@ -115,10 +124,24 @@ var bootstrap = function ($, learun) { }); }}, { label: "收费标准", name: "Standard", width: 100, align: "center"}, - { label: "备注", name: "Remark", width: 100, align: "left"}, + { label: "备注", name: "Remark", width: 100, align: "left" }, + { label: "审核状态", name: "F_Status", width: 100, align: "center", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'SP_AppStatus', + callback: function (_data) { + callback(_data.text); + } + }); + } + } ], mainId:'F_Id', - isPage: true + isPage: true, + isMultiselect: true, + sord: 'desc', + sidx: 'F_CreateDate' }); page.search(); }, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/database.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/database.config index 63a1b93ce..fed5c5997 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/database.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/database.config @@ -40,8 +40,11 @@ - - + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs index 8aae83789..9ab4c5e5d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs @@ -18,6 +18,25 @@ namespace Learun.Application.TwoDevelopment.StuPayManage #region 获取数据 + public IEnumerable GetList(string queryJson) + { + try + { + return sP_FeeItemService.GetList(queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + /// /// 获取页面显示列表数据 /// @@ -94,6 +113,25 @@ namespace Learun.Application.TwoDevelopment.StuPayManage } } + public void DeleteEntity(IEnumerable entities) { + + try + { + sP_FeeItemService.DeleteEntity(entities); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + /// /// 保存实体数据(新增、修改) /// diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs index 28e9fb701..1647615cc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs @@ -15,6 +15,13 @@ namespace Learun.Application.TwoDevelopment.StuPayManage { #region 获取数据 + /// + /// 获取列表数据 + /// + /// + /// + IEnumerable GetList(string queryJson); + /// /// 获取页面显示列表数据 /// @@ -36,6 +43,13 @@ namespace Learun.Application.TwoDevelopment.StuPayManage ///
    /// 主键 void DeleteEntity(string keyValue); + + /// + /// 批量删除实体数据 + /// + /// 实体数据列表 + void DeleteEntity(IEnumerable entities); + /// /// 保存实体数据(新增、修改) /// diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs index 37baf2dc4..09f2df278 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs @@ -19,6 +19,43 @@ namespace Learun.Application.TwoDevelopment.StuPayManage { #region 获取数据 + /// + /// 获取列表数据 + /// + /// + /// + public IEnumerable GetList(string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append(" SELECT t.*"); + strSql.Append(" FROM SP_FeeItem t "); + strSql.Append(" where 1=1 "); + + //参数写法 + var queryParam=queryJson.ToJObject(); + // 虚拟参数 + var dp=new DynamicParameters(new {}); + if (!queryParam["ids"].IsEmpty()) { + dp.Add("ids", $"{queryParam["ids"].ToString()}", DbType.String); + strSql.Append(" and t.F_Id in ( @ids ) "); + } + + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } /// /// 获取页面显示列表数据 /// @@ -32,14 +69,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage var strSql = new StringBuilder(); strSql.Append("SELECT "); strSql.Append(@" - t.F_Id, - t.YearNo, - t.ChargeItemCode, - t.ChargeItemName, - t.MajorNo, - t.ChargeItemType, - t.Standard, - t.Remark + * "); strSql.Append(" FROM SP_FeeItem t "); strSql.Append(" WHERE 1=1 "); @@ -137,6 +167,30 @@ namespace Learun.Application.TwoDevelopment.StuPayManage } } + + /// + /// 批量删除实体数据 + /// + /// 实体数据列表 + public void DeleteEntity(IEnumerable entities) + { + try + { + this.BaseRepository("CollegeMIS").Delete>(entities); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + /// /// 保存实体数据(新增、修改) /// From 11b367ebea5fed728cd726edea2b16eebb34e182 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Fri, 4 Aug 2023 21:55:48 +0800 Subject: [PATCH 05/50] dbconfig --- .../XmlConfig/database.config | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/database.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/database.config index 63a1b93ce..c56dd0a31 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/database.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/database.config @@ -1,45 +1,5 @@  - - - - - - - - - - - - - - - - - - - - From f9def0d5da63f30accbc33dc7190ff21b1610b20 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sat, 5 Aug 2023 22:10:55 +0800 Subject: [PATCH 06/50] =?UTF-8?q?=E6=94=B6=E8=B4=B9=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=EF=BC=8C=E6=94=B6=E8=B4=B9=E6=A0=87=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/FinaChargeItemController.cs | 33 +++++- .../FinaChargesStandardController.cs | 16 +-- .../Views/FinaChargeItem/Form.cshtml | 20 ++-- .../Views/FinaChargeItem/Form.js | 8 +- .../Views/FinaChargeItem/Index.cshtml | 2 + .../Views/FinaChargeItem/Index.js | 85 ++++++++++++--- .../Views/FinaChargeItem/ShowIndex.cshtml | 2 +- .../Views/FinaChargesStandard/Form.cshtml | 12 +-- .../Views/FinaChargesStandard/Form.js | 37 ++++--- .../Views/FinaChargesStandard/Index.cshtml | 11 +- .../Views/FinaChargesStandard/Index.js | 100 ++++++++++-------- .../StuEnroll/StuEnrollService.cs | 34 +++--- .../FinaChargeItem/FinaChargeItemBLL.cs | 56 +++++++++- .../FinaChargeItem/FinaChargeItemEntity.cs | 49 +++++++-- .../FinaChargeItem/FinaChargeItemIBLL.cs | 3 + .../FinaChargeItem/FinaChargeItemService.cs | 87 ++++++++++++++- .../FinaChargesStandardBLL.cs | 8 +- .../FinaChargesStandardEntity.cs | 34 ++---- .../FinaChargesStandardIBLL.cs | 6 +- .../FinaChargesStandardService.cs | 76 +++++++------ 20 files changed, 473 insertions(+), 206 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeItemController.cs index 4ef8f4a79..7565bfaf7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeItemController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeItemController.cs @@ -119,7 +119,20 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers #endregion #region 提交数据 - + [HttpPost] + [AjaxOnly] + public ActionResult Lock(string keyValue) + { + finaChargeItemIBLL.Lock(keyValue); + return Success("启用成功!"); + } + [HttpPost] + [AjaxOnly] + public ActionResult UnLock(string keyValue) + { + finaChargeItemIBLL.UnLock(keyValue); + return Success("停用成功!"); + } /// /// 删除实体数据 /// 主键 @@ -160,13 +173,29 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers } else { - if (model.ChargeItemID != Convert.ToInt32(keyValue)) + if (model.ChargeItemID != keyValue) { return Fail("收费项目名称不能重复!"); } } } + var modelcode= finaChargeItemIBLL.GetFinaChargeItemEntityByChargeItemCode(entity.ChargeItemCode); + if (modelcode != null) + { + if (string.IsNullOrEmpty(keyValue)) + { + return Fail("收费项目代码不能重复!"); + } + else + { + if (modelcode.ChargeItemID != keyValue) + { + return Fail("收费项目代码不能重复!"); + } + } + } + entity.CreateDate = DateTime.Now; entity.CreateUserId = loginUserInfo.userId; entity.CreateUserName = loginUserInfo.realName; diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs index 11ce3c47c..b95d4b625 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs @@ -152,9 +152,9 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers /// [HttpGet] [AjaxOnly] - public ActionResult GetFormData(string majorNo, string academicYearNo, string semester, string grade) + public ActionResult GetFormData(string majorNo, string syear,string grade) { - var FinaChargesStandardData = finaChargesStandardIBLL.GetFinaChargesStandardListByMajorNo(majorNo, academicYearNo, semester, grade); + var FinaChargesStandardData = finaChargesStandardIBLL.GetFinaChargesStandardListByMajorNo(majorNo, syear, grade); var jsonData = new { FinaChargesStandard = FinaChargesStandardData, @@ -187,11 +187,11 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers /// /// [AjaxOnly] - public ActionResult GetFinaChargesStandardListByMajorNo(string majorNo, string academicYearNo, string semester, string grade) + public ActionResult GetFinaChargesStandardListByMajorNo(string majorNo, string syear, string grade) { - var FinaChargesStandardData = finaChargesStandardIBLL.GetFinaChargesStandardListByMajorNo(majorNo, academicYearNo, semester, grade); + var FinaChargesStandardData = finaChargesStandardIBLL.GetFinaChargesStandardListByMajorNo(majorNo, syear, grade); - var hasStandardData = FinaChargesStandardData.Where(x => x.ChargeStandardID > 0); + var hasStandardData = FinaChargesStandardData.Where(x => x.ChargeStandardID !=""); var nohasStandardData = FinaChargesStandardData.Except(hasStandardData); var hasStandardResult = hasStandardData.Select(x => new @@ -234,7 +234,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers return Fail("收费标准不存在!"); } //判断某专业收费标准是否已使用 - var isCharge = finaChargesStandardIBLL.IsChargeByMajorNo(entity.MajorNo, entity.AcademicYearNo, entity.Semester, entity.Grade); + var isCharge = finaChargesStandardIBLL.IsChargeByMajorNo(entity.DeptNo,entity.MajorNo, entity.SYear, entity.Grade); if (isCharge) { return Fail("该信息正在被系统使用,不能删除!"); @@ -250,12 +250,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers /// [HttpPost] [AjaxOnly] - public ActionResult SaveForm(string majorNo, string academicYearNo, string semester, string grade, string strEntity) + public ActionResult SaveForm(string deptno,string majorNo, string syear, string grade, string strEntity) { var aa = strEntity.ToObject>(); var aaa = aa.Where(x => x.Standard.HasValue && x.Standard.Value > 0).ToList(); - finaChargesStandardIBLL.SaveFinaChargesStandardList(majorNo, academicYearNo, semester, grade, aaa); + finaChargesStandardIBLL.SaveFinaChargesStandardList(deptno,majorNo, syear, grade, aaa); return Success("保存成功!"); } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.cshtml index 7df9dad43..4d69edd78 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.cshtml @@ -3,21 +3,25 @@ Layout = "~/Views/Shared/_Form.cshtml"; }
    -
    +
    收费项目名称*
    -
    -
    备注
    - +
    +
    收费项目编号*
    +
    -
    -
    系统保留标志
    -
    +
    +
    收费项目类型*
    +
    -
    +
    优先级*
    +
    +
    备注
    + +
    @Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.js index e6e4a2768..8989b15d2 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Form.js @@ -13,15 +13,9 @@ var bootstrap = function ($, learun) { $('.lr-form-wrap').lrscroll(); page.bind(); page.initData(); - - //默认:系统保留标志为否 - $('#KeyWordMark').find('input').eq(1).trigger('click'); }, bind: function () { - $('#KeyWordMark').lrRadioCheckbox({ - type: 'radio', - code: 'YesOrNoInt', - }); + $('#ChargeItemType').lrDataItemSelect({ code:'ChargeItemType'}); }, initData: function () { if (!!keyValue) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.cshtml index 0f5929986..a75342dc0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.cshtml @@ -36,6 +36,8 @@  录入  修改  删除 +  启用 +  停用
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.js index 317d68a9a..213069663 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.js @@ -58,10 +58,14 @@ var bootstrap = function ($, learun) { $('#lr_delete').on('click', function () { var keyValue = $('#gridtable').jfGridValue('ChargeItemID'); if (learun.checkrow(keyValue)) { - var keyWordMark = $('#gridtable').jfGridValue('KeyWordMark'); - if (keyWordMark == "1") { - learun.alert.warning("系统保留项目,不允许删除!"); - return false; + if (keyValue.indexOf(',') != -1) { + learun.alert.warning("只能选择一条记录进行删除!"); + return; + } + var CheckMark = $('#gridtable').jfGridValue('CheckMark'); + if (CheckMark.indexOf('true') != -1) { + learun.alert.warning("删除失败,选中记录中包含已启用项目!"); + return; } learun.layerConfirm('是否确认删除该项!', function (res) { if (res) { @@ -72,27 +76,82 @@ var bootstrap = function ($, learun) { }); } }); + //启用 + $('#lr_lock').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('ChargeItemID'); + if (learun.checkrow(keyValue)) { + var CheckMark = $('#gridtable').jfGridValue('CheckMark').toString(); + if (CheckMark.indexOf('true') != -1) { + learun.alert.warning("选中记录中包含已启用项目!"); + return; + } + //if (CheckMark === true) { + // learun.alert.warning("当前项目已启用!"); + // return; + //} + learun.layerConfirm('是否确认启用该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeItem/Lock', { keyValue: keyValue }, function () { + refreshGirdData(); + }); + } + }); + } + }); + //停用 + $('#lr_unlock').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('ChargeItemID'); + if (learun.checkrow(keyValue)) { + var CheckMark = $('#gridtable').jfGridValue('CheckMark').toString(); + if (CheckMark.indexOf('false') != -1) { + learun.alert.warning("选中记录中包含已停用项目!"); + return; + } + //if (CheckMark === false) { + // learun.alert.warning("当前项目还未审核不需要去审核!"); + // return; + //} + learun.layerConfirm('是否确认停用该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeItem/UnLock', { keyValue: keyValue }, function () { + refreshGirdData(); + }); + } + }); + } + }); }, // 初始化列表 initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ + $('#gridtable').jfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeItem/GetPageList', headData: [ - { label: "收费项目名称", name: "ChargeItemName", width: 200, align: "left"}, + { label: "收费项目名称", name: "ChargeItemName", width: 200, align: "left" }, + { label: "收费项目编号", name: "ChargeItemCode", width: 200, align: "left" }, + { + label: "收费项目类型", name: "ChargeItemType", width: 200, align: "left", formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + { label: "优先级", name: "priority", width: 100, align: "left" }, { label: "备注", name: "Remark", width: 200, align: "left"}, - { label: "系统保留标志", name: "KeyWordMark", width: 100, align: "left", + { + label: "是否启用", name: "CheckMark", width: 100, align: "left", formatter: function (cellvalue, rowObject) { return cellvalue == "1" ? "" : ""; } - }, - { label: "优先级", name: "priority", width: 100, align: "left" }, - { label: "时间", name: "CreateDate", width: 130, align: "left" }, - { label: "创建用户", name: "CreateUserName", width: 100, align: "left" }, + } ], + isMultiselect: true, mainId:'ChargeItemID', isPage: true, - sidx: 'priority', - sord:'asc' + sidx: 'ChargeItemCode' }); page.search(); }, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/ShowIndex.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/ShowIndex.cshtml index ddf9438ff..cfced5f70 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/ShowIndex.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/ShowIndex.cshtml @@ -103,7 +103,7 @@
    - +
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Form.cshtml index 155f7e8f6..d7d482690 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Form.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Form.cshtml @@ -4,17 +4,17 @@ }
    -
    学年
    - -
    -
    -
    学期
    - +
    缴费年度
    +
    年级
    +
    +
    系部编号
    + +
    专业编号
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Form.js index 06af87106..a0edeb6a1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Form.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Form.js @@ -5,9 +5,9 @@ * 描 述:收费标准设置 */ var acceptClick; -var keyValue = request('keyValue');//专业编号 -var academicYearNo = request('academicYearNo'); -var semester = request('semester'); +var deptno = request('deptno'); +var majorno = request('majorno'); +var syear = request('syear'); var grade = request('grade'); var bootstrap = function ($, learun) { "use strict"; @@ -19,16 +19,30 @@ var bootstrap = function ($, learun) { }, bind: function () { //绑定值 - $('#AcademicYearNo').val(academicYearNo); - $('#Semester').val(semester); + $('#SYear').val(syear); $('#Grade').val(grade); - $('#MajorNo').val(keyValue); + $('#DeptNo').val(deptno); + $('#MajorNo').val(majorno); //收费项目下的收费标准表格 $('#FinaChargesStandard').jfGrid({ headData: [ { label: '收费项目名称', name: 'ChargeItemName', width: 200, align: 'left' }, + { + label: '收费项目编号', name: 'ChargeItemCode', width: 200, align: 'left' + }, + { + label: '收费项目类型', name: 'ChargeItemType', width: 200, align: 'left', formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, { label: '收费标准', name: 'Standard', width: 100, align: 'left' , edit: { @@ -38,13 +52,12 @@ var bootstrap = function ($, learun) { ], isEdit: false, height: 400, - sidx: 'ChargeItemID', - sord: 'asc' + sidx: 'ChargeItemCode' }); }, initData: function () { - if (!!keyValue) { - $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/GetFormData?majorNo=' + keyValue + '&academicYearNo=' + academicYearNo + '&semester=' + semester + '&grade=' + grade + '', function (data) { + if (!!majorno) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/GetFormData?majorNo=' + majorno + '&syear=' + syear + '&grade=' + grade + '', function (data) { for (var id in data) { if (!!data[id].length && data[id].length > 0) { $('#' + id).jfGridSet('refreshdata', data[id]); @@ -67,7 +80,7 @@ var bootstrap = function ($, learun) { for (var i = 0; i < data.length; i++) { var item = data[i]; if (item.Standard != null && !isNumber(item.Standard)) { - learun.alert.warning("收费标准中存在非法字符!"); + learun.alert.warning("收费标准必须是数字!"); return false; } } @@ -75,7 +88,7 @@ var bootstrap = function ($, learun) { var postData = { strEntity: JSON.stringify(data) }; - $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/SaveForm?majorNo=' + keyValue + '&academicYearNo=' + academicYearNo + '&semester=' + semester + '&grade=' + grade + '', postData, function (res) { + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/SaveForm?deptno=' + deptno+'&majorNo=' + majorno + '&syear=' + syear + '&grade=' + grade + '', postData, function (res) { // 保存成功后才回调 if (!!callBack) { callBack(); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml index 0ee22c7e9..03189f2c1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml @@ -13,10 +13,13 @@
    -
    +
    -
    +
    +
    +
    +
    @@ -30,9 +33,7 @@
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js index 07d87a4ea..b5aa307a7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js @@ -8,44 +8,16 @@ var refreshGirdData; var selectedRow; var bootstrap = function ($, learun) { "use strict"; - var academicYearNo; - var semester; - var grade; + var sYear,grade,deptno,majorno; var page = { init: function () { - //获取当前学年和学期 - learun.httpAsyncGet(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/AcademicAndSemeter', function (res) { - if (res.code == 200) { - academicYearNo = res.data.academic; - semester = res.data.semester; - grade = res.data.grade; - $('#AcademicYearNo').lrselectSet(res.data.academic); - $('#Semester').lrselectSet(res.data.semester); - $('#Grade').lrselectSet(res.data.grade); - - //todo:暂定 - semester = "1"; - $('#Semester').lrselectSet("1"); - - page.initGird(); - }; - }); - //学年 - $('#AcademicYearNo').lrselect({ - placeholder: "请选择学年", - allowSearch: true, - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/GenerateNearByAcademic', - value: 'value', - text: 'text', - maxHeight: 200 - }); - //学期 - $('#Semester').lrselect({ - placeholder: "请选择学期", - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/GenerateNearBySemeter', + $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo', value: 'deptno', text: 'deptname' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + //缴费年度 + $('#SYear').lrselect({ + url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', value: 'value', - text: 'text', - maxHeight: 200 + text: 'text' }); //年级 $('#Grade').lrselect({ @@ -55,8 +27,13 @@ var bootstrap = function ($, learun) { text: 'text', maxHeight: 200 }); - + var now = new Date(); + sYear = now.getFullYear(); + $('#SYear').lrselectSet(sYear); + grade = sYear.toString().substring(2); + $('#Grade').lrselectSet(grade); page.bind(); + page.initGird(); }, bind: function () { @@ -66,9 +43,18 @@ var bootstrap = function ($, learun) { }); // 查询 $('#lr_search').on('click', function () { - academicYearNo = $('#AcademicYearNo').lrselectGet(); - semester = $('#Semester').lrselectGet(); + sYear = $('#SYear').lrselectGet(); + if (!sYear) { + learun.alert.warning("请选择收费年度!"); + return; + } grade = $('#Grade').lrselectGet(); + if (!grade) { + learun.alert.warning("请选择年级!"); + return; + } + deptno = $('#DeptNo').lrselectGet(); + majorno=$('#MajorNo').lrselectGet(); page.search(); }); // 新增 @@ -83,7 +69,7 @@ var bootstrap = function ($, learun) { learun.layerForm({ id: 'formFinaChargesStandard', title: '新增', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/Form?keyValue=' + selectedRow.MajorNo + '&academicYearNo=' + academicYearNo + '&semester=' + semester + '&grade=' + grade + '', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/Form?deptno=' + selectedRow.DeptNo+'&majorno=' + selectedRow.MajorNo + '&syear=' + sYear + '&grade=' + grade + '', width: 1000, height: 600, callBack: function (id) { @@ -134,29 +120,51 @@ var bootstrap = function ($, learun) { }, // 初始化列表 initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ + $('#gridtable').jfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/GetTreeList', headData: [ + { + label: "系部", name: "DeptNo", width: 200, align: "left", formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: value, + keyId: 'deptno', + callback: function (_data) { + callback(_data['deptname']); + } + }); + } }, { label: "专业编号", name: "MajorNo", width: 100, align: "left" }, - { label: "专业名称", name: "MajorName", width: 100, align: "left" }, + { label: "专业名称", name: "MajorName", width: 200, align: "left" }, { label: "收费项目名称", name: "ChargeItemName", width: 200, align: "left" }, + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, { label: "收费标准", name: "Standard", width: 100, align: "left" }, + { + label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + } }, ], isTree: true, mainId: 'TempId', parentId: 'ParentId', - //mainId:'ChargeStandardID', isPage: true, - sidx: 'MajorNo', - sord: 'asc' + //sidx: 'MajorNo asc ,ChargeItemCode asc', + //sord: 'asc' }); page.search(); }, search: function (param) { param = param || {}; - param.AcademicYearNo = academicYearNo; - param.Semester = semester; + param.SYear =sYear; param.Grade = grade; + param.DeptNo = deptno; + param.MajorNo = majorno; $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); } }; diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuEnroll/StuEnrollService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuEnroll/StuEnrollService.cs index b61bad7b5..1e1679fd1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuEnroll/StuEnrollService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuEnroll/StuEnrollService.cs @@ -687,7 +687,7 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration if (classInfo != null) { teacherInfo = this.BaseRepository("CollegeMIS").FindEntity(a => a.EmpNo == classInfo.ClassDiredctorNo); - result = this.BaseRepository("CollegeMIS").FindList(a => a.Grade == classInfo.Grade && a.MajorNo == stuEnroll.MajorNo && a.AcademicYearNo == yearAndSemester.AcademicYearShort && a.Semester == yearAndSemester.Semester) + result = this.BaseRepository("CollegeMIS").FindList(a => a.Grade == classInfo.Grade && a.MajorNo == stuEnroll.MajorNo && a.SYear == yearAndSemester.AcademicYearShort ) .Select(a => new StuPayInfo { standerid = a.ChargeItemID, @@ -699,30 +699,30 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration foreach (var item in result) { //住宿费 - if (item.standerid == 12 && stuEnroll.IsCheckIn == false) + if (item.standerid == "12" && stuEnroll.IsCheckIn == false) { item.shouldPay = 0; } //学费 - if (item.standerid == 14 && stuEnroll.IsSubsidize1 == true) + if (item.standerid == "14" && stuEnroll.IsSubsidize1 == true) { item.shouldPay = 0; } switch (item.standerid) { - case 12: + case "12": if (stuEnroll.IsCheckIn == false) item.shouldPay = 0; break; - case 14: + case "14": if (stuEnroll.IsSubsidize1 == true) item.shouldPay = 0; break; - case 15: + case "15": if (stuEnroll.IsMilitary == false) item.shouldPay = 0; break; - case 32: + case "32": if (stuEnroll.IsCheckIn == false) item.shouldPay = 0; break; - case 33: + case "33": if (stuEnroll.EnrollType == "0") item.shouldPay = 0; break; default: @@ -771,7 +771,7 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration } public class StuPayInfo { - public int standerid { get; set; } + public string standerid { get; set; } public decimal? shouldPay { get; set; } public decimal? standard { get; set; } public string standerdName { get; set; } @@ -1765,7 +1765,7 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration var result = new List(); if (classInfo != null) { - result = this.BaseRepository("CollegeMIS").FindList(a => a.Grade == classInfo.Grade && a.MajorNo == stuEnroll.MajorNo && a.AcademicYearNo == yearAndSemester.AcademicYearShort && a.Semester == yearAndSemester.Semester) + result = this.BaseRepository("CollegeMIS").FindList(a => a.Grade == classInfo.Grade && a.MajorNo == stuEnroll.MajorNo && a.SYear == yearAndSemester.AcademicYearShort) .Select(a => new StuPayInfo { standerid = a.ChargeItemID, @@ -1777,30 +1777,30 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration foreach (var item in result) { //住宿费 - if (item.standerid == 12 && stuEnroll.IsCheckIn == false) + if (item.standerid == "12" && stuEnroll.IsCheckIn == false) { item.shouldPay = 0; } //学费 - if (item.standerid == 14 && stuEnroll.IsSubsidize1 == true) + if (item.standerid == "14" && stuEnroll.IsSubsidize1 == true) { item.shouldPay = 0; } switch (item.standerid) { - case 12: + case "12": if (stuEnroll.IsCheckIn == false) item.shouldPay = 0; break; - case 14: + case "14": if (stuEnroll.IsSubsidize1 == true) item.shouldPay = 0; break; - case 15: + case "15": if (stuEnroll.IsMilitary == false) item.shouldPay = 0; break; - case 32: + case "32": if (stuEnroll.IsCheckIn == false) item.shouldPay = 0; break; - case 33: + case "33": if (stuEnroll.EnrollType == "0") item.shouldPay = 0; break; default: diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemBLL.cs index d6ce78e72..fdd9c83c7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemBLL.cs @@ -116,7 +116,42 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion #region 提交数据 - + public void Lock(string keyValue) + { + try + { + finaChargeItemService.Lock(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + public void UnLock(string keyValue) + { + try + { + finaChargeItemService.UnLock(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } /// /// 删除实体数据 /// 主键 @@ -165,6 +200,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public FinaChargeItemEntity GetFinaChargeItemEntityByChargeItemCode(string entityChargeItemName) + { + try + { + return finaChargeItemService.GetFinaChargeItemEntityByChargeItemCode(entityChargeItemName); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemEntity.cs index 6c90ebb23..bb631172c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemEntity.cs @@ -17,8 +17,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// /// 收费项目代码 /// - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Column("CHARGEITEMID")] - public int ChargeItemID { get; set; } + [Column("CHARGEITEMID")] + public string ChargeItemID { get; set; } /// /// 收费项名称 /// @@ -30,21 +30,24 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("REMARK")] public string Remark { get; set; } /// - /// 当前在用状态(0为过去的,1为现正用的) + /// 审核状态 /// - [Column("CURRENTMARK")] - public string CurrentMark { get; set; } - /// - /// 系统保留字段标志 - /// - [Column("KEYWORDMARK")] - public string KeyWordMark { get; set; } + [Column("CHECKMARK")] + public bool? CheckMark { get; set; } + + [Column("F_DELETEMARK")] + public bool? F_DeleteMark { get; set; } /// /// priority /// [Column("PRIORITY")] public int? priority { get; set; } /// + /// 收费项目类型 1固定项目,2非固定项目 + /// + [Column("CHARGEITEMTYPE")] + public int? ChargeItemType { get; set; } + /// /// CreateDate /// [Column("CREATEDATE")] @@ -60,6 +63,19 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("CREATEUSERNAME")] public string CreateUserName { get; set; } + [Column("F_MODIFYDATE")] + public DateTime? F_ModifyDate { get; set; } + /// + /// F_ModifyUserId + /// + [Column("F_MODIFYUSERID")] + public string F_ModifyUserId { get; set; } + /// + /// F_ModifyUserName + /// + [Column("F_MODIFYUSERNAME")] + public string F_ModifyUserName { get; set; } + [Column("CHARGEITEMCODE")] public string ChargeItemCode { get; set; } @@ -71,6 +87,13 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// public void Create() { + ChargeItemID = Guid.NewGuid().ToString(); + CheckMark = false; + F_DeleteMark = false; + CreateDate = DateTime.Now; + UserInfo u = LoginUserInfo.Get(); + CreateUserId = u.userId; + CreateUserName = u.realName; } /// /// 编辑调用 @@ -78,7 +101,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// public void Modify(string keyValue) { - this.ChargeItemID = Convert.ToInt32(keyValue); + this.ChargeItemID = keyValue; + F_ModifyDate = DateTime.Now; + UserInfo u = LoginUserInfo.Get(); + F_ModifyUserId = u.userId; + F_ModifyUserName = u.realName; } #endregion #region 扩展字段 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemIBLL.cs index eefbfcc7b..eac6a08a9 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemIBLL.cs @@ -58,5 +58,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement void SaveEntity(string keyValue, FinaChargeItemEntity entity); #endregion + FinaChargeItemEntity GetFinaChargeItemEntityByChargeItemCode(string entityChargeItemName); + void Lock(string keyValue); + void UnLock(string keyValue); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemService.cs index fcb9ea4e6..fc73317af 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeItem/FinaChargeItemService.cs @@ -31,7 +31,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement var strSql = new StringBuilder(); strSql.Append("SELECT * "); strSql.Append(" FROM FinaChargeItem t "); - strSql.Append(" WHERE 1=1 "); + strSql.Append(" WHERE 1=1 and F_DeleteMark=0 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); @@ -87,8 +87,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - var keyvalue = Convert.ToInt32(keyValue); - return this.BaseRepository("CollegeMIS").FindEntity(keyvalue); + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); } catch (Exception ex) { @@ -127,10 +126,87 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public FinaChargeItemEntity GetFinaChargeItemEntityByChargeItemCode(string chargeItemCode) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(x => x.ChargeItemCode.Trim() == chargeItemCode.Trim()); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + #endregion #region 提交数据 + public void Lock(string keyValue) + { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); + try + { + //单个启用 + //this.BaseRepository("CollegeMIS").ExecuteBySql("update ClassInfo set CheckMark=1 where ClassId='" + keyValue + "'"); + //多个启用 + var keyValueArr = keyValue.Split(','); + foreach (var item in keyValueArr) + { + db.ExecuteBySql("update FinaChargeItem set CheckMark=1 where ChargeItemID='" + item + "'"); + } + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + public void UnLock(string keyValue) + { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); + try + { + //单个停用 + //this.BaseRepository("CollegeMIS").ExecuteBySql("update ClassInfo set CheckMark=0 where ClassId='" + keyValue + "'"); + + //多个停用 + var keyValueArr = keyValue.Split(','); + foreach (var item in keyValueArr) + { + db.ExecuteBySql("update FinaChargeItem set CheckMark=0 where ChargeItemID='" + item + "'"); + } + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } /// /// 删除实体数据 /// 主键 @@ -140,8 +216,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - var keyvalue = Convert.ToInt32(keyValue); - this.BaseRepository("CollegeMIS").Delete(t => t.ChargeItemID == keyvalue); + var entity = this.BaseRepository("CollegeMIS").FindEntity(m=>m.ChargeItemID==keyValue); + entity.F_DeleteMark = true; + this.BaseRepository("CollegeMIS").Update(entity); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs index 4712358d5..deb91357a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs @@ -97,11 +97,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 学期 /// 年级 /// - public IEnumerable GetFinaChargesStandardListByMajorNo(string majorNo, string academicYearNo, string semester, string grade) + public IEnumerable GetFinaChargesStandardListByMajorNo(string majorNo, string syear, string grade) { try { - return finaChargesStandardService.GetFinaChargesStandardListByMajorNo(majorNo, academicYearNo, semester, grade); + return finaChargesStandardService.GetFinaChargesStandardListByMajorNo(majorNo, syear, grade); } catch (Exception ex) { @@ -249,11 +249,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// /// 保存 /// - public void SaveFinaChargesStandardList(string majorNo, string academicYearNo, string semester, string grade, List finaChargesStandardList) + public void SaveFinaChargesStandardList(string deptno,string majorNo, string syear, string grade, List finaChargesStandardList) { try { - finaChargesStandardService.SaveFinaChargesStandardList(majorNo, academicYearNo, semester, grade, finaChargesStandardList); + finaChargesStandardService.SaveFinaChargesStandardList(deptno,majorNo, syear, grade, finaChargesStandardList); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs index 933d5586e..dc86ba2f0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs @@ -17,13 +17,13 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// /// ChargeStandardID /// - [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Column("CHARGESTANDARDID")] - public int ChargeStandardID { get; set; } + [Column("CHARGESTANDARDID")] + public string ChargeStandardID { get; set; } /// /// 收费项目代码 /// [Column("CHARGEITEMID")] - public int ChargeItemID { get; set; } + public string ChargeItemID { get; set; } /// /// 年级 /// @@ -40,35 +40,20 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("MAJORNO")] public string MajorNo { get; set; } /// - /// 专业方向号(如0,1,2,3,4,5)0代表无专业方向细分 - /// - [Column("MAJORDETAILNO")] - public string MajorDetailNo { get; set; } - /// - /// 专业方向名 - /// - [Column("MAJORDETAILNAME")] - public string MajorDetailName { get; set; } - /// /// 收费标准 /// [Column("STANDARD")] public decimal? Standard { get; set; } /// - /// AcademicYearNo + /// SYear /// - [Column("ACADEMICYEARNO")] - public string AcademicYearNo { get; set; } - /// - /// Semester - /// - [Column("SEMESTER")] - public string Semester { get; set; } + [Column("SYEAR")] + public string SYear { get; set; } /// /// CheckMark /// [Column("CHECKMARK")] - public string CheckMark { get; set; } + public bool? CheckMark { get; set; } #endregion #region 扩展操作 @@ -77,6 +62,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// public void Create() { + this.ChargeStandardID = Guid.NewGuid().ToString(); } /// /// 编辑调用 @@ -84,7 +70,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// public void Modify(string keyValue) { - this.ChargeStandardID = Convert.ToInt32(keyValue); + this.ChargeStandardID = keyValue; } #endregion #region 扩展字段 @@ -95,6 +81,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement public string ChargeItemName { get; set; } [NotMapped] public string ChargeItemCode { get; set; } + [NotMapped] + public int? ChargeItemType { get; set; } /// /// 已交金额 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs index 8081ab7c8..93a78038f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs @@ -41,7 +41,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 学期 /// 年级 /// - IEnumerable GetFinaChargesStandardListByMajorNo(string majorNo, string academicYearNo, string semester, string grade); + IEnumerable GetFinaChargesStandardListByMajorNo(string majorNo, string syear, string grade); /// /// 获取FinaChargesStandard表数据 /// @@ -86,7 +86,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// /// 保存 /// - void SaveFinaChargesStandardList(string majorNo, string academicYearNo, string semester, string grade, List finaChargesStandardList); + void SaveFinaChargesStandardList(string deptno,string majorNo, string syear, string grade, List finaChargesStandardList); /// /// 某专业的收费标准是否已使用 @@ -96,7 +96,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// /// /// - bool IsChargeByMajorNo(string majorNo, string academicYearNo, string semester, string grade); + bool IsChargeByMajorNo(string deptNo, string majorNo, string sYear, string grade); #endregion IEnumerable GetFinaChargesStandardListByYongYou(string stuNo, int jiaoFeiYear); diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs index b7a369c84..8634f276a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs @@ -77,46 +77,56 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("select CONVERT(varchar,t.ChargeStandardID)+'Temp' as TempId,t.ChargeStandardID,t.ChargeItemID,i.ChargeItemName,t.Standard,t.MajorNo,m.MajorName,t.AcademicYearNo,t.Semester,t.Grade,t.MajorNo as ParentId "); + strSql.Append("select CONVERT(varchar,t.ChargeStandardID)+'Temp' as TempId,t.ChargeStandardID,t.ChargeItemID,i.ChargeItemName,i.ChargeItemType,i.ChargeItemCode,t.Standard,'' as MajorNo,'' as MajorName,'' as DeptNo,t.SYear,t.Grade,t.MajorNo as ParentId "); strSql.Append(" FROM [dbo].[CdMajor] m left join [dbo].[FinaChargesStandard] t on m.MajorNo=t.MajorNo left join [dbo].[FinaChargeItem] i on t.ChargeItemID=i.ChargeItemID "); - strSql.Append(" WHERE 1=1 "); + strSql.Append(" WHERE 1=1 and i.CheckMark=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); - if (!queryParam["AcademicYearNo"].IsEmpty()) - { - dp.Add("AcademicYearNo", queryParam["AcademicYearNo"].ToString(), DbType.String); - strSql.Append(" AND t.AcademicYearNo = @AcademicYearNo "); - } - if (!queryParam["Semester"].IsEmpty()) + if (!queryParam["SYear"].IsEmpty()) { - dp.Add("Semester", queryParam["Semester"].ToString(), DbType.String); - strSql.Append(" AND t.Semester = @Semester "); + dp.Add("SYear", queryParam["SYear"].ToString(), DbType.String); + strSql.Append(" AND t.SYear = @SYear "); } if (!queryParam["Grade"].IsEmpty()) { dp.Add("Grade", queryParam["Grade"].ToString(), DbType.String); strSql.Append(" AND t.Grade = @Grade "); } - strSql.Append(" union "); - strSql.Append(" select m.MajorNo as TempId,0 as ChargeStandardID,0 as ChargeItemID,null as ChargeItemName, "); - strSql.Append(" (select SUM(t.Standard) from [dbo].[FinaChargesStandard] t where t.MajorNo=m.MajorNo "); - if (!queryParam["AcademicYearNo"].IsEmpty()) + if (!queryParam["DeptNo"].IsEmpty()) { - strSql.Append(" AND t.AcademicYearNo = @AcademicYearNo "); + dp.Add("DeptNo", queryParam["DeptNo"].ToString(), DbType.String); + strSql.Append(" AND m.DeptNo = @DeptNo "); } - if (!queryParam["Semester"].IsEmpty()) + if (!queryParam["MajorNo"].IsEmpty()) { - strSql.Append(" AND t.Semester = @Semester "); + dp.Add("MajorNo", queryParam["MajorNo"].ToString(), DbType.String); + strSql.Append(" AND m.MajorNo = @MajorNo "); + } + strSql.Append(" union "); + strSql.Append(" select m.MajorNo as TempId,'' as ChargeStandardID,0 as ChargeItemID,null as ChargeItemName,null as ChargeItemType, null as ChargeItemCode,"); + strSql.Append(" (select SUM(t.Standard) from [dbo].[FinaChargesStandard] t left join [FinaChargeItem] tt on t.ChargeItemID=tt.ChargeItemID where tt.CheckMark=1 and t.MajorNo=m.MajorNo "); + if (!queryParam["SYear"].IsEmpty()) + { + strSql.Append(" AND t.SYear = @SYear "); } if (!queryParam["Grade"].IsEmpty()) { - dp.Add("Grade", queryParam["Grade"].ToString(), DbType.String); strSql.Append(" AND t.Grade = @Grade "); } - strSql.Append(" ) as Standard,m.MajorNo,m.MajorName,null as AcademicYearNo,null as Semester,null as Grade,'0' as ParentId"); + strSql.Append(" ) as Standard,m.MajorNo,m.MajorName,m.DeptNo,null as SYear,null as Grade,'0' as ParentId"); strSql.Append(" from [dbo].[CdMajor] m "); strSql.Append(" WHERE 1=1 "); + if (!queryParam["DeptNo"].IsEmpty()) + { + strSql.Append(" AND m.DeptNo = @DeptNo "); + } + if (!queryParam["MajorNo"].IsEmpty()) + { + strSql.Append(" AND m.MajorNo = @MajorNo "); + } + + strSql.Append(" order by majorno,ChargeItemCode "); return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp); } catch (Exception ex) @@ -140,8 +150,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - var keyvalue = Convert.ToInt32(keyValue); - return this.BaseRepository("CollegeMIS").FindList(t => t.ChargeStandardID == keyvalue); + return this.BaseRepository("CollegeMIS").FindList(t => t.ChargeStandardID == keyValue); } catch (Exception ex) { @@ -164,14 +173,16 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 学期 /// 年级 /// - public IEnumerable GetFinaChargesStandardListByMajorNo(string majorNo, string academicYearNo, string semester, string grade) + public IEnumerable GetFinaChargesStandardListByMajorNo(string majorNo, string syear,string grade) { try { var strSql = new StringBuilder(); - strSql.Append("select i.ChargeItemID,REPLACE(i.ChargeItemName,'','') as ChargeItemName,t.ChargeStandardID,t.Standard as Standard"); + strSql.Append("select i.ChargeItemID,i.ChargeItemName,i.ChargeItemCode,i.ChargeItemType,t.ChargeStandardID,t.Standard as Standard"); strSql.Append(" from [dbo].[FinaChargeItem] i left join [dbo].[FinaChargesStandard] t on i.ChargeItemID=t.ChargeItemID "); - strSql.Append(" and t.AcademicYearNo='" + academicYearNo + "' and t.Semester='" + semester + "' and t.Grade='" + grade + "' and t.MajorNo='" + majorNo + "' "); + strSql.Append(" and t.syear='" + syear + "' and t.Grade='" + grade + "' and t.MajorNo='" + majorNo + "' "); + strSql.Append(" where 1=1 and i.checkmark=1 order by ChargeItemCode"); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString()); } catch (Exception ex) @@ -252,8 +263,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - var aa = Convert.ToInt32(chargeItemID); - return this.BaseRepository("CollegeMIS").FindEntity(x => x.ChargeItemID == aa); + return this.BaseRepository("CollegeMIS").FindEntity(x => x.ChargeItemID == chargeItemID); } catch (Exception ex) { @@ -281,8 +291,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - var keyvalue = Convert.ToInt32(keyValue); - this.BaseRepository("CollegeMIS").Delete(t => t.ChargeStandardID == keyvalue); + this.BaseRepository("CollegeMIS").Delete(t => t.ChargeStandardID == keyValue); } catch (Exception ex) { @@ -337,7 +346,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// /// 新增保存 /// - public void SaveFinaChargesStandardList(string majorNo, string academicYearNo, string semester, string grade, List finaChargesStandardList) + public void SaveFinaChargesStandardList(string deptNo,string majorNo, string sYear, string grade, List finaChargesStandardList) { var db = this.BaseRepository("CollegeMIS"); try @@ -345,7 +354,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement db.BeginTrans(); //删除学年学期年级某专业下的收费标准 - var preResult = db.ExecuteBySql("delete from FinaChargesStandard where AcademicYearNo='" + academicYearNo + "' and Semester='" + semester + "' and Grade='" + grade + "' and MajorNo='" + majorNo + "' "); + var preResult = db.ExecuteBySql("delete from FinaChargesStandard where SYear='" + sYear + "' and Grade='" + grade + "' and MajorNo='" + majorNo + "' "); //增加收费标准 foreach (var item in finaChargesStandardList) { @@ -353,12 +362,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { ChargeItemID = item.ChargeItemID, Grade = grade, - DeptNo = "-1", + DeptNo = deptNo, MajorNo = majorNo, Standard = item.Standard, - AcademicYearNo = academicYearNo, - Semester = semester, - CheckMark = "0" + SYear = sYear, + CheckMark = false }; entity.Create(); db.Insert(entity); From 295a7241995c2c78da30b3ce9807fec9aaecdec2 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sun, 6 Aug 2023 17:10:58 +0800 Subject: [PATCH 07/50] =?UTF-8?q?FinaChargeStudent=E7=BC=B4=E8=B4=B9?= =?UTF-8?q?=E5=AD=A6=E7=94=9F=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStudentController.cs | 117 +++++++++++ .../Views/FinaChargeStudent/Form.cshtml | 43 ++++ .../Views/FinaChargeStudent/Form.js | 54 ++++++ .../Views/FinaChargeStudent/Index.cshtml | 56 ++++++ .../Views/FinaChargeStudent/Index.js | 137 +++++++++++++ .../Learun.Application.Web.csproj | 5 + .../Learun.Application.Mapping.csproj | 1 + .../FinaChargeStudentMap.cs | 29 +++ .../Learun.Application.TwoDevelopment.csproj | 4 + .../FinaChargeStudent/FinaChargeStudentBLL.cs | 125 ++++++++++++ .../FinaChargeStudentEntity.cs | 90 +++++++++ .../FinaChargeStudentIBLL.cs | 48 +++++ .../FinaChargeStudentService.cs | 183 ++++++++++++++++++ 13 files changed, 892 insertions(+) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStudentMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentIBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs new file mode 100644 index 000000000..60af432f8 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs @@ -0,0 +1,117 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Web.Mvc; +using System.Collections.Generic; + +namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-06 17:09 + /// 描 述:缴费学生信息 + /// + public class FinaChargeStudentController : MvcControllerBase + { + private FinaChargeStudentIBLL finaChargeStudentIBLL = new FinaChargeStudentBLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = finaChargeStudentIBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var FinaChargeStudentData = finaChargeStudentIBLL.GetFinaChargeStudentEntity( keyValue ); + var jsonData = new { + FinaChargeStudent = FinaChargeStudentData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + finaChargeStudentIBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + FinaChargeStudentEntity entity = strEntity.ToObject(); + finaChargeStudentIBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.cshtml new file mode 100644 index 000000000..b1e812e79 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.cshtml @@ -0,0 +1,43 @@ +@{ + ViewBag.Title = "缴费学生信息"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    学号
    + +
    +
    +
    姓名
    + +
    +
    +
    性别
    +
    +
    +
    +
    身份证号
    + +
    +
    +
    系部
    +
    +
    +
    +
    专业
    +
    +
    +
    +
    班级
    +
    +
    +
    +
    手机号
    + +
    +
    +
    学生总余额
    + +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.js new file mode 100644 index 000000000..2bb459eaf --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Form.js @@ -0,0 +1,54 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-06 17:09 + * 描 述:缴费学生信息 + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#GenderNo').lrDataItemSelect({ code: 'usersexbit' }); + $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo',value: 'deptno',text: 'deptname' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo',value: 'majorno',text: 'majorname' }); + $('#ClassNo').lrDataSourceSelect({ code: 'bjsj',value: 'classno',text: 'classname' }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/SaveForm?keyValue=' + keyValue, postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.cshtml new file mode 100644 index 000000000..32ca5906d --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.cshtml @@ -0,0 +1,56 @@ +@{ + ViewBag.Title = "缴费学生信息"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    学号
    + +
    +
    +
    姓名
    + +
    +
    +
    身份证号
    + +
    +
    +
    系部
    +
    +
    +
    +
    专业
    +
    +
    +
    +
    班级
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js new file mode 100644 index 000000000..d26fdbf81 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js @@ -0,0 +1,137 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-06 17:09 + * 描 述:缴费学生信息 + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 220, 400); + $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo',value: 'deptno',text: 'deptname' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo',value: 'majorno',text: 'majorname' }); + $('#ClassNo').lrDataSourceSelect({ code: 'bjsj',value: 'classno',text: 'classname' }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + // 新增 + $('#lr_add').on('click', function () { + learun.layerForm({ + id: 'form', + title: '新增', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/Form', + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + }); + // 编辑 + $('#lr_edit').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSId'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'form', + title: '编辑', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/Form?keyValue=' + keyValue, + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + } + }); + // 删除 + $('#lr_delete').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSId'); + if (learun.checkrow(keyValue)) { + learun.layerConfirm('是否确认删除该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/DeleteForm', { keyValue: keyValue}, function () { + refreshGirdData(); + }); + } + }); + } + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').lrAuthorizeJfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/GetPageList', + headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left"}, + { label: "姓名", name: "StuName", width: 100, align: "left"}, + { label: "性别", name: "GenderNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'usersexbit', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + { label: "身份证号", name: "IdentityCardNo", width: 100, align: "left"}, + { label: "系部", name: "DeptNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: value, + keyId: 'deptno', + callback: function (_data) { + callback(_data['deptname']); + } + }); + }}, + { label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + }}, + { label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + }}, + { label: "手机号", name: "Mobile", width: 100, align: "left"}, + { label: "学生总余额", name: "FSBlance", width: 100, align: "left"}, + ], + mainId:'FSId', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index e76f43ceb..993ae491c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -889,6 +889,7 @@ + @@ -6646,6 +6647,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj index 0644fdc3a..bf102199e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj @@ -590,6 +590,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStudentMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStudentMap.cs new file mode 100644 index 000000000..3e38c8f6b --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStudentMap.cs @@ -0,0 +1,29 @@ +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-06 17:09 + /// 描 述:缴费学生信息 + /// + public class FinaChargeStudentMap : EntityTypeConfiguration + { + public FinaChargeStudentMap() + { + #region 表、主键 + //表 + this.ToTable("FINACHARGESTUDENT"); + //主键 + this.HasKey(t => t.FSId); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index bad3a4db6..6b69c3744 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1834,6 +1834,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentBLL.cs new file mode 100644 index 000000000..dd9c1c789 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentBLL.cs @@ -0,0 +1,125 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-06 17:09 + /// 描 述:缴费学生信息 + /// + public class FinaChargeStudentBLL : FinaChargeStudentIBLL + { + private FinaChargeStudentService finaChargeStudentService = new FinaChargeStudentService(); + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return finaChargeStudentService.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取FinaChargeStudent表实体数据 + /// + /// 主键 + /// + public FinaChargeStudentEntity GetFinaChargeStudentEntity(string keyValue) + { + try + { + return finaChargeStudentService.GetFinaChargeStudentEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + finaChargeStudentService.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, FinaChargeStudentEntity entity) + { + try + { + finaChargeStudentService.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs new file mode 100644 index 000000000..9c5cf0757 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs @@ -0,0 +1,90 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-06 17:09 + /// 描 述:缴费学生信息 + /// + public class FinaChargeStudentEntity + { + #region 实体成员 + /// + /// FSId + /// + [Column("FSID")] + public string FSId { get; set; } + /// + /// StuNo + /// + [Column("STUNO")] + public string StuNo { get; set; } + /// + /// StuName + /// + [Column("STUNAME")] + public string StuName { get; set; } + /// + /// GenderNo + /// + [Column("GENDERNO")] + public bool? GenderNo { get; set; } + /// + /// IdentityCardNo + /// + [Column("IDENTITYCARDNO")] + public string IdentityCardNo { get; set; } + /// + /// DeptNo + /// + [Column("DEPTNO")] + public string DeptNo { get; set; } + /// + /// MajorNo + /// + [Column("MAJORNO")] + public string MajorNo { get; set; } + /// + /// ClassNo + /// + [Column("CLASSNO")] + public string ClassNo { get; set; } + /// + /// Mobile + /// + [Column("MOBILE")] + public string Mobile { get; set; } + /// + /// 总余额 + /// + [Column("FSBLANCE")] + public decimal? FSBlance { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.FSId = Guid.NewGuid().ToString(); + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.FSId = keyValue; + } + #endregion + #region 扩展字段 + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentIBLL.cs new file mode 100644 index 000000000..0e67c157e --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentIBLL.cs @@ -0,0 +1,48 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-06 17:09 + /// 描 述:缴费学生信息 + /// + public interface FinaChargeStudentIBLL + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取FinaChargeStudent表实体数据 + /// + /// 主键 + /// + FinaChargeStudentEntity GetFinaChargeStudentEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, FinaChargeStudentEntity entity); + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs new file mode 100644 index 000000000..24451e6fc --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs @@ -0,0 +1,183 @@ +using Dapper; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Data; +using System.Text; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-06 17:09 + /// 描 述:缴费学生信息 + /// + public class FinaChargeStudentService : RepositoryFactory + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" + t.FSId, + t.StuNo, + t.StuName, + t.GenderNo, + t.IdentityCardNo, + t.DeptNo, + t.MajorNo, + t.ClassNo, + t.Mobile, + t.FSBlance + "); + strSql.Append(" FROM FinaChargeStudent t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + if (!queryParam["StuNo"].IsEmpty()) + { + dp.Add("StuNo", "%" + queryParam["StuNo"].ToString() + "%", DbType.String); + strSql.Append(" AND t.StuNo Like @StuNo "); + } + if (!queryParam["StuName"].IsEmpty()) + { + dp.Add("StuName", "%" + queryParam["StuName"].ToString() + "%", DbType.String); + strSql.Append(" AND t.StuName Like @StuName "); + } + if (!queryParam["IdentityCardNo"].IsEmpty()) + { + dp.Add("IdentityCardNo", "%" + queryParam["IdentityCardNo"].ToString() + "%", DbType.String); + strSql.Append(" AND t.IdentityCardNo Like @IdentityCardNo "); + } + if (!queryParam["DeptNo"].IsEmpty()) + { + dp.Add("DeptNo",queryParam["DeptNo"].ToString(), DbType.String); + strSql.Append(" AND t.DeptNo = @DeptNo "); + } + if (!queryParam["MajorNo"].IsEmpty()) + { + dp.Add("MajorNo",queryParam["MajorNo"].ToString(), DbType.String); + strSql.Append(" AND t.MajorNo = @MajorNo "); + } + if (!queryParam["ClassNo"].IsEmpty()) + { + dp.Add("ClassNo",queryParam["ClassNo"].ToString(), DbType.String); + strSql.Append(" AND t.ClassNo = @ClassNo "); + } + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取FinaChargeStudent表实体数据 + /// + /// 主键 + /// + public FinaChargeStudentEntity GetFinaChargeStudentEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t=>t.FSId == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, FinaChargeStudentEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + } +} From b46de8da779cc62dee20bf2838080c23f2be3fb4 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sun, 6 Aug 2023 18:42:34 +0800 Subject: [PATCH 08/50] =?UTF-8?q?=E7=BC=B4=E8=B4=B9=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStudentController.cs | 35 ++++ .../Views/FinaChargeStudent/Index.cshtml | 6 +- .../Views/FinaChargeStudent/Index.js | 183 +++++++++++------- .../FinaChargeStudent/FinaChargeStudentBLL.cs | 76 ++++++++ .../FinaChargeStudentIBLL.cs | 4 + .../FinaChargeStudentService.cs | 109 ++++++++++- 6 files changed, 332 insertions(+), 81 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs index 60af432f8..45da674e3 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs @@ -80,7 +80,36 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers #endregion #region 提交数据 + [HttpPost] + [AjaxOnly] + public ActionResult Lock(string keyValue) + { + finaChargeStudentIBLL.Lock(keyValue); + return Success("审核成功!"); + } + [HttpPost] + [AjaxOnly] + public ActionResult UnLock(string keyValue) + { + finaChargeStudentIBLL.UnLock(keyValue); + return Success("去审核成功!"); + } + [HttpPost] + [AjaxOnly] + public ActionResult ImportForm() + { + finaChargeStudentIBLL.ImportForm(); + return Success("导入成功!"); + } + + [HttpPost] + [AjaxOnly] + public ActionResult UpdateForm() + { + finaChargeStudentIBLL.UpdateForm(); + return Success("更新成功!"); + } /// /// 删除实体数据 /// @@ -90,6 +119,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult DeleteForm(string keyValue) { + //判断有无余额数据 + var stuchargeinfo = finaChargeStudentIBLL.GetFinaChargeStudentEntity(keyValue); + if (stuchargeinfo.FSBlance!=0) + { + return Fail("本学生存在缴费数据,不能删除。请核对!"); + } finaChargeStudentIBLL.DeleteEntity(keyValue); return Success("删除成功!"); } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.cshtml index 32ca5906d..d85f9cf3f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.cshtml @@ -43,9 +43,11 @@
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js index d26fdbf81..a6f7abb66 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js @@ -16,49 +16,76 @@ var bootstrap = function ($, learun) { $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { page.search(queryJson); }, 220, 400); - $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo',value: 'deptno',text: 'deptname' }); - $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo',value: 'majorno',text: 'majorname' }); - $('#ClassNo').lrDataSourceSelect({ code: 'bjsj',value: 'classno',text: 'classname' }); + $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo', value: 'deptno', text: 'deptname' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); // 刷新 $('#lr_refresh').on('click', function () { location.reload(); }); // 新增 $('#lr_add').on('click', function () { - learun.layerForm({ - id: 'form', - title: '新增', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/Form', - width: 600, - height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); + learun.layerConfirm('是否确认导入!', function (res) { + if (res) { + learun.postForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/ImportForm', {}, function () { + refreshGirdData(); + }); } }); }); // 编辑 $('#lr_edit').on('click', function () { + learun.layerConfirm('是否确认更新!', function (res) { + if (res) { + learun.postForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/UpdateForm', {},function () { + refreshGirdData(); + }); + } + }); + }); + // 删除 + $('#lr_delete').on('click', function () { var keyValue = $('#gridtable').jfGridValue('FSId'); if (learun.checkrow(keyValue)) { - learun.layerForm({ - id: 'form', - title: '编辑', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/Form?keyValue=' + keyValue, - width: 600, - height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); + learun.layerConfirm('是否确认删除该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/DeleteForm', { keyValue: keyValue }, function () { + refreshGirdData(); + }); } }); } }); - // 删除 - $('#lr_delete').on('click', function () { + //启用 + $('#lr_lock').on('click', function () { var keyValue = $('#gridtable').jfGridValue('FSId'); if (learun.checkrow(keyValue)) { - learun.layerConfirm('是否确认删除该项!', function (res) { + var CheckMark = $('#gridtable').jfGridValue('F_CheckMark').toString(); + if (CheckMark.indexOf('true') != -1) { + learun.alert.warning("选中记录中包含已审核项目!"); + return; + } + learun.layerConfirm('是否确认审核该项!', function (res) { if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/DeleteForm', { keyValue: keyValue}, function () { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/Lock', { keyValue: keyValue }, function () { + refreshGirdData(); + }); + } + }); + } + }); + //停用 + $('#lr_unlock').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSId'); + if (learun.checkrow(keyValue)) { + var CheckMark = $('#gridtable').jfGridValue('F_CheckMark').toString(); + if (CheckMark.indexOf('false') != -1) { + learun.alert.warning("选中记录中包含已去审项目!"); + return; + } + learun.layerConfirm('是否确认去审核该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/UnLock', { keyValue: keyValue }, function () { refreshGirdData(); }); } @@ -68,66 +95,74 @@ var bootstrap = function ($, learun) { }, // 初始化列表 initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ + $('#gridtable').jfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/GetPageList', headData: [ - { label: "学号", name: "StuNo", width: 100, align: "left"}, - { label: "姓名", name: "StuName", width: 100, align: "left"}, - { label: "性别", name: "GenderNo", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('dataItem', { - key: value, - code: 'usersexbit', - callback: function (_data) { - callback(_data.text); - } - }); - }}, - { label: "身份证号", name: "IdentityCardNo", width: 100, align: "left"}, - { label: "系部", name: "DeptNo", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('custmerData', { - url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', - key: value, - keyId: 'deptno', - callback: function (_data) { - callback(_data['deptname']); - } - }); - }}, - { label: "专业", name: "MajorNo", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('custmerData', { - url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', - key: value, - keyId: 'majorno', - callback: function (_data) { - callback(_data['majorname']); - } - }); - }}, - { label: "班级", name: "ClassNo", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('custmerData', { - url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', - key: value, - keyId: 'classno', - callback: function (_data) { - callback(_data['classname']); - } - }); - }}, - { label: "手机号", name: "Mobile", width: 100, align: "left"}, - { label: "学生总余额", name: "FSBlance", width: 100, align: "left"}, + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "性别", name: "GenderNo", width: 80, align: "left", + formatter: function (cellvalue) { + return cellvalue == true ? "男" : "女"; + } + }, + { label: "身份证号", name: "IdentityCardNo", width: 200, align: "left" }, + { + label: "系部", name: "DeptNo", width: 150, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: value, + keyId: 'deptno', + callback: function (_data) { + callback(_data['deptname']); + } + }); + } + }, + { + label: "专业", name: "MajorNo", width: 200, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 200, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "手机号", name: "Mobile", width: 100, align: "left" }, + { label: "学生总余额", name: "FSBlance", width: 100, align: "left" }, + { + label: "审核标志", name: "F_CheckMark", width: 80, align: "left", formatter: function (cellvalue, rowObject) { + return cellvalue == "1" ? "" : ""; + } + }, ], - mainId:'FSId', + mainId: 'FSId', + isMultiselect: true, isPage: true }); page.search(); }, search: function (param) { param = param || {}; - $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); } }; refreshGirdData = function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentBLL.cs index dd9c1c789..0ff245c4a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentBLL.cs @@ -119,6 +119,82 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public void Lock(string keyValue) + { + try + { + finaChargeStudentService.Lock(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + public void UnLock(string keyValue) + { + try + { + finaChargeStudentService.UnLock(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + public void ImportForm() + { + try + { + finaChargeStudentService.ImportForm(); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + public void UpdateForm() + { + try + { + finaChargeStudentService.UpdateForm(); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentIBLL.cs index 0e67c157e..10221ff72 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentIBLL.cs @@ -44,5 +44,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement void SaveEntity(string keyValue, FinaChargeStudentEntity entity); #endregion + void Lock(string keyValue); + void UnLock(string keyValue); + void ImportForm(); + void UpdateForm(); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs index 24451e6fc..84df95697 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs @@ -65,20 +65,20 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } if (!queryParam["DeptNo"].IsEmpty()) { - dp.Add("DeptNo",queryParam["DeptNo"].ToString(), DbType.String); + dp.Add("DeptNo", queryParam["DeptNo"].ToString(), DbType.String); strSql.Append(" AND t.DeptNo = @DeptNo "); } if (!queryParam["MajorNo"].IsEmpty()) { - dp.Add("MajorNo",queryParam["MajorNo"].ToString(), DbType.String); + dp.Add("MajorNo", queryParam["MajorNo"].ToString(), DbType.String); strSql.Append(" AND t.MajorNo = @MajorNo "); } if (!queryParam["ClassNo"].IsEmpty()) { - dp.Add("ClassNo",queryParam["ClassNo"].ToString(), DbType.String); + dp.Add("ClassNo", queryParam["ClassNo"].ToString(), DbType.String); strSql.Append(" AND t.ClassNo = @ClassNo "); } - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) { @@ -129,7 +129,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - this.BaseRepository("CollegeMIS").Delete(t=>t.FSId == keyValue); + this.BaseRepository("CollegeMIS").Delete(t => t.FSId == keyValue); } catch (Exception ex) { @@ -179,5 +179,104 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion + public void Lock(string keyValue) + { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); + try + { + //单个启用 + //this.BaseRepository("CollegeMIS").ExecuteBySql("update ClassInfo set CheckMark=1 where ClassId='" + keyValue + "'"); + + //多个启用 + var keyValueArr = keyValue.Split(','); + foreach (var item in keyValueArr) + { + db.ExecuteBySql("update FinaChargeStudent set F_CheckMark=1 where FSId='" + item + "'"); + } + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + public void UnLock(string keyValue) + { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); + try + { + //单个停用 + //this.BaseRepository("CollegeMIS").ExecuteBySql("update ClassInfo set CheckMark=0 where ClassId='" + keyValue + "'"); + + //多个停用 + var keyValueArr = keyValue.Split(','); + foreach (var item in keyValueArr) + { + db.ExecuteBySql("update FinaChargeStudent set F_CheckMark=0 where FSId='" + item + "'"); + } + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + public void ImportForm() + { + try + { + this.BaseRepository("CollegeMIS").ExecuteBySql(@"insert into FinaChargeStudent(FSId, StuNo, StuName, GenderNo, IdentityCardNo, DeptNo, MajorNo, ClassNo, Mobile, FSBlance, F_CheckMark) + select newid(), stuno, stuname, genderno, identitycardno, deptno, majorno, classno, mobile, 0, 1 from StuInfoBasic a where a.checkmark = 1 and stuno not in(select stuno from FinaChargeStudent)"); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + public void UpdateForm() + { + try + { + this.BaseRepository("CollegeMIS").ExecuteBySql(@"update [FinaChargeStudent] set StuName=a.StuName,GenderNo=a.GenderNo,IdentityCardNo=a.IdentityCardNo,DeptNo=a.DeptNo, MajorNo=a.MajorNo, ClassNo=a.ClassNo, Mobile=a.Mobile +from StuInfoBasic a left join [FinaChargeStudent] b on a.stuno=b.stuno"); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } From 3d4b565b2f3a8073629885b5528808a2300ec50b Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Mon, 7 Aug 2023 18:28:38 +0800 Subject: [PATCH 09/50] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E5=B9=B4=E5=BA=A6?= =?UTF-8?q?=E7=BC=B4=E8=B4=B9=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearController.cs | 123 +++++++++++++ .../收费明细管理Controller.cs | 117 +++++++++++++ .../Views/FinaChargeStuYear/Form.cshtml | 31 ++++ .../Views/FinaChargeStuYear/Form.js | 51 ++++++ .../GenerateByConditionForm.cshtml | 31 ++++ .../GenerateByConditionForm.js | 115 ++++++++++++ .../Views/FinaChargeStuYear/Index.cshtml | 53 ++++++ .../Views/FinaChargeStuYear/Index.js | 160 +++++++++++++++++ .../Views/收费明细管理/Form.cshtml | 31 ++++ .../Views/收费明细管理/Form.js | 52 ++++++ .../Views/收费明细管理/Index.cshtml | 26 +++ .../Views/收费明细管理/Index.js | 107 ++++++++++++ .../Learun.Application.Web.csproj | 12 ++ .../XmlConfig/system.config | 2 +- .../Learun.Application.Mapping.csproj | 2 + .../FinaChargeStuYearItemMap.cs | 29 +++ .../FinaChargeStuYearMap.cs | 29 +++ .../Learun.Application.TwoDevelopment.csproj | 8 + .../FinaChargeStuYear/FinaChargeStuYearBLL.cs | 125 +++++++++++++ .../FinaChargeStuYearEntity.cs | 75 ++++++++ .../FinaChargeStuYearIBLL.cs | 48 +++++ .../FinaChargeStuYearService.cs | 165 ++++++++++++++++++ .../FinaChargeStuYearItemEntity.cs | 109 ++++++++++++ .../收费明细管理BLL.cs | 125 +++++++++++++ .../收费明细管理IBLL.cs | 48 +++++ .../收费明细管理Service.cs | 150 ++++++++++++++++ 26 files changed, 1823 insertions(+), 1 deletion(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/收费明细管理Controller.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuYearItemMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuYearMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/FinaChargeStuYearItemEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理BLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理IBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理Service.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs new file mode 100644 index 000000000..89769df98 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -0,0 +1,123 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Web.Mvc; +using System.Collections.Generic; + +namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 15:52 + /// 描 述:学生年度缴费管理 + /// + public class FinaChargeStuYearController : MvcControllerBase + { + private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + + [HttpGet] + public ActionResult GenerateByConditionForm() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = finaChargeStuYearIBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var FinaChargeStuYearData = finaChargeStuYearIBLL.GetFinaChargeStuYearEntity( keyValue ); + var jsonData = new { + FinaChargeStuYear = FinaChargeStuYearData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + finaChargeStuYearIBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + FinaChargeStuYearEntity entity = strEntity.ToObject(); + finaChargeStuYearIBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/收费明细管理Controller.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/收费明细管理Controller.cs new file mode 100644 index 000000000..6fb0e6204 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/收费明细管理Controller.cs @@ -0,0 +1,117 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Web.Mvc; +using System.Collections.Generic; + +namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 16:40 + /// 描 述:FinaChargeStuYearItem + /// + public class 收费明细管理Controller : MvcControllerBase + { + private 收费明细管理IBLL 收费明细管理IBLL = new 收费明细管理BLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = 收费明细管理IBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var FinaChargeStuYearItemData = 收费明细管理IBLL.GetFinaChargeStuYearItemEntity( keyValue ); + var jsonData = new { + FinaChargeStuYearItem = FinaChargeStuYearItemData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + 收费明细管理IBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + FinaChargeStuYearItemEntity entity = strEntity.ToObject(); + 收费明细管理IBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.cshtml new file mode 100644 index 000000000..4cc5331d1 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.cshtml @@ -0,0 +1,31 @@ +@{ + ViewBag.Title = "学生年度缴费管理"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    学号
    + +
    +
    +
    缴费年度
    + +
    +
    +
    应缴金额
    + +
    +
    +
    实缴金额
    + +
    +
    +
    缴费年度余额
    + +
    +
    +
    缴费状态
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.js new file mode 100644 index 000000000..864a7fcec --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Form.js @@ -0,0 +1,51 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-07 15:52 + * 描 述:学生年度缴费管理 + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/SaveForm?keyValue=' + keyValue, postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.cshtml new file mode 100644 index 000000000..e42fb1faa --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.cshtml @@ -0,0 +1,31 @@ +@{ + ViewBag.Title = "按条件清空排课数据"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    缴费年度*
    +
    +
    +
    +
    缴费项目类型*
    +
    +
    +
    +
    系部
    +
    +
    +
    +
    专业
    +
    +
    +
    +
    年级
    +
    +
    +
    +
    班级
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js new file mode 100644 index 000000000..4491b96a3 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js @@ -0,0 +1,115 @@ +/* * 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园(http://www.learun.cn) + * Copyright (c) 2013-2018 北京泉江科技有限公司 + * 创建人:超级管理员 + * 日 期:2019-02-27 11:05 + * 描 述:按条件清空排课数据 + */ +var acceptClick; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.bind(); + }, + bind: function () { + $('#FSYear').lrselect({ + url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', + value: 'value', + text: 'text' + }); + var now = new Date(); + $('#PayYear').lrselectSet(now.getFullYear()); + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); + $('#DeptNo').lrselect({ + value: "deptno", + text: "deptname", + url: top.$.rootUrl + '/LR_SystemModule/DataSource/GetDataTable?code=CdDeptInfo', + select: function (item) { + if (item) { + $('#MajorNo').lrselectRefresh({ + url: top.$.rootUrl + '/LR_SystemModule/DataSource/GetDataTable', + param: { code: "CdMajorInfo", strWhere: "DeptNo='" + item.deptno + "'" } + }); + } + else { + $('#MajorNo').lrselectRefresh({ + url: "", + data: [] + }); + } + $('#ClassNo').lrselectRefresh({ + url: "", + data: [] + }); + } + }); + $('#MajorNo').lrselect({ + value: "majorno", + text: "majorname", + select: function (item) { + if (item) { + $('#ClassNo').lrselectRefresh({ + url: top.$.rootUrl + '/LR_SystemModule/DataSource/GetDataTable', + param: { code: "bjsj", strWhere: "DeptNo='" + item.deptno + "' and majorno='" + item.majorno + "'" } + }); + } + + } + }); + + + $('#MajorNo').on("click", + function () { + var data = $('#DeptNo').lrselectGet(); + if (!data) { + learun.alert.error('请先选择系'); + } + }); + $('#Grade').lrselect({ + url: top.$.rootUrl + '/EducationalAdministration/ClassInfo/GenerateNearByYear', + value: 'value', + text: 'text', + select: function (item) { + if (item) { + $('#ClassNo').lrselectRefresh({ + url: top.$.rootUrl + '/LR_SystemModule/DataSource/GetDataTable', + param: { code: "bjsj", strWhere: "grade='" + item.value + "'" } + }); + } + + } + }); + $('#ClassNo').lrselect({ + value: "classno", + text: "classname" + }); + $('#ClassNo').on("click", + function () { + var data1 = $('#DeptNo').lrselectGet(); + var data2 = $('#MajorNo').lrselectGet(); + var data3 = $('#Grade').lrselectGet(); + if (!data1 || !data2&&!data3) { + learun.alert.error('请先选择系和专业或年级'); + } + if ((!data1 || !data2) && data3) { + learun.alert.error('请先选择年级'); + } + }); + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('#form').lrValidform()) { + return false; + } + var postData = $('#form').lrGetFormData(); + $.lrSaveForm(top.$.rootUrl + '/EducationalAdministration/ArrangeLessonTerm/AsyncModifyArrangeLessonDataByCondition', postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml new file mode 100644 index 000000000..d8a64b9db --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml @@ -0,0 +1,53 @@ +@{ + ViewBag.Title = "学生年度缴费管理"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    缴费年度
    +
    +
    +
    +
    +
    +
    + 学生缴费信息 +
    +
    +
    +
    +
    +
    +
    +
    学号
    + +
    +
    +
    缴费年度
    + +
    +
    +
    缴费状态
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js new file mode 100644 index 000000000..3f208216b --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js @@ -0,0 +1,160 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-07 15:52 + * 描 述:学生年度缴费管理 + */ +var refreshGirdData; +var fSYear; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + // 初始化左侧树形数据 + $('#dataTree').lrtree({ + url: top.$.rootUrl + '/EducationalAdministration/StuInfoBasic/GetTree', + nodeClick: function (item) { + fSYear = item.value; + page.search(); + } + }); + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 220, 400); + $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + // 新增 + $('#lr_add').on('click', function () { + learun.layerForm({ + id: 'form', + title: '生成缴费信息', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GenerateByConditionForm', + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + }); + // 编辑 + $('#lr_edit').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYId'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'form', + title: '编辑', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/Form?keyValue=' + keyValue, + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + } + }); + // 删除 + $('#lr_delete').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYId'); + if (learun.checkrow(keyValue)) { + learun.layerConfirm('是否确认删除该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/DeleteForm', { keyValue: keyValue}, function () { + refreshGirdData(); + }); + } + }); + } + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').jfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetPageList', + headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "性别", name: "GenderNo", width: 80, align: "left", + formatter: function (cellvalue) { + return cellvalue == true ? "男" : "女"; + } + }, + { label: "身份证号", name: "IdentityCardNo", width: 100, align: "left" }, + { + label: "系所", name: "DeptNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: value, + keyId: 'deptno', + callback: function (_data) { + callback(_data['deptname']); + } + }); + } + }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "年级", name: "Grade", width: 100, align: "left" }, + { label: "缴费年度", name: "FSYear", width: 100, align: "left"}, + { label: "应缴金额", name: "YJAmount", width: 100, align: "left"}, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, + { label: "缴费年度余额", name: "FSBlance", width: 100, align: "left"}, + { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'PayStatus', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + ], + mainId:'FSYId', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + param.fSYear = fSYear; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.cshtml new file mode 100644 index 000000000..b7747c21c --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.cshtml @@ -0,0 +1,31 @@ +@{ + ViewBag.Title = "FinaChargeStuYearItem"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    收费项目编号
    + +
    +
    +
    收费项名称
    + +
    +
    +
    收费项目类型
    +
    +
    +
    +
    应缴金额
    + +
    +
    +
    实缴金额
    + +
    +
    +
    缴费状态
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js new file mode 100644 index 000000000..d44e53b9f --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js @@ -0,0 +1,52 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-07 16:40 + * 描 述:FinaChargeStuYearItem + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); + $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/SaveForm?keyValue=' + keyValue, postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.cshtml new file mode 100644 index 000000000..667bc49c6 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.cshtml @@ -0,0 +1,26 @@ +@{ + ViewBag.Title = "FinaChargeStuYearItem"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js new file mode 100644 index 000000000..f346c023b --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js @@ -0,0 +1,107 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-07 16:40 + * 描 述:FinaChargeStuYearItem + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + // 新增 + $('#lr_add').on('click', function () { + learun.layerForm({ + id: 'form', + title: '新增', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/Form', + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + }); + // 编辑 + $('#lr_edit').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYIId'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'form', + title: '编辑', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/Form?keyValue=' + keyValue, + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + } + }); + // 删除 + $('#lr_delete').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYIId'); + if (learun.checkrow(keyValue)) { + learun.layerConfirm('是否确认删除该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/DeleteForm', { keyValue: keyValue}, function () { + refreshGirdData(); + }); + } + }); + } + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').lrAuthorizeJfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/GetPageList', + headData: [ + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, + { label: "收费项名称", name: "ChargeItemName", width: 100, align: "left"}, + { label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + { label: "应缴金额", name: "Standard", width: 100, align: "left"}, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, + { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'PayStatus', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + ], + mainId:'FSYIId', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index 993ae491c..b163186b5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -890,6 +890,8 @@ + + @@ -1628,6 +1630,7 @@ + @@ -6651,6 +6654,14 @@ + + + + + + + + @@ -7952,6 +7963,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config index ccdb6eaef..d9c4d557a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config @@ -74,7 +74,7 @@ - + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj index bf102199e..e3a07e41a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj @@ -591,6 +591,8 @@ + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuYearItemMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuYearItemMap.cs new file mode 100644 index 000000000..ee31e79d3 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuYearItemMap.cs @@ -0,0 +1,29 @@ +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 16:40 + /// 描 述:FinaChargeStuYearItem + /// + public class FinaChargeStuYearItemMap : EntityTypeConfiguration + { + public FinaChargeStuYearItemMap() + { + #region 表、主键 + //表 + this.ToTable("FINACHARGESTUYEARITEM"); + //主键 + this.HasKey(t => t.FSYIId); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuYearMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuYearMap.cs new file mode 100644 index 000000000..dd4743bde --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuYearMap.cs @@ -0,0 +1,29 @@ +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 15:52 + /// 描 述:学生年度缴费管理 + /// + public class FinaChargeStuYearMap : EntityTypeConfiguration + { + public FinaChargeStuYearMap() + { + #region 表、主键 + //表 + this.ToTable("FINACHARGESTUYEAR"); + //主键 + this.HasKey(t => t.FSYId); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index 6b69c3744..8142012df 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1838,6 +1838,14 @@ + + + + + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs new file mode 100644 index 000000000..50ec46fc0 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs @@ -0,0 +1,125 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 15:52 + /// 描 述:学生年度缴费管理 + /// + public class FinaChargeStuYearBLL : FinaChargeStuYearIBLL + { + private FinaChargeStuYearService finaChargeStuYearService = new FinaChargeStuYearService(); + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return finaChargeStuYearService.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取FinaChargeStuYear表实体数据 + /// + /// 主键 + /// + public FinaChargeStuYearEntity GetFinaChargeStuYearEntity(string keyValue) + { + try + { + return finaChargeStuYearService.GetFinaChargeStuYearEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + finaChargeStuYearService.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, FinaChargeStuYearEntity entity) + { + try + { + finaChargeStuYearService.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs new file mode 100644 index 000000000..ec3170cc6 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs @@ -0,0 +1,75 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 15:52 + /// 描 述:学生年度缴费管理 + /// + public class FinaChargeStuYearEntity + { + #region 实体成员 + /// + /// FSYId + /// + [Column("FSYID")] + public string FSYId { get; set; } + /// + /// StuNo + /// + [Column("STUNO")] + public string StuNo { get; set; } + /// + /// FSYear + /// + [Column("FSYEAR")] + public int? FSYear { get; set; } + /// + /// YJAmount + /// + [Column("YJAMOUNT")] + public decimal? YJAmount { get; set; } + /// + /// SJAmount + /// + [Column("SJAMOUNT")] + public decimal? SJAmount { get; set; } + /// + /// 缴费年度余额 + /// + [Column("FSBLANCE")] + public decimal? FSBlance { get; set; } + /// + /// 缴费标志(0未缴费,1部分缴纳,2已缴清) + /// + [Column("PAYFEESTATUS")] + public int? PayFeeStatus { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.FSYId = Guid.NewGuid().ToString(); + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.FSYId = keyValue; + } + #endregion + #region 扩展字段 + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs new file mode 100644 index 000000000..c4c8f1b4f --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs @@ -0,0 +1,48 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 15:52 + /// 描 述:学生年度缴费管理 + /// + public interface FinaChargeStuYearIBLL + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取FinaChargeStuYear表实体数据 + /// + /// 主键 + /// + FinaChargeStuYearEntity GetFinaChargeStuYearEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, FinaChargeStuYearEntity entity); + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs new file mode 100644 index 000000000..12483be1f --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -0,0 +1,165 @@ +using Dapper; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Data; +using System.Text; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 15:52 + /// 描 述:学生年度缴费管理 + /// + public class FinaChargeStuYearService : RepositoryFactory + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" + t.FSYId, + t.StuNo, + t.FSYear, + t.YJAmount, + t.SJAmount, + t.FSBlance, + t.PayFeeStatus + "); + strSql.Append(" FROM FinaChargeStuYear t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + if (!queryParam["StuNo"].IsEmpty()) + { + dp.Add("StuNo", "%" + queryParam["StuNo"].ToString() + "%", DbType.String); + strSql.Append(" AND t.StuNo Like @StuNo "); + } + if (!queryParam["FSYear"].IsEmpty()) + { + dp.Add("FSYear", "%" + queryParam["FSYear"].ToString() + "%", DbType.String); + strSql.Append(" AND t.FSYear Like @FSYear "); + } + if (!queryParam["PayFeeStatus"].IsEmpty()) + { + dp.Add("PayFeeStatus",queryParam["PayFeeStatus"].ToString(), DbType.String); + strSql.Append(" AND t.PayFeeStatus = @PayFeeStatus "); + } + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取FinaChargeStuYear表实体数据 + /// + /// 主键 + /// + public FinaChargeStuYearEntity GetFinaChargeStuYearEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t=>t.FSYId == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, FinaChargeStuYearEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/FinaChargeStuYearItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/FinaChargeStuYearItemEntity.cs new file mode 100644 index 000000000..da2b39157 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/FinaChargeStuYearItemEntity.cs @@ -0,0 +1,109 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 16:40 + /// 描 述:FinaChargeStuYearItem + /// + public class FinaChargeStuYearItemEntity + { + #region 实体成员 + /// + /// FSYIId + /// + [Column("FSYIID")] + public string FSYIId { get; set; } + /// + /// FSYId + /// + [Column("FSYID")] + public string FSYId { get; set; } + /// + /// ChargeItemCode + /// + [Column("CHARGEITEMCODE")] + public string ChargeItemCode { get; set; } + /// + /// 收费项名称 + /// + [Column("CHARGEITEMNAME")] + public string ChargeItemName { get; set; } + /// + /// ChargeItemType + /// + [Column("CHARGEITEMTYPE")] + public int? ChargeItemType { get; set; } + /// + /// 收费标准 + /// + [Column("STANDARD")] + public decimal? Standard { get; set; } + /// + /// SJAmount + /// + [Column("SJAMOUNT")] + public decimal? SJAmount { get; set; } + /// + /// 缴费余额 + /// + [Column("FSBLANCE")] + public decimal? FSBlance { get; set; } + /// + /// 缴费标志(0未缴费,1部分缴纳,2已缴清) + /// + [Column("PAYFEESTATUS")] + public int? PayFeeStatus { get; set; } + /// + /// F_DeleteMark + /// + [Column("F_DELETEMARK")] + public bool? F_DeleteMark { get; set; } + /// + /// 创建时间 + /// + [Column("F_CREATEDATE")] + public DateTime? F_CreateDate { get; set; } + /// + /// 创建人主键 + /// + [Column("F_CREATEUSERID")] + public string F_CreateUserId { get; set; } + /// + /// 创建人名字 + /// + [Column("F_CREATEUSERNAME")] + public string F_CreateUserName { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.FSYIId = Guid.NewGuid().ToString(); + this.F_CreateDate = DateTime.Now; + UserInfo userInfo = LoginUserInfo.Get(); + this.F_CreateUserId = userInfo.userId; + this.F_CreateUserName = userInfo.realName; + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.FSYIId = keyValue; + } + #endregion + #region 扩展字段 + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理BLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理BLL.cs new file mode 100644 index 000000000..90f487b42 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理BLL.cs @@ -0,0 +1,125 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 16:40 + /// 描 述:FinaChargeStuYearItem + /// + public class 收费明细管理BLL : 收费明细管理IBLL + { + private 收费明细管理Service 收费明细管理Service = new 收费明细管理Service(); + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return 收费明细管理Service.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取FinaChargeStuYearItem表实体数据 + /// + /// 主键 + /// + public FinaChargeStuYearItemEntity GetFinaChargeStuYearItemEntity(string keyValue) + { + try + { + return 收费明细管理Service.GetFinaChargeStuYearItemEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + 收费明细管理Service.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, FinaChargeStuYearItemEntity entity) + { + try + { + 收费明细管理Service.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理IBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理IBLL.cs new file mode 100644 index 000000000..56ebb721d --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理IBLL.cs @@ -0,0 +1,48 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 16:40 + /// 描 述:FinaChargeStuYearItem + /// + public interface 收费明细管理IBLL + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取FinaChargeStuYearItem表实体数据 + /// + /// 主键 + /// + FinaChargeStuYearItemEntity GetFinaChargeStuYearItemEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, FinaChargeStuYearItemEntity entity); + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理Service.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理Service.cs new file mode 100644 index 000000000..eb1a55cf7 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理Service.cs @@ -0,0 +1,150 @@ +using Dapper; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Data; +using System.Text; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-07 16:40 + /// 描 述:FinaChargeStuYearItem + /// + public class 收费明细管理Service : RepositoryFactory + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" + t.FSYIId, + t.ChargeItemCode, + t.ChargeItemName, + t.ChargeItemType, + t.Standard, + t.SJAmount, + t.PayFeeStatus + "); + strSql.Append(" FROM FinaChargeStuYearItem t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取FinaChargeStuYearItem表实体数据 + /// + /// 主键 + /// + public FinaChargeStuYearItemEntity GetFinaChargeStuYearItemEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t=>t.FSYIId == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, FinaChargeStuYearItemEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + } +} From e86b2bb2ccf3693613277188b6303b2c6cda2c91 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Mon, 7 Aug 2023 22:31:36 +0800 Subject: [PATCH 10/50] =?UTF-8?q?=E7=94=9F=E6=88=90=E5=B9=B4=E5=BA=A6?= =?UTF-8?q?=E7=BC=B4=E8=B4=B9=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearController.cs | 10 +++ ....cs => FinaChargeStuYearItemController.cs} | 12 +-- .../FinaChargesStandardController.cs | 2 +- .../GenerateByConditionForm.cshtml | 19 +---- .../GenerateByConditionForm.js | 85 ++----------------- .../Views/FinaChargeStuYear/Index.js | 4 +- .../Form.cshtml | 2 +- .../Form.js | 4 +- .../Index.cshtml | 2 +- .../Index.js | 8 +- .../Views/FinaChargeStudent/Index.js | 1 + .../Learun.Application.Web.csproj | 10 +-- .../XmlConfig/system.config | 2 +- .../StuEnroll/StuEnrollService.cs | 4 +- .../Learun.Application.TwoDevelopment.csproj | 8 +- .../FinaChargeStuYear/FinaChargeStuYearBLL.cs | 19 +++++ .../FinaChargeStuYearEntity.cs | 2 +- .../FinaChargeStuYearIBLL.cs | 1 + .../FinaChargeStuYearService.cs | 43 ++++++++++ .../FinaChargeStuYearItemBLL.cs} | 12 +-- .../FinaChargeStuYearItemEntity.cs | 2 +- .../FinaChargeStuYearItemIBLL.cs} | 2 +- .../FinaChargeStuYearItemService.cs} | 2 +- .../FinaChargeStudentEntity.cs | 6 ++ .../FinaChargeStudentService.cs | 20 +---- .../FinaChargesStandardEntity.cs | 9 +- .../FinaChargesStandardService.cs | 2 +- 27 files changed, 138 insertions(+), 155 deletions(-) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/{收费明细管理Controller.cs => FinaChargeStuYearItemController.cs} (86%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{收费明细管理 => FinaChargeStuYearItem}/Form.cshtml (93%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{收费明细管理 => FinaChargeStuYearItem}/Form.js (91%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{收费明细管理 => FinaChargeStuYearItem}/Index.cshtml (92%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{收费明细管理 => FinaChargeStuYearItem}/Index.js (95%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{收费明细管理/收费明细管理BLL.cs => FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs} (85%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{收费明细管理 => FinaChargeStuYearItem}/FinaChargeStuYearItemEntity.cs (97%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{收费明细管理/收费明细管理IBLL.cs => FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs} (97%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{收费明细管理/收费明细管理Service.cs => FinaChargeStuYearItem/FinaChargeStuYearItemService.cs} (98%) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs index 89769df98..895fd67b0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -117,6 +117,16 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers } return Success("保存成功!"); } + + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveGenerateByCondition(string strEntity) + { + FinaChargeStuYearEntity entity = strEntity.ToObject(); + finaChargeStuYearIBLL.SaveGenerateByCondition(entity); + return Success("生成成功!"); + } #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/收费明细管理Controller.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs similarity index 86% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/收费明细管理Controller.cs rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs index 6fb0e6204..82972775c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/收费明细管理Controller.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs @@ -13,9 +13,9 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers /// 日 期:2023-08-07 16:40 /// 描 述:FinaChargeStuYearItem ///
    - public class 收费明细管理Controller : MvcControllerBase + public class FinaChargeStuYearItemController : MvcControllerBase { - private 收费明细管理IBLL 收费明细管理IBLL = new 收费明细管理BLL(); + private FinaChargeStuYearItemIBLL finaChargeStuYearItemIBLL = new FinaChargeStuYearItemBLL(); #region 视图功能 @@ -52,7 +52,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult GetPageList(string pagination, string queryJson) { Pagination paginationobj = pagination.ToObject(); - var data = 收费明细管理IBLL.GetPageList(paginationobj, queryJson); + var data = finaChargeStuYearItemIBLL.GetPageList(paginationobj, queryJson); var jsonData = new { rows = data, @@ -71,7 +71,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult GetFormData(string keyValue) { - var FinaChargeStuYearItemData = 收费明细管理IBLL.GetFinaChargeStuYearItemEntity( keyValue ); + var FinaChargeStuYearItemData = finaChargeStuYearItemIBLL.GetFinaChargeStuYearItemEntity( keyValue ); var jsonData = new { FinaChargeStuYearItem = FinaChargeStuYearItemData, }; @@ -90,7 +90,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult DeleteForm(string keyValue) { - 收费明细管理IBLL.DeleteEntity(keyValue); + finaChargeStuYearItemIBLL.DeleteEntity(keyValue); return Success("删除成功!"); } /// @@ -105,7 +105,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult SaveForm(string keyValue, string strEntity) { FinaChargeStuYearItemEntity entity = strEntity.ToObject(); - 收费明细管理IBLL.SaveEntity(keyValue,entity); + finaChargeStuYearItemIBLL.SaveEntity(keyValue,entity); if (string.IsNullOrEmpty(keyValue)) { } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs index b95d4b625..0c1634b1f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs @@ -234,7 +234,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers return Fail("收费标准不存在!"); } //判断某专业收费标准是否已使用 - var isCharge = finaChargesStandardIBLL.IsChargeByMajorNo(entity.DeptNo,entity.MajorNo, entity.SYear, entity.Grade); + var isCharge = finaChargesStandardIBLL.IsChargeByMajorNo(entity.DeptNo,entity.MajorNo, entity.SYear.ToString(), entity.Grade); if (isCharge) { return Fail("该信息正在被系统使用,不能删除!"); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.cshtml index e42fb1faa..b9ef0b9c7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.cshtml @@ -8,24 +8,7 @@
    -
    缴费项目类型*
    -
    -
    -
    -
    系部
    -
    -
    -
    -
    专业
    -
    -
    -
    -
    年级
    -
    -
    -
    -
    班级
    -
    +
    已有缴费项目不会被覆盖!
    @Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js index 4491b96a3..5aeb6bd6d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/GenerateByConditionForm.js @@ -5,6 +5,7 @@ * 描 述:按条件清空排课数据 */ var acceptClick; +var sDeptNo, sMajorNo, sGrade; var bootstrap = function ($, learun) { "use strict"; var page = { @@ -18,83 +19,7 @@ var bootstrap = function ($, learun) { text: 'text' }); var now = new Date(); - $('#PayYear').lrselectSet(now.getFullYear()); - $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); - $('#DeptNo').lrselect({ - value: "deptno", - text: "deptname", - url: top.$.rootUrl + '/LR_SystemModule/DataSource/GetDataTable?code=CdDeptInfo', - select: function (item) { - if (item) { - $('#MajorNo').lrselectRefresh({ - url: top.$.rootUrl + '/LR_SystemModule/DataSource/GetDataTable', - param: { code: "CdMajorInfo", strWhere: "DeptNo='" + item.deptno + "'" } - }); - } - else { - $('#MajorNo').lrselectRefresh({ - url: "", - data: [] - }); - } - $('#ClassNo').lrselectRefresh({ - url: "", - data: [] - }); - } - }); - $('#MajorNo').lrselect({ - value: "majorno", - text: "majorname", - select: function (item) { - if (item) { - $('#ClassNo').lrselectRefresh({ - url: top.$.rootUrl + '/LR_SystemModule/DataSource/GetDataTable', - param: { code: "bjsj", strWhere: "DeptNo='" + item.deptno + "' and majorno='" + item.majorno + "'" } - }); - } - - } - }); - - - $('#MajorNo').on("click", - function () { - var data = $('#DeptNo').lrselectGet(); - if (!data) { - learun.alert.error('请先选择系'); - } - }); - $('#Grade').lrselect({ - url: top.$.rootUrl + '/EducationalAdministration/ClassInfo/GenerateNearByYear', - value: 'value', - text: 'text', - select: function (item) { - if (item) { - $('#ClassNo').lrselectRefresh({ - url: top.$.rootUrl + '/LR_SystemModule/DataSource/GetDataTable', - param: { code: "bjsj", strWhere: "grade='" + item.value + "'" } - }); - } - - } - }); - $('#ClassNo').lrselect({ - value: "classno", - text: "classname" - }); - $('#ClassNo').on("click", - function () { - var data1 = $('#DeptNo').lrselectGet(); - var data2 = $('#MajorNo').lrselectGet(); - var data3 = $('#Grade').lrselectGet(); - if (!data1 || !data2&&!data3) { - learun.alert.error('请先选择系和专业或年级'); - } - if ((!data1 || !data2) && data3) { - learun.alert.error('请先选择年级'); - } - }); + $('#FSYear').lrselectSet(now.getFullYear()); } }; // 保存数据 @@ -102,8 +27,10 @@ var bootstrap = function ($, learun) { if (!$('#form').lrValidform()) { return false; } - var postData = $('#form').lrGetFormData(); - $.lrSaveForm(top.$.rootUrl + '/EducationalAdministration/ArrangeLessonTerm/AsyncModifyArrangeLessonDataByCondition', postData, function (res) { + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/SaveGenerateByCondition', postData, function (res) { // 保存成功后才回调 if (!!callBack) { callBack(); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js index 3f208216b..58c6bd9e7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js @@ -36,8 +36,8 @@ var bootstrap = function ($, learun) { id: 'form', title: '生成缴费信息', url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GenerateByConditionForm', - width: 600, - height: 400, + width: 400, + height: 200, callBack: function (id) { return top[id].acceptClick(refreshGirdData); } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Form.cshtml similarity index 93% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.cshtml rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Form.cshtml index b7747c21c..d7df03b56 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Form.cshtml @@ -28,4 +28,4 @@
    -@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js") +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Form.js similarity index 91% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Form.js index d44e53b9f..a0ab57b63 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Form.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Form.js @@ -20,7 +20,7 @@ var bootstrap = function ($, learun) { }, initData: function () { if (!!keyValue) { - $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/GetFormData?keyValue=' + keyValue, function (data) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/GetFormData?keyValue=' + keyValue, function (data) { for (var id in data) { if (!!data[id].length && data[id].length > 0) { $('#' + id ).jfGridSet('refreshdata', data[id]); @@ -41,7 +41,7 @@ var bootstrap = function ($, learun) { var postData = { strEntity: JSON.stringify($('body').lrGetFormData()) }; - $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/SaveForm?keyValue=' + keyValue, postData, function (res) { + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/SaveForm?keyValue=' + keyValue, postData, function (res) { // 保存成功后才回调 if (!!callBack) { callBack(); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml similarity index 92% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.cshtml rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml index 667bc49c6..67ae3bac0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml @@ -23,4 +23,4 @@ -@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js") +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js similarity index 95% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js index f346c023b..97a21822b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/收费明细管理/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js @@ -22,7 +22,7 @@ var bootstrap = function ($, learun) { learun.layerForm({ id: 'form', title: '新增', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/Form', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/Form', width: 600, height: 400, callBack: function (id) { @@ -37,7 +37,7 @@ var bootstrap = function ($, learun) { learun.layerForm({ id: 'form', title: '编辑', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/Form?keyValue=' + keyValue, + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/Form?keyValue=' + keyValue, width: 600, height: 400, callBack: function (id) { @@ -52,7 +52,7 @@ var bootstrap = function ($, learun) { if (learun.checkrow(keyValue)) { learun.layerConfirm('是否确认删除该项!', function (res) { if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/DeleteForm', { keyValue: keyValue}, function () { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/DeleteForm', { keyValue: keyValue}, function () { refreshGirdData(); }); } @@ -63,7 +63,7 @@ var bootstrap = function ($, learun) { // 初始化列表 initGird: function () { $('#gridtable').lrAuthorizeJfGrid({ - url: top.$.rootUrl + '/ReceiveSendFeeManagement/收费明细管理/GetPageList', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/GetPageList', headData: [ { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, { label: "收费项名称", name: "ChargeItemName", width: 100, align: "left"}, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js index a6f7abb66..87a3a5e72 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js @@ -146,6 +146,7 @@ var bootstrap = function ($, learun) { }); } }, + { label: "年级", name: "Grade", width: 80, align: "left" }, { label: "手机号", name: "Mobile", width: 100, align: "left" }, { label: "学生总余额", name: "FSBlance", width: 100, align: "left" }, { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index b163186b5..753546f91 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -891,7 +891,7 @@ - + @@ -6658,10 +6658,10 @@ - - - - + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config index d9c4d557a..ac8026e8f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/XmlConfig/system.config @@ -74,7 +74,7 @@ - + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuEnroll/StuEnrollService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuEnroll/StuEnrollService.cs index 1e1679fd1..7bb1c5aa3 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuEnroll/StuEnrollService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/StuEnroll/StuEnrollService.cs @@ -687,7 +687,7 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration if (classInfo != null) { teacherInfo = this.BaseRepository("CollegeMIS").FindEntity(a => a.EmpNo == classInfo.ClassDiredctorNo); - result = this.BaseRepository("CollegeMIS").FindList(a => a.Grade == classInfo.Grade && a.MajorNo == stuEnroll.MajorNo && a.SYear == yearAndSemester.AcademicYearShort ) + result = this.BaseRepository("CollegeMIS").FindList(a => a.Grade == classInfo.Grade && a.MajorNo == stuEnroll.MajorNo && a.SYear ==Convert.ToInt32(yearAndSemester.AcademicYearShort )) .Select(a => new StuPayInfo { standerid = a.ChargeItemID, @@ -1765,7 +1765,7 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration var result = new List(); if (classInfo != null) { - result = this.BaseRepository("CollegeMIS").FindList(a => a.Grade == classInfo.Grade && a.MajorNo == stuEnroll.MajorNo && a.SYear == yearAndSemester.AcademicYearShort) + result = this.BaseRepository("CollegeMIS").FindList(a => a.Grade == classInfo.Grade && a.MajorNo == stuEnroll.MajorNo && a.SYear ==Convert.ToInt32(yearAndSemester.AcademicYearShort)) .Select(a => new StuPayInfo { standerid = a.ChargeItemID, diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index 8142012df..b214ca61b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1842,10 +1842,10 @@ - - - - + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs index 50ec46fc0..77f38a98a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs @@ -119,6 +119,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public void SaveGenerateByCondition(FinaChargeStuYearEntity entity) + { + try + { + finaChargeStuYearService.SaveGenerateByCondition(entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs index ec3170cc6..131e9c7cd 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs @@ -45,7 +45,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("FSBLANCE")] public decimal? FSBlance { get; set; } /// - /// 缴费标志(0未缴费,1部分缴纳,2已缴清) + /// 缴费标志(0未缴费,1已缴清,4部分缴纳) /// [Column("PAYFEESTATUS")] public int? PayFeeStatus { get; set; } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs index c4c8f1b4f..4f6459214 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs @@ -44,5 +44,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement void SaveEntity(string keyValue, FinaChargeStuYearEntity entity); #endregion + void SaveGenerateByCondition(FinaChargeStuYearEntity entity); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 12483be1f..7ea8a1085 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -4,6 +4,7 @@ using Learun.Util; using System; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Text; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement @@ -161,5 +162,47 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion + public void SaveGenerateByCondition(FinaChargeStuYearEntity entity) + { + var db = BaseRepository("CollegeMIS").BeginTrans(); + try + { + //获取缴费学生 + var stulist= db.FindList(m=>m.F_CheckMark==true); + //获取收费标准 + var finaChargesStandardList= db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID]"); + var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear + from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] + group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); + foreach (var stuitem in stulist) + { + //写入学生年度缴费数据 + var finaChargeStuYear=new FinaChargeStuYearEntity(); + finaChargeStuYear.Create(); + finaChargeStuYear.StuNo = stuitem.StuNo; + finaChargeStuYear.FSYear = entity.FSYear; + finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade==stuitem.Grade)?.YJAmount; + finaChargeStuYear.SJAmount = 0; + finaChargeStuYear.FSBlance = 0; + finaChargeStuYear.PayFeeStatus = 0; + db.Insert(finaChargeStuYear); + //写入年度缴费明细数据 + + } + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理BLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs similarity index 85% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理BLL.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs index 90f487b42..aad977cbe 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理BLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs @@ -12,9 +12,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-07 16:40 /// 描 述:FinaChargeStuYearItem ///
    - public class 收费明细管理BLL : 收费明细管理IBLL + public class FinaChargeStuYearItemBLL : FinaChargeStuYearItemIBLL { - private 收费明细管理Service 收费明细管理Service = new 收费明细管理Service(); + private FinaChargeStuYearItemService FinaChargeStuYearItemService = new FinaChargeStuYearItemService(); #region 获取数据 @@ -28,7 +28,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return 收费明细管理Service.GetPageList(pagination, queryJson); + return FinaChargeStuYearItemService.GetPageList(pagination, queryJson); } catch (Exception ex) { @@ -52,7 +52,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return 收费明细管理Service.GetFinaChargeStuYearItemEntity(keyValue); + return FinaChargeStuYearItemService.GetFinaChargeStuYearItemEntity(keyValue); } catch (Exception ex) { @@ -79,7 +79,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - 收费明细管理Service.DeleteEntity(keyValue); + FinaChargeStuYearItemService.DeleteEntity(keyValue); } catch (Exception ex) { @@ -104,7 +104,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - 收费明细管理Service.SaveEntity(keyValue, entity); + FinaChargeStuYearItemService.SaveEntity(keyValue, entity); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/FinaChargeStuYearItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs similarity index 97% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/FinaChargeStuYearItemEntity.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs index da2b39157..071dd24bf 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/FinaChargeStuYearItemEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs @@ -55,7 +55,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("FSBLANCE")] public decimal? FSBlance { get; set; } /// - /// 缴费标志(0未缴费,1部分缴纳,2已缴清) + /// 缴费标志(0未缴费,1已缴清,4部分缴纳) /// [Column("PAYFEESTATUS")] public int? PayFeeStatus { get; set; } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理IBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs similarity index 97% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理IBLL.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs index 56ebb721d..0193dd83c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理IBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs @@ -11,7 +11,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-07 16:40 /// 描 述:FinaChargeStuYearItem ///
    - public interface 收费明细管理IBLL + public interface FinaChargeStuYearItemIBLL { #region 获取数据 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理Service.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs similarity index 98% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理Service.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index eb1a55cf7..15156a791 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/收费明细管理/收费明细管理Service.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -15,7 +15,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-07 16:40 /// 描 述:FinaChargeStuYearItem ///
    - public class 收费明细管理Service : RepositoryFactory + public class FinaChargeStuYearItemService : RepositoryFactory { #region 获取数据 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs index 9c5cf0757..dcc3dbda8 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs @@ -54,6 +54,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    [Column("CLASSNO")] public string ClassNo { get; set; } + + [Column("GRADE")] + public string Grade { get; set; } /// /// Mobile /// @@ -64,6 +67,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    [Column("FSBLANCE")] public decimal? FSBlance { get; set; } + + [Column("F_CHECKMARK")] + public bool? F_CheckMark { get; set; } #endregion #region 扩展操作 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs index 84df95697..b28f698d5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs @@ -30,19 +30,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(@" - t.FSId, - t.StuNo, - t.StuName, - t.GenderNo, - t.IdentityCardNo, - t.DeptNo, - t.MajorNo, - t.ClassNo, - t.Mobile, - t.FSBlance - "); + strSql.Append("SELECT * "); strSql.Append(" FROM FinaChargeStudent t "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); @@ -243,8 +231,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - this.BaseRepository("CollegeMIS").ExecuteBySql(@"insert into FinaChargeStudent(FSId, StuNo, StuName, GenderNo, IdentityCardNo, DeptNo, MajorNo, ClassNo, Mobile, FSBlance, F_CheckMark) - select newid(), stuno, stuname, genderno, identitycardno, deptno, majorno, classno, mobile, 0, 1 from StuInfoBasic a where a.checkmark = 1 and stuno not in(select stuno from FinaChargeStudent)"); + this.BaseRepository("CollegeMIS").ExecuteBySql(@"insert into FinaChargeStudent(FSId, StuNo, StuName, GenderNo, IdentityCardNo, DeptNo, MajorNo, ClassNo,Grade, Mobile, FSBlance, F_CheckMark) + select newid(), stuno, stuname, genderno, identitycardno, deptno, majorno, classno,grade, mobile, 0, 1 from StuInfoBasic a where a.checkmark = 1 and stuno not in(select stuno from FinaChargeStudent)"); } catch (Exception ex) { @@ -263,7 +251,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - this.BaseRepository("CollegeMIS").ExecuteBySql(@"update [FinaChargeStudent] set StuName=a.StuName,GenderNo=a.GenderNo,IdentityCardNo=a.IdentityCardNo,DeptNo=a.DeptNo, MajorNo=a.MajorNo, ClassNo=a.ClassNo, Mobile=a.Mobile + this.BaseRepository("CollegeMIS").ExecuteBySql(@"update [FinaChargeStudent] set StuName=a.StuName,GenderNo=a.GenderNo,IdentityCardNo=a.IdentityCardNo,DeptNo=a.DeptNo, MajorNo=a.MajorNo, ClassNo=a.ClassNo,Grade=a.Grade, Mobile=a.Mobile from StuInfoBasic a left join [FinaChargeStudent] b on a.stuno=b.stuno"); } catch (Exception ex) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs index dc86ba2f0..07fab4b92 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs @@ -48,7 +48,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// SYear ///
    [Column("SYEAR")] - public string SYear { get; set; } + public int SYear { get; set; } /// /// CheckMark /// @@ -87,7 +87,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 已交金额 ///
    [NotMapped] - public decimal? PayedMoney { get; set; } + public decimal? PayedMoney { get; set; } + /// + /// + /// + [NotMapped] + public decimal? YJAmount { get; set; } /// /// 实缴金额 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs index 8634f276a..2b61c37b8 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs @@ -365,7 +365,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement DeptNo = deptNo, MajorNo = majorNo, Standard = item.Standard, - SYear = sYear, + SYear =Convert.ToInt32(sYear), CheckMark = false }; entity.Create(); From 4a19f15a7849c38d2db1a14b05d5232ea4d285e2 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Tue, 8 Aug 2023 18:21:56 +0800 Subject: [PATCH 11/50] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E5=B9=B4=E5=BA=A6?= =?UTF-8?q?=E7=BC=B4=E8=B4=B9=E6=98=8E=E7=BB=86=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearService.cs | 89 +++++++++++++++---- .../FinaChargeStuYearItemEntity.cs | 7 ++ 2 files changed, 78 insertions(+), 18 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 7ea8a1085..966d7c442 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -58,10 +58,10 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } if (!queryParam["PayFeeStatus"].IsEmpty()) { - dp.Add("PayFeeStatus",queryParam["PayFeeStatus"].ToString(), DbType.String); + dp.Add("PayFeeStatus", queryParam["PayFeeStatus"].ToString(), DbType.String); strSql.Append(" AND t.PayFeeStatus = @PayFeeStatus "); } - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) { @@ -112,7 +112,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - this.BaseRepository("CollegeMIS").Delete(t=>t.FSYId == keyValue); + this.BaseRepository("CollegeMIS").Delete(t => t.FSYId == keyValue); } catch (Exception ex) { @@ -168,26 +168,79 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { //获取缴费学生 - var stulist= db.FindList(m=>m.F_CheckMark==true); + var stulist = db.FindList(m => m.F_CheckMark == true); + //获取已有年度学生缴费记录 + var oldFinaChargeStuYearList = db.FindList(m => m.FSYear == entity.FSYear); + //获取已有年度学生缴费明细记录 + var oldFinaChargeStuYearItemList = db.FindList(m => m.FSYear == entity.FSYear); //获取收费标准 - var finaChargesStandardList= db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID]"); + var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1"); var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear - from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] + from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); foreach (var stuitem in stulist) { - //写入学生年度缴费数据 - var finaChargeStuYear=new FinaChargeStuYearEntity(); - finaChargeStuYear.Create(); - finaChargeStuYear.StuNo = stuitem.StuNo; - finaChargeStuYear.FSYear = entity.FSYear; - finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade==stuitem.Grade)?.YJAmount; - finaChargeStuYear.SJAmount = 0; - finaChargeStuYear.FSBlance = 0; - finaChargeStuYear.PayFeeStatus = 0; - db.Insert(finaChargeStuYear); - //写入年度缴费明细数据 - + //判断有无年度学生缴费数据 + if (oldFinaChargeStuYearList.Count(m => m.StuNo == stuitem.StuNo) > 0) + { + var oldFinaChargeStuYearEntity = oldFinaChargeStuYearList.FirstOrDefault(m => m.StuNo == stuitem.StuNo); + //查询明细并比对 + var oldFinaChargeStuYearItemListForStu = oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Select(m => m.ChargeItemCode); + string oldcodeitem = string.Join(",", oldFinaChargeStuYearItemListForStu); + var needinsertchargeitem = finaChargesStandardList.Where(m => m.MajorNo == stuitem.MajorNo && m.SYear == entity.FSYear && m.Grade == stuitem.Grade && !oldcodeitem.Contains(m.ChargeItemCode)); + foreach (var finaChargesStandardEntity in needinsertchargeitem) + { + var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); + finaChargeStuYearItem.Create(); + finaChargeStuYearItem.FSYId = oldFinaChargeStuYearEntity.FSYId; + finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; + finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; + finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; + //主表应缴金额更新 + oldFinaChargeStuYearEntity.YJAmount += finaChargeStuYearItem.Standard; + //余额扣减 + oldFinaChargeStuYearEntity.FSBlance -= finaChargeStuYearItem.Standard; + db.Insert(finaChargeStuYearItem); + } + if (oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Sum(m => m.SJAmount) > 0) + oldFinaChargeStuYearEntity.PayFeeStatus = 4; + else + { + oldFinaChargeStuYearEntity.PayFeeStatus = 0; + } + //年度学生缴费数据主表更新 + db.Update(oldFinaChargeStuYearEntity); + + } + else + { + //写入学生年度缴费数据 + var finaChargeStuYear = new FinaChargeStuYearEntity(); + finaChargeStuYear.Create(); + finaChargeStuYear.StuNo = stuitem.StuNo; + finaChargeStuYear.FSYear = entity.FSYear; + finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; + finaChargeStuYear.SJAmount = 0; + finaChargeStuYear.FSBlance = -finaChargeStuYear.YJAmount; + finaChargeStuYear.PayFeeStatus = 0; + //写入年度缴费明细数据 + foreach (var finaChargesStandardEntity in finaChargesStandardList) + { + var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); + finaChargeStuYearItem.Create(); + finaChargeStuYearItem.FSYId = finaChargeStuYear.FSYId; + finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; + finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; + finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; + db.Insert(finaChargeStuYearItem); + } + db.Insert(finaChargeStuYear); + + } + //更新学生缴费总表 + db.ExecuteBySql("update FinaChargeStudent set FSBlance=(select sum(isnull([FSBlance],0)) from [dbo].[FinaChargeStuYear] where StuNo='" + stuitem.StuNo + "')"); } db.Commit(); } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs index 071dd24bf..abc4eee4c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs @@ -24,6 +24,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    [Column("FSYID")] public string FSYId { get; set; } + + [Column("FSYEAR")] + public int? FSYear { get; set; } /// /// ChargeItemCode /// @@ -90,6 +93,10 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement this.FSYIId = Guid.NewGuid().ToString(); this.F_CreateDate = DateTime.Now; UserInfo userInfo = LoginUserInfo.Get(); + F_DeleteMark = false; + SJAmount = 0; + PayFeeStatus = 0; + FSBlance = 0; this.F_CreateUserId = userInfo.userId; this.F_CreateUserName = userInfo.realName; } From 302af1e043fb2efb42d6d715f4cca099831bdcfc Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Tue, 8 Aug 2023 22:04:55 +0800 Subject: [PATCH 12/50] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E5=B9=B4=E5=BA=A6?= =?UTF-8?q?=E7=BC=B4=E8=B4=B9=E6=98=8E=E7=BB=86=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearService.cs | 57 ++++++++++--------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 966d7c442..c0143b521 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -174,12 +174,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //获取已有年度学生缴费明细记录 var oldFinaChargeStuYearItemList = db.FindList(m => m.FSYear == entity.FSYear); //获取收费标准 - var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1"); + var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='"+entity.FSYear+"'"); var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear - from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 - group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); + from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); foreach (var stuitem in stulist) { + var studentchargestanderdlist = finaChargesStandardList.Where(m =>m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade); //判断有无年度学生缴费数据 if (oldFinaChargeStuYearList.Count(m => m.StuNo == stuitem.StuNo) > 0) { @@ -187,12 +187,13 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //查询明细并比对 var oldFinaChargeStuYearItemListForStu = oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Select(m => m.ChargeItemCode); string oldcodeitem = string.Join(",", oldFinaChargeStuYearItemListForStu); - var needinsertchargeitem = finaChargesStandardList.Where(m => m.MajorNo == stuitem.MajorNo && m.SYear == entity.FSYear && m.Grade == stuitem.Grade && !oldcodeitem.Contains(m.ChargeItemCode)); + var needinsertchargeitem = studentchargestanderdlist.Where(m =>!oldcodeitem.Contains(m.ChargeItemCode)); foreach (var finaChargesStandardEntity in needinsertchargeitem) { var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); finaChargeStuYearItem.Create(); finaChargeStuYearItem.FSYId = oldFinaChargeStuYearEntity.FSYId; + finaChargeStuYearItem.FSYear = entity.FSYear; finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; @@ -215,32 +216,36 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } else { - //写入学生年度缴费数据 - var finaChargeStuYear = new FinaChargeStuYearEntity(); - finaChargeStuYear.Create(); - finaChargeStuYear.StuNo = stuitem.StuNo; - finaChargeStuYear.FSYear = entity.FSYear; - finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; - finaChargeStuYear.SJAmount = 0; - finaChargeStuYear.FSBlance = -finaChargeStuYear.YJAmount; - finaChargeStuYear.PayFeeStatus = 0; - //写入年度缴费明细数据 - foreach (var finaChargesStandardEntity in finaChargesStandardList) + if (studentchargestanderdlist.Count()>0) { - var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); - finaChargeStuYearItem.Create(); - finaChargeStuYearItem.FSYId = finaChargeStuYear.FSYId; - finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; - finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; - finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; - finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; - db.Insert(finaChargeStuYearItem); - } - db.Insert(finaChargeStuYear); + //写入学生年度缴费数据 + var finaChargeStuYear = new FinaChargeStuYearEntity(); + finaChargeStuYear.Create(); + finaChargeStuYear.StuNo = stuitem.StuNo; + finaChargeStuYear.FSYear = entity.FSYear; + finaChargeStuYear.SJAmount = 0; + finaChargeStuYear.PayFeeStatus = 0; + //写入年度缴费明细数据 + foreach (var finaChargesStandardEntity in studentchargestanderdlist) + { + var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); + finaChargeStuYearItem.Create(); + finaChargeStuYearItem.FSYId = finaChargeStuYear.FSYId; + finaChargeStuYearItem.FSYear = entity.FSYear; + finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; + finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; + finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; + db.Insert(finaChargeStuYearItem); + } + finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; + finaChargeStuYear.FSBlance = -finaChargeStuYear.YJAmount; + db.Insert(finaChargeStuYear); + } } //更新学生缴费总表 - db.ExecuteBySql("update FinaChargeStudent set FSBlance=(select sum(isnull([FSBlance],0)) from [dbo].[FinaChargeStuYear] where StuNo='" + stuitem.StuNo + "')"); + db.ExecuteBySql("update FinaChargeStudent set FSBlance=(select sum(isnull([FSBlance],0)) from [dbo].[FinaChargeStuYear] where StuNo='" + stuitem.StuNo + "') where StuNo='" + stuitem.StuNo + "'"); } db.Commit(); } From 4e93b029618b5a213933c92d4b940c753ce76c7e Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Wed, 9 Aug 2023 18:30:13 +0800 Subject: [PATCH 13/50] =?UTF-8?q?=E5=AD=A6=E5=88=86=E5=90=88=E8=AE=A1?= =?UTF-8?q?=E6=94=B9=E5=88=B0=E4=BA=8B=E7=89=A9=E5=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYear/FinaChargeStuYearService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index c0143b521..6e16e291d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -244,10 +244,10 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement db.Insert(finaChargeStuYear); } } + db.Commit(); //更新学生缴费总表 - db.ExecuteBySql("update FinaChargeStudent set FSBlance=(select sum(isnull([FSBlance],0)) from [dbo].[FinaChargeStuYear] where StuNo='" + stuitem.StuNo + "') where StuNo='" + stuitem.StuNo + "'"); - } - db.Commit(); + BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargeStudent set FSBlance=(select sum(isnull([FSBlance],0)) from [dbo].[FinaChargeStuYear] where StuNo='" + stuitem.StuNo + "') where StuNo='" + stuitem.StuNo + "'");} + } catch (Exception ex) { From 040e025100d036a10e881be42ea38b763de66ec0 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Wed, 9 Aug 2023 22:32:57 +0800 Subject: [PATCH 14/50] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=94=B6=E8=B4=B9?= =?UTF-8?q?=E6=A0=87=E5=87=86=E5=AE=A1=E6=A0=B8=E3=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=AD=A6=E7=94=9F=E7=BC=B4=E8=B4=B9=E6=80=BB=E8=A1=A8=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargesStandardController.cs | 30 +++++--- .../Views/FinaChargesStandard/Index.cshtml | 3 + .../Views/FinaChargesStandard/Index.js | 68 +++++++++++++++++-- .../FinaChargeStuYearService.cs | 21 +++--- .../FinaChargesStandardBLL.cs | 37 ++++++++++ .../FinaChargesStandardIBLL.cs | 2 + .../FinaChargesStandardService.cs | 68 ++++++++++++++++--- 7 files changed, 196 insertions(+), 33 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs index 0c1634b1f..545a007d5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs @@ -228,21 +228,31 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult DeleteForm(string keyValue) { - var entity = finaChargesStandardIBLL.GetFinaChargesStandardEntity(keyValue); - if (entity == null) - { - return Fail("收费标准不存在!"); - } //判断某专业收费标准是否已使用 - var isCharge = finaChargesStandardIBLL.IsChargeByMajorNo(entity.DeptNo,entity.MajorNo, entity.SYear.ToString(), entity.Grade); - if (isCharge) - { - return Fail("该信息正在被系统使用,不能删除!"); - } + //var isCharge = finaChargesStandardIBLL.IsChargeByMajorNo(entity.DeptNo,entity.MajorNo, entity.SYear.ToString(), entity.Grade); + //if (isCharge) + //{ + // return Fail("该信息正在被系统使用,不能删除!"); + //} finaChargesStandardIBLL.DeleteEntity(keyValue); return Success("删除成功!"); } + [HttpPost] + [AjaxOnly] + public ActionResult Lock(string deptno, string majorNo, string syear, string grade,string ChargeStandardID) + { + finaChargesStandardIBLL.Lock(deptno, majorNo, syear, grade, ChargeStandardID); + return Success("审核成功!"); + } + + [HttpPost] + [AjaxOnly] + public ActionResult UnLock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID) + { + finaChargesStandardIBLL.UnLock(deptno, majorNo, syear, grade, ChargeStandardID); + return Success("去审成功!"); + } /// /// 保存实体数据(新增、修改) /// 主键 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml index 03189f2c1..3066d0a8c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml @@ -34,6 +34,9 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js index b5aa307a7..7b0b38510 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js @@ -8,7 +8,7 @@ var refreshGirdData; var selectedRow; var bootstrap = function ($, learun) { "use strict"; - var sYear,grade,deptno,majorno; + var sYear, grade, deptno, majorno; var page = { init: function () { $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo', value: 'deptno', text: 'deptname' }); @@ -54,7 +54,7 @@ var bootstrap = function ($, learun) { return; } deptno = $('#DeptNo').lrselectGet(); - majorno=$('#MajorNo').lrselectGet(); + majorno = $('#MajorNo').lrselectGet(); page.search(); }); // 新增 @@ -69,7 +69,7 @@ var bootstrap = function ($, learun) { learun.layerForm({ id: 'formFinaChargesStandard', title: '新增', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/Form?deptno=' + selectedRow.DeptNo+'&majorno=' + selectedRow.MajorNo + '&syear=' + sYear + '&grade=' + grade + '', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/Form?deptno=' + selectedRow.DeptNo + '&majorno=' + selectedRow.MajorNo + '&syear=' + sYear + '&grade=' + grade + '', width: 1000, height: 600, callBack: function (id) { @@ -117,6 +117,54 @@ var bootstrap = function ($, learun) { }); } }); + //审核 + $('#lr_lock').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('TempId'); + selectedRow = $('#gridtable').jfGridGet('rowdata'); + if (learun.checkrow(keyValue)) { + learun.layerConfirm('是否确认审核该项!', function (res) { + if (res) { + if (selectedRow.ChargeStandardID == 0) { + learun.postForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/Lock', + { deptno: selectedRow.DeptNo, majorno: selectedRow.MajorNo, syear: sYear, grade: grade, ChargeStandardID: '' }, + function () { + refreshGirdData(); + }); + } else { + learun.postForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/Lock', + { deptno: '', majorno: '', syear: '', grade: '', ChargeStandardID: selectedRow.ChargeStandardID }, + function () { + refreshGirdData(); + }); + } + } + }); + } + }); + //去审 + $('#lr_unlock').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('TempId'); + selectedRow = $('#gridtable').jfGridGet('rowdata'); + if (learun.checkrow(keyValue)) { + learun.layerConfirm('是否确认去审该项!', function (res) { + if (res) { + if (selectedRow.ChargeStandardID == 0) { + learun.postForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/UnLock', + { deptno: selectedRow.DeptNo, majorno: selectedRow.MajorNo, syear: sYear, grade: grade, ChargeStandardID: '' }, + function () { + refreshGirdData(); + }); + } else { + learun.postForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/UnLock', + { deptno: '', majorno: '', syear: '', grade: '', ChargeStandardID: selectedRow.ChargeStandardID }, + function () { + refreshGirdData(); + }); + } + } + }); + } + }); }, // 初始化列表 initGird: function () { @@ -133,7 +181,8 @@ var bootstrap = function ($, learun) { callback(_data['deptname']); } }); - } }, + } + }, { label: "专业编号", name: "MajorNo", width: 100, align: "left" }, { label: "专业名称", name: "MajorName", width: 200, align: "left" }, { label: "收费项目名称", name: "ChargeItemName", width: 200, align: "left" }, @@ -148,7 +197,14 @@ var bootstrap = function ($, learun) { callback(_data.text); } }); - } }, + } + }, + { + label: "是否审核", name: "CheckMark", width: 100, align: "left", + formatter: function (cellvalue, rowObject) { + return cellvalue == "1" ? "" : ""; + } + } ], isTree: true, mainId: 'TempId', @@ -161,7 +217,7 @@ var bootstrap = function ($, learun) { }, search: function (param) { param = param || {}; - param.SYear =sYear; + param.SYear = sYear; param.Grade = grade; param.DeptNo = deptno; param.MajorNo = majorno; diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 6e16e291d..e99969761 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -174,12 +174,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //获取已有年度学生缴费明细记录 var oldFinaChargeStuYearItemList = db.FindList(m => m.FSYear == entity.FSYear); //获取收费标准 - var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='"+entity.FSYear+"'"); + var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear - from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); + from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); foreach (var stuitem in stulist) { - var studentchargestanderdlist = finaChargesStandardList.Where(m =>m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade); + var studentchargestanderdlist = finaChargesStandardList.Where(m => m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade); //判断有无年度学生缴费数据 if (oldFinaChargeStuYearList.Count(m => m.StuNo == stuitem.StuNo) > 0) { @@ -187,7 +187,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //查询明细并比对 var oldFinaChargeStuYearItemListForStu = oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Select(m => m.ChargeItemCode); string oldcodeitem = string.Join(",", oldFinaChargeStuYearItemListForStu); - var needinsertchargeitem = studentchargestanderdlist.Where(m =>!oldcodeitem.Contains(m.ChargeItemCode)); + var needinsertchargeitem = studentchargestanderdlist.Where(m => !oldcodeitem.Contains(m.ChargeItemCode)); foreach (var finaChargesStandardEntity in needinsertchargeitem) { var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); @@ -216,7 +216,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } else { - if (studentchargestanderdlist.Count()>0) + if (studentchargestanderdlist.Count() > 0) { //写入学生年度缴费数据 var finaChargeStuYear = new FinaChargeStuYearEntity(); @@ -236,6 +236,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; + finaChargeStuYearItem.FSBlance = -finaChargeStuYearItem.Standard; db.Insert(finaChargeStuYearItem); } finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; @@ -244,10 +245,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement db.Insert(finaChargeStuYear); } } - db.Commit(); - //更新学生缴费总表 - BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargeStudent set FSBlance=(select sum(isnull([FSBlance],0)) from [dbo].[FinaChargeStuYear] where StuNo='" + stuitem.StuNo + "') where StuNo='" + stuitem.StuNo + "'");} - + } + db.Commit(); + //更新学生缴费总表 + BaseRepository("CollegeMIS").ExecuteBySql(@"update FinaChargeStudent set FSBlance=a.[FSBlance] + from (select isnull(sum([FSBlance]),0) as [FSBlance],StuNo from [FinaChargeStuYear] group by StuNo) a left join + FinaChargeStudent b on a.stuno=b.stuno"); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs index deb91357a..c7b61edf4 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs @@ -314,6 +314,43 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public void Lock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID) + { + try + { + finaChargesStandardService.Lock(deptno, majorNo, syear, grade, ChargeStandardID); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + public void UnLock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID) + { + try + { + finaChargesStandardService.UnLock(deptno, majorNo, syear, grade, ChargeStandardID); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs index 93a78038f..605874317 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs @@ -100,5 +100,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion IEnumerable GetFinaChargesStandardListByYongYou(string stuNo, int jiaoFeiYear); + void Lock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID); + void UnLock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs index 2b61c37b8..5df743c5f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs @@ -77,9 +77,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("select CONVERT(varchar,t.ChargeStandardID)+'Temp' as TempId,t.ChargeStandardID,t.ChargeItemID,i.ChargeItemName,i.ChargeItemType,i.ChargeItemCode,t.Standard,'' as MajorNo,'' as MajorName,'' as DeptNo,t.SYear,t.Grade,t.MajorNo as ParentId "); + strSql.Append("select CONVERT(varchar,t.ChargeStandardID)+'Temp' as TempId,t.ChargeStandardID,t.ChargeItemID,i.ChargeItemName,i.ChargeItemType,i.ChargeItemCode,t.Standard,'' as MajorNo,'' as MajorName,'' as DeptNo,t.SYear,t.Grade,t.MajorNo as ParentId,t.CheckMark"); strSql.Append(" FROM [dbo].[CdMajor] m left join [dbo].[FinaChargesStandard] t on m.MajorNo=t.MajorNo left join [dbo].[FinaChargeItem] i on t.ChargeItemID=i.ChargeItemID "); - strSql.Append(" WHERE 1=1 and i.CheckMark=1 "); + strSql.Append(" WHERE 1=1 and i.CheckMark=1 and i.F_DeleteMark=0 and t.F_DeleteMark=0 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); @@ -105,7 +105,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } strSql.Append(" union "); strSql.Append(" select m.MajorNo as TempId,'' as ChargeStandardID,0 as ChargeItemID,null as ChargeItemName,null as ChargeItemType, null as ChargeItemCode,"); - strSql.Append(" (select SUM(t.Standard) from [dbo].[FinaChargesStandard] t left join [FinaChargeItem] tt on t.ChargeItemID=tt.ChargeItemID where tt.CheckMark=1 and t.MajorNo=m.MajorNo "); + strSql.Append(" (select SUM(t.Standard) from [dbo].[FinaChargesStandard] t left join [FinaChargeItem] tt on t.ChargeItemID=tt.ChargeItemID where tt.CheckMark=1 and tt.F_DeleteMark=0 and t.MajorNo=m.MajorNo and t.CheckMark=1 and t.F_DeleteMark=0 "); if (!queryParam["SYear"].IsEmpty()) { strSql.Append(" AND t.SYear = @SYear "); @@ -114,7 +114,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { strSql.Append(" AND t.Grade = @Grade "); } - strSql.Append(" ) as Standard,m.MajorNo,m.MajorName,m.DeptNo,null as SYear,null as Grade,'0' as ParentId"); + strSql.Append(" ) as Standard,m.MajorNo,m.MajorName,m.DeptNo,null as SYear,null as Grade,'0' as ParentId, 0 as CheckMark"); strSql.Append(" from [dbo].[CdMajor] m "); strSql.Append(" WHERE 1=1 "); if (!queryParam["DeptNo"].IsEmpty()) @@ -173,7 +173,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 学期 /// 年级 /// - public IEnumerable GetFinaChargesStandardListByMajorNo(string majorNo, string syear,string grade) + public IEnumerable GetFinaChargesStandardListByMajorNo(string majorNo, string syear, string grade) { try { @@ -291,7 +291,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - this.BaseRepository("CollegeMIS").Delete(t => t.ChargeStandardID == keyValue); + this.BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargesStandard set F_DeleteMark=1 where ChargeStandardID='" + keyValue + "'"); } catch (Exception ex) { @@ -346,7 +346,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// /// 新增保存 /// - public void SaveFinaChargesStandardList(string deptNo,string majorNo, string sYear, string grade, List finaChargesStandardList) + public void SaveFinaChargesStandardList(string deptNo, string majorNo, string sYear, string grade, List finaChargesStandardList) { var db = this.BaseRepository("CollegeMIS"); try @@ -365,7 +365,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement DeptNo = deptNo, MajorNo = majorNo, Standard = item.Standard, - SYear =Convert.ToInt32(sYear), + SYear = Convert.ToInt32(sYear), CheckMark = false }; entity.Create(); @@ -454,5 +454,57 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } + + public void Lock(string deptno, string majorNo, string syear, string grade,string ChargeStandardID) + { + try + { + if (!string.IsNullOrEmpty(deptno)) + { + BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargesStandard set CheckMark=1 where Grade='" + grade + "' and DeptNo='" + deptno + "' and MajorNo='" + majorNo + "' and SYear='" + syear + "'"); + } + else + { + BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargesStandard set CheckMark=1 where ChargeStandardID='"+ ChargeStandardID + "'"); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + public void UnLock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID) + { + try + { + if (!string.IsNullOrEmpty(deptno)) + { + BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargesStandard set CheckMark=0 where Grade='" + grade + "' and DeptNo='" + deptno + "' and MajorNo='" + majorNo + "' and SYear='" + syear + "'"); + } + else + { + BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargesStandard set CheckMark=0 where ChargeStandardID='" + ChargeStandardID + "'"); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } From af7b2c678d0b98069aad82aa5d190b7e1c6181d2 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Thu, 10 Aug 2023 18:27:46 +0800 Subject: [PATCH 15/50] =?UTF-8?q?=E6=94=B6=E8=B4=B9=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearController.cs | 7 ++ .../Views/FinaChargeStuYear/Index.cshtml | 21 ++++-- .../Views/FinaChargeStuYear/Index.js | 24 ++----- .../Views/FinaChargeStuYearItem/Index.cshtml | 42 ++++++++++++ .../Views/FinaChargeStuYearItem/Index.js | 63 +++++++++++++++-- .../FinaChargeStuYear/FinaChargeStuYearBLL.cs | 35 ++++++++++ .../FinaChargeStuYearEntity.cs | 12 ++++ .../FinaChargeStuYearIBLL.cs | 1 + .../FinaChargeStuYearService.cs | 67 ++++++++++++++----- .../FinaChargeStuYearItemEntity.cs | 10 +++ .../FinaChargeStuYearItemService.cs | 50 ++++++++++---- 11 files changed, 277 insertions(+), 55 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs index 895fd67b0..78a537c9a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -47,6 +47,13 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers #region 获取数据 + [HttpGet] + [AjaxOnly] + public ActionResult GetYearTree() + { + var data = finaChargeStuYearIBLL.GetTree(); + return Success(data); + } /// /// 获取页面显示列表数据 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml index d8a64b9db..35f92d6b8 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml @@ -24,12 +24,24 @@
    -
    缴费年度
    - +
    姓名
    + +
    +
    +
    身份证号
    + +
    +
    +
    系部
    +
    +
    +
    +
    专业
    +
    -
    缴费状态
    -
    +
    班级
    +
    @@ -42,7 +54,6 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js index 58c6bd9e7..3978e1ea8 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js @@ -16,7 +16,7 @@ var bootstrap = function ($, learun) { bind: function () { // 初始化左侧树形数据 $('#dataTree').lrtree({ - url: top.$.rootUrl + '/EducationalAdministration/StuInfoBasic/GetTree', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetYearTree', nodeClick: function (item) { fSYear = item.value; page.search(); @@ -24,7 +24,10 @@ var bootstrap = function ($, learun) { }); $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { page.search(queryJson); - }, 220, 400); + }, 250, 400); + $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo', value: 'deptno', text: 'deptname' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); // 刷新 $('#lr_refresh').on('click', function () { @@ -43,13 +46,13 @@ var bootstrap = function ($, learun) { } }); }); - // 编辑 + // 退费 $('#lr_edit').on('click', function () { var keyValue = $('#gridtable').jfGridValue('FSYId'); if (learun.checkrow(keyValue)) { learun.layerForm({ id: 'form', - title: '编辑', + title: '退费', url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/Form?keyValue=' + keyValue, width: 600, height: 400, @@ -59,19 +62,6 @@ var bootstrap = function ($, learun) { }); } }); - // 删除 - $('#lr_delete').on('click', function () { - var keyValue = $('#gridtable').jfGridValue('FSYId'); - if (learun.checkrow(keyValue)) { - learun.layerConfirm('是否确认删除该项!', function (res) { - if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/DeleteForm', { keyValue: keyValue}, function () { - refreshGirdData(); - }); - } - }); - } - }); }, // 初始化列表 initGird: function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml index 67ae3bac0..5535550f6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml @@ -7,6 +7,48 @@
    +
    +
    +
    +
    +
    学号
    + +
    +
    +
    姓名
    + +
    +
    +
    收费项目名称
    + +
    +
    +
    收费项目编号
    + +
    +
    +
    缴费年度
    +
    +
    +
    +
    缴费状态
    +
    +
    +
    +
    收费项目类型
    +
    +
    +
    +
    专业
    +
    +
    +
    +
    班级
    +
    +
    +
    +
    +
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js index 97a21822b..d26a88866 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js @@ -5,6 +5,7 @@ * 描 述:FinaChargeStuYearItem */ var refreshGirdData; +var sYear; var bootstrap = function ($, learun) { "use strict"; var page = { @@ -13,6 +14,18 @@ var bootstrap = function ($, learun) { page.bind(); }, bind: function () { + $('#SYear').lrselect({ + url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', + value: 'value', + text: 'text' + }); + var now = new Date(); + sYear = now.getFullYear(); + $('#SYear').lrselectSet(sYear); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); + $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); // 刷新 $('#lr_refresh').on('click', function () { location.reload(); @@ -46,11 +59,11 @@ var bootstrap = function ($, learun) { }); } }); - // 删除 + // 作废 $('#lr_delete').on('click', function () { var keyValue = $('#gridtable').jfGridValue('FSYIId'); if (learun.checkrow(keyValue)) { - learun.layerConfirm('是否确认删除该项!', function (res) { + learun.layerConfirm('是否确认作废该项!', function (res) { if (res) { learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/DeleteForm', { keyValue: keyValue}, function () { refreshGirdData(); @@ -62,9 +75,38 @@ var bootstrap = function ($, learun) { }, // 初始化列表 initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ + $('#gridtable').jfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/GetPageList', headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, { label: "收费项名称", name: "ChargeItemName", width: 100, align: "left"}, { label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", @@ -77,8 +119,9 @@ var bootstrap = function ($, learun) { } }); }}, - { label: "应缴金额", name: "Standard", width: 100, align: "left"}, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, + { label: "收费标准", name: "Standard", width: 100, align: "left"}, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, + { label: "应缴余额", name: "FSBlance", width: 100, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatterAsync: function (callback, value, row, op,$cell) { learun.clientdata.getAsync('dataItem', { @@ -88,7 +131,14 @@ var bootstrap = function ($, learun) { callback(_data.text); } }); - }}, + } + }, + { + label: "是否作废", name: "F_DeleteMark", width: 100, align: "left", + formatter: function (cellvalue, rowObject) { + return cellvalue == "1" ? "" : ""; + } + } ], mainId:'FSYIId', isPage: true @@ -97,6 +147,7 @@ var bootstrap = function ($, learun) { }, search: function (param) { param = param || {}; + param.SYear = sYear; $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); } }; diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs index 77f38a98a..da155cf25 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs @@ -138,6 +138,41 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public List GetTree() + { + try + { + var list = finaChargeStuYearService.GetYearList(); + List treeList = new List(); + foreach (var item in list) + { + TreeModel node = new TreeModel + { + id =item.FSYear.ToString(), + text = item.FSYear.ToString(), + value = item.FSYear.ToString(), + showcheck = false, + checkstate = 0, + isexpand = true, + parentId = "" + }; + treeList.Add(node); + } + return treeList.ToTree(); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs index 131e9c7cd..34594d136 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs @@ -69,6 +69,18 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } #endregion #region 扩展字段 + [NotMapped] + public string DeptNo { get; set; } + [NotMapped] + public string MajorNo { get; set; } + [NotMapped] + public string ClassNo { get; set; } + [NotMapped] + public string Grade { get; set; } + [NotMapped] + public string IdentityCardNo { get; set; } + [NotMapped] + public string StuName { get; set; } #endregion } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs index 4f6459214..0d396c4b1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs @@ -45,5 +45,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion void SaveGenerateByCondition(FinaChargeStuYearEntity entity); + List GetTree(); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index e99969761..16f804bfc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -31,30 +31,46 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(@" - t.FSYId, - t.StuNo, - t.FSYear, - t.YJAmount, - t.SJAmount, - t.FSBlance, - t.PayFeeStatus - "); - strSql.Append(" FROM FinaChargeStuYear t "); + strSql.Append("SELECT t.*,b.DeptNo,b.MajorNo,b.ClassNo,b.Grade,b.IdentityCardNo,b.StuName "); + strSql.Append(" FROM FinaChargeStuYear t left join FinaChargeStudent b on t.StuNo=b.StuNo "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); if (!queryParam["StuNo"].IsEmpty()) { - dp.Add("StuNo", "%" + queryParam["StuNo"].ToString() + "%", DbType.String); - strSql.Append(" AND t.StuNo Like @StuNo "); + dp.Add("StuNo", "" + queryParam["StuNo"].ToString() + "", DbType.String); + strSql.Append(" AND b.StuNo = @StuNo "); + } + if (!queryParam["StuName"].IsEmpty()) + { + dp.Add("StuName", "%" + queryParam["StuName"].ToString() + "%", DbType.String); + strSql.Append(" AND b.StuName Like @StuName "); + } + if (!queryParam["DeptNo"].IsEmpty()) + { + dp.Add("DeptNo", "" + queryParam["DeptNo"].ToString() + "", DbType.String); + strSql.Append(" AND b.DeptNo = @DeptNo "); + } + if (!queryParam["MajorNo"].IsEmpty()) + { + dp.Add("MajorNo", "" + queryParam["MajorNo"].ToString() + "", DbType.String); + strSql.Append(" AND b.MajorNo = @MajorNo "); + } + if (!queryParam["ClassNo"].IsEmpty()) + { + dp.Add("ClassNo", "" + queryParam["ClassNo"].ToString() + "", DbType.String); + strSql.Append(" AND b.ClassNo = @ClassNo "); + } + if (!queryParam["IdentityCardNo"].IsEmpty()) + { + dp.Add("IdentityCardNo", "" + queryParam["IdentityCardNo"].ToString() + "", DbType.String); + strSql.Append(" AND b.IdentityCardNo = @IdentityCardNo "); } if (!queryParam["FSYear"].IsEmpty()) { - dp.Add("FSYear", "%" + queryParam["FSYear"].ToString() + "%", DbType.String); - strSql.Append(" AND t.FSYear Like @FSYear "); + dp.Add("FSYear", "" + queryParam["FSYear"].ToString() + "", DbType.String); + strSql.Append(" AND t.FSYear = @FSYear "); } if (!queryParam["PayFeeStatus"].IsEmpty()) { @@ -265,5 +281,26 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } + + public IEnumerable GetYearList() + { + try + { + var strSql = new StringBuilder(); + strSql.Append("select [FSYear] from [dbo].[FinaChargeStuYear] group by [FSYear] order by[FSYear] "); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString()); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs index abc4eee4c..572ecae6c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs @@ -110,6 +110,16 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } #endregion #region 扩展字段 + [NotMapped] + public string StuNo { get; set; } + [NotMapped] + public string StuName { get; set; } + [NotMapped] + public string MajorNo { get; set; } + [NotMapped] + public string ClassNo { get; set; } + [NotMapped] + public string DeptNo { get; set; } #endregion } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index 15156a791..b3b130db9 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -30,21 +30,47 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(@" - t.FSYIId, - t.ChargeItemCode, - t.ChargeItemName, - t.ChargeItemType, - t.Standard, - t.SJAmount, - t.PayFeeStatus - "); - strSql.Append(" FROM FinaChargeStuYearItem t "); - strSql.Append(" WHERE 1=1 "); + strSql.Append("SELECT t.*,b.StuNo,b.StuName,b.MajorNo,b.ClassNo,b.DeptNo,b.IdentityCardNo "); + strSql.Append(" FROM FinaChargeStuYearItem t left join FinaChargeStuYear a on t.FSYId=a.FSYId left join FinaChargeStudent b on a.StuNo=b.StuNo "); + strSql.Append(" WHERE 1=1 and b.F_CheckMark=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); + if (!queryParam["StuNo"].IsEmpty()) + { + dp.Add("StuNo", "" + queryParam["StuNo"].ToString() + "", DbType.String); + strSql.Append(" AND b.StuNo = @StuNo "); + } + if (!queryParam["StuName"].IsEmpty()) + { + dp.Add("StuName", "%" + queryParam["StuName"].ToString() + "%", DbType.String); + strSql.Append(" AND b.StuName Like @StuName "); + } + if (!queryParam["MajorNo"].IsEmpty()) + { + dp.Add("MajorNo", "" + queryParam["MajorNo"].ToString() + "", DbType.String); + strSql.Append(" AND b.MajorNo = @MajorNo "); + } + if (!queryParam["FSYear"].IsEmpty()) + { + dp.Add("FSYear", "" + queryParam["FSYear"].ToString() + "", DbType.String); + strSql.Append(" AND a.FSYear = @FSYear "); + } + if (!queryParam["ChargeItemCode"].IsEmpty()) + { + dp.Add("ChargeItemCode", "%" + queryParam["ChargeItemCode"].ToString() + "%", DbType.String); + strSql.Append(" AND t.ChargeItemCode Like @ChargeItemCode "); + } + if (!queryParam["ChargeItemName"].IsEmpty()) + { + dp.Add("ChargeItemName", "%" + queryParam["ChargeItemName"].ToString() + "%", DbType.String); + strSql.Append(" AND t.ChargeItemName Like @ChargeItemName "); + } + if (!queryParam["ChargeItemType"].IsEmpty()) + { + dp.Add("ChargeItemType", "" + queryParam["ChargeItemType"].ToString() + "", DbType.String); + strSql.Append(" AND t.ChargeItemType = @ChargeItemType "); + } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); } catch (Exception ex) From 803eb9aaf13f6e3c455613de0227d5572e8e91b0 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Thu, 10 Aug 2023 22:40:43 +0800 Subject: [PATCH 16/50] =?UTF-8?q?=E6=94=B6=E8=B4=B9=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E6=98=8E=E7=BB=86=EF=BC=8C=E4=BD=9C=E5=BA=9F=EF=BC=8C=E6=81=A2?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearItemController.cs | 9 +- .../Views/FinaChargeStuYearItem/Index.cshtml | 10 +- .../Views/FinaChargeStuYearItem/Index.js | 110 +++++++++++------- .../Views/FinaChargeStudent/Index.js | 2 +- .../FinaChargeStuYearItemBLL.cs | 19 +++ .../FinaChargeStuYearItemIBLL.cs | 3 +- .../FinaChargeStuYearItemService.cs | 48 +++++++- 7 files changed, 149 insertions(+), 52 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs index 82972775c..bc3c45880 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs @@ -91,7 +91,14 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult DeleteForm(string keyValue) { finaChargeStuYearItemIBLL.DeleteEntity(keyValue); - return Success("删除成功!"); + return Success("操作成功!"); + } + [HttpPost] + [AjaxOnly] + public ActionResult UnDeleteForm(string keyValue) + { + finaChargeStuYearItemIBLL.UnDeleteEntity(keyValue); + return Success("操作成功!"); } /// /// 保存实体数据(新增、修改) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml index 5535550f6..0726063de 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml @@ -19,11 +19,11 @@
    -
    收费项目名称
    +
    项目名称
    -
    收费项目编号
    +
    项目编号
    @@ -35,7 +35,7 @@
    -
    收费项目类型
    +
    项目类型
    @@ -56,8 +56,8 @@
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js index d26a88866..8bf6da2ad 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js @@ -10,18 +10,24 @@ var bootstrap = function ($, learun) { "use strict"; var page = { init: function () { - page.initGird(); page.bind(); + setTimeout(function () { + page.initGird(); + }, 500);//延迟 + }, bind: function () { - $('#SYear').lrselect({ + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 300, 400); + $('#FSYear').lrselect({ url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', value: 'value', text: 'text' }); var now = new Date(); sYear = now.getFullYear(); - $('#SYear').lrselectSet(sYear); + $('#FSYear').lrselectSet(sYear); $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); @@ -43,18 +49,20 @@ var bootstrap = function ($, learun) { } }); }); - // 编辑 - $('#lr_edit').on('click', function () { + // 恢复 + $('#lr_undelete').on('click', function () { var keyValue = $('#gridtable').jfGridValue('FSYIId'); + var ChargeItemType = $('#gridtable').jfGridValue('F_DeleteMark'); if (learun.checkrow(keyValue)) { - learun.layerForm({ - id: 'form', - title: '编辑', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/Form?keyValue=' + keyValue, - width: 600, - height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); + if (ChargeItemType.indexOf('1') != -1) { + learun.alert.error("包含未作废项目,不能恢复"); + return; + } + learun.layerConfirm('是否确认恢复该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/UnDeleteForm', { keyValue: keyValue }, function () { + refreshGirdData(); + }); } }); } @@ -62,10 +70,20 @@ var bootstrap = function ($, learun) { // 作废 $('#lr_delete').on('click', function () { var keyValue = $('#gridtable').jfGridValue('FSYIId'); + var ChargeItemType = $('#gridtable').jfGridValue('ChargeItemType'); + var PayFeeStatus = $('#gridtable').jfGridValue('PayFeeStatus'); if (learun.checkrow(keyValue)) { + if (ChargeItemType.indexOf('1')!=-1) { + learun.alert.error("包含固定收费项目,不能作废"); + return; + } + if (PayFeeStatus.indexOf('1') != -1 || PayFeeStatus.indexOf('4') != -1) { + learun.alert.error("包含已缴费项目,不能作废"); + return; + } learun.layerConfirm('是否确认作废该项!', function (res) { if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/DeleteForm', { keyValue: keyValue}, function () { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/DeleteForm', { keyValue: keyValue }, function () { refreshGirdData(); }); } @@ -107,48 +125,56 @@ var bootstrap = function ($, learun) { } }, { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, - { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, - { label: "收费项名称", name: "ChargeItemName", width: 100, align: "left"}, - { label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('dataItem', { - key: value, - code: 'ChargeItemType', - callback: function (_data) { - callback(_data.text); - } - }); - }}, - { label: "收费标准", name: "Standard", width: 100, align: "left"}, + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, + { label: "收费项名称", name: "ChargeItemName", width: 100, align: "left" }, + { + label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + { label: "收费标准", name: "Standard", width: 100, align: "left" }, { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, { label: "应缴余额", name: "FSBlance", width: 100, align: "left" }, - { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('dataItem', { - key: value, - code: 'PayStatus', - callback: function (_data) { - callback(_data.text); - } - }); + { + label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'PayStatus', + callback: function (_data) { + callback(_data.text); + } + }); } }, { label: "是否作废", name: "F_DeleteMark", width: 100, align: "left", - formatter: function (cellvalue, rowObject) { - return cellvalue == "1" ? "" : ""; + formatter: function (cellvalue, row) { + if (cellvalue ===true) { + return '作废'; + } else{ + return '正常'; + } } } ], - mainId:'FSYIId', - isPage: true + mainId: 'FSYIId', + isPage: true, + isMultiselect: true }); page.search(); }, search: function (param) { param = param || {}; - param.SYear = sYear; - $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + param.FSYear = $('#FSYear').lrselectGet(); + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); } }; refreshGirdData = function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js index 87a3a5e72..54f5aaa67 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js @@ -15,7 +15,7 @@ var bootstrap = function ($, learun) { bind: function () { $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { page.search(queryJson); - }, 220, 400); + }, 250, 400); $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo', value: 'deptno', text: 'deptname' }); $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs index aad977cbe..466da349f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs @@ -119,6 +119,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public void UnDeleteEntity(string keyValue) + { + try + { + FinaChargeStuYearItemService.UnDeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs index 0193dd83c..f806f4990 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs @@ -43,6 +43,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 实体 void SaveEntity(string keyValue, FinaChargeStuYearItemEntity entity); #endregion - + + void UnDeleteEntity(string keyValue); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index b3b130db9..40dd7c690 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -115,17 +115,61 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #region 提交数据 /// - /// 删除实体数据 + /// 作废 /// /// 主键 public void DeleteEntity(string keyValue) { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); try { - this.BaseRepository("CollegeMIS").Delete(t=>t.FSYIId == keyValue); + //单个启用 + //this.BaseRepository("CollegeMIS").ExecuteBySql("update ClassInfo set CheckMark=1 where ClassId='" + keyValue + "'"); + + //多个启用 + var keyValueArr = keyValue.Split(','); + foreach (var item in keyValueArr) + { + db.ExecuteBySql("update FinaChargeStuYearItem set F_DeleteMark=1 where FSYIId='" + item + "'"); + } + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + /// + /// 恢复 + /// + /// + public void UnDeleteEntity(string keyValue) + { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); + try + { + //单个启用 + //this.BaseRepository("CollegeMIS").ExecuteBySql("update ClassInfo set CheckMark=1 where ClassId='" + keyValue + "'"); + + //多个启用 + var keyValueArr = keyValue.Split(','); + foreach (var item in keyValueArr) + { + db.ExecuteBySql("update FinaChargeStuYearItem set F_DeleteMark=0 where FSYIId='" + item + "'"); + } + db.Commit(); } catch (Exception ex) { + db.Rollback(); if (ex is ExceptionEx) { throw; From 7f3ee8873cda451b02861a165b89ead731cbd71d Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Thu, 10 Aug 2023 22:45:55 +0800 Subject: [PATCH 17/50] =?UTF-8?q?=E6=98=8E=E7=BB=86=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Views/FinaChargeStuYearItem/Index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js index 8bf6da2ad..20b0946ee 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js @@ -167,7 +167,8 @@ var bootstrap = function ($, learun) { ], mainId: 'FSYIId', isPage: true, - isMultiselect: true + isMultiselect: true, + sidx:'MajorNo,ClassNo,StuNo,ChargeItemCode' }); page.search(); }, From f0cc9fce6bfb72dadd22009778ec188c3f9c6c56 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Fri, 11 Aug 2023 18:05:20 +0800 Subject: [PATCH 18/50] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=BC=B4=E8=B4=B9?= =?UTF-8?q?=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearItemController.cs | 38 ++++ .../Views/FinaChargeStuYearItem/Import.cshtml | 26 +++ .../Views/FinaChargeStuYearItem/Import.js | 175 ++++++++++++++++++ .../Views/FinaChargeStuYearItem/Index.cshtml | 2 +- .../Views/FinaChargeStuYearItem/Index.js | 14 +- .../Content/excel/缴费明细.xls | Bin 0 -> 23552 bytes .../Learun.Application.Web.csproj | 3 + .../FinaChargeStuYearItemBLL.cs | 19 ++ .../FinaChargeStuYearItemIBLL.cs | 1 + .../FinaChargeStuYearItemService.cs | 83 ++++++++- 10 files changed, 353 insertions(+), 8 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/缴费明细.xls diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs index bc3c45880..edc55cf88 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs @@ -3,6 +3,7 @@ using System.Data; using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; using System.Web.Mvc; using System.Collections.Generic; +using Learun.Application.Base.SystemModule; namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { @@ -16,6 +17,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public class FinaChargeStuYearItemController : MvcControllerBase { private FinaChargeStuYearItemIBLL finaChargeStuYearItemIBLL = new FinaChargeStuYearItemBLL(); + private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL(); #region 视图功能 @@ -37,6 +39,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { return View(); } + + [HttpGet] + public ActionResult Import() + { + return View(); + } #endregion #region 获取数据 @@ -118,6 +126,36 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers } return Success("保存成功!"); } + + /// + /// 导入 + /// + /// + /// + /// + /// + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult ExecuteImportExcel(string fileGuid, int chunks, string queryJson) + { + string path = annexesFileIBLL.SaveAnnexes(fileGuid, fileGuid, chunks, LoginUserInfo.Get()); + if (!string.IsNullOrEmpty(path)) + { + DataTable dt = ExcelHelper.ExcelImport(path); + (DataTable failDt, int snum, int fnum) res; + res = finaChargeStuYearItemIBLL.ExecuteImportExcel(dt, fileGuid, queryJson); + var data = new + { + Success =10, + Fail = 0 + }; + return Success(data); + } + else + { + return Fail("导入数据失败!"); + } + } #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.cshtml new file mode 100644 index 000000000..d75b149d9 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.cshtml @@ -0,0 +1,26 @@ +@{ + ViewBag.Title = "Form"; + Layout = "~/Views/Shared/_Form.cshtml"; +} + + +@Html.AppendCssFile("/Areas/LR_SystemModule/Views/ExcelImport/ImportForm.css") + +
    +
    +
    上传文件
    +
    下载模板
    +
    +
    +
    +
    + +
    +
    +

    试试将电脑里的文件拖拽到此上传

    +
    +
    +
    +
    + +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.js new file mode 100644 index 000000000..38c6791c0 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Import.js @@ -0,0 +1,175 @@ +/* + * 描 述:附件上传管理 + */ +var gridId = request('gridtable'); +var bootstrap = function ($, learun) { + "use strict"; + + var fileInfo = {}; + + // 触发合并文件碎片 + var mergeFileChunks = function (file) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileGuid'] = fileInfo[file.id].fileGuid; + param['fileName'] = fileInfo[file.id].name; + param['chunks'] = fileInfo[file.id].chunks; + var queryJson = JSON.stringify(learun.frameTab.currentIframe().queryJson); + + param['queryJson'] = queryJson; + learun.httpAsyncPost(top.$.rootUrl + "/ReceiveSendFeeManagement/FinaChargeStuYearItem/ExecuteImportExcel", param, function (res) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress').remove(); + + if (res.code == learun.httpCode.success) { + if (res.data.Success != '0') { + learun.alert.success('导入成功' + res.data.Success + '条'); + } + // 文件保存成功后 + $fileItem.append('
    ' + res.data.Success + '/' + res.data.Fail + '
    '); + // 如果有失败 + if (res.data.Fail != '0') { + learun.download({ url: top.$.rootUrl + '/LR_SystemModule/ExcelImport/DownImportErrorFile', param: { fileId: fileInfo[file.id].fileGuid, fileName: fileInfo[file.id].name, __RequestVerificationToken: $.lrToken }, method: 'POST' }); + } + + } + else { + learun.alert.error(res.info); + $fileItem.append('
    '); + } + }); + } + // 触发清楚文件碎片 + var reomveFileChunks = function (file) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileGuid'] = fileInfo[file.id].fileGuid; + param['chunks'] = fileInfo[file.id].chunks; + learun.httpAsyncPost(top.$.rootUrl + "/LR_SystemModule/Annexes/MergeAnnexesFile", param, function (res) { }); + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress').remove(); + $fileItem.append('
    '); + } + // 删除文件 + var DeleteFile = function (fileId) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileId'] = fileInfo[fileId].fileGuid; + learun.httpAsyncPost(top.$.rootUrl + "/LR_SystemModule/Annexes/DeleteAnnexesFile", param, function (res) { }); + var file = page.uploader.getFile(fileId); + if (!!file) { + page.uploader.removeFile(file); + } + delete fileInfo[fileId]; + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + fileId); + $fileItem.remove(); + if ($('#lr_form_file_queue_list>div').length == 0) { + $('#lr_form_file_queue .lr-form-file-queue-bg').show(); + } + } + + var page = { + uploader: null, + init: function () { + if (!WebUploader.Uploader.support()) { + alert('Web Uploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器'); + throw new Error('WebUploader does not support the browser you are using.'); + } + /*导入模板下载*/ + $('#lr_down_file_btn').on('click', function () { + learun.download({ + method: "get", + url: '/Content/excel/缴费明细.xls' + }); + }); + + page.uploader = WebUploader.create({ + auto: true, + swf: top.$.rootUrl + '/Content/webuploader/Uploader.swf', + // 文件接收服务端。 + server: top.$.rootUrl + "/LR_SystemModule/Annexes/UploadAnnexesFileChunk", + // 选择文件的按钮。可选。 + // 内部根据当前运行是创建,可能是input元素,也可能是flash. + pick: '#lr_add_file_btn', + dnd: '#lr_form_file_queue', + paste: 'document.body', + disableGlobalDnd: true, + accept: { + extensions: "xls,xlsx" + }, + multiple: false, + // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! + resize: false, + // 文件分片上传 + chunked: true, + chunkRetry: 3, + prepareNextFile: true, + chunkSize: '1048576', + // 上传参数 + formData: { + __RequestVerificationToken: $.lrToken + } + }); + page.uploader.on('fileQueued', page.fileQueued); + page.uploader.on('uploadStart', page.uploadStart); + page.uploader.on('uploadBeforeSend', page.uploadBeforeSend); + page.uploader.on('uploadProgress', page.uploadProgress); + page.uploader.on('uploadSuccess', page.uploadSuccess); + page.uploader.on('uploadError', page.uploadError); + page.uploader.on('uploadComplete', page.uploadComplete); + page.uploader.on('error', page.error); + + + //$('#lr_form_file_queue').mCustomScrollbar({ // 优化滚动条 + // theme: "minimal-dark" + //}); + + }, + fileQueued: function (file) {// 文件加载到队列 + fileInfo[file.id] = { name: file.name }; + $('#lr_form_file_queue .lr-form-file-queue-bg').hide(); + // 添加一条文件记录 + var $item = $('
    '); + $item.append('
    '); + $item.append('' + file.name + '(' + learun.countFileSize(file.size) + ')'); + + $('#lr_form_file_queue_list').append($item); + }, + uploadStart: function (file) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.append('
    '); + }, + uploadBeforeSend: function (object, data, headers) { + data.chunk = data.chunk || 0; + data.chunks = data.chunks || 1; + fileInfo[data.id].fileGuid = fileInfo[data.id].fileGuid || WebUploader.Base.guid(); + data.fileGuid = fileInfo[data.id].fileGuid; + fileInfo[data.id].chunks = data.chunks; + }, + uploadProgress: function (file, percentage) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress-bar').css('width', (percentage * 100 + '%')); + }, + uploadSuccess: function (file, res) { + if (res.code == 200) {// 上传成功 + mergeFileChunks(file); + } + else {// 上传失败 + reomveFileChunks(file); + } + }, + uploadError: function (file, code) { + reomveFileChunks(file); + }, + uploadComplete: function (file) { + }, + error: function (type) { + switch (type) { + case 'Q_TYPE_DENIED': + learun.alert.error('当前文件类型不允许上传'); + break; + }; + } + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml index 0726063de..70860f27c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml @@ -55,7 +55,7 @@
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js index 20b0946ee..5c84c419b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js @@ -36,16 +36,18 @@ var bootstrap = function ($, learun) { $('#lr_refresh').on('click', function () { location.reload(); }); - // 新增 + // 导入 $('#lr_add').on('click', function () { learun.layerForm({ - id: 'form', - title: '新增', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/Form', + id: 'indexImport', + title: "导入收费", + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/Import', width: 600, height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); + maxmin: true, + btn: null, + end: function () { + refreshGirdData(); } }); }); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/缴费明细.xls b/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/缴费明细.xls new file mode 100644 index 0000000000000000000000000000000000000000..3f48d912442b1fed063e8ae1578366722efd9ac4 GIT binary patch literal 23552 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 + @@ -7964,6 +7965,8 @@ + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs index 466da349f..d16277559 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs @@ -137,6 +137,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } + + public (DataTable failDt, int snum, int fnum) ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) + { + try + { + return FinaChargeStuYearItemService.ExecuteImportExcel(dt, fileGuid, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } #endregion diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs index f806f4990..552a7e730 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs @@ -45,5 +45,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion void UnDeleteEntity(string keyValue); + (DataTable failDt, int snum, int fnum) ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index 40dd7c690..cbb92f7bb 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -5,6 +5,8 @@ using System; using System.Collections.Generic; using System.Data; using System.Text; +using Learun.Cache.Base; +using Learun.Cache.Factory; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { @@ -17,6 +19,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    public class FinaChargeStuYearItemService : RepositoryFactory { + private ICache cache = CacheFactory.CaChe(); + private string cacheKey = "Learun_adms_excelError_"; #region 获取数据 /// @@ -71,7 +75,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement dp.Add("ChargeItemType", "" + queryParam["ChargeItemType"].ToString() + "", DbType.String); strSql.Append(" AND t.ChargeItemType = @ChargeItemType "); } - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) { @@ -216,5 +220,82 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion + public (DataTable failDt, int snum, int fnum) ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) + { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); + try + { + int snum = 0; + int fnum = 0; + if (dt.Rows.Count > 0) + { + //获取缴费学生 + var stulist = db.FindList(m => m.F_CheckMark == true); + DataTable failDt = new DataTable(); + dt.Columns.Add("导入错误", typeof(string)); + foreach (DataColumn dc in dt.Columns) + { + failDt.Columns.Add(dc.ColumnName, dc.DataType); + } + // 循环遍历导入 + foreach (DataRow dr in dt.Rows) + { + //检测是否有空值 + if (dr[0].ToString() == "" || dr[1].ToString() == "" || dr[2].ToString() == "" || dr[3].ToString() == "" || dr[4].ToString() == "" || dr[5].ToString() == ""||dr[6].ToString() == "") + { + throw (new Exception("行内数据有空值,不能为空!")); + } + //检测缴费年度是否为数字 + decimal payyearresult = 0; + bool parsepayyearresult = decimal.TryParse(dr[0].ToString(), out payyearresult); + if (!parsepayyearresult || dr[0].ToString().Length != 4) + { + throw (new Exception("【缴费年度】格式不正确,必须为四位数字年份!")); + } + //首先校验金额是否为数字 + //第六列是金额 + decimal dresult = 0; + bool parseresult = decimal.TryParse(dr[5].ToString(), out dresult); + if (!parseresult) + { + throw (new Exception("【金额】转换失败,必须为数字!")); + } + //金额不能小于等于零 + if (dresult <= 0) + { + throw (new Exception("【金额】不能为零或小于零,必须为正数!")); + } + //筛选不在标准代码表内的数据 + //第五列是项目编码 + if (typecodelist.Count(m => m.ProjectCode == dr[4].ToString()) == 0) + { + throw (new Exception("【缴费项目编码】不存在,请核对!")); + } + } + + //获取已有年度学生缴费记录 + var oldFinaChargeStuYearList = db.FindList(m => m.FSYear == entity.FSYear); + //获取已有年度学生缴费明细记录 + var oldFinaChargeStuYearItemList = db.FindList(m => m.FSYear == entity.FSYear); + //获取收费标准 + var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); + var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear + from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); + } + + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } From 9b366a007150243c21d5ae5795cff213053b9f0b Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sat, 12 Aug 2023 22:44:50 +0800 Subject: [PATCH 19/50] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuOrderController.cs | 117 ++++++++ .../FinaChargeStuYearController.cs | 172 +++++++++++- .../FinaChargeStuYearItemController.cs | 9 +- .../缴费订单明细Controller.cs | 117 ++++++++ .../Views/FinaChargeStuOrder/Form.cshtml | 59 ++++ .../Views/FinaChargeStuOrder/Form.js | 53 ++++ .../Views/FinaChargeStuOrder/Index.cshtml | 57 ++++ .../Views/FinaChargeStuOrder/Index.js | 120 +++++++++ .../Views/FinaChargeStuYear/Index.js | 34 +-- .../FinaChargeStuYear/IndexForStudent.cshtml | 31 +++ .../FinaChargeStuYear/IndexForStudent.js | 145 ++++++++++ .../Views/FinaChargeStuYear/PayFeeForm.cshtml | 50 ++++ .../Views/FinaChargeStuYear/PayFeeForm.js | 162 +++++++++++ .../Views/FinaChargeStuYearItem/Index.js | 2 +- .../Views/缴费订单明细/Form.cshtml | 31 +++ .../Views/缴费订单明细/Form.js | 50 ++++ .../Views/缴费订单明细/Index.cshtml | 21 ++ .../Views/缴费订单明细/Index.js | 47 ++++ .../Content/excel/缴费明细.xls | Bin 23552 -> 23552 bytes .../Learun.Application.Web.csproj | 14 + .../Learun.Application.Mapping.csproj | 2 + .../FinaChargeStuOrderDetailMap.cs | 29 ++ .../FinaChargeStuOrderMap.cs | 29 ++ .../Learun.Application.TwoDevelopment.csproj | 8 + .../FinaChargeStuOrderBLL.cs | 144 ++++++++++ .../FinaChargeStuOrderEntity.cs | 116 ++++++++ .../FinaChargeStuOrderIBLL.cs | 49 ++++ .../FinaChargeStuOrderService.cs | 252 ++++++++++++++++++ .../FinaChargeStuYear/FinaChargeStuYearBLL.cs | 19 ++ .../FinaChargeStuYearEntity.cs | 10 +- .../FinaChargeStuYearIBLL.cs | 6 + .../FinaChargeStuYearService.cs | 36 ++- .../FinaChargeStuYearItemBLL.cs | 2 +- .../FinaChargeStuYearItemEntity.cs | 5 + .../FinaChargeStuYearItemIBLL.cs | 4 +- .../FinaChargeStuYearItemService.cs | 173 +++++++++--- .../FinaChargesStandardEntity.cs | 9 +- .../FinaChargesStandardService.cs | 3 +- .../FinaChargeStuOrderDetailEntity.cs | 81 ++++++ .../缴费订单明细BLL.cs | 125 +++++++++ .../缴费订单明细IBLL.cs | 48 ++++ .../缴费订单明细Service.cs | 150 +++++++++++ 42 files changed, 2519 insertions(+), 72 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderController.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/缴费订单明细Controller.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuOrderDetailMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuOrderMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderIBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/FinaChargeStuOrderDetailEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细BLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细IBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细Service.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderController.cs new file mode 100644 index 000000000..1f5b0a004 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderController.cs @@ -0,0 +1,117 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Web.Mvc; +using System.Collections.Generic; + +namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:06 + /// 描 述:缴费订单管理 + /// + public class FinaChargeStuOrderController : MvcControllerBase + { + private FinaChargeStuOrderIBLL finaChargeStuOrderIBLL = new FinaChargeStuOrderBLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = finaChargeStuOrderIBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var FinaChargeStuOrderData = finaChargeStuOrderIBLL.GetFinaChargeStuOrderEntity( keyValue ); + var jsonData = new { + FinaChargeStuOrder = FinaChargeStuOrderData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + finaChargeStuOrderIBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + FinaChargeStuOrderEntity entity = strEntity.ToObject(); + finaChargeStuOrderIBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs index 78a537c9a..5ffd41374 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -1,8 +1,18 @@ -using Learun.Util; +using System; +using Learun.Util; using System.Data; using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; using System.Web.Mvc; using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using System.Web; +using Learun.Application.Base.SystemModule; +using Learun.Application.TwoDevelopment.EducationalAdministration; +using Newtonsoft.Json; +using ThoughtWorks.QRCode.Codec; namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { @@ -16,6 +26,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public class FinaChargeStuYearController : MvcControllerBase { private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL(); + private FinaChargeStuOrderIBLL finaChargeStuOrderIbll = new FinaChargeStuOrderBLL(); #region 视图功能 @@ -28,6 +39,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { return View(); } + + [HttpGet] + public ActionResult IndexForStudent() + { + return View(); + } /// /// 表单页 /// @@ -38,6 +55,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers return View(); } + [HttpGet] + public ActionResult PayFeeForm() + { + return View(); + } + [HttpGet] public ActionResult GenerateByConditionForm() { @@ -90,6 +113,28 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers }; return Success(jsonData); } + + [HttpGet] + [AjaxOnly] + public ActionResult GetPayFeeDetail(string keyValue) + { + //学生基础信息 + var FinaChargeStuYearData = finaChargeStuYearIBLL.GetFinaChargeStuYearEntity(keyValue); + //学生缴费明细 + var FinaChargeStuItemList = finaChargeStuYearIBLL.GetFinaChargeStuItemList(keyValue); + foreach (var finaChargeStuYearItemEntity in FinaChargeStuItemList) + { + finaChargeStuYearItemEntity.FSBlance = Math.Abs(finaChargeStuYearItemEntity.FSBlance.Value); + } + var jsonData = new + { + StuInfoFreshData = FinaChargeStuYearData, + FinaChargesStandardList = FinaChargeStuItemList, + PayFeeTotal = Math.Abs(FinaChargeStuYearData.FSBlance.Value), + SJAmount = FinaChargeStuYearData.SJAmount + }; + return Success(jsonData); + } #endregion #region 提交数据 @@ -136,5 +181,130 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers } #endregion + #region 二维码缴费 + /// + /// 生成缴费二维码 + /// + /// + [HttpPost] + [AjaxOnly] + public ActionResult PayFeeQRCode(string strEntity, string detailList) + { + FinaChargeStuYearEntity entity = strEntity.ToObject(); + List list = detailList.ToObject>(); + var imgUrl = ""; + Random ran = new Random(); + string merchantid = "105000082201406";//商户号 + string posid = "043724806";//商户柜台代码 + string branchid = "510000000";//分行代码 + string orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); + string payment = entity.PayMoney.ToString(); + string curcode = "01"; + string txcode = "530550"; + string remark1 = entity.StuNo; + string remark2 = entity.FSYear.ToString(); + string returntype = "3"; + string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"); + string pub32tr2 = "40d987faa793a0a27e7a86ef020111"; + string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6"; + string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid; + tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1; + tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout; + MD5 md5 = MD5.Create(); + string tmp1 = tmp; + tmp += "&PUB=" + pub32tr2; + byte[] buffer = Encoding.Default.GetBytes(tmp); + byte[] md5Buffer = md5.ComputeHash(buffer); + string strMd5 = ""; + //hdnOrderId.Value = orderid; + foreach (byte item in md5Buffer) + { + strMd5 += item.ToString("x2"); + } + String url = bankURL + "&" + tmp1 + "&MAC=" + strMd5; + string reJson = HttpMethods.Post(url); + LogEntity logEntity = new LogEntity(); + logEntity.F_CategoryId = 121; + logEntity.F_ExecuteResultJson = reJson; + logEntity.WriteLog(); + //HttpConnect conn = new HttpConnect(); + //string reJson = conn.Post(url, ""); + JsonBean MemberInfoList = JsonConvert.DeserializeObject(reJson); + if (MemberInfoList.SUCCESS.Equals("true")) + { + string imgCode = HttpMethods.Post(MemberInfoList.PAYURL); + logEntity.F_CategoryId = 121; + logEntity.F_ExecuteResultJson = imgCode; + logEntity.WriteLog(); + MemberInfoList = JsonConvert.DeserializeObject(imgCode); + if (MemberInfoList.SUCCESS.Equals("true")) + { + imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid); + } + } + + if (!string.IsNullOrEmpty(imgUrl)) + { + entity.orderid = orderid; + finaChargeStuOrderIbll.SaveOrderData(entity, list); + } + + return Success(imgUrl); + } + + public class JsonBean + { + /// + /// + /// + public string SUCCESS { get; set; } + public string PAYURL { get; set; } + public string QRURL { get; set; } + } + /// + /// 生成并保存二维码图片的方法 + /// + /// 输入的内容 + public string CreateQRImg(string str, string orderId) + { + Random ran = new Random(); + Bitmap bt; + str = HttpUtility.UrlDecode(str); + string enCodeString = str; + //生成设置编码实例 + QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); + //设置二维码的规模,默认4 + qrCodeEncoder.QRCodeScale = 3; + //设置二维码的版本,默认7 + qrCodeEncoder.QRCodeVersion = 7; + //设置错误校验级别,默认中等 + qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; + //生成二维码图片 + bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); + //二维码图片的名称 + string filename = orderId; + if (!Directory.Exists(Server.MapPath("~/Content/images/QRCode/"))) + { + Directory.CreateDirectory(Server.MapPath("~/Content/images/QRCode/")); + } + var path = Server.MapPath("~/Content/images/QRCode/") + filename + ".jpg"; + //保存二维码图片在photos路径下 + try + { + bt.Save(path); + } + catch (Exception ex) + { + + return ""; + } + + //图片控件要显示的二维码图片路径 + return "/Content/images/QRCode/" + filename + ".jpg"; + } + + + #endregion + } } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs index edc55cf88..208c6809c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs @@ -142,14 +142,13 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers if (!string.IsNullOrEmpty(path)) { DataTable dt = ExcelHelper.ExcelImport(path); - (DataTable failDt, int snum, int fnum) res; - res = finaChargeStuYearItemIBLL.ExecuteImportExcel(dt, fileGuid, queryJson); + string res = finaChargeStuYearItemIBLL.ExecuteImportExcel(dt, fileGuid, queryJson); var data = new { - Success =10, - Fail = 0 + Success = res.Split('|')[0], + Fail = res.Split('|')[1] }; - return Success(data); + return JsonResult(data); } else { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/缴费订单明细Controller.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/缴费订单明细Controller.cs new file mode 100644 index 000000000..0b23f4451 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/缴费订单明细Controller.cs @@ -0,0 +1,117 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Web.Mvc; +using System.Collections.Generic; + +namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:14 + /// 描 述:FinaChargeStuOrderDetail + /// + public class 缴费订单明细Controller : MvcControllerBase + { + private 缴费订单明细IBLL 缴费订单明细IBLL = new 缴费订单明细BLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = 缴费订单明细IBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var FinaChargeStuOrderDetailData = 缴费订单明细IBLL.GetFinaChargeStuOrderDetailEntity( keyValue ); + var jsonData = new { + FinaChargeStuOrderDetail = FinaChargeStuOrderDetailData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + 缴费订单明细IBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + FinaChargeStuOrderDetailEntity entity = strEntity.ToObject(); + 缴费订单明细IBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.cshtml new file mode 100644 index 000000000..9ce96c2e4 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.cshtml @@ -0,0 +1,59 @@ +@{ + ViewBag.Title = "缴费订单管理"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    缴费年度
    + +
    +
    +
    学号
    + +
    +
    +
    订单编号
    + +
    +
    +
    应缴金额
    + +
    +
    +
    实缴金额
    + +
    +
    +
    待缴金额
    + +
    +
    +
    超出余额
    + +
    +
    +
    缴费状态
    +
    +
    +
    +
    订单生成时间
    + +
    +
    +
    付款时间
    + +
    +
    +
    支付方式
    +
    +
    +
    +
    订单来源
    +
    +
    +
    +
    银行订单号
    + +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.js new file mode 100644 index 000000000..1591be1db --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Form.js @@ -0,0 +1,53 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-12 22:06 + * 描 述:缴费订单管理 + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#Status').lrDataItemSelect({ code: 'PayStatus' }); + $('#PayMode').lrDataItemSelect({ code: 'PayMode' }); + $('#OrderType').lrDataItemSelect({ code: 'OrderType' }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrder/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrder/SaveForm?keyValue=' + keyValue, postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml new file mode 100644 index 000000000..118713830 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml @@ -0,0 +1,57 @@ +@{ + ViewBag.Title = "缴费订单管理"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    缴费年度
    + +
    +
    +
    学号
    + +
    +
    +
    缴费状态
    +
    +
    +
    +
    支付方式
    +
    +
    +
    +
    订单来源
    +
    +
    +
    +
    银行订单号
    + +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js new file mode 100644 index 000000000..04b00f7de --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js @@ -0,0 +1,120 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-12 22:06 + * 描 述:缴费订单管理 + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var startTime; + var endTime; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + // 时间搜索框 + $('#datesearch').lrdate({ + dfdata: [ + { name: '今天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00') }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近7天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'd', -6) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近1个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -1) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近3个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -3) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } } + ], + // 月 + mShow: false, + premShow: false, + // 季度 + jShow: false, + prejShow: false, + // 年 + ysShow: false, + yxShow: false, + preyShow: false, + yShow: false, + // 默认 + dfvalue: '1', + selectfn: function (begin, end) { + startTime = begin; + endTime = end; + page.search(); + } + }); + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 220, 400); + $('#Status').lrDataItemSelect({ code: 'PayStatus' }); + $('#PayMode').lrDataItemSelect({ code: 'PayMode' }); + $('#OrderType').lrDataItemSelect({ code: 'OrderType' }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + //  导入 + $('#lr_import').on('click', function () { + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').lrAuthorizeJfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrder/GetPageList', + headData: [ + { label: "缴费年度", name: "YearNo", width: 100, align: "left"}, + { label: "学号", name: "StuNo", width: 100, align: "left"}, + { label: "订单编号", name: "orderid", width: 100, align: "left"}, + { label: "应缴金额", name: "YJAmount", width: 100, align: "left"}, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, + { label: "待缴金额", name: "DJAmount", width: 100, align: "left"}, + { label: "超出余额", name: "NowBlance", width: 100, align: "left"}, + { label: "缴费状态", name: "Status", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'PayStatus', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + { label: "订单生成时间", name: "PlaceOrderTime", width: 100, align: "left"}, + { label: "付款时间", name: "PayTime", width: 100, align: "left"}, + { label: "支付方式", name: "PayMode", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'PayMode', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + { label: "订单来源", name: "OrderType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'OrderType', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + { label: "银行订单号", name: "BankOrder", width: 100, align: "left"}, + ], + mainId:'Id', + isPage: true + }); + }, + search: function (param) { + param = param || {}; + param.StartTime = startTime; + param.EndTime = endTime; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js index 3978e1ea8..57cd6a9bd 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js @@ -117,22 +117,24 @@ var bootstrap = function ($, learun) { } }, { label: "年级", name: "Grade", width: 100, align: "left" }, - { label: "缴费年度", name: "FSYear", width: 100, align: "left"}, - { label: "应缴金额", name: "YJAmount", width: 100, align: "left"}, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, - { label: "缴费年度余额", name: "FSBlance", width: 100, align: "left"}, - { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('dataItem', { - key: value, - code: 'PayStatus', - callback: function (_data) { - callback(_data.text); - } - }); - }}, + { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, + { label: "应缴金额", name: "YJAmount", width: 100, align: "left" }, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, + { label: "缴费年度余额", name: "FSBlance", width: 100, align: "left" }, + { + label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", + formatter: function (cellvalue, row) { + if (cellvalue === 0) { + return '未缴费'; + } else if (cellvalue === 1) { + return '已缴费'; + } else { + return '部分缴纳'; + } + } + }, ], - mainId:'FSYId', + mainId: 'FSYId', isPage: true }); page.search(); @@ -140,7 +142,7 @@ var bootstrap = function ($, learun) { search: function (param) { param = param || {}; param.fSYear = fSYear; - $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); } }; refreshGirdData = function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml new file mode 100644 index 000000000..a87076360 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml @@ -0,0 +1,31 @@ +@{ + ViewBag.Title = "学生年度缴费管理"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    +
    +  查询 +
    +
    + +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js new file mode 100644 index 000000000..c6fabface --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js @@ -0,0 +1,145 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-07 15:52 + * 描 述:学生年度缴费管理 + */ +var refreshGirdData; +var fSYear; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.bind(); + setTimeout(function () { + page.initGird(); + }, 500);//延迟 + }, + bind: function () { + $('#FSYear').lrselect({ + placeholder:"请选择缴费年度", + url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', + value: 'value', + text: 'text' + }); + var now = new Date(); + fSYear = now.getFullYear(); + $('#FSYear').lrselectSet(fSYear); + $('#btn_Search').on('click', function () { + page.search(); + }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + //二维码缴费 + $('#lr_pay').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYId'); + var selectedRow = $('#gridtable').jfGridGet('rowdata'); + if (learun.checkrow(keyValue)) { + if (selectedRow.PayFeeStatus == "1") { + learun.alert.warning("当前学生已缴费!"); + return; + } + learun.layerForm({ + id: 'form_payCode', + title: '二维码缴费', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/PayFeeForm?keyValue=' + keyValue, + width: 800, + height: 690, + btn: null + }); + } + }); + + }, + // 初始化列表 + initGird: function () { + $('#gridtable').jfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetPageList', + headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "性别", name: "GenderNo", width: 80, align: "left", + formatter: function (cellvalue) { + return cellvalue == true ? "男" : "女"; + } + }, + { label: "身份证号", name: "IdentityCardNo", width: 100, align: "left" }, + { + label: "系所", name: "DeptNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: value, + keyId: 'deptno', + callback: function (_data) { + callback(_data['deptname']); + } + }); + } + }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "年级", name: "Grade", width: 100, align: "left" }, + { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, + { label: "应缴金额", name: "YJAmount", width: 100, align: "left" }, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, + { label: "缴费年度余额", name: "FSBlance", width: 100, align: "left" }, + { + label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", + formatter: function (cellvalue, row) { + if (cellvalue === 0) { + return '未缴费'; + } else if (cellvalue === 1) { + return '已缴费'; + } else { + return '部分缴纳'; + } + } + }, + ], + mainId: 'FSYId', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + var userinfo = learun.clientdata.get(['userinfo']); + param.StuNo = userinfo.account; + param.F_CheckMark = 1; + param.FSYear = $("#FSYear").lrselectGet(); + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.cshtml new file mode 100644 index 000000000..9da091aef --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.cshtml @@ -0,0 +1,50 @@ +@{ + ViewBag.Title = "新生缴费管理"; + Layout = "~/Views/Shared/_Form.cshtml"; +} + +
    +
    费用明细
    +
    +
    +
    支付
    +
    取消
    +
    查询缴费结果
    +
    +
    + 注意:1.点击【支付】按钮使用手机支付宝、微信扫描右上角二维码进行支付。
    2.请于支付成功5分钟后,点击【查询缴费结果】或关闭本窗口刷新列表获取缴费结果。
    3.发票会在缴费结果变更后开具。
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js") \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js new file mode 100644 index 000000000..c98eba03e --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js @@ -0,0 +1,162 @@ +/* * 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园(http://www.learun.cn) + * Copyright (c) 2013-2018 北京泉江科技有限公司 + * 创建人:超级管理员 + * 日 期:2019-08-08 17:21 + * 描 述:老生缴费管理 + */ +var acceptClick; +var keyValue = request('keyValue'); +var PayFeeTotal = 0;//应交费用 +var SJAmount = 0;//已交费用 +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + //获取缴费二维码 + $('#confirmPayFee').click(function () { + if (parseFloat($('#PayMoney').html()) === 0) { + return learun.alert.warning("所交费用不能为0!"); + } + if (parseFloat($('#PayMoney').html()) > PayFeeTotal) { + return learun.alert.warning("所交费用超出应交费用!"); + } + if (SJAmount > 0) { + learun.layerConfirm('当前年度已存在缴费记录,是否继续缴费!', + function (res) { + if (!res) { + return false; + } else { + page.getQRCode(); + } + }); + } else { + page.getQRCode(); + } + + }); + //取消缴费 + $('#cancelPayFee').click(function () { + learun.layerClose(window.name); + }); + $('#queryPayFee').click(function () { + location.reload(); + }); + + //计算实交金额 + $('table').on('change', + '.paydetail', + function () { + var num = 0; + num = parseFloat(num); + $(".paydetail").each(function (i, item) { + var val = 0; + if (!!$(this).val()) { + val = parseFloat($(this).val()).toFixed(2); + } + num += parseFloat(val); + }); + $('#PayMoney').html(parseFloat(num).toFixed(2)); + }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetPayFeeDetail?keyValue=' + keyValue, function (data) { + if (data['FinaChargesStandardList'].length == 0) { + learun.alert.warning("未查询到该学生收费明细!请先维护收费明细。"); + learun.layerClose(window.name); + return; + } + var StuInfoFresh = data['StuInfoFreshData']; + var className = ""; + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: StuInfoFresh.ClassNo, + keyId: 'classno', + callback: function (_data) { + className = _data['classname']; + if (!className) { + className = "未知"; + } + } + }); + var deptName = ""; + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: StuInfoFresh.DeptNo, + keyId: 'deptno', + callback: function (_data) { + deptName = _data['deptname']; + if (!deptName) { + deptName = "未知"; + } + } + }); + PayFeeTotal = parseFloat(data['PayFeeTotal']); + SJAmount = parseFloat(data['SJAmount']); + var html = "学号" + StuInfoFresh.StuNo + ""; + html += "姓名 " + StuInfoFresh.StuName + ""; + html += "班级" + className + ""; + html += "系别" + deptName + ""; + html += "缴费年度" + StuInfoFresh.FSYear + ""; + + html += '缴费项目收费标准本次实缴'; + $.each(data['FinaChargesStandardList'], function (i, item) { + html += '' + item.ChargeItemName + '' + item.Standard + '元' + + ''; + }); + + html += '应缴合计' + data['PayFeeTotal'] + '元' + PayFeeTotal + ''; + html += '  '; + html += '已缴金额' + SJAmount + ''; + $('#PayFeeDetail').html(html); + }); + } + }, + getQRCode: function () { + var list = []; + var ifisnull = false; + $('.paydetail').each(function (i, item) { + var value = 0; + if (!!$(this).val()) { + value = parseFloat($(this).val()); + } else { + ifisnull = true; + } + var entity = { + ChargeItemName: ($(this).attr('data-name')).replace(/^\s*|\s*$/g, ""), + ChargeItemCode: $(this).attr('id'), + YJAmount: $(this).attr('data-amount'), + SJAmount: value + }; + list.push(entity); + }); + if (ifisnull) { + learun.alert.warning("收费项目金额不能为空!请检查并填写。"); + return; + } + $('.paydetail').each(function(i, item) { + $(this).attr('disabled', 'disabled'); + }); + var param = {}; + param.FSYId = keyValue; + param.StuNo = $('#StuNo').html(); + param.FSYear = $('#FSYear').html(); + param.PayMoney = $('#PayMoney').html(); + learun.loading(true, '正在生成付款信息请稍等...'); + $("#confirmPayFee").hide(); + learun.httpAsyncPost(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/PayFeeQRCode', { strEntity: JSON.stringify(param), detailList: JSON.stringify(list) }, function (res) { + learun.loading(false); + $('#qrcodeImg').attr('src', res.info); + }); + } + }; + + + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js index 5c84c419b..f25df5bc0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js @@ -143,7 +143,7 @@ var bootstrap = function ($, learun) { }, { label: "收费标准", name: "Standard", width: 100, align: "left" }, { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, - { label: "应缴余额", name: "FSBlance", width: 100, align: "left" }, + { label: "缴费余额", name: "FSBlance", width: 100, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatterAsync: function (callback, value, row, op, $cell) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.cshtml new file mode 100644 index 000000000..62c5f1340 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.cshtml @@ -0,0 +1,31 @@ +@{ + ViewBag.Title = "FinaChargeStuOrderDetail"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    收费项目编号
    + +
    +
    +
    收费项目名称
    + +
    +
    +
    应缴金额
    + +
    +
    +
    实缴金额
    + +
    +
    +
    待缴金额
    + +
    +
    +
    超出余额
    + +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js new file mode 100644 index 000000000..63a907947 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js @@ -0,0 +1,50 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-12 22:14 + * 描 述:FinaChargeStuOrderDetail + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/缴费订单明细/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/缴费订单明细/SaveForm?keyValue=' + keyValue, postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.cshtml new file mode 100644 index 000000000..39e38f1ab --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.cshtml @@ -0,0 +1,21 @@ +@{ + ViewBag.Title = "FinaChargeStuOrderDetail"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js new file mode 100644 index 000000000..83d300086 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js @@ -0,0 +1,47 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-12 22:14 + * 描 述:FinaChargeStuOrderDetail + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').lrAuthorizeJfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/缴费订单明细/GetPageList', + headData: [ + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, + { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left"}, + { label: "应缴金额", name: "YJAmount", width: 100, align: "left"}, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, + { label: "待缴金额", name: "DJAmount", width: 100, align: "left"}, + { label: "超出余额", name: "NowBlance", width: 100, align: "left"}, + ], + mainId:'Id', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/缴费明细.xls b/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/缴费明细.xls index 3f48d912442b1fed063e8ae1578366722efd9ac4..88b2f9a322f5379c358dadf538224815414b827f 100644 GIT binary patch delta 1570 zcmchXPiPZC6vp3dlTFr`uw6H4n>NJ=y@=SP*|d>J`~!;zK@S0~dMFf%LG)BX5MhHF z6)F;Z^i+!%LC`i8MUJG8O9&*S{#2)LxgTyy6q-)&)QRpnoz;AZm_ue=Ard(&` zI(xNOVe34sn9Mn-u(?acvuQA)0RTa$GMeDtfABZ7zvcX097hP37=s+VQ+5g;l5n4d zH^4iND6H4JFo)#5Gd(Kd1y9c4m`4F3Ak?*|5h`Sb;uI&gdxrbW}K@ zxxeQLe?oCo!rxlD@V_(G_BY9yUE*XyckHTgM>Q|ze-y@iU=SY#&210G?=Ob$>F*wP z`Lcw+knoy>FSt2**cDiDFSz)UgfB|?oP>KN6cQD81o%tse2;IlqCMwo*yzE6q2uX3 z8>jkhoE@<7e%!`|K^s?wY^)N0M!Zh^1Mw#DE#e=EegOB)TbGu zVdEJii;J-fcvGLoji`>N%nDAJIwqs@cq^8~YDCAk(PTS;hMC2F`c5RHQt&thKTN?- zlIS@SxIzM-DCX;Z^O&IbbMy|sniw)hVx!_TRVbEbX0E3z5P{(_7a0?zhRdVHz*4(m zR1BmZ;PF%dS5ps%*UJo4>Z6ciicReyZrDf~pq9pp^@O+5lMF9sB4N>PLFHE)s(3py z<=>!)CEUtb5kK`U&~@UcN7HcJ$_{LYc6Tm7ir=+vu()h_&EnDVuMDdbCm!ckeb;7{ QCV!vHA7BOk{bGRq1ZP}3V*mgE delta 1621 zcmc(ePiPZC6vp3dlij3gV*Z&lZGu)P2uhRfCMC7Sim-T$7@??#f;1%u1w|=Zm5oS6 zh(hrZQB-;ojBQn1kqQ>g#j8iL1nJdF>m`VY)Hj=;OS=oAptGk2MbsqOe1^ioetaZy_TH8h{XZ;hSHWCh;v_UW2qUqZ4%lojRlBWaz>wWb47V2 z+~#;a;YOOGWr8iqt}J4#~D^58T=OT<9I~Hscsby$1C`{yMoo|H1@_+?CX4hj#v-giTd$V z{0i1O75o@Ef-fkiPV+ncD!vVS571|N*|n@B$=Yq*fiOYcCU z2??dtwU7u-evbwUgE!9KUY)#fu{?^YR1|Net|w|G2BHYy5t>(vuf~57Sq50sN8|?E zbqPAaNe_6pkTo^I$KOU6S + + @@ -1632,6 +1634,8 @@ + + @@ -6663,6 +6667,14 @@ + + + + + + + + @@ -7967,6 +7979,8 @@ + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj index e3a07e41a..84d303534 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj @@ -593,6 +593,8 @@ + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuOrderDetailMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuOrderDetailMap.cs new file mode 100644 index 000000000..5dbd1f7b8 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuOrderDetailMap.cs @@ -0,0 +1,29 @@ +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:14 + /// 描 述:FinaChargeStuOrderDetail + /// + public class FinaChargeStuOrderDetailMap : EntityTypeConfiguration + { + public FinaChargeStuOrderDetailMap() + { + #region 表、主键 + //表 + this.ToTable("FINACHARGESTUORDERDETAIL"); + //主键 + this.HasKey(t => t.Id); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuOrderMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuOrderMap.cs new file mode 100644 index 000000000..dde5fd77e --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuOrderMap.cs @@ -0,0 +1,29 @@ +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:06 + /// 描 述:缴费订单管理 + /// + public class FinaChargeStuOrderMap : EntityTypeConfiguration + { + public FinaChargeStuOrderMap() + { + #region 表、主键 + //表 + this.ToTable("FINACHARGESTUORDER"); + //主键 + this.HasKey(t => t.Id); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index b214ca61b..d3230caef 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1846,6 +1846,14 @@ + + + + + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderBLL.cs new file mode 100644 index 000000000..148f651b0 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderBLL.cs @@ -0,0 +1,144 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:06 + /// 描 述:缴费订单管理 + /// + public class FinaChargeStuOrderBLL : FinaChargeStuOrderIBLL + { + private FinaChargeStuOrderService finaChargeStuOrderService = new FinaChargeStuOrderService(); + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return finaChargeStuOrderService.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取FinaChargeStuOrder表实体数据 + /// + /// 主键 + /// + public FinaChargeStuOrderEntity GetFinaChargeStuOrderEntity(string keyValue) + { + try + { + return finaChargeStuOrderService.GetFinaChargeStuOrderEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + finaChargeStuOrderService.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, FinaChargeStuOrderEntity entity) + { + try + { + finaChargeStuOrderService.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + public void SaveOrderData(FinaChargeStuYearEntity entity, List list) + { + try + { + finaChargeStuOrderService.SaveOrderData( entity,list); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderEntity.cs new file mode 100644 index 000000000..b83cd0a13 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderEntity.cs @@ -0,0 +1,116 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:06 + /// 描 述:缴费订单管理 + /// + public class FinaChargeStuOrderEntity + { + #region 实体成员 + /// + /// Id + /// + [Column("ID")] + public string Id { get; set; } + /// + /// FSYId + /// + [Column("FSYID")] + public string FSYId { get; set; } + /// + /// 年度 + /// + [Column("YEARNO")] + public int? YearNo { get; set; } + /// + /// 学号 + /// + [Column("STUNO")] + public string StuNo { get; set; } + /// + /// 订单编号 + /// + [Column("ORDERID")] + public string orderid { get; set; } + /// + /// 应交金额 + /// + [Column("YJAMOUNT")] + public decimal? YJAmount { get; set; } + /// + /// 实交金额 + /// + [Column("SJAMOUNT")] + public decimal? SJAmount { get; set; } + /// + /// 待缴金额 + /// + [Column("DJAMOUNT")] + public decimal? DJAmount { get; set; } + /// + /// 超出余额 + /// + [Column("NOWBLANCE")] + public decimal? NowBlance { get; set; } + /// + /// 缴费订单状态(0未支付,1已支付) + /// + [Column("STATUS")] + public int? Status { get; set; } + /// + /// 下单时间 + /// + [Column("PLACEORDERTIME")] + public DateTime? PlaceOrderTime { get; set; } + /// + /// 付款时间 + /// + [Column("PAYTIME")] + public DateTime? PayTime { get; set; } + /// + /// 付款方式 + /// + [Column("PAYMODE")] + public string PayMode { get; set; } + /// + /// 订单来源(1二维码缴费,2人工导入) + /// + [Column("ORDERTYPE")] + public int? OrderType { get; set; } + /// + /// 银行流水号 + /// + [Column("BANKORDER")] + public string BankOrder { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.Id = Guid.NewGuid().ToString(); + NowBlance = 0; + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.Id = keyValue; + } + #endregion + #region 扩展字段 + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderIBLL.cs new file mode 100644 index 000000000..9070d914e --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderIBLL.cs @@ -0,0 +1,49 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:06 + /// 描 述:缴费订单管理 + /// + public interface FinaChargeStuOrderIBLL + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取FinaChargeStuOrder表实体数据 + /// + /// 主键 + /// + FinaChargeStuOrderEntity GetFinaChargeStuOrderEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, FinaChargeStuOrderEntity entity); + #endregion + + void SaveOrderData(FinaChargeStuYearEntity entity, List list); + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs new file mode 100644 index 000000000..408989bd9 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -0,0 +1,252 @@ +using Dapper; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:06 + /// 描 述:缴费订单管理 + /// + public class FinaChargeStuOrderService : RepositoryFactory + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" + t.Id, + t.YearNo, + t.StuNo, + t.orderid, + t.YJAmount, + t.SJAmount, + t.DJAmount, + t.NowBlance, + t.Status, + t.PlaceOrderTime, + t.PayTime, + t.PayMode, + t.OrderType, + t.BankOrder + "); + strSql.Append(" FROM FinaChargeStuOrder t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty()) + { + dp.Add("startTime", queryParam["StartTime"].ToDate(), DbType.DateTime); + dp.Add("endTime", queryParam["EndTime"].ToDate(), DbType.DateTime); + strSql.Append(" AND ( t.PayTime >= @startTime AND t.PayTime <= @endTime ) "); + } + if (!queryParam["YearNo"].IsEmpty()) + { + dp.Add("YearNo", "%" + queryParam["YearNo"].ToString() + "%", DbType.String); + strSql.Append(" AND t.YearNo Like @YearNo "); + } + if (!queryParam["StuNo"].IsEmpty()) + { + dp.Add("StuNo", "%" + queryParam["StuNo"].ToString() + "%", DbType.String); + strSql.Append(" AND t.StuNo Like @StuNo "); + } + if (!queryParam["Status"].IsEmpty()) + { + dp.Add("Status", queryParam["Status"].ToString(), DbType.String); + strSql.Append(" AND t.Status = @Status "); + } + if (!queryParam["PayMode"].IsEmpty()) + { + dp.Add("PayMode", queryParam["PayMode"].ToString(), DbType.String); + strSql.Append(" AND t.PayMode = @PayMode "); + } + if (!queryParam["OrderType"].IsEmpty()) + { + dp.Add("OrderType", queryParam["OrderType"].ToString(), DbType.String); + strSql.Append(" AND t.OrderType = @OrderType "); + } + if (!queryParam["BankOrder"].IsEmpty()) + { + dp.Add("BankOrder", "%" + queryParam["BankOrder"].ToString() + "%", DbType.String); + strSql.Append(" AND t.BankOrder Like @BankOrder "); + } + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取FinaChargeStuOrder表实体数据 + /// + /// 主键 + /// + public FinaChargeStuOrderEntity GetFinaChargeStuOrderEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t => t.Id == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, FinaChargeStuOrderEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + /// + /// 二维码缴费下单 + /// + /// + /// + public void SaveOrderData(FinaChargeStuYearEntity entity, List list) + { + var db = this.BaseRepository("CollegeMIS"); + try + { + db.BeginTrans(); + //保存缴费订单数据 + var order = new FinaChargeStuOrderEntity(); + order.Create(); + order.FSYId = entity.FSYId; + order.YearNo = entity.FSYear; + order.StuNo = entity.StuNo; + order.orderid = entity.orderid; + order.YJAmount = list.Sum(x => x.YJAmount); + order.SJAmount = list.Sum(x => x.SJAmount); + order.DJAmount = order.YJAmount - order.SJAmount; + if (order.DJAmount<0) + { + order.NowBlance = Math.Abs(order.DJAmount.Value); + order.DJAmount = 0; + } + order.PlaceOrderTime = DateTime.Now; + order.Status = 0; + order.OrderType = 1; + db.Insert(order); + //订单明细 + foreach (var detail in list) + { + detail.Create(); + detail.FCSOId = order.Id; + detail.DJAmount = detail.YJAmount - detail.SJAmount; + if (detail.DJAmount < 0) + { + detail.NowBlance = Math.Abs(detail.DJAmount.Value); + detail.DJAmount = 0; + } + db.Insert(detail); + } + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs index da155cf25..9a6098b40 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs @@ -173,6 +173,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public IEnumerable GetFinaChargeStuItemList(string keyValue) + { + try + { + return finaChargeStuYearService.GetFinaChargeStuItemList(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs index 34594d136..c620b5b70 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs @@ -30,17 +30,17 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("FSYEAR")] public int? FSYear { get; set; } /// - /// YJAmount + /// 应缴金额(收费标准) /// [Column("YJAMOUNT")] public decimal? YJAmount { get; set; } /// - /// SJAmount + /// 实缴金额(已缴金额) /// [Column("SJAMOUNT")] public decimal? SJAmount { get; set; } /// - /// 缴费年度余额 + /// 缴费年度余额(剩余应缴金额) /// [Column("FSBLANCE")] public decimal? FSBlance { get; set; } @@ -81,6 +81,10 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement public string IdentityCardNo { get; set; } [NotMapped] public string StuName { get; set; } + [NotMapped] + public decimal? PayMoney { get; set; } + [NotMapped] + public string orderid { get; set; } #endregion } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs index 0d396c4b1..7a25da239 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs @@ -46,5 +46,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement void SaveGenerateByCondition(FinaChargeStuYearEntity entity); List GetTree(); + /// + /// 获取学生缴费明细 + /// + /// + /// + IEnumerable GetFinaChargeStuItemList(string keyValue); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 16f804bfc..419174c7d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -77,6 +77,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement dp.Add("PayFeeStatus", queryParam["PayFeeStatus"].ToString(), DbType.String); strSql.Append(" AND t.PayFeeStatus = @PayFeeStatus "); } + if (!queryParam["F_CheckMark"].IsEmpty()) + { + dp.Add("F_CheckMark", queryParam["F_CheckMark"].ToString(), DbType.String); + strSql.Append(" AND b.F_CheckMark = @F_CheckMark "); + } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) @@ -101,7 +106,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + return this.BaseRepository("CollegeMIS").FindEntity("select b.*,a.FSYear,a.YJAmount,a.SJAmount,a.FSBlance,a.PayFeeStatus from FinaChargeStuYear a left join FinaChargeStudent b on a.StuNo=b.StuNo where a.FSYId='"+keyValue+"'",null); } catch (Exception ex) { @@ -116,6 +121,31 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + /// + /// 获取学生缴费明细 + /// + /// + /// + public IEnumerable GetFinaChargeStuItemList(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindList("select a.StuNo,b.* from FinaChargeStuYear a left join FinaChargeStuYearItem b on a.FSYId=b.FSYId where b.F_DeleteMark=0 and b.FSBlance<0 and a.FSYId='"+keyValue+"' order by ChargeItemCode"); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion #region 提交数据 @@ -190,7 +220,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //获取已有年度学生缴费明细记录 var oldFinaChargeStuYearItemList = db.FindList(m => m.FSYear == entity.FSYear); //获取收费标准 - var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); + var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType,b.priority from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); foreach (var stuitem in stulist) @@ -213,6 +243,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; //主表应缴金额更新 oldFinaChargeStuYearEntity.YJAmount += finaChargeStuYearItem.Standard; @@ -251,6 +282,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; finaChargeStuYearItem.FSBlance = -finaChargeStuYearItem.Standard; db.Insert(finaChargeStuYearItem); diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs index d16277559..551006a22 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs @@ -138,7 +138,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } - public (DataTable failDt, int snum, int fnum) ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) + public string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) { try { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs index 572ecae6c..28c1b1d2f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs @@ -43,6 +43,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("CHARGEITEMTYPE")] public int? ChargeItemType { get; set; } /// + /// 优先级 + /// + [Column("PRIORITY")] + public int? priority { get; set; } + /// /// 收费标准 /// [Column("STANDARD")] diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs index 552a7e730..321a29c2f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs @@ -43,8 +43,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 实体 void SaveEntity(string keyValue, FinaChargeStuYearItemEntity entity); #endregion - + void UnDeleteEntity(string keyValue); - (DataTable failDt, int snum, int fnum) ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson); + string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index cbb92f7bb..d93f24a2f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -4,6 +4,7 @@ using Learun.Util; using System; using System.Collections.Generic; using System.Data; +using System.Linq; using System.Text; using Learun.Cache.Base; using Learun.Cache.Factory; @@ -220,7 +221,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion - public (DataTable failDt, int snum, int fnum) ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) + public string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) { var db = this.BaseRepository("CollegeMIS").BeginTrans(); try @@ -237,56 +238,150 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { failDt.Columns.Add(dc.ColumnName, dc.DataType); } + //获取收费标准 非固定项目 + var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType,b.priority from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=2 and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); + //var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear + // from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=2 and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); + //获取已有年度学生缴费记录 + var oldFinaChargeStuYearList = db.FindList(); + //获取已有年度学生缴费明细记录 + var oldFinaChargeStuYearItemList = db.FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId "); // 循环遍历导入 foreach (DataRow dr in dt.Rows) { - //检测是否有空值 - if (dr[0].ToString() == "" || dr[1].ToString() == "" || dr[2].ToString() == "" || dr[3].ToString() == "" || dr[4].ToString() == "" || dr[5].ToString() == ""||dr[6].ToString() == "") - { - throw (new Exception("行内数据有空值,不能为空!")); - } - //检测缴费年度是否为数字 - decimal payyearresult = 0; - bool parsepayyearresult = decimal.TryParse(dr[0].ToString(), out payyearresult); - if (!parsepayyearresult || dr[0].ToString().Length != 4) - { - throw (new Exception("【缴费年度】格式不正确,必须为四位数字年份!")); - } - //首先校验金额是否为数字 - //第六列是金额 - decimal dresult = 0; - bool parseresult = decimal.TryParse(dr[5].ToString(), out dresult); - if (!parseresult) - { - throw (new Exception("【金额】转换失败,必须为数字!")); - } - //金额不能小于等于零 - if (dresult <= 0) + try { - throw (new Exception("【金额】不能为零或小于零,必须为正数!")); + FinaChargeStudentEntity finaChargeStudentEntity = null; + FinaChargesStandardEntity finaChargesStandardEntity = null; + //检测是否有空值 + if (dr[0].ToString() == "" || dr[1].ToString() == "" || dr[2].ToString() == "" || dr[3].ToString() == "" || dr[4].ToString() == "" || dr[5].ToString() == "") + { + throw new Exception("行内数据有空值,不能为空!"); + } + //检测缴费年度是否为数字 + decimal payyearresult = 0; + bool parsepayyearresult = decimal.TryParse(dr[2].ToString(), out payyearresult); + if (!parsepayyearresult || dr[2].ToString().Length != 4) + { + throw new Exception("【缴费年度】格式不正确,必须为四位数字年份!"); + } + //首先校验金额是否为数字 + decimal dresult = 0; + bool parseresult = decimal.TryParse(dr[5].ToString(), out dresult); + if (!parseresult) + { + throw new Exception("【金额】转换失败,必须为数字!"); + } + //金额不能小于等于零 + if (dresult <= 0) + { + throw new Exception("【金额】不能为零或小于零,必须为正数!"); + } + //筛选不在标准代码表内的数据 + if (finaChargesStandardList.Count(m => m.ChargeItemCode == dr[3].ToString()&&m.ChargeItemName== dr[4].ToString()) == 0) + { + throw new Exception("【收费项目】不存在,请核对!"); + } + //筛选不在收费学生表内的数据 + finaChargeStudentEntity = stulist.FirstOrDefault(m => m.StuNo == dr[0].ToString()&&m.StuName== dr[1].ToString()); + if (finaChargeStudentEntity == null) + { + throw new Exception("【收费学生】不存在,请核对!"); + } + else + { + //筛选有无对应专业收费标准的数据 + finaChargesStandardEntity = finaChargesStandardList.FirstOrDefault(m => + m.DeptNo == finaChargeStudentEntity.DeptNo && + m.MajorNo == finaChargeStudentEntity.MajorNo && m.SYear == payyearresult && + m.Grade == finaChargeStudentEntity.Grade && m.ChargeItemCode == dr[3].ToString()&&m.ChargeItemName== dr[4].ToString()); + if (finaChargesStandardEntity == null) + { + throw new Exception("【专业年度收费标准】不存在,请核对!"); + } + } + //开始导入操作 + //查询有无学生年度缴费数据 + FinaChargeStuYearEntity oldFinaChargeStuYearEntity = + oldFinaChargeStuYearList.FirstOrDefault(m => + m.StuNo == finaChargeStudentEntity.StuNo && + m.FSYear == finaChargesStandardEntity.SYear); + if (oldFinaChargeStuYearEntity==null) + { + //无数据新增主表 + var finaChargeStuYear = new FinaChargeStuYearEntity(); + finaChargeStuYear.Create(); + finaChargeStuYear.StuNo = finaChargeStudentEntity.StuNo; + finaChargeStuYear.FSYear = finaChargesStandardEntity.SYear; + finaChargeStuYear.SJAmount = 0; + finaChargeStuYear.PayFeeStatus = 0; + //子表 + var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); + finaChargeStuYearItem.Create(); + finaChargeStuYearItem.FSYId = finaChargeStuYear.FSYId; + finaChargeStuYearItem.FSYear = finaChargeStuYear.FSYear; + finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; + finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; + finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; + finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; + finaChargeStuYearItem.FSBlance = -finaChargeStuYearItem.Standard; + db.Insert(finaChargeStuYearItem); + finaChargeStuYear.YJAmount = finaChargeStuYearItem.Standard; + finaChargeStuYear.FSBlance = -finaChargeStuYear.YJAmount; + db.Insert(finaChargeStuYear); + } + else + { + //查询子表有无记录 + if (oldFinaChargeStuYearItemList.Count(m=>m.StuNo== finaChargeStudentEntity.StuNo&&m.FSYear == finaChargesStandardEntity.SYear&&m.ChargeItemCode== finaChargesStandardEntity.ChargeItemCode) ==0) + { + //子表 + var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); + finaChargeStuYearItem.Create(); + finaChargeStuYearItem.FSYId = oldFinaChargeStuYearEntity.FSYId; + finaChargeStuYearItem.FSYear = oldFinaChargeStuYearEntity.FSYear; + finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; + finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; + finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; + finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; + finaChargeStuYearItem.FSBlance = -finaChargeStuYearItem.Standard; + db.Insert(finaChargeStuYearItem); + //更新主表 + oldFinaChargeStuYearEntity.YJAmount+= finaChargeStuYearItem.Standard; + oldFinaChargeStuYearEntity.FSBlance = -oldFinaChargeStuYearEntity.YJAmount; + db.Update(oldFinaChargeStuYearEntity); + } + else + { + throw new Exception("【学生收费明细】已存在,请核对!"); + } + } } - //筛选不在标准代码表内的数据 - //第五列是项目编码 - if (typecodelist.Count(m => m.ProjectCode == dr[4].ToString()) == 0) + catch (Exception ex) { - throw (new Exception("【缴费项目编码】不存在,请核对!")); + fnum++; + dr["导入错误"] = ex.Message; + failDt.Rows.Add(dr.ItemArray); } } - - //获取已有年度学生缴费记录 - var oldFinaChargeStuYearList = db.FindList(m => m.FSYear == entity.FSYear); - //获取已有年度学生缴费明细记录 - var oldFinaChargeStuYearItemList = db.FindList(m => m.FSYear == entity.FSYear); - //获取收费标准 - var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); - var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear - from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); + // 写入缓存如果有未导入的数据 + if (failDt.Rows.Count > 0) + { + string errordt = failDt.ToJson(); + cache.Write(cacheKey + fileGuid, errordt, CacheId.excel); } - + db.Commit(); + //更新学生缴费总表 + BaseRepository("CollegeMIS").ExecuteBySql(@"update FinaChargeStudent set FSBlance=a.[FSBlance] + from (select isnull(sum([FSBlance]),0) as [FSBlance],StuNo from [FinaChargeStuYear] group by StuNo) a left join + FinaChargeStudent b on a.stuno=b.stuno"); + } + return snum + "|" + fnum; } catch (Exception ex) { - db.Rollback(); if (ex is ExceptionEx) { throw; diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs index 07fab4b92..0a398a8de 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs @@ -50,10 +50,15 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("SYEAR")] public int SYear { get; set; } /// - /// CheckMark + /// 审核标志 /// [Column("CHECKMARK")] public bool? CheckMark { get; set; } + /// + /// 删除标志 + /// + [Column("F_DELETEMARK")] + public bool? F_DeleteMark { get; set; } #endregion #region 扩展操作 @@ -83,6 +88,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement public string ChargeItemCode { get; set; } [NotMapped] public int? ChargeItemType { get; set; } + [NotMapped] + public int? priority { get; set; } /// /// 已交金额 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs index 5df743c5f..9ac193a26 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs @@ -366,7 +366,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement MajorNo = majorNo, Standard = item.Standard, SYear = Convert.ToInt32(sYear), - CheckMark = false + CheckMark = false, + F_DeleteMark=false }; entity.Create(); db.Insert(entity); diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/FinaChargeStuOrderDetailEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/FinaChargeStuOrderDetailEntity.cs new file mode 100644 index 000000000..2ca8dd2b6 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/FinaChargeStuOrderDetailEntity.cs @@ -0,0 +1,81 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:14 + /// 描 述:FinaChargeStuOrderDetail + /// + public class FinaChargeStuOrderDetailEntity + { + #region 实体成员 + /// + /// Id + /// + [Column("ID")] + public string Id { get; set; } + /// + /// FCSOId + /// + [Column("FCSOID")] + public string FCSOId { get; set; } + /// + /// ChargeItemCode + /// + [Column("CHARGEITEMCODE")] + public string ChargeItemCode { get; set; } + /// + /// ChargeItemName + /// + [Column("CHARGEITEMNAME")] + public string ChargeItemName { get; set; } + /// + /// 应缴 + /// + [Column("YJAMOUNT")] + public decimal? YJAmount { get; set; } + /// + /// 实缴 + /// + [Column("SJAMOUNT")] + public decimal? SJAmount { get; set; } + /// + /// 待缴 + /// + [Column("DJAMOUNT")] + public decimal? DJAmount { get; set; } + /// + /// 超出余额 + /// + [Column("NOWBLANCE")] + public decimal? NowBlance { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.Id = Guid.NewGuid().ToString(); + NowBlance = 0; + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.Id = keyValue; + } + #endregion + #region 扩展字段 + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细BLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细BLL.cs new file mode 100644 index 000000000..433536d53 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细BLL.cs @@ -0,0 +1,125 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:14 + /// 描 述:FinaChargeStuOrderDetail + /// + public class 缴费订单明细BLL : 缴费订单明细IBLL + { + private 缴费订单明细Service 缴费订单明细Service = new 缴费订单明细Service(); + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return 缴费订单明细Service.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取FinaChargeStuOrderDetail表实体数据 + /// + /// 主键 + /// + public FinaChargeStuOrderDetailEntity GetFinaChargeStuOrderDetailEntity(string keyValue) + { + try + { + return 缴费订单明细Service.GetFinaChargeStuOrderDetailEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + 缴费订单明细Service.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, FinaChargeStuOrderDetailEntity entity) + { + try + { + 缴费订单明细Service.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细IBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细IBLL.cs new file mode 100644 index 000000000..1edcdd22d --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细IBLL.cs @@ -0,0 +1,48 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:14 + /// 描 述:FinaChargeStuOrderDetail + /// + public interface 缴费订单明细IBLL + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取FinaChargeStuOrderDetail表实体数据 + /// + /// 主键 + /// + FinaChargeStuOrderDetailEntity GetFinaChargeStuOrderDetailEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, FinaChargeStuOrderDetailEntity entity); + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细Service.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细Service.cs new file mode 100644 index 000000000..204aa69fb --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细Service.cs @@ -0,0 +1,150 @@ +using Dapper; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Data; +using System.Text; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-12 22:14 + /// 描 述:FinaChargeStuOrderDetail + /// + public class 缴费订单明细Service : RepositoryFactory + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" + t.Id, + t.ChargeItemCode, + t.ChargeItemName, + t.YJAmount, + t.SJAmount, + t.DJAmount, + t.NowBlance + "); + strSql.Append(" FROM FinaChargeStuOrderDetail t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取FinaChargeStuOrderDetail表实体数据 + /// + /// 主键 + /// + public FinaChargeStuOrderDetailEntity GetFinaChargeStuOrderDetailEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t=>t.Id == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, FinaChargeStuOrderDetailEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + } +} From 4b01b345a0625d660aeb22bbb4826b46c9cddf11 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Mon, 14 Aug 2023 15:48:56 +0800 Subject: [PATCH 20/50] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ller.cs => FinaChargeStuOrderDetailController.cs} | 12 ++++++------ .../Form.cshtml | 2 +- .../Form.js | 4 ++-- .../Index.cshtml | 2 +- .../Index.js | 2 +- .../Learun.Application.Web.csproj | 10 +++++----- .../Learun.Application.TwoDevelopment.csproj | 8 ++++---- .../FinaChargeStuOrderDetailBLL.cs} | 12 ++++++------ .../FinaChargeStuOrderDetailEntity.cs | 0 .../FinaChargeStuOrderDetailIBLL.cs} | 2 +- .../FinaChargeStuOrderDetailService.cs} | 2 +- 11 files changed, 28 insertions(+), 28 deletions(-) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/{缴费订单明细Controller.cs => FinaChargeStuOrderDetailController.cs} (85%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{缴费订单明细 => FinaChargeStuOrderDetail}/Form.cshtml (94%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{缴费订单明细 => FinaChargeStuOrderDetail}/Form.js (90%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{缴费订单明细 => FinaChargeStuOrderDetail}/Index.cshtml (88%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{缴费订单明细 => FinaChargeStuOrderDetail}/Index.js (97%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{缴费订单明细/缴费订单明细BLL.cs => FinaChargeStuOrderDetail/FinaChargeStuOrderDetailBLL.cs} (85%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{缴费订单明细 => FinaChargeStuOrderDetail}/FinaChargeStuOrderDetailEntity.cs (100%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{缴费订单明细/缴费订单明细IBLL.cs => FinaChargeStuOrderDetail/FinaChargeStuOrderDetailIBLL.cs} (96%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{缴费订单明细/缴费订单明细Service.cs => FinaChargeStuOrderDetail/FinaChargeStuOrderDetailService.cs} (98%) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/缴费订单明细Controller.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderDetailController.cs similarity index 85% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/缴费订单明细Controller.cs rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderDetailController.cs index 0b23f4451..1c9968e45 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/缴费订单明细Controller.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderDetailController.cs @@ -13,9 +13,9 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers /// 日 期:2023-08-12 22:14 /// 描 述:FinaChargeStuOrderDetail ///
    - public class 缴费订单明细Controller : MvcControllerBase + public class FinaChargeStuOrderDetailController : MvcControllerBase { - private 缴费订单明细IBLL 缴费订单明细IBLL = new 缴费订单明细BLL(); + private FinaChargeStuOrderDetailIBLL fFinaChargeStuOrderDetailIBLL = new FinaChargeStuOrderDetailBLL(); #region 视图功能 @@ -52,7 +52,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult GetPageList(string pagination, string queryJson) { Pagination paginationobj = pagination.ToObject(); - var data = 缴费订单明细IBLL.GetPageList(paginationobj, queryJson); + var data = fFinaChargeStuOrderDetailIBLL.GetPageList(paginationobj, queryJson); var jsonData = new { rows = data, @@ -71,7 +71,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult GetFormData(string keyValue) { - var FinaChargeStuOrderDetailData = 缴费订单明细IBLL.GetFinaChargeStuOrderDetailEntity( keyValue ); + var FinaChargeStuOrderDetailData = fFinaChargeStuOrderDetailIBLL.GetFinaChargeStuOrderDetailEntity( keyValue ); var jsonData = new { FinaChargeStuOrderDetail = FinaChargeStuOrderDetailData, }; @@ -90,7 +90,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult DeleteForm(string keyValue) { - 缴费订单明细IBLL.DeleteEntity(keyValue); + fFinaChargeStuOrderDetailIBLL.DeleteEntity(keyValue); return Success("删除成功!"); } /// @@ -105,7 +105,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult SaveForm(string keyValue, string strEntity) { FinaChargeStuOrderDetailEntity entity = strEntity.ToObject(); - 缴费订单明细IBLL.SaveEntity(keyValue,entity); + fFinaChargeStuOrderDetailIBLL.SaveEntity(keyValue,entity); if (string.IsNullOrEmpty(keyValue)) { } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Form.cshtml similarity index 94% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.cshtml rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Form.cshtml index 62c5f1340..380d5cd25 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Form.cshtml @@ -28,4 +28,4 @@ -@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js") +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Form.js similarity index 90% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Form.js index 63a907947..5a1b15f19 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Form.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Form.js @@ -18,7 +18,7 @@ var bootstrap = function ($, learun) { }, initData: function () { if (!!keyValue) { - $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/缴费订单明细/GetFormData?keyValue=' + keyValue, function (data) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/GetFormData?keyValue=' + keyValue, function (data) { for (var id in data) { if (!!data[id].length && data[id].length > 0) { $('#' + id ).jfGridSet('refreshdata', data[id]); @@ -39,7 +39,7 @@ var bootstrap = function ($, learun) { var postData = { strEntity: JSON.stringify($('body').lrGetFormData()) }; - $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/缴费订单明细/SaveForm?keyValue=' + keyValue, postData, function (res) { + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/SaveForm?keyValue=' + keyValue, postData, function (res) { // 保存成功后才回调 if (!!callBack) { callBack(); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.cshtml similarity index 88% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.cshtml rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.cshtml index 39e38f1ab..cd6f2e612 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.cshtml @@ -18,4 +18,4 @@ -@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js") +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js similarity index 97% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js index 83d300086..74847013b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/缴费订单明细/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js @@ -21,7 +21,7 @@ var bootstrap = function ($, learun) { // 初始化列表 initGird: function () { $('#gridtable').lrAuthorizeJfGrid({ - url: top.$.rootUrl + '/ReceiveSendFeeManagement/缴费订单明细/GetPageList', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/GetPageList', headData: [ { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left"}, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index 2755a30d9..dbe12eff4 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -893,7 +893,7 @@ - + @@ -6671,10 +6671,10 @@ - - - - + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index d3230caef..fb7d5a1db 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1850,10 +1850,10 @@ - - - - + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细BLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailBLL.cs similarity index 85% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细BLL.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailBLL.cs index 433536d53..58a839c85 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细BLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailBLL.cs @@ -12,9 +12,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-12 22:14 /// 描 述:FinaChargeStuOrderDetail /// - public class 缴费订单明细BLL : 缴费订单明细IBLL + public class FinaChargeStuOrderDetailBLL : FinaChargeStuOrderDetailIBLL { - private 缴费订单明细Service 缴费订单明细Service = new 缴费订单明细Service(); + private FinaChargeStuOrderDetailService finaChargeStuOrderDetailService = new FinaChargeStuOrderDetailService(); #region 获取数据 @@ -28,7 +28,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return 缴费订单明细Service.GetPageList(pagination, queryJson); + return finaChargeStuOrderDetailService.GetPageList(pagination, queryJson); } catch (Exception ex) { @@ -52,7 +52,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return 缴费订单明细Service.GetFinaChargeStuOrderDetailEntity(keyValue); + return finaChargeStuOrderDetailService.GetFinaChargeStuOrderDetailEntity(keyValue); } catch (Exception ex) { @@ -79,7 +79,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - 缴费订单明细Service.DeleteEntity(keyValue); + finaChargeStuOrderDetailService.DeleteEntity(keyValue); } catch (Exception ex) { @@ -104,7 +104,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - 缴费订单明细Service.SaveEntity(keyValue, entity); + finaChargeStuOrderDetailService.SaveEntity(keyValue, entity); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/FinaChargeStuOrderDetailEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailEntity.cs similarity index 100% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/FinaChargeStuOrderDetailEntity.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailEntity.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细IBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailIBLL.cs similarity index 96% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细IBLL.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailIBLL.cs index 1edcdd22d..b154f6ca8 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细IBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailIBLL.cs @@ -11,7 +11,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-12 22:14 /// 描 述:FinaChargeStuOrderDetail ///
    - public interface 缴费订单明细IBLL + public interface FinaChargeStuOrderDetailIBLL { #region 获取数据 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细Service.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailService.cs similarity index 98% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细Service.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailService.cs index 204aa69fb..f63e46834 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/缴费订单明细/缴费订单明细Service.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailService.cs @@ -15,7 +15,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-12 22:14 /// 描 述:FinaChargeStuOrderDetail ///
    - public class 缴费订单明细Service : RepositoryFactory + public class FinaChargeStuOrderDetailService : RepositoryFactory { #region 获取数据 From ae296764495efc9085a0aca78496875c1b2bfb08 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Wed, 16 Aug 2023 18:24:21 +0800 Subject: [PATCH 21/50] =?UTF-8?q?=E8=B5=84=E9=87=91=E6=B5=81=E6=B0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuBalanceController.cs | 117 +++++++++++ .../Views/FinaChargeStuBalance/Form.cshtml | 59 ++++++ .../Views/FinaChargeStuBalance/Form.js | 50 +++++ .../Views/FinaChargeStuBalance/Index.cshtml | 46 +++++ .../Views/FinaChargeStuBalance/Index.js | 97 ++++++++++ .../Learun.Application.Web.csproj | 5 + .../Learun.Application.Mapping.csproj | 1 + .../FinaChargeStuBalanceMap.cs | 29 +++ .../Learun.Application.TwoDevelopment.csproj | 4 + .../FinaChargeStuBalanceBLL.cs | 125 ++++++++++++ .../FinaChargeStuBalanceEntity.cs | 115 +++++++++++ .../FinaChargeStuBalanceIBLL.cs | 48 +++++ .../FinaChargeStuBalanceService.cs | 183 ++++++++++++++++++ 13 files changed, 879 insertions(+) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuBalanceController.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuBalanceMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceIBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuBalanceController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuBalanceController.cs new file mode 100644 index 000000000..6c60ff7a4 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuBalanceController.cs @@ -0,0 +1,117 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Web.Mvc; +using System.Collections.Generic; + +namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-16 11:02 + /// 描 述:费用变更明细 + /// + public class FinaChargeStuBalanceController : MvcControllerBase + { + private FinaChargeStuBalanceIBLL finaChargeStuBalanceIBLL = new FinaChargeStuBalanceBLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = finaChargeStuBalanceIBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var FinaChargeStuBalanceData = finaChargeStuBalanceIBLL.GetFinaChargeStuBalanceEntity( keyValue ); + var jsonData = new { + FinaChargeStuBalance = FinaChargeStuBalanceData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + finaChargeStuBalanceIBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + FinaChargeStuBalanceEntity entity = strEntity.ToObject(); + finaChargeStuBalanceIBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.cshtml new file mode 100644 index 000000000..881720633 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.cshtml @@ -0,0 +1,59 @@ +@{ + ViewBag.Title = "费用变更明细"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    学号
    + +
    +
    +
    缴费年度
    + +
    +
    +
    收费项目编号
    + +
    +
    +
    收费项目名称
    + +
    +
    +
    收费标准
    + +
    +
    +
    本次待缴金额
    + +
    +
    +
    变动金额
    + +
    +
    +
    剩余待缴金额
    + +
    +
    +
    当前余额
    + +
    +
    +
    本次变动金额
    + +
    +
    +
    本次余额
    + +
    +
    +
    变动时间
    + +
    +
    +
    变动原因
    + +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.js new file mode 100644 index 000000000..eff4d82cb --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Form.js @@ -0,0 +1,50 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-16 11:02 + * 描 述:费用变更明细 + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuBalance/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuBalance/SaveForm?keyValue=' + keyValue, postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.cshtml new file mode 100644 index 000000000..c506e3c84 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.cshtml @@ -0,0 +1,46 @@ +@{ + ViewBag.Title = "费用变更明细"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    学号
    + +
    +
    +
    缴费年度
    + +
    +
    +
    项目编号
    + +
    +
    +
    变动原因
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js new file mode 100644 index 000000000..f1d22cfb8 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js @@ -0,0 +1,97 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-16 11:02 + * 描 述:费用变更明细 + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var startTime; + var endTime; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + $("#ChangeType").lrDataItemSelect({ code:'ChangeType'}); + // 时间搜索框 + $('#datesearch').lrdate({ + dfdata: [ + { name: '今天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00') }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近7天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'd', -6) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近1个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -1) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近3个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -3) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } } + ], + // 月 + mShow: false, + premShow: false, + // 季度 + jShow: false, + prejShow: false, + // 年 + ysShow: false, + yxShow: false, + preyShow: false, + yShow: false, + // 默认 + dfvalue: '1', + selectfn: function (begin, end) { + startTime = begin; + endTime = end; + page.search(); + } + }); + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 220, 400); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').lrAuthorizeJfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuBalance/GetPageList', + headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left"}, + { label: "缴费年度", name: "FSYear", width: 100, align: "left"}, + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, + { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left"}, + { label: "收费标准", name: "Standard", width: 100, align: "left"}, + { label: "本次待缴金额", name: "DJAmount", width: 100, align: "left"}, + { label: "变动金额", name: "PaymentAmount", width: 100, align: "left"}, + { label: "剩余待缴金额", name: "QJAmount", width: 100, align: "left"}, + { label: "当前余额", name: "OldBalance", width: 100, align: "left"}, + { label: "本次变动金额", name: "ChangeAmount", width: 100, align: "left"}, + { label: "本次余额", name: "NowBalance", width: 100, align: "left"}, + { label: "变动时间", name: "ChangeDate", width: 100, align: "left"}, + { + label: "变动原因", name: "ChangeType", width: 100, align: "left", formatter: function (cellvalue, row) { + if (cellvalue === 1) { + return '二维码缴费'; + } else if (cellvalue === 2) { + return '已缴费'; + } else if (cellvalue === 3) { + return '退费'; + } + }}, + ], + mainId:'Id', + isPage: true + }); + }, + search: function (param) { + param = param || {}; + param.StartTime = startTime; + param.EndTime = endTime; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index dbe12eff4..d8e6d6b5a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -894,6 +894,7 @@ + @@ -6675,6 +6676,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj index 84d303534..0ffddadcc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj @@ -595,6 +595,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuBalanceMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuBalanceMap.cs new file mode 100644 index 000000000..74b326edc --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeStuBalanceMap.cs @@ -0,0 +1,29 @@ +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-16 11:02 + /// 描 述:费用变更明细 + /// + public class FinaChargeStuBalanceMap : EntityTypeConfiguration + { + public FinaChargeStuBalanceMap() + { + #region 表、主键 + //表 + this.ToTable("FINACHARGESTUBALANCE"); + //主键 + this.HasKey(t => t.Id); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index fb7d5a1db..b0d937c59 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1854,6 +1854,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceBLL.cs new file mode 100644 index 000000000..95142d331 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceBLL.cs @@ -0,0 +1,125 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-16 11:02 + /// 描 述:费用变更明细 + /// + public class FinaChargeStuBalanceBLL : FinaChargeStuBalanceIBLL + { + private FinaChargeStuBalanceService finaChargeStuBalanceService = new FinaChargeStuBalanceService(); + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return finaChargeStuBalanceService.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取FinaChargeStuBalance表实体数据 + /// + /// 主键 + /// + public FinaChargeStuBalanceEntity GetFinaChargeStuBalanceEntity(string keyValue) + { + try + { + return finaChargeStuBalanceService.GetFinaChargeStuBalanceEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + finaChargeStuBalanceService.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, FinaChargeStuBalanceEntity entity) + { + try + { + finaChargeStuBalanceService.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs new file mode 100644 index 000000000..5260cb8ba --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs @@ -0,0 +1,115 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-16 11:02 + /// 描 述:费用变更明细 + /// + public class FinaChargeStuBalanceEntity + { + #region 实体成员 + /// + /// Id + /// + [Column("ID")] + public string Id { get; set; } + /// + /// StuNo + /// + [Column("STUNO")] + public string StuNo { get; set; } + /// + /// FSYear + /// + [Column("FSYEAR")] + public int? FSYear { get; set; } + /// + /// FCSOId + /// + [Column("FCSOID")] + public string FCSOId { get; set; } + /// + /// ChargeItemCode + /// + [Column("CHARGEITEMCODE")] + public string ChargeItemCode { get; set; } + /// + /// ChargeItemName + /// + [Column("CHARGEITEMNAME")] + public string ChargeItemName { get; set; } + /// + /// Standard + /// + [Column("STANDARD")] + public decimal? Standard { get; set; } + /// + /// 剩余缴费金额 + /// + [Column("DJAMOUNT")] + public decimal? DJAmount { get; set; } + /// + /// 变动金额 + /// + [Column("PAYMENTAMOUNT")] + public decimal? PaymentAmount { get; set; } + /// + /// 本次剩余缴费金额 + /// + [Column("QJAMOUNT")] + public decimal? QJAmount { get; set; } + /// + /// OldBalance + /// + [Column("OLDBALANCE")] + public decimal? OldBalance { get; set; } + /// + /// ChangeAmount + /// + [Column("CHANGEAMOUNT")] + public decimal? ChangeAmount { get; set; } + /// + /// NowBalance + /// + [Column("NOWBALANCE")] + public decimal? NowBalance { get; set; } + /// + /// ChangeDate + /// + [Column("CHANGEDATE")] + public DateTime? ChangeDate { get; set; } + /// + /// 变动原因(1二维码缴费,2导入缴费,3退费) + /// + [Column("CHANGETYPE")] + public int? ChangeType { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.Id = Guid.NewGuid().ToString(); + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.Id = keyValue; + } + #endregion + #region 扩展字段 + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceIBLL.cs new file mode 100644 index 000000000..26803fe4c --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceIBLL.cs @@ -0,0 +1,48 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-16 11:02 + /// 描 述:费用变更明细 + /// + public interface FinaChargeStuBalanceIBLL + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取FinaChargeStuBalance表实体数据 + /// + /// 主键 + /// + FinaChargeStuBalanceEntity GetFinaChargeStuBalanceEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, FinaChargeStuBalanceEntity entity); + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs new file mode 100644 index 000000000..ecd62c8ad --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs @@ -0,0 +1,183 @@ +using Dapper; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Data; +using System.Text; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-16 11:02 + /// 描 述:费用变更明细 + /// + public class FinaChargeStuBalanceService : RepositoryFactory + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" + t.Id, + t.StuNo, + t.FSYear, + t.ChargeItemCode, + t.ChargeItemName, + t.Standard, + t.DJAmount, + t.PaymentAmount, + t.QJAmount, + t.OldBalance, + t.ChangeAmount, + t.NowBalance, + t.ChangeDate, + t.ChangeType + "); + strSql.Append(" FROM FinaChargeStuBalance t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty()) + { + dp.Add("startTime", queryParam["StartTime"].ToDate(), DbType.DateTime); + dp.Add("endTime", queryParam["EndTime"].ToDate(), DbType.DateTime); + strSql.Append(" AND ( t.ChangeDate >= @startTime AND t.ChangeDate <= @endTime ) "); + } + if (!queryParam["StuNo"].IsEmpty()) + { + dp.Add("StuNo", "%" + queryParam["StuNo"].ToString() + "%", DbType.String); + strSql.Append(" AND t.StuNo Like @StuNo "); + } + if (!queryParam["FSYear"].IsEmpty()) + { + dp.Add("FSYear", "%" + queryParam["FSYear"].ToString() + "%", DbType.String); + strSql.Append(" AND t.FSYear Like @FSYear "); + } + if (!queryParam["ChargeItemCode"].IsEmpty()) + { + dp.Add("ChargeItemCode", "%" + queryParam["ChargeItemCode"].ToString() + "%", DbType.String); + strSql.Append(" AND t.ChargeItemCode Like @ChargeItemCode "); + } + if (!queryParam["ChangeType"].IsEmpty()) + { + dp.Add("ChangeType", "%" + queryParam["ChangeType"].ToString() + "%", DbType.String); + strSql.Append(" AND t.ChangeType Like @ChangeType "); + } + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取FinaChargeStuBalance表实体数据 + /// + /// 主键 + /// + public FinaChargeStuBalanceEntity GetFinaChargeStuBalanceEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t=>t.Id == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, FinaChargeStuBalanceEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + } +} From bb406f3ad87c126cde0e05539bbb81546aba9264 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Wed, 16 Aug 2023 22:03:00 +0800 Subject: [PATCH 22/50] =?UTF-8?q?=E6=89=8B=E6=9C=BAapi=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Learun.Application.WebApi.csproj | 6 +- .../FinaChargeStuYearApi.cs | 213 ++++++++++++ .../Learun.Application.WebApi/Web.config | 100 +++--- .../LearunApp-2.2.0/config.js | 10 +- .../ReceiveSendFeeManagement/PayFee/list.vue | 275 +++++++++++++++ .../PayFee/payInvioce.vue | 87 +++++ .../PayFee/single.vue | 319 ++++++++++++++++++ 7 files changed, 951 insertions(+), 59 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs create mode 100644 Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue create mode 100644 Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/payInvioce.vue create mode 100644 Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj index 64ec50975..d1b76cfc4 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj @@ -13,7 +13,7 @@ Properties Learun.Application.WebApi Learun.Application.WebApi - v4.6.1 + v4.6.2 true @@ -107,7 +107,6 @@ ..\packages\Oracle.ManagedDataAccess.EntityFramework.12.1.2400\lib\net45\Oracle.ManagedDataAccess.EntityFramework.dll - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.4\lib\net45\System.Net.Http.Formatting.dll @@ -121,7 +120,6 @@ - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll @@ -155,7 +153,6 @@ - ..\packages\ThoughtWorks.QRCode.1.1.0\lib\ThoughtWorks.QRCode.dll @@ -195,6 +192,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs new file mode 100644 index 000000000..0d670acc9 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs @@ -0,0 +1,213 @@ +using System; +using Learun.Application.Organization; +using Learun.Application.TwoDevelopment.EducationalAdministration; +using Learun.Application.TwoDevelopment.EvaluationTeach; +using Learun.Util; +using Nancy; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Web; +using System.Web.Mvc; +using Learun.Application.Base.SystemModule; +using Learun.Application.TwoDevelopment.Ask; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using Newtonsoft.Json; +using ThoughtWorks.QRCode.Codec; + +namespace Learun.Application.WebApi.Modules +{ + /// + /// 版 本 Learun-ADMS V7.0.0 数字化智慧校园 + /// Copyright (c) 2013-2018 北京泉江科技有限公司 + /// 创建人:数字化智慧校园-框架开发组 + /// 日 期:2018.01.04 + /// 描 述: + /// + public class FinaChargeStuYearApi : BaseApi + { + private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL(); + + public FinaChargeStuYearApi() + : base("/ReceiveSendFeeManagement/FinaChargeStuYearApi") + { + Get["/getpayfeelist"] = GetPayfeeList;// 获取缴费列表 + //Get["/getpayfeeinfo"] = GetPayfeeInfo;//获取缴费明细 + //Post["/generateqrcode"] = PayFeeQRCode;//生成缴费二维码 + //Get["/getinvoice"] = GetInvoice;//获取发票 + } + + //public Response GetInvoice(dynamic _) + //{ + // string keyValue = Request.Query["keyValue"]; + // var list = stuInfoFreshIBLL.GetStuEnrollFeeOrder(keyValue, false); + // return Success(list); + //} + + public Response GetPayfeeList(dynamic _) + { + ReqPageParam parameter = this.GetReqData(); + var data = finaChargeStuYearIBLL.GetPageList(parameter.pagination, parameter.queryJson); + var jsonData = new + { + rows = data, + total = parameter.pagination.total, + page = parameter.pagination.page, + records = parameter.pagination.records + }; + return Success(jsonData); + } + + //public Response GetPayfeeInfo(dynamic _) + //{ + // string keyValue = Request.Query["keyValue"]; + // var stuInfoBasic_PayFeeEntity = stuInfoBasic_PayFeeIBLL.GetStuInfoBasic_PayFeeEntity(keyValue); + // var StuInfoFreshData = stuInfoBasicIbll.GetStuInfoBasicEntityByStuNo(stuInfoBasic_PayFeeEntity.StuNo); + // //当前年度缴费记录 + // var FinaChargesStandardList = new List(); + // FinaChargesStandardList = finaChargesStandardIBLL.GetFinaChargesStandardListByYongYou(StuInfoFreshData.StuNo, stuInfoBasic_PayFeeEntity.PayYear.Value).ToList(); + // var PayFeeTotal = FinaChargesStandardList.Select(x => x.SJAmount).Sum(); + // var jsonData = new + // { + // StuInfoFreshData = StuInfoFreshData, + // FinaChargesStandardList = FinaChargesStandardList, + // PayFeeTotal = PayFeeTotal, + // YJAmount = FinaChargesStandardList.Sum(x => x.PayedMoney) + // }; + // return Success(jsonData); + //} + + + public class PayfeeRequest + { + public string strEntity { get; set; } + public string detailList { get; set; } + } + + /// + /// 生成缴费二维码 + /// + /// + //public Response PayFeeQRCode(dynamic _) + //{ + // string keyValue = Request.Query["keyValue"]; + // PayfeeRequest parameter = this.GetReqData(); + // StuInfoFreshEntity entity = parameter.strEntity.ToObject(); + // List list = parameter.detailList.ToObject>(); + // var model = stuInfoBasic_PayFeeIBLL.GetStuInfoBasic_PayFeeEntity(keyValue); + // var imgUrl = ""; + // Random ran = new Random(); + // string merchantid = "105000082201406";//商户号 + // string posid = "043724806";//商户柜台代码 + // string branchid = "510000000";//分行代码 + // string orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); + // string payment = entity.PayMoney.ToString(); + // string curcode = "01"; + // string txcode = "530550"; + // string remark1 = model.StuNo; + // string remark2 = model.PayYear.ToString(); + // string returntype = "3"; + // string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"); + // string pub32tr2 = "40d987faa793a0a27e7a86ef020111"; + // string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6"; + // string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid; + // tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1; + // tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout; + // MD5 md5 = MD5.Create(); + // string tmp1 = tmp; + // tmp += "&PUB=" + pub32tr2; + // byte[] buffer = Encoding.Default.GetBytes(tmp); + // byte[] md5Buffer = md5.ComputeHash(buffer); + // string strMd5 = ""; + // //hdnOrderId.Value = orderid; + // foreach (byte item in md5Buffer) + // { + // strMd5 += item.ToString("x2"); + // } + // string url = bankURL + "&" + tmp1 + "&MAC=" + strMd5; + // string reJson = HttpMethods.Post(url); + // LogEntity logEntity = new LogEntity(); + // logEntity.F_CategoryId = 121; + // logEntity.F_ExecuteResultJson = reJson; + // logEntity.WriteLog(); + // //HttpConnect conn = new HttpConnect(); + // //string reJson = conn.Post(url, ""); + // JsonBean MemberInfoList = JsonConvert.DeserializeObject(reJson); + // if (MemberInfoList.SUCCESS.Equals("true")) + // { + // string imgCode = HttpMethods.Post(MemberInfoList.PAYURL); + // logEntity.F_CategoryId = 121; + // logEntity.F_ExecuteResultJson = imgCode; + // logEntity.WriteLog(); + // MemberInfoList = JsonConvert.DeserializeObject(imgCode); + // if (MemberInfoList.SUCCESS.Equals("true")) + // { + // imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid); + // } + // } + + // if (!string.IsNullOrEmpty(imgUrl)) + // { + // model.orderid = orderid; + // stuInfoFreshIBLL.SaveFeeData(keyValue, model, list); + // } + + // var backimgUrl = new{ imgUrl }; + // return Success(backimgUrl); + //} + + public class JsonBean + { + /// + /// + /// + public string SUCCESS { get; set; } + public string PAYURL { get; set; } + public string QRURL { get; set; } + } + /// + /// 生成并保存二维码图片的方法 + /// + /// 输入的内容 + public string CreateQRImg(string str, string orderId) + { + string QRCodeFile = Config.GetValue("QRCodeFile"); + Random ran = new Random(); + Bitmap bt; + str = HttpUtility.UrlDecode(str); + string enCodeString = str; + //生成设置编码实例 + QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); + //设置二维码的规模,默认4 + qrCodeEncoder.QRCodeScale = 3; + //设置二维码的版本,默认7 + qrCodeEncoder.QRCodeVersion = 7; + //设置错误校验级别,默认中等 + qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; + //生成二维码图片 + bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); + //二维码图片的名称 + string filename = orderId; + if (!DirFileHelper.IsExistFile(QRCodeFile+"/Content/images/QRCode/")) + { + Directory.CreateDirectory(QRCodeFile + "/Content/images/QRCode/"); + } + var path = QRCodeFile + "/Content/images/QRCode/" + filename + ".jpg"; + //保存二维码图片在photos路径下 + try + { + bt.Save(path); + } + catch (Exception ex) + { + return ""; + } + + //图片控件要显示的二维码图片路径 + return "/Content/images/QRCode/" + filename + ".jpg"; + } + } +} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Web.config b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Web.config index 2666c219b..ff05da742 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Web.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Web.config @@ -1,4 +1,4 @@ - + -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    - - - - + + + + - - + + - + - + - + - - - + + + - - + + - - - - - + + + + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js index 599dabebe..18fcbc9e6 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js @@ -2,7 +2,7 @@ export default { // 登录页显示的公司名称 "company": "数字化智慧校园", // App 版本号 - "appVersion": "2.0", + "appVersion": "1.0.0", // 是否允许用户注册 "enableSignUp": true, //请求数据的接口地址;可以配置多个,开发环境下登录页会出现选择菜单供您选择 @@ -21,12 +21,12 @@ export default { // "http://192.168.2.98:8088/" // ], "apiHost": [ - // "http://localhost:31173/" + "http://localhost:31173/" // "http://123.57.209.16:31173/" - "http://112.45.152.8:8083/" + // "http://112.45.152.8:8083/" ], - // "webHost":"http://123.57.209.16:8081/", - "webHost":"http://112.45.152.8:8000/", + "webHost":"http://localhost:20472/", + // "webHost":"http://112.45.152.8:8000/", // 开发环境下自动填充登录账号密码,与接口地址一一对应,只在开发环境下显示 "devAccount": [ // 20201130230 21364200000400266 老师 420528196310072253 学生 420528200606205026 420528200507261428 diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue new file mode 100644 index 000000000..d3ea0a891 --- /dev/null +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/payInvioce.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/payInvioce.vue new file mode 100644 index 000000000..72fb2501f --- /dev/null +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/payInvioce.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue new file mode 100644 index 000000000..c7f473bec --- /dev/null +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue @@ -0,0 +1,319 @@ + + + + + + From db4ddb1570388c5e1ddc0c754d9b479a4d11f7dc Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Thu, 17 Aug 2023 17:03:22 +0800 Subject: [PATCH 23/50] =?UTF-8?q?=E6=89=8B=E6=9C=BA=E7=BC=B4=E8=B4=B9?= =?UTF-8?q?=E3=80=81=E6=9F=A5=E7=9C=8B=E5=8F=91=E7=A5=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app.config | 4 + .../FinaChargeStuYearController.cs | 14 + .../FinaChargeStuYear/IndexForStudent.cshtml | 1 + .../FinaChargeStuYear/IndexForStudent.js | 29 + .../FinaChargeStuYear/InvoiceForm.cshtml | 15 + .../Views/FinaChargeStuYear/InvoiceForm.js | 53 + .../Learun.Application.Web.csproj | 2 + .../FinaChargeStuYearApi.cs | 187 +- .../Learun.Application.WebApi/Web.config | 108 +- .../Learun.Application.Website/Web.config | 8 + .../App.config | 4 + .../Learun.Application.AppMagager/app.config | 4 + .../Learun.Application.Base/App.config | 4 + .../Learun.Application.Excel/app.config | 4 + .../Learun.Application.Extention/app.config | 4 + .../Learun.Application.Form/app.config | 4 + .../Learun.Application.Language/app.config | 16 + .../Learun.Application.Mapping/App.config | 4 + .../Learun.Application.Message/app.config | 4 + .../Learun.Application.OA/app.config | 16 + .../Learun.Application.Report/app.config | 4 + .../FinaChargeStuYear/FinaChargeStuYearBLL.cs | 20 + .../FinaChargeStuYearEntity.cs | 2 + .../FinaChargeStuYearIBLL.cs | 3 + .../FinaChargeStuYearService.cs | 23 +- .../app.config | 4 + .../Learun.Application.WorkFlow/app.config | 4 + .../Learun.Cache.Factory/app.config | 4 + .../Learun.Cache.Redis.csproj | 4 +- .../Learun.Cache.Redis/app.config | 4 + .../Learun.Cache.Redis/packages.config | 2 +- .../Learun.Util/Learun.Util.Operat/app.config | 4 + .../LearunApp-2.2.0/config.js | 14 - .../LearunApp-2.2.0/pages.json | 19 + .../StuInfoBasic_PayFee/PayFee/payInvioce.vue | 2 +- .../ReceiveSendFeeManagement/PayFee/list.vue | 8 +- .../PayFee/single.vue | 58 +- .../App.config | 4 + .../.signature.p7s | Bin 9482 -> 0 bytes .../System.Numerics.Vectors.4.4.0/LICENSE.TXT | 23 - .../System.Numerics.Vectors.4.4.0.nupkg | Bin 337043 -> 0 bytes .../THIRD-PARTY-NOTICES.TXT | 226 -- .../lib/MonoAndroid10/_._ | 0 .../lib/MonoTouch10/_._ | 0 .../lib/net46/System.Numerics.Vectors.dll | Bin 115936 -> 0 bytes .../lib/net46/System.Numerics.Vectors.xml | 2597 ----------------- .../lib/netcoreapp2.0/_._ | 0 .../System.Numerics.Vectors.dll | Bin 161152 -> 0 bytes .../System.Numerics.Vectors.xml | 2597 ----------------- .../System.Numerics.Vectors.dll | Bin 163712 -> 0 bytes .../System.Numerics.Vectors.xml | 2597 ----------------- .../System.Numerics.Vectors.dll | Bin 161152 -> 0 bytes .../System.Numerics.Vectors.xml | 2597 ----------------- .../lib/xamarinios10/_._ | 0 .../lib/xamarinmac20/_._ | 0 .../lib/xamarintvos10/_._ | 0 .../lib/xamarinwatchos10/_._ | 0 .../ref/MonoAndroid10/_._ | 0 .../ref/MonoTouch10/_._ | 0 .../ref/net46/System.Numerics.Vectors.dll | Bin 29568 -> 0 bytes .../ref/net46/System.Numerics.Vectors.xml | 2597 ----------------- .../ref/netcoreapp2.0/_._ | 0 .../System.Numerics.Vectors.dll | Bin 38272 -> 0 bytes .../System.Numerics.Vectors.xml | 2597 ----------------- .../System.Numerics.Vectors.dll | Bin 38272 -> 0 bytes .../System.Numerics.Vectors.xml | 2597 ----------------- .../ref/xamarinios10/_._ | 0 .../ref/xamarinmac20/_._ | 0 .../ref/xamarintvos10/_._ | 0 .../ref/xamarinwatchos10/_._ | 0 .../useSharedDesignerContext.txt | 0 .../System.Numerics.Vectors.4.4.0/version.txt | 1 - 72 files changed, 477 insertions(+), 18620 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.js delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/.signature.p7s delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/LICENSE.TXT delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/System.Numerics.Vectors.4.4.0.nupkg delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/THIRD-PARTY-NOTICES.TXT delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/MonoAndroid10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/MonoTouch10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/net46/System.Numerics.Vectors.dll delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/net46/System.Numerics.Vectors.xml delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netcoreapp2.0/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard1.0/System.Numerics.Vectors.dll delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard1.0/System.Numerics.Vectors.xml delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard2.0/System.Numerics.Vectors.dll delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard2.0/System.Numerics.Vectors.xml delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.dll delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinios10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinmac20/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarintvos10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinwatchos10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/MonoAndroid10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/MonoTouch10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/net46/System.Numerics.Vectors.dll delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/net46/System.Numerics.Vectors.xml delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netcoreapp2.0/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netstandard1.0/System.Numerics.Vectors.dll delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netstandard1.0/System.Numerics.Vectors.xml delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netstandard2.0/System.Numerics.Vectors.dll delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netstandard2.0/System.Numerics.Vectors.xml delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinios10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinmac20/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarintvos10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinwatchos10/_._ delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/useSharedDesignerContext.txt delete mode 100644 Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/version.txt diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Organization/app.config b/Learun.Framework.Ultimate V7/Learun.Application.Organization/app.config index 4ef539ff8..d036c29f6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Organization/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.Organization/app.config @@ -18,6 +18,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs index 5ffd41374..1392cff05 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -55,6 +55,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers return View(); } + [HttpGet] + public ActionResult InvoiceForm() + { + return View(); + } + [HttpGet] public ActionResult PayFeeForm() { @@ -114,6 +120,14 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers return Success(jsonData); } + [HttpGet] + [AjaxOnly] + public ActionResult GetInvoiceRecord(string keyValue) + { + var invoiceRecord = finaChargeStuYearIBLL.GetStuInvoice(keyValue); + return Success(invoiceRecord); + } + [HttpGet] [AjaxOnly] public ActionResult GetPayFeeDetail(string keyValue) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml index a87076360..44fbcd9ee 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml @@ -21,6 +21,7 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js index c6fabface..903128801 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js @@ -51,6 +51,35 @@ var bootstrap = function ($, learun) { }); } }); + //查看发票 + $('#lr_viewinvoice').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYId'); + var selectedRow = $('#gridtable').jfGridGet('rowdata'); + if (learun.checkrow(keyValue)) { + if (selectedRow.PayFeeStatus == "1" || selectedRow.PayFeeStatus == "4") { + //查询发票链接 + learun.httpAsyncGet( + top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetInvoiceRecord?keyValue=' + keyValue, function (res) { + if (!!res.data && res.data.length > 0) { + learun.layerForm({ + id: 'form_invoice', + title: '查看发票', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/InvoiceForm?keyValue=' + keyValue, + width: 1000, + height: 800, + btn: null + }); + } else { + learun.alert.warning("当前学生尚未开具发票,请缴费成功后耐心等待!"); + return; + } + }); + } else { + learun.alert.warning("当前学生尚未开票,请缴费成功后耐心等待!"); + return; + } + } + }); }, // 初始化列表 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.cshtml new file mode 100644 index 000000000..4b098158c --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.cshtml @@ -0,0 +1,15 @@ +@{ + ViewBag.Title = "新生缴费管理"; + Layout = "~/Views/Shared/_Form.cshtml"; +} + +
    + +
    +
    +
    +@Html.AppendJsFile("/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/InvoiceForm.js") \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.js new file mode 100644 index 000000000..493457ff9 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.js @@ -0,0 +1,53 @@ +/* * 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园(http://www.learun.cn) + * Copyright (c) 2013-2018 北京泉江科技有限公司 + * 创建人:超级管理员 + * 日 期:2019-08-08 17:21 + * 描 述:新生缴费管理 + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#lr_form_tabs').lrFormTab(); + //$('#lr_form_tabs ul li').eq(0).trigger('click'); + + //取消缴费 + $('#cancelPayFee').click(function () { + learun.layerClose(window.name); + }); + }, + initData: function () { + if (!!keyValue) { + learun.httpAsyncGet( + top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetInvoiceRecord?keyValue=' + keyValue, function (res) { + if (!!res.data) { + var ulHtml = ""; + var contentHtml = ""; + for (var i = 0; i < res.data.length; i++) { + ulHtml += '
  • 票据' + (i + 1) + '
  • '; + contentHtml += '
    '; + contentHtml += ''; + contentHtml += '
    '; + } + $('#tabul').html(ulHtml); + $('#lr_tab_content').html(contentHtml); + $('#lr_form_tabs ul li').eq(0).trigger('click'); + } else { + learun.alert.warning("当前新生尚未开具发票,请缴费成功后耐心等待!"); + return; + } + }); + } + } + }; + + + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index d8e6d6b5a..6a7ab38e9 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -1636,6 +1636,7 @@ + @@ -7986,6 +7987,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs index 0d670acc9..be2951fa7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs @@ -30,22 +30,23 @@ namespace Learun.Application.WebApi.Modules public class FinaChargeStuYearApi : BaseApi { private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL(); + private FinaChargeStuOrderIBLL finaChargeStuOrderIbll = new FinaChargeStuOrderBLL(); public FinaChargeStuYearApi() : base("/ReceiveSendFeeManagement/FinaChargeStuYearApi") { Get["/getpayfeelist"] = GetPayfeeList;// 获取缴费列表 - //Get["/getpayfeeinfo"] = GetPayfeeInfo;//获取缴费明细 - //Post["/generateqrcode"] = PayFeeQRCode;//生成缴费二维码 - //Get["/getinvoice"] = GetInvoice;//获取发票 + Get["/getpayfeeinfo"] = GetPayfeeInfo;//获取缴费明细 + Post["/generateqrcode"] = PayFeeQRCode;//生成缴费二维码 + Get["/getinvoice"] = GetInvoice;//获取发票 + } + + public Response GetInvoice(dynamic _) + { + string keyValue = Request.Query["keyValue"]; + var list = finaChargeStuYearIBLL.GetStuInvoice(keyValue); + return Success(list); } - - //public Response GetInvoice(dynamic _) - //{ - // string keyValue = Request.Query["keyValue"]; - // var list = stuInfoFreshIBLL.GetStuEnrollFeeOrder(keyValue, false); - // return Success(list); - //} public Response GetPayfeeList(dynamic _) { @@ -61,24 +62,26 @@ namespace Learun.Application.WebApi.Modules return Success(jsonData); } - //public Response GetPayfeeInfo(dynamic _) - //{ - // string keyValue = Request.Query["keyValue"]; - // var stuInfoBasic_PayFeeEntity = stuInfoBasic_PayFeeIBLL.GetStuInfoBasic_PayFeeEntity(keyValue); - // var StuInfoFreshData = stuInfoBasicIbll.GetStuInfoBasicEntityByStuNo(stuInfoBasic_PayFeeEntity.StuNo); - // //当前年度缴费记录 - // var FinaChargesStandardList = new List(); - // FinaChargesStandardList = finaChargesStandardIBLL.GetFinaChargesStandardListByYongYou(StuInfoFreshData.StuNo, stuInfoBasic_PayFeeEntity.PayYear.Value).ToList(); - // var PayFeeTotal = FinaChargesStandardList.Select(x => x.SJAmount).Sum(); - // var jsonData = new - // { - // StuInfoFreshData = StuInfoFreshData, - // FinaChargesStandardList = FinaChargesStandardList, - // PayFeeTotal = PayFeeTotal, - // YJAmount = FinaChargesStandardList.Sum(x => x.PayedMoney) - // }; - // return Success(jsonData); - //} + public Response GetPayfeeInfo(dynamic _) + { + string keyValue = Request.Query["keyValue"]; + //学生基础信息 + var FinaChargeStuYearData = finaChargeStuYearIBLL.GetFinaChargeStuYearEntity(keyValue); + //学生缴费明细 + var FinaChargeStuItemList = finaChargeStuYearIBLL.GetFinaChargeStuItemList(keyValue); + foreach (var finaChargeStuYearItemEntity in FinaChargeStuItemList) + { + finaChargeStuYearItemEntity.FSBlance = Math.Abs(finaChargeStuYearItemEntity.FSBlance.Value); + } + var jsonData = new + { + StuInfoFreshData = FinaChargeStuYearData, + FinaChargesStandardList = FinaChargeStuItemList, + PayFeeTotal = Math.Abs(FinaChargeStuYearData.FSBlance.Value), + SJAmount = FinaChargeStuYearData.SJAmount + }; + return Success(jsonData); + } public class PayfeeRequest @@ -91,73 +94,71 @@ namespace Learun.Application.WebApi.Modules /// 生成缴费二维码 ///
    /// - //public Response PayFeeQRCode(dynamic _) - //{ - // string keyValue = Request.Query["keyValue"]; - // PayfeeRequest parameter = this.GetReqData(); - // StuInfoFreshEntity entity = parameter.strEntity.ToObject(); - // List list = parameter.detailList.ToObject>(); - // var model = stuInfoBasic_PayFeeIBLL.GetStuInfoBasic_PayFeeEntity(keyValue); - // var imgUrl = ""; - // Random ran = new Random(); - // string merchantid = "105000082201406";//商户号 - // string posid = "043724806";//商户柜台代码 - // string branchid = "510000000";//分行代码 - // string orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); - // string payment = entity.PayMoney.ToString(); - // string curcode = "01"; - // string txcode = "530550"; - // string remark1 = model.StuNo; - // string remark2 = model.PayYear.ToString(); - // string returntype = "3"; - // string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"); - // string pub32tr2 = "40d987faa793a0a27e7a86ef020111"; - // string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6"; - // string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid; - // tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1; - // tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout; - // MD5 md5 = MD5.Create(); - // string tmp1 = tmp; - // tmp += "&PUB=" + pub32tr2; - // byte[] buffer = Encoding.Default.GetBytes(tmp); - // byte[] md5Buffer = md5.ComputeHash(buffer); - // string strMd5 = ""; - // //hdnOrderId.Value = orderid; - // foreach (byte item in md5Buffer) - // { - // strMd5 += item.ToString("x2"); - // } - // string url = bankURL + "&" + tmp1 + "&MAC=" + strMd5; - // string reJson = HttpMethods.Post(url); - // LogEntity logEntity = new LogEntity(); - // logEntity.F_CategoryId = 121; - // logEntity.F_ExecuteResultJson = reJson; - // logEntity.WriteLog(); - // //HttpConnect conn = new HttpConnect(); - // //string reJson = conn.Post(url, ""); - // JsonBean MemberInfoList = JsonConvert.DeserializeObject(reJson); - // if (MemberInfoList.SUCCESS.Equals("true")) - // { - // string imgCode = HttpMethods.Post(MemberInfoList.PAYURL); - // logEntity.F_CategoryId = 121; - // logEntity.F_ExecuteResultJson = imgCode; - // logEntity.WriteLog(); - // MemberInfoList = JsonConvert.DeserializeObject(imgCode); - // if (MemberInfoList.SUCCESS.Equals("true")) - // { - // imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid); - // } - // } + public Response PayFeeQRCode(dynamic _) + { + PayfeeRequest parameter = this.GetReqData(); + FinaChargeStuYearEntity entity = parameter.strEntity.ToObject(); + List list = parameter.detailList.ToObject>(); + var imgUrl = ""; + Random ran = new Random(); + string merchantid = "105000082201406";//商户号 + string posid = "043724806";//商户柜台代码 + string branchid = "510000000";//分行代码 + string orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); + string payment = entity.PayMoney.ToString(); + string curcode = "01"; + string txcode = "530550"; + string remark1 = entity.StuNo; + string remark2 = entity.FSYear.ToString(); + string returntype = "3"; + string timeout = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"); + string pub32tr2 = "40d987faa793a0a27e7a86ef020111"; + string bankURL = "https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain?CCB_IBSVersion=V6"; + string tmp = "MERCHANTID=" + merchantid + "&POSID=" + posid + "&BRANCHID=" + branchid + "&ORDERID=" + orderid; + tmp += "&PAYMENT=" + payment + "&CURCODE=" + curcode + "&TXCODE=" + txcode + "&REMARK1=" + remark1; + tmp += "&REMARK2=" + remark2 + "&RETURNTYPE=" + returntype + "&TIMEOUT=" + timeout; + MD5 md5 = MD5.Create(); + string tmp1 = tmp; + tmp += "&PUB=" + pub32tr2; + byte[] buffer = Encoding.Default.GetBytes(tmp); + byte[] md5Buffer = md5.ComputeHash(buffer); + string strMd5 = ""; + //hdnOrderId.Value = orderid; + foreach (byte item in md5Buffer) + { + strMd5 += item.ToString("x2"); + } + String url = bankURL + "&" + tmp1 + "&MAC=" + strMd5; + string reJson = HttpMethods.Post(url); + LogEntity logEntity = new LogEntity(); + logEntity.F_CategoryId = 121; + logEntity.F_ExecuteResultJson = reJson; + logEntity.WriteLog(); + //HttpConnect conn = new HttpConnect(); + //string reJson = conn.Post(url, ""); + JsonBean MemberInfoList = JsonConvert.DeserializeObject(reJson); + if (MemberInfoList.SUCCESS.Equals("true")) + { + string imgCode = HttpMethods.Post(MemberInfoList.PAYURL); + logEntity.F_CategoryId = 121; + logEntity.F_ExecuteResultJson = imgCode; + logEntity.WriteLog(); + MemberInfoList = JsonConvert.DeserializeObject(imgCode); + if (MemberInfoList.SUCCESS.Equals("true")) + { + imgUrl = CreateQRImg(MemberInfoList.QRURL, orderid); + } + } - // if (!string.IsNullOrEmpty(imgUrl)) - // { - // model.orderid = orderid; - // stuInfoFreshIBLL.SaveFeeData(keyValue, model, list); - // } + if (!string.IsNullOrEmpty(imgUrl)) + { + entity.orderid = orderid; + finaChargeStuOrderIbll.SaveOrderData(entity, list); + } - // var backimgUrl = new{ imgUrl }; - // return Success(backimgUrl); - //} + var backimgUrl = new { imgUrl }; + return Success(backimgUrl); + } public class JsonBean { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Web.config b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Web.config index ff05da742..2c44b0280 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Web.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Web.config @@ -1,4 +1,4 @@ - + -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    - - - - + + + + - - + + - + - + - + - - - + + + - - + + - - - - - + + + + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + - + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Website/Web.config b/Learun.Framework.Ultimate V7/Learun.Application.Website/Web.config index 77bf6316c..0bf986120 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Website/Web.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.Website/Web.config @@ -81,6 +81,14 @@ + + + + + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WorkFlowServer/App.config b/Learun.Framework.Ultimate V7/Learun.Application.WorkFlowServer/App.config index da3352c4d..5a877a2b0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WorkFlowServer/App.config +++ b/Learun.Framework.Ultimate V7/Learun.Application.WorkFlowServer/App.config @@ -226,6 +226,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.AppMagager/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.AppMagager/app.config index 899e22885..1ae11ee2e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.AppMagager/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.AppMagager/app.config @@ -18,6 +18,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base/App.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base/App.config index 80cfc1d09..4d8193104 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base/App.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Base/App.config @@ -32,6 +32,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Excel/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Excel/app.config index 899e22885..1ae11ee2e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Excel/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Excel/app.config @@ -18,6 +18,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Extention/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Extention/app.config index 8b47ef9f9..28f0aeee3 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Extention/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Extention/app.config @@ -18,6 +18,10 @@ + + + + \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/app.config index 899e22885..1ae11ee2e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Form/app.config @@ -18,6 +18,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Language/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Language/app.config index 739e9c9c8..12cf3982d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Language/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Language/app.config @@ -6,6 +6,22 @@ + + + + + + + + + + + + + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/App.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/App.config index 02f4da518..0c82929bb 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/App.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/App.config @@ -36,6 +36,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Message/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Message/app.config index 35bb040b3..bbe5ad59b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Message/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Message/app.config @@ -22,6 +22,10 @@ + + + + \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.OA/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.OA/app.config index 739e9c9c8..12cf3982d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.OA/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.OA/app.config @@ -6,6 +6,22 @@ + + + + + + + + + + + + + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Report/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Report/app.config index 899e22885..1ae11ee2e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Report/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Report/app.config @@ -18,6 +18,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs index 9a6098b40..084736550 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearBLL.cs @@ -2,6 +2,7 @@ using System; using System.Data; using System.Collections.Generic; +using Learun.Application.TwoDevelopment.EducationalAdministration; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { @@ -192,6 +193,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public IEnumerable GetStuInvoice(string keyValue) + { + try + { + return finaChargeStuYearService.GetStuInvoice(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs index c620b5b70..5f2414224 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs @@ -82,6 +82,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [NotMapped] public string StuName { get; set; } [NotMapped] + public bool? GenderNo { get; set; } + [NotMapped] public decimal? PayMoney { get; set; } [NotMapped] public string orderid { get; set; } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs index 7a25da239..d672ee0c8 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearIBLL.cs @@ -1,6 +1,7 @@ using Learun.Util; using System.Data; using System.Collections.Generic; +using Learun.Application.TwoDevelopment.EducationalAdministration; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { @@ -52,5 +53,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// /// IEnumerable GetFinaChargeStuItemList(string keyValue); + + IEnumerable GetStuInvoice(string keyValue); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 419174c7d..abe5585a6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; +using Learun.Application.TwoDevelopment.EducationalAdministration; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { @@ -31,7 +32,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT t.*,b.DeptNo,b.MajorNo,b.ClassNo,b.Grade,b.IdentityCardNo,b.StuName "); + strSql.Append("SELECT t.*,b.DeptNo,b.MajorNo,b.ClassNo,b.Grade,b.IdentityCardNo,b.StuName,b.GenderNo "); strSql.Append(" FROM FinaChargeStuYear t left join FinaChargeStudent b on t.StuNo=b.StuNo "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); @@ -334,5 +335,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } + + public IEnumerable GetStuInvoice(string keyValue) + { + try + { + var stufreshinfo = GetFinaChargeStuYearEntity(keyValue); + return BaseRepository("CollegeMIS").FindList(a => a.StuNo == stufreshinfo.StuNo && !string.IsNullOrEmpty(a.billUrl) && a.YearNo == stufreshinfo.FSYear); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/app.config index 899e22885..1ae11ee2e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/app.config @@ -18,6 +18,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.WorkFlow/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.WorkFlow/app.config index 8a35a1af6..c25fda5b8 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.WorkFlow/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.WorkFlow/app.config @@ -22,6 +22,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Factory/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Factory/app.config index 5faa09895..447cc2fd5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Factory/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Factory/app.config @@ -14,6 +14,10 @@ + + + + \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/Learun.Cache.Redis.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/Learun.Cache.Redis.csproj index 891deb79d..b2ca7b4fe 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/Learun.Cache.Redis.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/Learun.Cache.Redis.csproj @@ -84,8 +84,8 @@ ..\..\..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll - - ..\..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll + + ..\..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll ..\..\..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/app.config index 5faa09895..447cc2fd5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/app.config @@ -14,6 +14,10 @@ + + + + \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/packages.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/packages.config index b7c0b0461..67f87fb44 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/packages.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Cache/Learun.Cache.Redis/packages.config @@ -9,7 +9,7 @@ - + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util.Operat/app.config b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util.Operat/app.config index 4ef539ff8..d036c29f6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util.Operat/app.config +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util.Operat/app.config @@ -18,6 +18,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js index 18fcbc9e6..fa1181bb7 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js @@ -6,20 +6,6 @@ export default { // 是否允许用户注册 "enableSignUp": true, //请求数据的接口地址;可以配置多个,开发环境下登录页会出现选择菜单供您选择 - // "apiHost": [ - // "http://123.57.209.16:31173/" - // ], - // "apiHost": [ - // "http://123.57.209.16:31174/learun/adms" - // "https://wx.qjkjedu.com/learun/adms" - // ], - // "apiHost": [ - // "http://localhost:8088/" - // "http://192.168.2.202:8083/learun/adms" - // ], - // "apiHost": [ - // "http://192.168.2.98:8088/" - // ], "apiHost": [ "http://localhost:31173/" // "http://123.57.209.16:31173/" diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages.json b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages.json index ee3d4255d..9c1596b48 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages.json +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages.json @@ -868,6 +868,25 @@ "navigationBarTitleText": "学生签到" } }, + //在线缴费2.0 + { + "path": "pages/ReceiveSendFeeManagement/PayFee/list", + "style": { + "navigationBarTitleText": "在线缴费" + } + }, + { + "path": "pages/ReceiveSendFeeManagement/PayFee/single", + "style": { + "navigationBarTitleText": "缴费详情" + } + }, + { + "path": "pages/ReceiveSendFeeManagement/PayFee/payInvioce", + "style": { + "navigationBarTitleText": "查看发票" + } + }, //教学工作量 { "path": "pages/TeacherWorkload/list", diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/EducationalAdministration/StuInfoBasic_PayFee/PayFee/payInvioce.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/EducationalAdministration/StuInfoBasic_PayFee/PayFee/payInvioce.vue index 72fb2501f..564f0d833 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/EducationalAdministration/StuInfoBasic_PayFee/PayFee/payInvioce.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/EducationalAdministration/StuInfoBasic_PayFee/PayFee/payInvioce.vue @@ -36,7 +36,7 @@ }, init(){ this.LOADING() - this.HTTP_GET("/learun/payfee/getinvoice?keyValue="+this.keyValue).then((success)=>{ + this.HTTP_GET("/ReceiveSendFeeManagement/FinaChargeStuYearApi/getinvoice?keyValue="+this.keyValue).then((success)=>{ this.HIDE_LOADING() if(!success)return if(!success.length){ diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue index d3ea0a891..c9c95af29 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue @@ -3,13 +3,13 @@ - {{ tips }} + {{ tips }} - + 学号: {{ item.StuNo }} @@ -177,8 +177,8 @@ export default { this.defaultQueryData = this.COPY(this.queryData); this.ready = true; }, - tapLi({Id}) { - this.NAV_TO('./single', {Id}, true); + tapLi({FSYId}) { + this.NAV_TO('./single', {FSYId}, true); }, // 拉取列表 async fetchList(isConcat=true) { diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue index c7f473bec..0032b07f6 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue @@ -4,6 +4,7 @@ + - + @@ -95,15 +96,14 @@ export default{ StuInfoFreshData:{}, PayFeeTotal:'', payfeetotal:'', - YJAmount:'', + SJAmount:'', FinaChargesStandardList:[], item:{ title:'缴费信息', fieldsData:[ {type:'label',field:'ChargeItemName',name:'缴费项目'}, {type:'label',field:'Standard',name:'收费标准'}, - // {type:'label',field:'copy_SJAmount',name:'本次应缴'}, - {type:'input',field:'SJAmount',name:'本次实缴',edit:true}, + {type:'input',field:'FSBlance',name:'本次实缴',edit:true}, ] }, qrCodeUrl:'', @@ -140,17 +140,17 @@ export default{ () => {} ]); - this.HTTP_GET('/learun/payfee/getpayfeeinfo?keyValue='+this.pageInfo.Id, null,'加载数据时出错').then(res => { + this.HTTP_GET('/ReceiveSendFeeManagement/FinaChargeStuYearApi/getpayfeeinfo?keyValue='+this.pageInfo.FSYId, null,'加载数据时出错').then(res => { this.HIDE_LOADING(); if(!res){ return } if (res['FinaChargesStandardList'].length == 0) { - this.TOAST("未查询到该学生收费标准!请先维护收费标准。"); + this.TOAST("未查询到该学生收费标准!请先维护收费明细。"); return; } this.FinaChargesStandardList = res.FinaChargesStandardList.map((item)=>{ - item.copy_SJAmount = item.SJAmount + item.copy_SJAmount = item.FSBlance return item }) this.StuInfoFreshData = res.StuInfoFreshData @@ -162,7 +162,7 @@ export default{ this.changeIpnutEdit(false) this.TOAST("缴费已完成") } - this.YJAmount = res.YJAmount + this.SJAmount = res.SJAmount this.ready = true }) }, @@ -207,24 +207,31 @@ export default{ }, tapBtn(action) { if(action == "getQRCode"){ - let list = [],detail="",isNull=false; + let list = [],isNull=false,tooMuch=false; this.FinaChargesStandardList.forEach(item=>{ let value = 0 - if(/^-?\d+(,\d{3})*(\.\d{1,2})?$/.test(item.SJAmount)&&Number(item.SJAmount)<=Number(item.copy_SJAmount)&&Number(item.SJAmount)>=0){ - value = Number(item.SJAmount) + if(/^-?\d+(,\d{3})*(\.\d{1,2})?$/.test(item.FSBlance)&&Number(item.FSBlance)>=0){ + value = Number(item.FSBlance) }else{ isNull=true } - detail += item.ChargeItemCode + "!" + value + '&'; + if(Number(item.FSBlance)>Number(item.copy_SJAmount)) + { + tooMuch=true; + + } let entity = { - Id: this.GUID(), ChargeItemName: item.ChargeItemName.replace(/^\s*|\s*$/g, ""), - ChargeItemID: item.ChargeItemCode, + ChargeItemCode: item.ChargeItemCode, YJAmount: item.Standard, SJAmount: value } list.push(entity) }) + if (tooMuch) { + this.TOAST("[本次实缴]金额不能超过待缴金额!"); + return; + } if (isNull) { this.TOAST("[本次实缴]金额为空或错误!最多两位小数。"); return; @@ -233,15 +240,16 @@ export default{ this.TOAST("[实缴合计]不能为0!缴费失败。"); return; } - detail = detail.substring(0, detail.length - 1); var param = {}; - param.PayFeeDetail = detail; + param.FSYId=this.pageInfo.FSYId; + param.StuNo=this.StuInfoFreshData.StuNo; + param.FSYear=this.StuInfoFreshData.FSYear; param.PayMoney = this.payfeetotal; let postData = { strEntity: JSON.stringify(param), detailList: JSON.stringify(list) } console.log({ strEntity: param, detailList: list }); this.changeIpnutEdit(false) this.LOADING('正在生成付款信息请稍等…'); - this.HTTP_POST('/learun/payfee/generateqrcode?keyValue=' + this.pageInfo.Id, postData ).then((res)=> { + this.HTTP_POST('/ReceiveSendFeeManagement/FinaChargeStuYearApi/generateqrcode', postData ).then((res)=> { this.HIDE_LOADING(); if(!res){ return @@ -253,26 +261,26 @@ export default{ this.StuInfoFreshData = {} this.PayFeeTotal = '' this.payfeetotal = '' - this.YJAmount = '' + this.SJAmountReceiveSendFeeManagement = '' this.FinaChargesStandardList = [] this.init() } }, lookInvioce(){ - this.NAV_TO("./payInvioce?keyValue="+this.pageInfo.Id) + this.NAV_TO("./payInvioce?keyValue="+this.pageInfo.FSYId) }, getpayfeetotal(){ let value = 0 this.FinaChargesStandardList.map(item=>{ - let strValue = item.SJAmount.toString() + let strValue = item.FSBlance.toString() // if(strValue.split(".")[1]&&strValue.split(".")[1].length>2){ // item.SJAmount = strValue.match(/^\d+(?:\.\d{0,2})?/) // } - if(/^-?\d+(,\d{3})*(\.\d{1,2})?$/.test(item.SJAmount)){ - if(strValue.indexOf(".") == -1&&Number(item.SJAmount)%1 === 0){ - item.SJAmount = Number(item.SJAmount) + if(/^-?\d+(,\d{3})*(\.\d{1,2})?$/.test(item.FSBlance)){ + if(strValue.indexOf(".") == -1&&Number(item.FSBlance)%1 === 0){ + item.FSBlance = Number(item.FSBlance) } - value = this.numSub(value,Number(item.SJAmount)) + value = this.numSub(value,Number(item.FSBlance)) // value += Number(item.SJAmount) } }) @@ -281,7 +289,7 @@ export default{ changeIpnutEdit(edit){ let item = JSON.parse(JSON.stringify(this.item)) item.fieldsData = item.fieldsData.map((item1)=>{ - if(["SJAmount"].includes(item1.field)){ + if(["FSBlance"].includes(item1.field)){ item1.edit = edit } return item1 diff --git a/Learun.Framework.Ultimate V7/Quanjiang.DigitalScholl.DataSync/App.config b/Learun.Framework.Ultimate V7/Quanjiang.DigitalScholl.DataSync/App.config index 3378e7f0d..aa6aea14d 100644 --- a/Learun.Framework.Ultimate V7/Quanjiang.DigitalScholl.DataSync/App.config +++ b/Learun.Framework.Ultimate V7/Quanjiang.DigitalScholl.DataSync/App.config @@ -47,6 +47,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/.signature.p7s b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/.signature.p7s deleted file mode 100644 index 804a5d4539d8577faf287850ea9269ebb94cd3ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9482 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
      ) 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ėFn= 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

      % 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

      #Jc9;Y*1*q^r+Daq!l%xh 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 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/THIRD-PARTY-NOTICES.TXT b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/THIRD-PARTY-NOTICES.TXT deleted file mode 100644 index 06055ff03..000000000 --- a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/THIRD-PARTY-NOTICES.TXT +++ /dev/null @@ -1,226 +0,0 @@ -.NET Core uses third-party libraries or other resources that may be -distributed under licenses different than the .NET Core software. - -In the event that we accidentally failed to list a required notice, please -bring it to our attention. Post an issue or email us: - - dotnet@microsoft.com - -The attached notices are provided for information only. - -License notice for Slicing-by-8 -------------------------------- - -http://sourceforge.net/projects/slicing-by-8/ - -Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved - - -This software program is licensed subject to the BSD License, available at -http://www.opensource.org/licenses/bsd-license.html. - - -License notice for Unicode data -------------------------------- - -http://www.unicode.org/copyright.html#License - -Copyright © 1991-2017 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode software and any associated documentation -(the "Software") to deal in the Data Files or Software -without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, and/or sell copies of -the Data Files or Software, and to permit persons to whom the Data Files -or Software are furnished to do so, provided that either -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, or -(b) this copyright and permission notice appear in associated -Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS. -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS -NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL -DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THE DATA FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder -shall not be used in advertising or otherwise to promote the sale, -use or other dealings in these Data Files or Software without prior -written authorization of the copyright holder. - -License notice for Zlib ------------------------ - -https://github.com/madler/zlib -http://zlib.net/zlib_license.html - -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.11, January 15th, 2017 - - Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - -*/ - -License notice for Mono -------------------------------- - -http://www.mono-project.com/docs/about-mono/ - -Copyright (c) .NET Foundation Contributors - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the Software), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -License notice for International Organization for Standardization ------------------------------------------------------------------ - -Portions (C) International Organization for Standardization 1986: - Permission to copy in any form is granted for use with - conforming SGML systems and applications as defined in - ISO 8879, provided this notice is included in all copies. - -License notice for Intel ------------------------- - -"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -License notice for Xamarin and Novell -------------------------------------- - -Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -Copyright (c) 2011 Novell, Inc (http://www.novell.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -Third party notice for W3C --------------------------- - -"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE -Status: This license takes effect 13 May, 2015. -This work is being provided by the copyright holders under the following license. -License -By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. -Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: -The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. -Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. -Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." -Disclaimers -THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. -COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. -The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders." - -License notice for Bit Twiddling Hacks --------------------------------------- - -Bit Twiddling Hacks - -By Sean Eron Anderson -seander@cs.stanford.edu - -Individually, the code snippets here are in the public domain (unless otherwise -noted) — feel free to use them however you please. The aggregate collection and -descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are -distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and -without even the implied warranty of merchantability or fitness for a particular -purpose. diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/MonoAndroid10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/MonoAndroid10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/MonoTouch10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/MonoTouch10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/net46/System.Numerics.Vectors.dll b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/net46/System.Numerics.Vectors.dll deleted file mode 100644 index ce46d5be85cdee1a3c0ef5bc22c8e1772d0d0d98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115936 zcmeFadw^Y4c{jYyWzKDG*>jS~Z6=vO5>Apy$UPY@k|7Bp+|31M5)_7HNCt+PFf&0w zV?(uClu8k#YH39)V%1u!yv189D#hxH76`T2j~An+-rCQ5`>B1^_xF3&+H0@1&&fH5 z48!;R@u9QUbNQ`jt-bcTJkQ!^?_9d)k5x)3mB!!iey7wYk@LSzl2%WSLfta|(=F>4{f(ls>FwdL}iT{n&HA6(Jg zTv%vKU$IrGOA;ydxwnq?hqWD7r*$ZDt>+HfLf6pP7RkDtTbb(tfkOrK;H0r7)dW$9xN^umCB5xHHAe- zDO*}-UpjYXN^$(4<-znq2}Lr=QQW&i;f2)V7gVadDVdow+6X~+GPN|bG$HptsamF~ z6r_oFr@9xEU^3I)mK=kTL#a|Tz$FZ|!qQ}_)GGPX_i4;*fz0|NTuow8d-8pYW~SaJ zctT;hu=H;=uv37uJ>a5QX$wx50;0d7(F+7UrwqMlc0*L6q147AtH;nmho+ZsjTtc8 zT;{zl^K`_lcnaN>WcL-8qOXc8lL{BfVG*QbC&mWmQ_!YfHwV(!&1HhlNFQ&6 z2&+NicvCLhKXdO5L(Maa>8H>abEU(d!bnO8Rq6z)J2$hK-gp+QIS|~KGRRCHg64XV zS+Md8T#{o2S5gMSAaEhLN)IvzRzB)O&;w}txSKhqer)S zdbDEMGDnZ`;^}F>k)uB|J`Y`Zdp=0-)nhfKmg44P38AGPWz%!V z@}Vh0cjRaGHRr9VCf8K#j-G8=g~cpgOt%*smdy>)$AX4qv-X4*Sz>3e(K&v^|YHX;5RyWdWp}p7$tA%4hqhpmNb_I>F+88uOJ>cD< z*ys$co{?wnj@>;-HMIr&?+gyCXPj10HAhW&}uGk_&Z8+K;T5wtK}F2(GsAVsAW zq-bviDRzYlQtSy8q*xRxNU;}GkYZJ@AjO(eL5dEjAcc=mK?--Ef)v|+1u53H3R0{f z-rV*VpYraf{s@;Mulq%cNnSyUNm@aQNmfCMNm4SP5qIDaZ@5)R8hLPqV$Z4(o#j~ zl8RF7jsE3G8fh+D@s>Xl%82py0W5lRYmFQiqbWZx|b8% zqWZm7Q+Z@<+>S`sRg|u;DBTdNGq!>Gby9hRdzse~k@i%So>ftLcC60W_O{%!PUR8q zbmh`>V|HR2ns0~7Bi!3OJ0d+VW``S+Ts*kx*H%TG{`j{Q!V`kHRe?d31vabpM$a7@;<-R*KiODR!W{3Ei zdCw$^xIQOLdR`0{0_SFJF|Aw(liKH882Ow*gJ+sWW6tNX8qQ~EK5{-6M$Tv8cLvv$ zm={X()x6NqJm^XlR~OSi7SOBX=}t^g4&LI_8(symvce z6E`#;`K1dZzcgs}%(H0BL8W=`*2d;@Xg+dK7e)?h(CV3I(U_-7^VK}n&^+h1_EZ-} zo@x+y<~iMCE-TGfb6Nii&Yl^YoXOf{T^PBnLD8#$lRM_SvW9BD>qo5bDs!|rJ(zwh zm5$F&2xs=CW_p#;3Elz4tiIH&ii+8Nso513bNW(qDk|porRG*tbo8YHT%F$GMYS8jCZ68UCG=MG?ZXI~gj`sP?vO5_n%I;*SD7%xP zqU=tFiVAnqs><)ARh8dKt17>fR#ko{t*ZP^T2=X-6cz5|4EIj@+fmQ=tw;Sj*^%0V zcK=T5J*b^i&!3Z4A?F(Yvoc-wUCxQZIzMO1%*3D)mCBtJDjju2L_E z4!tnb?FH`8Q7?4gYL@@CoYJ#`S$-Gj?R?fT%tL=5gbJu|yyJI4sGBW1e;|ksO`7F4 zDdygXO%jJ-b}-v-l6C=LJKm&FQK?Cxu2PdkhbGN-n-p^*Hkn=$Ct^-8$8VB$8|ECt zO5*pDC}4VyYdYpYgr>!Tm>bOXO>387Zn1=5)rHsX`{*S1|RXt?9=0re)39W4XReu5a6p+|0hFoIa2H_x9tB?lo{tbu4X6 zHDiBoHkPo|7@xjPeEPn8(9n0m4*&T0-_Uk1isl04nB1BwW`azb>q#+V3@@bNY2+sE;+wx2ilWzm!4-`U#Vru{sQfstRh z(?9&Beb33}JofE31x;yA_+pc>FDpuOd$9%WZ$1X67|NhY=NIn^TG0NMphfpM?Kiva z=cM%Q<8W8oZ#DL1d62`~+14cvTJ<6BMZ5f?TiW;h;Mn{||F;EgX&%!S+l+mg>&5os zbhN*C42~$2L7UDm*&R$r`{B$+?Jv6Rk4F4xKSSrR zKNI$`B}MkVy^M3s?;ot)x_@RF`!efiw-@KY{_JB|v)KQ$bbi^D!5rAfN*3Ao*1y=a zMfGsbx_P20+cC;5eVZY-TrZU?}{P7o{c;7|ktY7BzJ@5nGi|Ek?%N;r`yS~6%W;7de1F(1zn4Zr=i-@OtlM8?P=|I6JA`< zUOXMuEA~qywF}&8{e`e+5bHu}0wCZq2^`(sMNqQuMM^ECr=- zVd8qRWLe&df4YuVE5jO^-oZX}d*1i=dajY4m$iCnu+(3xm*Jj=YxS~VS=9Mh zB~cj!QRia?)1s*JvASqc)cKhCS`>9YW~CNIosSu#MN#MTVW89)bv~a2iYV&*j!@)u zJ|6-K%<24jRu*+W9{_4x)cIXj7Ii+(^bIcRd_MZqWuwlA8!w%|%JGa7O=~$iKissI2g{F%e``kiLfGC(8CF+rVS4<-N6^w)u5@uIo$X4o2WadZS6T|C zSUw}WOG0UfE9LV+X+x(g<@3Rv7;?+qtM)fcbJenEt_W86d*+$A>Tu6IGdR<`>TanK zGViMS7;z_&-c_#%rQTJa8A`pYUKvWgtL9@wvFlwmA0vv?yXrNR;;PSduiD?QdydMz zmMwc_u+rbMSK+F|Eqhh43RlgoTHn>Ru)T{ivy*D+x=@O%j)h(NMf=ssuD?E5 z@9+8>P+hp|ZwNMc)iL7PO_^66A9S+14Q_SZnxpDW-^+%-G1%yD_&umG-0*vX9P6eZQGfw64c(9k=hOb=^CSM{rhfmhTaqji!Yj!P&vtUT189 z;j1X~I%6xPsP1g69TE$@CW%0Zv5M^dyND<&=C9b@^G$7Bftzy2Qd}mt-$hVaNq^O| zCAo?<=XJ>o?;@zIq`z`>FEDj-B`6}GLRn1ii|-<=tgJt;ZCTD!{@_oSy-2#ZtZZ!7 zh4so=0U|h*#XP#?F2c&n#->nMR?Y$NlfbYnVP$3g`C!}3@y%dPxB0TW2rDZa8?9lz z9Dw}Mpsx4wy9m=|ojCo~slzy6o4Y*Oj$d9sM6!gv&cx~e0Y?%44e`&ngJuHQ*7iU*K9X(I>ts$ za?L6ur*mxNB-hL~a?JQpPV%>jrQSJ|zhv|{w~woaF-X$AeVEaqillq{FkwR#N%!{A zF*XKCy0;J0EmVO#0Nu4$1gs`umJ~ zncQkjL6Yue(rY#Diu=qI=B8+@k+ik1i{vD2?du~sNn87dNKP_dJ0_(wmb$~*H%6sM+S+>}IZ0bP zU0~B%lD2j_!A4FpUOVQ!Tl*Sw?cA76DU#OOxsjY?+!~gOO4hhl8*3!3HM+1yPBLx{ zJDF=O?3qnbDU!BldLubW+cW1!a+0?8&5@jBymoAZZtY>uY>7&dwAQvpa*|@raR_)m ze=~MFY!Y~G{+MUYU+=m%^7W5WCW*H^uq>Hld}4~3woD1L-q`aW z=KYgr(qCI>GAkzC>m{a`Ys;0eT7)LOb9>)pY#zg8UQD_V8;B_u+6pBsG@(iFEfC*i zY;wY6qnLCL_K7JrwKbKnMujH5S3rD|u^9)G&0@0I=}TgYEp06&EN`Jn@BI(oWNg~O zWUH8Tp92t6oYpq2gq1Ng>An2nn~cppm<+^Z;IxvMVq05V35#lI(tGp6HyN8yFj*9n z?qdUDiqqSsm$2f7CcSq)VA7dYCym{D_{L)RL>TQ%J98!!H&hm*36;><%3`{`6>QVx ztsthmTR}`$w}QB-vY0Mz1vD0iN@9Aq70`5UD~RdaRuE&=swBn|;)&f@-(P^d`+=3h zU3J3yf!SV3j2T-=j9FJnjG0qOjL~07O#jtc|H78gcda0%-&#RTpS6OR{%Qp=-PH8n-{(^YlF?)~tW@Sab@WeqQPA&W(;b||KkT0y+HvY7s91vK5$3SxSv z6~uH-D~Rcvx?=ab{C&i`E_$ZU))8J8z0wL|dZZP^bVw_R>5o|LKZdQ?U)vnxgmVY=EIDI-joCH5J{1$qSNWK>|Phz#u7Y|N1>1|;f@zZaeoVqnfd38;*J&;?=)8o{;Qj=~@ui>6jAKlAzufZoGuJ*}tUe=`hkfm6wkCA$ z*k@t)y_ctRW%m8`xqF9h|17j$zxlE6nZ zyo9|HKbVtuuu)mqX@+nrqm|e@F<%PGdoH$;nJb&aE0cG#R|Yx#YBnkhd(aS0Wwa7| zL*`3Cc{j#ZFSj!J&ECqOpx@X=W!i~HH)_JEj8Q3Ij6uSrTdR;lE5(YF^n^e9g@H>^DzuM42C2y%zO+Z5Q8BJ3^O0YaKvCp0>jM5 zFg7t5lE5(YF$`1;h9oe|d<>%&gCPkFGathc#$ZSS!_3Dpo-r7bz%cVM3~mgDBrwc; z3?m(bAqfmKAH%T6U`PVP%*SA94>2TxVYYEG?uawQxB)l^#^pl{3wLOSWZwaKQQof# z>urc32@EqIgJm+rkOYRAkHP8|Vn_nR%*S9+3Na*sVdi77mV_9Rz%cVMjIc}>k_3jC zk72lFFeHIt=3^Lp84O8anE4n6Vg^GJ7-l|(QJKMz1csT9VTfihB!OY(W4a;?Nnn`y z7zS^~4oP5``4~oW2161UW{GL{nicB>Rpq-FTZ{3s&(ewIFH=O_1!9?=bkaAa)8NB>Rpq-B|Q%!PIkV>3MtE zNZAxwA=!815oUf(y%B~aFwA_+`4NUBFwA_+<_JR)7-q}%IeiaT&1rAjJDB45HmZyZ z=M=}cQDt2ArZ~QhD&wLx#qn)a8P~2Uj&GyNxP(n{d>d89_2=b@Z~NF!M2tW(|fUFwA@mqgjI?2@EqI!)VrENCLym#{?0EBrwc; zOk0E@2@EqIgQY#JizG12CL7=O*Ad?WgB3W|94wPzb4UWi%x^MQw-7@T7-l{Oi&BUo z2@EqIgS8~YkOYRAk6|=xZUsqTnE4n+vj#&F7-l|((X7Fc1csT9VKi$nB!OY(V;IdE z3`t;^`Iz|;h9oe|d`wq_AqfmKAG09BkOYRAk2x*EkOYRAk2yWUkOYR=WaHcZI^tVk z7L_$;anu}=z%cWh%xKnhGf7~W`4~pC2161UWjM5Fq$=X zNCLxbvhi(y9q}zNHRD@gYR0#~)QoR|sTtn_v#P9nR!7}K5*TKF7p{pgB!OWz+4#1< zc6{4kJHG9&9pCo9B=K#3?fAC8c6{4kJHG9oe0;@haQmm$85Dtj5?+o-aa zA-;_&dl}-}sIr$KzKtq-8RFZhGK7jRQ+&Ipj`$Xsn(-|#XmretU^HtyF_OSA^IZ)_ zvj#&F7-l|((X7Fc1csT9VKi$nB!OY(V;IdE3`t;^`IuOI3rx-U7MPmxEig6XTVQI& zx4_hlZ-J>9-vU!Jz6A!0{iNgDJ$1ylz|@RyfvFka0#h@-1*T?v3rx-U7MPmxEig6X zTVQI&x4_hlZ-J>9-vU!Jz6GXcd<)EivZ)h`Z-J>9-vaYe#J79uh;M_U~0yWFWFfkPPcP8iJ^4~8T#%zO`q(X7Fc1ZHya?VdW~TVUMyHl-eh_k|tZyw~5H8b><| z$r4&pSlXuQ`q`l>``KaijXby}aLCj6=e)4J7R*l*>7+XUx(zVmwt5&ksXj*BRu3a? zt5=t}tsX|)Ru3a?tA`P{)x(I}>S5@l`t1?7)x(I}>e&&u)x(I}>S4rf^)Pf&{kp_$ z^)Pf&eT=xR9)?b;j}f=k!_Z0fG2*s*7&@swM%-2pLnqb8h}-I6=%o6Xdfisf49*)u zGbo>cYeI=X#OS1&stiWlR?iNdR39U5tB0YJ>SM%h^)Pf&eT=xR9)?b;j}f=k!^mS9 zJv2<4#clO4bW(jg;s^hh}-I6t z{Ho}rnyL&&+*Z#Hom3wqZmWl(lj>u{ZS^p8QhkiLtsaI>s*e%3)x*$9^)ceMdYCn3 z7)t7SEaRD38=2urq;Xq4$htU$0>6{j#~~E>kPUGN1@-*w&}+-a$O;xoG?xOuqMkT} z0v~c#972H)IXe!apytmGy|$hcnZRO=wo>5Na&8<#LCv2XdbPYFGJ)kDwNT*Ka$X!l zK|Mb^^eWmES>gF-=(c(oI;m#h8jQHD9)?b;kD@ zhw5V}@%x7!s*iDeR%3@As*iDeR)e93>SG+A)nMqM`WVM&H5hneF$^X3{FF$KXJdvQ zs;LU)V?L|FU<-_4DDk_89;$DL5+6ek)yGicW9Xs!7)pE$JyahSG+A)m#@n zR3GE`tOi35)yFtKtHIDi^)ZgmYB2OreT?I?8Vo&DALIC}215_k$2dN#!O%nXF^Om-|-)A*#p^Iv)V3G8FRs*4n>Om;*+d>!BgE&5`u|gNs zgS-fz)tI1*YD|>*tOi0C)q}hUpVgS4i)u_@x%Yim1EGuRL0+8CYOK&_HCBv2N{QdG z^iX|_&}TIU;M2u?R)g7EhM`1!*0g%5-;+Uuru272 zk$w6rQ}~`tR1tTZDSl5Ts*LOV6u&1ERmPQYirjM5FqAbIlE5(YF$`r5h9oe|d<;WbgCPlw1h?L|G#JVn3`t;^ z`F0q}8VpHbnE4onvIavE7-l|(p{&7>1csT9VJK@bB!OY(V;IUB3`t;^`4}wiA%-L{ z%<2hlz3#!n9hxDzw~pTt0fQAd)*LL8p&gRIF!P&?)h)!31csT9VJK@Zog^^Kd<@o- z5JM6eW1csT9VJK@bB!Q9O*6TxtvIavE7-qg5hO!1j5*P_? zJv$6#4TdBz%zQfxWetWTFwA@mLs^3%2@EqI!%)^>NCLym$1s#N7?Qv+tLK4?cUcP~ zGbH!c@jD`5B)IkLERO7u1csU4WQMY)$s~bc=3^Mj8VpHbnE4onvIavE7-l|(p{&7> z1csT9VJK@bB!OWz+4p4j*6}+cU?jNpx{#r)X%0zXnE6d+C~Ghzfnnxj7|I$9Nnn`y z7>2S2LlPKfK8B&J!H@)onU7f$VMqeQte)W3yL1M(rYe$G*Zv*R)wO>|ban0D5ncU~ z{EldE?cWjYt^GTqy|sTww0H8qBf7fw?})CR{O^eN*8UyQ-k0QeM0@M_9T6}R+phT=YR9_q&@X z{jMjbPGNbfeOW^ZE_7zcOa5KY$Ugk;%oLvIL=|BP$V~BhPE;B01uFACwEt3n*E6aN z;Y4PN&vT;6FgH+{_i_F@zU#TO1i!yKZsw&_0l*-cWH(>N3!pX!Abe^dFVNbU< z`LO4zDj)WAYD27q+PqKtKT-S3o>%H?ldrMLmp#{3`Ld_fmPKHq6fO^eS0;9<^Tpa< z_uS)jrhMIVW0kLaN`;Mxa`bsecDnPqlYHefi+^y+`F@kXko4S|b;JKIu4AiwUz;6c1@BFjI4#BeIbmb10!o;xd=wmfswVad;}xuz{pxy zA%c-~U}PMf{}D!WG$>1!ALqVvTf7HcXQWsMkU0~_U4aD>|Ws& zkkrPw<(O}Sn%?E%kLg{K4vegA8qa?WjHCl2YhgSBGBA=3jI4#l&V?M9J|8k|<3W(I zM$&)z5*cf;10n~e4~h(oCqkxDk`9cltu%H_#8u zC7iXAXGZ2iNor&CPt4~;P16=dFp>_8tZmxj2u9L@k+rZhA{a>rM%Kbg5sah*BWqzx zA{a>rM%Kcx`-E3Y(t(k+FrFZp4k78l$X4iGOv{t@Zg*siq&7x}%zSCo^zQNqM$&N-*k<`ZM)|vw;a|JySjHCl2Ynygf1S9Fd$XeLh5sah*BU|AL(5225boW_H=R}rB zu816Eb4X>{e{O^$>Eg&&s1kipxk?^fnCVHitl8iwqs&GZ{Pn|33zTR5f z5?Ld;qRb~ZpF1^uxix~5tN^DtY=HB1{wX;RxN?fm10wra*{AY6AgZVx6;1JZKvWsl zqp3a*h$`c1JjLe$QDs;(rusZUDvOr6DLxNyYU2tw#peN1o42w}@p*t$Shn^|`FX(V z`pyF!Sc5EYW;MjB8ZPi89T-`=#xm+R`v6G?M%Ka@^&1#T2S(Py81)+%Ne4#O!Wi`% z7)b|4*1{O|8yHCkM%Kb&=K&6^+IfHjt9BmXz^a`GIIwEx0S>I%d4L0}b{^oss+|Wo zFa-YSx5=CbXk*-Rs-6cpFkqv5)egqoQj!jgti7dJ{6iQ?2S(Pyuxy7gk`9clg<-)B zVI&qyr;sVT}5XHIfdDtc5Y^H!zY8jI4z*>NhZw4vegY z&5vLt9T-^)>xy6`9T-^)TM)rWIxw;p#;D)4jidu3YhjG~4UD7%BU@oqzKHVxZ45)G z`gwo@TjVxvanv-D4veh50!IDj3P?IIvKGdu-@r&ZFtQfLsNcXyIxw;p#;D)GNIEdG z7RIRGz(_hUvK4w4)6(&}d%V+@*m;09Mu)8Gd4L0}b{^oss+|WouxjT44y@XFfCH;` z9^k;Lod-Cu$)5*okbRyWXw~xo2e!_=@#~`-Ptt*rwc}$$1S9Fd$W|C1xZUpf@J=)~ zM#f0$?x0&+^*q3V^+=t@Q(@F^hAv45M%G@z*%6GS10!4E3ecs_6`cG$U_<06S3M7K zag#g`SgotXhEe@Iz{QmMaW$Ue^MI%_E}T>R`v9pd zTIQzsJiw`qE8G;H2S{z+$~ML40a9Vv+B4JivifI}dPR)y@MPShe#22R8Zh z0Bww0PSx`O2L^29)L{z=eLs>8jI8zjW=1fQ4vegYVc8C?k#t~WEsRmWaX3jjFtQfL zsNcXyIxw;ph9xe9k#t~WEi85(;J~V#2RN{5=K&6^+IfHjt9BmXz^a`GIIwEx0S>I% zd4L0({CR*jM*pPh?*klIwetW6R_#2%fmJ&XaA4KW0~}bj^8g1{?L5GNP5wMU8^g@2 zejeb!s+|WouxjT44y@XFfCH;`9^k;Lod-CuYUcqCZ1U#;>*_lXaA4KW102|TcRAV+ zty&}<7}*NZG;X&OP4`qg576B~x3=nefCKAso5rZ$IS+7P)Yt{}>(Uiz`Dp$u6iEe;wE_>u(Hnc02ep;^MI9}*Ie~HAO@{=9uR|8I}eCKCwU&Qvdky1 zdLB>#evJ2ffwckrJv0t4q~ zm~bH70hvs?ztQwhzq@@UcD9q3jE!@Yl=pXf-jej*ae(jV+SsOlB0cjPzis6^4ofoG zzE+hjVJ9=6sSy0D$dY=9iTjqrKV`--BE6rP!qanWxJcJ93pF&gH!thX<&VwUgG%yF zB~s+otc27{5D zp}p9M+6qCVxwb~9C#Bo~Ya{g#ldJsK9i9jZx+k3<-8l2WABjC*z|=8s3z-vQ%!PD` zLr-E1Uxy)LbfkP8V+dW2l&`}LH#$lhd4`bhb@xmHKY*D(Un zU$?;ONclSY@46f*Uq`21>qvP^8E0|y zHdW8JRs8<)c~gnAUY;-ccIi559VuT&e^Kj5`8qm@T1U#)(KFOKQofGvpw^M{b@TzX zj+C!kV|Apw>*v}MU4QqOUvMJ}av>6D$=CH*9VuT&XGoVL;G5(`qZ06Rb(*-NDfYZ(oh=>ihJr z7w)TDoqe@6p|^|Y%<~~>WMEMpHb6UpqwR6WW%4U3pY{s(do6Wd2VF=xf8J5?*K!eMQv8|iJ z*mH-6E9}+&veWH0M)v9}WUtnZ(KiB>yLW_*aW`=ql*Yt`vG*1quCSG3#JJPWG)CMM z*~+gd+saY7dxO{*_ioUjG$t;LJ-2wc!cHGwko0Ym#>h^8h3xd&XVN=8D%V7Gn_L%w z2Bk4^VeGla!=WSK?EW!#)$~mC-s2Tj-g}gZ!=7n&{1F9oO#~u&Yel5~%jJy_k zMU~egZDU%U#&Efn#>9oOry>v6erwVlGxFBt6;9oOCngWqexuUu z8F{1fiYjkZ+Qt-}#&C(2#>9oOCn*n~|X3H|> zwe^yz{k1h)mNBs{OQ!Z$*lbzG%(g6<+Fxh0Wf@c3vSez1wau1g%x%k(sr@xKTXw!% zmQ3xhyxFo{Zdo!%nE0C=V|O#2N!qexY@5l{{wka;dzxF8Ozp45*|Mj*Wy#1_N;hckqQMXD*7QHBQD}6dCi-&z<0lqOv4ySu(aPncCl+vt<{%Wy#e37M(4N zbJeI`GPS=^XUp=jp=~pn+TX6TW%(@8mL*gBn|8J=A28aoWNLrw&X(mM!pf~ zcL;X=>K(EXT%gX%$I( zy<}{w$e35d-Fw87R#TRwElb9hB_m&A^IMhnTGdlNn>IzpNm}D%tZ_0&nD|}Y3yEnM zNn4hTElZ~MHxX@F9`V|;WNLpa(U#rpmL((KQ1m+lLAEoS;)7=k3YjY+X)Tknts-Nd zD!aF7YgCq`Elb9hB@=#haq7>Mulj%WOgXIGJ)A6}`(NfWWogF$SI(4eW8%lhatam~ zPVt$tZH#+|xc^FH;=(CDQ?`wXA0JC&;=(CDQ?`wXA0JC&;=(CDQ?`wXA0JC&;=(CD zQ?`wXA0JC&;=(CDQ?`wXA0JC&;=-5bOnGJKkEY#qpG@sDWm~qvElZ~MnX)a*V`RJE zkg0v9Y|Ea)nX)Z=3TMi;>?xcn+p?!{rfkce!kMxy+vN5$nc8Q{wrsOomQ3w4Wn1fmQ3w4Wm^_;S5z;V+GonPETW^REScJ8%C_t&oGII~JVv(t zOs4jkvMt-;mL*gBOxcz_g)?PacAi@=nc8Q{w(NYjEScJ8%C>BmTb9fbCVt4b01^`* zk+fyW*nTEc`%KxEJ%ux6TXrhWl&$fF?nRNQeWq;7E^^C~sePtw%kmi6b|#tHXUewh zDV!{Og7TjQs2rfkce!kMxydkSaDw(KdKDciEAaHed_ zp2C^3Eqe-Q%C_tpce0Rq3C@()g+BZ#oGII~r*Nih%kmi6t^j0epDEk28{D#FUV<}a z+uJ-wwhbdw`%KxE`Q*8 zY_Ine&XjFg9wXZ;BJ&cQDO=+_LAJ)p9AV-+7`>1?xcn+p;hD znXu@H_mwUQ0;qQvW-yE0Ft%VXs zPod!a%O%fc+#lc|_;ilXd%l*yKN8fGbAC8y?p+#f+Vf1`Ggj9CfzgrlbUdUmI+C7_ zClW?S($n$8!RSbOI-V#P9Z65e69c0o>FIbPV00us9fN$MBkAcF#2Xz+PsfPe=tz1x zM&w3E($g{GHae1?juExdk@R$on2nC4r(+OobR@OzF5cFMa9`%S_Zs@Ld)=IOUdJ(Z z82aux(09P<7|$9VNl(Xk)#yliI>w_$N7BFF3enQ|mO9fKpIBdK-z z&As@&#yxcJwc@R!vtfC8=|s$(WW7xzUo0Y3XtsEyL$22;UTBlzzjrSeaGN*Oj+uLs_=7MlPrAKM(kc6E` zNB7a_NNU|(G*{LGSQF!Q;2ltN{d5+M9g?sU>FEC%9Z9XzFR#Y01N*&GN6#N(3}89J zn^J|KU~1YFStGgU#y&^c8!1Wp%JU;7Nnc3^%`}pvQRU$HR= zfBnBDvPW{yaG#^x8YxK{rGDpCDvLkUPpO~7Rlv?;-V^&ts@i*E=lSo6EpXlwi(UvD zF2NBhJmbCt_AfQx0dp+#9k2z?J7C%}H+yaQfct*eztnuc>*DzPT}#T|?}}dI(ltCC zdvWV)wO`zFYmpbXmXy7?rEB3*t!p_LdwTx0+HYiC;=BYUZ)7bkdm~HN!j1w!k=~{+j54^ut`z0!KG0{s@OUquO(zS5WFc&itdzAgv z+OJ2Mi;-&N^{6FfuSe->xD4rwxgqw9`fIh{dvd!>-g{b7_TH1Og$t3c<;K{<=daa% zp~-xmK(0kzXeyPx(4=dTg@n^^IQCHapDMhl@u%P1<;lJ>QXqe3ld zU&}};)ROkK=uE36?Q0oLg=IsSE&VjD^fIKhsYsR8v%aZoBSWB#yw6Db)V6~)uEvBy3lJ>QXtHM^1_O*@u%h)Q^lJ>QXu0kzoU(5I^)ROkKjIcs2XQW9W7~JdxoPW?Q0ob>1%pgUL^3fjIKg0 zX3TQTEj+V5qUE^p;d;LMbA{rmvulI{Gd8(wEQHD&R zTO;T4zM4^!Rg>{d(^+v$zrrueNJ+QqhLe0FBh)f(@(j~IaSX>ga+5WD;}Oz+wTz6k zVg0Yn`&x!Zp_a6--Rx*ddyRs(;5Mq#monfoocv1}TDeusx)D%uWl|NBSmf~ENxh)% z*-7nGVGmEFA`<^#xKqa8Ic*t=O&OAY8Gp64WhgdfNcv^`70H&N*pwmZmx;~V@OmgV zWk~vEViPJXL$N7C(k~Mm?_n8=O&OAYnb<%M%TR2}ko3#M#%NfEVpE2sUnVw$!ZH+_ zG9*#vr5hjVQy3p!nL5XZSEkPK;gzX#d^EV%Q|I{b>Zx;lc=gmdKD>JB93NhpI>$%) zB^)2#5?AN?;gzX#e0XK*93NhpI>$%q6vl^FPo3k#tEbNK;nh>;`0&cqIX?U^F>!wx zueraRUU`4%d#0YpUfp5o*iO@Tpq>XQwsdUI>3h1K2MxA#Z1?FqSkFOx_i5(3WBX8F zJ?G@MaBM^BtLqp$tU0zb_0@Gg9TtvlQGN9sJlh_N?Nxm@)^#8p-s{+|)i->S6W&RU zzy3*$zy3*$zy3*$zy3*$zy8ULzy8ULzy8ULzy8ULzy3*$zy2v1e|si1{`O32{Oy_4 z_}eq7@waC(<8RMo#^0XFjK4jT8Gm~wHU9QY$@tqlsqwdWQsZy$q{iRgNsYg&Co}%` zPG2Lc3u=;x;stK#%vbnh+t^aX=APq%dNx(rGpRmVLN&E|`?D#=gxC4V@ZaNpyXo776 zE-)w!g>B$(F2Xj*w{7#K8=%`I|Gt2215r^M^fz#I8w4D0!;NeMI)-hqbl8U1pe=Yh z8I*>@Ht^>KY{PW)gZwK2`O;0$jqJ9K_%1twFlj^wJ3{|+0=f|z?Y827p(jSz3fus; z!qQ7^Kj0Z?P#O)}P~l!2g0Aj+Az-%!ycajK1sE@Efu+NK;CSd_8^*#mRJa%8(A9k} z1RQU}1lxd7$u?LzYy zpmb}MHrxi?@KyDW2aS%m;dZtGiw1kb(riOoU4}MbPY&niaekP*vAt%K;5nHR z&+N#}>}$$#PW%9abw)N1vagR{4Cf?xM*m8T>VM0QzZMd7GHvgI?S-_h=bV}KO&IMt zJ)3hf+MnKO&3_l>XKC|-Kn)z>Pe+6C+j^ca4ejIEcQ~Jp>rtfb%S_FcUWd{*?W$;> z2-w#M+rO~Sc`NqWH;ZXs&y}*i;ix-s^1jh(YZ-lWgqEYeIfJ(K9H`Vc98U+U_Kil^ z8qjvmHQP6Mk{^!mN`3QsV27&qjYhckIghM;JpT{JZYBG_2kebkR_l9>aP1$}_EQQ^ z+7-I0ntfhvTjqBBkmSk7o)g9 zw|hCu>iwnCJz?2!KCrAA>$>a;mfZ$KQz0}w`?hD25pxD-NKgAd?N&cpn_no$B zqVy+7Siw8Vyh~t$ga1(x_wEoEHsnuPh7Eau8rzURqnHi-^HBdD>ZL`ocF;mS?eK7A z?RYS(=e;y%+ws0o{1+744tYPtv3AfxJ?-#tW$kzO#Yb3KX39cFxTr~t3pJ; zaXt6C z-8k?OTvv0{#Syo__xD=ye3+za(04)ir;SzjHpAUnkb6b_hVSx<>q6 zia&IdYK0J3^>zF)zZQSQosU0UlS<)_?d2cmEOo?X4NZQzp_!u_vXrs6K9Fu|%%~q{ znSQKseKw=cN-_PD4AcK7$@KU0Z!2Wf9U_0L$e+nkeqE08KWZTTTS5Lv=&wooI>8@N z)IKBH<0Ajp1SLO^^wXk!PSTr2a<`=G#Qw#SJ}l{5C4EfNALjlQ7S`u!XLo*Cb4LA_ zNLGpDHB!r6Qse0jBWU5LC0&?4r|=i*sRFM$nP$r`NjK**>I;(om!$7)pk%Y8S4+B2 zuQsMHhn?wC<5Q{cq9xx1l0CbCHvo4cp^he|sWr)S8=Eb+6m5&R zHNqtoi%nCX$#)l;Rhs`k54caKx(nxmo3Ez9$_vo-g6mRwaBorME&z82xCI54yI2iK zeXAO`WypO>HA45Hyi&dD67?B%<` zpyWN0{!dANC21i^d7GqjBuxr_lcevKbdDfjDe0#q-JtG8Er%ujm89n;DEV_qzar@` zCCw)(4Rm|p zO8R|CyAzb$FXRG5|lKm8_^rvCHWs`o(qN=c`y z_krFa=?Zlx=wV5JBI()$C5zNUNcSO4sPE;EV8_ih--vWtegx@(6w`k%jHvbM;w0_w zgBzXi;83gK4&^_XO{-fCH=NC4F8sdX7B^?H zV%%l8bD_(r`^l+$a<9*SG@Dm{11_iTQDcpt0QZRK?p4=hHmJP%h2idPT#lZZy8y-1 zz3Se^b5*n2V!6%u&G4AzE>dmkA3MKZ8g8KJIJh5@Q*WBpTv!4tKl8X>3wM9+M@_6DaXOLr z=d$@tiFTDU+$&S$T7|ne_ss%1eGGk%`lXcn*ut=eMbLd0Zm_QJM0Te7iRB)E4|&en z)V%?1nV*=WF0|akc_0hC(c%98}2!9=c;YwQ0}Rw{^WUTx8)8bH>rJ=JDluQ zH(Txv$@A6kS?-?XX7xvw`(Cvl;AmR#aq z+?8dC?drroXs#bUak2WvKWlCqxJy;)yWlW4AIvOET&`vr?i1i%sg@h=(Z+vF>{MF} zS1L?TUa6-2NS8YZD_5!g>4aE0A9tl+eR7WGzT9|va{qkS(%gF++Y{HTcb=oU(dPEVK{e|< z&3y{U8`L{{HP?{&ABkbLf3xO()j)3LR?W4E?msU8r|y|Gr|^?3blb??udd7f0^B2( z%jZVb#tTE;yxf@jtmW3^4y#SuL*0eBTh-&1dsXhW>cWdc-B|AR>Pf?$-Tda<9jbJ( z)}7t_uG|~cA6o9ixj#_fx7^?5-mJD<5+eU8cc*&4<-V1Bt4d!Q>VBU4Bemafr==S5 zcdG|2*Ovcdb=+{@OwP~WqdG3r<-VEh&c9tWJmOntz{q ztL46#f4{oVazD*~K)ug$slo@``A1ad3VjXz*;L_g)ilHXcVk{uVWSS`8TP6PZWzpH(+l z?yLE~SGQX3oB7Ao9hOTKzM$S>xu51ASMN03H&DY9>M_IJhZ_D-{lIYBa1CEkKeOCd z^G_=EO5M(F*>C2*rt+5iY5plS({ic8GpfsQ|A88wRTmoWVbt(-b+h3f#5FvpZnxZ5 z^Z%;;&~o3*Kd+`CeX3%^!_hPw~C|5hW0 zo0Wew{~Prh!+o=9ap8CB_YC(F=v3kl4L2RNClmJ@?z;`cg>>T24fkBbYYPpD4;b#5 z#9IoP#77PHt;D+u*~H%(?&Io%gMF>S>Wvwe zdMg6br1~|Yr;xrM)?GTKxFwWJ@b8U^e397sxmaMDRIikJzk=u_p_nGs-y?)gsIQCU zYY1NxifK|^AV`gWKBKZecNUE=hos-dQ3Eu9ImM~2!-8L6rE^)Ok zT^*^lrg{yx*N=2d)kA+gnMA8LG$+xjx66HeIVBrpJnMR2 zD*DCV+4B2RkEEWy{r@r5XZ=+7PyMr|eq=puu5PU!t;W3A6b~IRmlKH`PDpY%2g$4E zLP9N((}*RiyRnJ1q=)hW=;16Si<_CA3%UpRnMiL(Jh&Zk%V{{fV$8f<9m+08`o_i$ zNO_*X^jt|dOL`Gbv!N<52$a5hGiM^c1T=vvqZe_ zlJvcj{-vaUBk89k{k)`KmUMxnt0euEdQ<90u)|0=pWqb*i4P?I8|g3d=|n#9o@5Tu zlh(c`*_xOQI-TfHy@-9-^7%*^BXuaoMwBc<%4oSmF+S>0JYVQgjHd51*ULz^1O0G$ z;sM|X6AMu9aN_+!e?-zpB>k+Uk4yTbr1westfbFN${Gh@jS(GMB`KrO4#jx0Lovqg zP>e)76r*pBkoQXZ0ZBhB>Bl5(Vy_}n>yVR<4#gO*Los%HKwAEQ^gmlTKk*Tfd_*K{ z=lsNHMe zo)igtX+C^ixd-Bt0zY z8zj9)()UQ3k@VAo|4w2_;?Cq>C1>kdhOzyLWRJ|OUZkH)z7px(s$bFpNrxo8S<>4i zy+hJFCA~+|cOm_#dN0z?CI1HLaN<))m#EK6`emed;|WX}Pfl8pKae>?eK_+((+agL zv%YbKT9Y{s>DifABi)=ifb`=d z$0R*2scNPL)hu-h-6ixUp*IPAtAqgv!iVyiqGoCX=5{XvF*m=GuNcxsA2g=bB)KSS)di~X5mf0o#v zE%xV#{kdYlL+p2o{dr=4zS!>)`wPVWX<}avv2ohVmM;>Ui^bX*Vy7e)mPpy9Qfe8S zqq+sZT<|Ldf2QD93VxN~R||fP;MWRronY3Bc7w<_io8eUXNg=6z|}b-Iae^R5L%AA z)h5CBisXF3Zx+lJk!;0k@|EP*lFuZ+p8VJ33(0RMznlDF@<+*^B@?Oc)Zx@4sk731 z)8pyarr($TaQZXp@1%d3&NVD)Sl_Uz;i86J4X>V zBMqNv_(H>%8=h+TmxdP_zSr>M2Hxu&`Z_Q5|9(D)*!Io2W~A@UGCecHbRx-gG!-CC zHn$^f%+Eo(JH_-n1*WUArz72yT++yAiz)PJtBj#(u%5&y$RlmT-9sdd`<7H)&?j-e zA0RyqvLw#)IVP5?nMnT(-qu>xulD0f;TzRE)%(>W>hIKJ>Wet-|FU{g{gZk|{j=Jh zxF&IP;x&mQi8mzfOx&G#N8(QtKTT{+rjP1T%(2U{_MZ*g(Ke3Z@W17a8#zc~vThDx z{MRLEYofcrk*&FpdR#xAlt#M4S(nRt$O}F01BTP>dJpQ;b7&TxzOF}$X5l%F&VO$5 z|1|mUOrA(+eahs`CT}%)VDh;p?=<;*lP@tjoiOCr^$Dl{3?_8n|!ayUuE)ZOg>=peI_3?`2mv;nfykR-(>Pp zljC`R^6JD3I5g_T`0B+7<+JTxjL}}q`Cg1t&ct4f(_YN`Ufh>n%!yu%)n3f~UW`^m z0r(5>*M`3${-)z^2L9UdHxqxe@HZQObMQA8fACN7{I?gsYVO5ztzL|zUX1u&jQ3uQ z_Fk-1y;!Gu@hi$+bq4-Q_*;U%rTANhzi#|3#~=P1zwWk)!E08nRELK~Cf2OJMicAT z8e-LY5c@|DUpG7mVjMpa(S($OK$l(>mevGHYXYTLg{4=8r9tRYYWvok4-ZTX!1lGP z)Rlw#CPv3V99*RiS8$d`K zR;z=n)uGj<^403n0sIW+)-|_=`c-SfE7JsQtO;#^5F2aMp*6-pC|b4FZ}$4NUbDfv z&33eCHaIpLHLW!jtTooxn&z#&HPozH7h=~L>^iTaRqHJa%ixUV^#*MP8;l^#HyXZ2 zopb5v{=>tAuVCE=FHl!(S37s$7sfY@?;9N(9=cBL+&3^hFxI<&zuGY{vVZiZor8n> z)q%l@YqpPHI54*VH3MUVz5DhJ4iAnEOc+h?*nw+y-F9g3veAj1hYuYZ9i!s1!Pjg% zJhWep9=hiIp^4WFjSu#Y>{q>q4hzjFd@S#>gFvngl%sacE{n7iJ_YY*_aE_`eCs|?t-z=n~cQXshu+T ztqH@9Uo$qSn>2pez)gd4>6ecTsw;*EkZvBm>AE50qxfT|>@Zl?p{^VlJ}h;MYV+Z- zvB8mv&4-644v!6@KMtV7P}}(6P1gkdP6(GdECKiV1}+80T8 zbFvIwKg3DJ?uay&+C4sSz>!}zcz9xLU^r~q_$31)2M&9PErZt`K5&2*tqoq-l|$o0 zo-AzZuAvDR8j3F%8XmlIaBO^NbR@D9Dz}eZFSiZKf#EXL&cS_$$A%_uyJB$crlIl5 z7PbtI?;9IBG~t=wGI;#}I`mTX;ow+#tw!BDJTx#KX)hQaIN-3j)I&qV12nv2aCqQW zp&Wg930I6^rtF)D?1YNVqla!A8#-{%QEk3tC(WYX5l4E(z}Ub|y<=kow^cH7)1iS8 zM`6Y;&7eis4Gp7z++uo_+<88hcROZpwjIXJ#^a6*f2 z;Xsu^%Bg$V;o)KAhi}4YCB0+tdbRVm@rl8kR$K<**wDW56`YNjF0>pDEd2vRwQJN6 zP#J2!zDb5Vh@O(gMvY!~gW5JWh-omk>)^o1((8EHw_Hog2vdKKARrhEiM~-?tL}kq zW21);?HoLWbqBteT0sv?U60WqjAXi6)qCA|d}@UJmZ5eY9&f1I6vp>9^aE`2qcAIf@_PFZZhlDGe?(y+@TBq!iybBc$PK>MFoDJbsT|9Uj zZIA35n7}>KeuN&DW=xqDhO<;%e%%e2nk=H{;=u4u_*Rf?8J#d25EotT9A7mwaS&^o zS<5NM4Oz3gTuk`-wdL}YhzVb{z9PJmSUX$gaP2`=kaL?V7gvyuUVr`g;Dj0;ydK@h z9ahg)?5q2RgyxNxjaC*=84jCA;q2W;Y!hQ$L zVc2Dv?P^?Y13d_96G+DpLmU*#TfmKr#SzgN%V&m`FN2L?{4d_ZP`(4@uUBeGh~I@L zX@?-Y47KB?q4XjAZxl7M-u*ZrWNib&vz7ZHy%j$%*v4K_-+p1)^w&MMZrhuG_Ru?9 zI{tdUYUoNNf;^71nwpR_H{;S5z zrA5*X9Cfy|baddXlNnf)4AvE9v~5ky2)YtQmC;!;lgkPogP zkQx&$IDN{cIw9;zCXnUuFb$1Jv?g*5$XZ&GoegLo6`kp1XExcHNp|LwonRZ2orPp) zQ?j!;-<3$}YH7NNQwLl?4kuY{M_{(4rS0e)IW+X>ogkpWRf740l+IdmN{SSvcUlwd zjUo;$j74o%r#Q#eL<6$|j^;d&NE=`^F)ipocP5e|NlTiQG$UzV(wwA?k~T@&jGK~9 zBgtftaY|3@gVrO$s+Y@7ANz8~1F(9R-sFY)&t}OU!S2;5~ zBbRH)rE}R_CYR6Ua*eq{t|`}?&89HbT5^lCGjIc1dHuL}TsbZq*Nh9s)#6gk*vw_k zGSaH&3vOJ2|I3|Lt2}00f%7)o#7a;D%!jsHvrSk)8q(Pej_wOhxSHwJ8`G36MCg1L z4bP(8Iid1syQUh^eobXip{7``rr2stHRJMf*({ocAt*U)Ne)Yrr%etk!o!B-O}Shq zn_>@1hBuwa8DU;?1)ZTOy6@(xtR`{|SGb{oma1A9ug`zf-pizu}U1y?x%t&;H)Kzwyt{ zfBt{H`bA1A)Q;IW5({QaNq zzxtAgsUH69uyE}jV^>Zg)HM;!Ye){@X|8?u*_n*7C<1KBQ2WNHN^w_;? zFWvLZz3Km}b^E4EF2Kgc?Qh)KXvY;E#$pTPCdUnV1vWyxt&d^T-Us;#btN?Wpy#Hj z@jKMfKVOkJ`o@@};JUyoLhm7Ri>+_l-4&h(c6XV>n{)ZnA^z9hWdg5rNAy8cch?m- zO&;0@*J#)1je{fSUbkVxz`A|w*01VWvvzRh#-168UCC)XZyY)VOE}4bYm7)Vk<2uu zGHsp7OiMD8PG+*nOeUGhCo_%7Od*-!w%o)WTD5gzdrac5h0FpF4fspr4{s-_4F2-? zYs6mxe@*yn<|2uG6zgWP1AJn-O39RJn8sx_tJ6@Z*}Mqzp-{7pB5VwWX<;)u4TYM` zi7*!mHCqs2Arv+V+pJSO%wk()w~%cCFTaUI7}*T)<0O#?BO5}ak;twh+egMogpu_l zXC%VN{#Gy&**IlW#7~`~tu*H{dBX^-;4=8Zl#~&>O@@)Cg^W}dnwIu9^SD^&(Ghz}v+E#2r||@ETwF016RKfwWI0|qRvig7^CY1@{u!@?nsMpSzOm8q|I^-g zfJK#LZFe_KmLN&VP0nz;$tXw;A~_3)WXU;7Y!n40s31X6vY?1WMFEkZf}$XTpr~X8 zC4(ZM@KraW=s2^p|L#1q`+r|+hpKyTrF-hFbKZ06;^pLzQt|Qy-h&Nh3&swIF?~DK zREiSSRWnAZ147j?$jjFa29top#F~mx-%i|_+)g!DrJLmUtmjt-(gor1%* zNr*~`Vk9NevZ4_1(>uXowp(*hc7W#bN7;qQp&Z<8?L<^nO^x)-v~-m;)F8CDD5%B5 z!^IzkqYdOxGU6Dty);G^Ae}wrBxC0&Eh!-@DJ~%{YbPV)DCLN@M`Iv+j06BJ+`z$@ zL3eTe_|}b0N*N3pJsd{feg?T)(Ys!zr^_Ct#s* zG6K*X|I$}d#r>bZTy@^Vf#%kl`2FQ=WSwBdV6dm)tpeWJ;N1;6qp)cb{%kt_N#hn2 zW4>9$zuUfL0)>li7QSi9{@l*Z{0$Qq++7&|<|Y5g$_3BBfWdd-DG5}NtslxOz#rx1 zgt7x9hl8ISTx)~>!({>b2v07fTs%=51QaR|?}|ma_@SIP=y#Mq;NQWABWer7i~{_J zZ3rA~46;2O{SSFL;A;Z@KzB#*6L3!`Ta+ho5NwP0ie6dyJ%Od%~k#Rx-p)@5Fu1mdM5BW;`=a z9Xj}$=fpXeD`pn%doUlr%t^YwFYosEp^iSLWzn5yXitkg&}nWkdR@IY&!VW=GC`9d z?!E;Dh22bCTG|PE{U+g)FKD_FjGTQK;l;c{-pplt%+i@ZetgVi`yd!;$Ogi1%;cuUY2-h2S3f@E`nw;~TgW28;T!k$BLA zLBGl0SY-6So=iswgB{FTqh1>{#DaS&n(RA(FTsRq<)Bfwed0p-~SeCvYe6X@Zu zu1C(S;Yb5#i!f{L)j(Ktd3OMe? zjR!Yla1_V1`GMm&j_fNBhCibWNe9{r2WV_6LYZ*(}E!-_{T?GPd|Kan01h8yLW20{Y+udgl)W30JG{ zSN?5lugvjn+U&yy2WXG)+ZJ{al=;t@GBB7Nj=A|ZHaJ5EXX1PxO9^29NP#y7CJFwb zLEOG57^98&J97|M1IOQ)4TciON4jt6;Xl_FQNS$XcuN=z3!c&h2crjEsQ40bW8w`= zG~AtZ1}vyQIHwql)t?_fQE)ac<_A|kYD+nO_!Q0{#PvH6d^&*s;a&&vebf7TE>41Q zecK#=Tnfkh{X2jzQ#Is@?LU{0#yXS*KE3_rh>06VP) zBmoU%0XMpvv&98}y(YNI58NqS88YAu3^>moCJnx2!9Q^jQD_gYbppriKo6vWWJ!R0 zN&FFU@XHPykpV}fz#DfZ8e9p1ZwxpO295x#72Hif{C)EPXS;*;qCoq8lwMq4(cq11 zA#PrC7XV#u3x*B;3mCQzUVk-)DgFrzW5J)ZiC_>IpZ|Rrw);O2!;bt1V3;tNC0lWH zW5vYzZ#=;K^aanZ@dLABZQk4e`~F`z0?B}h0o`_&{9oAj|LZbrPyq}A z*mVzK6&?|h3dU;2E>XaV5!qOU+aT)}0uD!$L!?B6LX-puCPEmrkBCf&2#$nfr4evs zwgR*p+OZ{v3L+(d!?KaNh$tAuvE@1>-2#P8^dxg}N8IS$fzO$qcBVY>blF(?7zm4O zhOh)zvI!7?{H4WN3~dfN4E;>umGt=g(*{v|YZ#mmG$9DzA_5a65iP>R2u%xZCjto) zS~9bZ;7ETjPc$_|iOVFWB{p<)@Bl$QXf}uimqSMTYn~I$0kPwb6VUGb&SV;c7-kV8 ze_Ic4l)j1*#I}P1Ed|L!(r9T(8A*x#AStsY2}M`_B`u?X$Z;(rr$y@M=^LW?AfAmR zo2QD4H;7LTiDDi|~m#I?~QmS6VhE5`|8;hbAX7)}Ty zz{073K)}fmSU4P(+hdlsd@GK*tJc^9xgS?@K>Lxr^u>OME0c1FgQZc_wPh zkbd2pr#f{$fpp>k_U`u&Co(*moe^_N6LTI)MWF2as>eLieZ8XNRe})ZQ&w1? zbi*e!^f5foq~g6>8v;l)JP!*e1tUTTv4SCGr9?6y>DZnNg$V4=qkNbrbAz{K_{C*8`8?w$X1J0Ippu} zEhi>s@9Qq=vB|)T+IxA3dAqsba>cwi;-CG*zTHNgT;jzNNTnz^1u`ch0ke`2cv<1d zeb8P=b2AMgVt0S7ASfv4R~3LQAirO-KSYabFAs7XM7CKZ0m)Wz0TU943mhgiPBR}i z$l6?EzNRTXk^JZ}IRpPi+u%lr$I7lM8M`qRRT9|hp_UgXjc<3V7E2Ew`*3TCJM6f7 zVi32kEE8SE9uMN(7tcd_P&}Xi;#Hd-*9RQv^1>03?t_})S<6lWl@n4-?)^$^M*XZ3 zap;O$`emQF-@X*<^*>XsIo~uolmFPgr<;!!+6SNRUuuYsVCcZE(=Qsrn)2sjXaI~&0T}D~ z4r6e|v&GZirfcoQK)Hs&6@MBvDC92z3oeLbW72>3*#K9GgCokw#n}@CNNxc#8MF)r zLIW_v0hu%!4Pm|}q3D>uq-{R|*;hm+_#H(4hrraYePV*Z)uxr%nv76(w1@I^XUouu z@q7wGM)Nzndj(#_-8kf_eKDdgv)(vXws=lPlHm<&$!e+FOHyd2hHb$8)80&zG|g77 zxJnB?iTYHu#(Ap8ijo-VwTT72e5U-$kh-XId$`kEo_O^{zEw#WeL3ItrqpQ)DaVmg zX!eqzU-%yLx{z#MVKA~XkhqYOw2Y)3+8z>- zbdYrtkq}2qiO4ue*@{R@*g8r{U>qEPpX~<(e7Jr5L01)nIlN6;RGfj~=DtiacE}W0 zDLYaR0vMPLFfdl_pF%(&%s`X@@Yz5zBI0NfAhQr21NUzN6u>}T2%z9*8epKppTof4 zDck?2sf!0Zw^7rPURqX^;(ZBJ5UT1j zX=w?UgiJRa)jQ&;F>|}G>x7mIr9jMwg8DpWj;px^3dyMRA1>0!hgt+U%)H1udIUp* zK)5;t!3$;6E2ne$wcJa%G5iWeC!B;=5q&XYT&GVhnK`cK_e>a&qV{^- zDUMq*Nxv3o0N@$J?OnpFWe_AIj>cd>s0#+5 z8RlyegG>IMK>Lq$s|sHWD@Mqnfi?3W3Z1%?B~j9<|~7N5Ej?7lo~vr$Lu-{hkmRfIZx1*rKs?@Q~-XJh1(ALYmp z9ktRm#qtXhVs2>n>e;{T60w_8lYd)60{f_*bK!~QNnWGz(93)0)jOnj%Uq}mvMShd zA>rZnB-7oEC8Rb4Pd6d#0D!Rl5ETv?XyNd6Bq2lqzP7;EFOdYN7PC?zk-&0@g=mOK zzZxd=a3mqVV4(kg%R}H)wl7c6x=(rIQ-{(I?kYli74EL<6M-1NokWK~Zet?@u8{yh zj;g?ve!w!y66`@mQ@*q@9@@`>Lu5v&7Nhx){sxw5K>$9pRkD?0_xyP*`zG(cK(y_F zWaClHcoVe%ifKaXkm_a{pqR{`L$Qq@4%~#n%@n`Wc4pSFVS4r!WJZqMRutdZFzh^e_o8b^X z)&s`!ci=Z94M~8%qkxeVhh%a1jm9UzpH=|Lzt7(PN9cVq$Gv=@U-PtJn42i$Q2p@8 z-3$XR{i}~(?bPL_ntpQW$-b-p5Ni8-;vVBvdaV>@<QgsfbE((1h!|hI z#uluE4r)I)uq)i;R*9gH<~T70t=fvVK2iK?qX{f|Qobl~Np{yvr-+i0&mzI`~UMzotI_oRnijTz#h zE{aw^<5j5QuvzUj^Guc@R(NblZSeew&dFWy>EYW+WQ45=n!~e3^sn@;oF09f;Mx<_ z_$FnZNbD%V#3?~;PVd!^pGSi;L@AbthrR1|>SiUnk@=?9dT$_FUdWfc^_{o;`cX34fhIEB#M$1O9q)BdMBbGYI*`}!zAl_x`Ea+9 zFUK_Wpf=di$`ZbVjE=JF1zq}w-8Y@gD@DZKE+36;H!vN~@=kFtk=@t*F{I)0&QLpn zncQ;%5=22vc5U)(9_-jz^83QI9V(S$%ah^NBl$)Ck~O+_eYj|N1Ic$Ap7hzTu0mH= zSy`sz+H^ri8X0rN=3Qn-?O{Kp8Z$)a*Ry5!F>0mXIh|cVH$B>r4dMZ7E_K+88p-mWh)3 zCxd0a25;m53h=AK_D$8p@p@a=S3tHRv2a+6xtNRo4Mp$AXInio;cGD8XN7_Tqn0w6 zd-Ei%roLo_=oc`SRie@&ql4E4_VNbAhSweqP2(`8oSv0@AJZ*o>ojsepWx%^BZC%U zL)*{Q=iJ-3+t}noaSk;t^-;z}?j6fAbfU+xj4NkbbF3sdHEm1p$x$VHt&y}WV;0xQ zItMW#jfEa%%8Cjh!7!0LJt4t4F-NPgga)%gR9}7FBbnX4QqMmgugv2<6Z;X0{nVcQ zX*E7!G5k)ARIR%5?Hu$itG!w@yFz*y^gBmPo2si9{lpl^2=lP-Nr?wXFO3^m-;=!3 znmCuKJfXaHNYS(TSn^!f&a)pb?V0M0Fx(@ZgXPtSun6w&cZdj$MbLw+?Rc3?{M&SZ zUppkWNTfBi^Lwia(B$6|#Bd;w-z1I@O@$-bfa^dOEhPzvw*9}6NBPor6 zB&dLK(7ei!mXy{gClq>l)r00TLw^MOE{>t1eJ?e28%{BVpj&Us29e$_y`I#dQdm2- z^v=12cQu~emr%%s{HS-DSPQc)yw-a%S3oi|Aj6ar-E&;?l$MUqAerKBSIw|&hvf?K z5J;lJ{@CQZ!J1(=`H0a>j(s(j`@%9DIk%y-$WQH^+vad#uyH+H@uUXI4O>IK=`23TCd5LYE z#TQQn+{wmLoB@jUcA!`x>u*9u*l^irF;xA!a`5|7QK>>#r z`*#-QXC@d0*faEoUki;!O9Q!-#h^F*T9|Li{}MX5^H{gCP(;@Ad!gOA%_H=uyNt3@ zceEKwtr$04p}scJ_O_kZsJY3n!Q&Zh4EA!u)mZ}i$gradUXU7g;%2_^n-jZ2K5}gf zNm?)*0FT3Mx<`=p-lD^AqR&V6-0Wi>3z4oiOR|}WXBbLre;VZE1*B1-8^ZaMj>Ux9E;jN#Z$ z-cJRIV>z=29H>W^-}Bv@A0+9dn0LO@H!rpt_kw=8lu7}XM*M_a!Mi)?if^z|I&sa8 z_S|xt$@&F-=e*vO*{%~NNk)aKXWmpeb+kzz8nwUQv8jzm0c|{NgSz0sIikMF`#uu* zCYeC6l^VX%`fRF#zUy-0T>F%}%#zyP&iL9tPYsJh5E>(72T4NqQjXFh(ozy=5eW&j zlZc(Yge@S6C1lW!5@<;WNahDRMbpz^OrP*6_VNyCY0heoq6Yzp)ZcfG{nB^kz zX7(o?zAjgPG`6O_E*uWsILumX&0OEEvt!9qL%c_E!1aNsK~43|j%MW3U1K8?)FZn6fot)p@1>B+hkiPle_S10l`ng0!1JHOBMsbh;J+g0^b*d->1~S zFAHeE%m6Q;r0fPSBZW_*LC^!>W&ZAE3yb(|-~s{{xPSnG3t-M&nO*UvW)Z#G=Xn`R zts`-3{<=BGMP+6|w~77wmurY*n2=hxBAd6dy^?mjN7F|>E7O!gRMsln1E)hPKaHaZ zaX1!{a**5o+6Ari6Ne6T4V*KoAQNuB_PkiAG?esO?^%ln2bl;boC3!&hP*UlZ?BN( zcT}q0uDbNyl zOL04!Ht2SW{LJcz(0*!m9aH|?P~Slsxf@ys`lhB-PQ^SwTyZ#-`ME;*N$c@Ay(3KX zIbs&0$-6{K#m(>DP*}q}tt5~yuef$vCZa1VO8A4W=_w9Lo@QB3he)Ga=c%qTavgcN zc#9x5VaaB;)3D)W%CWjT9R55uJNd7-^YP2@q|5G=>If@8UCP3Bsn}`KmfdxTUn|Sz z_%M(4Qx0tf!h7S6^@!IECWlqD5Y0-zL zo=s`L)e^Ww%U^gY+&St^yj`$Oh1ii^v-4IBLHzu4Qy$IyNy15r(t3?UM^)omNcY|C zE>IEkPhIl-6pS(#rnNqpnyH{Ce&j{j@g1)(=q{cut5eT*PwyIhcKqZwdJ6dE;S8~qF8?dRQ&4e zJRe(-K4=`mB>J?^-DzWXtcyvTWns7S3B%5^FK#0W#G(S{-pDf-bXT(m zrN|CXIJBwC2ZwSk(1sT#`^O|KKIBEH3pT}5*X9=!ZaX)1XyuS-YPR4WK{slc#j-8sAjss|Cty8T@JKI+XI{^CWT4*qbpshiC7K zJhr@0r6o&tkF4q5)zYzw=l%4@4b;qKFg|=tk>!hgpI!^gpgVT zR0tR3SHSL})o~)fQ>pV|C@GS~i#}ZKQs9`PpkrRMwV_>XGpoH+TI|4!g-`PgIhlMz zj|$Q{r>*UkMl6ZXA5$O-B6>np9>7j_+t#*v_T@ch~@{o$Z4? z%TcelSV$`%)z+lWh+^-A3EV9|SFlGdh)wcdS8ndb&`{15%~bX)s~TKUA1-`qaJ!+M zHvB#ym}&BzbVkTd?e%AsT!#YQTwD2k;yroPJC|M8K0{N;eTf4D0Uq|JgqK_ znQ`U>Z^v+i&M1+U?^!Ks&$n*OIeyN}$5dBS?T&KWxj;*@C{4F7Ar~9#Jv?074E<;+ zLiHb^vGlVLmVOdXCZzt|3)cpx@C%!8i>a9%Jp{rU$u@=NTSc}$8# zb0Se3iEC76!VfVj6~8$Dl#|t${M82xWOI#$d#NDpUY`fGmTq2JFNrL3TzBoMo)f;ZZ=u}sev4avbepVM z*I`T?MvJIeF0~Ky79}WixBZz7w|qTyS6@7z1o!sDB67@Papt{Q>6hfIygokm^W(zq z3~VmzE=$6+*VU3JKks)VDa~p?Xg(m>qi1$i^Lhy4Mr*U_fWTQxktlRQhKNtI8PnS24}#R*bnum##+E9FKnW<#I+^=ME2kAIs#394xH{gr!yaX0s6x z0D^;79OQk!gShBiS`^4)0Z*3yEy00>%Mp=p3Jx{kIIwU5KpgRaRgeS7(AT1mSdbCG zLFmkn>)KKPGj?}1HB$;=hE1jAfReIYbg2=*HMZj5jCoNcg zzVlfaQ4kxnA3{bU;EUPOH}j*f|LxJRXbBk=5fuq#Sr8&5CG{txVY9K6j{t$=1H$<% zHg$EmAbG#l)VGEh7qe2-1#OR)Lrs3BP5ZDC>5}5+Z%o}&KnBAeU7ZR$q%CZ7 zw|UIADe#7ZlaS>sy%8T0&921El*;;;lr}NU7P2UZRH^0;9zSBNvaMIAMuwzP`PG?{ zXMT_wFE&q&qVwGcjp#=W+y^n{2i51zHDWPG*!*psPuWBpmv@}mce=5q(E5ojttbCI zrsdeE+5y|o>WzG?+|D$oE~?aHmc1hLD{ngx{9$1Ce78a$yoPo&@+`N8Q9 z!CBRanNIC5o@1F0%8TYh1eSqOSoKTNbXOp^l14e524>i>udpWCkbn=4A;V^aPyW)rTAN4T#qX?Ei zuc`KYG<}#fo@-@y=!twvvSsh%%$+U&YOLNjO%g}RKq8Qo2u2*QrT!aY^?s*pprK~t zHB?*}QFJO4eHw~R`awyJhUCBLm~arMxe<@>_+59r$+gu}&aD`p;yP-W9yr#9Dt z4{v9K>+cs`;2Bx2n{qQYBM~yds?x09G&D)`J9qU%h2X;uNbDL`W z&nQ#3UTcWF7dbB-zJCwPd`8ILQ--i>GE_T0h=oKuJ}<6z8@>PdK1z+usJoqyE_Kd?$IK4x z@*y3t_D|;|v3*gd&*oJ>Hv}7aizd!LBe&$J5j_5>Nb}0lYu^Z4H?N@L=!cg`OJr*& z?>+3pR{1_+U933@XNy{8juSMNt+0I2N@0=_ddzPZ$(wYMcL{^yqBH^@?uZ%laV)i# z=)T~uDKG9nTX9J_x2=OwNoO#2SuitiyA$-Z)*quiV1M{SM!XpFeU57u)uk_0ccifnz!7c-=MEIpMGl58Zm zUP$#nwMlyIe_RU}KmG!E4Vt!i4XRY+Sk|uJGK|BoK2<-jK7TKyZ`}(cB`LGvGuYS~ zgG>H*uKxdUp&E?VtF3+l$?b`O-Do$xxOA@MR;9JWb~fy@(B5g(YUL9WxP6-0rKaJ1 zrbX3e{n_^hDxd5uXNx#h!pLag;kR}{#DiNI)zUhn?$YVSvd`8vMVu-{p+DD)N3emh z>oI|xA$^pZBlDMz>UHUgLrxivSEtu+N9(9uAP**eCYU52UqvkbyiA|lU?%bdcQ^gE zq`;khrghaGc>?}@0mPb$jEPP=PazQA%u4;sd^wB(_s$lrD2dgE-jyhXveVAoXL5(_ z$6h}Pb3XmBU8l>vc%Tnr*TiWf6qduDp6*CyA9b3XPx1G77*6mInB(@-AwlKlna*TM<<_Eg}m+RKQ7zqwE z4X_CY7YV+xx&Xo-{qI^`ey8l8nf`wiVS}gt!R{DDwXJ3Lr7qVJUa{*<5_$fsMTe8i zu_8rrG}ieavE&x=d~ZWpLxev)^zG1aoAG-6{Ee>PNI(jGTxzK)x=evw1_g zjXL_4ddV(3nzz+Y$e`J$0+TCGz0sazq1*;doNp*OZ>ShtHZtM-z+L_JX+W?*j+~_n z+2GZ%jE;*{r}>E^E_=6NVlDSl_NiX~py13N(mXF@l!GM*1ib74ya7Iv^IvQr}J+tYxL&*Kb0^pb}hE>b1BAwRkfioW@msNO&A)%fkEKwV=a z{H8z&RW(@=NJUajL|hG$MGHX!8!9{Jk19KA<1ZkfbZl|YwMVJAd)d2fU2#D40fG?r ziqVl0;@nBKY5PGEl2Q^<`!_Rymti9V@`vQU8=AmLFANDnWM2ya)I3BCJ`e~-qRk&+ z8%LS0C*qDuZMhbK29E4+p*(oAHJc0~!Cg;4oP)~Q^82Uu;ANp6NycaqyykiT!Ohxha(O1(`T9TvjOg~>9`Z|evTvd$d;C~#Qdy$|8Q5uv z>8w4n9%f(hbq+>e(Y@bnu;P`ROKvV6h@ZKCU80TC%7u^zU0&LY-S^Sjd2iH+Qvu;CW9d(@T|A2RHZ!gy#V zN=w3a9Y|wgFk`)5AgD+5(DLB4aN3>lrGQs~v3krttu4J8L%s6UAdcn(n0a&fnRn*z zwF5VZuV1J&TZu0$90M_ZXR8R%6hE*T(03kWgUKRe;bWzay}g&(cgnCx{h zJZV2gL!3<9<`k~8GaVMPRr0}_gNqX)zD!%g5cN87{lTi(fzno1kqh(*1A|vlz2wBF z`XUd<|!HD1(>3}W8va=X9WueIkN zbD=3W=Sip;`Z#tZt#OBI*8RpNRf66LrBBLDgVPN|>pjmrVy`>5h8~yFGpbK8T{do~ z_m-H~87@B-Fg-m=M_O5WX0~rKzks#WYmFk?JK{{V+1to>;yNLg>XRq~n!B7`I}mrX zupB~7TD|R&`5)x?x#>$<8+6r~N#JuqZ-g3&LG&DS hVm7U;w4-p`=g_p#b=PIm1|N#6hYj`B@Jcfb_CG2(4kG{n diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/net46/System.Numerics.Vectors.xml b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/net46/System.Numerics.Vectors.xml deleted file mode 100644 index 51297939a..000000000 --- a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/net46/System.Numerics.Vectors.xml +++ /dev/null @@ -1,2597 +0,0 @@ - - - - System.Numerics.Vectors - - - -

      Represents a 3x2 matrix. - - - Creates a 3x2 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a rotation matrix using the given rotation in radians. - The amount of rotation, in radians. - The rotation matrix. - - - Creates a rotation matrix using the specified rotation in radians and a center point. - The amount of rotation, in radians. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified X and Y components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. - The uniform scale to use. - The center offset. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The center point. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the given scale. - The uniform scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale with an offset from the specified center point. - The scale to use. - The center offset. - The scaling matrix. - - - Creates a skew matrix from the specified angles in radians. - The X angle, in radians. - The Y angle, in radians. - The skew matrix. - - - Creates a skew matrix from the specified angles in radians and a center point. - The X angle, in radians. - The Y angle, in radians. - The center point. - The skew matrix. - - - Creates a translation matrix from the specified 2-dimensional vector. - The translation position. - The translation matrix. - - - Creates a translation matrix from the specified X and Y components. - The X position. - The Y position. - The translation matrix. - - - Returns a value that indicates whether this instance and another 3x2 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant for this matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - The multiplicative identify matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Represents a 4x4 matrix. - - - Creates a object from a specified object. - A 3x2 matrix. - - - Creates a 4x4 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the third element in the first row. - The value to assign to the fourth element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the third element in the second row. - The value to assign to the third element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - The value to assign to the third element in the third row. - The value to assign to the fourth element in the third row. - The value to assign to the first element in the fourth row. - The value to assign to the second element in the fourth row. - The value to assign to the third element in the fourth row. - The value to assign to the fourth element in the fourth row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a spherical billboard that rotates around a specified object position. - The position of the object that the billboard will rotate around. - The position of the camera. - The up vector of the camera. - The forward vector of the camera. - The created billboard. - - - Creates a cylindrical billboard that rotates around a specified axis. - The position of the object that the billboard will rotate around. - The position of the camera. - The axis to rotate the billboard around. - The forward vector of the camera. - The forward vector of the object. - The billboard matrix. - - - Creates a matrix that rotates around an arbitrary vector. - The axis to rotate around. - The angle to rotate around axis, in radians. - The rotation matrix. - - - Creates a rotation matrix from the specified Quaternion rotation value. - The source Quaternion. - The rotation matrix. - - - Creates a rotation matrix from the specified yaw, pitch, and roll. - The angle of rotation, in radians, around the Y axis. - The angle of rotation, in radians, around the X axis. - The angle of rotation, in radians, around the Z axis. - The rotation matrix. - - - Creates a view matrix. - The position of the camera. - The target towards which the camera is pointing. - The direction that is "up" from the camera's point of view. - The view matrix. - - - Creates an orthographic perspective matrix from the given view volume dimensions. - The width of the view volume. - The height of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a customized orthographic projection matrix. - The minimum X-value of the view volume. - The maximum X-value of the view volume. - The minimum Y-value of the view volume. - The maximum Y-value of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a perspective projection matrix from the given view volume dimensions. - The width of the view volume at the near view plane. - The height of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. - The field of view in the y direction, in radians. - The aspect ratio, defined as view space width divided by height. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a customized perspective projection matrix. - The minimum x-value of the view volume at the near view plane. - The maximum x-value of the view volume at the near view plane. - The minimum y-value of the view volume at the near view plane. - The maximum y-value of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a matrix that reflects the coordinate system about a specified plane. - The plane about which to create a reflection. - A new matrix expressing the reflection. - - - Creates a matrix for rotating points around the X axis. - The amount, in radians, by which to rotate around the X axis. - The rotation matrix. - - - Creates a matrix for rotating points around the X axis from a center point. - The amount, in radians, by which to rotate around the X axis. - The center point. - The rotation matrix. - - - The amount, in radians, by which to rotate around the Y axis from a center point. - The amount, in radians, by which to rotate around the Y-axis. - The center point. - The rotation matrix. - - - Creates a matrix for rotating points around the Y axis. - The amount, in radians, by which to rotate around the Y-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis. - The amount, in radians, by which to rotate around the Z-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis from a center point. - The amount, in radians, by which to rotate around the Z-axis. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a uniform scaling matrix that scale equally on each axis. - The uniform scaling factor. - The scaling matrix. - - - Creates a scaling matrix with a center point. - The vector that contains the amount to scale on each axis. - The center point. - The scaling matrix. - - - Creates a uniform scaling matrix that scales equally on each axis with a center point. - The uniform scaling factor. - The center point. - The scaling matrix. - - - Creates a scaling matrix from the specified X, Y, and Z components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The center point. - The scaling matrix. - - - Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. - The direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. - - - Creates a translation matrix from the specified 3-dimensional vector. - The amount to translate in each axis. - The translation matrix. - - - Creates a translation matrix from the specified X, Y, and Z components. - The amount to translate on the X axis. - The amount to translate on the Y axis. - The amount to translate on the Z axis. - The translation matrix. - - - Creates a world matrix with the specified parameters. - The position of the object. - The forward direction of the object. - The upward direction of the object. Its value is usually [0, 1, 0]. - The world matrix. - - - Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. - The source matrix. - When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. - When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. - When the method returns, contains the translation component of the transformation matrix if the operation succeeded. - true if matrix was decomposed successfully; otherwise, false. - - - Returns a value that indicates whether this instance and another 4x4 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant of the current 4x4 matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - Gets the multiplicative identity matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The third element of the first row. - - - - The fourth element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The third element of the second row. - - - - The fourth element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - The third element of the third row. - - - - The fourth element of the third row. - - - - The first element of the fourth row. - - - - The second element of the fourth row. - - - - The third element of the fourth row. - - - - The fourth element of the fourth row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to care - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Transforms the specified matrix by applying the specified Quaternion rotation. - The matrix to transform. - The rotation t apply. - The transformed matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Transposes the rows and columns of a matrix. - The matrix to transpose. - The transposed matrix. - - - Represents a three-dimensional plane. - - - Creates a object from a specified four-dimensional vector. - A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. - - - Creates a object from a specified normal and the distance along the normal from the origin. - The plane's normal vector. - The plane's distance from the origin along its normal vector. - - - Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. - The X component of the normal. - The Y component of the normal. - The Z component of the normal. - The distance of the plane along its normal from the origin. - - - Creates a object that contains three specified points. - The first point defining the plane. - The second point defining the plane. - The third point defining the plane. - The plane containing the three points. - - - The distance of the plane along its normal from the origin. - - - - Calculates the dot product of a plane and a 4-dimensional vector. - The plane. - The four-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. - The plane. - The 3-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the vector of this plane. - The plane. - The three-dimensional vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another plane object are equal. - The other plane. - true if the two planes are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - The normal vector of the plane. - - - - Creates a new object whose normal vector is the source plane's normal vector normalized. - The source plane. - The normalized plane. - - - Returns a value that indicates whether two planes are equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether two planes are not equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the string representation of this plane object. - A string that represents this object. - - - Transforms a normalized plane by a 4x4 matrix. - The normalized plane to transform. - The transformation matrix to apply to plane. - The transformed plane. - - - Transforms a normalized plane by a Quaternion rotation. - The normalized plane to transform. - The Quaternion rotation to apply to the plane. - A new plane that results from applying the Quaternion rotation. - - - Represents a vector that is used to encode three-dimensional physical rotations. - - - Creates a quaternion from the specified vector and rotation parts. - The vector part of the quaternion. - The rotation part of the quaternion. - - - Constructs a quaternion from the specified components. - The value to assign to the X component of the quaternion. - The value to assign to the Y component of the quaternion. - The value to assign to the Z component of the quaternion. - The value to assign to the W component of the quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Concatenates two quaternions. - The first quaternion rotation in the series. - The second quaternion rotation in the series. - A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. - - - Returns the conjugate of a specified quaternion. - The quaternion. - A new quaternion that is the conjugate of value. - - - Creates a quaternion from a vector and an angle to rotate about the vector. - The vector to rotate around. - The angle, in radians, to rotate around the vector. - The newly created quaternion. - - - Creates a quaternion from the specified rotation matrix. - The rotation matrix. - The newly created quaternion. - - - Creates a new quaternion from the given yaw, pitch, and roll. - The yaw angle, in radians, around the Y axis. - The pitch angle, in radians, around the X axis. - The roll angle, in radians, around the Z axis. - The resulting quaternion. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Calculates the dot product of two quaternions. - The first quaternion. - The second quaternion. - The dot product. - - - Returns a value that indicates whether this instance and another quaternion are equal. - The other quaternion. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Gets a quaternion that represents no rotation. - A quaternion whose values are (0, 0, 0, 1). - - - Returns the inverse of a quaternion. - The quaternion. - The inverted quaternion. - - - Gets a value that indicates whether the current instance is the identity quaternion. - true if the current instance is the identity quaternion; otherwise, false. - - - Calculates the length of the quaternion. - The computed length of the quaternion. - - - Calculates the squared length of the quaternion. - The length squared of the quaternion. - - - Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. - The first quaternion. - The second quaternion. - The relative weight of quaternion2 in the interpolation. - The interpolated quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Divides each component of a specified by its length. - The quaternion to normalize. - The normalized quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Returns a value that indicates whether two quaternions are equal. - The first quaternion to compare. - The second quaternion to compare. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether two quaternions are not equal. - The first quaternion to compare. - The second quaternion to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Interpolates between two quaternions, using spherical linear interpolation. - The first quaternion. - The second quaternion. - The relative weight of the second quaternion in the interpolation. - The interpolated quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this quaternion. - The string representation of this quaternion. - - - The rotation component of the quaternion. - - - - The X value of the vector component of the quaternion. - - - - The Y value of the vector component of the quaternion. - - - - The Z value of the vector component of the quaternion. - - - - Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. - The vector type. T can be any primitive numeric type. - - - Creates a vector whose components are of a specified type. - The numeric type that defines the type of the components in the vector. - - - Creates a vector from a specified array. - A numeric array. - values is null. - - - Creates a vector from a specified array starting at a specified index position. - A numeric array. - The starting index position from which to create the vector. - values is null. - index is less than zero. -or- The length of values minus index is less than . - - - Copies the vector instance to a specified destination array. - The array to receive a copy of the vector values. - destination is null. - The number of elements in the current vector is greater than the number of elements available in the destination array. - - - Copies the vector instance to a specified destination array starting at a specified index position. - The array to receive a copy of the vector values. - The starting index in destination at which to begin the copy operation. - destination is null. - The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. - index is less than zero or greater than the last index in destination. - - - Returns the number of elements stored in the vector. - The number of elements stored in the vector. - Access to the property getter via reflection is not supported. - - - Returns a value that indicates whether this instance is equal to a specified vector. - The vector to compare with this instance. - true if the current instance and other are equal; otherwise, false. - - - Returns a value that indicates whether this instance is equal to a specified object. - The object to compare with this instance. - true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. - - - Returns the hash code for this instance. - The hash code. - - - Gets the element at a specified index. - The index of the element to return. - The element at index index. - index is less than zero. -or- index is greater than or equal to . - - - Returns a vector containing all ones. - A vector containing all ones. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise And of left and right. - - - Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise Or of the elements in left and right. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Returns a value that indicates whether each pair of elements in two specified vectors are equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise XOr of the elements in left and right. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Returns a value that indicates whether any single pair of elements in the specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if any element pairs in left and right are equal. false if no element pairs are equal. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar value. - The source vector. - A scalar value. - The scaled vector. - - - Multiplies a vector by the given scalar. - The scalar value. - The source vector. - The scaled vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The one's complement vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates a given vector. - The vector to negate. - The negated vector. - - - Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Returns the string representation of this vector using default formatting. - The string representation of this vector. - - - Returns the string representation of this vector using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns a vector containing all zeroes. - A vector containing all zeroes. - - - Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. - - - Returns a new vector whose elements are the absolute values of the given vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The absolute value vector. - - - Returns a new vector whose values are the sum of each pair of elements from two given vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The summed vector. - - - Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of signed bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The vector type. T can be any primitive numeric type. - The new vector with elements selected based on the mask. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The divided vector. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The dot product. - - - Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether each pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left and right are equal; otherwise, false. - - - Returns a value that indicates whether any single pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element pair in left and right is equal; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. - - - Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. - true if vector operations are subject to hardware acceleration; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than or equal to the corresponding element in right; otherwise, false. - - - Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The maximum vector. - - - Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The minimum vector. - - - Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. - The scalar value. - The vector. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - Returns a new vector whose values are the product of each pair of elements in two specified vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The product vector. - - - Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. - The vector. - The scalar value. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose elements are the negation of the corresponding element in the specified vector. - The source vector. - The vector type. T can be any primitive numeric type. - The negated vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector whose elements are the square roots of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The square root vector. - - - Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The difference vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Represents a vector with two single-precision floating-point values. - - - Creates a new object whose two elements have the same value. - The value to assign to both elements. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of the vector. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 2 elements are equal to one. - A vector whose two elements are equal to one (that is, it returns the vector (1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 3x2 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 3x2 matrix. - The source vector. - The matrix. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0). - The vector (1,0). - - - Gets the vector (0,1). - The vector (0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - Returns a vector whose 2 elements are equal to zero. - A vector whose two elements are equal to zero (that is, it returns the vector (0,0). - - - Represents a vector with three single-precision floating-point values. - - - Creates a new object whose three elements have the same value. - The value to assign to all three elements. - - - Creates a new object from the specified object and the specified value. - The vector with two elements. - The additional value to assign to the field. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the cross product of two vectors. - The first vector. - The second vector. - The cross product. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 3 elements are equal to one. - A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0,0). - The vector (1,0,0). - - - Gets the vector (0,1,0). - The vector (0,1,0).. - - - Gets the vector (0,0,1). - The vector (0,0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 3 elements are equal to zero. - A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). - - - Represents a vector with four single-precision floating-point values. - - - Creates a new object whose four elements have the same value. - The value to assign to all four elements. - - - Constructs a new object from the specified object and a W component. - The vector to use for the X, Y, and Z components. - The W component. - - - Creates a new object from the specified object and a Z and a W component. - The vector to use for the X and Y components. - The Z component. - The W component. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 4 elements are equal to one. - Returns . - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a four-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a four-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a three-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a two-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a two-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a three-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Gets the vector (0,0,0,1). - The vector (0,0,0,1). - - - Gets the vector (1,0,0,0). - The vector (1,0,0,0). - - - Gets the vector (0,1,0,0). - The vector (0,1,0,0).. - - - Gets a vector whose 4 elements are equal to zero. - The vector (0,0,1,0). - - - The W component of the vector. - - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 4 elements are equal to zero. - A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). - - - \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netcoreapp2.0/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netcoreapp2.0/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard1.0/System.Numerics.Vectors.dll b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard1.0/System.Numerics.Vectors.dll deleted file mode 100644 index 46308fdb3acf521d69320d5d9f7436fafb898d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161152 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 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard1.0/System.Numerics.Vectors.xml b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard1.0/System.Numerics.Vectors.xml deleted file mode 100644 index 51297939a..000000000 --- a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard1.0/System.Numerics.Vectors.xml +++ /dev/null @@ -1,2597 +0,0 @@ - - - - System.Numerics.Vectors - - - - Represents a 3x2 matrix. - - - Creates a 3x2 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a rotation matrix using the given rotation in radians. - The amount of rotation, in radians. - The rotation matrix. - - - Creates a rotation matrix using the specified rotation in radians and a center point. - The amount of rotation, in radians. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified X and Y components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. - The uniform scale to use. - The center offset. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The center point. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the given scale. - The uniform scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale with an offset from the specified center point. - The scale to use. - The center offset. - The scaling matrix. - - - Creates a skew matrix from the specified angles in radians. - The X angle, in radians. - The Y angle, in radians. - The skew matrix. - - - Creates a skew matrix from the specified angles in radians and a center point. - The X angle, in radians. - The Y angle, in radians. - The center point. - The skew matrix. - - - Creates a translation matrix from the specified 2-dimensional vector. - The translation position. - The translation matrix. - - - Creates a translation matrix from the specified X and Y components. - The X position. - The Y position. - The translation matrix. - - - Returns a value that indicates whether this instance and another 3x2 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant for this matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - The multiplicative identify matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Represents a 4x4 matrix. - - - Creates a object from a specified object. - A 3x2 matrix. - - - Creates a 4x4 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the third element in the first row. - The value to assign to the fourth element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the third element in the second row. - The value to assign to the third element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - The value to assign to the third element in the third row. - The value to assign to the fourth element in the third row. - The value to assign to the first element in the fourth row. - The value to assign to the second element in the fourth row. - The value to assign to the third element in the fourth row. - The value to assign to the fourth element in the fourth row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a spherical billboard that rotates around a specified object position. - The position of the object that the billboard will rotate around. - The position of the camera. - The up vector of the camera. - The forward vector of the camera. - The created billboard. - - - Creates a cylindrical billboard that rotates around a specified axis. - The position of the object that the billboard will rotate around. - The position of the camera. - The axis to rotate the billboard around. - The forward vector of the camera. - The forward vector of the object. - The billboard matrix. - - - Creates a matrix that rotates around an arbitrary vector. - The axis to rotate around. - The angle to rotate around axis, in radians. - The rotation matrix. - - - Creates a rotation matrix from the specified Quaternion rotation value. - The source Quaternion. - The rotation matrix. - - - Creates a rotation matrix from the specified yaw, pitch, and roll. - The angle of rotation, in radians, around the Y axis. - The angle of rotation, in radians, around the X axis. - The angle of rotation, in radians, around the Z axis. - The rotation matrix. - - - Creates a view matrix. - The position of the camera. - The target towards which the camera is pointing. - The direction that is "up" from the camera's point of view. - The view matrix. - - - Creates an orthographic perspective matrix from the given view volume dimensions. - The width of the view volume. - The height of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a customized orthographic projection matrix. - The minimum X-value of the view volume. - The maximum X-value of the view volume. - The minimum Y-value of the view volume. - The maximum Y-value of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a perspective projection matrix from the given view volume dimensions. - The width of the view volume at the near view plane. - The height of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. - The field of view in the y direction, in radians. - The aspect ratio, defined as view space width divided by height. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a customized perspective projection matrix. - The minimum x-value of the view volume at the near view plane. - The maximum x-value of the view volume at the near view plane. - The minimum y-value of the view volume at the near view plane. - The maximum y-value of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a matrix that reflects the coordinate system about a specified plane. - The plane about which to create a reflection. - A new matrix expressing the reflection. - - - Creates a matrix for rotating points around the X axis. - The amount, in radians, by which to rotate around the X axis. - The rotation matrix. - - - Creates a matrix for rotating points around the X axis from a center point. - The amount, in radians, by which to rotate around the X axis. - The center point. - The rotation matrix. - - - The amount, in radians, by which to rotate around the Y axis from a center point. - The amount, in radians, by which to rotate around the Y-axis. - The center point. - The rotation matrix. - - - Creates a matrix for rotating points around the Y axis. - The amount, in radians, by which to rotate around the Y-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis. - The amount, in radians, by which to rotate around the Z-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis from a center point. - The amount, in radians, by which to rotate around the Z-axis. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a uniform scaling matrix that scale equally on each axis. - The uniform scaling factor. - The scaling matrix. - - - Creates a scaling matrix with a center point. - The vector that contains the amount to scale on each axis. - The center point. - The scaling matrix. - - - Creates a uniform scaling matrix that scales equally on each axis with a center point. - The uniform scaling factor. - The center point. - The scaling matrix. - - - Creates a scaling matrix from the specified X, Y, and Z components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The center point. - The scaling matrix. - - - Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. - The direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. - - - Creates a translation matrix from the specified 3-dimensional vector. - The amount to translate in each axis. - The translation matrix. - - - Creates a translation matrix from the specified X, Y, and Z components. - The amount to translate on the X axis. - The amount to translate on the Y axis. - The amount to translate on the Z axis. - The translation matrix. - - - Creates a world matrix with the specified parameters. - The position of the object. - The forward direction of the object. - The upward direction of the object. Its value is usually [0, 1, 0]. - The world matrix. - - - Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. - The source matrix. - When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. - When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. - When the method returns, contains the translation component of the transformation matrix if the operation succeeded. - true if matrix was decomposed successfully; otherwise, false. - - - Returns a value that indicates whether this instance and another 4x4 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant of the current 4x4 matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - Gets the multiplicative identity matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The third element of the first row. - - - - The fourth element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The third element of the second row. - - - - The fourth element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - The third element of the third row. - - - - The fourth element of the third row. - - - - The first element of the fourth row. - - - - The second element of the fourth row. - - - - The third element of the fourth row. - - - - The fourth element of the fourth row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to care - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Transforms the specified matrix by applying the specified Quaternion rotation. - The matrix to transform. - The rotation t apply. - The transformed matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Transposes the rows and columns of a matrix. - The matrix to transpose. - The transposed matrix. - - - Represents a three-dimensional plane. - - - Creates a object from a specified four-dimensional vector. - A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. - - - Creates a object from a specified normal and the distance along the normal from the origin. - The plane's normal vector. - The plane's distance from the origin along its normal vector. - - - Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. - The X component of the normal. - The Y component of the normal. - The Z component of the normal. - The distance of the plane along its normal from the origin. - - - Creates a object that contains three specified points. - The first point defining the plane. - The second point defining the plane. - The third point defining the plane. - The plane containing the three points. - - - The distance of the plane along its normal from the origin. - - - - Calculates the dot product of a plane and a 4-dimensional vector. - The plane. - The four-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. - The plane. - The 3-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the vector of this plane. - The plane. - The three-dimensional vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another plane object are equal. - The other plane. - true if the two planes are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - The normal vector of the plane. - - - - Creates a new object whose normal vector is the source plane's normal vector normalized. - The source plane. - The normalized plane. - - - Returns a value that indicates whether two planes are equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether two planes are not equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the string representation of this plane object. - A string that represents this object. - - - Transforms a normalized plane by a 4x4 matrix. - The normalized plane to transform. - The transformation matrix to apply to plane. - The transformed plane. - - - Transforms a normalized plane by a Quaternion rotation. - The normalized plane to transform. - The Quaternion rotation to apply to the plane. - A new plane that results from applying the Quaternion rotation. - - - Represents a vector that is used to encode three-dimensional physical rotations. - - - Creates a quaternion from the specified vector and rotation parts. - The vector part of the quaternion. - The rotation part of the quaternion. - - - Constructs a quaternion from the specified components. - The value to assign to the X component of the quaternion. - The value to assign to the Y component of the quaternion. - The value to assign to the Z component of the quaternion. - The value to assign to the W component of the quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Concatenates two quaternions. - The first quaternion rotation in the series. - The second quaternion rotation in the series. - A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. - - - Returns the conjugate of a specified quaternion. - The quaternion. - A new quaternion that is the conjugate of value. - - - Creates a quaternion from a vector and an angle to rotate about the vector. - The vector to rotate around. - The angle, in radians, to rotate around the vector. - The newly created quaternion. - - - Creates a quaternion from the specified rotation matrix. - The rotation matrix. - The newly created quaternion. - - - Creates a new quaternion from the given yaw, pitch, and roll. - The yaw angle, in radians, around the Y axis. - The pitch angle, in radians, around the X axis. - The roll angle, in radians, around the Z axis. - The resulting quaternion. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Calculates the dot product of two quaternions. - The first quaternion. - The second quaternion. - The dot product. - - - Returns a value that indicates whether this instance and another quaternion are equal. - The other quaternion. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Gets a quaternion that represents no rotation. - A quaternion whose values are (0, 0, 0, 1). - - - Returns the inverse of a quaternion. - The quaternion. - The inverted quaternion. - - - Gets a value that indicates whether the current instance is the identity quaternion. - true if the current instance is the identity quaternion; otherwise, false. - - - Calculates the length of the quaternion. - The computed length of the quaternion. - - - Calculates the squared length of the quaternion. - The length squared of the quaternion. - - - Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. - The first quaternion. - The second quaternion. - The relative weight of quaternion2 in the interpolation. - The interpolated quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Divides each component of a specified by its length. - The quaternion to normalize. - The normalized quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Returns a value that indicates whether two quaternions are equal. - The first quaternion to compare. - The second quaternion to compare. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether two quaternions are not equal. - The first quaternion to compare. - The second quaternion to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Interpolates between two quaternions, using spherical linear interpolation. - The first quaternion. - The second quaternion. - The relative weight of the second quaternion in the interpolation. - The interpolated quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this quaternion. - The string representation of this quaternion. - - - The rotation component of the quaternion. - - - - The X value of the vector component of the quaternion. - - - - The Y value of the vector component of the quaternion. - - - - The Z value of the vector component of the quaternion. - - - - Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. - The vector type. T can be any primitive numeric type. - - - Creates a vector whose components are of a specified type. - The numeric type that defines the type of the components in the vector. - - - Creates a vector from a specified array. - A numeric array. - values is null. - - - Creates a vector from a specified array starting at a specified index position. - A numeric array. - The starting index position from which to create the vector. - values is null. - index is less than zero. -or- The length of values minus index is less than . - - - Copies the vector instance to a specified destination array. - The array to receive a copy of the vector values. - destination is null. - The number of elements in the current vector is greater than the number of elements available in the destination array. - - - Copies the vector instance to a specified destination array starting at a specified index position. - The array to receive a copy of the vector values. - The starting index in destination at which to begin the copy operation. - destination is null. - The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. - index is less than zero or greater than the last index in destination. - - - Returns the number of elements stored in the vector. - The number of elements stored in the vector. - Access to the property getter via reflection is not supported. - - - Returns a value that indicates whether this instance is equal to a specified vector. - The vector to compare with this instance. - true if the current instance and other are equal; otherwise, false. - - - Returns a value that indicates whether this instance is equal to a specified object. - The object to compare with this instance. - true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. - - - Returns the hash code for this instance. - The hash code. - - - Gets the element at a specified index. - The index of the element to return. - The element at index index. - index is less than zero. -or- index is greater than or equal to . - - - Returns a vector containing all ones. - A vector containing all ones. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise And of left and right. - - - Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise Or of the elements in left and right. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Returns a value that indicates whether each pair of elements in two specified vectors are equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise XOr of the elements in left and right. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Returns a value that indicates whether any single pair of elements in the specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if any element pairs in left and right are equal. false if no element pairs are equal. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar value. - The source vector. - A scalar value. - The scaled vector. - - - Multiplies a vector by the given scalar. - The scalar value. - The source vector. - The scaled vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The one's complement vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates a given vector. - The vector to negate. - The negated vector. - - - Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Returns the string representation of this vector using default formatting. - The string representation of this vector. - - - Returns the string representation of this vector using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns a vector containing all zeroes. - A vector containing all zeroes. - - - Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. - - - Returns a new vector whose elements are the absolute values of the given vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The absolute value vector. - - - Returns a new vector whose values are the sum of each pair of elements from two given vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The summed vector. - - - Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of signed bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The vector type. T can be any primitive numeric type. - The new vector with elements selected based on the mask. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The divided vector. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The dot product. - - - Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether each pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left and right are equal; otherwise, false. - - - Returns a value that indicates whether any single pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element pair in left and right is equal; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. - - - Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. - true if vector operations are subject to hardware acceleration; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than or equal to the corresponding element in right; otherwise, false. - - - Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The maximum vector. - - - Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The minimum vector. - - - Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. - The scalar value. - The vector. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - Returns a new vector whose values are the product of each pair of elements in two specified vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The product vector. - - - Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. - The vector. - The scalar value. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose elements are the negation of the corresponding element in the specified vector. - The source vector. - The vector type. T can be any primitive numeric type. - The negated vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector whose elements are the square roots of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The square root vector. - - - Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The difference vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Represents a vector with two single-precision floating-point values. - - - Creates a new object whose two elements have the same value. - The value to assign to both elements. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of the vector. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 2 elements are equal to one. - A vector whose two elements are equal to one (that is, it returns the vector (1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 3x2 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 3x2 matrix. - The source vector. - The matrix. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0). - The vector (1,0). - - - Gets the vector (0,1). - The vector (0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - Returns a vector whose 2 elements are equal to zero. - A vector whose two elements are equal to zero (that is, it returns the vector (0,0). - - - Represents a vector with three single-precision floating-point values. - - - Creates a new object whose three elements have the same value. - The value to assign to all three elements. - - - Creates a new object from the specified object and the specified value. - The vector with two elements. - The additional value to assign to the field. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the cross product of two vectors. - The first vector. - The second vector. - The cross product. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 3 elements are equal to one. - A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0,0). - The vector (1,0,0). - - - Gets the vector (0,1,0). - The vector (0,1,0).. - - - Gets the vector (0,0,1). - The vector (0,0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 3 elements are equal to zero. - A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). - - - Represents a vector with four single-precision floating-point values. - - - Creates a new object whose four elements have the same value. - The value to assign to all four elements. - - - Constructs a new object from the specified object and a W component. - The vector to use for the X, Y, and Z components. - The W component. - - - Creates a new object from the specified object and a Z and a W component. - The vector to use for the X and Y components. - The Z component. - The W component. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 4 elements are equal to one. - Returns . - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a four-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a four-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a three-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a two-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a two-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a three-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Gets the vector (0,0,0,1). - The vector (0,0,0,1). - - - Gets the vector (1,0,0,0). - The vector (1,0,0,0). - - - Gets the vector (0,1,0,0). - The vector (0,1,0,0).. - - - Gets a vector whose 4 elements are equal to zero. - The vector (0,0,1,0). - - - The W component of the vector. - - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 4 elements are equal to zero. - A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). - - - \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard2.0/System.Numerics.Vectors.dll b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard2.0/System.Numerics.Vectors.dll deleted file mode 100644 index a808165accf4b28833d22169931d4c879defd96d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163712 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�q8Bzlv}ROx-}ptnKD&8tasR$2=E({1 ztp{EE@|{B!;f1%B%nYnLpLgc1MIj&VY-KgOUYzsQ&x?KyXzu5Vo^fS#!|odooa%da z|HxTE19nB#8gycMaN>)hAFhmyuYb{6vo0HWBI=1oduRXC@8U%B3q1B{#(d54WC=E!th(*L$NEXZk~E;Y?qC?jIOSX z*pyYBE~Napwrtcl+)8@1j-!1&@yRO!iIkWHdtQGduN18^XPtS~dDDRW$ z(`N3PdURf+cT5B3UtaXiq#@&tLqj)~4P(KxR$i?&=9gOIo4!AJ-_T`Uovr5{|8{tX zBkY;1t_Su`-nAjE5{DKlQ(bHY3nlUy0$&_UwqQRQK8kr{C!E8ziSPl zca*IDe`5Z2v~@%}U;>YdaKzyJ?IalCK=_~A@BgdW`}KwStH1fG+ba)0H7u;osm-Uq z-9D#Rlb$R0o(M{5YPope%>zj*OB{CFdEMc(nKct<)a&%hJF^Eknt#cLogK6J!W5n5 zx>-H@@{~OdKaFVm>}yxA4Xz(@Ys{I+!9ScyS-kM$CaJrp{+h7QZ~v3;?qAhOz3Ao} z`O^mq(u>Z(cmziZJY?4cEtdi3dStWt&iHuR;J9EH#RlO$uKS{!6W+9St>IVk`h*|*jQm}i8{AVr zky#yGeq8@`lP(*#g{Hm!ZiA6=&Jla&ee=lp=?gRE_kvBUZ(X0aM%vr>v9vokHJ@y? z`zy2ea+tl}{Il8n4|l?M&E8h;Bn-1R%;(H8ZZ^)XP1NIFa*Uf=UgM9Z--X#rGXLAn ziwf(gm9-XjuUxt^$6|OM7>yYwN4eeKJ55-{!=*bt^}FwRcpnWNCF+ z$?zu%jDgGdemG{@hOk2ci(V+m+R#t_G{qj+bIys;v8VfOe7FDH`lo`WNh>yvy!!n9 z3y(+_Pk%VgpxHUK+v&@xHBaBRRp(xQxM}0!-+sAOHF8dv z>ALQ8@ur}Z*IpcEaL?SZFlPSX(Cxj1qE?V-BUd8(nnl-Z;_)KMY^nP{Vxi z%NnzPZvTF6|Fxm5&)l3iX-}`dXJ0Fxk-s7)>Ci8uK6*Q7bXLnti{`bA)Q+f|wW~ve zf`%2B{r?%VabM@P-`%|M^n2efSymFYA!YmUCIQXM{M+|_Vff=+I@j2=cI~R2? zbffFX_-S&hWIvQS{)coOYO$R;xL*Gkpd_Cv2 z-R+7tk9(*@Yr9z1=%aZRA3v1#kJUpvOj%f#xvp?w;2R&k-Su)n(e3BL^Vj_TO|P9V zG})EA`L*C@19IdJq3@-zNtmldutCo&jzP55!Y29P5JR4Zr zxOMn4ePQJjFEsn8^3sIejlMYFpvSJc7ZXojms~|t{GZ;LxAXhLAKrX*ue0SH^Y$kO z98Ipb@aV6t7jz8kQ)}3+z{R(n6)j5~6)lV5u-5^@?LT)gLC3%MotspjK37)21xK*g z#4)v>%4zgDd{)B=Z}s7{ztimS4XugRppsDS1Z%Ls9epq-G;%|~^R-{=IE0P8Sy=L> zW85kq8Aj*0g^qCxD#wj4A6Nc2U+)frS4;TPDhFOtg~O{Xd`aen*ItN2AtaYxYlQ+Q z6MT`tbHTq%czG2LF|xsjuT=5%mUt<+5RMdu0q8Xy@tn|iy@tbEb%n$h>6UH(+0wLP z%EHRN%Z$H1G3QLnio!(p_M^vMFFiD|_3|Dy%LBf9_scihIQJa*D0F(q&oh5-+VPox zoPWG_Wy!ub+edjqZakOPDDuN8Q8k_%RKIFw_L(WIuhmPw+~C*42hSw$c<0BTUW-0Z zufphQJLS;KH-eIvm0N2*w`bz;cIO`r_wQJFXk5WRMx{QofBv=L-{Z&CxO1`3#*ItI zu1ueock%VA^f2f1Yj$1v?8RsMPpsFaeY?e$$!&w?cfFJ)Em+vR<2x-(KemXx^+w3= zFFsM0Y_8jJX!hK+-e((zPcA(+O>Vs91?gx}lC`|a>@~Y8E}nU2_rm;}d2e0#czDpQ zlU?R4d&Y7qvUkwRg$pa1FLqSOO{*JR>#UG#0?S5y{Kfy6P4UMsIDC5eKu1uu)+(pJ z7w9DD-rf$Zaa!=u4qipXINL{`Qy4e*QS5z?gkJV%5wi z4y#ACuTjgq-tpGh;vILod*<~zeIcs$yz;RhwEt?B?VJADHJW4?zqwi3BYWqI);YWF z+Z{{ZzP#O0zOilC>9K2nSQ`;$xwUu7j|&IRc=^hm#Ve;h*K$e7(kiEW&i z(=y`y9|~>97k_#(KL5$52R=J=*K_CkIVzfts2=ia$yw2KFz~Xyb&W5>nx+A(C-fbs z1*Z`L~x^Sto!ZaNWbsHG!H>*#U|G)0eJD$q^|Kl8+jL66)JL5XXrffA%)xuPuC#Ve zlR=?Seh?@Nf>ZOLPX;?a{Dj$1tvXT6i&G`aVrHB1smbg3jokv1#yZL8Mi66DV} z&$ckBG}JrPTK6GMBMr}6n)3i3Nl2d{XGD44u1IH}xh?GW@yrRg&^6^zF=Wd6CX}T2 zTI~+=19pN5%WaHW99_*Zc)kMZ0TdBa-sJEc8kEsU5}X4UWg8+PZ=T8smppM1XEk@ znVVL}FgtKp&7Tdda_s~S5^v?y+n zbz3b|B{S;YOp#f8Grz@@@r(8&ckc_jd(T4@!nohqI-c*BF_Dkp1j@IlIrnAXVi9py zPRL5j;&p*d=}R5KPk$XXa{~YrcGd{s1&sMj`8oLcc%U3SJWw+ZBV!&z5IXY+Kuvj| zye5FacX;NajmfkkS~ntxl%Joz#QNbYCrH#EH`{)<7iN3I;h^6JPVZw7yg#4y_rGue z{2YM50irQH`mI4kqXwt|N=L^aqB&yOe|&+Xe%qg1!VxqsMq_ z;e_b{PJPH_tVD9jLA%ANH?wJjj_jn5r%#lSZKz`P)KEIK(t4zCzZ@DE63W{SYkW{0 zWtu0$p~0%z7qNVO(0C=3JI!0bS?}!{@8Y9)VIz2l!fDToo&`9e0xcX>y@ICMQFSO2 z5zQ63T^iUq!^$|E>dX%&Vq-KysNJaBWUjB_}W_Bh3{f z3ePJzT^G-t^Z{nyYT9x|CYA$V$$;8(=kw4Uh8xCaD!0IAtoWf&k5Zv(|A6wADlcT9 z%!4Xhm!i5wo^;dZ0(Y<2sO2k8rSg)B_6F2$;pxeFf;;cCDo4^exh+|_PF;FOT}Lm# zi{`&n58g`Bs%{|q)J5WaZ{>n=gXhX6mk?$CY)G=4!z)|U@!71s6=-VuA9j%???lN>-ovDiSrhEU84yq zMcC{O`ERn%=DB0#_eX2JG9X8rH*=nYDKimr&E{e%wiip4=?*;SL~+WsSbJ@~CZv-} zvMy6OCSdZ&#)Q{3GsPI6qg(9Wr^yiv++H2G3|ZD$+?o_3mzv1)OFNTiwFzkC)mhTq z?Z*g(%4GEh78fPMZ@%#;@(7@KBT{%rcP{9PANgu3m)2C6Fh?G@W@DMiXIOVJ%K5^g z{0IT>t|VXf4F&aZI$p*GK^qevmC8i?$EVNuyp_QtM~JF-xion)WyI(7W)?EW@TBkh*&bSyv%)Pf{k4Di@5yy zH4=4dU07IF7OfjtLfJ#b_^;HB`%48q$GY6ulOf6F7`18h$(2@G9~sL zLJ(+}WW^~oh4FV;FQA=gf_MP!{coT_1(gW6k|LiX7a;rVT?labg6kG+6oCD-W3kf* zxbL`g`Z}0u zH3svc`e0gg|Nl`PZbv^%b#u~E{qTW$puXm-0U5Dls&3?*-2;y1^a(i8C&!H=;v}NI zy4+5L)tTyZvWt9buIohr!Kamy0Zo;l_dYm_1^k#@SP)S--0A|Nb z?o+tV{Aq+;i1u1+kyem}jcrz$V}lqPdL}X(iwHuLNZt(RS+V@ac&HDhEwPt$mh-e2 zo9TlFU1g(y1}bB|n1Ip2wNI-gsqxI?tr;;LA9RhyC$C~8-V#A~LGMH_bfP&`V`x~i zJlsTqS~DvC0*~dxh$+`X%*Rxn=mDg@RGDh6wU`Vnxr+pGzBC<3tc`^U8KTlI)Vxhy zX=(S}-RZY4M$zQ%TsY&qk^HIFs!T3s;=PkA`NBK?I5#r6FMY*lESzTYw|8&9$MJo4 zO*nrSSVX-XGCJyHZ5)2SGf7?HO0BO3eX8q87@hl)ICi1v&cl{;-MZAk1PwcNg^SY9 zB$^YPuVVXNwAypKUsr8yZP~2sK!oeA*a}6ENCF5F(F2$e^>+)`AyfFBn(&)a6C`H< zn3Kdl0$`_6p&(^P{=dUCuH*U`3l&O_O1rZf!Lpu;mqh%wR#p!?aYmReC7KPWK`c*Y zHCkDW4*vfDYZA1XGEWUWLu%jU=y%4p?1|_Uh3DyLk<(hsp|nD^QJPg1 z&XLiq@EA3zzYJvXxup`*#dhc93B3kMeB;nA)kLjETl*Q{_PgCD!>6-~P=zZLl)7+| z1Z1IWBjc~RFPBx43Jse<>$E?-jWpTnEZ8(j&z`?gFVOY?^|G1j3;GcZmGTqlP4H&(x9U{)>OW%kSMuB2)>u@AbbG&+oAv)#oM}#It;eS2 z7a1qeOEUB#`$1k)zpWN@C(F`&m{JS-38ZYhLe=AS&kcc!rI2e?Lg*m^4&L-zAErww z@8h?b>P?ZQr6Pzf0SF?Q;~EeJ1q3EUeBe3Q@r2k1CPZhzQ#24{l%IhK0{J{T&e1$1 z0GSB_nH>aCETF0~fK&3fq5ZV5QINrC&-b(il{QSM?dggs@51=!wV*3WUa(Qg_?KGs zw{@KIiX8C>j7~w&wNy1L`|HSvKs7t&W845IA0MwafB{~>7lOQ=0os` zPs4aY`wt%S>>mQ2e@UUj1TY*HDpX$!mG5KS`^5>)eYk32`@PE%bh8JF zoL|;(dQ=@OAup!XiJyorV(znH_6#Lj%6q9pZqH^q{#D__Rd+UQ=<=WfdU$CdChwdp zWx;%0>$zDjsmiSNVUy}~M_ z3=Lb8^zf9SXymrg_P191vyjcNo8R7#>aRoR(sYb0I?qRjUF~m+Cwu;%#tDzj=|1HF zH~>Bl825qk{V&7`|6pv;^rjq`-uP6efSMEr*a)1;A{kir* zGYh-(#nQ;C9j*yf<^q7W&1&Y+R)hpvjqq9(q^m{^^rWai2K0UmcyE$U- zZD?idk_~^Ih4o1A=|a=%0mKvgR;u-Ke`IRk9f}|}Rl%aGgD-K_;@odJ2xHE~a=g1c z#?48{y77!lm6>ky^4K6@9s(AM7>sK-bXc(HG;%5K)8kR4%351 zUjCJTq1P+?RK!;-TkbD{q)sXjEM6-jl53 zsBK){Zg24md!LqBWUY}BT48vjN471H>n5i#{L;M=*-Ot&o1^`wxV9fn3}{esf2<*x ztyiWX8rwR>_pmr&eTaB@z01mrqg<`+KRmFzb2M*~Grjz}=LWiSt8T^Ia#wSZGnA}b z!wQV3X)B-hyL66(KT*7mHU|C@>qw|5z;}xDn*?dDP6eXIj;%LzY_5p4eVd}YZ2RJO z9faT2t^Y8r4mu5RpU!?*{ZL)N9s=~gr7nLk_K(eje-{Ee=qP|2c+MDHE=NmU?Q_vO&BLM)P6YxCow-e(;14`hbK_D0pQwjM z&J#x7s*A^$981_fWtdy~j&L$3(6ZmuWg6pZhoVYnqjnDq7uzKzHySrVHkTKM(`S6x z&<2^3d&Np8^oNCr9H)i$a&|-^yJxpP(JEhMd8J!K%kqJWdOg^$id6YsF`->NI~9cj zu50JeJzNGo(m+{Ny4?XCrjB`{@$0V?YB9=%x5g8>WKNh0B}x}yWjS1Cw<_%?F&^8s z7l_M5YlVf2r|E4!?SG8t;s1IK-$mFJ)_o;9{M5xWO~ElSnpArk;;9G}XAt%39n|!b zssG>tA&n6mtn9yL3Q&lV5P3lxPi90(bZDzcL7XbqD)`C&0$V;R(PI5c*ncf_;B>fDOR@Z2*w= z@7Idp##n5h-yV?V96n24n!W!l-#0%Cfr7p9|8 z;q@NuB&qR8-t-@qR#Y^4BJ!T_+Va+8Z_?711r3>bhZZS{T#`tstw9+ly3^!k>g`X} z3c?lf{6FcGMe4hjTZXfwrR2_IZ#&aU5iumrpZJoDmj4)1^B_Ji9cJ>8+S~CsWfMEqux{%(|LMn4D&>Ap#zVsf>5Yt+aPOc`d1>fC2iOXe&iO{? zwBOdTLF?Om$-mz$P)v&SLj6cDQ}iXWs5QIbYYoqM75#Oh7Au}99lU= zZbK*+FMe6ir>ACOS*XQJ>wD2T!!WA}8}nnlH7BjXn}BPpE*Z&$1jAafC6d|0nd?El zmllZF1fw|{;L2M$Sb6vU-a7D*rTvbr`JSc00P--$!;Zk^RYKg7}hOtwbJPJk>Zypc3 zk4k22j$xiqxV}yMYQl#8_T?}ku6sda-6T4$fx;=It8&<3&RSdaBA0!dndQ%FDwn-4 zzoDURjVo~-{e%2YD~a$D;fJA$^_SvdsE>1*^sV|wI5x4PzD!%^HJr4wKQSE6IeOAq s=~*A|>Gn=A8WkXH&5qm!r_?g{!t~yX2`WENSY2yRv`9Rcvu~RJ1y>H}fdBvi diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard2.0/System.Numerics.Vectors.xml b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard2.0/System.Numerics.Vectors.xml deleted file mode 100644 index 51297939a..000000000 --- a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/netstandard2.0/System.Numerics.Vectors.xml +++ /dev/null @@ -1,2597 +0,0 @@ - - - - System.Numerics.Vectors - - - - Represents a 3x2 matrix. - - - Creates a 3x2 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a rotation matrix using the given rotation in radians. - The amount of rotation, in radians. - The rotation matrix. - - - Creates a rotation matrix using the specified rotation in radians and a center point. - The amount of rotation, in radians. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified X and Y components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. - The uniform scale to use. - The center offset. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The center point. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the given scale. - The uniform scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale with an offset from the specified center point. - The scale to use. - The center offset. - The scaling matrix. - - - Creates a skew matrix from the specified angles in radians. - The X angle, in radians. - The Y angle, in radians. - The skew matrix. - - - Creates a skew matrix from the specified angles in radians and a center point. - The X angle, in radians. - The Y angle, in radians. - The center point. - The skew matrix. - - - Creates a translation matrix from the specified 2-dimensional vector. - The translation position. - The translation matrix. - - - Creates a translation matrix from the specified X and Y components. - The X position. - The Y position. - The translation matrix. - - - Returns a value that indicates whether this instance and another 3x2 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant for this matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - The multiplicative identify matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Represents a 4x4 matrix. - - - Creates a object from a specified object. - A 3x2 matrix. - - - Creates a 4x4 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the third element in the first row. - The value to assign to the fourth element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the third element in the second row. - The value to assign to the third element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - The value to assign to the third element in the third row. - The value to assign to the fourth element in the third row. - The value to assign to the first element in the fourth row. - The value to assign to the second element in the fourth row. - The value to assign to the third element in the fourth row. - The value to assign to the fourth element in the fourth row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a spherical billboard that rotates around a specified object position. - The position of the object that the billboard will rotate around. - The position of the camera. - The up vector of the camera. - The forward vector of the camera. - The created billboard. - - - Creates a cylindrical billboard that rotates around a specified axis. - The position of the object that the billboard will rotate around. - The position of the camera. - The axis to rotate the billboard around. - The forward vector of the camera. - The forward vector of the object. - The billboard matrix. - - - Creates a matrix that rotates around an arbitrary vector. - The axis to rotate around. - The angle to rotate around axis, in radians. - The rotation matrix. - - - Creates a rotation matrix from the specified Quaternion rotation value. - The source Quaternion. - The rotation matrix. - - - Creates a rotation matrix from the specified yaw, pitch, and roll. - The angle of rotation, in radians, around the Y axis. - The angle of rotation, in radians, around the X axis. - The angle of rotation, in radians, around the Z axis. - The rotation matrix. - - - Creates a view matrix. - The position of the camera. - The target towards which the camera is pointing. - The direction that is "up" from the camera's point of view. - The view matrix. - - - Creates an orthographic perspective matrix from the given view volume dimensions. - The width of the view volume. - The height of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a customized orthographic projection matrix. - The minimum X-value of the view volume. - The maximum X-value of the view volume. - The minimum Y-value of the view volume. - The maximum Y-value of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a perspective projection matrix from the given view volume dimensions. - The width of the view volume at the near view plane. - The height of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. - The field of view in the y direction, in radians. - The aspect ratio, defined as view space width divided by height. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a customized perspective projection matrix. - The minimum x-value of the view volume at the near view plane. - The maximum x-value of the view volume at the near view plane. - The minimum y-value of the view volume at the near view plane. - The maximum y-value of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a matrix that reflects the coordinate system about a specified plane. - The plane about which to create a reflection. - A new matrix expressing the reflection. - - - Creates a matrix for rotating points around the X axis. - The amount, in radians, by which to rotate around the X axis. - The rotation matrix. - - - Creates a matrix for rotating points around the X axis from a center point. - The amount, in radians, by which to rotate around the X axis. - The center point. - The rotation matrix. - - - The amount, in radians, by which to rotate around the Y axis from a center point. - The amount, in radians, by which to rotate around the Y-axis. - The center point. - The rotation matrix. - - - Creates a matrix for rotating points around the Y axis. - The amount, in radians, by which to rotate around the Y-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis. - The amount, in radians, by which to rotate around the Z-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis from a center point. - The amount, in radians, by which to rotate around the Z-axis. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a uniform scaling matrix that scale equally on each axis. - The uniform scaling factor. - The scaling matrix. - - - Creates a scaling matrix with a center point. - The vector that contains the amount to scale on each axis. - The center point. - The scaling matrix. - - - Creates a uniform scaling matrix that scales equally on each axis with a center point. - The uniform scaling factor. - The center point. - The scaling matrix. - - - Creates a scaling matrix from the specified X, Y, and Z components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The center point. - The scaling matrix. - - - Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. - The direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. - - - Creates a translation matrix from the specified 3-dimensional vector. - The amount to translate in each axis. - The translation matrix. - - - Creates a translation matrix from the specified X, Y, and Z components. - The amount to translate on the X axis. - The amount to translate on the Y axis. - The amount to translate on the Z axis. - The translation matrix. - - - Creates a world matrix with the specified parameters. - The position of the object. - The forward direction of the object. - The upward direction of the object. Its value is usually [0, 1, 0]. - The world matrix. - - - Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. - The source matrix. - When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. - When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. - When the method returns, contains the translation component of the transformation matrix if the operation succeeded. - true if matrix was decomposed successfully; otherwise, false. - - - Returns a value that indicates whether this instance and another 4x4 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant of the current 4x4 matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - Gets the multiplicative identity matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The third element of the first row. - - - - The fourth element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The third element of the second row. - - - - The fourth element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - The third element of the third row. - - - - The fourth element of the third row. - - - - The first element of the fourth row. - - - - The second element of the fourth row. - - - - The third element of the fourth row. - - - - The fourth element of the fourth row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to care - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Transforms the specified matrix by applying the specified Quaternion rotation. - The matrix to transform. - The rotation t apply. - The transformed matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Transposes the rows and columns of a matrix. - The matrix to transpose. - The transposed matrix. - - - Represents a three-dimensional plane. - - - Creates a object from a specified four-dimensional vector. - A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. - - - Creates a object from a specified normal and the distance along the normal from the origin. - The plane's normal vector. - The plane's distance from the origin along its normal vector. - - - Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. - The X component of the normal. - The Y component of the normal. - The Z component of the normal. - The distance of the plane along its normal from the origin. - - - Creates a object that contains three specified points. - The first point defining the plane. - The second point defining the plane. - The third point defining the plane. - The plane containing the three points. - - - The distance of the plane along its normal from the origin. - - - - Calculates the dot product of a plane and a 4-dimensional vector. - The plane. - The four-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. - The plane. - The 3-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the vector of this plane. - The plane. - The three-dimensional vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another plane object are equal. - The other plane. - true if the two planes are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - The normal vector of the plane. - - - - Creates a new object whose normal vector is the source plane's normal vector normalized. - The source plane. - The normalized plane. - - - Returns a value that indicates whether two planes are equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether two planes are not equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the string representation of this plane object. - A string that represents this object. - - - Transforms a normalized plane by a 4x4 matrix. - The normalized plane to transform. - The transformation matrix to apply to plane. - The transformed plane. - - - Transforms a normalized plane by a Quaternion rotation. - The normalized plane to transform. - The Quaternion rotation to apply to the plane. - A new plane that results from applying the Quaternion rotation. - - - Represents a vector that is used to encode three-dimensional physical rotations. - - - Creates a quaternion from the specified vector and rotation parts. - The vector part of the quaternion. - The rotation part of the quaternion. - - - Constructs a quaternion from the specified components. - The value to assign to the X component of the quaternion. - The value to assign to the Y component of the quaternion. - The value to assign to the Z component of the quaternion. - The value to assign to the W component of the quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Concatenates two quaternions. - The first quaternion rotation in the series. - The second quaternion rotation in the series. - A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. - - - Returns the conjugate of a specified quaternion. - The quaternion. - A new quaternion that is the conjugate of value. - - - Creates a quaternion from a vector and an angle to rotate about the vector. - The vector to rotate around. - The angle, in radians, to rotate around the vector. - The newly created quaternion. - - - Creates a quaternion from the specified rotation matrix. - The rotation matrix. - The newly created quaternion. - - - Creates a new quaternion from the given yaw, pitch, and roll. - The yaw angle, in radians, around the Y axis. - The pitch angle, in radians, around the X axis. - The roll angle, in radians, around the Z axis. - The resulting quaternion. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Calculates the dot product of two quaternions. - The first quaternion. - The second quaternion. - The dot product. - - - Returns a value that indicates whether this instance and another quaternion are equal. - The other quaternion. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Gets a quaternion that represents no rotation. - A quaternion whose values are (0, 0, 0, 1). - - - Returns the inverse of a quaternion. - The quaternion. - The inverted quaternion. - - - Gets a value that indicates whether the current instance is the identity quaternion. - true if the current instance is the identity quaternion; otherwise, false. - - - Calculates the length of the quaternion. - The computed length of the quaternion. - - - Calculates the squared length of the quaternion. - The length squared of the quaternion. - - - Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. - The first quaternion. - The second quaternion. - The relative weight of quaternion2 in the interpolation. - The interpolated quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Divides each component of a specified by its length. - The quaternion to normalize. - The normalized quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Returns a value that indicates whether two quaternions are equal. - The first quaternion to compare. - The second quaternion to compare. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether two quaternions are not equal. - The first quaternion to compare. - The second quaternion to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Interpolates between two quaternions, using spherical linear interpolation. - The first quaternion. - The second quaternion. - The relative weight of the second quaternion in the interpolation. - The interpolated quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this quaternion. - The string representation of this quaternion. - - - The rotation component of the quaternion. - - - - The X value of the vector component of the quaternion. - - - - The Y value of the vector component of the quaternion. - - - - The Z value of the vector component of the quaternion. - - - - Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. - The vector type. T can be any primitive numeric type. - - - Creates a vector whose components are of a specified type. - The numeric type that defines the type of the components in the vector. - - - Creates a vector from a specified array. - A numeric array. - values is null. - - - Creates a vector from a specified array starting at a specified index position. - A numeric array. - The starting index position from which to create the vector. - values is null. - index is less than zero. -or- The length of values minus index is less than . - - - Copies the vector instance to a specified destination array. - The array to receive a copy of the vector values. - destination is null. - The number of elements in the current vector is greater than the number of elements available in the destination array. - - - Copies the vector instance to a specified destination array starting at a specified index position. - The array to receive a copy of the vector values. - The starting index in destination at which to begin the copy operation. - destination is null. - The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. - index is less than zero or greater than the last index in destination. - - - Returns the number of elements stored in the vector. - The number of elements stored in the vector. - Access to the property getter via reflection is not supported. - - - Returns a value that indicates whether this instance is equal to a specified vector. - The vector to compare with this instance. - true if the current instance and other are equal; otherwise, false. - - - Returns a value that indicates whether this instance is equal to a specified object. - The object to compare with this instance. - true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. - - - Returns the hash code for this instance. - The hash code. - - - Gets the element at a specified index. - The index of the element to return. - The element at index index. - index is less than zero. -or- index is greater than or equal to . - - - Returns a vector containing all ones. - A vector containing all ones. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise And of left and right. - - - Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise Or of the elements in left and right. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Returns a value that indicates whether each pair of elements in two specified vectors are equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise XOr of the elements in left and right. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Returns a value that indicates whether any single pair of elements in the specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if any element pairs in left and right are equal. false if no element pairs are equal. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar value. - The source vector. - A scalar value. - The scaled vector. - - - Multiplies a vector by the given scalar. - The scalar value. - The source vector. - The scaled vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The one's complement vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates a given vector. - The vector to negate. - The negated vector. - - - Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Returns the string representation of this vector using default formatting. - The string representation of this vector. - - - Returns the string representation of this vector using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns a vector containing all zeroes. - A vector containing all zeroes. - - - Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. - - - Returns a new vector whose elements are the absolute values of the given vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The absolute value vector. - - - Returns a new vector whose values are the sum of each pair of elements from two given vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The summed vector. - - - Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of signed bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The vector type. T can be any primitive numeric type. - The new vector with elements selected based on the mask. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The divided vector. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The dot product. - - - Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether each pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left and right are equal; otherwise, false. - - - Returns a value that indicates whether any single pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element pair in left and right is equal; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. - - - Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. - true if vector operations are subject to hardware acceleration; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than or equal to the corresponding element in right; otherwise, false. - - - Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The maximum vector. - - - Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The minimum vector. - - - Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. - The scalar value. - The vector. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - Returns a new vector whose values are the product of each pair of elements in two specified vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The product vector. - - - Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. - The vector. - The scalar value. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose elements are the negation of the corresponding element in the specified vector. - The source vector. - The vector type. T can be any primitive numeric type. - The negated vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector whose elements are the square roots of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The square root vector. - - - Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The difference vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Represents a vector with two single-precision floating-point values. - - - Creates a new object whose two elements have the same value. - The value to assign to both elements. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of the vector. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 2 elements are equal to one. - A vector whose two elements are equal to one (that is, it returns the vector (1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 3x2 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 3x2 matrix. - The source vector. - The matrix. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0). - The vector (1,0). - - - Gets the vector (0,1). - The vector (0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - Returns a vector whose 2 elements are equal to zero. - A vector whose two elements are equal to zero (that is, it returns the vector (0,0). - - - Represents a vector with three single-precision floating-point values. - - - Creates a new object whose three elements have the same value. - The value to assign to all three elements. - - - Creates a new object from the specified object and the specified value. - The vector with two elements. - The additional value to assign to the field. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the cross product of two vectors. - The first vector. - The second vector. - The cross product. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 3 elements are equal to one. - A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0,0). - The vector (1,0,0). - - - Gets the vector (0,1,0). - The vector (0,1,0).. - - - Gets the vector (0,0,1). - The vector (0,0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 3 elements are equal to zero. - A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). - - - Represents a vector with four single-precision floating-point values. - - - Creates a new object whose four elements have the same value. - The value to assign to all four elements. - - - Constructs a new object from the specified object and a W component. - The vector to use for the X, Y, and Z components. - The W component. - - - Creates a new object from the specified object and a Z and a W component. - The vector to use for the X and Y components. - The Z component. - The W component. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 4 elements are equal to one. - Returns . - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a four-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a four-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a three-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a two-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a two-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a three-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Gets the vector (0,0,0,1). - The vector (0,0,0,1). - - - Gets the vector (1,0,0,0). - The vector (1,0,0,0). - - - Gets the vector (0,1,0,0). - The vector (0,1,0,0).. - - - Gets a vector whose 4 elements are equal to zero. - The vector (0,0,1,0). - - - The W component of the vector. - - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 4 elements are equal to zero. - A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). - - - \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.dll b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.dll deleted file mode 100644 index 46308fdb3acf521d69320d5d9f7436fafb898d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161152 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 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml deleted file mode 100644 index 51297939a..000000000 --- a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml +++ /dev/null @@ -1,2597 +0,0 @@ - - - - System.Numerics.Vectors - - - - Represents a 3x2 matrix. - - - Creates a 3x2 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a rotation matrix using the given rotation in radians. - The amount of rotation, in radians. - The rotation matrix. - - - Creates a rotation matrix using the specified rotation in radians and a center point. - The amount of rotation, in radians. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified X and Y components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. - The uniform scale to use. - The center offset. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The center point. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the given scale. - The uniform scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale with an offset from the specified center point. - The scale to use. - The center offset. - The scaling matrix. - - - Creates a skew matrix from the specified angles in radians. - The X angle, in radians. - The Y angle, in radians. - The skew matrix. - - - Creates a skew matrix from the specified angles in radians and a center point. - The X angle, in radians. - The Y angle, in radians. - The center point. - The skew matrix. - - - Creates a translation matrix from the specified 2-dimensional vector. - The translation position. - The translation matrix. - - - Creates a translation matrix from the specified X and Y components. - The X position. - The Y position. - The translation matrix. - - - Returns a value that indicates whether this instance and another 3x2 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant for this matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - The multiplicative identify matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Represents a 4x4 matrix. - - - Creates a object from a specified object. - A 3x2 matrix. - - - Creates a 4x4 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the third element in the first row. - The value to assign to the fourth element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the third element in the second row. - The value to assign to the third element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - The value to assign to the third element in the third row. - The value to assign to the fourth element in the third row. - The value to assign to the first element in the fourth row. - The value to assign to the second element in the fourth row. - The value to assign to the third element in the fourth row. - The value to assign to the fourth element in the fourth row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a spherical billboard that rotates around a specified object position. - The position of the object that the billboard will rotate around. - The position of the camera. - The up vector of the camera. - The forward vector of the camera. - The created billboard. - - - Creates a cylindrical billboard that rotates around a specified axis. - The position of the object that the billboard will rotate around. - The position of the camera. - The axis to rotate the billboard around. - The forward vector of the camera. - The forward vector of the object. - The billboard matrix. - - - Creates a matrix that rotates around an arbitrary vector. - The axis to rotate around. - The angle to rotate around axis, in radians. - The rotation matrix. - - - Creates a rotation matrix from the specified Quaternion rotation value. - The source Quaternion. - The rotation matrix. - - - Creates a rotation matrix from the specified yaw, pitch, and roll. - The angle of rotation, in radians, around the Y axis. - The angle of rotation, in radians, around the X axis. - The angle of rotation, in radians, around the Z axis. - The rotation matrix. - - - Creates a view matrix. - The position of the camera. - The target towards which the camera is pointing. - The direction that is "up" from the camera's point of view. - The view matrix. - - - Creates an orthographic perspective matrix from the given view volume dimensions. - The width of the view volume. - The height of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a customized orthographic projection matrix. - The minimum X-value of the view volume. - The maximum X-value of the view volume. - The minimum Y-value of the view volume. - The maximum Y-value of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a perspective projection matrix from the given view volume dimensions. - The width of the view volume at the near view plane. - The height of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. - The field of view in the y direction, in radians. - The aspect ratio, defined as view space width divided by height. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a customized perspective projection matrix. - The minimum x-value of the view volume at the near view plane. - The maximum x-value of the view volume at the near view plane. - The minimum y-value of the view volume at the near view plane. - The maximum y-value of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a matrix that reflects the coordinate system about a specified plane. - The plane about which to create a reflection. - A new matrix expressing the reflection. - - - Creates a matrix for rotating points around the X axis. - The amount, in radians, by which to rotate around the X axis. - The rotation matrix. - - - Creates a matrix for rotating points around the X axis from a center point. - The amount, in radians, by which to rotate around the X axis. - The center point. - The rotation matrix. - - - The amount, in radians, by which to rotate around the Y axis from a center point. - The amount, in radians, by which to rotate around the Y-axis. - The center point. - The rotation matrix. - - - Creates a matrix for rotating points around the Y axis. - The amount, in radians, by which to rotate around the Y-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis. - The amount, in radians, by which to rotate around the Z-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis from a center point. - The amount, in radians, by which to rotate around the Z-axis. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a uniform scaling matrix that scale equally on each axis. - The uniform scaling factor. - The scaling matrix. - - - Creates a scaling matrix with a center point. - The vector that contains the amount to scale on each axis. - The center point. - The scaling matrix. - - - Creates a uniform scaling matrix that scales equally on each axis with a center point. - The uniform scaling factor. - The center point. - The scaling matrix. - - - Creates a scaling matrix from the specified X, Y, and Z components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The center point. - The scaling matrix. - - - Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. - The direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. - - - Creates a translation matrix from the specified 3-dimensional vector. - The amount to translate in each axis. - The translation matrix. - - - Creates a translation matrix from the specified X, Y, and Z components. - The amount to translate on the X axis. - The amount to translate on the Y axis. - The amount to translate on the Z axis. - The translation matrix. - - - Creates a world matrix with the specified parameters. - The position of the object. - The forward direction of the object. - The upward direction of the object. Its value is usually [0, 1, 0]. - The world matrix. - - - Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. - The source matrix. - When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. - When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. - When the method returns, contains the translation component of the transformation matrix if the operation succeeded. - true if matrix was decomposed successfully; otherwise, false. - - - Returns a value that indicates whether this instance and another 4x4 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant of the current 4x4 matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - Gets the multiplicative identity matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The third element of the first row. - - - - The fourth element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The third element of the second row. - - - - The fourth element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - The third element of the third row. - - - - The fourth element of the third row. - - - - The first element of the fourth row. - - - - The second element of the fourth row. - - - - The third element of the fourth row. - - - - The fourth element of the fourth row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to care - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Transforms the specified matrix by applying the specified Quaternion rotation. - The matrix to transform. - The rotation t apply. - The transformed matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Transposes the rows and columns of a matrix. - The matrix to transpose. - The transposed matrix. - - - Represents a three-dimensional plane. - - - Creates a object from a specified four-dimensional vector. - A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. - - - Creates a object from a specified normal and the distance along the normal from the origin. - The plane's normal vector. - The plane's distance from the origin along its normal vector. - - - Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. - The X component of the normal. - The Y component of the normal. - The Z component of the normal. - The distance of the plane along its normal from the origin. - - - Creates a object that contains three specified points. - The first point defining the plane. - The second point defining the plane. - The third point defining the plane. - The plane containing the three points. - - - The distance of the plane along its normal from the origin. - - - - Calculates the dot product of a plane and a 4-dimensional vector. - The plane. - The four-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. - The plane. - The 3-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the vector of this plane. - The plane. - The three-dimensional vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another plane object are equal. - The other plane. - true if the two planes are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - The normal vector of the plane. - - - - Creates a new object whose normal vector is the source plane's normal vector normalized. - The source plane. - The normalized plane. - - - Returns a value that indicates whether two planes are equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether two planes are not equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the string representation of this plane object. - A string that represents this object. - - - Transforms a normalized plane by a 4x4 matrix. - The normalized plane to transform. - The transformation matrix to apply to plane. - The transformed plane. - - - Transforms a normalized plane by a Quaternion rotation. - The normalized plane to transform. - The Quaternion rotation to apply to the plane. - A new plane that results from applying the Quaternion rotation. - - - Represents a vector that is used to encode three-dimensional physical rotations. - - - Creates a quaternion from the specified vector and rotation parts. - The vector part of the quaternion. - The rotation part of the quaternion. - - - Constructs a quaternion from the specified components. - The value to assign to the X component of the quaternion. - The value to assign to the Y component of the quaternion. - The value to assign to the Z component of the quaternion. - The value to assign to the W component of the quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Concatenates two quaternions. - The first quaternion rotation in the series. - The second quaternion rotation in the series. - A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. - - - Returns the conjugate of a specified quaternion. - The quaternion. - A new quaternion that is the conjugate of value. - - - Creates a quaternion from a vector and an angle to rotate about the vector. - The vector to rotate around. - The angle, in radians, to rotate around the vector. - The newly created quaternion. - - - Creates a quaternion from the specified rotation matrix. - The rotation matrix. - The newly created quaternion. - - - Creates a new quaternion from the given yaw, pitch, and roll. - The yaw angle, in radians, around the Y axis. - The pitch angle, in radians, around the X axis. - The roll angle, in radians, around the Z axis. - The resulting quaternion. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Calculates the dot product of two quaternions. - The first quaternion. - The second quaternion. - The dot product. - - - Returns a value that indicates whether this instance and another quaternion are equal. - The other quaternion. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Gets a quaternion that represents no rotation. - A quaternion whose values are (0, 0, 0, 1). - - - Returns the inverse of a quaternion. - The quaternion. - The inverted quaternion. - - - Gets a value that indicates whether the current instance is the identity quaternion. - true if the current instance is the identity quaternion; otherwise, false. - - - Calculates the length of the quaternion. - The computed length of the quaternion. - - - Calculates the squared length of the quaternion. - The length squared of the quaternion. - - - Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. - The first quaternion. - The second quaternion. - The relative weight of quaternion2 in the interpolation. - The interpolated quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Divides each component of a specified by its length. - The quaternion to normalize. - The normalized quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Returns a value that indicates whether two quaternions are equal. - The first quaternion to compare. - The second quaternion to compare. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether two quaternions are not equal. - The first quaternion to compare. - The second quaternion to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Interpolates between two quaternions, using spherical linear interpolation. - The first quaternion. - The second quaternion. - The relative weight of the second quaternion in the interpolation. - The interpolated quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this quaternion. - The string representation of this quaternion. - - - The rotation component of the quaternion. - - - - The X value of the vector component of the quaternion. - - - - The Y value of the vector component of the quaternion. - - - - The Z value of the vector component of the quaternion. - - - - Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. - The vector type. T can be any primitive numeric type. - - - Creates a vector whose components are of a specified type. - The numeric type that defines the type of the components in the vector. - - - Creates a vector from a specified array. - A numeric array. - values is null. - - - Creates a vector from a specified array starting at a specified index position. - A numeric array. - The starting index position from which to create the vector. - values is null. - index is less than zero. -or- The length of values minus index is less than . - - - Copies the vector instance to a specified destination array. - The array to receive a copy of the vector values. - destination is null. - The number of elements in the current vector is greater than the number of elements available in the destination array. - - - Copies the vector instance to a specified destination array starting at a specified index position. - The array to receive a copy of the vector values. - The starting index in destination at which to begin the copy operation. - destination is null. - The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. - index is less than zero or greater than the last index in destination. - - - Returns the number of elements stored in the vector. - The number of elements stored in the vector. - Access to the property getter via reflection is not supported. - - - Returns a value that indicates whether this instance is equal to a specified vector. - The vector to compare with this instance. - true if the current instance and other are equal; otherwise, false. - - - Returns a value that indicates whether this instance is equal to a specified object. - The object to compare with this instance. - true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. - - - Returns the hash code for this instance. - The hash code. - - - Gets the element at a specified index. - The index of the element to return. - The element at index index. - index is less than zero. -or- index is greater than or equal to . - - - Returns a vector containing all ones. - A vector containing all ones. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise And of left and right. - - - Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise Or of the elements in left and right. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Returns a value that indicates whether each pair of elements in two specified vectors are equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise XOr of the elements in left and right. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Returns a value that indicates whether any single pair of elements in the specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if any element pairs in left and right are equal. false if no element pairs are equal. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar value. - The source vector. - A scalar value. - The scaled vector. - - - Multiplies a vector by the given scalar. - The scalar value. - The source vector. - The scaled vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The one's complement vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates a given vector. - The vector to negate. - The negated vector. - - - Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Returns the string representation of this vector using default formatting. - The string representation of this vector. - - - Returns the string representation of this vector using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns a vector containing all zeroes. - A vector containing all zeroes. - - - Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. - - - Returns a new vector whose elements are the absolute values of the given vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The absolute value vector. - - - Returns a new vector whose values are the sum of each pair of elements from two given vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The summed vector. - - - Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of signed bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The vector type. T can be any primitive numeric type. - The new vector with elements selected based on the mask. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The divided vector. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The dot product. - - - Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether each pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left and right are equal; otherwise, false. - - - Returns a value that indicates whether any single pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element pair in left and right is equal; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. - - - Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. - true if vector operations are subject to hardware acceleration; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than or equal to the corresponding element in right; otherwise, false. - - - Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The maximum vector. - - - Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The minimum vector. - - - Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. - The scalar value. - The vector. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - Returns a new vector whose values are the product of each pair of elements in two specified vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The product vector. - - - Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. - The vector. - The scalar value. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose elements are the negation of the corresponding element in the specified vector. - The source vector. - The vector type. T can be any primitive numeric type. - The negated vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector whose elements are the square roots of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The square root vector. - - - Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The difference vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Represents a vector with two single-precision floating-point values. - - - Creates a new object whose two elements have the same value. - The value to assign to both elements. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of the vector. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 2 elements are equal to one. - A vector whose two elements are equal to one (that is, it returns the vector (1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 3x2 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 3x2 matrix. - The source vector. - The matrix. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0). - The vector (1,0). - - - Gets the vector (0,1). - The vector (0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - Returns a vector whose 2 elements are equal to zero. - A vector whose two elements are equal to zero (that is, it returns the vector (0,0). - - - Represents a vector with three single-precision floating-point values. - - - Creates a new object whose three elements have the same value. - The value to assign to all three elements. - - - Creates a new object from the specified object and the specified value. - The vector with two elements. - The additional value to assign to the field. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the cross product of two vectors. - The first vector. - The second vector. - The cross product. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 3 elements are equal to one. - A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0,0). - The vector (1,0,0). - - - Gets the vector (0,1,0). - The vector (0,1,0).. - - - Gets the vector (0,0,1). - The vector (0,0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 3 elements are equal to zero. - A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). - - - Represents a vector with four single-precision floating-point values. - - - Creates a new object whose four elements have the same value. - The value to assign to all four elements. - - - Constructs a new object from the specified object and a W component. - The vector to use for the X, Y, and Z components. - The W component. - - - Creates a new object from the specified object and a Z and a W component. - The vector to use for the X and Y components. - The Z component. - The W component. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 4 elements are equal to one. - Returns . - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a four-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a four-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a three-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a two-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a two-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a three-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Gets the vector (0,0,0,1). - The vector (0,0,0,1). - - - Gets the vector (1,0,0,0). - The vector (1,0,0,0). - - - Gets the vector (0,1,0,0). - The vector (0,1,0,0).. - - - Gets a vector whose 4 elements are equal to zero. - The vector (0,0,1,0). - - - The W component of the vector. - - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 4 elements are equal to zero. - A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). - - - \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinios10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinios10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinmac20/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinmac20/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarintvos10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarintvos10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinwatchos10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/lib/xamarinwatchos10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/MonoAndroid10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/MonoAndroid10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/MonoTouch10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/MonoTouch10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/net46/System.Numerics.Vectors.dll b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/net46/System.Numerics.Vectors.dll deleted file mode 100644 index e91f855a1235992af7c79b3dd157a2bf4133db61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29568 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 - - - System.Numerics.Vectors - - - - Represents a 3x2 matrix. - - - Creates a 3x2 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a rotation matrix using the given rotation in radians. - The amount of rotation, in radians. - The rotation matrix. - - - Creates a rotation matrix using the specified rotation in radians and a center point. - The amount of rotation, in radians. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified X and Y components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. - The uniform scale to use. - The center offset. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The center point. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the given scale. - The uniform scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale with an offset from the specified center point. - The scale to use. - The center offset. - The scaling matrix. - - - Creates a skew matrix from the specified angles in radians. - The X angle, in radians. - The Y angle, in radians. - The skew matrix. - - - Creates a skew matrix from the specified angles in radians and a center point. - The X angle, in radians. - The Y angle, in radians. - The center point. - The skew matrix. - - - Creates a translation matrix from the specified 2-dimensional vector. - The translation position. - The translation matrix. - - - Creates a translation matrix from the specified X and Y components. - The X position. - The Y position. - The translation matrix. - - - Returns a value that indicates whether this instance and another 3x2 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant for this matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - The multiplicative identify matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Represents a 4x4 matrix. - - - Creates a object from a specified object. - A 3x2 matrix. - - - Creates a 4x4 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the third element in the first row. - The value to assign to the fourth element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the third element in the second row. - The value to assign to the third element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - The value to assign to the third element in the third row. - The value to assign to the fourth element in the third row. - The value to assign to the first element in the fourth row. - The value to assign to the second element in the fourth row. - The value to assign to the third element in the fourth row. - The value to assign to the fourth element in the fourth row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a spherical billboard that rotates around a specified object position. - The position of the object that the billboard will rotate around. - The position of the camera. - The up vector of the camera. - The forward vector of the camera. - The created billboard. - - - Creates a cylindrical billboard that rotates around a specified axis. - The position of the object that the billboard will rotate around. - The position of the camera. - The axis to rotate the billboard around. - The forward vector of the camera. - The forward vector of the object. - The billboard matrix. - - - Creates a matrix that rotates around an arbitrary vector. - The axis to rotate around. - The angle to rotate around axis, in radians. - The rotation matrix. - - - Creates a rotation matrix from the specified Quaternion rotation value. - The source Quaternion. - The rotation matrix. - - - Creates a rotation matrix from the specified yaw, pitch, and roll. - The angle of rotation, in radians, around the Y axis. - The angle of rotation, in radians, around the X axis. - The angle of rotation, in radians, around the Z axis. - The rotation matrix. - - - Creates a view matrix. - The position of the camera. - The target towards which the camera is pointing. - The direction that is "up" from the camera's point of view. - The view matrix. - - - Creates an orthographic perspective matrix from the given view volume dimensions. - The width of the view volume. - The height of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a customized orthographic projection matrix. - The minimum X-value of the view volume. - The maximum X-value of the view volume. - The minimum Y-value of the view volume. - The maximum Y-value of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a perspective projection matrix from the given view volume dimensions. - The width of the view volume at the near view plane. - The height of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. - The field of view in the y direction, in radians. - The aspect ratio, defined as view space width divided by height. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a customized perspective projection matrix. - The minimum x-value of the view volume at the near view plane. - The maximum x-value of the view volume at the near view plane. - The minimum y-value of the view volume at the near view plane. - The maximum y-value of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a matrix that reflects the coordinate system about a specified plane. - The plane about which to create a reflection. - A new matrix expressing the reflection. - - - Creates a matrix for rotating points around the X axis. - The amount, in radians, by which to rotate around the X axis. - The rotation matrix. - - - Creates a matrix for rotating points around the X axis from a center point. - The amount, in radians, by which to rotate around the X axis. - The center point. - The rotation matrix. - - - The amount, in radians, by which to rotate around the Y axis from a center point. - The amount, in radians, by which to rotate around the Y-axis. - The center point. - The rotation matrix. - - - Creates a matrix for rotating points around the Y axis. - The amount, in radians, by which to rotate around the Y-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis. - The amount, in radians, by which to rotate around the Z-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis from a center point. - The amount, in radians, by which to rotate around the Z-axis. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a uniform scaling matrix that scale equally on each axis. - The uniform scaling factor. - The scaling matrix. - - - Creates a scaling matrix with a center point. - The vector that contains the amount to scale on each axis. - The center point. - The scaling matrix. - - - Creates a uniform scaling matrix that scales equally on each axis with a center point. - The uniform scaling factor. - The center point. - The scaling matrix. - - - Creates a scaling matrix from the specified X, Y, and Z components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The center point. - The scaling matrix. - - - Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. - The direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. - - - Creates a translation matrix from the specified 3-dimensional vector. - The amount to translate in each axis. - The translation matrix. - - - Creates a translation matrix from the specified X, Y, and Z components. - The amount to translate on the X axis. - The amount to translate on the Y axis. - The amount to translate on the Z axis. - The translation matrix. - - - Creates a world matrix with the specified parameters. - The position of the object. - The forward direction of the object. - The upward direction of the object. Its value is usually [0, 1, 0]. - The world matrix. - - - Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. - The source matrix. - When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. - When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. - When the method returns, contains the translation component of the transformation matrix if the operation succeeded. - true if matrix was decomposed successfully; otherwise, false. - - - Returns a value that indicates whether this instance and another 4x4 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant of the current 4x4 matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - Gets the multiplicative identity matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The third element of the first row. - - - - The fourth element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The third element of the second row. - - - - The fourth element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - The third element of the third row. - - - - The fourth element of the third row. - - - - The first element of the fourth row. - - - - The second element of the fourth row. - - - - The third element of the fourth row. - - - - The fourth element of the fourth row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to care - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Transforms the specified matrix by applying the specified Quaternion rotation. - The matrix to transform. - The rotation t apply. - The transformed matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Transposes the rows and columns of a matrix. - The matrix to transpose. - The transposed matrix. - - - Represents a three-dimensional plane. - - - Creates a object from a specified four-dimensional vector. - A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. - - - Creates a object from a specified normal and the distance along the normal from the origin. - The plane's normal vector. - The plane's distance from the origin along its normal vector. - - - Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. - The X component of the normal. - The Y component of the normal. - The Z component of the normal. - The distance of the plane along its normal from the origin. - - - Creates a object that contains three specified points. - The first point defining the plane. - The second point defining the plane. - The third point defining the plane. - The plane containing the three points. - - - The distance of the plane along its normal from the origin. - - - - Calculates the dot product of a plane and a 4-dimensional vector. - The plane. - The four-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. - The plane. - The 3-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the vector of this plane. - The plane. - The three-dimensional vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another plane object are equal. - The other plane. - true if the two planes are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - The normal vector of the plane. - - - - Creates a new object whose normal vector is the source plane's normal vector normalized. - The source plane. - The normalized plane. - - - Returns a value that indicates whether two planes are equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether two planes are not equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the string representation of this plane object. - A string that represents this object. - - - Transforms a normalized plane by a 4x4 matrix. - The normalized plane to transform. - The transformation matrix to apply to plane. - The transformed plane. - - - Transforms a normalized plane by a Quaternion rotation. - The normalized plane to transform. - The Quaternion rotation to apply to the plane. - A new plane that results from applying the Quaternion rotation. - - - Represents a vector that is used to encode three-dimensional physical rotations. - - - Creates a quaternion from the specified vector and rotation parts. - The vector part of the quaternion. - The rotation part of the quaternion. - - - Constructs a quaternion from the specified components. - The value to assign to the X component of the quaternion. - The value to assign to the Y component of the quaternion. - The value to assign to the Z component of the quaternion. - The value to assign to the W component of the quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Concatenates two quaternions. - The first quaternion rotation in the series. - The second quaternion rotation in the series. - A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. - - - Returns the conjugate of a specified quaternion. - The quaternion. - A new quaternion that is the conjugate of value. - - - Creates a quaternion from a vector and an angle to rotate about the vector. - The vector to rotate around. - The angle, in radians, to rotate around the vector. - The newly created quaternion. - - - Creates a quaternion from the specified rotation matrix. - The rotation matrix. - The newly created quaternion. - - - Creates a new quaternion from the given yaw, pitch, and roll. - The yaw angle, in radians, around the Y axis. - The pitch angle, in radians, around the X axis. - The roll angle, in radians, around the Z axis. - The resulting quaternion. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Calculates the dot product of two quaternions. - The first quaternion. - The second quaternion. - The dot product. - - - Returns a value that indicates whether this instance and another quaternion are equal. - The other quaternion. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Gets a quaternion that represents no rotation. - A quaternion whose values are (0, 0, 0, 1). - - - Returns the inverse of a quaternion. - The quaternion. - The inverted quaternion. - - - Gets a value that indicates whether the current instance is the identity quaternion. - true if the current instance is the identity quaternion; otherwise, false. - - - Calculates the length of the quaternion. - The computed length of the quaternion. - - - Calculates the squared length of the quaternion. - The length squared of the quaternion. - - - Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. - The first quaternion. - The second quaternion. - The relative weight of quaternion2 in the interpolation. - The interpolated quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Divides each component of a specified by its length. - The quaternion to normalize. - The normalized quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Returns a value that indicates whether two quaternions are equal. - The first quaternion to compare. - The second quaternion to compare. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether two quaternions are not equal. - The first quaternion to compare. - The second quaternion to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Interpolates between two quaternions, using spherical linear interpolation. - The first quaternion. - The second quaternion. - The relative weight of the second quaternion in the interpolation. - The interpolated quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this quaternion. - The string representation of this quaternion. - - - The rotation component of the quaternion. - - - - The X value of the vector component of the quaternion. - - - - The Y value of the vector component of the quaternion. - - - - The Z value of the vector component of the quaternion. - - - - Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. - The vector type. T can be any primitive numeric type. - - - Creates a vector whose components are of a specified type. - The numeric type that defines the type of the components in the vector. - - - Creates a vector from a specified array. - A numeric array. - values is null. - - - Creates a vector from a specified array starting at a specified index position. - A numeric array. - The starting index position from which to create the vector. - values is null. - index is less than zero. -or- The length of values minus index is less than . - - - Copies the vector instance to a specified destination array. - The array to receive a copy of the vector values. - destination is null. - The number of elements in the current vector is greater than the number of elements available in the destination array. - - - Copies the vector instance to a specified destination array starting at a specified index position. - The array to receive a copy of the vector values. - The starting index in destination at which to begin the copy operation. - destination is null. - The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. - index is less than zero or greater than the last index in destination. - - - Returns the number of elements stored in the vector. - The number of elements stored in the vector. - Access to the property getter via reflection is not supported. - - - Returns a value that indicates whether this instance is equal to a specified vector. - The vector to compare with this instance. - true if the current instance and other are equal; otherwise, false. - - - Returns a value that indicates whether this instance is equal to a specified object. - The object to compare with this instance. - true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. - - - Returns the hash code for this instance. - The hash code. - - - Gets the element at a specified index. - The index of the element to return. - The element at index index. - index is less than zero. -or- index is greater than or equal to . - - - Returns a vector containing all ones. - A vector containing all ones. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise And of left and right. - - - Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise Or of the elements in left and right. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Returns a value that indicates whether each pair of elements in two specified vectors are equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise XOr of the elements in left and right. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Returns a value that indicates whether any single pair of elements in the specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if any element pairs in left and right are equal. false if no element pairs are equal. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar value. - The source vector. - A scalar value. - The scaled vector. - - - Multiplies a vector by the given scalar. - The scalar value. - The source vector. - The scaled vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The one's complement vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates a given vector. - The vector to negate. - The negated vector. - - - Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Returns the string representation of this vector using default formatting. - The string representation of this vector. - - - Returns the string representation of this vector using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns a vector containing all zeroes. - A vector containing all zeroes. - - - Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. - - - Returns a new vector whose elements are the absolute values of the given vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The absolute value vector. - - - Returns a new vector whose values are the sum of each pair of elements from two given vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The summed vector. - - - Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of signed bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The vector type. T can be any primitive numeric type. - The new vector with elements selected based on the mask. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The divided vector. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The dot product. - - - Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether each pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left and right are equal; otherwise, false. - - - Returns a value that indicates whether any single pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element pair in left and right is equal; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. - - - Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. - true if vector operations are subject to hardware acceleration; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than or equal to the corresponding element in right; otherwise, false. - - - Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The maximum vector. - - - Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The minimum vector. - - - Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. - The scalar value. - The vector. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - Returns a new vector whose values are the product of each pair of elements in two specified vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The product vector. - - - Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. - The vector. - The scalar value. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose elements are the negation of the corresponding element in the specified vector. - The source vector. - The vector type. T can be any primitive numeric type. - The negated vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector whose elements are the square roots of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The square root vector. - - - Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The difference vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Represents a vector with two single-precision floating-point values. - - - Creates a new object whose two elements have the same value. - The value to assign to both elements. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of the vector. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 2 elements are equal to one. - A vector whose two elements are equal to one (that is, it returns the vector (1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 3x2 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 3x2 matrix. - The source vector. - The matrix. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0). - The vector (1,0). - - - Gets the vector (0,1). - The vector (0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - Returns a vector whose 2 elements are equal to zero. - A vector whose two elements are equal to zero (that is, it returns the vector (0,0). - - - Represents a vector with three single-precision floating-point values. - - - Creates a new object whose three elements have the same value. - The value to assign to all three elements. - - - Creates a new object from the specified object and the specified value. - The vector with two elements. - The additional value to assign to the field. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the cross product of two vectors. - The first vector. - The second vector. - The cross product. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 3 elements are equal to one. - A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0,0). - The vector (1,0,0). - - - Gets the vector (0,1,0). - The vector (0,1,0).. - - - Gets the vector (0,0,1). - The vector (0,0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 3 elements are equal to zero. - A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). - - - Represents a vector with four single-precision floating-point values. - - - Creates a new object whose four elements have the same value. - The value to assign to all four elements. - - - Constructs a new object from the specified object and a W component. - The vector to use for the X, Y, and Z components. - The W component. - - - Creates a new object from the specified object and a Z and a W component. - The vector to use for the X and Y components. - The Z component. - The W component. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 4 elements are equal to one. - Returns . - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a four-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a four-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a three-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a two-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a two-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a three-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Gets the vector (0,0,0,1). - The vector (0,0,0,1). - - - Gets the vector (1,0,0,0). - The vector (1,0,0,0). - - - Gets the vector (0,1,0,0). - The vector (0,1,0,0).. - - - Gets a vector whose 4 elements are equal to zero. - The vector (0,0,1,0). - - - The W component of the vector. - - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 4 elements are equal to zero. - A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). - - - \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netcoreapp2.0/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netcoreapp2.0/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netstandard1.0/System.Numerics.Vectors.dll b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netstandard1.0/System.Numerics.Vectors.dll deleted file mode 100644 index d174da04775207dbbcc5c6959f409cfc37ae7855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38272 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 Yl1)(0QQ@d8!Ka zmtz$~l0;*@=WMSluUJJBwoi-8s)Em zsTavIDF@6If)zX!ZaUW|&F}-wDFK!Ve zmlfd3hCv&oWoHzyt&`f$`eqd{c8bMf8&Osa99wNf!G{MEw$(6^V1Hpx;`x^`4BOui;cUjaKV1WlMsZ6D?tPwJcfoC>S4m+ zOE`p{9>on5G-=eGFw~(P1KMd!J0@Zr*2GW(U$~?>*0f_sJNA4WCZwnqMYSm^ps0wV zVv6dD)^ti7Zg^JQuBZy$w-B!gp=ltu01mw|?iTGU#qZ(xtG~jNpW^ndy7;2Tal|tH zRbO=1FdfwSI}NBk#u9$4&J`24}kl=!YXQ+F?)VV96(zf5j#_UT+lRf59d?#p3)R_pJp z=xEboY$JcUi6nE^RM)Uxr>1fQI$VLFot8vE=ujV!%TNcJk;9W9Lu;zltVM`psDuCb z2pUfZHbsCMTEiD=fvFC)#u)Q;M2L$WDlssi4>&C#L!7Ayasrltp^g@gg#YN=z@>A; z5Modw(0!(3Br#CSMoWk(meK%AXh%tChb1(?e>#WrV?zOJ$&z%7CgrglKAHA^`OTp{aV>3*oDFw0vB{#-32s3X%r?P)I662G9UQuaObkI5uAvDOM`aDcR2@vP=u{%A zHNb~mDj$43L*Ia)29Y_!!v&}T!BP8YOi?{`ENZ-%BMsE0V``w_M=1IcihqQ>AEC~V zQ1~O%`Vnf=&=_&Che}EnM)`EqY)Uw)P|By<+<>5>Gc{$^PX|$rK#q2nAr41nGA36>fMK_bC zzy^+nug-?*RjS2>Y7PacYHF!D6rd`ht>#c2NOieD&7r^#B2(Z8ktu2E4rvTOqJSmg z8(=D=sfI~IEs6=hJweB$p*F?T)-ZV#6wp+|q@jpniZo0biYca8!_=XmE=}>Mh3N#S znGq7gNCpQEE|3TUzz1jNSX3jV1=fM~HKzN|NF6{kVWU|cOk>!D#vZDjjqsKGuj%0o{@W;&3LFw+rH76}5t#o^dGf(KhB zDmG=AtYHd*a4Lc(LztZCoGJT?*4x0wpsNm4RoNe%%4vC$E6q2a#4fuz*M5lYF-OjAkl{$M+ar;D>R z*~8h(%f&UBO!Z8Xd$_rJxw*KycqMsy%H8GCWT`Wm3>(6TPyHB7bEqz^2U88rMh&!6 z69Q?gU%K#S84tFL@HD43hn#9*eNg0QS2-jS>3Ezuxn-J*tCkW)8}~MmM`zN{BX^u!``?tyXOtx*mgmW zN6Du?NX4_aJsJCxFV3@!bb5TAi#(kMDEf56+S{vlOIA z08j#Ql_4eMlLo)(C5Jq-P%8Z96aH9JsbU~h2HYG7m%%A=8iZz1;RvnaHHM4{kO_84 zAOyA+f05G*SlJLzYt5f4oJd0(Kz&Vs?+^K9!k-*c!-fd(qfr64D&S>lwGSH zluVk|2!N7upe$TAYzqR_)cv28u^nEHF>QlufMsvU&lT$B4v#Z(gFh+q0zZjh#(_@{ zIK3sPp22ORgm#iaUo_P4pOeKAr9kQo$hQPJLB3rf&wf;nxJ|O5?Qw1U!JPpW#90b$ z_4nJ)5n@Z=whYc+!pbLyLbxrl{DXj|K>hHiFIBe)bzH1LxNe&E#|Uf2KdTcBb&P=% zZ~{d_{t75Fm(rVtmiv`%tO8lF)&;_es01Xz`hjK0qjUw967VZ(Nk8TJ#~%H&{**x4 zTxj16N(+;qwc9}{xJP6V;sEEc0n})ZKylRg_C>)U2?-kE0#ea>i$_Zul|BSgs2 zJUk(WGsH_q9^iVxp9|aqNrtqk5S9cr@Bqzn1-=^<;sU-T2=RmvcX)70DWoL9b%uEG zTaB=QBcL~78yCVeA$A7HE1||8TYGU`rSM=0@won9`RPmlF5$j*|0`?%zrNDcZ=7;C zh%D)(5NNe23n_cAO9(ktC7t>LE1p9TQf*R8z;CO^<(Tpj*;OEJDheP!(@JrwEZ2taQA_agSXeqOAMt16~*$K6FM^-`m-IZ&gW?QnG}%mn`8f zui|oGhsFrc9Q7$-#+OZpuE*cc1VrjGf)RWWA&-)X+npyc;&hLe8j*$q03suC9K5Z- z362VG=NOQBm?<<8c9W-M!eNTkoNR$PVxwQbiAgQUmN=YiWYX}i6$AGV9HLclv?hu4 z_a)7n>Pp>7FVaKm;pXY)+6$m33zEg_|0R;?lG<1@Z6jV-L}WLqE!m2O=2`w}*>FZD z35X7q1V)Fq^OO2{I0U(S1UUo+`a4Tokydn#TKuv`>bEemgs^0{Fu_OM5<(vof)H~` z;I7yFvvG4iZXMISe!Xl)Liz3sGryV^pTCmh({7%$>3dsI*!6?T7d71jKa!E#@0||Y zK5)=}%O!J0?A>*EyuxgLWL>Xi$7{dGP7Kj<70PA{tTs+97+P#+@|#d_dGfW0Y5O`> zJncSj+>6u68NUynV0`q&bEnklPW>KK4tp=$EPXoq^!GK-p1qla20eaiVP<79=HBn) z((iR78-?6H(u{jz${gub;}2cqZM3$IC`>r|f$M8#ZvA?=vHOO=DZlB(t-ifv(|J!x z@trl7Gy5JSTeRJ=VcE24UTy9K2RNFwdsa7Y=k4;zp7`8qdu(`)*$n z@eXBBI%H0QlFt_s z1g|UEnGDfjl2g_}T|i!5-meOP1JXawSw$LQd0X*xNUX69G#-ZjE}o^}Y3w z(HRr+ti!!b8_(#JDeN$BHW@*VwN<@YnRs@-$%n&a0+w40*NZ&hrJwGR~gSvutI&f@^rbEXPaY^DM;J>Mn0$ z<;-TKvyU5m+ckW{vz|G7x^ZrHnB3=r*!VUd-41gbX`WlVwd(F?$tTy5JECGfmoFg( zMqHO#HXRdx$?RR+JL}pY{hQwx7TighmLBUIsJzw3Ks9&Hb~w%p10SW?f8~*V31sZpQb_R(xKSenpFX zUTc0m<3s0}-KU2fv>LO%r>$#UxiomT{xKgnXOC|WUq>u3U9i4jd(o^;)|LBCD$WkS z??3*|l~TlCZP;x2vJoWBAjSyIfx|RJtgvF7~*w zw11}&=`Au}KRZi~eI{={ceAKP>tR#tUJdmd&npQiOjp=jCE78Wc()8MvdqE@fw?#Q~f}h;^*s_inm3yzztU-@QPH$`}t~Pov z(-Z7}XZ)O$F(7#nZtI#b+|jKzhv>JLMgGI;5CVsD=}GL!gx%zSt){BnZ%fef3P z_jk35biT*k+;HaN$M}$&g5i4>#MD+4z8zm*YNRu8=Z7!b9FH`~d5zM;TP=IDPpq8Q zZC+kj>#24ksqw|@S*qpx9)vepJA)q(ZW{C? zXU>IEC#xxw-^a@4+iaRzJVtcK1Q{yPorKU!O@Q}&E+MyBjE zo7q<)@tZLyI>Wp9ImMB~FCV3Un{I4y<9a()sp)2?D(5HPukG;*w>qmtm)+vTV-Bs7 zguZ#ve??fA@eAt;x(u8ZEWGr!)%7{KqmM7k2^fC9`10$zSMCey;{&g(UfJ=6UH|E( zix(<$VqZ3$cIT_xG-cJfL5b#hfu$oojZftC=5OuSZT!M@X-=1#X@8rdYJF>vQ_R)I zWX}($#wUF}T%Q;ujoe~ubjOE0u54{!XZgEFc*iQ|j+2g7dkRLzhsT!Kwc$H&?s7gN z`Ti+~q?dsm@2?P{cR|&2Pxc;X6aAoYS?5SN1bL=fM3d=h?M^*hUa{nC=)WwDt)j|XoKWn?3Pmion{3Blu28N>RQ z;c@Vi?dwTt_-UK56RsL1JWu5-MEo1au396k8noU`;7>(5eD;7cq zkpUVER?PG7Suy&U2@e=NULe<>?H7kYJ-xh#+XStCtngXuym7!|J*TWCq3<6j=05G( z-r>CeO6_llA38{Dtd0zctSqufSkcj`>(=>8VrSpZ-d4NeL&3&S<$Lc(zQYgQ)M=V_ zc;Re`!zb;?eX&O!Zg)PlJ^TI=-TB;wu{UbRc8Pmc?l=48>*vpIm$h{5P#Zh*MYPq( zHVaBxOuaQtX!hz>_=j=ThaMO$oE(0z`KgJ@@-_oAXPJIz@gn+Mzay64{#g<(Bhdv6H}CM)vdS1vC7}I zo{iKS7m=xF6y9-2>yX*Xldm%l?S7J76E`Jp=(O=w%|p1o-XE{&Csr+Vf9l}W^x!?E zN2522wH^AEeC)Pvyo<5iTyN}EgKH^o6vu+joNoHCU>|S8>Cg7pTaKN(Lj2jt)@S9N zk2jYN585W|8!YeZ6TZgpN%+(Cg96iHj&(u=uzxBBzlV1tz@mER+c9f$1X zTNK_Z_q9#iJ9T1t{rC&BELQ2p&wep~RayU1odFKp2Bjmjij}X72fs5ewcaxN_<$wB zQm2_$ZV&8u9t}$hK6z|(eXYqSJ>~e_H62%Td77`!9pZYn|w``otPP z-u#b?GN$%BZ+9gqdQI7hyLLg2wkygax_8sL!?piBVA3QqYt-wWE>%zLEH8@#LQc5p6@HoJ2LBf`_ie^GR{Ub-L+rd&ss+uv+NS{{Ud+x9*MTb zdM^j-z4))J_b=asf3V&Lj1dOw4fY(7#g*8$TJee}k;UVS8vn}tRwplz{mYjZB?bj6 zjjKCXEnL|(r^g$ik)!;7jMe{J@9xmn2GhsxjpqiqUwyb?W!~ju1yNzdT1VBu-kCZ^ z%a83CJh9gCOr!bZGLvfKIETX}Mv*hF7W&+Z+qSyL%oaDzh_V&i@?ZUS;z@hr*{vND z#r%WgLvFo@ZgMqZ`II~N#}7DLwENz)R|2Pz+=r9fSX*X)e)r{0{tQRm_rhD*+fBmf zOh^|i%WJE>X7_X0AEoywDZZ0&6r{_})ZQabvwxml{{T?XV@a$9e~+ z`yWS^9f^v4FeiIj#tN^lXWkX;TxL?3)cX1SS*=|Kd8SGA9nCXamb}pZ-G19~|Mho2 zJ{h|4_JSoUx7zUi1Fag_4ASn=muV23=tlzV}31?Qr!Hf=(z6MH?1eZJ`0j5&weDe8)CRRY6jgDiH=D%out zvuW*sj$^6^$u?wF8!g(oEcitu#n-XU8SB1Xk2*Ncsy?-Dj@hV2DV&ZDt9wqYy<>5A z;8Fn{^_s)}6Gi&I7!m0JA zwE{MKNf>VbzKscL`}e1PlZM^rsuIEwuh-Pu)LLAr4r}w72RpnCo737-J(3;T1g{1) z33*aj4bEt)SiluJG5Mo3I|qF_`_dwc86msSMbTGgDW@ic~Kk}Dux#o!v)r%_>hV^_^gI4 zMfC!ZSvulpw6W?_bo=bfNQwTWl!;;Y zA0BXz?z>Cq7*enOTxs))7qq@^ELu6NM(2Fwo*6co8$Hb9<~+*!TtR#|*(mSX*_$(E zBYN#Lt6je2&Es~DPX`a_^}?V+Kd~nK%0$QCJ}mzIHR=;#*lG8ob1|E4tUo!e_q}4j zZ}VK94w_8%eOz_Z`c%%vFSAz~PHDU-ZdRY7qD~$sc(UcS>(4sWdfVST9z6SQ!s=EA zM-JTI;CSOf^u10m9~x~ANo=?O>;AJHwie&cKPp+)zcwtV$Kt9DL(ujyWva|44@w8M znO-*T(#j`VRRhhJzcoI$u48CXy~*){v3(aMEw3)InNOB*tQ$I9AT8lE0hS@9;}iaE zYl>eVaIiEyfi!85nk&_2fRF(7W)zq&)yJE5a1`Msb$4@h^X&DLdgmM(J*muH&uFQx zyL9;2(c3D#V;8Y?1$J(+u7o$zJ-Y7kh}=3u-iw!YSJx)JA3UOV;{Mn*liCbOx<4bg z!&X0+h0}H>JiWf=MbD4Q*EOxCC(KyC^r_jDuQ7$^tKB+0>TUJfu1?RW{?m}Fx9_TY zzj!qC!18drty6{`clLB?rP@%xAbESZgPkQuaL8f(f%@-NZNI;6ZCI{5FJ_zW3QNmV zclT^ZXKqEC`CncxwtN1l_ux&sgC3XPD{t zZRHE6vzN$qRf<=EqbC{mIoif;&nB0HE^RHsF7LTL>t?disVI}3XKx>>h2ZkFN-;fv%#PG(`pB{)&TO+KrJjsDY?Io7E`ZaxC7oXqg zYO}r8xVJ2)!>fvCG37huqtCfjmFP}|g}Nau)IT=tETajdCNGFHO*};1LPHbSy{Zi& z4f~hu-rA8iup)y4vX%|IGJo7zmcVYDls+euN~IpKq3q=>rO(Nn8TdbBd-=quGk$G{ z&AE7>@XY+Zx0_5k6+NfCX?-{MPcb`}8?1g_l)J0?(unk-)FD8+r3}^ ztqy|*3{Q;?J{v4P;(2ZS;OWhVmYlHpuyDfN>KA=d4DNhB5uR-q~mJmMimpD}}X9kIY}2_@wT2WWSp8(_WnVt^362MdefPtxG*# z@6rEG^6$qrtNS8Y-4CI+LR#U2Ek@tFiU`f-1ed+ly!_y~r|X)WS~lV3k*67+?*luZ z7`yH7Z#BD+q|~`>66r=JyURTsJltKS4z8}!REMNwR~c+NyLw9Hu2Q!Y(({MynUJiM zyOI3UCCi$6cvx=CTyiLvQ~u|NZNEGVQ)K5*=WU?g%tkQQ=R`~#NDl|nliH$@X=)8y zG~LN)GD?GCi$=4T{pSV1mJD^?_7_E{VBwV((-?+2av86=Il%VQ+hhCmn4c<9L6xC;l3#U(1`&oA{ zI3{wsYRxwFzcldaos0M9UsBmOU3ph$qsiMCtus4XBm{%lu)UgZf;3?e=uV%=SseC&HTz2^q3Rd!pwNhwW#*TQf_0 ztT{9Dp7hhS;0Z$)-3l*wec|)~7vsq6mwwwSwH|&yQr^9{Xy=q}OGNu#K6v@v=lsW+ z?sL9woiy@PckjrRK`o!R(y5)>E`*o-Jil^&0#}!F;fiGWz1WS{o*Sp`J>R{=JfbAO zer}AZLEp_ym-`q^UbUv#?wKxgo;fRz%8x_@RXXTL^)(;z`P=0O!UEy@Y8TIMS~D+C z9K5Mr-N>@qBin}(7ho z=o_X5DeUyXsiT`0z0c!LK`C6KfPJ2S_q0{Q`S~IQ2VaEXz(oicbIV_RQW~^yTzMgD zS&2cI>(*DBdRWZ!Yu+aPVXw$#wE|C5Ug*~0dv(mOdZZs{bV2)t=bjmYH3z-U5{;#P zr^o0Pq>LIit*>>)>baq_ANKEa>iVqcbz=Lyt1m8XyQ)xY_4$gPhx(fGAEpj^;M~oo zk<ydBdzKL32XZ7+kCVX=1e3zat-wc8xp=fcyc{*y~D4qi97tocRn zwc`>VjENXw`l{Ng=bcII9ag#Y*uUBPoAc@Q+>UG4t)AjJ?9`kh`?uk-lP%m@?e)q^ z86LfLw*JayRwE9-*~%>&|32}>iEcZ`O&hg+mxZcTqKVz6Ber&)tt!1byB{C2cFL+2 zR*RRWK9RK?aMLbyPU7fWtrAXKbn))CZ)031YwnAag}t55THVf0(2okrTmJ#w+`fWS zl6ZMnll67Y&vfr{->X{xp;hR1liGkGfp>QARTkb*-nYKKGib*C=X+YjT`nE}BrKF% zynMp-C%xyb{&ICq>aE?=iw8eF_q5CX(AJBM>=rE^+OO!|*rfc#bxtGB$IXu4nP+GB z@@eK?yNUJ_eLNy|-y9h*W}jBq{bv^XJE_XwXMM<*^sqNd=vzM1JHlner8T3QUYi^K zree+ZpsI|@Q#a0y9>;8V!8t$iko@p?NmCq$ zFn0N?;_&31qDanx+cIgH@S73I**T8=Rhgs@lL3cxHFuVnvF;5gQunAc;7)2X+z(BJ z+oJHTcX;rfQTkT5qr~hF29=t9`@Je#Sa~C+z|`^d1yw)GS=tqbHvm$z*Yw-oLdVv#?saUw@XSWDylGyy9;Va>bj&ZbdTlgx(Ii#r_&0}bI6-ap zj5XM{U@2c`*3$rORco5UX>MhO5g07_&TWVwJ+^Y)VV#+YPIU_ zYTKtLuD;e=J;QE#Wtd(^?N_2P=UVP{Ho5g;zr(TKb2o%~i4TbP99X&P?z)SYn~aVM z?BVG=(AISL+BdczuGzPfq*bo#Ii`P>V)16xULU?-5z)rZyQGs*SgQ7}^9muKWJ3XZP%y-08{mch&I~7tp!tpt_!~r!Um%5@Il;sO1UN zdjHy43p)konY$f0HGlrR!a~bWA>}QXe-5@PdOP>S&h*V)rr&y;n{WE$k;jYzlP=%S zt+(o*dvEopFTXw3E_#&Ke)SjfDX;5<>(_HLlP7mPIVUzeVrNmDWp%!xvqj-^U-8;b zpO+k2kg&UY^sKmnvEdOTDcEso9dt3kiV`FXWwPVxrS_jm*iMMP}#I5i-xNXx` zaiLwHb6Jyz9*6r2TMSz+>pH_bEQ@-4Fsr+b~6=~6Ypc)IB6nf=GgOdYH| zrd+unFl)ry(Oc%q z)v3nX^2nAO9ecJezP-(_OfRr*$q2&}2}^z71pk8TsrbzeEdjm>>HF9(>yY0>%8tAIf9<@O$XAf zO&Y;$rr95JBb^<+;3kL=@-N~LZ>oy7EGXXeZ@;hW;p`dU;P2`N_jSDj{r={C-KrA3 zqp&435H1|{)U5usirY}Df6gB!tN%W$e^Px*#{*vOr7rGnZupef4OagET`?qw{7c?b zY)EVRJ;kiyJ>|z+-T2*v1l{|2?a#ghz0^#1d!FIgc9JJwjHbW+G(2rux+=!t>_Rar z8Tt9?kp5ll6Zh}EE88<@vv+FS-Y=R&+w!C>eVdz>n;p|KnlMC0_FPK_=)decdPI!B z&iSxfPtkh6t5a8;%OT@zN@@aiPds`XTzqt=bzkQmeS=>02rhFTVXl((o19o2v-bGZ zu2XjJTa<88W|U=j!1QBT(YEWdFG0I)&8+)1Qkq(fUEL*ROk~p9gs*umJHCj^T~RmI zFU%+Er2cGycfa9pQ+IJI0){<5(dBE_-I<5hE_qehMl5}CDO@ml(`b>~gZvh29?m%0 z;l5MA*2QnGq|_}Sc1yIT<{$mCeOG-zLLcMV1V6$uOtTqu4_fNhU#@-6Cbx?pE1mS( zfAEl?=KEdx_Zpem{jcuW{Qb4>*>|yrCq9@TpVa?k$7z##pFcL!WZ!@GHX*Y%#hW~& z1L^MI>_V-3{|jyt{z=}j=B=XEy!fJ1aXDE$g)E-irF-kZjml2N1GydN)Kpt2)<0f! zj4-9|hF|=2w7O!R$be`M|t@hM! z`qrtSSblNo#`HVCAA5JG5GlHl0oIlsjz8rtteDud_4Z9)c{j7?Id``G+I_Xtw@r5^ zxNJ*GoOwCU=i$p^Gg2pw`#vCP_|^TLwI|!$@_N#&^T6aegDo=m&aRo?;nVP;6$2*a zFUmZ1bM{BGFP;~sy*aQ@Tv4{5Zm#Jno?mJ0#-dr4o|28N?xs9>|7Pc~|>jmHHN9=>1`_KF4vO>znwAGsrl~~t9x!-btRy~^vHqdt55Ckemm`2-0qXt z$X#EL+zb1xyE7r;;T-d3o=)43_uxA|*R6_lyYyVkw#C`?!`#e8TQ9j^KAkx6nrd_? zzTtie&LQ@&&LP&h@%wvNw$NQn%|7e?IQ#s2O*;GAI__@NC3nrYbuj#&Is5;^iK?#h4*_>DjHr);Q|B#lD-!>GEMn_sqzn zoqk`I|H?qPM3~Oq_NDEMWv%91{qiz7+gh#|@u^EdpJPh9p?lW1+^;AbFk{rJt>2FD zD|aY%G${#|Z+6N(wEdDn;jH$~5tqzDrs!GTU%S>Xv*(_qx%O?uFWfvN9IYoe8{gj8 z^mfs(m}d!5dQ&gX?Ces%+D7;ByL78^r%nltEIc|}AD>XCKP$S^vxm>dWe>j8{_TJ* zGdgU(OblssxKsCIZ&sfZY-!iw`ViYQ%4tVech+)0VEH5=r>@7)_2`IPe*W5GcuX|)wMEx}KraW<-!0I=C6M%zwk2EBOLog2m+X>g>bKY>VKVrA zVWq?${{S+3#)10`96q|*OfDfUP4qQyf26A$+%4^;VZgZs%^+1|yM|XyIQF+E+mK>) z2C&(W-xcA+jGG7ZmPx;)(;h=neP-NrL5Uk z)5bSyru&vd-&@%Y*;P~AeP=*MySXlwJ6eWy7`UNkX2{N{l;&NUFEZ#I<+Ezm?e4?< z>XuDu)z#*r`SZNm&Z?N-FShr7^}D`d@cYblXVIyeuEXo%<(tmFKhwSGSHkaXhf}jB zrB`m#ty`IQzng_|aO$|65k3Kz9PR{oUfl`p_ke{Jl^PCFT*zH zV-}edUCgn$((8@5h&bBlUfcG=>K5qSG`YL1@$`B}dy!k3RTGC>lR8c;bq%{QwCP@h zug_Ds``t@|P*?7ekvOPy^8CY(LkA3^;J<>=apioGd;< z7O&+s{?*up%duo}(Sl+B9UBWS)_KM3nr|c$zngt`8Ta$=iQdbu(VkN}!#VkyqwB3UcS<9_A1dG9chg)&YF6{>3->JASHGro+T-tD^KY5ox#Ql$ z`@*6NkA}YQmNqtJ^}?F%`^(qwkf%&&F(T}0?Ut&D9sH^HES{Lp=zZVfO0O>~w^>Du z7aF7(w6NQDKll3N(j&*mU(Gp}%s<4-OIme)z?e;6pU(e%e&Wh6>q@+TyYafe@s8c% zPlwXOg3Uzr`o8ry#k)s;uE^|u?t* - - - System.Numerics.Vectors - - - - Represents a 3x2 matrix. - - - Creates a 3x2 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a rotation matrix using the given rotation in radians. - The amount of rotation, in radians. - The rotation matrix. - - - Creates a rotation matrix using the specified rotation in radians and a center point. - The amount of rotation, in radians. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified X and Y components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. - The uniform scale to use. - The center offset. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The center point. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the given scale. - The uniform scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale with an offset from the specified center point. - The scale to use. - The center offset. - The scaling matrix. - - - Creates a skew matrix from the specified angles in radians. - The X angle, in radians. - The Y angle, in radians. - The skew matrix. - - - Creates a skew matrix from the specified angles in radians and a center point. - The X angle, in radians. - The Y angle, in radians. - The center point. - The skew matrix. - - - Creates a translation matrix from the specified 2-dimensional vector. - The translation position. - The translation matrix. - - - Creates a translation matrix from the specified X and Y components. - The X position. - The Y position. - The translation matrix. - - - Returns a value that indicates whether this instance and another 3x2 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant for this matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - The multiplicative identify matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Represents a 4x4 matrix. - - - Creates a object from a specified object. - A 3x2 matrix. - - - Creates a 4x4 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the third element in the first row. - The value to assign to the fourth element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the third element in the second row. - The value to assign to the third element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - The value to assign to the third element in the third row. - The value to assign to the fourth element in the third row. - The value to assign to the first element in the fourth row. - The value to assign to the second element in the fourth row. - The value to assign to the third element in the fourth row. - The value to assign to the fourth element in the fourth row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a spherical billboard that rotates around a specified object position. - The position of the object that the billboard will rotate around. - The position of the camera. - The up vector of the camera. - The forward vector of the camera. - The created billboard. - - - Creates a cylindrical billboard that rotates around a specified axis. - The position of the object that the billboard will rotate around. - The position of the camera. - The axis to rotate the billboard around. - The forward vector of the camera. - The forward vector of the object. - The billboard matrix. - - - Creates a matrix that rotates around an arbitrary vector. - The axis to rotate around. - The angle to rotate around axis, in radians. - The rotation matrix. - - - Creates a rotation matrix from the specified Quaternion rotation value. - The source Quaternion. - The rotation matrix. - - - Creates a rotation matrix from the specified yaw, pitch, and roll. - The angle of rotation, in radians, around the Y axis. - The angle of rotation, in radians, around the X axis. - The angle of rotation, in radians, around the Z axis. - The rotation matrix. - - - Creates a view matrix. - The position of the camera. - The target towards which the camera is pointing. - The direction that is "up" from the camera's point of view. - The view matrix. - - - Creates an orthographic perspective matrix from the given view volume dimensions. - The width of the view volume. - The height of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a customized orthographic projection matrix. - The minimum X-value of the view volume. - The maximum X-value of the view volume. - The minimum Y-value of the view volume. - The maximum Y-value of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a perspective projection matrix from the given view volume dimensions. - The width of the view volume at the near view plane. - The height of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. - The field of view in the y direction, in radians. - The aspect ratio, defined as view space width divided by height. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a customized perspective projection matrix. - The minimum x-value of the view volume at the near view plane. - The maximum x-value of the view volume at the near view plane. - The minimum y-value of the view volume at the near view plane. - The maximum y-value of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a matrix that reflects the coordinate system about a specified plane. - The plane about which to create a reflection. - A new matrix expressing the reflection. - - - Creates a matrix for rotating points around the X axis. - The amount, in radians, by which to rotate around the X axis. - The rotation matrix. - - - Creates a matrix for rotating points around the X axis from a center point. - The amount, in radians, by which to rotate around the X axis. - The center point. - The rotation matrix. - - - The amount, in radians, by which to rotate around the Y axis from a center point. - The amount, in radians, by which to rotate around the Y-axis. - The center point. - The rotation matrix. - - - Creates a matrix for rotating points around the Y axis. - The amount, in radians, by which to rotate around the Y-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis. - The amount, in radians, by which to rotate around the Z-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis from a center point. - The amount, in radians, by which to rotate around the Z-axis. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a uniform scaling matrix that scale equally on each axis. - The uniform scaling factor. - The scaling matrix. - - - Creates a scaling matrix with a center point. - The vector that contains the amount to scale on each axis. - The center point. - The scaling matrix. - - - Creates a uniform scaling matrix that scales equally on each axis with a center point. - The uniform scaling factor. - The center point. - The scaling matrix. - - - Creates a scaling matrix from the specified X, Y, and Z components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The center point. - The scaling matrix. - - - Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. - The direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. - - - Creates a translation matrix from the specified 3-dimensional vector. - The amount to translate in each axis. - The translation matrix. - - - Creates a translation matrix from the specified X, Y, and Z components. - The amount to translate on the X axis. - The amount to translate on the Y axis. - The amount to translate on the Z axis. - The translation matrix. - - - Creates a world matrix with the specified parameters. - The position of the object. - The forward direction of the object. - The upward direction of the object. Its value is usually [0, 1, 0]. - The world matrix. - - - Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. - The source matrix. - When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. - When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. - When the method returns, contains the translation component of the transformation matrix if the operation succeeded. - true if matrix was decomposed successfully; otherwise, false. - - - Returns a value that indicates whether this instance and another 4x4 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant of the current 4x4 matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - Gets the multiplicative identity matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The third element of the first row. - - - - The fourth element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The third element of the second row. - - - - The fourth element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - The third element of the third row. - - - - The fourth element of the third row. - - - - The first element of the fourth row. - - - - The second element of the fourth row. - - - - The third element of the fourth row. - - - - The fourth element of the fourth row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to care - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Transforms the specified matrix by applying the specified Quaternion rotation. - The matrix to transform. - The rotation t apply. - The transformed matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Transposes the rows and columns of a matrix. - The matrix to transpose. - The transposed matrix. - - - Represents a three-dimensional plane. - - - Creates a object from a specified four-dimensional vector. - A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. - - - Creates a object from a specified normal and the distance along the normal from the origin. - The plane's normal vector. - The plane's distance from the origin along its normal vector. - - - Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. - The X component of the normal. - The Y component of the normal. - The Z component of the normal. - The distance of the plane along its normal from the origin. - - - Creates a object that contains three specified points. - The first point defining the plane. - The second point defining the plane. - The third point defining the plane. - The plane containing the three points. - - - The distance of the plane along its normal from the origin. - - - - Calculates the dot product of a plane and a 4-dimensional vector. - The plane. - The four-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. - The plane. - The 3-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the vector of this plane. - The plane. - The three-dimensional vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another plane object are equal. - The other plane. - true if the two planes are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - The normal vector of the plane. - - - - Creates a new object whose normal vector is the source plane's normal vector normalized. - The source plane. - The normalized plane. - - - Returns a value that indicates whether two planes are equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether two planes are not equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the string representation of this plane object. - A string that represents this object. - - - Transforms a normalized plane by a 4x4 matrix. - The normalized plane to transform. - The transformation matrix to apply to plane. - The transformed plane. - - - Transforms a normalized plane by a Quaternion rotation. - The normalized plane to transform. - The Quaternion rotation to apply to the plane. - A new plane that results from applying the Quaternion rotation. - - - Represents a vector that is used to encode three-dimensional physical rotations. - - - Creates a quaternion from the specified vector and rotation parts. - The vector part of the quaternion. - The rotation part of the quaternion. - - - Constructs a quaternion from the specified components. - The value to assign to the X component of the quaternion. - The value to assign to the Y component of the quaternion. - The value to assign to the Z component of the quaternion. - The value to assign to the W component of the quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Concatenates two quaternions. - The first quaternion rotation in the series. - The second quaternion rotation in the series. - A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. - - - Returns the conjugate of a specified quaternion. - The quaternion. - A new quaternion that is the conjugate of value. - - - Creates a quaternion from a vector and an angle to rotate about the vector. - The vector to rotate around. - The angle, in radians, to rotate around the vector. - The newly created quaternion. - - - Creates a quaternion from the specified rotation matrix. - The rotation matrix. - The newly created quaternion. - - - Creates a new quaternion from the given yaw, pitch, and roll. - The yaw angle, in radians, around the Y axis. - The pitch angle, in radians, around the X axis. - The roll angle, in radians, around the Z axis. - The resulting quaternion. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Calculates the dot product of two quaternions. - The first quaternion. - The second quaternion. - The dot product. - - - Returns a value that indicates whether this instance and another quaternion are equal. - The other quaternion. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Gets a quaternion that represents no rotation. - A quaternion whose values are (0, 0, 0, 1). - - - Returns the inverse of a quaternion. - The quaternion. - The inverted quaternion. - - - Gets a value that indicates whether the current instance is the identity quaternion. - true if the current instance is the identity quaternion; otherwise, false. - - - Calculates the length of the quaternion. - The computed length of the quaternion. - - - Calculates the squared length of the quaternion. - The length squared of the quaternion. - - - Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. - The first quaternion. - The second quaternion. - The relative weight of quaternion2 in the interpolation. - The interpolated quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Divides each component of a specified by its length. - The quaternion to normalize. - The normalized quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Returns a value that indicates whether two quaternions are equal. - The first quaternion to compare. - The second quaternion to compare. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether two quaternions are not equal. - The first quaternion to compare. - The second quaternion to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Interpolates between two quaternions, using spherical linear interpolation. - The first quaternion. - The second quaternion. - The relative weight of the second quaternion in the interpolation. - The interpolated quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this quaternion. - The string representation of this quaternion. - - - The rotation component of the quaternion. - - - - The X value of the vector component of the quaternion. - - - - The Y value of the vector component of the quaternion. - - - - The Z value of the vector component of the quaternion. - - - - Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. - The vector type. T can be any primitive numeric type. - - - Creates a vector whose components are of a specified type. - The numeric type that defines the type of the components in the vector. - - - Creates a vector from a specified array. - A numeric array. - values is null. - - - Creates a vector from a specified array starting at a specified index position. - A numeric array. - The starting index position from which to create the vector. - values is null. - index is less than zero. -or- The length of values minus index is less than . - - - Copies the vector instance to a specified destination array. - The array to receive a copy of the vector values. - destination is null. - The number of elements in the current vector is greater than the number of elements available in the destination array. - - - Copies the vector instance to a specified destination array starting at a specified index position. - The array to receive a copy of the vector values. - The starting index in destination at which to begin the copy operation. - destination is null. - The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. - index is less than zero or greater than the last index in destination. - - - Returns the number of elements stored in the vector. - The number of elements stored in the vector. - Access to the property getter via reflection is not supported. - - - Returns a value that indicates whether this instance is equal to a specified vector. - The vector to compare with this instance. - true if the current instance and other are equal; otherwise, false. - - - Returns a value that indicates whether this instance is equal to a specified object. - The object to compare with this instance. - true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. - - - Returns the hash code for this instance. - The hash code. - - - Gets the element at a specified index. - The index of the element to return. - The element at index index. - index is less than zero. -or- index is greater than or equal to . - - - Returns a vector containing all ones. - A vector containing all ones. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise And of left and right. - - - Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise Or of the elements in left and right. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Returns a value that indicates whether each pair of elements in two specified vectors are equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise XOr of the elements in left and right. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Returns a value that indicates whether any single pair of elements in the specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if any element pairs in left and right are equal. false if no element pairs are equal. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar value. - The source vector. - A scalar value. - The scaled vector. - - - Multiplies a vector by the given scalar. - The scalar value. - The source vector. - The scaled vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The one's complement vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates a given vector. - The vector to negate. - The negated vector. - - - Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Returns the string representation of this vector using default formatting. - The string representation of this vector. - - - Returns the string representation of this vector using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns a vector containing all zeroes. - A vector containing all zeroes. - - - Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. - - - Returns a new vector whose elements are the absolute values of the given vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The absolute value vector. - - - Returns a new vector whose values are the sum of each pair of elements from two given vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The summed vector. - - - Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of signed bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The vector type. T can be any primitive numeric type. - The new vector with elements selected based on the mask. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The divided vector. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The dot product. - - - Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether each pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left and right are equal; otherwise, false. - - - Returns a value that indicates whether any single pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element pair in left and right is equal; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. - - - Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. - true if vector operations are subject to hardware acceleration; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than or equal to the corresponding element in right; otherwise, false. - - - Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The maximum vector. - - - Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The minimum vector. - - - Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. - The scalar value. - The vector. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - Returns a new vector whose values are the product of each pair of elements in two specified vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The product vector. - - - Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. - The vector. - The scalar value. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose elements are the negation of the corresponding element in the specified vector. - The source vector. - The vector type. T can be any primitive numeric type. - The negated vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector whose elements are the square roots of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The square root vector. - - - Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The difference vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Represents a vector with two single-precision floating-point values. - - - Creates a new object whose two elements have the same value. - The value to assign to both elements. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of the vector. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 2 elements are equal to one. - A vector whose two elements are equal to one (that is, it returns the vector (1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 3x2 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 3x2 matrix. - The source vector. - The matrix. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0). - The vector (1,0). - - - Gets the vector (0,1). - The vector (0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - Returns a vector whose 2 elements are equal to zero. - A vector whose two elements are equal to zero (that is, it returns the vector (0,0). - - - Represents a vector with three single-precision floating-point values. - - - Creates a new object whose three elements have the same value. - The value to assign to all three elements. - - - Creates a new object from the specified object and the specified value. - The vector with two elements. - The additional value to assign to the field. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the cross product of two vectors. - The first vector. - The second vector. - The cross product. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 3 elements are equal to one. - A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0,0). - The vector (1,0,0). - - - Gets the vector (0,1,0). - The vector (0,1,0).. - - - Gets the vector (0,0,1). - The vector (0,0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 3 elements are equal to zero. - A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). - - - Represents a vector with four single-precision floating-point values. - - - Creates a new object whose four elements have the same value. - The value to assign to all four elements. - - - Constructs a new object from the specified object and a W component. - The vector to use for the X, Y, and Z components. - The W component. - - - Creates a new object from the specified object and a Z and a W component. - The vector to use for the X and Y components. - The Z component. - The W component. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 4 elements are equal to one. - Returns . - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a four-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a four-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a three-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a two-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a two-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a three-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Gets the vector (0,0,0,1). - The vector (0,0,0,1). - - - Gets the vector (1,0,0,0). - The vector (1,0,0,0). - - - Gets the vector (0,1,0,0). - The vector (0,1,0,0).. - - - Gets a vector whose 4 elements are equal to zero. - The vector (0,0,1,0). - - - The W component of the vector. - - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 4 elements are equal to zero. - A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). - - - \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netstandard2.0/System.Numerics.Vectors.dll b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/netstandard2.0/System.Numerics.Vectors.dll deleted file mode 100644 index ba0aa0cf6c56a5edd990cca24ab6588cb4d49269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38272 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 nH8*R}rZFpL?989k;?kV - - - System.Numerics.Vectors - - - -

      Represents a 3x2 matrix. - - - Creates a 3x2 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a rotation matrix using the given rotation in radians. - The amount of rotation, in radians. - The rotation matrix. - - - Creates a rotation matrix using the specified rotation in radians and a center point. - The amount of rotation, in radians. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified X and Y components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the specified scale with an offset from the specified center. - The uniform scale to use. - The center offset. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The center point. - The scaling matrix. - - - Creates a scaling matrix that scales uniformly with the given scale. - The uniform scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a scaling matrix from the specified vector scale with an offset from the specified center point. - The scale to use. - The center offset. - The scaling matrix. - - - Creates a skew matrix from the specified angles in radians. - The X angle, in radians. - The Y angle, in radians. - The skew matrix. - - - Creates a skew matrix from the specified angles in radians and a center point. - The X angle, in radians. - The Y angle, in radians. - The center point. - The skew matrix. - - - Creates a translation matrix from the specified 2-dimensional vector. - The translation position. - The translation matrix. - - - Creates a translation matrix from the specified X and Y components. - The X position. - The Y position. - The translation matrix. - - - Returns a value that indicates whether this instance and another 3x2 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant for this matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - The multiplicative identify matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Represents a 4x4 matrix. - - - Creates a object from a specified object. - A 3x2 matrix. - - - Creates a 4x4 matrix from the specified components. - The value to assign to the first element in the first row. - The value to assign to the second element in the first row. - The value to assign to the third element in the first row. - The value to assign to the fourth element in the first row. - The value to assign to the first element in the second row. - The value to assign to the second element in the second row. - The value to assign to the third element in the second row. - The value to assign to the third element in the second row. - The value to assign to the first element in the third row. - The value to assign to the second element in the third row. - The value to assign to the third element in the third row. - The value to assign to the fourth element in the third row. - The value to assign to the first element in the fourth row. - The value to assign to the second element in the fourth row. - The value to assign to the third element in the fourth row. - The value to assign to the fourth element in the fourth row. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values of value1 and value2. - - - Creates a spherical billboard that rotates around a specified object position. - The position of the object that the billboard will rotate around. - The position of the camera. - The up vector of the camera. - The forward vector of the camera. - The created billboard. - - - Creates a cylindrical billboard that rotates around a specified axis. - The position of the object that the billboard will rotate around. - The position of the camera. - The axis to rotate the billboard around. - The forward vector of the camera. - The forward vector of the object. - The billboard matrix. - - - Creates a matrix that rotates around an arbitrary vector. - The axis to rotate around. - The angle to rotate around axis, in radians. - The rotation matrix. - - - Creates a rotation matrix from the specified Quaternion rotation value. - The source Quaternion. - The rotation matrix. - - - Creates a rotation matrix from the specified yaw, pitch, and roll. - The angle of rotation, in radians, around the Y axis. - The angle of rotation, in radians, around the X axis. - The angle of rotation, in radians, around the Z axis. - The rotation matrix. - - - Creates a view matrix. - The position of the camera. - The target towards which the camera is pointing. - The direction that is "up" from the camera's point of view. - The view matrix. - - - Creates an orthographic perspective matrix from the given view volume dimensions. - The width of the view volume. - The height of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a customized orthographic projection matrix. - The minimum X-value of the view volume. - The maximum X-value of the view volume. - The minimum Y-value of the view volume. - The maximum Y-value of the view volume. - The minimum Z-value of the view volume. - The maximum Z-value of the view volume. - The orthographic projection matrix. - - - Creates a perspective projection matrix from the given view volume dimensions. - The width of the view volume at the near view plane. - The height of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. - The field of view in the y direction, in radians. - The aspect ratio, defined as view space width divided by height. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - fieldOfView is less than or equal to zero. -or- fieldOfView is greater than or equal to . nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a customized perspective projection matrix. - The minimum x-value of the view volume at the near view plane. - The maximum x-value of the view volume at the near view plane. - The minimum y-value of the view volume at the near view plane. - The maximum y-value of the view volume at the near view plane. - The distance to the near view plane. - The distance to the far view plane. - The perspective projection matrix. - nearPlaneDistance is less than or equal to zero. -or- farPlaneDistance is less than or equal to zero. -or- nearPlaneDistance is greater than or equal to farPlaneDistance. - - - Creates a matrix that reflects the coordinate system about a specified plane. - The plane about which to create a reflection. - A new matrix expressing the reflection. - - - Creates a matrix for rotating points around the X axis. - The amount, in radians, by which to rotate around the X axis. - The rotation matrix. - - - Creates a matrix for rotating points around the X axis from a center point. - The amount, in radians, by which to rotate around the X axis. - The center point. - The rotation matrix. - - - The amount, in radians, by which to rotate around the Y axis from a center point. - The amount, in radians, by which to rotate around the Y-axis. - The center point. - The rotation matrix. - - - Creates a matrix for rotating points around the Y axis. - The amount, in radians, by which to rotate around the Y-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis. - The amount, in radians, by which to rotate around the Z-axis. - The rotation matrix. - - - Creates a matrix for rotating points around the Z axis from a center point. - The amount, in radians, by which to rotate around the Z-axis. - The center point. - The rotation matrix. - - - Creates a scaling matrix from the specified vector scale. - The scale to use. - The scaling matrix. - - - Creates a uniform scaling matrix that scale equally on each axis. - The uniform scaling factor. - The scaling matrix. - - - Creates a scaling matrix with a center point. - The vector that contains the amount to scale on each axis. - The center point. - The scaling matrix. - - - Creates a uniform scaling matrix that scales equally on each axis with a center point. - The uniform scaling factor. - The center point. - The scaling matrix. - - - Creates a scaling matrix from the specified X, Y, and Z components. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The scaling matrix. - - - Creates a scaling matrix that is offset by a given center point. - The value to scale by on the X axis. - The value to scale by on the Y axis. - The value to scale by on the Z axis. - The center point. - The scaling matrix. - - - Creates a matrix that flattens geometry into a specified plane as if casting a shadow from a specified light source. - The direction from which the light that will cast the shadow is coming. - The plane onto which the new matrix should flatten geometry so as to cast a shadow. - A new matrix that can be used to flatten geometry onto the specified plane from the specified direction. - - - Creates a translation matrix from the specified 3-dimensional vector. - The amount to translate in each axis. - The translation matrix. - - - Creates a translation matrix from the specified X, Y, and Z components. - The amount to translate on the X axis. - The amount to translate on the Y axis. - The amount to translate on the Z axis. - The translation matrix. - - - Creates a world matrix with the specified parameters. - The position of the object. - The forward direction of the object. - The upward direction of the object. Its value is usually [0, 1, 0]. - The world matrix. - - - Attempts to extract the scale, translation, and rotation components from the given scale, rotation, or translation matrix. The return value indicates whether the operation succeeded. - The source matrix. - When this method returns, contains the scaling component of the transformation matrix if the operation succeeded. - When this method returns, contains the rotation component of the transformation matrix if the operation succeeded. - When the method returns, contains the translation component of the transformation matrix if the operation succeeded. - true if matrix was decomposed successfully; otherwise, false. - - - Returns a value that indicates whether this instance and another 4x4 matrix are equal. - The other matrix. - true if the two matrices are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Calculates the determinant of the current 4x4 matrix. - The determinant. - - - Returns the hash code for this instance. - The hash code. - - - Gets the multiplicative identity matrix. - Gets the multiplicative identity matrix. - - - Inverts the specified matrix. The return value indicates whether the operation succeeded. - The matrix to invert. - When this method returns, contains the inverted matrix if the operation succeeded. - true if matrix was converted successfully; otherwise, false. - - - Indicates whether the current matrix is the identity matrix. - true if the current matrix is the identity matrix; otherwise, false. - - - Performs a linear interpolation from one matrix to a second matrix based on a value that specifies the weighting of the second matrix. - The first matrix. - The second matrix. - The relative weighting of matrix2. - The interpolated matrix. - - - The first element of the first row. - - - - The second element of the first row. - - - - The third element of the first row. - - - - The fourth element of the first row. - - - - The first element of the second row. - - - - The second element of the second row. - - - - The third element of the second row. - - - - The fourth element of the second row. - - - - The first element of the third row. - - - - The second element of the third row. - - - - The third element of the third row. - - - - The fourth element of the third row. - - - - The first element of the fourth row. - - - - The second element of the fourth row. - - - - The third element of the fourth row. - - - - The fourth element of the fourth row. - - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Adds each element in one matrix with its corresponding element in a second matrix. - The first matrix. - The second matrix. - The matrix that contains the summed values. - - - Returns a value that indicates whether the specified matrices are equal. - The first matrix to compare. - The second matrix to care - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether the specified matrices are not equal. - The first matrix to compare. - The second matrix to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the matrix that results from scaling all the elements of a specified matrix by a scalar factor. - The matrix to scale. - The scaling value to use. - The scaled matrix. - - - Returns the matrix that results from multiplying two matrices together. - The first matrix. - The second matrix. - The product matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Negates the specified matrix by multiplying all its values by -1. - The matrix to negate. - The negated matrix. - - - Subtracts each element in a second matrix from its corresponding element in a first matrix. - The first matrix. - The second matrix. - The matrix containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this matrix. - The string representation of this matrix. - - - Transforms the specified matrix by applying the specified Quaternion rotation. - The matrix to transform. - The rotation t apply. - The transformed matrix. - - - Gets or sets the translation component of this matrix. - The translation component of the current instance. - - - Transposes the rows and columns of a matrix. - The matrix to transpose. - The transposed matrix. - - - Represents a three-dimensional plane. - - - Creates a object from a specified four-dimensional vector. - A vector whose first three elements describe the normal vector, and whose defines the distance along that normal from the origin. - - - Creates a object from a specified normal and the distance along the normal from the origin. - The plane's normal vector. - The plane's distance from the origin along its normal vector. - - - Creates a object from the X, Y, and Z components of its normal, and its distance from the origin on that normal. - The X component of the normal. - The Y component of the normal. - The Z component of the normal. - The distance of the plane along its normal from the origin. - - - Creates a object that contains three specified points. - The first point defining the plane. - The second point defining the plane. - The third point defining the plane. - The plane containing the three points. - - - The distance of the plane along its normal from the origin. - - - - Calculates the dot product of a plane and a 4-dimensional vector. - The plane. - The four-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the normal vector of this plane plus the distance () value of the plane. - The plane. - The 3-dimensional vector. - The dot product. - - - Returns the dot product of a specified three-dimensional vector and the vector of this plane. - The plane. - The three-dimensional vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another plane object are equal. - The other plane. - true if the two planes are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - The normal vector of the plane. - - - - Creates a new object whose normal vector is the source plane's normal vector normalized. - The source plane. - The normalized plane. - - - Returns a value that indicates whether two planes are equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are equal; otherwise, false. - - - Returns a value that indicates whether two planes are not equal. - The first plane to compare. - The second plane to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the string representation of this plane object. - A string that represents this object. - - - Transforms a normalized plane by a 4x4 matrix. - The normalized plane to transform. - The transformation matrix to apply to plane. - The transformed plane. - - - Transforms a normalized plane by a Quaternion rotation. - The normalized plane to transform. - The Quaternion rotation to apply to the plane. - A new plane that results from applying the Quaternion rotation. - - - Represents a vector that is used to encode three-dimensional physical rotations. - - - Creates a quaternion from the specified vector and rotation parts. - The vector part of the quaternion. - The rotation part of the quaternion. - - - Constructs a quaternion from the specified components. - The value to assign to the X component of the quaternion. - The value to assign to the Y component of the quaternion. - The value to assign to the Z component of the quaternion. - The value to assign to the W component of the quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Concatenates two quaternions. - The first quaternion rotation in the series. - The second quaternion rotation in the series. - A new quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. - - - Returns the conjugate of a specified quaternion. - The quaternion. - A new quaternion that is the conjugate of value. - - - Creates a quaternion from a vector and an angle to rotate about the vector. - The vector to rotate around. - The angle, in radians, to rotate around the vector. - The newly created quaternion. - - - Creates a quaternion from the specified rotation matrix. - The rotation matrix. - The newly created quaternion. - - - Creates a new quaternion from the given yaw, pitch, and roll. - The yaw angle, in radians, around the Y axis. - The pitch angle, in radians, around the X axis. - The roll angle, in radians, around the Z axis. - The resulting quaternion. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Calculates the dot product of two quaternions. - The first quaternion. - The second quaternion. - The dot product. - - - Returns a value that indicates whether this instance and another quaternion are equal. - The other quaternion. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Gets a quaternion that represents no rotation. - A quaternion whose values are (0, 0, 0, 1). - - - Returns the inverse of a quaternion. - The quaternion. - The inverted quaternion. - - - Gets a value that indicates whether the current instance is the identity quaternion. - true if the current instance is the identity quaternion; otherwise, false. - - - Calculates the length of the quaternion. - The computed length of the quaternion. - - - Calculates the squared length of the quaternion. - The length squared of the quaternion. - - - Performs a linear interpolation between two quaternions based on a value that specifies the weighting of the second quaternion. - The first quaternion. - The second quaternion. - The relative weight of quaternion2 in the interpolation. - The interpolated quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Divides each component of a specified by its length. - The quaternion to normalize. - The normalized quaternion. - - - Adds each element in one quaternion with its corresponding element in a second quaternion. - The first quaternion. - The second quaternion. - The quaternion that contains the summed values of value1 and value2. - - - Divides one quaternion by a second quaternion. - The dividend. - The divisor. - The quaternion that results from dividing value1 by value2. - - - Returns a value that indicates whether two quaternions are equal. - The first quaternion to compare. - The second quaternion to compare. - true if the two quaternions are equal; otherwise, false. - - - Returns a value that indicates whether two quaternions are not equal. - The first quaternion to compare. - The second quaternion to compare. - true if value1 and value2 are not equal; otherwise, false. - - - Returns the quaternion that results from scaling all the components of a specified quaternion by a scalar factor. - The source quaternion. - The scalar value. - The scaled quaternion. - - - Returns the quaternion that results from multiplying two quaternions together. - The first quaternion. - The second quaternion. - The product quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Reverses the sign of each component of the quaternion. - The quaternion to negate. - The negated quaternion. - - - Interpolates between two quaternions, using spherical linear interpolation. - The first quaternion. - The second quaternion. - The relative weight of the second quaternion in the interpolation. - The interpolated quaternion. - - - Subtracts each element in a second quaternion from its corresponding element in a first quaternion. - The first quaternion. - The second quaternion. - The quaternion containing the values that result from subtracting each element in value2 from its corresponding element in value1. - - - Returns a string that represents this quaternion. - The string representation of this quaternion. - - - The rotation component of the quaternion. - - - - The X value of the vector component of the quaternion. - - - - The Y value of the vector component of the quaternion. - - - - The Z value of the vector component of the quaternion. - - - - Represents a single vector of a specified numeric type that is suitable for low-level optimization of parallel algorithms. - The vector type. T can be any primitive numeric type. - - - Creates a vector whose components are of a specified type. - The numeric type that defines the type of the components in the vector. - - - Creates a vector from a specified array. - A numeric array. - values is null. - - - Creates a vector from a specified array starting at a specified index position. - A numeric array. - The starting index position from which to create the vector. - values is null. - index is less than zero. -or- The length of values minus index is less than . - - - Copies the vector instance to a specified destination array. - The array to receive a copy of the vector values. - destination is null. - The number of elements in the current vector is greater than the number of elements available in the destination array. - - - Copies the vector instance to a specified destination array starting at a specified index position. - The array to receive a copy of the vector values. - The starting index in destination at which to begin the copy operation. - destination is null. - The number of elements in the current instance is greater than the number of elements available from startIndex to the end of the destination array. - index is less than zero or greater than the last index in destination. - - - Returns the number of elements stored in the vector. - The number of elements stored in the vector. - Access to the property getter via reflection is not supported. - - - Returns a value that indicates whether this instance is equal to a specified vector. - The vector to compare with this instance. - true if the current instance and other are equal; otherwise, false. - - - Returns a value that indicates whether this instance is equal to a specified object. - The object to compare with this instance. - true if the current instance and obj are equal; otherwise, false. The method returns false if obj is null, or if obj is a vector of a different type than the current instance. - - - Returns the hash code for this instance. - The hash code. - - - Gets the element at a specified index. - The index of the element to return. - The element at index index. - index is less than zero. -or- index is greater than or equal to . - - - Returns a vector containing all ones. - A vector containing all ones. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Returns a new vector by performing a bitwise And operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise And of left and right. - - - Returns a new vector by performing a bitwise Or operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise Or of the elements in left and right. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Returns a value that indicates whether each pair of elements in two specified vectors are equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a new vector by performing a bitwise XOr operation on each of the elements in two vectors. - The first vector. - The second vector. - The vector that results from the bitwise XOr of the elements in left and right. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Reinterprets the bits of the specified vector into a vector of type . - The vector to reinterpret. - The reinterpreted vector. - - - Returns a value that indicates whether any single pair of elements in the specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if any element pairs in left and right are equal. false if no element pairs are equal. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar value. - The source vector. - A scalar value. - The scaled vector. - - - Multiplies a vector by the given scalar. - The scalar value. - The source vector. - The scaled vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The one's complement vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates a given vector. - The vector to negate. - The negated vector. - - - Returns the string representation of this vector using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Returns the string representation of this vector using default formatting. - The string representation of this vector. - - - Returns the string representation of this vector using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns a vector containing all zeroes. - A vector containing all zeroes. - - - Provides a collection of static convenience methods for creating, manipulating, combining, and converting generic vectors. - - - Returns a new vector whose elements are the absolute values of the given vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The absolute value vector. - - - Returns a new vector whose values are the sum of each pair of elements from two given vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The summed vector. - - - Returns a new vector by performing a bitwise And Not operation on each pair of corresponding elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a double-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of signed bytes. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a single-precision floating-point vector. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned 16-bit integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Reinterprets the bits of a specified vector into those of a vector of unsigned long integers. - The source vector. - The vector type. T can be any primitive numeric type. - The reinterpreted vector. - - - Returns a new vector by performing a bitwise And operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector by performing a bitwise Or operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Creates a new single-precision vector with elements selected between two specified single-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new double-precision vector with elements selected between two specified double-precision source vectors based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The new vector with elements selected based on the mask. - - - Creates a new vector of a specified type with elements selected between two specified source vectors of the same type based on an integral mask vector. - The integral mask vector used to drive selection. - The first source vector. - The second source vector. - The vector type. T can be any primitive numeric type. - The new vector with elements selected based on the mask. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose values are the result of dividing the first vector's elements by the corresponding elements in the second vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The divided vector. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The dot product. - - - Returns a new integral vector whose elements signal whether the elements in two specified double-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified integral vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in two specified long integer vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in two specified single-precision vectors are equal. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in two specified vectors of the same type are equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether each pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left and right are equal; otherwise, false. - - - Returns a value that indicates whether any single pair of elements in the given vectors is equal. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element pair in left and right is equal; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are greater than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are greater than their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than their corresponding elements in the second vector of the same time. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the single-precision floating-point second vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are greater than or equal to their corresponding elements in the second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are greater than or equal to their corresponding elements in the second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one vector are greater than or equal to their corresponding elements in the second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector of a specified type are greater than or equal to their corresponding elements in the second vector of the same type. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are greater than or equal to all the corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all elements in left are greater than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is greater than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is greater than or equal to the corresponding element in right; otherwise, false. - - - Gets a value that indicates whether vector operations are subject to hardware acceleration through JIT intrinsic support. - true if vector operations are subject to hardware acceleration; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less than their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision vector are less than their corresponding elements in a second single-precision vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector of a specified type whose elements signal whether the elements in one vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all of the elements in the first vector are less than their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than the corresponding element in right; otherwise, false. - - - Returns a new integral vector whose elements signal whether the elements in one double-precision floating-point vector are less than or equal to their corresponding elements in a second double-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new integral vector whose elements signal whether the elements in one integral vector are less than or equal to their corresponding elements in a second integral vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new long integer vector whose elements signal whether the elements in one long integer vector are less or equal to their corresponding elements in a second long integer vector. - The first vector to compare. - The second vector to compare. - The resulting long integer vector. - - - Returns a new integral vector whose elements signal whether the elements in one single-precision floating-point vector are less than or equal to their corresponding elements in a second single-precision floating-point vector. - The first vector to compare. - The second vector to compare. - The resulting integral vector. - - - Returns a new vector whose elements signal whether the elements in one vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a value that indicates whether all elements in the first vector are less than or equal to their corresponding elements in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if all of the elements in left are less than or equal to the corresponding elements in right; otherwise, false. - - - Returns a value that indicates whether any element in the first vector is less than or equal to the corresponding element in the second vector. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - true if any element in left is less than or equal to the corresponding element in right; otherwise, false. - - - Returns a new vector whose elements are the maximum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The maximum vector. - - - Returns a new vector whose elements are the minimum of each pair of elements in the two given vectors. - The first vector to compare. - The second vector to compare. - The vector type. T can be any primitive numeric type. - The minimum vector. - - - Returns a new vector whose values are a scalar value multiplied by each of the values of a specified vector. - The scalar value. - The vector. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - Returns a new vector whose values are the product of each pair of elements in two specified vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The product vector. - - - Returns a new vector whose values are the values of a specified vector each multiplied by a scalar value. - The vector. - The scalar value. - The vector type. T can be any primitive numeric type. - The scaled vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector whose elements are the negation of the corresponding element in the specified vector. - The source vector. - The vector type. T can be any primitive numeric type. - The negated vector. - - - Returns a new vector whose elements are obtained by taking the one's complement of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Returns a new vector whose elements are the square roots of a specified vector's elements. - The source vector. - The vector type. T can be any primitive numeric type. - The square root vector. - - - Returns a new vector whose values are the difference between the elements in the second vector and their corresponding elements in the first vector. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The difference vector. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Returns a new vector by performing a bitwise exclusive Or (XOr) operation on each pair of elements in two vectors. - The first vector. - The second vector. - The vector type. T can be any primitive numeric type. - The resulting vector. - - - Represents a vector with two single-precision floating-point values. - - - Creates a new object whose two elements have the same value. - The value to assign to both elements. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of the vector. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 2 elements are equal to one. - A vector whose two elements are equal to one (that is, it returns the vector (1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 3x2 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 3x2 matrix. - The source vector. - The matrix. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0). - The vector (1,0). - - - Gets the vector (0,1). - The vector (0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - Returns a vector whose 2 elements are equal to zero. - A vector whose two elements are equal to zero (that is, it returns the vector (0,0). - - - Represents a vector with three single-precision floating-point values. - - - Creates a new object whose three elements have the same value. - The value to assign to all three elements. - - - Creates a new object from the specified object and the specified value. - The vector with two elements. - The additional value to assign to the field. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the cross product of two vectors. - The first vector. - The second vector. - The cross product. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 3 elements are equal to one. - A vector whose three elements are equal to one (that is, it returns the vector (1,1,1). - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns the reflection of a vector off a surface that has the specified normal. - The source vector. - The normal of the surface being reflected off. - The reflected vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a vector normal by the given 4x4 matrix. - The source vector. - The matrix. - The transformed vector. - - - Gets the vector (1,0,0). - The vector (1,0,0). - - - Gets the vector (0,1,0). - The vector (0,1,0).. - - - Gets the vector (0,0,1). - The vector (0,0,1). - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 3 elements are equal to zero. - A vector whose three elements are equal to zero (that is, it returns the vector (0,0,0). - - - Represents a vector with four single-precision floating-point values. - - - Creates a new object whose four elements have the same value. - The value to assign to all four elements. - - - Constructs a new object from the specified object and a W component. - The vector to use for the X, Y, and Z components. - The W component. - - - Creates a new object from the specified object and a Z and a W component. - The vector to use for the X and Y components. - The Z component. - The W component. - - - Creates a vector whose elements have the specified values. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - The value to assign to the field. - - - Returns a vector whose elements are the absolute values of each of the specified vector's elements. - A vector. - The absolute value vector. - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Restricts a vector between a minimum and a maximum value. - The vector to restrict. - The minimum value. - The maximum value. - The restricted vector. - - - Copies the elements of the vector to a specified array. - The destination array. - array is null. - The number of elements in the current instance is greater than in the array. - array is multidimensional. - - - Copies the elements of the vector to a specified array starting at a specified index position. - The destination array. - The index at which to copy the first element of the vector. - array is null. - The number of elements in the current instance is greater than in the array. - index is less than zero. -or- index is greater than or equal to the array length. - array is multidimensional. - - - Computes the Euclidean distance between the two given points. - The first point. - The second point. - The distance. - - - Returns the Euclidean distance squared between two specified points. - The first point. - The second point. - The distance squared. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector resulting from the division. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The vector that results from the division. - - - Returns the dot product of two vectors. - The first vector. - The second vector. - The dot product. - - - Returns a value that indicates whether this instance and another vector are equal. - The other vector. - true if the two vectors are equal; otherwise, false. - - - Returns a value that indicates whether this instance and a specified object are equal. - The object to compare with the current instance. - true if the current instance and obj are equal; otherwise, false```. If <code data-dev-comment-type="paramref">obj</code> isnull, the method returnsfalse`. - - - Returns the hash code for this instance. - The hash code. - - - Returns the length of this vector object. - The vector's length. - - - Returns the length of the vector squared. - The vector's length squared. - - - Performs a linear interpolation between two vectors based on the given weighting. - The first vector. - The second vector. - A value between 0 and 1 that indicates the weight of value2. - The interpolated vector. - - - Returns a vector whose elements are the maximum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The maximized vector. - - - Returns a vector whose elements are the minimum of each of the pairs of elements in two specified vectors. - The first vector. - The second vector. - The minimized vector. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiplies a vector by a specified scalar. - The vector to multiply. - The scalar value. - The scaled vector. - - - Multiplies a scalar value by a specified vector. - The scaled value. - The vector. - The scaled vector. - - - Negates a specified vector. - The vector to negate. - The negated vector. - - - Returns a vector with the same direction as the specified vector, but with a length of one. - The vector to normalize. - The normalized vector. - - - Gets a vector whose 4 elements are equal to one. - Returns . - - - Adds two vectors together. - The first vector to add. - The second vector to add. - The summed vector. - - - Divides the first vector by the second. - The first vector. - The second vector. - The vector that results from dividing left by right. - - - Divides the specified vector by a specified scalar value. - The vector. - The scalar value. - The result of the division. - - - Returns a value that indicates whether each pair of elements in two specified vectors is equal. - The first vector to compare. - The second vector to compare. - true if left and right are equal; otherwise, false. - - - Returns a value that indicates whether two specified vectors are not equal. - The first vector to compare. - The second vector to compare. - true if left and right are not equal; otherwise, false. - - - Multiplies two vectors together. - The first vector. - The second vector. - The product vector. - - - Multiples the specified vector by the specified scalar value. - The vector. - The scalar value. - The scaled vector. - - - Multiples the scalar value by the specified vector. - The vector. - The scalar value. - The scaled vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The vector that results from subtracting right from left. - - - Negates the specified vector. - The vector to negate. - The negated vector. - - - Returns a vector whose elements are the square root of each of a specified vector's elements. - A vector. - The square root vector. - - - Subtracts the second vector from the first. - The first vector. - The second vector. - The difference vector. - - - Returns the string representation of the current instance using default formatting. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements. - A or that defines the format of individual elements. - The string representation of the current instance. - - - Returns the string representation of the current instance using the specified format string to format individual elements and the specified format provider to define culture-specific formatting. - A or that defines the format of individual elements. - A format provider that supplies culture-specific formatting information. - The string representation of the current instance. - - - Transforms a four-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a four-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a three-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a two-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Transforms a two-dimensional vector by the specified Quaternion rotation value. - The vector to rotate. - The rotation to apply. - The transformed vector. - - - Transforms a three-dimensional vector by a specified 4x4 matrix. - The vector to transform. - The transformation matrix. - The transformed vector. - - - Gets the vector (0,0,0,1). - The vector (0,0,0,1). - - - Gets the vector (1,0,0,0). - The vector (1,0,0,0). - - - Gets the vector (0,1,0,0). - The vector (0,1,0,0).. - - - Gets a vector whose 4 elements are equal to zero. - The vector (0,0,1,0). - - - The W component of the vector. - - - - The X component of the vector. - - - - The Y component of the vector. - - - - The Z component of the vector. - - - - Gets a vector whose 4 elements are equal to zero. - A vector whose four elements are equal to zero (that is, it returns the vector (0,0,0,0). - - - \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinios10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinios10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinmac20/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinmac20/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarintvos10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarintvos10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinwatchos10/_._ b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/ref/xamarinwatchos10/_._ deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/useSharedDesignerContext.txt b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/useSharedDesignerContext.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/version.txt b/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/version.txt deleted file mode 100644 index 1ca86a08e..000000000 --- a/Learun.Framework.Ultimate V7/packages/System.Numerics.Vectors.4.4.0/version.txt +++ /dev/null @@ -1 +0,0 @@ -8321c729934c0f8be754953439b88e6e1c120c24 From 0e4abe5e14a03888b9cc69fcc1f931c95f4a541f Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Thu, 17 Aug 2023 18:28:31 +0800 Subject: [PATCH 24/50] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rHelper.cs => FinaChargeOperatorHelper.cs} | 32 +-- .../App_Start/01 Handler/MvcControllerBase.cs | 7 +- .../Controllers/FinaChargeItemController.cs | 17 +- .../FinaChargesStandardController.cs | 14 +- .../Views/FinaChargeItem/Index.js | 8 +- .../Views/FinaChargesStandard/Index.js | 5 + .../Controllers/SP_FeeItemController.cs | 146 ----------- .../Controllers/SP_FeeItem_FlowController.cs | 135 ---------- .../Controllers/SP_LogController.cs | 133 ---------- .../StuPayManageAreaRegistration.cs | 28 --- .../StuPayManage/Views/SP_FeeItem/Form.cshtml | 39 --- .../StuPayManage/Views/SP_FeeItem/Form.js | 62 ----- .../Views/SP_FeeItem/Index.cshtml | 61 ----- .../StuPayManage/Views/SP_FeeItem/Index.js | 157 ------------ .../StuPayManage/Views/SP_Log/Form.cshtml | 18 -- .../Areas/StuPayManage/Views/SP_Log/Form.js | 33 --- .../StuPayManage/Views/SP_Log/Index.cshtml | 59 ----- .../Areas/StuPayManage/Views/SP_Log/Index.js | 149 ------------ .../Areas/StuPayManage/Views/web.config | 35 --- .../Learun.Application.Web.csproj | 14 +- .../Learun.Application.Mapping.csproj | 3 +- .../FinaChargeLogMap.cs} | 11 +- .../StuPayManage/SP_FeeItemMap.cs | 29 --- .../Learun.Application.TwoDevelopment.csproj | 14 +- .../FinaChargeLog/FinaChargeLogBLL.cs} | 25 +- .../FinaChargeLog/FinaChargeLogBLLStatic.cs} | 12 +- .../FinaChargeLog/FinaChargeLogEntity.cs} | 4 +- .../FinaChargeLog/FinaChargeLogIBLL.cs} | 12 +- .../FinaChargeLog/FinaChargeLogService.cs} | 28 +-- .../StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs | 163 ------------- .../SP_FeeItem/SP_FeeItemEntity.cs | 138 ----------- .../StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs | 62 ----- .../SP_FeeItem/SP_FeeItemService.cs | 230 ------------------ .../Learun.Util.Operat/OperationType.cs | 6 + 34 files changed, 94 insertions(+), 1795 deletions(-) rename Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/{SP_OperatorHelper.cs => FinaChargeOperatorHelper.cs} (61%) delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItem_FlowController.cs delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_LogController.cs delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/StuPayManageAreaRegistration.cs delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.cshtml delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.js delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.cshtml delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.js delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/web.config rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/{StuPayManage/SP_LogMap.cs => ReceiveSendFeeManagement/FinaChargeLogMap.cs} (66%) delete mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_FeeItemMap.cs rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/{StuPayManage/SP_Log/SP_LogBLL.cs => ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLL.cs} (78%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/{StuPayManage/SP_Log/SP_LogBLLStatic.cs => ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLLStatic.cs} (71%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/{StuPayManage/SP_Log/SP_LogEntity.cs => ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogEntity.cs} (97%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/{StuPayManage/SP_Log/SP_LogIBLL.cs => ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogIBLL.cs} (77%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/{StuPayManage/SP_Log/SP_LogService.cs => ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogService.cs} (88%) delete mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs delete mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemEntity.cs delete mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs delete mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/SP_OperatorHelper.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/FinaChargeOperatorHelper.cs similarity index 61% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/SP_OperatorHelper.cs rename to Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/FinaChargeOperatorHelper.cs index 06683bc4c..eb88ec08a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/SP_OperatorHelper.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/FinaChargeOperatorHelper.cs @@ -5,17 +5,17 @@ using System.Collections.Generic; using System.Linq; using System.Web; using Learun.Application.TwoDevelopment; -using Learun.Application.TwoDevelopment.StuPayManage; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; -namespace Learun.Application.Web.App_Start._01_Handler +namespace Learun.Application.Web { - public class SP_OperatorHelper + public class FinaChargeOperatorHelper { - private static SP_LogService sP_LogService = new SP_LogService(); - public static SP_OperatorHelper Instance + private static FinaChargeLogService finaChargeLogService = new FinaChargeLogService(); + public static FinaChargeOperatorHelper Instance { - get { return new SP_OperatorHelper(); } + get { return new FinaChargeOperatorHelper(); } } public void WriteOperateLog(OperateLogModel operateLogModel) { @@ -25,7 +25,7 @@ namespace Learun.Application.Web.App_Start._01_Handler { operateLogModel.userInfo = LoginUserInfo.Get(); } - SP_LogEntity logEntity = new SP_LogEntity(); + FinaChargeLogEntity logEntity = new FinaChargeLogEntity(); logEntity.F_CategoryId = 3; logEntity.F_OperateTypeId = ((int)operateLogModel.type).ToString(); logEntity.F_OperateType = EnumAttribute.GetDescription(operateLogModel.type); @@ -37,23 +37,7 @@ namespace Learun.Application.Web.App_Start._01_Handler logEntity.F_SourceObjectId = operateLogModel.sourceObjectId; logEntity.F_SourceContentJson = operateLogModel.sourceContentJson; logEntity.F_Description = "PC端"; - //logEntity.WriteLog(); - - try - { - sP_LogService.WriteLog(logEntity); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowBusinessException(ex); - } - } + finaChargeLogService.WriteLog(logEntity); } catch (Exception) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/MvcControllerBase.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/MvcControllerBase.cs index 0ef234cc5..4d87b935e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/MvcControllerBase.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/App_Start/01 Handler/MvcControllerBase.cs @@ -1,5 +1,4 @@ -using Learun.Application.Web.App_Start._01_Handler; -using Learun.Loger; +using Learun.Loger; using Learun.Util; using Learun.Util.Operat; using System.Web.Mvc; @@ -108,7 +107,7 @@ namespace Learun.Application.Web ///
    /// /// - protected virtual ActionResult Success_SP(string info, string title, OperationType type, string keyValue, string content) + protected virtual ActionResult Success_FinaCharge(string info, string title, OperationType type, string keyValue, string content) { OperateLogModel operateLogModel = new OperateLogModel(); operateLogModel.title = title; @@ -117,7 +116,7 @@ namespace Learun.Application.Web operateLogModel.sourceObjectId = keyValue; operateLogModel.sourceContentJson = content; - SP_OperatorHelper.Instance.WriteOperateLog(operateLogModel); + FinaChargeOperatorHelper.Instance.WriteOperateLog(operateLogModel); return Content(new ResParameter { code = ResponseCode.success, info = info, data = new object { } }.ToJson()); } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeItemController.cs index 7565bfaf7..95d85d0c0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeItemController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeItemController.cs @@ -5,6 +5,8 @@ using System.Web.Mvc; using System.Collections.Generic; using System; using System.Linq; +using Learun.Loger; +using Learun.Util.Operat; namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { @@ -124,14 +126,14 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult Lock(string keyValue) { finaChargeItemIBLL.Lock(keyValue); - return Success("启用成功!"); + return Success_FinaCharge("操作成功!", "收费项目设置", OperationType.Lock, keyValue, "启用收费项目"); } [HttpPost] [AjaxOnly] public ActionResult UnLock(string keyValue) { finaChargeItemIBLL.UnLock(keyValue); - return Success("停用成功!"); + return Success_FinaCharge("操作成功!", "收费项目设置", OperationType.UnLock, keyValue, "停用收费项目"); } /// /// 删除实体数据 @@ -149,7 +151,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers } finaChargeItemIBLL.DeleteEntity(keyValue); - return Success("删除成功!"); + return Success_FinaCharge("删除成功!", "收费项目设置", OperationType.Delete, keyValue, "删除收费项目"); } /// /// 保存实体数据(新增、修改) @@ -180,7 +182,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers } } - var modelcode= finaChargeItemIBLL.GetFinaChargeItemEntityByChargeItemCode(entity.ChargeItemCode); + var modelcode = finaChargeItemIBLL.GetFinaChargeItemEntityByChargeItemCode(entity.ChargeItemCode); if (modelcode != null) { if (string.IsNullOrEmpty(keyValue)) @@ -200,7 +202,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers entity.CreateUserId = loginUserInfo.userId; entity.CreateUserName = loginUserInfo.realName; finaChargeItemIBLL.SaveEntity(keyValue, entity); - return Success("保存成功!"); + if (string.IsNullOrEmpty(keyValue)) + { + return Success_FinaCharge("保存成功!", "收费项目设置", OperationType.Create, entity.ChargeItemID,entity.ToJson()); + } + else + return Success_FinaCharge("保存成功!", "收费项目设置", OperationType.Update, entity.ChargeItemID, entity.ToJson()); } #endregion diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs index 545a007d5..17704968c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using Learun.Application.TwoDevelopment.EducationalAdministration; using System.Linq; using System; +using Learun.Util.Operat; using static Learun.Util.WebHelper; using Newtonsoft.Json; @@ -228,22 +229,15 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult DeleteForm(string keyValue) { - //判断某专业收费标准是否已使用 - //var isCharge = finaChargesStandardIBLL.IsChargeByMajorNo(entity.DeptNo,entity.MajorNo, entity.SYear.ToString(), entity.Grade); - //if (isCharge) - //{ - // return Fail("该信息正在被系统使用,不能删除!"); - //} - finaChargesStandardIBLL.DeleteEntity(keyValue); - return Success("删除成功!"); + return Success_FinaCharge("删除成功!", "收费标准设置", OperationType.Delete, keyValue, "删除收费标准"); } [HttpPost] [AjaxOnly] public ActionResult Lock(string deptno, string majorNo, string syear, string grade,string ChargeStandardID) { finaChargesStandardIBLL.Lock(deptno, majorNo, syear, grade, ChargeStandardID); - return Success("审核成功!"); + return Success_FinaCharge("审核成功!", "收费标准设置", OperationType.Lock, ChargeStandardID,"专业"+majorNo+"年度"+syear+"年级"+grade); } [HttpPost] @@ -251,7 +245,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult UnLock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID) { finaChargesStandardIBLL.UnLock(deptno, majorNo, syear, grade, ChargeStandardID); - return Success("去审成功!"); + return Success_FinaCharge("去审成功!", "收费标准设置", OperationType.UnLock, ChargeStandardID, "专业" + majorNo + "年度" + syear + "年级" + grade); } /// /// 保存实体数据(新增、修改) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.js index 213069663..87fa5fc70 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeItem/Index.js @@ -37,10 +37,10 @@ var bootstrap = function ($, learun) { $('#lr_edit').on('click', function () { var keyValue = $('#gridtable').jfGridValue('ChargeItemID'); if (learun.checkrow(keyValue)) { - var keyWordMark = $('#gridtable').jfGridValue('KeyWordMark'); - if (keyWordMark == "1") { - learun.alert.warning("系统保留项目,不允许修改!"); - return false; + var CheckMark = $('#gridtable').jfGridValue('CheckMark'); + if (CheckMark.indexOf('true') != -1) { + learun.alert.warning("编辑失败,选中记录中包含已启用项目!"); + return; } learun.layerForm({ id: 'form', diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js index 7b0b38510..d2981112b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js @@ -103,11 +103,16 @@ var bootstrap = function ($, learun) { $('#lr_delete').on('click', function () { var keyValue = $('#gridtable').jfGridValue('TempId'); selectedRow = $('#gridtable').jfGridGet('rowdata'); + console.log(selectedRow); if (learun.checkrow(keyValue)) { if (selectedRow.ChargeStandardID == 0) {//专业下收费标准 learun.alert.warning("请选择具体的收费项目!"); return false; } + if (selectedRow.CheckMark==true) { + learun.alert.warning("删除失败,选中记录中包含已审核项目!"); + return; + } learun.layerConfirm('是否确认删除该项!', function (res) { if (res) { learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/DeleteForm', { keyValue: selectedRow.ChargeStandardID }, function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs deleted file mode 100644 index fa4ab32db..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItemController.cs +++ /dev/null @@ -1,146 +0,0 @@ -using Learun.Util; -using System.Data; -using Learun.Application.TwoDevelopment.StuPayManage; -using System.Web.Mvc; -using System.Collections.Generic; -using Learun.Util.Operat; -using Learun.Application.TwoDevelopment.EducationalAdministration; -using System.Text.Json.Nodes; -using Newtonsoft.Json; -using System.Linq; - -namespace Learun.Application.Web.Areas.StuPayManage.Controllers -{ - /// - /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 - /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - /// 创 建:超级管理员 - /// 日 期:2023-07-29 18:34 - /// 描 述:专业收费项目设置 - /// - public class SP_FeeItemController : MvcControllerBase - { - private SP_FeeItemIBLL sP_FeeItemIBLL = new SP_FeeItemBLL(); - - #region 视图功能 - - /// - /// 主页面 - /// - /// - [HttpGet] - public ActionResult Index() - { - return View(); - } - /// - /// 表单页 - /// - /// - [HttpGet] - public ActionResult Form() - { - return View(); - } - #endregion - - #region 获取数据 - - /// - /// 获取页面显示列表数据 - /// - /// 分页参数 - /// 查询参数 - /// - [HttpGet] - [AjaxOnly] - public ActionResult GetPageList(string pagination, string queryJson) - { - Pagination paginationobj = pagination.ToObject(); - var data = sP_FeeItemIBLL.GetPageList(paginationobj, queryJson); - var jsonData = new - { - rows = data, - total = paginationobj.total, - page = paginationobj.page, - records = paginationobj.records - }; - return Success(jsonData); - } - /// - /// 获取表单数据 - /// - /// 主键 - /// - [HttpGet] - [AjaxOnly] - public ActionResult GetFormData(string keyValue) - { - var SP_FeeItemData = sP_FeeItemIBLL.GetSP_FeeItemEntity(keyValue); - var jsonData = new { - SP_FeeItem = SP_FeeItemData, - }; - return Success(jsonData); - } - #endregion - - #region 提交数据 - - /// - /// 删除实体数据 - /// - /// 主键 - /// - [HttpPost] - [AjaxOnly] - public ActionResult DeleteForm(string keyValue) - { - SP_FeeItemEntity entity = sP_FeeItemIBLL.GetSP_FeeItemEntity(keyValue); - if (entity == null) throw new System.Exception("主键无效"); - sP_FeeItemIBLL.DeleteEntity(keyValue); - //return Success("删除成功!"); - return Success_SP("删除成功!", "收费项目", OperationType.Delete, entity.F_Id, entity.ToJson()); - - } - - [HttpPost] - [AjaxOnly] - public ActionResult DeleteForms(string keyValue) { - - var jsonObj = new { - ids = string.Join(",", keyValue.Split(',').Select(x => $"'{x}'")) - }; - - string queryJson = JsonConvert.SerializeObject(jsonObj); - IEnumerable entitys = sP_FeeItemIBLL.GetList(queryJson); - if (entitys == null || entitys.Count()==0) throw new System.Exception("查无数据"); - sP_FeeItemIBLL.DeleteEntity(entitys); - //return Success("删除成功!"); - return Success_SP("删除成功!", "收费项目", OperationType.Delete, null, entitys.ToJson()); - - } - - /// - /// 保存实体数据(新增、修改) - /// - /// 主键 - /// 实体 - /// - [HttpPost] - [ValidateAntiForgeryToken] - [AjaxOnly] - public ActionResult SaveForm(string keyValue, string strEntity) - { - SP_FeeItemEntity entity = strEntity.ToObject(); - sP_FeeItemIBLL.SaveEntity(keyValue,entity); - if (string.IsNullOrEmpty(keyValue)) - { - } - //return Success("保存成功!"); - return Success_SP("保存成功!", "收费项目", string.IsNullOrEmpty(keyValue) ? OperationType.Create : OperationType.Update, entity.F_Id, entity.ToJson()); - - } - #endregion - - } -} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItem_FlowController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItem_FlowController.cs deleted file mode 100644 index caf0f1243..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_FeeItem_FlowController.cs +++ /dev/null @@ -1,135 +0,0 @@ -using Learun.Util; -using System.Data; -using Learun.Application.TwoDevelopment.StuPayManage; -using System.Web.Mvc; -using Learun.Application.TwoDevelopment.LR_CodeDemo; -using System.Collections.Generic; -using Learun.Application.Base.SystemModule; - -namespace Learun.Application.Web.Areas.StuPayManage.Controllers -{ - /// - /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 - /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - /// 创 建:超级管理员 - /// 日 期:2023-07-29 21:26 - /// 描 述:专业收费项目设置 - /// - public class SP_FeeItem_FlowController : MvcControllerBase - { - private SP_FeeItem_FlowIBLL sP_FeeItem_FlowIBLL = new SP_FeeItem_FlowBLL(); - private CodeRuleIBLL codeRuleIBLL = new CodeRuleBLL(); - - #region 视图功能 - - /// - /// 主页面 - /// - /// - [HttpGet] - public ActionResult Index() - { - return View(); - } - /// - /// 表单页 - /// - /// - [HttpGet] - public ActionResult Form() - { - return View(); - } - #endregion - - #region 获取数据 - - /// - /// 获取页面显示列表数据 - /// - /// 分页参数 - /// 查询参数 - /// - [HttpGet] - [AjaxOnly] - public ActionResult GetPageList(string pagination, string queryJson) - { - Pagination paginationobj = pagination.ToObject(); - var data = sP_FeeItem_FlowIBLL.GetPageList(paginationobj, queryJson); - var jsonData = new - { - rows = data, - total = paginationobj.total, - page = paginationobj.page, - records = paginationobj.records - }; - return Success(jsonData); - } - /// - /// 获取表单数据 - /// - /// 主键 - /// - [HttpGet] - [AjaxOnly] - public ActionResult GetFormData(string keyValue) - { - var SP_FeeItemData = sP_FeeItem_FlowIBLL.GetSP_FeeItemEntity( keyValue ); - var jsonData = new { - SP_FeeItem = SP_FeeItemData, - }; - return Success(jsonData); - } - /// - /// 获取表单数据 - /// - /// 流程实例主键 - /// - [HttpGet] - [AjaxOnly] - public ActionResult GetFormDataByProcessId(string processId) - { - var SP_FeeItemData = sP_FeeItem_FlowIBLL.GetEntityByProcessId( processId ); - var jsonData = new { - SP_FeeItem = SP_FeeItemData, - }; - return Success(jsonData); - } - #endregion - - #region 提交数据 - - /// - /// 删除实体数据 - /// - /// 主键 - /// - [HttpPost] - [AjaxOnly] - public ActionResult DeleteForm(string keyValue) - { - sP_FeeItem_FlowIBLL.DeleteEntity(keyValue); - return Success("删除成功!"); - } - /// - /// 保存实体数据(新增、修改) - /// - /// 主键 - /// 实体 - /// - [HttpPost] - [ValidateAntiForgeryToken] - [AjaxOnly] - public ActionResult SaveForm(string keyValue, string strEntity) - { - SP_FeeItemEntity entity = strEntity.ToObject(); - sP_FeeItem_FlowIBLL.SaveEntity(keyValue,entity); - if (string.IsNullOrEmpty(keyValue)) - { - } - return Success("保存成功!"); - } - #endregion - - } -} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_LogController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_LogController.cs deleted file mode 100644 index 15ccaa29e..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Controllers/SP_LogController.cs +++ /dev/null @@ -1,133 +0,0 @@ -using Learun.Application.TwoDevelopment; -using Learun.Application.TwoDevelopment.StuPayManage; -using Learun.Application.TwoDevelopment.StuPayManage.SP_Log; -using Learun.Util; -using System.Data; -using System.Web.Mvc; - -namespace Learun.Application.Web.Areas.StuPayManage.Controllers -{ - /// - /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 - /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - /// 创 建:超级管理员 - /// 日 期:2023-07-31 22:20 - /// 描 述:操作日志 - /// - public class SP_LogController : MvcControllerBase - { - private SP_LogIBLL sP_LogIBLL = new SP_LogBLL(); - - #region 视图功能 - - /// - /// 主页面 - /// - /// - [HttpGet] - public ActionResult Index() - { - return View(); - } - /// - /// 表单页 - /// - /// - [HttpGet] - public ActionResult Form() - { - return View(); - } - #endregion - - #region 获取数据 - - /// - /// 获取列表数据 - /// - /// 查询参数 - /// - [HttpGet] - [AjaxOnly] - public ActionResult GetList( string queryJson ) - { - var data = sP_LogIBLL.GetList(queryJson); - return Success(data); - } - /// - /// 获取列表分页数据 - /// - /// 分页参数 - /// 查询参数 - /// - [HttpGet] - [AjaxOnly] - public ActionResult GetPageList(string pagination, string queryJson) - { - Pagination paginationobj = pagination.ToObject(); - var data = sP_LogIBLL.GetPageList(paginationobj, queryJson); - var jsonData = new - { - rows = data, - total = paginationobj.total, - page = paginationobj.page, - records = paginationobj.records - }; - return Success(jsonData); - } - /// - /// 获取表单数据 - /// - /// 主键 - /// - [HttpGet] - [AjaxOnly] - public ActionResult GetFormData(string keyValue) - { - var data = sP_LogIBLL.GetEntity(keyValue); - return Success(data); - } - #endregion - - #region 提交数据 - - [HttpPost] - [AjaxOnly] - [ValidateAntiForgeryToken] - public ActionResult SaveRemoveLog(int categoryId, string keepTime) { - - SP_LogBLLStatic.RemoveLog(categoryId, keepTime); - return Success("清空成功"); - } - - - /// - /// 删除实体数据 - /// - /// 主键 - /// - [HttpPost] - [AjaxOnly] - public ActionResult DeleteForm(string keyValue) - { - sP_LogIBLL.DeleteEntity(keyValue); - return Success("删除成功!"); - } - /// - /// 保存实体数据(新增、修改) - /// - /// 主键 - /// 实体 - /// - [HttpPost] - [ValidateAntiForgeryToken] - [AjaxOnly] - public ActionResult SaveForm(string keyValue,SP_LogEntity entity) - { - sP_LogIBLL.SaveEntity(keyValue, entity); - return Success("保存成功!"); - } - #endregion - - } -} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/StuPayManageAreaRegistration.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/StuPayManageAreaRegistration.cs deleted file mode 100644 index 0fc3b0747..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/StuPayManageAreaRegistration.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; - -namespace Learun.Application.Web.Areas.StuPayManage -{ - public class StuPayManageAreaRegistration : AreaRegistration - { - public override string AreaName - { - get - { - return "StuPayManage"; - } - } - - public override void RegisterArea(AreaRegistrationContext context) - { - context.MapRoute( - "StuPayManage_default", - "StuPayManage/{controller}/{action}/{id}", - new { action = "Index", id = UrlParameter.Optional } - ); - } - } -} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml deleted file mode 100644 index fd9e85c82..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.cshtml +++ /dev/null @@ -1,39 +0,0 @@ -@{ - ViewBag.Title = "专业收费项目设置"; - Layout = "~/Views/Shared/_Form.cshtml"; -} -
    -
    -
    收费年度*
    -
    -
    -
    -
    项目代码*
    - -
    -
    -
    项目名称*
    - -
    -
    -
    收费标准*
    - -
    -
    -
    项目类型*
    -
    -
    -
    -
    专业*
    -
    -
    -
    -
    备注
    - -
    - -
    -@Html.AppendJsFile("/Areas/StuPayManage/Views/SP_FeeItem/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js deleted file mode 100644 index af7c33f81..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Form.js +++ /dev/null @@ -1,62 +0,0 @@ -/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) - * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - * 创建人:超级管理员 - * 日 期:2023-07-29 18:34 - * 描 述:专业收费项目设置 - */ -var acceptClick; -var keyValue = request('keyValue'); -var bootstrap = function ($, learun) { - "use strict"; - var page = { - init: function () { - $('.lr-form-wrap').lrscroll(); - page.bind(); - page.initData(); - }, - bind: function () { - $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); - $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); - //收费年度 - $('#YearNo').lrselect({ - placeholder: "请选择收费年度", - allowSearch: true, - url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', - value: 'value', - text: 'text' - }); - $('#F_Status').lrDataItemSelect({ code: 'SP_AppStatus' }); - $('#F_Status').lrselectSet("0"); - }, - initData: function () { - if (!!keyValue) { - $.lrSetForm(top.$.rootUrl + '/StuPayManage/SP_FeeItem/GetFormData?keyValue=' + keyValue, function (data) { - for (var id in data) { - if (!!data[id].length && data[id].length > 0) { - $('#' + id ).jfGridSet('refreshdata', data[id]); - } - else { - $('[data-table="' + id + '"]').lrSetFormData(data[id]); - } - } - }); - } - } - }; - // 保存数据 - acceptClick = function (callBack) { - if (!$('body').lrValidform()) { - return false; - } - var postData = { - strEntity: JSON.stringify($('body').lrGetFormData()) - }; - $.lrSaveForm(top.$.rootUrl + '/StuPayManage/SP_FeeItem/SaveForm?keyValue=' + keyValue, postData, function (res) { - // 保存成功后才回调 - if (!!callBack) { - callBack(); - } - }); - }; - page.init(); -} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml deleted file mode 100644 index 12c8a0ee9..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.cshtml +++ /dev/null @@ -1,61 +0,0 @@ -@{ - ViewBag.Title = "专业收费项目设置"; - Layout = "~/Views/Shared/_Index.cshtml"; -} -
    -@Html.AppendJsFile("/Areas/StuPayManage/Views/SP_FeeItem/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js deleted file mode 100644 index ff6ae10b1..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_FeeItem/Index.js +++ /dev/null @@ -1,157 +0,0 @@ -/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) - * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - * 创建人:超级管理员 - * 日 期:2023-07-29 18:34 - * 描 述:专业收费项目设置 - */ -var refreshGirdData; -var bootstrap = function ($, learun) { - "use strict"; - var page = { - init: function () { - page.initGird(); - page.bind(); - }, - bind: function () { - $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { - page.search(queryJson); - }, 250, 400); - //收费年度 - $('#YearNo').lrselect({ - placeholder: "请选择", - allowSearch: true, - url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', - value: 'value', - text: 'text' - }); - $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); - $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); - $('#F_Status').lrDataItemSelect({ code: 'SP_AppStatus' }); - // 刷新 - $('#lr_refresh').on('click', function () { - location.reload(); - }); - // 新增 - $('#lr_add').on('click', function () { - learun.layerForm({ - id: 'form', - title: '新增', - url: top.$.rootUrl + '/StuPayManage/SP_FeeItem/Form', - width: 600, - height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); - } - }); - }); - // 编辑 - $('#lr_edit').on('click', function () { - var keyValue = $('#gridtable').jfGridValue('F_Id'); - if (learun.checkrow(keyValue)) { - learun.layerForm({ - id: 'form', - title: '编辑', - url: top.$.rootUrl + '/StuPayManage/SP_FeeItem/Form?keyValue=' + keyValue, - width: 600, - height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); - } - }); - } - }); - // 删除 - $('#lr_delete').on('click', function () { - var keyValue = $('#gridtable').jfGridValue('F_Id'); - if (learun.checkrow(keyValue)) { - learun.layerConfirm('是否确认删除该项!', function (res) { - if (res) { - learun.deleteForm(top.$.rootUrl + '/StuPayManage/SP_FeeItem/DeleteForms', { keyValue: keyValue}, function () { - refreshGirdData(); - }); - } - }); - } - }); - //  导入 - $('#lr_import').on('click', - function () { - learun.layerForm({ - id: 'form', - title: '导入', - url: top.$.rootUrl + '/PersonnelManagement/Sal_UserSalary/ImportForm', - width: 400, - height: 300, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); - } - }); - }); - //  导出 - $('#lr_export').on('click', function () { - }); - //  审核 - $('#lr_audit').on('click', function () { - }); - }, - // 初始化列表 - initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ - url: top.$.rootUrl + '/StuPayManage/SP_FeeItem/GetPageList', - headData: [ - { label: "收费年度", name: "YearNo", width: 100, align: "center"}, - { label: "项目代码", name: "ChargeItemCode", width: 100, align: "center"}, - { label: "项目名称", name: "ChargeItemName", width: 100, align: "center"}, - { label: "专业", name: "MajorNo", width: 100, align: "center", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('custmerData', { - url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', - key: value, - keyId: 'majorno', - callback: function (_data) { - callback(_data['majorname']); - } - }); - }}, - { label: "项目类型", name: "ChargeItemType", width: 100, align: "center", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('dataItem', { - key: value, - code: 'ChargeItemType', - callback: function (_data) { - callback(_data.text); - } - }); - }}, - { label: "收费标准", name: "Standard", width: 100, align: "center"}, - { label: "备注", name: "Remark", width: 100, align: "left" }, - { label: "审核状态", name: "F_Status", width: 100, align: "center", - formatterAsync: function (callback, value, row, op, $cell) { - learun.clientdata.getAsync('dataItem', { - key: value, - code: 'SP_AppStatus', - callback: function (_data) { - callback(_data.text); - } - }); - } - } - ], - mainId:'F_Id', - isPage: true, - isMultiselect: true, - sord: 'desc', - sidx: 'F_CreateDate' - }); - page.search(); - }, - search: function (param) { - param = param || {}; - $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); - } - }; - refreshGirdData = function () { - $('#gridtable').jfGridSet('reload'); - }; - page.init(); -} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.cshtml deleted file mode 100644 index 1ae0a6265..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.cshtml +++ /dev/null @@ -1,18 +0,0 @@ -@{ - ViewBag.Title = "清空日志"; - Layout = "~/Views/Shared/_Form.cshtml"; -} -
    -
    -
    日志保留时间
    -
    -
      -
    • 保留近一周
    • -
    • 保留近一个月
    • -
    • 保留近三个月
    • -
    • 不保留,全部删除
    • -
    -
    -
    -
    -@Html.AppendJsFile("/Areas/StuPayManage/Views/SP_Log/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.js deleted file mode 100644 index c2942cd4b..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Form.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园(http://www.learun.cn) - * Copyright (c) 2013-2018 北京泉江科技有限公司 - * 创建人:陈彬彬 - * 日 期:2017.04.11 - * 描 述:清空日志管理 - */ -var categoryId = request('categoryId'); -var acceptClick; -var bootstrap = function ($, learun) { - "use strict"; - - var page = { - init: function () { - $('#keepTime').lrselect({ maxHeight: 75, placeholder: false }).lrselectSet(7); - } - }; - // 保存数据 - acceptClick = function (callBack) { - if (!$('#form').lrValidform()) { - return false; - } - var postData = $('#form').lrGetFormData(); - postData['categoryId'] = categoryId; - $.lrSaveForm(top.$.rootUrl + '/StuPayManage/SP_Log/SaveRemoveLog', postData, function (res) { - // 保存成功后才回调 - if (!!callBack) { - callBack(); - } - }); - }; - page.init(); -} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.cshtml deleted file mode 100644 index f1996dd79..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.cshtml +++ /dev/null @@ -1,59 +0,0 @@ -@{ - ViewBag.Title = "日志管理"; - Layout = "~/Views/Shared/_Index.cshtml"; -} -
    - - @*
  • 操作日志
  • *@ - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    操作用户
    - -
    -
    -
    系统功能
    - -
    -
    -
    操作类型
    - -
    -
    -
    -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    -@Html.AppendJsFile("/Areas/StuPayManage/Views/SP_Log/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.js deleted file mode 100644 index 75568dadd..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/SP_Log/Index.js +++ /dev/null @@ -1,149 +0,0 @@ -/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) - * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - * 创建人:超级管理员 - * 日 期:2023-07-31 22:20 - * 描 述:操作日志 - */ -var selectedRow; -var refreshGirdData; -var bootstrap = function ($, learun) { - "use strict"; - var categoryId = '1'; - var logbegin = ''; - var logend = ''; - - var refreshGirdData = function () { - page.search(); - } - - var page = { - init: function () { - page.initGrid(); - page.bind(); - }, - bind: function () { - $('.datetime').each(function () { - $(this).lrdate({ - dfdata: [ - { name: '今天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00') }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, - { name: '近7天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'd', -6) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, - { name: '近1个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -1) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, - { name: '近3个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -3) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, - ], - // 月 - mShow: false, - premShow: false, - // 季度 - jShow: false, - prejShow: false, - // 年 - ysShow: false, - yxShow: false, - preyShow: false, - yShow: false, - // 默认 - dfvalue: '1', - selectfn: function (begin, end) { - logbegin = begin; - logend = end; - page.search(); - } - }); - }); - // 查询 - $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { - page.search(queryJson); - }, 200, 400); - // 刷新 - $('#lr_refresh').on('click', function () { - location.reload(); - }); - - // 清空 - $('#lr_removelog').on('click', function () { - learun.layerForm({ - id: 'form', - title: '清空', - url: top.$.rootUrl + '/StuPayManage/SP_Log/Form?categoryId=' + categoryId, - height: 200, - width: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); - } - }); - }); - // 导出 - $('#lr_export').on('click', function () { - learun.layerForm({ - id: "ExcelExportForm", - title: '导出Excel数据', - url: top.$.rootUrl + '/Utility/ExcelExportForm?gridId=gridtable&filename=SP_Log', - width: 500, - height: 380, - callBack: function (id) { - return top[id].acceptClick(); - }, - btn: ['导出Excel', '关闭'] - }); - }); - // 删除 - $('#lr_delete').on('click', function () { - var keyValue = $('#gridtable').jfGridValue('F_LogId'); - if (learun.checkrow(keyValue)) { - learun.layerConfirm('是否确认删除该项!', function (res) { - if (res) { - learun.deleteForm(top.$.rootUrl + '/StuPayManage/SP_Log/DeleteForm', { keyValue: keyValue}, function () { - }); - } - }); - } - }); - }, - - initGrid: function () { - $('#gridtable').jfGrid({ - url: top.$.rootUrl + '/StuPayManage/SP_Log/GetPageList', - headData: [ - { - label: "操作时间", name: "F_OperateTime", width: 135, align: "left", - formatter: function (cellvalue) { - return learun.formatDate(cellvalue, 'yyyy-MM-dd hh:mm:ss'); - } - }, - { label: "操作用户", name: "F_OperateAccount", width: 140, align: "left" }, - { label: "IP地址", name: "F_IPAddress", width: 100, align: "left" }, - { label: "系统功能", name: "F_Module", width: 150, align: "left" }, - { label: "操作类型", name: "F_OperateType", width: 70, align: "center" }, - { - label: "执行结果", name: "F_ExecuteResult", width: 70, align: "center", - formatter: function (cellvalue) { - if (cellvalue == '1') { - return "成功"; - } else { - return "失败"; - } - } - }, - { label: "执行结果描述", name: "F_ExecuteResultJson", width: 300, align: "left" } - - ], - - mainId: 'F_ItemDetailId', - isPage: true, - sidx: 'F_OperateTime' - }); - }, - search: function (param) { - param = param || {}; - param.CategoryId = categoryId; - param.StartTime = logbegin; - param.EndTime = logend; - - $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); - } - }; - refreshGirdData = function () { - $('#gridtable').jfGridSet('reload'); - }; - page.init(); -} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/web.config b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/web.config deleted file mode 100644 index 22271d246..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/StuPayManage/Views/web.config +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index 6a7ab38e9..a1f415408 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -316,7 +316,7 @@ - + @@ -565,7 +565,6 @@ - @@ -887,8 +886,6 @@ - - @@ -6649,14 +6646,6 @@ - - - - - - - - @@ -7981,7 +7970,6 @@ - diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj index 0ffddadcc..dd01ced0e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj @@ -588,8 +588,7 @@ - - + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_LogMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeLogMap.cs similarity index 66% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_LogMap.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeLogMap.cs index 3ddd459d4..cc90c9907 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_LogMap.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeLogMap.cs @@ -1,6 +1,5 @@ -using Learun.Application.TwoDevelopment; -using Learun.Application.TwoDevelopment.StuPayManage; -using System.Data.Entity.ModelConfiguration; +using System.Data.Entity.ModelConfiguration; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; namespace Learun.Application.Mapping { @@ -11,13 +10,13 @@ namespace Learun.Application.Mapping /// 日 期:2023-07-31 22:20 /// 描 述:操作日志 ///
    - public class SP_LogMap : EntityTypeConfiguration + public class FinaChargeLogMap : EntityTypeConfiguration { - public SP_LogMap() + public FinaChargeLogMap() { #region 表、主键 //表 - this.ToTable("SP_LOG"); + this.ToTable("FinaChargeLog"); //主键 this.HasKey(t => t.F_LogId); #endregion diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_FeeItemMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_FeeItemMap.cs deleted file mode 100644 index 783d00214..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/StuPayManage/SP_FeeItemMap.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Learun.Application.TwoDevelopment.StuPayManage; -using System.Data.Entity.ModelConfiguration; - -namespace Learun.Application.Mapping -{ - /// - /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 - /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - /// 创 建:超级管理员 - /// 日 期:2023-07-29 21:26 - /// 描 述:专业收费项目设置 - /// - public class SP_FeeItemMap : EntityTypeConfiguration - { - public SP_FeeItemMap() - { - #region 表、主键 - //表 - this.ToTable("SP_FEEITEM"); - //主键 - this.HasKey(t => t.F_Id); - #endregion - - #region 配置关系 - #endregion - } - } -} - diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index b0d937c59..3ef7346a6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1787,8 +1787,7 @@ - - + @@ -1827,13 +1826,10 @@ - - - - - - - + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLL.cs similarity index 78% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLL.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLL.cs index 5096e9861..196a25c0c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLL.cs @@ -2,9 +2,8 @@ using System; using System.Data; using System.Collections.Generic; -using Learun.Application.Base.SystemModule; -namespace Learun.Application.TwoDevelopment.StuPayManage +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { /// /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 @@ -13,9 +12,9 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// 日 期:2023-07-31 22:20 /// 描 述:操作日志 /// - public class SP_LogBLL : SP_LogIBLL + public class FinaChargeLogBLL : FinaChargeLogIBLL { - private SP_LogService sP_LogService = new SP_LogService(); + private FinaChargeLogService finaChargeLogService = new FinaChargeLogService(); #region 获取数据 @@ -24,11 +23,11 @@ namespace Learun.Application.TwoDevelopment.StuPayManage ///
    /// 查询参数 /// - public IEnumerable GetList( string queryJson ) + public IEnumerable GetList( string queryJson ) { try { - return sP_LogService.GetList(queryJson); + return finaChargeLogService.GetList(queryJson); } catch (Exception ex) { @@ -49,11 +48,11 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// 分页参数 /// 查询参数 /// - public IEnumerable GetPageList(Pagination pagination, string queryJson) + public IEnumerable GetPageList(Pagination pagination, string queryJson) { try { - return sP_LogService.GetPageList(pagination, queryJson); + return finaChargeLogService.GetPageList(pagination, queryJson); } catch (Exception ex) { @@ -73,11 +72,11 @@ namespace Learun.Application.TwoDevelopment.StuPayManage ///
    /// 主键 /// - public SP_LogEntity GetEntity(string keyValue) + public FinaChargeLogEntity GetEntity(string keyValue) { try { - return sP_LogService.GetEntity(keyValue); + return finaChargeLogService.GetEntity(keyValue); } catch (Exception ex) { @@ -104,7 +103,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage { try { - sP_LogService.DeleteEntity(keyValue); + finaChargeLogService.DeleteEntity(keyValue); } catch (Exception ex) { @@ -124,11 +123,11 @@ namespace Learun.Application.TwoDevelopment.StuPayManage ///
    /// 主键 /// 实体 - public void SaveEntity(string keyValue, SP_LogEntity entity) + public void SaveEntity(string keyValue, FinaChargeLogEntity entity) { try { - sP_LogService.SaveEntity(keyValue, entity); + finaChargeLogService.SaveEntity(keyValue, entity); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLLStatic.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLLStatic.cs similarity index 71% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLLStatic.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLLStatic.cs index a22af67bb..5b64107d2 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogBLLStatic.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLLStatic.cs @@ -5,18 +5,18 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Learun.Application.TwoDevelopment.StuPayManage.SP_Log +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { - public static class SP_LogBLLStatic + public static class FinaChargeLogBLLStatic { - private static SP_LogService sP_LogService = new SP_LogService(); + private static FinaChargeLogService finaChargeLogService = new FinaChargeLogService(); public static void RemoveLog(int categoryId, string keepTime) { try { - sP_LogService.RemoveLog(categoryId, keepTime); + finaChargeLogService.RemoveLog(categoryId, keepTime); } catch (Exception ex) { @@ -37,11 +37,11 @@ namespace Learun.Application.TwoDevelopment.StuPayManage.SP_Log /// 写日志 ///
    /// 对象 - public static void WriteLog(this SP_LogEntity logEntity) + public static void WriteLog(this FinaChargeLogEntity logEntity) { try { - sP_LogService.WriteLog(logEntity); + finaChargeLogService.WriteLog(logEntity); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogEntity.cs similarity index 97% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogEntity.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogEntity.cs index b1c331382..b7545f213 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogEntity.cs @@ -1,7 +1,7 @@ using Learun.Util; using System; using System.ComponentModel.DataAnnotations.Schema; -namespace Learun.Application.TwoDevelopment +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { /// @@ -11,7 +11,7 @@ namespace Learun.Application.TwoDevelopment /// 日 期:2023-07-31 22:20 /// 描 述:操作日志 /// - public class SP_LogEntity + public class FinaChargeLogEntity { #region 实体成员 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogIBLL.cs similarity index 77% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogIBLL.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogIBLL.cs index f93a9c15d..3c229666b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogIBLL.cs @@ -2,7 +2,7 @@ using System.Data; using System.Collections.Generic; -namespace Learun.Application.TwoDevelopment.StuPayManage +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { /// /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 @@ -11,7 +11,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// 日 期:2023-07-31 22:20 /// 描 述:操作日志 /// - public interface SP_LogIBLL + public interface FinaChargeLogIBLL { #region 获取数据 @@ -20,20 +20,20 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// /// 查询参数 /// - IEnumerable GetList( string queryJson ); + IEnumerable GetList( string queryJson ); /// /// 获取列表分页数据 /// /// 分页参数 /// 查询参数 /// - IEnumerable GetPageList(Pagination pagination, string queryJson); + IEnumerable GetPageList(Pagination pagination, string queryJson); /// /// 获取实体数据 /// /// 主键 /// - SP_LogEntity GetEntity(string keyValue); + FinaChargeLogEntity GetEntity(string keyValue); #endregion #region 提交数据 @@ -48,7 +48,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage ///
    /// 主键 /// 实体 - void SaveEntity(string keyValue, SP_LogEntity entity); + void SaveEntity(string keyValue, FinaChargeLogEntity entity); #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogService.cs similarity index 88% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogService.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogService.cs index 00734a608..ab6af84ae 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_Log/SP_LogService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogService.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace Learun.Application.TwoDevelopment.StuPayManage +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { /// /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 @@ -16,7 +16,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// 日 期:2023-07-31 22:20 /// 描 述:操作日志 /// - public class SP_LogService : RepositoryFactory + public class FinaChargeLogService : RepositoryFactory { #region 构造函数和属性 @@ -24,7 +24,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// /// 构造方法 /// - public SP_LogService() + public FinaChargeLogService() { fieldSql=@" t.F_LogId, @@ -58,7 +58,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage ///
    /// 条件参数 /// - public IEnumerable GetList( string queryJson ) + public IEnumerable GetList( string queryJson ) { try { @@ -70,8 +70,8 @@ namespace Learun.Application.TwoDevelopment.StuPayManage var strSql = new StringBuilder(); strSql.Append("SELECT "); strSql.Append(fieldSql); - strSql.Append(" FROM SP_Log t "); - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString()); + strSql.Append(" FROM FinaChargeLog t "); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString()); } catch (Exception ex) { @@ -92,7 +92,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// 分页参数 /// 条件参数 /// - public IEnumerable GetPageList(Pagination pagination, string queryJson) + public IEnumerable GetPageList(Pagination pagination, string queryJson) { try { @@ -100,7 +100,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage strSql.Append("SELECT "); strSql.Append(fieldSql); strSql.Append(" FROM SP_Log t "); - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), pagination); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), pagination); } catch (Exception ex) { @@ -120,11 +120,11 @@ namespace Learun.Application.TwoDevelopment.StuPayManage ///
    /// 主键 /// - public SP_LogEntity GetEntity(string keyValue) + public FinaChargeLogEntity GetEntity(string keyValue) { try { - return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); } catch (Exception ex) { @@ -164,7 +164,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage { operateTime = DateTime.Now.AddMonths(-3); } - var expression = LinqExtensions.True(); + var expression = LinqExtensions.True(); this.BaseRepository("CollegeMIS").Delete(expression); } @@ -185,7 +185,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// 写日志 ///
    /// 对象 - public void WriteLog(SP_LogEntity logEntity) + public void WriteLog(FinaChargeLogEntity logEntity) { try { @@ -220,7 +220,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage { try { - this.BaseRepository("CollegeMIS").Delete(t=>t.F_LogId == keyValue); + this.BaseRepository("CollegeMIS").Delete(t=>t.F_LogId == keyValue); } catch (Exception ex) { @@ -240,7 +240,7 @@ namespace Learun.Application.TwoDevelopment.StuPayManage /// 主键 /// 实体 ///
    - public void SaveEntity(string keyValue, SP_LogEntity entity) + public void SaveEntity(string keyValue, FinaChargeLogEntity entity) { try { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs deleted file mode 100644 index 9ab4c5e5d..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemBLL.cs +++ /dev/null @@ -1,163 +0,0 @@ -using Learun.Util; -using System; -using System.Data; -using System.Collections.Generic; - -namespace Learun.Application.TwoDevelopment.StuPayManage -{ - /// - /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 - /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - /// 创 建:超级管理员 - /// 日 期:2023-07-29 18:34 - /// 描 述:专业收费项目设置 - /// - public class SP_FeeItemBLL : SP_FeeItemIBLL - { - private SP_FeeItemService sP_FeeItemService = new SP_FeeItemService(); - - #region 获取数据 - - public IEnumerable GetList(string queryJson) - { - try - { - return sP_FeeItemService.GetList(queryJson); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowBusinessException(ex); - } - } - } - - /// - /// 获取页面显示列表数据 - /// - /// 分页参数 - /// 查询参数 - /// - public IEnumerable GetPageList(Pagination pagination, string queryJson) - { - try - { - return sP_FeeItemService.GetPageList(pagination, queryJson); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowBusinessException(ex); - } - } - } - - /// - /// 获取SP_FeeItem表实体数据 - /// - /// 主键 - /// - public SP_FeeItemEntity GetSP_FeeItemEntity(string keyValue) - { - try - { - return sP_FeeItemService.GetSP_FeeItemEntity(keyValue); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowBusinessException(ex); - } - } - } - - #endregion - - #region 提交数据 - - /// - /// 删除实体数据 - /// - /// 主键 - public void DeleteEntity(string keyValue) - { - try - { - sP_FeeItemService.DeleteEntity(keyValue); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowBusinessException(ex); - } - } - } - - public void DeleteEntity(IEnumerable entities) { - - try - { - sP_FeeItemService.DeleteEntity(entities); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowBusinessException(ex); - } - } - } - - /// - /// 保存实体数据(新增、修改) - /// - /// 主键 - /// 实体 - /// - public void SaveEntity(string keyValue, SP_FeeItemEntity entity) - { - try - { - sP_FeeItemService.SaveEntity(keyValue, entity); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowBusinessException(ex); - } - } - } - - #endregion - - } -} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemEntity.cs deleted file mode 100644 index ca89b20b5..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemEntity.cs +++ /dev/null @@ -1,138 +0,0 @@ -using Learun.Util; -using System; -using System.ComponentModel.DataAnnotations.Schema; - -namespace Learun.Application.TwoDevelopment.StuPayManage -{ - /// - /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 - /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - /// 创 建:超级管理员 - /// 日 期:2023-07-29 18:34 - /// 描 述:专业收费项目设置 - /// - public class SP_FeeItemEntity - { - #region 实体成员 - /// - /// 主键 - /// - [Column("F_ID")] - public string F_Id { get; set; } - /// - /// 创建人ID - /// - [Column("F_CREATEUSERID")] - public string F_CreateUserId { get; set; } - /// - /// 创建人 - /// - [Column("F_CREATEUSERNAME")] - public string F_CreateUserName { get; set; } - /// - /// 创建时间 - /// - [Column("F_CREATEDATE")] - public DateTime? F_CreateDate { get; set; } - /// - /// 更新人ID - /// - [Column("F_MODIFYUSERID")] - public string F_ModifyUserId { get; set; } - /// - /// 更新人 - /// - [Column("F_MODIFYUSERNAME")] - public string F_ModifyUserName { get; set; } - /// - /// 更新时间 - /// - [Column("F_MODIFYDATE")] - public DateTime? F_ModifyDate { get; set; } - /// - /// 收费年度 - /// - [Column("YEARNO")] - public string YearNo { get; set; } - /// - /// 项目代码 - /// - [Column("CHARGEITEMCODE")] - public string ChargeItemCode { get; set; } - /// - /// 项目名称 - /// - [Column("CHARGEITEMNAME")] - public string ChargeItemName { get; set; } - /// - /// 项目类型 固定/非固定 - /// - [Column("CHARGEITEMTYPE")] - public int? ChargeItemType { get; set; } - /// - /// 收费标准 decimal(10,2) - /// - [Column("STANDARD")] - public decimal? Standard { get; set; } - /// - /// 专业 - /// - [Column("MAJORNO")] - public string MajorNo { get; set; } - /// - /// 专业名称 - /// - [Column("MAJORNAME")] - public string MajorName { get; set; } - /// - /// 学校 - /// - [Column("F_SCHOOLID")] - public string F_SchoolId { get; set; } - /// - /// 备注 - /// - [Column("REMARK")] - public string Remark { get; set; } - /// - /// 审核标志 审核通过、审核不通过、待审核 - /// - [Column("F_STATUS")] - public int? F_Status { get; set; } - /// - /// 删除标记 0:未删除、1:删除,默认值:0 - /// - [Column("F_DELETEMARK")] - public int? F_DeleteMark { get; set; } - #endregion - - #region 扩展操作 - /// - /// 新增调用 - /// - public void Create() - { - this.F_Id = Guid.NewGuid().ToString(); - this.F_CreateDate = DateTime.Now; - UserInfo userInfo = LoginUserInfo.Get(); - this.F_CreateUserId = userInfo.userId; - this.F_CreateUserName = userInfo.realName; - } - /// - /// 编辑调用 - /// - /// - public void Modify(string keyValue) - { - this.F_Id = keyValue; - this.F_ModifyDate = DateTime.Now; - UserInfo userInfo = LoginUserInfo.Get(); - this.F_ModifyUserId = userInfo.userId; - this.F_ModifyUserName = userInfo.realName; - } - #endregion - #region 扩展字段 - #endregion - } -} - diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs deleted file mode 100644 index 1647615cc..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemIBLL.cs +++ /dev/null @@ -1,62 +0,0 @@ -using Learun.Util; -using System.Data; -using System.Collections.Generic; - -namespace Learun.Application.TwoDevelopment.StuPayManage -{ - /// - /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 - /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - /// 创 建:超级管理员 - /// 日 期:2023-07-29 18:34 - /// 描 述:专业收费项目设置 - /// - public interface SP_FeeItemIBLL - { - #region 获取数据 - - /// - /// 获取列表数据 - /// - /// - /// - IEnumerable GetList(string queryJson); - - /// - /// 获取页面显示列表数据 - /// - /// 查询参数 - /// - IEnumerable GetPageList(Pagination pagination, string queryJson); - /// - /// 获取SP_FeeItem表实体数据 - /// - /// 主键 - /// - SP_FeeItemEntity GetSP_FeeItemEntity(string keyValue); - #endregion - - #region 提交数据 - - /// - /// 删除实体数据 - /// - /// 主键 - void DeleteEntity(string keyValue); - - /// - /// 批量删除实体数据 - /// - /// 实体数据列表 - void DeleteEntity(IEnumerable entities); - - /// - /// 保存实体数据(新增、修改) - /// - /// 主键 - /// 实体 - void SaveEntity(string keyValue, SP_FeeItemEntity entity); - #endregion - - } -} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs deleted file mode 100644 index 09f2df278..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/StuPayManage/SP_FeeItem/SP_FeeItemService.cs +++ /dev/null @@ -1,230 +0,0 @@ -using Dapper; -using Learun.DataBase.Repository; -using Learun.Util; -using System; -using System.Collections.Generic; -using System.Data; -using System.Text; - -namespace Learun.Application.TwoDevelopment.StuPayManage -{ - /// - /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 - /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - /// 创 建:超级管理员 - /// 日 期:2023-07-29 18:34 - /// 描 述:专业收费项目设置 - /// - public class SP_FeeItemService : RepositoryFactory - { - #region 获取数据 - - /// - /// 获取列表数据 - /// - /// - /// - public IEnumerable GetList(string queryJson) - { - try - { - var strSql = new StringBuilder(); - strSql.Append(" SELECT t.*"); - strSql.Append(" FROM SP_FeeItem t "); - strSql.Append(" where 1=1 "); - - //参数写法 - var queryParam=queryJson.ToJObject(); - // 虚拟参数 - var dp=new DynamicParameters(new {}); - if (!queryParam["ids"].IsEmpty()) { - dp.Add("ids", $"{queryParam["ids"].ToString()}", DbType.String); - strSql.Append(" and t.F_Id in ( @ids ) "); - } - - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowServiceException(ex); - } - } - } - /// - /// 获取页面显示列表数据 - /// - /// 查询参数 - /// 查询参数 - /// - public IEnumerable GetPageList(Pagination pagination, string queryJson) - { - try - { - var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(@" - * - "); - strSql.Append(" FROM SP_FeeItem t "); - strSql.Append(" WHERE 1=1 "); - var queryParam = queryJson.ToJObject(); - // 虚拟参数 - var dp = new DynamicParameters(new { }); - if (!queryParam["YearNo"].IsEmpty()) - { - dp.Add("YearNo",queryParam["YearNo"].ToString(), DbType.String); - strSql.Append(" AND t.YearNo = @YearNo "); - } - if (!queryParam["ChargeItemType"].IsEmpty()) - { - dp.Add("ChargeItemType",queryParam["ChargeItemType"].ToString(), DbType.String); - strSql.Append(" AND t.ChargeItemType = @ChargeItemType "); - } - if (!queryParam["ChargeItemCode"].IsEmpty()) - { - dp.Add("ChargeItemCode", "%" + queryParam["ChargeItemCode"].ToString() + "%", DbType.String); - strSql.Append(" AND t.ChargeItemCode Like @ChargeItemCode "); - } - if (!queryParam["ChargeItemName"].IsEmpty()) - { - dp.Add("ChargeItemName", "%" + queryParam["ChargeItemName"].ToString() + "%", DbType.String); - strSql.Append(" AND t.ChargeItemName Like @ChargeItemName "); - } - if (!queryParam["MajorNo"].IsEmpty()) - { - dp.Add("MajorNo",queryParam["MajorNo"].ToString(), DbType.String); - strSql.Append(" AND t.MajorNo = @MajorNo "); - } - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowServiceException(ex); - } - } - } - - /// - /// 获取SP_FeeItem表实体数据 - /// - /// 主键 - /// - public SP_FeeItemEntity GetSP_FeeItemEntity(string keyValue) - { - try - { - return this.BaseRepository("CollegeMIS").FindEntity(keyValue); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowServiceException(ex); - } - } - } - - #endregion - - #region 提交数据 - - /// - /// 删除实体数据 - /// - /// 主键 - public void DeleteEntity(string keyValue) - { - try - { - this.BaseRepository("CollegeMIS").Delete(t=>t.F_Id == keyValue); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowServiceException(ex); - } - } - } - - - /// - /// 批量删除实体数据 - /// - /// 实体数据列表 - public void DeleteEntity(IEnumerable entities) - { - try - { - this.BaseRepository("CollegeMIS").Delete>(entities); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowServiceException(ex); - } - } - } - - /// - /// 保存实体数据(新增、修改) - /// - /// 主键 - /// 实体 - public void SaveEntity(string keyValue, SP_FeeItemEntity entity) - { - try - { - if (!string.IsNullOrEmpty(keyValue)) - { - entity.Modify(keyValue); - this.BaseRepository("CollegeMIS").Update(entity); - } - else - { - entity.Create(); - this.BaseRepository("CollegeMIS").Insert(entity); - } - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowServiceException(ex); - } - } - } - - #endregion - - } -} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util.Operat/OperationType.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util.Operat/OperationType.cs index 041be9dde..245118831 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util.Operat/OperationType.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util.Operat/OperationType.cs @@ -66,5 +66,11 @@ namespace Learun.Util.Operat ///
    [Description("移动登录")] AppLogin = 10, + + [Description("审核、启用")] + Lock = 11, + + [Description("去审核、停用")] + UnLock = 12, } } From 0c5aaf31cba6f91238459b83d06660350f77c5c2 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Fri, 18 Aug 2023 17:27:53 +0800 Subject: [PATCH 25/50] =?UTF-8?q?=E6=98=8E=E7=BB=86=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearController.cs | 8 +- .../FinaChargeStuYearItemController.cs | 17 +- .../FinaChargeStudentController.cs | 13 +- .../FinaChargesStandardController.cs | 3 +- .../Views/FinaChargeStuOrder/Index.cshtml | 1 + .../Views/FinaChargeStuOrder/Index.js | 25 ++- .../Views/FinaChargeStuOrderDetail/Index.js | 4 +- .../Views/FinaChargeStuYear/Index.cshtml | 2 +- .../Views/FinaChargeStuYear/Index.js | 39 ++--- .../FinaChargeStuYear/IndexForTeacher.cshtml | 63 +++++++ .../FinaChargeStuYear/IndexForTeacher.js | 141 ++++++++++++++++ .../Views/FinaChargeStuYearItem/Index.cshtml | 5 +- .../Views/FinaChargeStuYearItem/Index.js | 10 +- .../IndexForRefund.cshtml | 66 ++++++++ .../FinaChargeStuYearItem/IndexForRefund.js | 157 ++++++++++++++++++ .../IndexForTeacher.cshtml | 65 ++++++++ .../FinaChargeStuYearItem/IndexForTeacher.js | 134 +++++++++++++++ .../Views/FinaChargeStudent/Index.js | 11 +- .../Learun.Application.Web.csproj | 6 + .../FinaChargeStuOrderDetailService.cs | 5 + .../FinaChargeStuYearService.cs | 9 +- .../FinaChargeStuYearItemEntity.cs | 6 + .../FinaChargeStuYearItemService.cs | 14 ++ 23 files changed, 759 insertions(+), 45 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs index 1392cff05..00abc770b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -11,6 +11,7 @@ using System.Text; using System.Web; using Learun.Application.Base.SystemModule; using Learun.Application.TwoDevelopment.EducationalAdministration; +using Learun.Util.Operat; using Newtonsoft.Json; using ThoughtWorks.QRCode.Codec; @@ -39,6 +40,11 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { return View(); } + [HttpGet] + public ActionResult IndexForTeacher() + { + return View(); + } [HttpGet] public ActionResult IndexForStudent() @@ -191,7 +197,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { FinaChargeStuYearEntity entity = strEntity.ToObject(); finaChargeStuYearIBLL.SaveGenerateByCondition(entity); - return Success("生成成功!"); + return Success_FinaCharge("生成成功!", "学生年度缴费管理", OperationType.Create, "", "生成学生年度缴费数据成功"); } #endregion diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs index 208c6809c..edcd753b2 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearItemController.cs @@ -4,6 +4,7 @@ using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; using System.Web.Mvc; using System.Collections.Generic; using Learun.Application.Base.SystemModule; +using Learun.Util.Operat; namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { @@ -30,6 +31,17 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { return View(); } + [HttpGet] + public ActionResult IndexForTeacher() + { + return View(); + } + + [HttpGet] + public ActionResult IndexForRefund() + { + return View(); + } /// /// 表单页 /// @@ -99,14 +111,14 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult DeleteForm(string keyValue) { finaChargeStuYearItemIBLL.DeleteEntity(keyValue); - return Success("操作成功!"); + return Success_FinaCharge("作废成功!", "收费明细管理", OperationType.Delete, keyValue, "作废成功"); } [HttpPost] [AjaxOnly] public ActionResult UnDeleteForm(string keyValue) { finaChargeStuYearItemIBLL.UnDeleteEntity(keyValue); - return Success("操作成功!"); + return Success_FinaCharge("恢复成功!", "收费明细管理", OperationType.Create, keyValue, "恢复成功"); } /// /// 保存实体数据(新增、修改) @@ -148,6 +160,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers Success = res.Split('|')[0], Fail = res.Split('|')[1] }; + Success_FinaCharge("导入成功!", "收费明细管理", OperationType.Create, "", "导入收费明细成功:"+ res.Split('|')[0] + "条,失败:"+ res.Split('|')[1] + "条"); return JsonResult(data); } else diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs index 45da674e3..b9fe65981 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStudentController.cs @@ -3,6 +3,7 @@ using System.Data; using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; using System.Web.Mvc; using System.Collections.Generic; +using Learun.Util.Operat; namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { @@ -85,14 +86,14 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult Lock(string keyValue) { finaChargeStudentIBLL.Lock(keyValue); - return Success("审核成功!"); + return Success_FinaCharge("审核成功!", "缴费学生信息", OperationType.Lock, keyValue,"审核成功"); } [HttpPost] [AjaxOnly] public ActionResult UnLock(string keyValue) { finaChargeStudentIBLL.UnLock(keyValue); - return Success("去审核成功!"); + return Success_FinaCharge("去审成功!", "缴费学生信息", OperationType.UnLock, keyValue, "去审成功"); } [HttpPost] @@ -100,7 +101,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult ImportForm() { finaChargeStudentIBLL.ImportForm(); - return Success("导入成功!"); + return Success_FinaCharge("导入成功!", "缴费学生信息", OperationType.Create, "", "导入学生信息成功"); } [HttpPost] @@ -108,7 +109,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult UpdateForm() { finaChargeStudentIBLL.UpdateForm(); - return Success("更新成功!"); + return Success_FinaCharge("更新成功!", "缴费学生信息", OperationType.Update, "", "更新学生信息成功"); } /// /// 删除实体数据 @@ -121,12 +122,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { //判断有无余额数据 var stuchargeinfo = finaChargeStudentIBLL.GetFinaChargeStudentEntity(keyValue); - if (stuchargeinfo.FSBlance!=0) + if (stuchargeinfo.FSBlance.HasValue&&stuchargeinfo.FSBlance!=0) { return Fail("本学生存在缴费数据,不能删除。请核对!"); } finaChargeStudentIBLL.DeleteEntity(keyValue); - return Success("删除成功!"); + return Success_FinaCharge("删除成功!", "缴费学生信息", OperationType.Delete, keyValue, "删除缴费学生"); } /// /// 保存实体数据(新增、修改) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs index 17704968c..cbe769f14 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs @@ -258,9 +258,8 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { var aa = strEntity.ToObject>(); var aaa = aa.Where(x => x.Standard.HasValue && x.Standard.Value > 0).ToList(); - finaChargesStandardIBLL.SaveFinaChargesStandardList(deptno,majorNo, syear, grade, aaa); - return Success("保存成功!"); + return Success_FinaCharge("保存成功!", "收费标准设置", OperationType.Update, majorNo, "专业" + majorNo + "年度" + syear + "年级" + grade+aaa.ToJson()); } /// diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml index 118713830..1de07638c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml @@ -47,6 +47,7 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js index 04b00f7de..b773dda8a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js @@ -55,15 +55,32 @@ var bootstrap = function ($, learun) { //  导入 $('#lr_import').on('click', function () { }); + //明细 + $('#lr_detail').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('Id'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'detail', + title: "订单明细", + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/Index?keyValue=' + keyValue, + width: 800, + height: 450, + btn: null, + end: function () { + refreshGirdData(); + } + }); + } + }); }, // 初始化列表 initGird: function () { $('#gridtable').lrAuthorizeJfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrder/GetPageList', headData: [ - { label: "缴费年度", name: "YearNo", width: 100, align: "left"}, + { label: "缴费年度", name: "YearNo", width: 80, align: "left"}, { label: "学号", name: "StuNo", width: 100, align: "left"}, - { label: "订单编号", name: "orderid", width: 100, align: "left"}, + { label: "订单编号", name: "orderid", width: 150, align: "left"}, { label: "应缴金额", name: "YJAmount", width: 100, align: "left"}, { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, { label: "待缴金额", name: "DJAmount", width: 100, align: "left"}, @@ -78,8 +95,8 @@ var bootstrap = function ($, learun) { } }); }}, - { label: "订单生成时间", name: "PlaceOrderTime", width: 100, align: "left"}, - { label: "付款时间", name: "PayTime", width: 100, align: "left"}, + { label: "订单生成时间", name: "PlaceOrderTime", width: 150, align: "left"}, + { label: "付款时间", name: "PayTime", width: 150, align: "left"}, { label: "支付方式", name: "PayMode", width: 100, align: "left", formatterAsync: function (callback, value, row, op,$cell) { learun.clientdata.getAsync('dataItem', { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js index 74847013b..46752bc70 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js @@ -5,6 +5,7 @@ * 描 述:FinaChargeStuOrderDetail */ var refreshGirdData; +var keyValue = request('keyValue'); var bootstrap = function ($, learun) { "use strict"; var page = { @@ -20,7 +21,7 @@ var bootstrap = function ($, learun) { }, // 初始化列表 initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ + $('#gridtable').jfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/GetPageList', headData: [ { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, @@ -37,6 +38,7 @@ var bootstrap = function ($, learun) { }, search: function (param) { param = param || {}; + param.FCSOId = keyValue; $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); } }; diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml index 35f92d6b8..459ea2c14 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.cshtml @@ -53,7 +53,7 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js index 57cd6a9bd..f01b33cc7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js @@ -33,6 +33,23 @@ var bootstrap = function ($, learun) { $('#lr_refresh').on('click', function () { location.reload(); }); + //明细 + $('#lr_detail').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYId'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'detail', + title: "收费明细", + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/Index?keyValue=' + keyValue, + width: 1400, + height: 600, + btn: null, + end: function () { + refreshGirdData(); + } + }); + } + }); // 新增 $('#lr_add').on('click', function () { learun.layerForm({ @@ -46,22 +63,6 @@ var bootstrap = function ($, learun) { } }); }); - // 退费 - $('#lr_edit').on('click', function () { - var keyValue = $('#gridtable').jfGridValue('FSYId'); - if (learun.checkrow(keyValue)) { - learun.layerForm({ - id: 'form', - title: '退费', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/Form?keyValue=' + keyValue, - width: 600, - height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); - } - }); - } - }); }, // 初始化列表 initGird: function () { @@ -76,7 +77,7 @@ var bootstrap = function ($, learun) { return cellvalue == true ? "男" : "女"; } }, - { label: "身份证号", name: "IdentityCardNo", width: 100, align: "left" }, + { label: "身份证号", name: "IdentityCardNo", width: 150, align: "left" }, { label: "系所", name: "DeptNo", width: 100, align: "left", formatterAsync: function (callback, value, row, op, $cell) { @@ -116,11 +117,11 @@ var bootstrap = function ($, learun) { }); } }, - { label: "年级", name: "Grade", width: 100, align: "left" }, + { label: "年级", name: "Grade", width: 80, align: "left" }, { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, { label: "应缴金额", name: "YJAmount", width: 100, align: "left" }, { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, - { label: "缴费年度余额", name: "FSBlance", width: 100, align: "left" }, + { label: "缴费年度余额(负数代表欠缴)", name: "FSBlance", width: 180, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatter: function (cellvalue, row) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.cshtml new file mode 100644 index 000000000..d6bfb42b6 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.cshtml @@ -0,0 +1,63 @@ +@{ + ViewBag.Title = "学生年度缴费管理"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    缴费年度
    +
    +
    +
    +
    +
    +
    + 学生缴费信息 +
    +
    +
    +
    +
    +
    +
    +
    学号
    + +
    +
    +
    姓名
    + +
    +
    +
    身份证号
    + +
    +
    +
    系部
    +
    +
    +
    +
    专业
    +
    +
    +
    +
    班级
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js new file mode 100644 index 000000000..72f1498eb --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js @@ -0,0 +1,141 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-07 15:52 + * 描 述:学生年度缴费管理 + */ +var refreshGirdData; +var fSYear; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + // 初始化左侧树形数据 + $('#dataTree').lrtree({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetYearTree', + nodeClick: function (item) { + fSYear = item.value; + page.search(); + } + }); + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 250, 400); + $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo', value: 'deptno', text: 'deptname' }); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); + $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + //明细 + $('#lr_detail').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYId'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'detail', + title: "收费明细", + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/IndexForTeacher?keyValue=' + keyValue, + width: 1400, + height: 600, + btn: null, + end: function () { + refreshGirdData(); + } + }); + } + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').jfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYear/GetPageList', + headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "性别", name: "GenderNo", width: 80, align: "left", + formatter: function (cellvalue) { + return cellvalue == true ? "男" : "女"; + } + }, + { label: "身份证号", name: "IdentityCardNo", width: 150, align: "left" }, + { + label: "系所", name: "DeptNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: value, + keyId: 'deptno', + callback: function (_data) { + callback(_data['deptname']); + } + }); + } + }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "年级", name: "Grade", width: 80, align: "left" }, + { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, + { label: "应缴金额", name: "YJAmount", width: 100, align: "left" }, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, + { label: "缴费年度余额(负数代表欠缴)", name: "FSBlance", width: 180, align: "left" }, + { + label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", + formatter: function (cellvalue, row) { + if (cellvalue === 0) { + return '未缴费'; + } else if (cellvalue === 1) { + return '已缴费'; + } else { + return '部分缴纳'; + } + } + }, + ], + mainId: 'FSYId', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + param.fSYear = fSYear; + param.Teacher = 1; + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml index 70860f27c..aecfad550 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml @@ -55,9 +55,10 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js index f25df5bc0..b23bec82d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js @@ -6,6 +6,7 @@ */ var refreshGirdData; var sYear; +var keyValue = request('keyValue'); var bootstrap = function ($, learun) { "use strict"; var page = { @@ -54,15 +55,15 @@ var bootstrap = function ($, learun) { // 恢复 $('#lr_undelete').on('click', function () { var keyValue = $('#gridtable').jfGridValue('FSYIId'); - var ChargeItemType = $('#gridtable').jfGridValue('F_DeleteMark'); + var F_DeleteMark = $('#gridtable').jfGridValue('F_DeleteMark').toString(); if (learun.checkrow(keyValue)) { - if (ChargeItemType.indexOf('1') != -1) { + if (F_DeleteMark.indexOf('false') != -1) { learun.alert.error("包含未作废项目,不能恢复"); return; } learun.layerConfirm('是否确认恢复该项!', function (res) { if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/UnDeleteForm', { keyValue: keyValue }, function () { + learun.postForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/UnDeleteForm', { keyValue: keyValue }, function () { refreshGirdData(); }); } @@ -85,7 +86,7 @@ var bootstrap = function ($, learun) { } learun.layerConfirm('是否确认作废该项!', function (res) { if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/DeleteForm', { keyValue: keyValue }, function () { + learun.postForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/DeleteForm', { keyValue: keyValue }, function () { refreshGirdData(); }); } @@ -176,6 +177,7 @@ var bootstrap = function ($, learun) { }, search: function (param) { param = param || {}; + param.FSYId = keyValue; param.FSYear = $('#FSYear').lrselectGet(); $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.cshtml new file mode 100644 index 000000000..2be774001 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.cshtml @@ -0,0 +1,66 @@ +@{ + ViewBag.Title = "FinaChargeStuYearItem"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    学号
    + +
    +
    +
    姓名
    + +
    +
    +
    项目名称
    + +
    +
    +
    项目编号
    + +
    +
    +
    缴费年度
    +
    +
    +
    +
    退费状态
    +
    +
    +
    +
    项目类型
    +
    +
    +
    +
    专业
    +
    +
    +
    +
    班级
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +  退费 +
    +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js new file mode 100644 index 000000000..46c2535bb --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js @@ -0,0 +1,157 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-07 16:40 + * 描 述:FinaChargeStuYearItem + */ +var refreshGirdData; +var sYear; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.bind(); + setTimeout(function () { + page.initGird(); + }, 500);//延迟 + + }, + bind: function () { + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 300, 400); + $('#FSYear').lrselect({ + url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', + value: 'value', + text: 'text' + }); + var now = new Date(); + sYear = now.getFullYear(); + $('#FSYear').lrselectSet(sYear); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); + $('#RefundStatus').lrDataItemSelect({ code: 'RefundStatus' }); + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + //退费 + $('#lr_refund').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYIId'); + var RefundStatus = $('#gridtable').jfGridValue('RefundStatus').toString(); + if (learun.checkrow(keyValue)) { + if (RefundStatus.indexOf('true') != -1) { + learun.alert.error("包含已退费项目,不能退费"); + return; + } + learun.layerForm({ + id: 'formrefund', + title: '退费', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeItem/Form', + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + } + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').jfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/GetPageList', + headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, + { label: "收费项名称", name: "ChargeItemName", width: 100, align: "left" }, + { + label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + { label: "收费标准", name: "Standard", width: 100, align: "left" }, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, + { label: "缴费余额", name: "FSBlance", width: 100, align: "left" }, + { + label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'PayStatus', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + { + label: "是否退费", name: "RefundStatus", width: 100, align: "left", + formatter: function (cellvalue, row) { + if (cellvalue ===true) { + return '已退费'; + } else{ + return '未退费'; + } + } + } + ], + mainId: 'FSYIId', + isPage: true, + isMultiselect: true, + sidx:'MajorNo,ClassNo,StuNo,ChargeItemCode' + }); + page.search(); + }, + search: function (param) { + param = param || {}; + param.FSYId = keyValue; + param.PayFeeStatus = 1; + param.F_DeleteMark = 0; + param.Refund = 1; + param.FSYear = $('#FSYear').lrselectGet(); + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.cshtml new file mode 100644 index 000000000..275de099e --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.cshtml @@ -0,0 +1,65 @@ +@{ + ViewBag.Title = "FinaChargeStuYearItem"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    学号
    + +
    +
    +
    姓名
    + +
    +
    +
    项目名称
    + +
    +
    +
    项目编号
    + +
    +
    +
    缴费年度
    +
    +
    +
    +
    缴费状态
    +
    +
    +
    +
    项目类型
    +
    +
    +
    +
    专业
    +
    +
    +
    +
    班级
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js new file mode 100644 index 000000000..ca0a72d71 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js @@ -0,0 +1,134 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-07 16:40 + * 描 述:FinaChargeStuYearItem + */ +var refreshGirdData; +var sYear; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.bind(); + setTimeout(function () { + page.initGird(); + }, 500);//延迟 + + }, + bind: function () { + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 300, 400); + $('#FSYear').lrselect({ + url: top.$.rootUrl + '/EducationalAdministration/CdMajor/GenerateNearByYear', + value: 'value', + text: 'text' + }); + var now = new Date(); + sYear = now.getFullYear(); + $('#FSYear').lrselectSet(sYear); + $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); + $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); + $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + + }, + // 初始化列表 + initGird: function () { + $('#gridtable').jfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuYearItem/GetPageList', + headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, + { label: "收费项名称", name: "ChargeItemName", width: 100, align: "left" }, + { + label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + { label: "收费标准", name: "Standard", width: 100, align: "left" }, + { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, + { label: "缴费余额", name: "FSBlance", width: 100, align: "left" }, + { + label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'PayStatus', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + { + label: "是否作废", name: "F_DeleteMark", width: 100, align: "left", + formatter: function (cellvalue, row) { + if (cellvalue ===true) { + return '作废'; + } else{ + return '正常'; + } + } + } + ], + mainId: 'FSYIId', + isPage: true, + isMultiselect: true, + sidx:'MajorNo,ClassNo,StuNo,ChargeItemCode' + }); + page.search(); + }, + search: function (param) { + param = param || {}; + param.FSYId = keyValue; + param.FSYear = $('#FSYear').lrselectGet(); + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js index 54f5aaa67..ad3a2e91e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js @@ -47,6 +47,15 @@ var bootstrap = function ($, learun) { $('#lr_delete').on('click', function () { var keyValue = $('#gridtable').jfGridValue('FSId'); if (learun.checkrow(keyValue)) { + if (keyValue.indexOf(',') != -1) { + learun.alert.warning("只能选择一条记录进行删除!"); + return; + } + var CheckMark = $('#gridtable').jfGridValue('F_CheckMark').toString(); + if (CheckMark.indexOf('true') != -1) { + learun.alert.warning("选中记录中包含已审核项目!"); + return; + } learun.layerConfirm('是否确认删除该项!', function (res) { if (res) { learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStudent/DeleteForm', { keyValue: keyValue }, function () { @@ -148,7 +157,7 @@ var bootstrap = function ($, learun) { }, { label: "年级", name: "Grade", width: 80, align: "left" }, { label: "手机号", name: "Mobile", width: 100, align: "left" }, - { label: "学生总余额", name: "FSBlance", width: 100, align: "left" }, + { label: "学生总余额(负数代表欠缴)", name: "FSBlance", width: 180, align: "left" }, { label: "审核标志", name: "F_CheckMark", width: 80, align: "left", formatter: function (cellvalue, rowObject) { return cellvalue == "1" ? "" : ""; diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index a1f415408..a3cab6af1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -1631,7 +1631,10 @@ + + + @@ -7976,6 +7979,9 @@ + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailService.cs index f63e46834..1c2684132 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrderDetail/FinaChargeStuOrderDetailService.cs @@ -45,6 +45,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); + if (!queryParam["FCSOId"].IsEmpty()) + { + dp.Add("FCSOId", queryParam["FCSOId"].ToString(), DbType.String); + strSql.Append(" AND t.FCSOId = @FCSOId "); + } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); } catch (Exception ex) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index abe5585a6..ca6db6e5e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -83,6 +83,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement dp.Add("F_CheckMark", queryParam["F_CheckMark"].ToString(), DbType.String); strSql.Append(" AND b.F_CheckMark = @F_CheckMark "); } + if (!queryParam["Teacher"].IsEmpty()) + { + var userinfo = LoginUserInfo.Get(); + strSql.Append(" and classno in(select classno from classinfo where ClassDiredctorNo='"+ userinfo.account+ "') "); + } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) @@ -107,7 +112,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return this.BaseRepository("CollegeMIS").FindEntity("select b.*,a.FSYear,a.YJAmount,a.SJAmount,a.FSBlance,a.PayFeeStatus from FinaChargeStuYear a left join FinaChargeStudent b on a.StuNo=b.StuNo where a.FSYId='"+keyValue+"'",null); + return this.BaseRepository("CollegeMIS").FindEntity("select b.*,a.FSYear,a.YJAmount,a.SJAmount,a.FSBlance,a.PayFeeStatus from FinaChargeStuYear a left join FinaChargeStudent b on a.StuNo=b.StuNo where a.FSYId='" + keyValue + "'", null); } catch (Exception ex) { @@ -131,7 +136,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return this.BaseRepository("CollegeMIS").FindList("select a.StuNo,b.* from FinaChargeStuYear a left join FinaChargeStuYearItem b on a.FSYId=b.FSYId where b.F_DeleteMark=0 and b.FSBlance<0 and a.FSYId='"+keyValue+"' order by ChargeItemCode"); + return this.BaseRepository("CollegeMIS").FindList("select a.StuNo,b.* from FinaChargeStuYear a left join FinaChargeStuYearItem b on a.FSYId=b.FSYId where b.F_DeleteMark=0 and b.FSBlance<0 and a.FSYId='" + keyValue + "' order by ChargeItemCode"); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs index 28c1b1d2f..8f0175372 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs @@ -87,6 +87,11 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    [Column("F_CREATEUSERNAME")] public string F_CreateUserName { get; set; } + /// + /// 退费标志 + /// + [Column("REFUNDSTATUS")] + public bool? RefundStatus { get; set; } #endregion #region 扩展操作 @@ -104,6 +109,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement FSBlance = 0; this.F_CreateUserId = userInfo.userId; this.F_CreateUserName = userInfo.realName; + RefundStatus = false; } /// /// 编辑调用 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index d93f24a2f..259050c5d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -76,6 +76,20 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement dp.Add("ChargeItemType", "" + queryParam["ChargeItemType"].ToString() + "", DbType.String); strSql.Append(" AND t.ChargeItemType = @ChargeItemType "); } + if (!queryParam["FSYId"].IsEmpty()) + { + dp.Add("FSYId", "" + queryParam["FSYId"].ToString() + "", DbType.String); + strSql.Append(" AND t.FSYId = @FSYId "); + } + if (!queryParam["RefundStatus"].IsEmpty()) + { + dp.Add("RefundStatus", "" + queryParam["RefundStatus"].ToString() + "", DbType.String); + strSql.Append(" AND t.RefundStatus = @RefundStatus "); + } + if (!queryParam["Refund"].IsEmpty()) + { + strSql.Append(" AND (t.FSBlance>0 or RefundStatus=1) "); + } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) From 04b91a947d75abfe535f5e8d412e6b85ed0e1abf Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Fri, 18 Aug 2023 18:11:00 +0800 Subject: [PATCH 26/50] =?UTF-8?q?=E9=80=80=E8=B4=B9=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/退费记录Controller.cs | 117 +++++++++++++ .../Views/退费记录/Form.cshtml | 31 ++++ .../Views/退费记录/Form.js | 52 ++++++ .../Views/退费记录/Index.cshtml | 44 +++++ .../Views/退费记录/Index.js | 110 ++++++++++++ .../Learun.Application.Web.csproj | 5 + .../Learun.Application.Mapping.csproj | 1 + .../FinaChargeRefundMap.cs | 29 ++++ .../Learun.Application.TwoDevelopment.csproj | 4 + .../退费记录/FinaChargeRefundEntity.cs | 99 +++++++++++ .../退费记录/退费记录BLL.cs | 125 +++++++++++++ .../退费记录/退费记录IBLL.cs | 48 +++++ .../退费记录/退费记录Service.cs | 164 ++++++++++++++++++ 13 files changed, 829 insertions(+) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/退费记录Controller.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeRefundMap.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/FinaChargeRefundEntity.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录BLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录IBLL.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录Service.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/退费记录Controller.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/退费记录Controller.cs new file mode 100644 index 000000000..eafa516d8 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/退费记录Controller.cs @@ -0,0 +1,117 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Web.Mvc; +using System.Collections.Generic; + +namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-18 18:07 + /// 描 述:FinaChargeRefund + /// + public class 退费记录Controller : MvcControllerBase + { + private 退费记录IBLL 退费记录IBLL = new 退费记录BLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = 退费记录IBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var FinaChargeRefundData = 退费记录IBLL.GetFinaChargeRefundEntity( keyValue ); + var jsonData = new { + FinaChargeRefund = FinaChargeRefundData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + 退费记录IBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + FinaChargeRefundEntity entity = strEntity.ToObject(); + 退费记录IBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.cshtml new file mode 100644 index 000000000..6b845a454 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.cshtml @@ -0,0 +1,31 @@ +@{ + ViewBag.Title = "FinaChargeRefund"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    收费项目编号
    + +
    +
    +
    收费项目名称
    + +
    +
    +
    收费项目类型
    +
    +
    +
    +
    退费金额
    + +
    +
    +
    备注
    + +
    +
    +
    退费方式
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js new file mode 100644 index 000000000..d84173133 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js @@ -0,0 +1,52 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-18 18:07 + * 描 述:FinaChargeRefund + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); + $('#RType').lrDataItemSelect({ code: 'RefundStatus' }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/SaveForm?keyValue=' + keyValue, postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.cshtml new file mode 100644 index 000000000..b7ac878d8 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.cshtml @@ -0,0 +1,44 @@ +@{ + ViewBag.Title = "FinaChargeRefund"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    收费项目编号
    + +
    +
    +
    收费项目名称
    + +
    +
    +
    退费方式
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js new file mode 100644 index 000000000..508b63922 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js @@ -0,0 +1,110 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-18 18:07 + * 描 述:FinaChargeRefund + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 220, 400); + $('#RType').lrDataItemSelect({ code: 'RefundStatus' }); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + // 新增 + $('#lr_add').on('click', function () { + learun.layerForm({ + id: 'form', + title: '新增', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/Form', + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + }); + // 编辑 + $('#lr_edit').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('Id'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'form', + title: '编辑', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/Form?keyValue=' + keyValue, + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + } + }); + // 删除 + $('#lr_delete').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('Id'); + if (learun.checkrow(keyValue)) { + learun.layerConfirm('是否确认删除该项!', function (res) { + if (res) { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/DeleteForm', { keyValue: keyValue}, function () { + refreshGirdData(); + }); + } + }); + } + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').lrAuthorizeJfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/GetPageList', + headData: [ + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, + { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left"}, + { label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + { label: "退费金额", name: "Amount", width: 100, align: "left"}, + { label: "退费方式", name: "RType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op,$cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'RefundStatus', + callback: function (_data) { + callback(_data.text); + } + }); + }}, + ], + mainId:'Id', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index a3cab6af1..90db1a22a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -892,6 +892,7 @@ + @@ -6673,6 +6674,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj index dd01ced0e..e9caeb1cd 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/Learun.Application.Mapping.csproj @@ -595,6 +595,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeRefundMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeRefundMap.cs new file mode 100644 index 000000000..fd77680aa --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeRefundMap.cs @@ -0,0 +1,29 @@ +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Data.Entity.ModelConfiguration; + +namespace Learun.Application.Mapping +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-18 18:07 + /// 描 述:FinaChargeRefund + /// + public class FinaChargeRefundMap : EntityTypeConfiguration + { + public FinaChargeRefundMap() + { + #region 表、主键 + //表 + this.ToTable("FINACHARGEREFUND"); + //主键 + this.HasKey(t => t.Id); + #endregion + + #region 配置关系 + #endregion + } + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index 3ef7346a6..68458d785 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1854,6 +1854,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/FinaChargeRefundEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/FinaChargeRefundEntity.cs new file mode 100644 index 000000000..b6ee1fabf --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/FinaChargeRefundEntity.cs @@ -0,0 +1,99 @@ +using Learun.Util; +using System; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-18 18:07 + /// 描 述:FinaChargeRefund + /// + public class FinaChargeRefundEntity + { + #region 实体成员 + /// + /// Id + /// + [Column("ID")] + public string Id { get; set; } + /// + /// FSYIId + /// + [Column("FSYIID")] + public string FSYIId { get; set; } + /// + /// ChargeItemCode + /// + [Column("CHARGEITEMCODE")] + public string ChargeItemCode { get; set; } + /// + /// ChargeItemName + /// + [Column("CHARGEITEMNAME")] + public string ChargeItemName { get; set; } + /// + /// ChargeItemType + /// + [Column("CHARGEITEMTYPE")] + public int? ChargeItemType { get; set; } + /// + /// Amount + /// + [Column("AMOUNT")] + public decimal? Amount { get; set; } + /// + /// Remark + /// + [Column("REMARK")] + public string Remark { get; set; } + /// + /// 退费方式(1现金,2转账,3支票) + /// + [Column("RTYPE")] + public int? RType { get; set; } + /// + /// 创建日期 + /// + [Column("F_CREATEDATE")] + public DateTime? F_CreateDate { get; set; } + /// + /// 创建用户主键 + /// + [Column("F_CREATEUSERID")] + public string F_CreateUserId { get; set; } + /// + /// 创建用户 + /// + [Column("F_CREATEUSERNAME")] + public string F_CreateUserName { get; set; } + #endregion + + #region 扩展操作 + /// + /// 新增调用 + /// + public void Create() + { + this.Id = Guid.NewGuid().ToString(); + this.F_CreateDate = DateTime.Now; + UserInfo userInfo = LoginUserInfo.Get(); + this.F_CreateUserId = userInfo.userId; + this.F_CreateUserName = userInfo.realName; + } + /// + /// 编辑调用 + /// + /// + public void Modify(string keyValue) + { + this.Id = keyValue; + } + #endregion + #region 扩展字段 + #endregion + } +} + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录BLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录BLL.cs new file mode 100644 index 000000000..ffc679b16 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录BLL.cs @@ -0,0 +1,125 @@ +using Learun.Util; +using System; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-18 18:07 + /// 描 述:FinaChargeRefund + /// + public class 退费记录BLL : 退费记录IBLL + { + private 退费记录Service 退费记录Service = new 退费记录Service(); + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + return 退费记录Service.GetPageList(pagination, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 获取FinaChargeRefund表实体数据 + /// + /// 主键 + /// + public FinaChargeRefundEntity GetFinaChargeRefundEntity(string keyValue) + { + try + { + return 退费记录Service.GetFinaChargeRefundEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + 退费记录Service.DeleteEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + public void SaveEntity(string keyValue, FinaChargeRefundEntity entity) + { + try + { + 退费记录Service.SaveEntity(keyValue, entity); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录IBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录IBLL.cs new file mode 100644 index 000000000..98ce86ec7 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录IBLL.cs @@ -0,0 +1,48 @@ +using Learun.Util; +using System.Data; +using System.Collections.Generic; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-18 18:07 + /// 描 述:FinaChargeRefund + /// + public interface 退费记录IBLL + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// + IEnumerable GetPageList(Pagination pagination, string queryJson); + /// + /// 获取FinaChargeRefund表实体数据 + /// + /// 主键 + /// + FinaChargeRefundEntity GetFinaChargeRefundEntity(string keyValue); + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + void DeleteEntity(string keyValue); + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + void SaveEntity(string keyValue, FinaChargeRefundEntity entity); + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录Service.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录Service.cs new file mode 100644 index 000000000..bbabdbd50 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录Service.cs @@ -0,0 +1,164 @@ +using Dapper; +using Learun.DataBase.Repository; +using Learun.Util; +using System; +using System.Collections.Generic; +using System.Data; +using System.Text; + +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-18 18:07 + /// 描 述:FinaChargeRefund + /// + public class 退费记录Service : RepositoryFactory + { + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) + { + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" + t.Id, + t.ChargeItemCode, + t.ChargeItemName, + t.ChargeItemType, + t.Amount, + t.RType + "); + strSql.Append(" FROM FinaChargeRefund t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + if (!queryParam["ChargeItemCode"].IsEmpty()) + { + dp.Add("ChargeItemCode", "%" + queryParam["ChargeItemCode"].ToString() + "%", DbType.String); + strSql.Append(" AND t.ChargeItemCode Like @ChargeItemCode "); + } + if (!queryParam["ChargeItemName"].IsEmpty()) + { + dp.Add("ChargeItemName", "%" + queryParam["ChargeItemName"].ToString() + "%", DbType.String); + strSql.Append(" AND t.ChargeItemName Like @ChargeItemName "); + } + if (!queryParam["RType"].IsEmpty()) + { + dp.Add("RType",queryParam["RType"].ToString(), DbType.String); + strSql.Append(" AND t.RType = @RType "); + } + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 获取FinaChargeRefund表实体数据 + /// + /// 主键 + /// + public FinaChargeRefundEntity GetFinaChargeRefundEntity(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + public void DeleteEntity(string keyValue) + { + try + { + this.BaseRepository("CollegeMIS").Delete(t=>t.Id == keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + public void SaveEntity(string keyValue, FinaChargeRefundEntity entity) + { + try + { + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + #endregion + + } +} From b187edc5615cea038be99a6f5d94437218e39fd4 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sat, 19 Aug 2023 18:08:48 +0800 Subject: [PATCH 27/50] =?UTF-8?q?=E9=80=80=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...oller.cs => FinaChargeRefundController.cs} | 24 ++-- .../Views/FinaChargeRefund/Form.cshtml | 18 +++ .../Views/FinaChargeRefund/Form.js | 105 ++++++++++++++++++ .../Index.cshtml | 2 +- .../Index.js | 8 +- .../Views/FinaChargeStuBalance/Index.js | 44 +++++--- .../FinaChargeStuYearItem/IndexForRefund.js | 6 +- .../Views/退费记录/Form.cshtml | 31 ------ .../Views/退费记录/Form.js | 52 --------- .../Learun.Application.Web.csproj | 10 +- .../Learun.Application.TwoDevelopment.csproj | 8 +- .../FinaChargeRefundBLL.cs} | 16 +-- .../FinaChargeRefundEntity.cs | 0 .../FinaChargeRefundIBLL.cs} | 4 +- .../FinaChargeRefundService.cs} | 74 +++++++++--- .../FinaChargeStuBalanceEntity.cs | 2 +- .../FinaChargeStuYearItemBLL.cs | 19 ++++ .../FinaChargeStuYearItemIBLL.cs | 1 + .../FinaChargeStuYearItemService.cs | 24 ++++ 19 files changed, 294 insertions(+), 154 deletions(-) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/{退费记录Controller.cs => FinaChargeRefundController.cs} (76%) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.js rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{退费记录 => FinaChargeRefund}/Index.cshtml (96%) rename Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/{退费记录 => FinaChargeRefund}/Index.js (95%) delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.cshtml delete mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{退费记录/退费记录BLL.cs => FinaChargeRefund/FinaChargeRefundBLL.cs} (84%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{退费记录 => FinaChargeRefund}/FinaChargeRefundEntity.cs (100%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{退费记录/退费记录IBLL.cs => FinaChargeRefund/FinaChargeRefundIBLL.cs} (91%) rename Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/{退费记录/退费记录Service.cs => FinaChargeRefund/FinaChargeRefundService.cs} (51%) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/退费记录Controller.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs similarity index 76% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/退费记录Controller.cs rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs index eafa516d8..aa690f6de 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/退费记录Controller.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs @@ -13,9 +13,10 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers /// 日 期:2023-08-18 18:07 /// 描 述:FinaChargeRefund ///
    - public class 退费记录Controller : MvcControllerBase + public class FinaChargeRefundController : MvcControllerBase { - private 退费记录IBLL 退费记录IBLL = new 退费记录BLL(); + private FinaChargeRefundIBLL FinaChargeRefundIBLL = new FinaChargeRefundBLL(); + private FinaChargeStuYearItemIBLL finaChargeStuYearItemIbll = new FinaChargeStuYearItemBLL(); #region 视图功能 @@ -52,7 +53,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult GetPageList(string pagination, string queryJson) { Pagination paginationobj = pagination.ToObject(); - var data = 退费记录IBLL.GetPageList(paginationobj, queryJson); + var data = FinaChargeRefundIBLL.GetPageList(paginationobj, queryJson); var jsonData = new { rows = data, @@ -71,9 +72,9 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult GetFormData(string keyValue) { - var FinaChargeRefundData = 退费记录IBLL.GetFinaChargeRefundEntity( keyValue ); + var FinaChargeRefundList = finaChargeStuYearItemIbll.GetFinaChargeRefundList( keyValue ); var jsonData = new { - FinaChargeRefund = FinaChargeRefundData, + FinaChargeRefundList = FinaChargeRefundList, }; return Success(jsonData); } @@ -90,25 +91,24 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult DeleteForm(string keyValue) { - 退费记录IBLL.DeleteEntity(keyValue); + FinaChargeRefundIBLL.DeleteEntity(keyValue); return Success("删除成功!"); } + /// /// 保存实体数据(新增、修改) /// - /// 主键 + /// FinaChargeRefundList /// 实体 /// [HttpPost] [ValidateAntiForgeryToken] [AjaxOnly] - public ActionResult SaveForm(string keyValue, string strEntity) + public ActionResult SaveForm(string FinaChargeRefundList,string strEntity) { + List list = FinaChargeRefundList.ToObject>(); FinaChargeRefundEntity entity = strEntity.ToObject(); - 退费记录IBLL.SaveEntity(keyValue,entity); - if (string.IsNullOrEmpty(keyValue)) - { - } + FinaChargeRefundIBLL.SaveEntity(list, entity); return Success("保存成功!"); } #endregion diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.cshtml new file mode 100644 index 000000000..156cad967 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.cshtml @@ -0,0 +1,18 @@ +@{ + ViewBag.Title = "FinaChargeRefund"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    +
    +
    +
    备注
    + +
    +
    +
    退费方式
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.js new file mode 100644 index 000000000..cba8b0b2d --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Form.js @@ -0,0 +1,105 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-18 18:07 + * 描 述:FinaChargeRefund + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); + $('#RType').lrDataItemSelect({ code: 'RType' }); + $('#FinaChargeRefundList').jfGrid({ + headData: [ + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "缴费年度", name: "FSYear", width: 80, align: "left" }, + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, + { label: "收费项名称", name: "ChargeItemName", width: 100, align: "left" }, + { + label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + { label: "收费标准", name: "Standard", width: 80, align: "left" }, + { label: "实缴金额", name: "SJAmount", width: 80, align: "left" }, + { label: "应退费金额", name: "FSBlance", width: 80, align: "left" }, + ], + height: 400, + mainId: 'FSYIId' + }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + // 保存数据 + acceptClick = function (callBack) { + if (!$('body').lrValidform()) { + return false; + } + var postData = { + FinaChargeRefundList: JSON.stringify($('#FinaChargeRefundList').jfGridGet("rowdatas")), + strEntity: JSON.stringify($('body').lrGetFormData()) + }; + $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/SaveForm', postData, function (res) { + // 保存成功后才回调 + if (!!callBack) { + callBack(); + } + }); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml similarity index 96% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.cshtml rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml index b7ac878d8..a8749cedc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml @@ -41,4 +41,4 @@ -@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js") +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js similarity index 95% rename from Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js rename to Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js index 508b63922..6bc1f04ca 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js @@ -26,7 +26,7 @@ var bootstrap = function ($, learun) { learun.layerForm({ id: 'form', title: '新增', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/Form', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/Form', width: 600, height: 400, callBack: function (id) { @@ -41,7 +41,7 @@ var bootstrap = function ($, learun) { learun.layerForm({ id: 'form', title: '编辑', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/Form?keyValue=' + keyValue, + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/Form?keyValue=' + keyValue, width: 600, height: 400, callBack: function (id) { @@ -56,7 +56,7 @@ var bootstrap = function ($, learun) { if (learun.checkrow(keyValue)) { learun.layerConfirm('是否确认删除该项!', function (res) { if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/DeleteForm', { keyValue: keyValue}, function () { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/DeleteForm', { keyValue: keyValue}, function () { refreshGirdData(); }); } @@ -67,7 +67,7 @@ var bootstrap = function ($, learun) { // 初始化列表 initGird: function () { $('#gridtable').lrAuthorizeJfGrid({ - url: top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/GetPageList', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/GetPageList', headData: [ { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left"}, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js index f1d22cfb8..a6123d2ef 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js @@ -15,7 +15,7 @@ var bootstrap = function ($, learun) { page.bind(); }, bind: function () { - $("#ChangeType").lrDataItemSelect({ code:'ChangeType'}); + $("#ChangeType").lrDataItemSelect({ code: 'ChangeType' }); // 时间搜索框 $('#datesearch').lrdate({ dfdata: [ @@ -56,38 +56,46 @@ var bootstrap = function ($, learun) { $('#gridtable').lrAuthorizeJfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuBalance/GetPageList', headData: [ - { label: "学号", name: "StuNo", width: 100, align: "left"}, - { label: "缴费年度", name: "FSYear", width: 100, align: "left"}, - { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, - { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left"}, - { label: "收费标准", name: "Standard", width: 100, align: "left"}, - { label: "本次待缴金额", name: "DJAmount", width: 100, align: "left"}, - { label: "变动金额", name: "PaymentAmount", width: 100, align: "left"}, - { label: "剩余待缴金额", name: "QJAmount", width: 100, align: "left"}, - { label: "当前余额", name: "OldBalance", width: 100, align: "left"}, - { label: "本次变动金额", name: "ChangeAmount", width: 100, align: "left"}, - { label: "本次余额", name: "NowBalance", width: 100, align: "left"}, - { label: "变动时间", name: "ChangeDate", width: 100, align: "left"}, + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, + { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left" }, + { label: "收费标准", name: "Standard", width: 100, align: "left" }, + { label: "本次待缴金额", name: "DJAmount", width: 100, align: "left" }, + { label: "变动金额", name: "PaymentAmount", width: 100, align: "left" }, + { label: "剩余待缴金额", name: "QJAmount", width: 100, align: "left" }, + { label: "当前余额", name: "OldBalance", width: 100, align: "left" }, + { label: "本次变动金额", name: "ChangeAmount", width: 100, align: "left" }, + { label: "本次余额", name: "NowBalance", width: 100, align: "left" }, + { label: "变动时间", name: "ChangeDate", width: 150, align: "left" }, { label: "变动原因", name: "ChangeType", width: 100, align: "left", formatter: function (cellvalue, row) { if (cellvalue === 1) { return '二维码缴费'; } else if (cellvalue === 2) { - return '已缴费'; + return '导入贷款'; } else if (cellvalue === 3) { + return '导入现金'; + } else if (cellvalue === 4) { return '退费'; + } else if (cellvalue === 5) { + return '自动分配扣减'; + } else if (cellvalue === 6) { + return '自动分配增加'; } - }}, + } + }, ], - mainId:'Id', - isPage: true + mainId: 'Id', + isPage: true, + sidx:'ChangeDate' }); }, search: function (param) { param = param || {}; param.StartTime = startTime; param.EndTime = endTime; - $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); } }; refreshGirdData = function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js index 46c2535bb..1b3db4124 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js @@ -49,9 +49,9 @@ var bootstrap = function ($, learun) { learun.layerForm({ id: 'formrefund', title: '退费', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeItem/Form', - width: 600, - height: 400, + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/Form?keyValue=' + keyValue, + width: 1200, + height: 700, callBack: function (id) { return top[id].acceptClick(refreshGirdData); } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.cshtml deleted file mode 100644 index 6b845a454..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.cshtml +++ /dev/null @@ -1,31 +0,0 @@ -@{ - ViewBag.Title = "FinaChargeRefund"; - Layout = "~/Views/Shared/_Form.cshtml"; -} -
    -
    -
    收费项目编号
    - -
    -
    -
    收费项目名称
    - -
    -
    -
    收费项目类型
    -
    -
    -
    -
    退费金额
    - -
    -
    -
    备注
    - -
    -
    -
    退费方式
    -
    -
    -
    -@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js deleted file mode 100644 index d84173133..000000000 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/退费记录/Form.js +++ /dev/null @@ -1,52 +0,0 @@ -/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) - * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 - * 创建人:超级管理员 - * 日 期:2023-08-18 18:07 - * 描 述:FinaChargeRefund - */ -var acceptClick; -var keyValue = request('keyValue'); -var bootstrap = function ($, learun) { - "use strict"; - var page = { - init: function () { - $('.lr-form-wrap').lrscroll(); - page.bind(); - page.initData(); - }, - bind: function () { - $('#ChargeItemType').lrDataItemSelect({ code: 'ChargeItemType' }); - $('#RType').lrDataItemSelect({ code: 'RefundStatus' }); - }, - initData: function () { - if (!!keyValue) { - $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/GetFormData?keyValue=' + keyValue, function (data) { - for (var id in data) { - if (!!data[id].length && data[id].length > 0) { - $('#' + id ).jfGridSet('refreshdata', data[id]); - } - else { - $('[data-table="' + id + '"]').lrSetFormData(data[id]); - } - } - }); - } - } - }; - // 保存数据 - acceptClick = function (callBack) { - if (!$('body').lrValidform()) { - return false; - } - var postData = { - strEntity: JSON.stringify($('body').lrGetFormData()) - }; - $.lrSaveForm(top.$.rootUrl + '/ReceiveSendFeeManagement/退费记录/SaveForm?keyValue=' + keyValue, postData, function (res) { - // 保存成功后才回调 - if (!!callBack) { - callBack(); - } - }); - }; - page.init(); -} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index 90db1a22a..af0e0eca3 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -892,7 +892,7 @@ - + @@ -6674,10 +6674,10 @@ - - - - + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj index 68458d785..dc869b3df 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/Learun.Application.TwoDevelopment.csproj @@ -1854,10 +1854,10 @@ - - - - + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录BLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundBLL.cs similarity index 84% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录BLL.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundBLL.cs index ffc679b16..24eaac3ea 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录BLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundBLL.cs @@ -12,9 +12,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-18 18:07 /// 描 述:FinaChargeRefund ///
    - public class 退费记录BLL : 退费记录IBLL + public class FinaChargeRefundBLL : FinaChargeRefundIBLL { - private 退费记录Service 退费记录Service = new 退费记录Service(); + private FinaChargeRefundService FinaChargeRefundService = new FinaChargeRefundService(); #region 获取数据 @@ -28,7 +28,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return 退费记录Service.GetPageList(pagination, queryJson); + return FinaChargeRefundService.GetPageList(pagination, queryJson); } catch (Exception ex) { @@ -52,7 +52,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return 退费记录Service.GetFinaChargeRefundEntity(keyValue); + return FinaChargeRefundService.GetFinaChargeRefundEntity(keyValue); } catch (Exception ex) { @@ -79,7 +79,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - 退费记录Service.DeleteEntity(keyValue); + FinaChargeRefundService.DeleteEntity(keyValue); } catch (Exception ex) { @@ -93,18 +93,18 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } - + /// /// 保存实体数据(新增、修改) /// /// 主键 /// 实体 /// - public void SaveEntity(string keyValue, FinaChargeRefundEntity entity) + public void SaveEntity(List list, FinaChargeRefundEntity entity) { try { - 退费记录Service.SaveEntity(keyValue, entity); + FinaChargeRefundService.SaveEntity(list, entity); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/FinaChargeRefundEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundEntity.cs similarity index 100% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/FinaChargeRefundEntity.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundEntity.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录IBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundIBLL.cs similarity index 91% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录IBLL.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundIBLL.cs index 98ce86ec7..ccf173723 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录IBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundIBLL.cs @@ -11,7 +11,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-18 18:07 /// 描 述:FinaChargeRefund ///
    - public interface 退费记录IBLL + public interface FinaChargeRefundIBLL { #region 获取数据 @@ -41,7 +41,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    /// 主键 /// 实体 - void SaveEntity(string keyValue, FinaChargeRefundEntity entity); + void SaveEntity(List list, FinaChargeRefundEntity entity); #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录Service.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs similarity index 51% rename from Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录Service.cs rename to Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs index bbabdbd50..80411cd5f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/退费记录/退费记录Service.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs @@ -15,7 +15,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 日 期:2023-08-18 18:07 /// 描 述:FinaChargeRefund ///
    - public class 退费记录Service : RepositoryFactory + public class FinaChargeRefundService : RepositoryFactory { #region 获取数据 @@ -56,10 +56,10 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } if (!queryParam["RType"].IsEmpty()) { - dp.Add("RType",queryParam["RType"].ToString(), DbType.String); + dp.Add("RType", queryParam["RType"].ToString(), DbType.String); strSql.Append(" AND t.RType = @RType "); } - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) { @@ -110,7 +110,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - this.BaseRepository("CollegeMIS").Delete(t=>t.Id == keyValue); + this.BaseRepository("CollegeMIS").Delete(t => t.Id == keyValue); } catch (Exception ex) { @@ -130,19 +130,67 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    /// 主键 /// 实体 - public void SaveEntity(string keyValue, FinaChargeRefundEntity entity) + public void SaveEntity(List list, FinaChargeRefundEntity entity) { try { - if (!string.IsNullOrEmpty(keyValue)) + foreach (var finaChargeStuYearItemEntity in list) { - entity.Modify(keyValue); - this.BaseRepository("CollegeMIS").Update(entity); - } - else - { - entity.Create(); - this.BaseRepository("CollegeMIS").Insert(entity); + var db = BaseRepository("CollegeMIS").BeginTrans(); + try + { + var finaChargeRefundEntity = new FinaChargeRefundEntity(); + finaChargeRefundEntity.Create(); + finaChargeRefundEntity.Remark = entity.Remark; + finaChargeRefundEntity.RType = entity.RType; + finaChargeRefundEntity.FSYIId = finaChargeStuYearItemEntity.FSYIId; + finaChargeRefundEntity.ChargeItemCode = finaChargeStuYearItemEntity.ChargeItemCode; + finaChargeRefundEntity.ChargeItemName = finaChargeStuYearItemEntity.ChargeItemName; + finaChargeRefundEntity.ChargeItemType = finaChargeStuYearItemEntity.ChargeItemType; + finaChargeRefundEntity.Amount = finaChargeStuYearItemEntity.FSBlance; + db.Insert(finaChargeRefundEntity); + //退费状态修改,余额归零 + finaChargeStuYearItemEntity.RefundStatus = true; + finaChargeStuYearItemEntity.FSBlance = 0; + //退费后实缴值也要更新 + finaChargeStuYearItemEntity.SJAmount = finaChargeStuYearItemEntity.SJAmount- finaChargeRefundEntity.Amount; + db.Update(finaChargeStuYearItemEntity); + //FinaChargeStuYear年度余额计算 + db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount-"+ finaChargeRefundEntity.Amount + ",FSBlance=FSBlance-" + finaChargeRefundEntity.Amount + " where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + //学生余额扣减 + db.ExecuteBySql("update FinaChargeStudent set FSBlance=FSBlance-" + finaChargeRefundEntity.Amount + " where StuNo='" + finaChargeStuYearItemEntity.StuNo + "'"); + //交易流水记录 + var finaChargeStuBalance=new FinaChargeStuBalanceEntity(); + finaChargeStuBalance.Create(); + finaChargeStuBalance.StuNo = finaChargeStuYearItemEntity.StuNo; + finaChargeStuBalance.FSYear = finaChargeStuYearItemEntity.FSYear; + finaChargeStuBalance.FCSOId = finaChargeRefundEntity.Id; + finaChargeStuBalance.ChargeItemCode = finaChargeRefundEntity.ChargeItemCode; + finaChargeStuBalance.ChargeItemName = finaChargeRefundEntity.ChargeItemName; + finaChargeStuBalance.Standard = finaChargeStuYearItemEntity.Standard; + finaChargeStuBalance.DJAmount = 0; + finaChargeStuBalance.PaymentAmount = -finaChargeRefundEntity.Amount; + finaChargeStuBalance.QJAmount = 0; + finaChargeStuBalance.OldBalance = finaChargeRefundEntity.Amount; + finaChargeStuBalance.ChangeAmount = finaChargeStuBalance.PaymentAmount; + finaChargeStuBalance.NowBalance = 0; + finaChargeStuBalance.ChangeDate = DateTime.Now; + finaChargeStuBalance.ChangeType = 4; + db.Insert(finaChargeStuBalance); + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } } } catch (Exception ex) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs index 5260cb8ba..32f2ccfe4 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs @@ -85,7 +85,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("CHANGEDATE")] public DateTime? ChangeDate { get; set; } /// - /// 变动原因(1二维码缴费,2导入缴费,3退费) + /// 变动原因(1二维码缴费,2导入贷款,3导入现金,4退费,5自动分配扣减,6自动分配增加) /// [Column("CHANGETYPE")] public int? ChangeType { get; set; } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs index 551006a22..b40f5fb63 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemBLL.cs @@ -157,6 +157,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public IEnumerable GetFinaChargeRefundList(string keyValue) + { + try + { + return FinaChargeStuYearItemService.GetFinaChargeRefundList(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs index 321a29c2f..3e7d8a343 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemIBLL.cs @@ -46,5 +46,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement void UnDeleteEntity(string keyValue); string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson); + IEnumerable GetFinaChargeRefundList(string keyValue); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index 259050c5d..1ba14adcf 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -406,5 +406,29 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } + + public IEnumerable GetFinaChargeRefundList(string keyValue) + { + try + { + List keys = keyValue.Split(',').ToList().Select(m=>"'"+m.Clone().ToString()+"'").ToList(); + var strSql = new StringBuilder(); + strSql.Append("SELECT t.*,b.StuNo,b.StuName,b.MajorNo,b.ClassNo,b.DeptNo,b.IdentityCardNo "); + strSql.Append(" FROM FinaChargeStuYearItem t left join FinaChargeStuYear a on t.FSYId=a.FSYId left join FinaChargeStudent b on a.StuNo=b.StuNo "); + strSql.Append(" WHERE 1=1 and b.F_CheckMark=1 and t.FSBlance>0 and t.FSYIId in(" + string.Join(",", keys)+")"); + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString()); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } From 2554e34a738d2ab40bc4d20112c530447acb2cff Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sat, 19 Aug 2023 18:25:57 +0800 Subject: [PATCH 28/50] =?UTF-8?q?=E9=80=80=E8=B4=B9=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Views/FinaChargeRefund/Index.cshtml | 16 +++- .../Views/FinaChargeRefund/Index.js | 90 +++++++++++++------ .../FinaChargeRefundEntity.cs | 11 +++ .../FinaChargeRefundService.cs | 23 ++--- 4 files changed, 98 insertions(+), 42 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml index a8749cedc..1205fe05a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml @@ -11,12 +11,20 @@
    -
    收费项目编号
    - +
    学号
    +
    -
    收费项目名称
    - +
    姓名
    + +
    +
    +
    项目编号
    + +
    +
    +
    项目名称
    +
    退费方式
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js index 6bc1f04ca..06b371226 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js @@ -16,7 +16,7 @@ var bootstrap = function ($, learun) { $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { page.search(queryJson); }, 220, 400); - $('#RType').lrDataItemSelect({ code: 'RefundStatus' }); + $('#RType').lrDataItemSelect({ code: 'RType' }); // 刷新 $('#lr_refresh').on('click', function () { location.reload(); @@ -56,7 +56,7 @@ var bootstrap = function ($, learun) { if (learun.checkrow(keyValue)) { learun.layerConfirm('是否确认删除该项!', function (res) { if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/DeleteForm', { keyValue: keyValue}, function () { + learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/DeleteForm', { keyValue: keyValue }, function () { refreshGirdData(); }); } @@ -66,41 +66,75 @@ var bootstrap = function ($, learun) { }, // 初始化列表 initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ + $('#gridtable').jfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/GetPageList', headData: [ - { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, - { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left"}, - { label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('dataItem', { - key: value, - code: 'ChargeItemType', - callback: function (_data) { - callback(_data.text); - } - }); - }}, - { label: "退费金额", name: "Amount", width: 100, align: "left"}, - { label: "退费方式", name: "RType", width: 100, align: "left", - formatterAsync: function (callback, value, row, op,$cell) { - learun.clientdata.getAsync('dataItem', { - key: value, - code: 'RefundStatus', - callback: function (_data) { - callback(_data.text); - } - }); - }}, + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, + { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, + { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left" }, + { + label: "收费项目类型", name: "ChargeItemType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'ChargeItemType', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + { label: "退费金额", name: "Amount", width: 100, align: "left" }, + { label: "退费时间", name: "F_CreateDate", width: 150, align: "left" }, + { + label: "退费方式", name: "RType", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'RType', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, ], - mainId:'Id', + mainId: 'Id', isPage: true }); page.search(); }, search: function (param) { param = param || {}; - $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); } }; refreshGirdData = function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundEntity.cs index b6ee1fabf..72eaa8e3f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundEntity.cs @@ -69,6 +69,17 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    [Column("F_CREATEUSERNAME")] public string F_CreateUserName { get; set; } + + [NotMapped] + public string StuNo { get; set; } + [NotMapped] + public string StuName { get; set; } + [NotMapped] + public string MajorNo { get; set; } + [NotMapped] + public string ClassNo { get; set; } + [NotMapped] + public string FSYear { get; set; } #endregion #region 扩展操作 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs index 80411cd5f..caabd62ae 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs @@ -30,16 +30,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(@" - t.Id, - t.ChargeItemCode, - t.ChargeItemName, - t.ChargeItemType, - t.Amount, - t.RType - "); - strSql.Append(" FROM FinaChargeRefund t "); + strSql.Append("SELECT t.*,d.StuNo,d.StuName,d.MajorNo,d.ClassNo,b.FSYear "); + strSql.Append(" FROM FinaChargeRefund t left join FinaChargeStuYearItem b on t.FSYIId=b.FSYIId left join FinaChargeStuYear c on b.FSYId=c.FSYId "); + strSql.Append(" left join FinaChargeStudent d on c.StuNo=d.StuNo "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 @@ -54,6 +47,16 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement dp.Add("ChargeItemName", "%" + queryParam["ChargeItemName"].ToString() + "%", DbType.String); strSql.Append(" AND t.ChargeItemName Like @ChargeItemName "); } + if (!queryParam["StuNo"].IsEmpty()) + { + dp.Add("StuNo", "%" + queryParam["StuNo"].ToString() + "%", DbType.String); + strSql.Append(" AND d.StuNo Like @StuNo "); + } + if (!queryParam["StuName"].IsEmpty()) + { + dp.Add("StuName", "%" + queryParam["StuName"].ToString() + "%", DbType.String); + strSql.Append(" AND d.StuName Like @StuName "); + } if (!queryParam["RType"].IsEmpty()) { dp.Add("RType", queryParam["RType"].ToString(), DbType.String); From 168060bd623ae05136ad4f4c39295ee93ea0963a Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sat, 19 Aug 2023 18:30:10 +0800 Subject: [PATCH 29/50] =?UTF-8?q?=E9=80=80=E8=B4=B9=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/FinaChargeRefundController.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs index aa690f6de..03e2b9a9a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs @@ -3,6 +3,7 @@ using System.Data; using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; using System.Web.Mvc; using System.Collections.Generic; +using Learun.Util.Operat; namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { @@ -109,7 +110,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers List list = FinaChargeRefundList.ToObject>(); FinaChargeRefundEntity entity = strEntity.ToObject(); FinaChargeRefundIBLL.SaveEntity(list, entity); - return Success("保存成功!"); + return Success_FinaCharge("操作成功!","退费管理",OperationType.Update,"", FinaChargeRefundList); } #endregion From b0a9717126814fd7cb9c02302e55fc71443a3a16 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sat, 19 Aug 2023 23:56:35 +0800 Subject: [PATCH 30/50] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=BA=BF=E4=B8=8B?= =?UTF-8?q?=E7=BC=B4=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuOrderController.cs | 39 +++ .../Views/FinaChargeStuBalance/Index.cshtml | 4 +- .../Views/FinaChargeStuBalance/Index.js | 5 +- .../Views/FinaChargeStuOrder/Import.cshtml | 26 ++ .../Views/FinaChargeStuOrder/Import.js | 175 +++++++++++++ .../Views/FinaChargeStuOrder/Index.js | 14 +- .../Content/excel/线下缴费记录.xls | Bin 0 -> 23552 bytes .../Learun.Application.Web.csproj | 3 + .../FinaChargeStuBalanceService.cs | 22 +- .../FinaChargeStuOrderBLL.cs | 19 ++ .../FinaChargeStuOrderIBLL.cs | 1 + .../FinaChargeStuOrderService.cs | 246 +++++++++++++++++- .../FinaChargeStuYearItemService.cs | 1 + 13 files changed, 530 insertions(+), 25 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/线下缴费记录.xls diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderController.cs index 1f5b0a004..cd1829891 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuOrderController.cs @@ -3,6 +3,8 @@ using System.Data; using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; using System.Web.Mvc; using System.Collections.Generic; +using Learun.Application.Base.SystemModule; +using Learun.Util.Operat; namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { @@ -16,6 +18,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public class FinaChargeStuOrderController : MvcControllerBase { private FinaChargeStuOrderIBLL finaChargeStuOrderIBLL = new FinaChargeStuOrderBLL(); + private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL(); #region 视图功能 @@ -37,6 +40,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { return View(); } + + [HttpGet] + public ActionResult Import() + { + return View(); + } #endregion #region 获取数据 @@ -111,6 +120,36 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers } return Success("保存成功!"); } + + /// + /// 导入 + /// + /// + /// + /// + /// + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult ExecuteImportExcel(string fileGuid, int chunks, string queryJson) + { + string path = annexesFileIBLL.SaveAnnexes(fileGuid, fileGuid, chunks, LoginUserInfo.Get()); + if (!string.IsNullOrEmpty(path)) + { + DataTable dt = ExcelHelper.ExcelImport(path); + string res = finaChargeStuOrderIBLL.ExecuteImportExcel(dt, fileGuid, queryJson); + var data = new + { + Success = res.Split('|')[0], + Fail = res.Split('|')[1] + }; + Success_FinaCharge("导入成功!", "缴费订单管理", OperationType.Create, "", "导入线下缴费记录成功:" + res.Split('|')[0] + "条,失败:" + res.Split('|')[1] + "条"); + return JsonResult(data); + } + else + { + return Fail("导入数据失败!"); + } + } #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.cshtml index c506e3c84..517bf9fdc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.cshtml @@ -2,7 +2,7 @@ ViewBag.Title = "费用变更明细"; Layout = "~/Views/Shared/_Index.cshtml"; } -
    +
    @@ -28,7 +28,7 @@
    变动原因
    -
    +
    diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js index a6123d2ef..5a719781a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js @@ -15,7 +15,6 @@ var bootstrap = function ($, learun) { page.bind(); }, bind: function () { - $("#ChangeType").lrDataItemSelect({ code: 'ChangeType' }); // 时间搜索框 $('#datesearch').lrdate({ dfdata: [ @@ -46,6 +45,8 @@ var bootstrap = function ($, learun) { $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { page.search(queryJson); }, 220, 400); + $("#ChangeType").lrDataItemSelect({ code: 'ChangeType' }); + // 刷新 $('#lr_refresh').on('click', function () { location.reload(); @@ -53,7 +54,7 @@ var bootstrap = function ($, learun) { }, // 初始化列表 initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ + $('#gridtable').jfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuBalance/GetPageList', headData: [ { label: "学号", name: "StuNo", width: 100, align: "left" }, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.cshtml new file mode 100644 index 000000000..f75886794 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.cshtml @@ -0,0 +1,26 @@ +@{ + ViewBag.Title = "Form"; + Layout = "~/Views/Shared/_Form.cshtml"; +} + + +@Html.AppendCssFile("/Areas/LR_SystemModule/Views/ExcelImport/ImportForm.css") + +
    +
    +
    上传文件
    +
    下载模板
    +
    +
    +
    +
    + +
    +
    +

    试试将电脑里的文件拖拽到此上传

    +
    +
    +
    +
    + +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.js new file mode 100644 index 000000000..fcb9330fd --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Import.js @@ -0,0 +1,175 @@ +/* + * 描 述:附件上传管理 + */ +var gridId = request('gridtable'); +var bootstrap = function ($, learun) { + "use strict"; + + var fileInfo = {}; + + // 触发合并文件碎片 + var mergeFileChunks = function (file) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileGuid'] = fileInfo[file.id].fileGuid; + param['fileName'] = fileInfo[file.id].name; + param['chunks'] = fileInfo[file.id].chunks; + var queryJson = JSON.stringify(learun.frameTab.currentIframe().queryJson); + + param['queryJson'] = queryJson; + learun.httpAsyncPost(top.$.rootUrl + "/ReceiveSendFeeManagement/FinaChargeStuOrder/ExecuteImportExcel", param, function (res) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress').remove(); + + if (res.code == learun.httpCode.success) { + if (res.data.Success != '0') { + learun.alert.success('导入成功' + res.data.Success + '条'); + } + // 文件保存成功后 + $fileItem.append('
    ' + res.data.Success + '/' + res.data.Fail + '
    '); + // 如果有失败 + if (res.data.Fail != '0') { + learun.download({ url: top.$.rootUrl + '/LR_SystemModule/ExcelImport/DownImportErrorFile', param: { fileId: fileInfo[file.id].fileGuid, fileName: fileInfo[file.id].name, __RequestVerificationToken: $.lrToken }, method: 'POST' }); + } + + } + else { + learun.alert.error(res.info); + $fileItem.append('
    '); + } + }); + } + // 触发清楚文件碎片 + var reomveFileChunks = function (file) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileGuid'] = fileInfo[file.id].fileGuid; + param['chunks'] = fileInfo[file.id].chunks; + learun.httpAsyncPost(top.$.rootUrl + "/LR_SystemModule/Annexes/MergeAnnexesFile", param, function (res) { }); + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress').remove(); + $fileItem.append('
    '); + } + // 删除文件 + var DeleteFile = function (fileId) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileId'] = fileInfo[fileId].fileGuid; + learun.httpAsyncPost(top.$.rootUrl + "/LR_SystemModule/Annexes/DeleteAnnexesFile", param, function (res) { }); + var file = page.uploader.getFile(fileId); + if (!!file) { + page.uploader.removeFile(file); + } + delete fileInfo[fileId]; + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + fileId); + $fileItem.remove(); + if ($('#lr_form_file_queue_list>div').length == 0) { + $('#lr_form_file_queue .lr-form-file-queue-bg').show(); + } + } + + var page = { + uploader: null, + init: function () { + if (!WebUploader.Uploader.support()) { + alert('Web Uploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器'); + throw new Error('WebUploader does not support the browser you are using.'); + } + /*导入模板下载*/ + $('#lr_down_file_btn').on('click', function () { + learun.download({ + method: "get", + url: '/Content/excel/线下缴费记录.xls' + }); + }); + + page.uploader = WebUploader.create({ + auto: true, + swf: top.$.rootUrl + '/Content/webuploader/Uploader.swf', + // 文件接收服务端。 + server: top.$.rootUrl + "/LR_SystemModule/Annexes/UploadAnnexesFileChunk", + // 选择文件的按钮。可选。 + // 内部根据当前运行是创建,可能是input元素,也可能是flash. + pick: '#lr_add_file_btn', + dnd: '#lr_form_file_queue', + paste: 'document.body', + disableGlobalDnd: true, + accept: { + extensions: "xls,xlsx" + }, + multiple: false, + // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! + resize: false, + // 文件分片上传 + chunked: true, + chunkRetry: 3, + prepareNextFile: true, + chunkSize: '1048576', + // 上传参数 + formData: { + __RequestVerificationToken: $.lrToken + } + }); + page.uploader.on('fileQueued', page.fileQueued); + page.uploader.on('uploadStart', page.uploadStart); + page.uploader.on('uploadBeforeSend', page.uploadBeforeSend); + page.uploader.on('uploadProgress', page.uploadProgress); + page.uploader.on('uploadSuccess', page.uploadSuccess); + page.uploader.on('uploadError', page.uploadError); + page.uploader.on('uploadComplete', page.uploadComplete); + page.uploader.on('error', page.error); + + + //$('#lr_form_file_queue').mCustomScrollbar({ // 优化滚动条 + // theme: "minimal-dark" + //}); + + }, + fileQueued: function (file) {// 文件加载到队列 + fileInfo[file.id] = { name: file.name }; + $('#lr_form_file_queue .lr-form-file-queue-bg').hide(); + // 添加一条文件记录 + var $item = $('
    '); + $item.append('
    '); + $item.append('' + file.name + '(' + learun.countFileSize(file.size) + ')'); + + $('#lr_form_file_queue_list').append($item); + }, + uploadStart: function (file) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.append('
    '); + }, + uploadBeforeSend: function (object, data, headers) { + data.chunk = data.chunk || 0; + data.chunks = data.chunks || 1; + fileInfo[data.id].fileGuid = fileInfo[data.id].fileGuid || WebUploader.Base.guid(); + data.fileGuid = fileInfo[data.id].fileGuid; + fileInfo[data.id].chunks = data.chunks; + }, + uploadProgress: function (file, percentage) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress-bar').css('width', (percentage * 100 + '%')); + }, + uploadSuccess: function (file, res) { + if (res.code == 200) {// 上传成功 + mergeFileChunks(file); + } + else {// 上传失败 + reomveFileChunks(file); + } + }, + uploadError: function (file, code) { + reomveFileChunks(file); + }, + uploadComplete: function (file) { + }, + error: function (type) { + switch (type) { + case 'Q_TYPE_DENIED': + learun.alert.error('当前文件类型不允许上传'); + break; + }; + } + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js index b773dda8a..322e84bf5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js @@ -52,8 +52,20 @@ var bootstrap = function ($, learun) { $('#lr_refresh').on('click', function () { location.reload(); }); - //  导入 + // 导入 $('#lr_import').on('click', function () { + learun.layerForm({ + id: 'indexImport', + title: "导入线下缴费记录", + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrder/Import', + width: 600, + height: 400, + maxmin: true, + btn: null, + end: function () { + refreshGirdData(); + } + }); }); //明细 $('#lr_detail').on('click', function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/线下缴费记录.xls b/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/线下缴费记录.xls new file mode 100644 index 0000000000000000000000000000000000000000..d8cec16f6f93bed6eb25251c0f65f944cbe90811 GIT binary patch literal 23552 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 literal 0 HcmV?d00001 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index af0e0eca3..51a81ebc9 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -1631,6 +1631,7 @@ + @@ -7987,6 +7988,8 @@ + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs index ecd62c8ad..f3144c848 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs @@ -30,23 +30,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(@" - t.Id, - t.StuNo, - t.FSYear, - t.ChargeItemCode, - t.ChargeItemName, - t.Standard, - t.DJAmount, - t.PaymentAmount, - t.QJAmount, - t.OldBalance, - t.ChangeAmount, - t.NowBalance, - t.ChangeDate, - t.ChangeType - "); + strSql.Append("SELECT * "); strSql.Append(" FROM FinaChargeStuBalance t "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); @@ -75,8 +59,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } if (!queryParam["ChangeType"].IsEmpty()) { - dp.Add("ChangeType", "%" + queryParam["ChangeType"].ToString() + "%", DbType.String); - strSql.Append(" AND t.ChangeType Like @ChangeType "); + dp.Add("ChangeType", "" + queryParam["ChangeType"].ToString() + "", DbType.String); + strSql.Append(" AND t.ChangeType =@ChangeType "); } return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderBLL.cs index 148f651b0..9552bd2e0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderBLL.cs @@ -138,6 +138,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) + { + try + { + return finaChargeStuOrderService.ExecuteImportExcel(dt, fileGuid, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderIBLL.cs index 9070d914e..2bf76e7da 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderIBLL.cs @@ -45,5 +45,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion void SaveOrderData(FinaChargeStuYearEntity entity, List list); + string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs index 408989bd9..46a5da81a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -6,6 +6,9 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; +using Learun.Application.Base.SystemModule; +using Learun.Cache.Base; +using Learun.Cache.Factory; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { @@ -18,6 +21,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    public class FinaChargeStuOrderService : RepositoryFactory { + private ICache cache = CacheFactory.CaChe(); + private string cacheKey = "Learun_adms_excelError_"; + private DataItemService datarItemService = new DataItemService(); #region 获取数据 /// @@ -211,7 +217,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement order.YJAmount = list.Sum(x => x.YJAmount); order.SJAmount = list.Sum(x => x.SJAmount); order.DJAmount = order.YJAmount - order.SJAmount; - if (order.DJAmount<0) + if (order.DJAmount < 0) { order.NowBlance = Math.Abs(order.DJAmount.Value); order.DJAmount = 0; @@ -248,5 +254,243 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } + + public string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) + { + try + { + int snum = 0; + int fnum = 0; + if (dt.Rows.Count > 0) + { + DataTable failDt = new DataTable(); + dt.Columns.Add("导入错误", typeof(string)); + foreach (DataColumn dc in dt.Columns) + { + failDt.Columns.Add(dc.ColumnName, dc.DataType); + } + //缴费方式字典 + var dataitemlist = datarItemService.GetDetailList("PayTypeOffLine"); + //获取已有年度学生缴费记录 + var oldFinaChargeStuYearList = BaseRepository("CollegeMIS").FindList(); + //获取已有年度学生缴费明细记录 + var oldFinaChargeStuYearItemList = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and RefundStatus=0"); + foreach (DataRow dr in dt.Rows) + { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); + try + { + IEnumerable finaChargeStuYearItemList = null; + FinaChargeStuYearItemEntity finaChargeStuYearItemEntity = null; + FinaChargeStuYearEntity finaChargeStuYearEntity = null; + int ChangeType = 0; + //检测是否有空值 + if (dr[0].ToString() == "" || dr[1].ToString() == "" || dr[2].ToString() == "" || dr[3].ToString() == "" || dr[4].ToString() == "" || dr[5].ToString() == "" || dr[6].ToString() == "") + { + throw new Exception("行内数据有空值,不能为空!"); + } + //检测缴费年度是否为数字 + decimal payyearresult = 0; + bool parsepayyearresult = decimal.TryParse(dr[2].ToString(), out payyearresult); + if (!parsepayyearresult || dr[2].ToString().Length != 4) + { + throw new Exception("【缴费年度】格式不正确,必须为四位数字年份!"); + } + //首先校验金额是否为数字 + decimal dresult = 0; + bool parseresult = decimal.TryParse(dr[5].ToString(), out dresult); + if (!parseresult) + { + throw new Exception("【金额】转换失败,必须为数字!"); + } + //金额不能小于等于零 + if (dresult <= 0) + { + throw new Exception("【金额】不能为零或小于零,必须为正数!"); + } + //筛选不在收费学生表内的数据 + finaChargeStuYearEntity = oldFinaChargeStuYearList.FirstOrDefault(m => m.StuNo == dr[0].ToString() && m.FSYear == payyearresult); + finaChargeStuYearItemList = oldFinaChargeStuYearItemList.Where(m => m.StuNo == dr[0].ToString() && m.StuName == dr[1].ToString() && m.FSYear == payyearresult); + if (finaChargeStuYearEntity == null || finaChargeStuYearItemList.Count()==0) + { + throw new Exception("【年度收费学生】不存在,请核对!"); + } + else + { + //筛选已缴费的学生 + if (finaChargeStuYearEntity.PayFeeStatus == 1) + { + throw new Exception("【年度收费学生】已缴费,请核对!"); + } + } + //缴费方式判断 + var itemcodeentity = dataitemlist.FirstOrDefault(m=>m.F_ItemName==dr[6].ToString()); + if (itemcodeentity==null) + { + throw new Exception("【缴费方式】只能为现金或贷款,请核对!"); + } + int itemcodeint = 0; + if (!int.TryParse(itemcodeentity.F_ItemCode,out itemcodeint)) + { + throw new Exception("【线下缴费方式字典(PayTypeOffLine)】值code只能为整数,请核对!"); + } + //缴费明细判断 + finaChargeStuYearItemEntity =finaChargeStuYearItemList.FirstOrDefault(m=>m.ChargeItemCode==dr[3].ToString()); + if (finaChargeStuYearItemEntity==null) + { + throw new Exception("【年度学生收费明细】不存在,请核对!"); + } + else + { + //筛选已缴费的学生 + if (finaChargeStuYearItemEntity.PayFeeStatus == 1) + { + throw new Exception("【年度学生收费明细】已缴费,请核对!"); + } + } + //开始导入 + //生成订单 + FinaChargeStuOrderEntity orderEntity=new FinaChargeStuOrderEntity(); + orderEntity.Create(); + orderEntity.FSYId = finaChargeStuYearItemEntity.FSYId; + orderEntity.YearNo = finaChargeStuYearItemEntity.FSYear; + orderEntity.StuNo = finaChargeStuYearItemEntity.StuNo; + Random ran = new Random(); + orderEntity.orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); + orderEntity.YJAmount = finaChargeStuYearItemEntity.Standard; + orderEntity.SJAmount = dresult; + orderEntity.DJAmount = orderEntity.YJAmount-orderEntity.SJAmount; + if (orderEntity.DJAmount < 0)//有结余 + { + orderEntity.NowBlance = Math.Abs(orderEntity.DJAmount.Value); + orderEntity.DJAmount = 0; + } + orderEntity.PlaceOrderTime = DateTime.Now; + orderEntity.Status = 1; + orderEntity.OrderType = 2; + db.Insert(orderEntity); + //订单明细 + FinaChargeStuOrderDetailEntity detail = new FinaChargeStuOrderDetailEntity(); + detail.Create(); + detail.FCSOId = orderEntity.Id; + detail.ChargeItemCode = finaChargeStuYearItemEntity.ChargeItemCode; + detail.ChargeItemName = finaChargeStuYearItemEntity.ChargeItemName; + detail.YJAmount = finaChargeStuYearItemEntity.Standard; + detail.SJAmount = dresult; + detail.DJAmount = detail.YJAmount - detail.SJAmount; + if (detail.DJAmount < 0)//有结余 + { + detail.NowBlance = Math.Abs(detail.DJAmount.Value); + detail.DJAmount = 0; + } + db.Insert(detail); + //判断实缴金额是否缴清费用 + decimal sjcount = Convert.ToDecimal(db.FindObject("select isnull(sum(SJAmount),0) from FinaChargeStuOrder where StuNo='" + orderEntity.StuNo + "' and Status=1 and YearNo='" + orderEntity.YearNo + "' ")); + //增加本次缴费金额 + sjcount = sjcount + orderEntity.SJAmount.Value; + decimal yjcount = orderEntity.YJAmount.Value; + if (sjcount >= yjcount) + { + //更新缴费状态 + db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='1' where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + } + else//更新部分缴费状态 + { + //更新缴费状态 + db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='4' where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + } + //费用变更明细 + FinaChargeStuBalanceEntity finaChargeStuBalanceEntity = new FinaChargeStuBalanceEntity(); + finaChargeStuBalanceEntity.Create(); + finaChargeStuBalanceEntity.StuNo = orderEntity.StuNo; + finaChargeStuBalanceEntity.FSYear = orderEntity.YearNo; + finaChargeStuBalanceEntity.FCSOId = orderEntity.Id; + finaChargeStuBalanceEntity.ChargeItemCode = detail.ChargeItemCode; + finaChargeStuBalanceEntity.ChargeItemName = detail.ChargeItemName; + finaChargeStuBalanceEntity.Standard = finaChargeStuYearItemEntity.Standard; + finaChargeStuBalanceEntity.DJAmount = finaChargeStuYearItemEntity.FSBlance < 0 ? Math.Abs(finaChargeStuYearItemEntity.FSBlance.Value) : 0; + finaChargeStuBalanceEntity.PaymentAmount = dresult; + finaChargeStuBalanceEntity.QJAmount = finaChargeStuYearItemEntity.Standard - dresult>0?finaChargeStuYearItemEntity.Standard - dresult:0; + finaChargeStuBalanceEntity.OldBalance = finaChargeStuYearItemEntity.FSBlance <= 0? 0: finaChargeStuYearItemEntity.FSBlance; + finaChargeStuBalanceEntity.ChangeAmount = dresult; + finaChargeStuBalanceEntity.NowBalance = finaChargeStuYearItemEntity.FSBlance + dresult > 0? finaChargeStuYearItemEntity.FSBlance + dresult: 0; + finaChargeStuBalanceEntity.ChangeDate = DateTime.Now; + finaChargeStuBalanceEntity.ChangeType = itemcodeint; + db.Insert(finaChargeStuBalanceEntity); + //FinaChargeStuYearItem表 + finaChargeStuYearItemEntity.SJAmount = finaChargeStuYearItemEntity.SJAmount+ dresult; + finaChargeStuYearItemEntity.FSBlance = finaChargeStuYearItemEntity.FSBlance+ dresult; + finaChargeStuYearItemEntity.PayFeeStatus = finaChargeStuYearItemEntity.FSBlance>0?1:4; + db.Update(finaChargeStuYearItemEntity); + //FinaChargeStuYear表 + db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount+"+ dresult + ",FSBlance=FSBlance+"+dresult+ ",PayFeeStatus=(case when(FSBlance+"+ dresult + ">=0) then 1 else 4 end) where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + //FinaChargeStudent表 + db.ExecuteBySql("update FinaChargeStudent set FSBlance=FSBlance+"+ dresult + " where StuNo='" + finaChargeStuYearItemEntity.StuNo+ "'"); + db.Commit(); + } + catch (Exception ex) + { + db.Rollback(); + fnum++; + dr["导入错误"] = ex.Message; + failDt.Rows.Add(dr.ItemArray); + } + } + //自动分配超出金额 + AutoCharge(); + // 写入缓存如果有未导入的数据 + if (failDt.Rows.Count > 0) + { + string errordt = failDt.ToJson(); + cache.Write(cacheKey + fileGuid, errordt, CacheId.excel); + } + } + return snum + "|" + fnum; + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + /// + /// 自动分配固定项目缴费多余金额 + /// + /// + public void AutoCharge(int YearNo=0) + { + try + { + //获取有缴费余额的固定项目 + var FinaChargeStuYearItemHasBalance = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.FSBlance>0"); + //获取欠费的固定项目 + var FinaChargeStuYearItemHasDJ = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.FSBlance<0"); + foreach (var hasBalanceItem in FinaChargeStuYearItemHasBalance) + { + //可分配余额 + decimal balance = hasBalanceItem.FSBlance.Value; + } + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + + + } } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index 1ba14adcf..05904acbd 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -396,6 +396,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } catch (Exception ex) { + db.Rollback(); if (ex is ExceptionEx) { throw; From 7c772ef62d53274bba8a8c244d7ae5fb6d899e9e Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sun, 20 Aug 2023 16:39:19 +0800 Subject: [PATCH 31/50] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/FinaChargeLogController.cs | 117 +++++++++++ .../FinaChargeStuYearController.cs | 40 +++- .../Views/FinaChargeLog/Form.cshtml | 35 ++++ .../Views/FinaChargeLog/Form.js | 36 ++++ .../Views/FinaChargeLog/Index.cshtml | 37 ++++ .../Views/FinaChargeLog/Index.js | 94 +++++++++ .../Views/FinaChargeRefund/Index.cshtml | 3 - .../Views/FinaChargeRefund/Index.js | 43 +--- .../Views/FinaChargeStuOrder/Index.cshtml | 2 +- .../FinaChargeStuYear/IndexForStudent.cshtml | 2 +- .../FinaChargeStuYear/IndexForStudent.js | 12 +- .../Views/FinaChargeStuYearItem/Index.cshtml | 2 +- .../Learun.Application.Web.csproj | 5 + .../FinaChargeStuYearApi.cs | 32 ++- .../FinaChargeLogMap.cs | 10 +- .../FinaChargeLog/FinaChargeLogBLL.cs | 37 +--- .../FinaChargeLog/FinaChargeLogEntity.cs | 30 +-- .../FinaChargeLog/FinaChargeLogIBLL.cs | 17 +- .../FinaChargeLog/FinaChargeLogService.cs | 192 +++++++----------- .../PayFee/payInvioce.vue | 2 +- 20 files changed, 489 insertions(+), 259 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeLogController.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeLogController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeLogController.cs new file mode 100644 index 000000000..884517565 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeLogController.cs @@ -0,0 +1,117 @@ +using Learun.Util; +using System.Data; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Web.Mvc; +using System.Collections.Generic; + +namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers +{ + /// + /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 + /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + /// 创 建:超级管理员 + /// 日 期:2023-08-20 16:06 + /// 描 述:收费系统操作日志 + /// + public class FinaChargeLogController : MvcControllerBase + { + private FinaChargeLogIBLL finaChargeLogIBLL = new FinaChargeLogBLL(); + + #region 视图功能 + + /// + /// 主页面 + /// + /// + [HttpGet] + public ActionResult Index() + { + return View(); + } + /// + /// 表单页 + /// + /// + [HttpGet] + public ActionResult Form() + { + return View(); + } + #endregion + + #region 获取数据 + + /// + /// 获取页面显示列表数据 + /// + /// 分页参数 + /// 查询参数 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetPageList(string pagination, string queryJson) + { + Pagination paginationobj = pagination.ToObject(); + var data = finaChargeLogIBLL.GetPageList(paginationobj, queryJson); + var jsonData = new + { + rows = data, + total = paginationobj.total, + page = paginationobj.page, + records = paginationobj.records + }; + return Success(jsonData); + } + /// + /// 获取表单数据 + /// + /// 主键 + /// + [HttpGet] + [AjaxOnly] + public ActionResult GetFormData(string keyValue) + { + var FinaChargeLogData = finaChargeLogIBLL.GetFinaChargeLogEntity( keyValue ); + var jsonData = new { + FinaChargeLog = FinaChargeLogData, + }; + return Success(jsonData); + } + #endregion + + #region 提交数据 + + /// + /// 删除实体数据 + /// + /// 主键 + /// + [HttpPost] + [AjaxOnly] + public ActionResult DeleteForm(string keyValue) + { + finaChargeLogIBLL.DeleteEntity(keyValue); + return Success("删除成功!"); + } + /// + /// 保存实体数据(新增、修改) + /// + /// 主键 + /// 实体 + /// + [HttpPost] + [ValidateAntiForgeryToken] + [AjaxOnly] + public ActionResult SaveForm(string keyValue, string strEntity) + { + FinaChargeLogEntity entity = strEntity.ToObject(); + finaChargeLogIBLL.SaveEntity(keyValue,entity); + if (string.IsNullOrEmpty(keyValue)) + { + } + return Success("保存成功!"); + } + #endregion + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs index 00abc770b..4fd3c6c8d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -28,6 +28,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL(); private FinaChargeStuOrderIBLL finaChargeStuOrderIbll = new FinaChargeStuOrderBLL(); + private EADateArrangeIBLL eaDateArrangeIbll = new EADateArrangeBLL(); #region 视图功能 @@ -38,19 +39,20 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [HttpGet] public ActionResult Index() { - return View(); + return View(); } [HttpGet] public ActionResult IndexForTeacher() { - return View(); + return View(); } [HttpGet] public ActionResult IndexForStudent() { - return View(); + return View(""); } + /// /// 表单页 /// @@ -58,30 +60,47 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [HttpGet] public ActionResult Form() { - return View(); + return View(); } [HttpGet] public ActionResult InvoiceForm() { - return View(); + return View(); } [HttpGet] public ActionResult PayFeeForm() { - return View(); + return View(); } [HttpGet] public ActionResult GenerateByConditionForm() { - return View(); + return View(); } #endregion #region 获取数据 + [HttpGet] + [AjaxOnly] + public ActionResult IfCanPay() + { + var nowyearsemester = Common.GetSemesterAndYear(); + var eastatus = eaDateArrangeIbll.GetEADateArrangeEntity("17"); + if (eastatus != null && eastatus.CheckMark == "1" && + eastatus.AcademicYearNo == nowyearsemester.AcademicYearShort + && eastatus.Semester == nowyearsemester.Semester && eastatus.MakeDate < DateTime.Now && + eastatus.EndDate > DateTime.Now) + { + return Success(new { success = "1" }); + } + else + return Success(new { success = "0",info= "当前不在缴费时间范围" }); + } + [HttpGet] [AjaxOnly] public ActionResult GetYearTree() @@ -119,8 +138,9 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult GetFormData(string keyValue) { - var FinaChargeStuYearData = finaChargeStuYearIBLL.GetFinaChargeStuYearEntity( keyValue ); - var jsonData = new { + var FinaChargeStuYearData = finaChargeStuYearIBLL.GetFinaChargeStuYearEntity(keyValue); + var jsonData = new + { FinaChargeStuYear = FinaChargeStuYearData, }; return Success(jsonData); @@ -183,7 +203,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers public ActionResult SaveForm(string keyValue, string strEntity) { FinaChargeStuYearEntity entity = strEntity.ToObject(); - finaChargeStuYearIBLL.SaveEntity(keyValue,entity); + finaChargeStuYearIBLL.SaveEntity(keyValue, entity); if (string.IsNullOrEmpty(keyValue)) { } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.cshtml new file mode 100644 index 000000000..7f0430f12 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.cshtml @@ -0,0 +1,35 @@ +@{ + ViewBag.Title = "收费系统操作日志"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    功能模块
    + +
    +
    +
    操作类型
    + +
    +
    +
    操作时间
    + +
    +
    +
    操作用户
    + +
    +
    +
    用户IP
    + +
    +
    +
    操作内容
    + +
    +
    +
    操作数据Id
    + +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.js new file mode 100644 index 000000000..43c3d6caf --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Form.js @@ -0,0 +1,36 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-20 16:06 + * 描 述:收费系统操作日志 + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#F_OperateType').lrDataItemSelect({ code: '' }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeLog/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.cshtml new file mode 100644 index 000000000..97d8b9387 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.cshtml @@ -0,0 +1,37 @@ +@{ + ViewBag.Title = "收费系统操作日志"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    操作用户
    + +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js new file mode 100644 index 000000000..3c74dbb81 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js @@ -0,0 +1,94 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-20 16:06 + * 描 述:收费系统操作日志 + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var startTime; + var endTime; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + // 时间搜索框 + $('#datesearch').lrdate({ + dfdata: [ + { name: '今天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00') }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近7天', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'd', -6) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近1个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -1) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } }, + { name: '近3个月', begin: function () { return learun.getDate('yyyy-MM-dd 00:00:00', 'm', -3) }, end: function () { return learun.getDate('yyyy-MM-dd 23:59:59') } } + ], + // 月 + mShow: false, + premShow: false, + // 季度 + jShow: false, + prejShow: false, + // 年 + ysShow: false, + yxShow: false, + preyShow: false, + yShow: false, + // 默认 + dfvalue: '1', + selectfn: function (begin, end) { + startTime = begin; + endTime = end; + page.search(); + } + }); + $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { + page.search(queryJson); + }, 220, 400); + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + $('#lr_view').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('F_LogId'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'formview', + title: '查看详细', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeLog/Form?keyValue=' + keyValue, + width: 700, + height: 600, + btn:null + }); + } + }); + }, + // 初始化列表 + initGird: function () { + $('#gridtable').jfGrid({ + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeLog/GetPageList', + headData: [ + { label: "功能模块", name: "F_Module", width: 120, align: "left"}, + { label: "操作类型", name: "F_OperateType", width: 100, align: "left"}, + { label: "操作时间", name: "F_OperateTime", width: 180, align: "left"}, + { label: "操作用户", name: "F_OperateAccount", width: 150, align: "left"}, + { label: "用户IP", name: "F_IPAddress", width: 100, align: "left"}, + { label: "操作内容", name: "F_SourceContentJson", width: 200, align: "left"}, + { label: "操作数据Id", name: "F_SourceObjectId", width: 100, align: "left"}, + ], + mainId:'F_LogId', + isPage: true + }); + }, + search: function (param) { + param = param || {}; + param.StartTime = startTime; + param.EndTime = endTime; + $('#gridtable').jfGridSet('reload',{ queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + $('#gridtable').jfGridSet('reload'); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml index 1205fe05a..1865e1dfe 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.cshtml @@ -39,9 +39,6 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js index 06b371226..2349b8adc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/Index.js @@ -21,48 +21,7 @@ var bootstrap = function ($, learun) { $('#lr_refresh').on('click', function () { location.reload(); }); - // 新增 - $('#lr_add').on('click', function () { - learun.layerForm({ - id: 'form', - title: '新增', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/Form', - width: 600, - height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); - } - }); - }); - // 编辑 - $('#lr_edit').on('click', function () { - var keyValue = $('#gridtable').jfGridValue('Id'); - if (learun.checkrow(keyValue)) { - learun.layerForm({ - id: 'form', - title: '编辑', - url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/Form?keyValue=' + keyValue, - width: 600, - height: 400, - callBack: function (id) { - return top[id].acceptClick(refreshGirdData); - } - }); - } - }); - // 删除 - $('#lr_delete').on('click', function () { - var keyValue = $('#gridtable').jfGridValue('Id'); - if (learun.checkrow(keyValue)) { - learun.layerConfirm('是否确认删除该项!', function (res) { - if (res) { - learun.deleteForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/DeleteForm', { keyValue: keyValue }, function () { - refreshGirdData(); - }); - } - }); - } - }); + }, // 初始化列表 initGird: function () { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml index 1de07638c..982de67fe 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.cshtml @@ -46,7 +46,7 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml index 44fbcd9ee..ade5d56f5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.cshtml @@ -20,7 +20,7 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js index 903128801..4e52b0255 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js @@ -11,9 +11,15 @@ var bootstrap = function ($, learun) { var page = { init: function () { page.bind(); - setTimeout(function () { - page.initGird(); - }, 500);//延迟 + learun.httpAsync("get", "/ReceiveSendFeeManagement/FinaChargeStuYear/IfCanPay", {}, function (data) { + if (data.success == "0") { + learun.alert.error(data.info); + } else { + setTimeout(function () { + page.initGird(); + }, 500);//延迟 + } + }); }, bind: function () { $('#FSYear').lrselect({ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml index aecfad550..8ee9cc8a0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.cshtml @@ -55,7 +55,7 @@
    -  导入 +  导入非固定项  恢复  作废  退费 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index 51a81ebc9..a3a0c94e9 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -893,6 +893,7 @@ + @@ -6679,6 +6680,10 @@ + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs index be2951fa7..d3a064874 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs @@ -31,6 +31,7 @@ namespace Learun.Application.WebApi.Modules { private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL(); private FinaChargeStuOrderIBLL finaChargeStuOrderIbll = new FinaChargeStuOrderBLL(); + private EADateArrangeIBLL eaDateArrangeIbll = new EADateArrangeBLL(); public FinaChargeStuYearApi() : base("/ReceiveSendFeeManagement/FinaChargeStuYearApi") @@ -50,16 +51,29 @@ namespace Learun.Application.WebApi.Modules public Response GetPayfeeList(dynamic _) { - ReqPageParam parameter = this.GetReqData(); - var data = finaChargeStuYearIBLL.GetPageList(parameter.pagination, parameter.queryJson); - var jsonData = new + var nowyearsemester = Common.GetSemesterAndYear(); + var eastatus = eaDateArrangeIbll.GetEADateArrangeEntity("17"); + if (eastatus != null && eastatus.CheckMark == "1" && + eastatus.AcademicYearNo == nowyearsemester.AcademicYearShort + && eastatus.Semester == nowyearsemester.Semester && eastatus.MakeDate < DateTime.Now && + eastatus.EndDate > DateTime.Now) { - rows = data, - total = parameter.pagination.total, - page = parameter.pagination.page, - records = parameter.pagination.records - }; - return Success(jsonData); + ReqPageParam parameter = this.GetReqData(); + var data = finaChargeStuYearIBLL.GetPageList(parameter.pagination, parameter.queryJson); + var jsonData = new + { + rows = data, + total = parameter.pagination.total, + page = parameter.pagination.page, + records = parameter.pagination.records + }; + return Success(jsonData); + } + else + { + return Fail("当前不在缴费时间范围"); + } + } public Response GetPayfeeInfo(dynamic _) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeLogMap.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeLogMap.cs index cc90c9907..7fe17a719 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeLogMap.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.Mapping/ReceiveSendFeeManagement/FinaChargeLogMap.cs @@ -1,5 +1,5 @@ -using System.Data.Entity.ModelConfiguration; -using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using Learun.Application.TwoDevelopment.ReceiveSendFeeManagement; +using System.Data.Entity.ModelConfiguration; namespace Learun.Application.Mapping { @@ -7,8 +7,8 @@ namespace Learun.Application.Mapping /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 /// 创 建:超级管理员 - /// 日 期:2023-07-31 22:20 - /// 描 述:操作日志 + /// 日 期:2023-08-20 16:06 + /// 描 述:收费系统操作日志 ///
    public class FinaChargeLogMap : EntityTypeConfiguration { @@ -16,7 +16,7 @@ namespace Learun.Application.Mapping { #region 表、主键 //表 - this.ToTable("FinaChargeLog"); + this.ToTable("FINACHARGELOG"); //主键 this.HasKey(t => t.F_LogId); #endregion diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLL.cs index 196a25c0c..bcef1735f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogBLL.cs @@ -9,8 +9,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 /// 创 建:超级管理员 - /// 日 期:2023-07-31 22:20 - /// 描 述:操作日志 + /// 日 期:2023-08-20 16:06 + /// 描 述:收费系统操作日志 ///
    public class FinaChargeLogBLL : FinaChargeLogIBLL { @@ -19,31 +19,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #region 获取数据 /// - /// 获取列表数据 - /// - /// 查询参数 - /// - public IEnumerable GetList( string queryJson ) - { - try - { - return finaChargeLogService.GetList(queryJson); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowBusinessException(ex); - } - } - } - - /// - /// 获取列表分页数据 + /// 获取页面显示列表数据 /// /// 分页参数 /// 查询参数 @@ -68,15 +44,15 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } /// - /// 获取实体数据 + /// 获取FinaChargeLog表实体数据 /// /// 主键 /// - public FinaChargeLogEntity GetEntity(string keyValue) + public FinaChargeLogEntity GetFinaChargeLogEntity(string keyValue) { try { - return finaChargeLogService.GetEntity(keyValue); + return finaChargeLogService.GetFinaChargeLogEntity(keyValue); } catch (Exception ex) { @@ -123,6 +99,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    /// 主键 /// 实体 + /// public void SaveEntity(string keyValue, FinaChargeLogEntity entity) { try diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogEntity.cs index b7545f213..80d890c27 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogEntity.cs @@ -1,137 +1,117 @@ using Learun.Util; using System; using System.ComponentModel.DataAnnotations.Schema; -namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement +namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { /// /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 /// 创 建:超级管理员 - /// 日 期:2023-07-31 22:20 - /// 描 述:操作日志 + /// 日 期:2023-08-20 16:06 + /// 描 述:收费系统操作日志 /// - public class FinaChargeLogEntity + public class FinaChargeLogEntity { #region 实体成员 /// /// 日志主键 /// - /// [Column("F_LOGID")] public string F_LogId { get; set; } /// /// 分类Id 1-登陆2-访问3-操作4-异常 /// - /// [Column("F_CATEGORYID")] public int? F_CategoryId { get; set; } /// /// 来源对象主键 /// - /// [Column("F_SOURCEOBJECTID")] public string F_SourceObjectId { get; set; } /// /// 来源日志内容 /// - /// [Column("F_SOURCECONTENTJSON")] public string F_SourceContentJson { get; set; } /// /// 操作时间 /// - /// [Column("F_OPERATETIME")] public DateTime? F_OperateTime { get; set; } /// /// 操作用户Id /// - /// [Column("F_OPERATEUSERID")] public string F_OperateUserId { get; set; } /// /// 操作用户 /// - /// [Column("F_OPERATEACCOUNT")] public string F_OperateAccount { get; set; } /// /// 操作类型Id /// - /// [Column("F_OPERATETYPEID")] public string F_OperateTypeId { get; set; } /// /// 操作类型 /// - /// [Column("F_OPERATETYPE")] public string F_OperateType { get; set; } /// /// 系统功能 /// - /// [Column("F_MODULE")] public string F_Module { get; set; } /// /// IP地址 /// - /// [Column("F_IPADDRESS")] public string F_IPAddress { get; set; } /// /// IP地址所在城市 /// - /// [Column("F_IPADDRESSNAME")] public string F_IPAddressName { get; set; } /// /// 主机 /// - /// [Column("F_HOST")] public string F_Host { get; set; } /// /// 浏览器 /// - /// [Column("F_BROWSER")] public string F_Browser { get; set; } /// /// 执行结果状态 /// - /// [Column("F_EXECUTERESULT")] public int? F_ExecuteResult { get; set; } /// /// 执行结果信息 /// - /// [Column("F_EXECUTERESULTJSON")] public string F_ExecuteResultJson { get; set; } /// /// 备注 /// - /// [Column("F_DESCRIPTION")] public string F_Description { get; set; } /// /// 删除标记 /// - /// [Column("F_DELETEMARK")] public int? F_DeleteMark { get; set; } /// /// 有效标志 /// - /// [Column("F_ENABLEDMARK")] public int? F_EnabledMark { get; set; } /// /// 来源 /// - /// [Column("F_SOURCE")] public string F_Source { get; set; } #endregion @@ -153,6 +133,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement this.F_LogId = keyValue; } #endregion + #region 扩展字段 + #endregion } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogIBLL.cs index 3c229666b..6e8fa5404 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogIBLL.cs @@ -8,32 +8,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 /// 创 建:超级管理员 - /// 日 期:2023-07-31 22:20 - /// 描 述:操作日志 + /// 日 期:2023-08-20 16:06 + /// 描 述:收费系统操作日志 ///
    public interface FinaChargeLogIBLL { #region 获取数据 /// - /// 获取列表数据 + /// 获取页面显示列表数据 /// /// 查询参数 /// - IEnumerable GetList( string queryJson ); - /// - /// 获取列表分页数据 - /// - /// 分页参数 - /// 查询参数 - /// IEnumerable GetPageList(Pagination pagination, string queryJson); /// - /// 获取实体数据 + /// 获取FinaChargeLog表实体数据 /// /// 主键 /// - FinaChargeLogEntity GetEntity(string keyValue); + FinaChargeLogEntity GetFinaChargeLogEntity(string keyValue); #endregion #region 提交数据 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogService.cs index ab6af84ae..f3f8118e2 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeLog/FinaChargeLogService.cs @@ -1,10 +1,9 @@ using Dapper; -using Learun.Application.Base.SystemModule; using Learun.DataBase.Repository; using Learun.Util; using System; using System.Collections.Generic; -using System.Linq; +using System.Data; using System.Text; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement @@ -13,65 +12,76 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架 /// Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 /// 创 建:超级管理员 - /// 日 期:2023-07-31 22:20 - /// 描 述:操作日志 + /// 日 期:2023-08-20 16:06 + /// 描 述:收费系统操作日志 ///
    public class FinaChargeLogService : RepositoryFactory { - #region 构造函数和属性 + #region 获取数据 - private string fieldSql; /// - /// 构造方法 + /// 获取页面显示列表数据 /// - public FinaChargeLogService() + /// 查询参数 + /// 查询参数 + /// + public IEnumerable GetPageList(Pagination pagination, string queryJson) { - fieldSql=@" + try + { + var strSql = new StringBuilder(); + strSql.Append("SELECT "); + strSql.Append(@" t.F_LogId, - t.F_CategoryId, - t.F_SourceObjectId, - t.F_SourceContentJson, + t.F_Module, + t.F_OperateType, t.F_OperateTime, - t.F_OperateUserId, t.F_OperateAccount, - t.F_OperateTypeId, - t.F_OperateType, - t.F_Module, t.F_IPAddress, - t.F_IPAddressName, - t.F_Host, - t.F_Browser, - t.F_ExecuteResult, - t.F_ExecuteResultJson, - t.F_Description, - t.F_DeleteMark, - t.F_EnabledMark, - t.F_Source - "; + t.F_SourceContentJson, + t.F_SourceObjectId + "); + strSql.Append(" FROM FinaChargeLog t "); + strSql.Append(" WHERE 1=1 "); + var queryParam = queryJson.ToJObject(); + // 虚拟参数 + var dp = new DynamicParameters(new { }); + if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty()) + { + dp.Add("startTime", queryParam["StartTime"].ToDate(), DbType.DateTime); + dp.Add("endTime", queryParam["EndTime"].ToDate(), DbType.DateTime); + strSql.Append(" AND ( t.F_OperateTime >= @startTime AND t.F_OperateTime <= @endTime ) "); + } + if (!queryParam["F_OperateAccount"].IsEmpty()) + { + dp.Add("F_OperateAccount", "%" + queryParam["F_OperateAccount"].ToString() + "%", DbType.String); + strSql.Append(" AND t.F_OperateAccount Like @F_OperateAccount "); + } + return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(),dp, pagination); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } } - #endregion - - #region 获取数据 /// - /// 获取列表数据 + /// 获取FinaChargeLog表实体数据 /// - /// 条件参数 + /// 主键 /// - public IEnumerable GetList( string queryJson ) + public FinaChargeLogEntity GetFinaChargeLogEntity(string keyValue) { try { - //参考写法 - //var queryParam = queryJson.ToJObject(); - // 虚拟参数 - //var dp = new DynamicParameters(new { }); - //dp.Add("startTime", queryParam["StartTime"].ToDate(), DbType.DateTime); - var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(fieldSql); - strSql.Append(" FROM FinaChargeLog t "); - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString()); + return this.BaseRepository("CollegeMIS").FindEntity(keyValue); } catch (Exception ex) { @@ -86,21 +96,19 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + #endregion + + #region 提交数据 + /// - /// 获取列表分页数据 + /// 删除实体数据 /// - /// 分页参数 - /// 条件参数 - /// - public IEnumerable GetPageList(Pagination pagination, string queryJson) + /// 主键 + public void DeleteEntity(string keyValue) { try { - var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(fieldSql); - strSql.Append(" FROM SP_Log t "); - return this.BaseRepository("CollegeMIS").FindList(strSql.ToString(), pagination); + this.BaseRepository("CollegeMIS").Delete(t=>t.F_LogId == keyValue); } catch (Exception ex) { @@ -116,15 +124,24 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } /// - /// 获取实体数据 + /// 保存实体数据(新增、修改) /// /// 主键 - /// - public FinaChargeLogEntity GetEntity(string keyValue) + /// 实体 + public void SaveEntity(string keyValue, FinaChargeLogEntity entity) { try { - return this.BaseRepository("CollegeMIS").FindEntity(keyValue); + if (!string.IsNullOrEmpty(keyValue)) + { + entity.Modify(keyValue); + this.BaseRepository("CollegeMIS").Update(entity); + } + else + { + entity.Create(); + this.BaseRepository("CollegeMIS").Insert(entity); + } } catch (Exception ex) { @@ -139,16 +156,13 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } - #endregion - - #region 提交数据 - /// /// 清空日志 /// /// 日志分类Id /// 保留时间段内 - public void RemoveLog(int categoryId, string keepTime) { + public void RemoveLog(int categoryId, string keepTime) + { try { DateTime operateTime = DateTime.Now; @@ -212,62 +226,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } - /// - /// 删除实体数据 - /// - /// 主键 - public void DeleteEntity(string keyValue) - { - try - { - this.BaseRepository("CollegeMIS").Delete(t=>t.F_LogId == keyValue); - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowServiceException(ex); - } - } - } - - /// - /// 保存实体数据(新增、修改) - /// 主键 - /// 实体 - /// - public void SaveEntity(string keyValue, FinaChargeLogEntity entity) - { - try - { - if (!string.IsNullOrEmpty(keyValue)) - { - entity.Modify(keyValue); - this.BaseRepository("CollegeMIS").Update(entity); - } - else - { - entity.Create(); - this.BaseRepository("CollegeMIS").Insert(entity); - } - } - catch (Exception ex) - { - if (ex is ExceptionEx) - { - throw; - } - else - { - throw ExceptionEx.ThrowServiceException(ex); - } - } - } - #endregion } diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/payInvioce.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/payInvioce.vue index 72fb2501f..564f0d833 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/payInvioce.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/payInvioce.vue @@ -36,7 +36,7 @@ }, init(){ this.LOADING() - this.HTTP_GET("/learun/payfee/getinvoice?keyValue="+this.keyValue).then((success)=>{ + this.HTTP_GET("/ReceiveSendFeeManagement/FinaChargeStuYearApi/getinvoice?keyValue="+this.keyValue).then((success)=>{ this.HIDE_LOADING() if(!success)return if(!success.length){ From 9a9660072eec3767c7a956376691c6a138023da9 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sun, 20 Aug 2023 16:40:34 +0800 Subject: [PATCH 32/50] =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js index 3c74dbb81..e1f0a9ca3 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeLog/Index.js @@ -77,7 +77,8 @@ var bootstrap = function ($, learun) { { label: "操作数据Id", name: "F_SourceObjectId", width: 100, align: "left"}, ], mainId:'F_LogId', - isPage: true + isPage: true, + sidx:'F_OperateTime desc' }); }, search: function (param) { From 351f3897dd5344dc07aaa69e4a365d46b4f3aff3 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sun, 20 Aug 2023 18:48:40 +0800 Subject: [PATCH 33/50] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=86=E9=85=8D?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuOrderService.cs | 95 +++++++++++++++++-- 1 file changed, 89 insertions(+), 6 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs index 46a5da81a..e9743f94a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -468,14 +468,97 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - //获取有缴费余额的固定项目 - var FinaChargeStuYearItemHasBalance = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.FSBlance>0"); - //获取欠费的固定项目 - var FinaChargeStuYearItemHasDJ = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.FSBlance<0"); + Random ran = new Random(); + //获取有缴费余额的固定项目,按照优先级倒排,即优先级低的,先拿出多出余额去分配给高的项目 + var FinaChargeStuYearItemHasBalance = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.FSBlance>0 order by priority desc "); + //获取欠费的固定项目,按照优先级排序,优先级高的首先会分配到多出的余额 + var FinaChargeStuYearItemHasDJ = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.FSBlance<0 order by priority "); foreach (var hasBalanceItem in FinaChargeStuYearItemHasBalance) { - //可分配余额 - decimal balance = hasBalanceItem.FSBlance.Value; + if (hasBalanceItem.FSBlance > 0) + { + //可分配余额 + decimal balance = hasBalanceItem.FSBlance.Value; + foreach (var QJItem in FinaChargeStuYearItemHasDJ) + { + var db = BaseRepository("CollegeMIS").BeginTrans(); + if (QJItem.FSBlance<0 && hasBalanceItem.FSBlance>0) + { + //费用变更表 + //含余额表扣减 + FinaChargeStuBalanceEntity finaChargeStuBalanceMinus = new FinaChargeStuBalanceEntity(); + finaChargeStuBalanceMinus.Create(); + finaChargeStuBalanceMinus.StuNo = hasBalanceItem.StuNo; + finaChargeStuBalanceMinus.FSYear = hasBalanceItem.FSYear; + finaChargeStuBalanceMinus.FCSOId = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); + finaChargeStuBalanceMinus.ChargeItemCode = hasBalanceItem.ChargeItemCode; + finaChargeStuBalanceMinus.ChargeItemName = hasBalanceItem.ChargeItemName; + finaChargeStuBalanceMinus.Standard = hasBalanceItem.Standard; + finaChargeStuBalanceMinus.DJAmount = 0; + finaChargeStuBalanceMinus.QJAmount = 0; + finaChargeStuBalanceMinus.OldBalance = hasBalanceItem.FSBlance; + finaChargeStuBalanceMinus.ChangeDate = DateTime.Now; + finaChargeStuBalanceMinus.ChangeType = 5; + //欠费表增加 + FinaChargeStuBalanceEntity finaChargeStuBalanceAdd = new FinaChargeStuBalanceEntity(); + finaChargeStuBalanceAdd.Create(); + finaChargeStuBalanceAdd.StuNo = QJItem.StuNo; + finaChargeStuBalanceAdd.FSYear = QJItem.FSYear; + finaChargeStuBalanceAdd.FCSOId = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); + finaChargeStuBalanceAdd.ChargeItemCode = QJItem.ChargeItemCode; + finaChargeStuBalanceAdd.ChargeItemName = QJItem.ChargeItemName; + finaChargeStuBalanceAdd.Standard = QJItem.Standard; + finaChargeStuBalanceAdd.DJAmount = Math.Abs(QJItem.FSBlance.Value); + finaChargeStuBalanceMinus.ChangeDate = DateTime.Now; + finaChargeStuBalanceMinus.ChangeType = 6; + //余额分配还有剩余 + if (balance + QJItem.FSBlance >= 0) + { + QJItem.SJAmount = QJItem.Standard; + QJItem.FSBlance = 0; + QJItem.PayFeeStatus = 1; + hasBalanceItem.FSBlance = hasBalanceItem.FSBlance + QJItem.FSBlance; + finaChargeStuBalanceMinus.PaymentAmount = QJItem.FSBlance; + finaChargeStuBalanceMinus.ChangeAmount = QJItem.FSBlance; + finaChargeStuBalanceMinus.NowBalance = hasBalanceItem.FSBlance; + db.Insert(finaChargeStuBalanceMinus); + //欠费变更 + finaChargeStuBalanceAdd.PaymentAmount = Math.Abs(QJItem.FSBlance.Value); + finaChargeStuBalanceAdd.QJAmount = 0; + finaChargeStuBalanceAdd.OldBalance = 0; + finaChargeStuBalanceAdd.ChangeAmount = Math.Abs(QJItem.FSBlance.Value); + finaChargeStuBalanceAdd.NowBalance = 0; + db.Insert(finaChargeStuBalanceAdd); + db.Update(hasBalanceItem); + db.Update(QJItem); + db.Commit(); + continue; + } + else + { + QJItem.SJAmount = QJItem.SJAmount + hasBalanceItem.FSBlance; + QJItem.FSBlance = QJItem.FSBlance + hasBalanceItem.FSBlance; + QJItem.PayFeeStatus = 4; + hasBalanceItem.FSBlance = 0; + finaChargeStuBalanceMinus.PaymentAmount = -hasBalanceItem.FSBlance; + finaChargeStuBalanceMinus.ChangeAmount = -hasBalanceItem.FSBlance; + finaChargeStuBalanceMinus.NowBalance = 0; + db.Insert(finaChargeStuBalanceMinus); + //欠费变更 + finaChargeStuBalanceAdd.PaymentAmount = hasBalanceItem.FSBlance; + finaChargeStuBalanceAdd.QJAmount = QJItem.FSBlance+ hasBalanceItem.FSBlance; + finaChargeStuBalanceAdd.OldBalance = 0; + finaChargeStuBalanceAdd.ChangeAmount = hasBalanceItem.FSBlance; + finaChargeStuBalanceAdd.NowBalance = 0; + db.Insert(finaChargeStuBalanceAdd); + db.Update(hasBalanceItem); + db.Update(QJItem); + db.Commit(); + break; + } + } + } + } } } catch (Exception ex) From 97545140b73af9f4fff904ee15f31588947491c1 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Mon, 21 Aug 2023 18:23:54 +0800 Subject: [PATCH 34/50] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Views/FinaChargeStuOrder/Index.js | 8 +- .../Views/FinaChargeStuOrderDetail/Index.js | 8 +- .../Views/FinaChargeStuYear/Index.js | 9 +- .../Views/FinaChargeStudent/Index.js | 3 +- .../Views/FinaChargesStandard/Index.js | 2 + .../FinaChargeStuYearEntity.cs | 7 +- .../FinaChargeStuYearService.cs | 184 ++++++++++++------ .../FinaChargeStuYearItemEntity.cs | 8 +- .../FinaChargeStudentEntity.cs | 7 +- .../FinaChargeStudentService.cs | 4 +- .../FinaChargesStandardEntity.cs | 2 +- 11 files changed, 159 insertions(+), 83 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js index 322e84bf5..c33a7a967 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js @@ -93,10 +93,10 @@ var bootstrap = function ($, learun) { { label: "缴费年度", name: "YearNo", width: 80, align: "left"}, { label: "学号", name: "StuNo", width: 100, align: "left"}, { label: "订单编号", name: "orderid", width: 150, align: "left"}, - { label: "应缴金额", name: "YJAmount", width: 100, align: "left"}, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, - { label: "待缴金额", name: "DJAmount", width: 100, align: "left"}, - { label: "超出余额", name: "NowBlance", width: 100, align: "left"}, + { label: "收费标准", name: "YJAmount", width: 100, align: "left"}, + { label: "缴费金额", name: "SJAmount", width: 100, align: "left"}, + { label: "应缴余额", name: "DJAmount", width: 100, align: "left"}, + { label: "超出应收额", name: "NowBlance", width: 100, align: "left"}, { label: "缴费状态", name: "Status", width: 100, align: "left", formatterAsync: function (callback, value, row, op,$cell) { learun.clientdata.getAsync('dataItem', { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js index 46752bc70..e17c374ec 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js @@ -26,10 +26,10 @@ var bootstrap = function ($, learun) { headData: [ { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left"}, { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left"}, - { label: "应缴金额", name: "YJAmount", width: 100, align: "left"}, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left"}, - { label: "待缴金额", name: "DJAmount", width: 100, align: "left"}, - { label: "超出余额", name: "NowBlance", width: 100, align: "left"}, + { label: "收费标准", name: "YJAmount", width: 100, align: "left"}, + { label: "缴费金额", name: "SJAmount", width: 100, align: "left"}, + { label: "应缴余额", name: "DJAmount", width: 100, align: "left"}, + { label: "超出应收额", name: "NowBlance", width: 100, align: "left"}, ], mainId:'Id', isPage: true diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js index f01b33cc7..3e954a123 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/Index.js @@ -118,10 +118,11 @@ var bootstrap = function ($, learun) { } }, { label: "年级", name: "Grade", width: 80, align: "left" }, - { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, - { label: "应缴金额", name: "YJAmount", width: 100, align: "left" }, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, - { label: "缴费年度余额(负数代表欠缴)", name: "FSBlance", width: 180, align: "left" }, + { label: "缴费年度", name: "FSYear", width: 80, align: "left" }, + { label: "收费标准", name: "YJAmount", width: 80, align: "left" }, + { label: "缴费金额", name: "SJAmount", width: 80, align: "left" }, + { label: "应缴余额", name: "NeedToPay", width: 80, align: "left" }, + { label: "超出应收额", name: "FSBlance", width: 80, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatter: function (cellvalue, row) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js index ad3a2e91e..db73e0ad1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStudent/Index.js @@ -157,7 +157,8 @@ var bootstrap = function ($, learun) { }, { label: "年级", name: "Grade", width: 80, align: "left" }, { label: "手机号", name: "Mobile", width: 100, align: "left" }, - { label: "学生总余额(负数代表欠缴)", name: "FSBlance", width: 180, align: "left" }, + { label: "应缴余额", name: "NeedToPay", width: 80, align: "left" }, + { label: "超出应收额", name: "FSBlance", width: 80, align: "left" }, { label: "审核标志", name: "F_CheckMark", width: 80, align: "left", formatter: function (cellvalue, rowObject) { return cellvalue == "1" ? "" : ""; diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js index d2981112b..74db2ad4b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js @@ -190,6 +190,8 @@ var bootstrap = function ($, learun) { }, { label: "专业编号", name: "MajorNo", width: 100, align: "left" }, { label: "专业名称", name: "MajorName", width: 200, align: "left" }, + { label: "缴费年度", name: "SYear", width: 80, align: "left" }, + { label: "年级", name: "Grade", width: 80, align: "left" }, { label: "收费项目名称", name: "ChargeItemName", width: 200, align: "left" }, { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, { label: "收费标准", name: "Standard", width: 100, align: "left" }, diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs index 5f2414224..8fa3b6449 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearEntity.cs @@ -40,7 +40,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("SJAMOUNT")] public decimal? SJAmount { get; set; } /// - /// 缴费年度余额(剩余应缴金额) + /// 应缴余额 + /// + [Column("NEEDTOPAY")] + public decimal? NeedToPay { get; set; } + /// + /// 超出应收额 /// [Column("FSBLANCE")] public decimal? FSBlance { get; set; } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index ca6db6e5e..53d862c1e 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; +using System.Threading; using Learun.Application.TwoDevelopment.EducationalAdministration; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement @@ -214,97 +215,150 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion + public class InnerDataEntity + { + public FinaChargeStuYearEntity entity { get; set; } + public IEnumerable oldFinaChargeStuYearList { get; set; } + public IEnumerable oldFinaChargeStuYearItemList { get; set; } + public IEnumerable finaChargesStandardList { get; set; } + public IEnumerable finaChargesStandardListGroup { get; set; } + public FinaChargeStudentEntity stuitem { get; set; } + } + public void SaveGenerateByCondition(FinaChargeStuYearEntity entity) { - var db = BaseRepository("CollegeMIS").BeginTrans(); try { //获取缴费学生 - var stulist = db.FindList(m => m.F_CheckMark == true); + var stulist = BaseRepository("CollegeMIS").FindList(m => m.F_CheckMark == true); //获取已有年度学生缴费记录 - var oldFinaChargeStuYearList = db.FindList(m => m.FSYear == entity.FSYear); + var oldFinaChargeStuYearList = BaseRepository("CollegeMIS").FindList(m => m.FSYear == entity.FSYear); //获取已有年度学生缴费明细记录 - var oldFinaChargeStuYearItemList = db.FindList(m => m.FSYear == entity.FSYear); + var oldFinaChargeStuYearItemList = BaseRepository("CollegeMIS").FindList(m => m.FSYear == entity.FSYear); //获取收费标准 - var finaChargesStandardList = db.FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType,b.priority from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); - var finaChargesStandardListGroup = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear + var finaChargesStandardList = BaseRepository("CollegeMIS").FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType,b.priority from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); + var finaChargesStandardListGroup = BaseRepository("CollegeMIS").FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); + var innerDataEntity = new InnerDataEntity(); + innerDataEntity.oldFinaChargeStuYearList = oldFinaChargeStuYearList; + innerDataEntity.oldFinaChargeStuYearItemList = oldFinaChargeStuYearItemList; + innerDataEntity.finaChargesStandardList = finaChargesStandardList; + innerDataEntity.finaChargesStandardListGroup = finaChargesStandardListGroup; + innerDataEntity.entity = entity; + //线程池优化生成速度 + ThreadPool.SetMaxThreads(50, 50); foreach (var stuitem in stulist) { - var studentchargestanderdlist = finaChargesStandardList.Where(m => m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade); - //判断有无年度学生缴费数据 - if (oldFinaChargeStuYearList.Count(m => m.StuNo == stuitem.StuNo) > 0) + innerDataEntity.stuitem = stuitem; + ThreadPool.QueueUserWorkItem(GeneralInner, innerDataEntity); + } + int t1 = 0; + int t2 = 0; + while (t1 < 50) + { + ThreadPool.GetAvailableThreads(out t1, out t2); + } + //更新学生缴费总表 + BaseRepository("CollegeMIS").ExecuteBySql(@"update FinaChargeStudent set FSBlance=a.[FSBlance] + from (select isnull(sum([FSBlance]),0) as [FSBlance],StuNo from [FinaChargeStuYear] group by StuNo) a left join + FinaChargeStudent b on a.stuno=b.stuno"); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + public void GeneralInner(object innerobject) + { + var db = BaseRepository("CollegeMIS").BeginTrans(); + var innerDataEntity = innerobject as InnerDataEntity; + var stuitem = innerDataEntity.stuitem; + var finaChargesStandardList = innerDataEntity.finaChargesStandardList; + var oldFinaChargeStuYearList = innerDataEntity.oldFinaChargeStuYearList; + var oldFinaChargeStuYearItemList = innerDataEntity.oldFinaChargeStuYearItemList; + var entity = innerDataEntity.entity; + var finaChargesStandardListGroup = innerDataEntity.finaChargesStandardListGroup; + try + { + var studentchargestanderdlist = finaChargesStandardList.Where(m => m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade); + //判断有无年度学生缴费数据 + if (oldFinaChargeStuYearList.Count(m => m.StuNo == stuitem.StuNo) > 0) + { + var oldFinaChargeStuYearEntity = oldFinaChargeStuYearList.FirstOrDefault(m => m.StuNo == stuitem.StuNo); + //查询明细并比对 + var oldFinaChargeStuYearItemListForStu = oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Select(m => m.ChargeItemCode); + string oldcodeitem = string.Join(",", oldFinaChargeStuYearItemListForStu); + var needinsertchargeitem = studentchargestanderdlist.Where(m => !oldcodeitem.Contains(m.ChargeItemCode)); + foreach (var finaChargesStandardEntity in needinsertchargeitem) + { + var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); + finaChargeStuYearItem.Create(); + finaChargeStuYearItem.FSYId = oldFinaChargeStuYearEntity.FSYId; + finaChargeStuYearItem.FSYear = entity.FSYear; + finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; + finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; + finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; + finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; + finaChargeStuYearItem.NeedToPay = finaChargesStandardEntity.Standard; + //主表应缴金额更新 + oldFinaChargeStuYearEntity.YJAmount += finaChargeStuYearItem.Standard; + oldFinaChargeStuYearEntity.NeedToPay += finaChargeStuYearItem.Standard; + db.Insert(finaChargeStuYearItem); + } + if (oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Sum(m => m.SJAmount) > 0) + oldFinaChargeStuYearEntity.PayFeeStatus = 4; + else + { + oldFinaChargeStuYearEntity.PayFeeStatus = 0; + } + //年度学生缴费数据主表更新 + db.Update(oldFinaChargeStuYearEntity); + + } + else + { + if (studentchargestanderdlist.Count() > 0) { - var oldFinaChargeStuYearEntity = oldFinaChargeStuYearList.FirstOrDefault(m => m.StuNo == stuitem.StuNo); - //查询明细并比对 - var oldFinaChargeStuYearItemListForStu = oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Select(m => m.ChargeItemCode); - string oldcodeitem = string.Join(",", oldFinaChargeStuYearItemListForStu); - var needinsertchargeitem = studentchargestanderdlist.Where(m => !oldcodeitem.Contains(m.ChargeItemCode)); - foreach (var finaChargesStandardEntity in needinsertchargeitem) + //写入学生年度缴费数据 + var finaChargeStuYear = new FinaChargeStuYearEntity(); + finaChargeStuYear.Create(); + finaChargeStuYear.StuNo = stuitem.StuNo; + finaChargeStuYear.FSYear = entity.FSYear; + finaChargeStuYear.SJAmount = 0; + finaChargeStuYear.PayFeeStatus = 0; + //写入年度缴费明细数据 + foreach (var finaChargesStandardEntity in studentchargestanderdlist) { var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); finaChargeStuYearItem.Create(); - finaChargeStuYearItem.FSYId = oldFinaChargeStuYearEntity.FSYId; + finaChargeStuYearItem.FSYId = finaChargeStuYear.FSYId; finaChargeStuYearItem.FSYear = entity.FSYear; finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; - //主表应缴金额更新 - oldFinaChargeStuYearEntity.YJAmount += finaChargeStuYearItem.Standard; - //余额扣减 - oldFinaChargeStuYearEntity.FSBlance -= finaChargeStuYearItem.Standard; + finaChargeStuYearItem.NeedToPay = finaChargesStandardEntity.Standard; + finaChargeStuYearItem.FSBlance = 0; db.Insert(finaChargeStuYearItem); } - if (oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Sum(m => m.SJAmount) > 0) - oldFinaChargeStuYearEntity.PayFeeStatus = 4; - else - { - oldFinaChargeStuYearEntity.PayFeeStatus = 0; - } - //年度学生缴费数据主表更新 - db.Update(oldFinaChargeStuYearEntity); + finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; + finaChargeStuYear.NeedToPay = finaChargeStuYear.YJAmount; + finaChargeStuYear.FSBlance = 0; - } - else - { - if (studentchargestanderdlist.Count() > 0) - { - //写入学生年度缴费数据 - var finaChargeStuYear = new FinaChargeStuYearEntity(); - finaChargeStuYear.Create(); - finaChargeStuYear.StuNo = stuitem.StuNo; - finaChargeStuYear.FSYear = entity.FSYear; - finaChargeStuYear.SJAmount = 0; - finaChargeStuYear.PayFeeStatus = 0; - //写入年度缴费明细数据 - foreach (var finaChargesStandardEntity in studentchargestanderdlist) - { - var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); - finaChargeStuYearItem.Create(); - finaChargeStuYearItem.FSYId = finaChargeStuYear.FSYId; - finaChargeStuYearItem.FSYear = entity.FSYear; - finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; - finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; - finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; - finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; - finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; - finaChargeStuYearItem.FSBlance = -finaChargeStuYearItem.Standard; - db.Insert(finaChargeStuYearItem); - } - finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; - finaChargeStuYear.FSBlance = -finaChargeStuYear.YJAmount; - - db.Insert(finaChargeStuYear); - } + db.Insert(finaChargeStuYear); } } db.Commit(); - //更新学生缴费总表 - BaseRepository("CollegeMIS").ExecuteBySql(@"update FinaChargeStudent set FSBlance=a.[FSBlance] - from (select isnull(sum([FSBlance]),0) as [FSBlance],StuNo from [FinaChargeStuYear] group by StuNo) a left join - FinaChargeStudent b on a.stuno=b.stuno"); } catch (Exception ex) { @@ -318,6 +372,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement throw ExceptionEx.ThrowServiceException(ex); } } + + } public IEnumerable GetYearList() diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs index 8f0175372..a56f246cf 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs @@ -58,7 +58,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("SJAMOUNT")] public decimal? SJAmount { get; set; } /// - /// 缴费余额 + /// 应缴余额 + /// + [Column("NEEDTOPAY")] + public decimal? NeedToPay { get; set; } + /// + /// 超出应收额 /// [Column("FSBLANCE")] public decimal? FSBlance { get; set; } @@ -107,6 +112,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement SJAmount = 0; PayFeeStatus = 0; FSBlance = 0; + NeedToPay = 0; this.F_CreateUserId = userInfo.userId; this.F_CreateUserName = userInfo.realName; RefundStatus = false; diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs index dcc3dbda8..0e2f986ab 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentEntity.cs @@ -63,7 +63,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement [Column("MOBILE")] public string Mobile { get; set; } /// - /// 总余额 + /// 应缴余额 + /// + [Column("NEEDTOPAY")] + public decimal? NeedToPay { get; set; } + /// + /// 超出应收额 /// [Column("FSBLANCE")] public decimal? FSBlance { get; set; } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs index b28f698d5..48891a909 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs @@ -231,8 +231,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - this.BaseRepository("CollegeMIS").ExecuteBySql(@"insert into FinaChargeStudent(FSId, StuNo, StuName, GenderNo, IdentityCardNo, DeptNo, MajorNo, ClassNo,Grade, Mobile, FSBlance, F_CheckMark) - select newid(), stuno, stuname, genderno, identitycardno, deptno, majorno, classno,grade, mobile, 0, 1 from StuInfoBasic a where a.checkmark = 1 and stuno not in(select stuno from FinaChargeStudent)"); + this.BaseRepository("CollegeMIS").ExecuteBySql(@"insert into FinaChargeStudent(FSId, StuNo, StuName, GenderNo, IdentityCardNo, DeptNo, MajorNo, ClassNo,Grade, Mobile,NeedToPay, FSBlance, F_CheckMark) + select newid(), stuno, stuname, genderno, identitycardno, deptno, majorno, classno,grade, mobile, 0,0, 1 from StuInfoBasic a where a.checkmark = 1 and stuno not in(select stuno from FinaChargeStudent)"); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs index 0a398a8de..d4c538bda 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardEntity.cs @@ -48,7 +48,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement /// SYear ///
    [Column("SYEAR")] - public int SYear { get; set; } + public int? SYear { get; set; } /// /// 审核标志 /// From bc905a8835d6a5fb3dcc5b307c9a217c4273a6e7 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Tue, 22 Aug 2023 16:14:10 +0800 Subject: [PATCH 35/50] =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=BC=B4=E8=B4=B9=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearService.cs | 206 +++++++++++------- .../FinaChargeStuYearItemEntity.cs | 4 +- 2 files changed, 124 insertions(+), 86 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 53d862c1e..223d7ec2b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -223,45 +223,20 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement public IEnumerable finaChargesStandardList { get; set; } public IEnumerable finaChargesStandardListGroup { get; set; } public FinaChargeStudentEntity stuitem { get; set; } + public UserInfo userInfo { get; set; } } + private Thread thread = null; public void SaveGenerateByCondition(FinaChargeStuYearEntity entity) { try { - //获取缴费学生 - var stulist = BaseRepository("CollegeMIS").FindList(m => m.F_CheckMark == true); - //获取已有年度学生缴费记录 - var oldFinaChargeStuYearList = BaseRepository("CollegeMIS").FindList(m => m.FSYear == entity.FSYear); - //获取已有年度学生缴费明细记录 - var oldFinaChargeStuYearItemList = BaseRepository("CollegeMIS").FindList(m => m.FSYear == entity.FSYear); - //获取收费标准 - var finaChargesStandardList = BaseRepository("CollegeMIS").FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType,b.priority from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); - var finaChargesStandardListGroup = BaseRepository("CollegeMIS").FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear - from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); - var innerDataEntity = new InnerDataEntity(); - innerDataEntity.oldFinaChargeStuYearList = oldFinaChargeStuYearList; - innerDataEntity.oldFinaChargeStuYearItemList = oldFinaChargeStuYearItemList; - innerDataEntity.finaChargesStandardList = finaChargesStandardList; - innerDataEntity.finaChargesStandardListGroup = finaChargesStandardListGroup; + UserInfo userInfo = LoginUserInfo.Get(); + InnerDataEntity innerDataEntity = new InnerDataEntity(); innerDataEntity.entity = entity; - //线程池优化生成速度 - ThreadPool.SetMaxThreads(50, 50); - foreach (var stuitem in stulist) - { - innerDataEntity.stuitem = stuitem; - ThreadPool.QueueUserWorkItem(GeneralInner, innerDataEntity); - } - int t1 = 0; - int t2 = 0; - while (t1 < 50) - { - ThreadPool.GetAvailableThreads(out t1, out t2); - } - //更新学生缴费总表 - BaseRepository("CollegeMIS").ExecuteBySql(@"update FinaChargeStudent set FSBlance=a.[FSBlance] - from (select isnull(sum([FSBlance]),0) as [FSBlance],StuNo from [FinaChargeStuYear] group by StuNo) a left join - FinaChargeStudent b on a.stuno=b.stuno"); + innerDataEntity.userInfo = userInfo; + thread = new Thread(ThreadMethod); + thread.Start(innerDataEntity); } catch (Exception ex) { @@ -276,15 +251,64 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public void ThreadMethod(object obj) + { + var innerDataobj = obj as InnerDataEntity; + var entity = innerDataobj.entity; + var userInfo = innerDataobj.userInfo; + //获取缴费学生 + var stulist = BaseRepository("CollegeMIS").FindList(m => m.F_CheckMark == true); + //获取已有年度学生缴费记录 + var oldFinaChargeStuYearList = BaseRepository("CollegeMIS").FindList(m => m.FSYear == entity.FSYear); + //获取已有年度学生缴费明细记录 + var oldFinaChargeStuYearItemList = BaseRepository("CollegeMIS").FindList(m => m.FSYear == entity.FSYear); + //获取收费标准 + var finaChargesStandardList = BaseRepository("CollegeMIS").FindList("select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType,b.priority from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0"); + var finaChargesStandardListGroup = BaseRepository("CollegeMIS").FindList(@"select a.Grade,a.DeptNo,a.MajorNo,sum(isnull(a.Standard,0)) as YJAmount,a.SYear + from[dbo].[FinaChargesStandard] a left join[dbo].[FinaChargeItem] b on a.ChargeItemID = b.[ChargeItemID] where b.ChargeItemType=1 and a.SYear='" + entity.FSYear + "' and a.F_DeleteMark=0 and a.CheckMark=1 and b.CheckMark=1 and b.F_DeleteMark=0 group by a.Grade, a.DeptNo, a.MajorNo, a.SYear"); + + //线程池优化生成速度 + ThreadPool.SetMaxThreads(10, 10); + foreach (var stuitem in stulist) + { + var innerDataEntity = new InnerDataEntity(); + innerDataEntity.oldFinaChargeStuYearList = oldFinaChargeStuYearList; + innerDataEntity.oldFinaChargeStuYearItemList = oldFinaChargeStuYearItemList; + innerDataEntity.finaChargesStandardList = finaChargesStandardList; + innerDataEntity.finaChargesStandardListGroup = finaChargesStandardListGroup; + innerDataEntity.entity = entity; + innerDataEntity.userInfo = userInfo; + innerDataEntity.stuitem = stuitem; + ThreadPool.QueueUserWorkItem(GeneralInner, innerDataEntity); + } + int t1 = 0; + int t2 = 0; + while (t1 < 10) + { + ThreadPool.GetAvailableThreads(out t1, out t2); + } + //更新学生缴费总表 + BaseRepository("CollegeMIS").ExecuteBySql(@"update FinaChargeStudent set NeedToPay=a.NeedToPay + from (select isnull(sum(NeedToPay),0) as NeedToPay,StuNo from [FinaChargeStuYear] group by StuNo) a left join + FinaChargeStudent b on a.stuno=b.stuno"); + try + { + thread.Abort(); + } + catch (Exception e) + { + } + } + public void GeneralInner(object innerobject) { - var db = BaseRepository("CollegeMIS").BeginTrans(); var innerDataEntity = innerobject as InnerDataEntity; var stuitem = innerDataEntity.stuitem; var finaChargesStandardList = innerDataEntity.finaChargesStandardList; var oldFinaChargeStuYearList = innerDataEntity.oldFinaChargeStuYearList; var oldFinaChargeStuYearItemList = innerDataEntity.oldFinaChargeStuYearItemList; var entity = innerDataEntity.entity; + var userInfo = innerDataEntity.userInfo; var finaChargesStandardListGroup = innerDataEntity.finaChargesStandardListGroup; try { @@ -297,50 +321,16 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement var oldFinaChargeStuYearItemListForStu = oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Select(m => m.ChargeItemCode); string oldcodeitem = string.Join(",", oldFinaChargeStuYearItemListForStu); var needinsertchargeitem = studentchargestanderdlist.Where(m => !oldcodeitem.Contains(m.ChargeItemCode)); - foreach (var finaChargesStandardEntity in needinsertchargeitem) - { - var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); - finaChargeStuYearItem.Create(); - finaChargeStuYearItem.FSYId = oldFinaChargeStuYearEntity.FSYId; - finaChargeStuYearItem.FSYear = entity.FSYear; - finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; - finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; - finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; - finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; - finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; - finaChargeStuYearItem.NeedToPay = finaChargesStandardEntity.Standard; - //主表应缴金额更新 - oldFinaChargeStuYearEntity.YJAmount += finaChargeStuYearItem.Standard; - oldFinaChargeStuYearEntity.NeedToPay += finaChargeStuYearItem.Standard; - db.Insert(finaChargeStuYearItem); - } - if (oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Sum(m => m.SJAmount) > 0) - oldFinaChargeStuYearEntity.PayFeeStatus = 4; - else - { - oldFinaChargeStuYearEntity.PayFeeStatus = 0; - } - //年度学生缴费数据主表更新 - db.Update(oldFinaChargeStuYearEntity); - - } - else - { - if (studentchargestanderdlist.Count() > 0) + var db = BaseRepository("CollegeMIS").BeginTrans(); + try { - //写入学生年度缴费数据 - var finaChargeStuYear = new FinaChargeStuYearEntity(); - finaChargeStuYear.Create(); - finaChargeStuYear.StuNo = stuitem.StuNo; - finaChargeStuYear.FSYear = entity.FSYear; - finaChargeStuYear.SJAmount = 0; - finaChargeStuYear.PayFeeStatus = 0; - //写入年度缴费明细数据 - foreach (var finaChargesStandardEntity in studentchargestanderdlist) + foreach (var finaChargesStandardEntity in needinsertchargeitem) { var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); finaChargeStuYearItem.Create(); - finaChargeStuYearItem.FSYId = finaChargeStuYear.FSYId; + finaChargeStuYearItem.F_CreateUserId = userInfo.userId; + finaChargeStuYearItem.F_CreateUserName = userInfo.realName; + finaChargeStuYearItem.FSYId = oldFinaChargeStuYearEntity.FSYId; finaChargeStuYearItem.FSYear = entity.FSYear; finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; @@ -348,21 +338,73 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; finaChargeStuYearItem.NeedToPay = finaChargesStandardEntity.Standard; - finaChargeStuYearItem.FSBlance = 0; + //主表应缴金额更新 + oldFinaChargeStuYearEntity.YJAmount += finaChargeStuYearItem.Standard; + oldFinaChargeStuYearEntity.NeedToPay += finaChargeStuYearItem.Standard; db.Insert(finaChargeStuYearItem); } - finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; - finaChargeStuYear.NeedToPay = finaChargeStuYear.YJAmount; - finaChargeStuYear.FSBlance = 0; - - db.Insert(finaChargeStuYear); + if (oldFinaChargeStuYearItemList.Where(m => m.FSYId == oldFinaChargeStuYearEntity.FSYId).Sum(m => m.SJAmount) > 0) + oldFinaChargeStuYearEntity.PayFeeStatus = 4; + else + { + oldFinaChargeStuYearEntity.PayFeeStatus = 0; + } + //年度学生缴费数据主表更新 + db.Update(oldFinaChargeStuYearEntity); + db.Commit(); + } + catch (Exception e) + { + db.Rollback(); + } + } + else + { + if (studentchargestanderdlist.Count() > 0) + { + var db = BaseRepository("CollegeMIS").BeginTrans(); + try + { + //写入学生年度缴费数据 + var finaChargeStuYear = new FinaChargeStuYearEntity(); + finaChargeStuYear.Create(); + finaChargeStuYear.StuNo = stuitem.StuNo; + finaChargeStuYear.FSYear = entity.FSYear; + finaChargeStuYear.SJAmount = 0; + finaChargeStuYear.PayFeeStatus = 0; + //写入年度缴费明细数据 + foreach (var finaChargesStandardEntity in studentchargestanderdlist) + { + var finaChargeStuYearItem = new FinaChargeStuYearItemEntity(); + finaChargeStuYearItem.Create(); + finaChargeStuYearItem.F_CreateUserId = userInfo.userId; + finaChargeStuYearItem.F_CreateUserName = userInfo.realName; + finaChargeStuYearItem.FSYId = finaChargeStuYear.FSYId; + finaChargeStuYearItem.FSYear = entity.FSYear; + finaChargeStuYearItem.ChargeItemCode = finaChargesStandardEntity.ChargeItemCode; + finaChargeStuYearItem.ChargeItemName = finaChargesStandardEntity.ChargeItemName; + finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; + finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; + finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; + finaChargeStuYearItem.NeedToPay = finaChargesStandardEntity.Standard; + finaChargeStuYearItem.FSBlance = 0; + db.Insert(finaChargeStuYearItem); + } + finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; + finaChargeStuYear.NeedToPay = finaChargeStuYear.YJAmount; + finaChargeStuYear.FSBlance = 0; + db.Insert(finaChargeStuYear); + db.Commit(); + } + catch (Exception e) + { + db.Rollback(); + } } } - db.Commit(); } catch (Exception ex) { - db.Rollback(); if (ex is ExceptionEx) { throw; @@ -372,8 +414,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement throw ExceptionEx.ThrowServiceException(ex); } } - - } public IEnumerable GetYearList() diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs index a56f246cf..cc390ce98 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemEntity.cs @@ -107,14 +107,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { this.FSYIId = Guid.NewGuid().ToString(); this.F_CreateDate = DateTime.Now; - UserInfo userInfo = LoginUserInfo.Get(); + F_DeleteMark = false; SJAmount = 0; PayFeeStatus = 0; FSBlance = 0; NeedToPay = 0; - this.F_CreateUserId = userInfo.userId; - this.F_CreateUserName = userInfo.realName; RefundStatus = false; } /// From b940fde272cb3cb065469ad30a468126b6e08ceb Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Tue, 22 Aug 2023 18:26:55 +0800 Subject: [PATCH 36/50] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BE=85=E7=BC=B4?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearItemService.cs | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index 05904acbd..275f8dcf6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -339,10 +339,15 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; - finaChargeStuYearItem.FSBlance = -finaChargeStuYearItem.Standard; + finaChargeStuYearItem.NeedToPay = finaChargesStandardEntity.Standard; + finaChargeStuYearItem.FSBlance = 0; + var loginUserInfo = LoginUserInfo.Get(); + finaChargeStuYearItem.F_CreateUserId = loginUserInfo.userId; + finaChargeStuYearItem.F_CreateUserName = loginUserInfo.realName; db.Insert(finaChargeStuYearItem); finaChargeStuYear.YJAmount = finaChargeStuYearItem.Standard; - finaChargeStuYear.FSBlance = -finaChargeStuYear.YJAmount; + finaChargeStuYear.NeedToPay+= finaChargeStuYearItem.Standard; + finaChargeStuYear.FSBlance = 0; db.Insert(finaChargeStuYear); } else @@ -360,11 +365,16 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYearItem.ChargeItemType = finaChargesStandardEntity.ChargeItemType; finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; - finaChargeStuYearItem.FSBlance = -finaChargeStuYearItem.Standard; + finaChargeStuYearItem.NeedToPay = finaChargeStuYearItem.Standard; db.Insert(finaChargeStuYearItem); //更新主表 oldFinaChargeStuYearEntity.YJAmount+= finaChargeStuYearItem.Standard; - oldFinaChargeStuYearEntity.FSBlance = -oldFinaChargeStuYearEntity.YJAmount; + oldFinaChargeStuYearEntity.NeedToPay += finaChargeStuYearItem.Standard; + //if (oldFinaChargeStuYearEntity.FSBlance>0) + //{ + + //} + //oldFinaChargeStuYearEntity.FSBlance -= finaChargeStuYearItem.Standard; db.Update(oldFinaChargeStuYearEntity); } else @@ -388,8 +398,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } db.Commit(); //更新学生缴费总表 - BaseRepository("CollegeMIS").ExecuteBySql(@"update FinaChargeStudent set FSBlance=a.[FSBlance] - from (select isnull(sum([FSBlance]),0) as [FSBlance],StuNo from [FinaChargeStuYear] group by StuNo) a left join + BaseRepository("CollegeMIS").ExecuteBySql(@"update FinaChargeStudent set NeedToPay=a.[NeedToPay] + from (select isnull(sum([NeedToPay]),0) as [NeedToPay],StuNo from [FinaChargeStuYear] group by StuNo) a left join FinaChargeStudent b on a.stuno=b.stuno"); } return snum + "|" + fnum; From a21d88c413ad25762acc496f6ed62e3d6c914ddc Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Wed, 23 Aug 2023 18:08:28 +0800 Subject: [PATCH 37/50] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E7=BA=BF=E4=B8=8B?= =?UTF-8?q?=E7=BC=B4=E8=B4=B9=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/TeachSwitchController.cs | 6 + .../Views/TeachSwitch/FinaCharge.cshtml | 24 +++ .../Views/TeachSwitch/FinaCharge.js | 80 ++++++++++ .../Controllers/FinaChargeRefundController.cs | 6 + .../FinaChargeStuYearController.cs | 33 +++- .../Views/FinaChargeRefund/FormView.cshtml | 35 +++++ .../Views/FinaChargeRefund/FormView.js | 37 +++++ .../Views/FinaChargeStuBalance/Index.js | 10 +- .../FinaChargeStuYear/IndexForStudent.js | 7 +- .../FinaChargeStuYear/IndexForTeacher.js | 25 +++- .../Views/FinaChargeStuYearItem/Index.js | 5 +- .../IndexForRefund.cshtml | 1 + .../FinaChargeStuYearItem/IndexForRefund.js | 28 +++- .../FinaChargeStuYearItem/IndexForTeacher.js | 5 +- .../Content/excel/线下缴费记录.xls | Bin 23552 -> 23552 bytes .../Learun.Application.Web.csproj | 4 + .../FinaChargeStuYearApi.cs | 14 +- .../ClassInfo/ClassInfoBLL.cs | 55 +++++++ .../ClassInfo/ClassInfoIBLL.cs | 3 + .../ClassInfo/ClassInfoService.cs | 56 +++++++ .../TeachSwitch/TeachSwitchService.cs | 4 + .../FinaChargeRefundService.cs | 8 +- .../FinaChargeStuOrderService.cs | 141 ++++++++++-------- .../FinaChargeStuYearItemService.cs | 5 - 24 files changed, 480 insertions(+), 112 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/TeachSwitchController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/TeachSwitchController.cs index fb61ddcca..473befdba 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/TeachSwitchController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Controllers/TeachSwitchController.cs @@ -28,6 +28,12 @@ namespace Learun.Application.Web.Areas.EducationalAdministration.Controllers { return View(); } + + [HttpGet] + public ActionResult FinaCharge() + { + return View(); + } /// /// 表单页 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.cshtml new file mode 100644 index 000000000..718122f8e --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.cshtml @@ -0,0 +1,24 @@ +@{ + ViewBag.Title = "教师注册功能开关控制"; + Layout = "~/Views/Shared/_Index.cshtml"; +} +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +  修改 +
    +
    +
    +
    +
    +
    +
    +@Html.AppendJsFile("/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.js new file mode 100644 index 000000000..13a678d06 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/EducationalAdministration/Views/TeachSwitch/FinaCharge.js @@ -0,0 +1,80 @@ +/* * 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园(http://www.learun.cn) + * Copyright (c) 2013-2018 北京泉江科技有限公司 + * 创建人:超级管理员 + * 日 期:2019-07-08 17:19 + * 描 述:教师注册功能开关控制 + */ +var refreshGirdData; +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + page.initGird(); + page.bind(); + }, + bind: function () { + // 刷新 + $('#lr_refresh').on('click', function () { + location.reload(); + }); + + // 编辑 + $('#lr_edit').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('ID'); + if (learun.checkrow(keyValue)) { + learun.layerForm({ + id: 'form', + title: '编辑', + url: top.$.rootUrl + '/EducationalAdministration/TeachSwitch/Form?keyValue=' + keyValue, + width: 600, + height: 400, + callBack: function (id) { + return top[id].acceptClick(refreshGirdData); + } + }); + } + }); + + }, + // 初始化列表 + initGird: function () { + $('#gridtable').jfGrid({ + url: top.$.rootUrl + '/EducationalAdministration/TeachSwitch/GetPageList', + headData: [ + { + label: "缴费开关", name: "type", width: 300, align: "left", + formatter: function (val) { + if (val == 'jf') { + return '缴费开关'; + } + } + }, + { + label: "是否开启", name: "status", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('dataItem', { + key: value, + code: 'YesOrNoInt', + callback: function (_data) { + callback(_data.text); + } + }); + } + }, + ], + mainId: 'ID', + isPage: true + }); + page.search(); + }, + search: function (param) { + param = param || {}; + param.JF = 1; + $('#gridtable').jfGridSet('reload', { queryJson: JSON.stringify(param) }); + } + }; + refreshGirdData = function () { + page.search(); + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs index 03e2b9a9a..b4be119fb 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs @@ -39,6 +39,12 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { return View(); } + + [HttpGet] + public ActionResult FormView() + { + return View(); + } #endregion #region 获取数据 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs index 4fd3c6c8d..5b5921a16 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -28,7 +28,8 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL(); private FinaChargeStuOrderIBLL finaChargeStuOrderIbll = new FinaChargeStuOrderBLL(); - private EADateArrangeIBLL eaDateArrangeIbll = new EADateArrangeBLL(); + private TeachSwitchIBLL teachSwitchIbll = new TeachSwitchBLL(); + private ClassInfoIBLL classInfoIbll = new ClassInfoBLL(); #region 视图功能 @@ -88,12 +89,8 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers [AjaxOnly] public ActionResult IfCanPay() { - var nowyearsemester = Common.GetSemesterAndYear(); - var eastatus = eaDateArrangeIbll.GetEADateArrangeEntity("17"); - if (eastatus != null && eastatus.CheckMark == "1" && - eastatus.AcademicYearNo == nowyearsemester.AcademicYearShort - && eastatus.Semester == nowyearsemester.Semester && eastatus.MakeDate < DateTime.Now && - eastatus.EndDate > DateTime.Now) + var eastatus = teachSwitchIbll.GetFirst("jf"); + if (eastatus != null && eastatus.status == "1") { return Success(new { success = "1" }); } @@ -108,6 +105,28 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers var data = finaChargeStuYearIBLL.GetTree(); return Success(data); } + + [HttpGet] + [AjaxOnly] + public ActionResult GetClassByEmpNo() + { + var data = classInfoIbll.GetClassByEmpNo(LoginUserInfo.Get().account); + return Success(data); + } + [HttpGet] + [AjaxOnly] + public ActionResult GetDeptByEmpNo() + { + var data = classInfoIbll.GetDeptByEmpNo(LoginUserInfo.Get().account); + return Success(data); + } + [HttpGet] + [AjaxOnly] + public ActionResult GetMajorByEmpNo() + { + var data = classInfoIbll.GetMajorByEmpNo(LoginUserInfo.Get().account); + return Success(data); + } /// /// 获取页面显示列表数据 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.cshtml new file mode 100644 index 000000000..0dc74b5b8 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.cshtml @@ -0,0 +1,35 @@ +@{ + ViewBag.Title = "FinaChargeRefund"; + Layout = "~/Views/Shared/_Form.cshtml"; +} +
    +
    +
    缴费项目编号
    + +
    +
    +
    缴费项目名称
    + +
    +
    +
    退费方式
    +
    +
    +
    +
    退费金额
    + +
    +
    +
    操作时间
    + +
    +
    +
    操作人
    + +
    +
    +
    备注
    + +
    +
    +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js new file mode 100644 index 000000000..7a5ada0ee --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js @@ -0,0 +1,37 @@ +/* * 版 本 Learun-ADMS V7.0.6 力软敏捷开发框架(http://www.learun.cn) + * Copyright (c) 2013-2020 力软信息技术(苏州)有限公司 + * 创建人:超级管理员 + * 日 期:2023-08-18 18:07 + * 描 述:FinaChargeRefund + */ +var acceptClick; +var keyValue = request('keyValue'); +var bootstrap = function ($, learun) { + "use strict"; + var page = { + init: function () { + $('.lr-form-wrap').lrscroll(); + page.bind(); + page.initData(); + }, + bind: function () { + $('#RType').lrDataItemSelect({ code: 'RType' }); + }, + initData: function () { + if (!!keyValue) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/GetFormData?keyValue=' + keyValue, function (data) { + for (var id in data) { + if (!!data[id].length && data[id].length > 0) { + $('#' + id ).jfGridSet('refreshdata', data[id]); + } + else { + $('[data-table="' + id + '"]').lrSetFormData(data[id]); + } + } + }); + } + } + }; + + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js index 5a719781a..df60c5809 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js @@ -62,12 +62,12 @@ var bootstrap = function ($, learun) { { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left" }, { label: "收费标准", name: "Standard", width: 100, align: "left" }, - { label: "本次待缴金额", name: "DJAmount", width: 100, align: "left" }, - { label: "变动金额", name: "PaymentAmount", width: 100, align: "left" }, - { label: "剩余待缴金额", name: "QJAmount", width: 100, align: "left" }, - { label: "当前余额", name: "OldBalance", width: 100, align: "left" }, + { label: "本次应缴余额", name: "DJAmount", width: 100, align: "left" }, + { label: "缴费金额", name: "PaymentAmount", width: 100, align: "left" }, + { label: "剩余应缴余额", name: "QJAmount", width: 100, align: "left" }, + { label: "当前超出应收额", name: "OldBalance", width: 100, align: "left" }, { label: "本次变动金额", name: "ChangeAmount", width: 100, align: "left" }, - { label: "本次余额", name: "NowBalance", width: 100, align: "left" }, + { label: "超出应收额", name: "NowBalance", width: 100, align: "left" }, { label: "变动时间", name: "ChangeDate", width: 150, align: "left" }, { label: "变动原因", name: "ChangeType", width: 100, align: "left", formatter: function (cellvalue, row) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js index 4e52b0255..0b386ea48 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForStudent.js @@ -143,9 +143,10 @@ var bootstrap = function ($, learun) { }, { label: "年级", name: "Grade", width: 100, align: "left" }, { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, - { label: "应缴金额", name: "YJAmount", width: 100, align: "left" }, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, - { label: "缴费年度余额", name: "FSBlance", width: 100, align: "left" }, + { label: "收费标准", name: "YJAmount", width: 80, align: "left" }, + { label: "缴费金额", name: "SJAmount", width: 80, align: "left" }, + { label: "应缴余额", name: "NeedToPay", width: 80, align: "left" }, + { label: "超出应收额", name: "FSBlance", width: 80, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatter: function (cellvalue, row) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js index 72f1498eb..6a7a2b132 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/IndexForTeacher.js @@ -25,9 +25,21 @@ var bootstrap = function ($, learun) { $('#multiple_condition_query').lrMultipleQuery(function (queryJson) { page.search(queryJson); }, 250, 400); - $('#DeptNo').lrDataSourceSelect({ code: 'CdDeptInfo', value: 'deptno', text: 'deptname' }); - $('#MajorNo').lrDataSourceSelect({ code: 'CdMajorInfo', value: 'majorno', text: 'majorname' }); - $('#ClassNo').lrDataSourceSelect({ code: 'bjsj', value: 'classno', text: 'classname' }); + $('#DeptNo').lrselect({ + url: "/ReceiveSendFeeManagement/FinaChargeStuYear/GetDeptByEmpNo", + value: "DeptNo", + text: "DeptName" + }); + $('#MajorNo').lrselect({ + url: "/ReceiveSendFeeManagement/FinaChargeStuYear/GetMajorByEmpNo", + value: "MajorNo", + text: "MajorName" + }); + $('#ClassNo').lrselect({ + url:"/ReceiveSendFeeManagement/FinaChargeStuYear/GetClassByEmpNo", + value: "ClassNo", + text: "ClassName" + }); $('#PayFeeStatus').lrDataItemSelect({ code: 'PayStatus' }); // 刷新 $('#lr_refresh').on('click', function () { @@ -106,9 +118,10 @@ var bootstrap = function ($, learun) { }, { label: "年级", name: "Grade", width: 80, align: "left" }, { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, - { label: "应缴金额", name: "YJAmount", width: 100, align: "left" }, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, - { label: "缴费年度余额(负数代表欠缴)", name: "FSBlance", width: 180, align: "left" }, + { label: "收费标准", name: "YJAmount", width: 80, align: "left" }, + { label: "缴费金额", name: "SJAmount", width: 80, align: "left" }, + { label: "应缴余额", name: "NeedToPay", width: 80, align: "left" }, + { label: "超出应收额", name: "FSBlance", width: 80, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatter: function (cellvalue, row) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js index b23bec82d..738c36e48 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/Index.js @@ -143,8 +143,9 @@ var bootstrap = function ($, learun) { } }, { label: "收费标准", name: "Standard", width: 100, align: "left" }, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, - { label: "缴费余额", name: "FSBlance", width: 100, align: "left" }, + { label: "缴费金额", name: "SJAmount", width: 100, align: "left" }, + { label: "应缴余额", name: "NeedToPay", width: 100, align: "left" }, + { label: "超出应收额", name: "FSBlance", width: 100, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatterAsync: function (callback, value, row, op, $cell) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.cshtml index 2be774001..d26428af6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.cshtml @@ -56,6 +56,7 @@ diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js index 1b3db4124..07ff701be 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForRefund.js @@ -58,6 +58,29 @@ var bootstrap = function ($, learun) { }); } }); + //查看 + $('#lr_view').on('click', function () { + var keyValue = $('#gridtable').jfGridValue('FSYIId'); + var RefundStatus = $('#gridtable').jfGridValue('RefundStatus'); + if (learun.checkrow(keyValue)) { + if (keyValue.indexOf(',') != -1) { + learun.alert.error("查看操作只支持单条记录"); + return; + } + if (RefundStatus==false) { + learun.alert.error("未进行退费操作,请核对。"); + return; + } + learun.layerForm({ + id: 'formview', + title: '查看', + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/FormView?keyValue=' + keyValue, + width: 600, + height: 400, + btn:null + }); + } + }); }, // 初始化列表 initGird: function () { @@ -108,8 +131,9 @@ var bootstrap = function ($, learun) { } }, { label: "收费标准", name: "Standard", width: 100, align: "left" }, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, - { label: "缴费余额", name: "FSBlance", width: 100, align: "left" }, + { label: "缴费金额", name: "SJAmount", width: 100, align: "left" }, + { label: "应缴余额", name: "NeedToPay", width: 100, align: "left" }, + { label: "超出应收额", name: "FSBlance", width: 100, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatterAsync: function (callback, value, row, op, $cell) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js index ca0a72d71..f66fb1a33 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYearItem/IndexForTeacher.js @@ -88,8 +88,9 @@ var bootstrap = function ($, learun) { } }, { label: "收费标准", name: "Standard", width: 100, align: "left" }, - { label: "实缴金额", name: "SJAmount", width: 100, align: "left" }, - { label: "缴费余额", name: "FSBlance", width: 100, align: "left" }, + { label: "缴费金额", name: "SJAmount", width: 100, align: "left" }, + { label: "应缴余额", name: "NeedToPay", width: 100, align: "left" }, + { label: "超出应收额", name: "FSBlance", width: 100, align: "left" }, { label: "缴费状态", name: "PayFeeStatus", width: 100, align: "left", formatterAsync: function (callback, value, row, op, $cell) { diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/线下缴费记录.xls b/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/线下缴费记录.xls index d8cec16f6f93bed6eb25251c0f65f944cbe90811..17e033b229d760a9422304e8317986bfb899dd4d 100644 GIT binary patch delta 778 zcmZqJ!Pu~aaf2dry%G~+cXY77A%h6R9R>yl4u%PgK#HM_0`VjD29_VlEE)~Qo&Ik-4Ob3B1Fu@_tiB+75K^$y; zJ!VjIVYQe6XaRPI+F%uDWU$9-F$04gvii-ktl3(s8v39hW@8A>NKGvKKMkcyl4u%PgK#HM_0`VjD29_VlEE)~Qo&Ik-4Ob3B1Fu@_tiB+75K^$y; zJ!VjIVYQe6XaRPI+F%uDWU$9-F$04gvii-ktl3(sruv{DW@8A>NKGvA@t}~DYQ3niqSal5<7+!Aero!GagxPOR + @@ -1632,6 +1633,7 @@ + @@ -7995,6 +7997,8 @@ + + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs index d3a064874..708a0a401 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs @@ -31,7 +31,7 @@ namespace Learun.Application.WebApi.Modules { private FinaChargeStuYearIBLL finaChargeStuYearIBLL = new FinaChargeStuYearBLL(); private FinaChargeStuOrderIBLL finaChargeStuOrderIbll = new FinaChargeStuOrderBLL(); - private EADateArrangeIBLL eaDateArrangeIbll = new EADateArrangeBLL(); + private TeachSwitchIBLL teachSwitchIbll = new TeachSwitchBLL(); public FinaChargeStuYearApi() : base("/ReceiveSendFeeManagement/FinaChargeStuYearApi") @@ -51,12 +51,8 @@ namespace Learun.Application.WebApi.Modules public Response GetPayfeeList(dynamic _) { - var nowyearsemester = Common.GetSemesterAndYear(); - var eastatus = eaDateArrangeIbll.GetEADateArrangeEntity("17"); - if (eastatus != null && eastatus.CheckMark == "1" && - eastatus.AcademicYearNo == nowyearsemester.AcademicYearShort - && eastatus.Semester == nowyearsemester.Semester && eastatus.MakeDate < DateTime.Now && - eastatus.EndDate > DateTime.Now) + var eastatus = teachSwitchIbll.GetFirst("jf"); + if (eastatus != null && eastatus.status == "1") { ReqPageParam parameter = this.GetReqData(); var data = finaChargeStuYearIBLL.GetPageList(parameter.pagination, parameter.queryJson); @@ -73,7 +69,7 @@ namespace Learun.Application.WebApi.Modules { return Fail("当前不在缴费时间范围"); } - + } public Response GetPayfeeInfo(dynamic _) @@ -206,7 +202,7 @@ namespace Learun.Application.WebApi.Modules bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); //二维码图片的名称 string filename = orderId; - if (!DirFileHelper.IsExistFile(QRCodeFile+"/Content/images/QRCode/")) + if (!DirFileHelper.IsExistFile(QRCodeFile + "/Content/images/QRCode/")) { Directory.CreateDirectory(QRCodeFile + "/Content/images/QRCode/"); } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoBLL.cs index d23fd75a4..dffc5c2b1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoBLL.cs @@ -256,6 +256,61 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration } } + public IEnumerable GetClassByEmpNo(string EmpNo) + { + try + { + return classInfoService.GetClassByEmpNo(EmpNo); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + public IEnumerable GetDeptByEmpNo(string EmpNo) + { + try + { + return classInfoService.GetDeptByEmpNo(EmpNo); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + public IEnumerable GetMajorByEmpNo(string EmpNo) + { + try + { + return classInfoService.GetMajorByEmpNo(EmpNo); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoIBLL.cs index d6972f2bf..41c5d33f7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoIBLL.cs @@ -62,5 +62,8 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration IEnumerable GetAllClass(); IEnumerable GetClassByMajorNo(string majorNo); + IEnumerable GetClassByEmpNo(string EmpNo); + IEnumerable GetDeptByEmpNo(string EmpNo); + IEnumerable GetMajorByEmpNo(string EmpNo); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoService.cs index 22f3f3772..b5d8b2ad3 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/ClassInfo/ClassInfoService.cs @@ -348,5 +348,61 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration } } } + + public IEnumerable GetClassByEmpNo(string EmpNo) + { + try + { + return this.BaseRepository("CollegeMIS").FindList(m => m.CheckMark == true && m.ClassDiredctorNo == EmpNo); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + public IEnumerable GetDeptByEmpNo(string EmpNo) + { + try + { + return this.BaseRepository("CollegeMIS").FindList("select b.* from ClassInfo a left join cddept b on a.deptno=b.deptno where a.ClassDiredctorNo='"+EmpNo+ "' and a.CheckMark=1"); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } + + public IEnumerable GetMajorByEmpNo(string EmpNo) + { + try + { + return this.BaseRepository("CollegeMIS").FindList("select b.* from ClassInfo a left join cdmajor b on a.majorno=b.majorno where a.ClassDiredctorNo='" + EmpNo + "' and a.checkmark=1 and b.checkmark=1"); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/TeachSwitch/TeachSwitchService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/TeachSwitch/TeachSwitchService.cs index 97e966393..0238cb421 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/TeachSwitch/TeachSwitchService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/EducationalAdministration/TeachSwitch/TeachSwitchService.cs @@ -84,6 +84,10 @@ namespace Learun.Application.TwoDevelopment.EducationalAdministration var queryParam = queryJson.ToJObject(); // 虚拟参数 var dp = new DynamicParameters(new { }); + if (!queryParam["JF"].IsEmpty()) + { + strSql.Append(" AND t.type ='jf' "); + } return this.BaseRepository().FindList(strSql.ToString(), dp, pagination); } catch (Exception ex) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs index caabd62ae..514e83ec4 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs @@ -155,11 +155,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //退费状态修改,余额归零 finaChargeStuYearItemEntity.RefundStatus = true; finaChargeStuYearItemEntity.FSBlance = 0; - //退费后实缴值也要更新 - finaChargeStuYearItemEntity.SJAmount = finaChargeStuYearItemEntity.SJAmount- finaChargeRefundEntity.Amount; db.Update(finaChargeStuYearItemEntity); //FinaChargeStuYear年度余额计算 - db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount-"+ finaChargeRefundEntity.Amount + ",FSBlance=FSBlance-" + finaChargeRefundEntity.Amount + " where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + db.ExecuteBySql("update FinaChargeStuYear set FSBlance=FSBlance-" + finaChargeRefundEntity.Amount + " where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); //学生余额扣减 db.ExecuteBySql("update FinaChargeStudent set FSBlance=FSBlance-" + finaChargeRefundEntity.Amount + " where StuNo='" + finaChargeStuYearItemEntity.StuNo + "'"); //交易流水记录 @@ -172,10 +170,10 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuBalance.ChargeItemName = finaChargeRefundEntity.ChargeItemName; finaChargeStuBalance.Standard = finaChargeStuYearItemEntity.Standard; finaChargeStuBalance.DJAmount = 0; - finaChargeStuBalance.PaymentAmount = -finaChargeRefundEntity.Amount; + finaChargeStuBalance.PaymentAmount =0; finaChargeStuBalance.QJAmount = 0; finaChargeStuBalance.OldBalance = finaChargeRefundEntity.Amount; - finaChargeStuBalance.ChangeAmount = finaChargeStuBalance.PaymentAmount; + finaChargeStuBalance.ChangeAmount = finaChargeRefundEntity.Amount; finaChargeStuBalance.NowBalance = 0; finaChargeStuBalance.ChangeDate = DateTime.Now; finaChargeStuBalance.ChangeType = 4; diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs index e9743f94a..9c0a3c6bb 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -269,6 +269,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { failDt.Columns.Add(dc.ColumnName, dc.DataType); } + //导入订单 + var oldOrderList = BaseRepository("CollegeMIS").FindList("select * from FinaChargeStuOrder where OrderType='2' "); //缴费方式字典 var dataitemlist = datarItemService.GetDetailList("PayTypeOffLine"); //获取已有年度学生缴费记录 @@ -285,7 +287,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement FinaChargeStuYearEntity finaChargeStuYearEntity = null; int ChangeType = 0; //检测是否有空值 - if (dr[0].ToString() == "" || dr[1].ToString() == "" || dr[2].ToString() == "" || dr[3].ToString() == "" || dr[4].ToString() == "" || dr[5].ToString() == "" || dr[6].ToString() == "") + if (dr[0].ToString() == "" || dr[1].ToString() == "" || dr[2].ToString() == "" || dr[3].ToString() == "" || dr[4].ToString() == "" || dr[5].ToString() == "") { throw new Exception("行内数据有空值,不能为空!"); } @@ -311,7 +313,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //筛选不在收费学生表内的数据 finaChargeStuYearEntity = oldFinaChargeStuYearList.FirstOrDefault(m => m.StuNo == dr[0].ToString() && m.FSYear == payyearresult); finaChargeStuYearItemList = oldFinaChargeStuYearItemList.Where(m => m.StuNo == dr[0].ToString() && m.StuName == dr[1].ToString() && m.FSYear == payyearresult); - if (finaChargeStuYearEntity == null || finaChargeStuYearItemList.Count()==0) + if (finaChargeStuYearEntity == null || finaChargeStuYearItemList.Count() == 0) { throw new Exception("【年度收费学生】不存在,请核对!"); } @@ -324,52 +326,39 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } //缴费方式判断 - var itemcodeentity = dataitemlist.FirstOrDefault(m=>m.F_ItemName==dr[6].ToString()); - if (itemcodeentity==null) + var itemcodeentity = dataitemlist.FirstOrDefault(m => m.F_ItemName == dr[4].ToString()); + if (itemcodeentity == null) { throw new Exception("【缴费方式】只能为现金或贷款,请核对!"); } int itemcodeint = 0; - if (!int.TryParse(itemcodeentity.F_ItemCode,out itemcodeint)) + if (!int.TryParse(itemcodeentity.F_ItemCode, out itemcodeint)) { throw new Exception("【线下缴费方式字典(PayTypeOffLine)】值code只能为整数,请核对!"); } - //缴费明细判断 - finaChargeStuYearItemEntity =finaChargeStuYearItemList.FirstOrDefault(m=>m.ChargeItemCode==dr[3].ToString()); - if (finaChargeStuYearItemEntity==null) + //线下订单去重 + if (oldOrderList.Count(m => m.BankOrder == dr[5].ToString()) > 0) { - throw new Exception("【年度学生收费明细】不存在,请核对!"); - } - else - { - //筛选已缴费的学生 - if (finaChargeStuYearItemEntity.PayFeeStatus == 1) - { - throw new Exception("【年度学生收费明细】已缴费,请核对!"); - } + throw new Exception("【线下缴费编号】已存在,请核对!"); } + //开始导入 //生成订单 - FinaChargeStuOrderEntity orderEntity=new FinaChargeStuOrderEntity(); + FinaChargeStuOrderEntity orderEntity = new FinaChargeStuOrderEntity(); orderEntity.Create(); - orderEntity.FSYId = finaChargeStuYearItemEntity.FSYId; - orderEntity.YearNo = finaChargeStuYearItemEntity.FSYear; - orderEntity.StuNo = finaChargeStuYearItemEntity.StuNo; + orderEntity.FSYId = finaChargeStuYearEntity.FSYId; + orderEntity.YearNo = finaChargeStuYearEntity.FSYear; + orderEntity.StuNo = finaChargeStuYearEntity.StuNo; Random ran = new Random(); orderEntity.orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); - orderEntity.YJAmount = finaChargeStuYearItemEntity.Standard; - orderEntity.SJAmount = dresult; - orderEntity.DJAmount = orderEntity.YJAmount-orderEntity.SJAmount; - if (orderEntity.DJAmount < 0)//有结余 - { - orderEntity.NowBlance = Math.Abs(orderEntity.DJAmount.Value); - orderEntity.DJAmount = 0; - } orderEntity.PlaceOrderTime = DateTime.Now; orderEntity.Status = 1; orderEntity.OrderType = 2; - db.Insert(orderEntity); - //订单明细 + orderEntity.BankOrder = dr[5].ToString(); + //历史固定项目未缴费和部分缴费的数据 + var oldnotpaylist = oldFinaChargeStuYearItemList.Where(m => m.PayFeeStatus != 1).OrderBy(m => m.priority).ToList(); + finaChargeStuYearItemEntity = oldnotpaylist.FirstOrDefault(); + //订单明细 写入优先级最高的一条为暂存位置 FinaChargeStuOrderDetailEntity detail = new FinaChargeStuOrderDetailEntity(); detail.Create(); detail.FCSOId = orderEntity.Id; @@ -383,21 +372,27 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement detail.NowBlance = Math.Abs(detail.DJAmount.Value); detail.DJAmount = 0; } + //主表金额根据子表计算 + orderEntity.YJAmount = detail.YJAmount; + orderEntity.SJAmount = dresult; + orderEntity.DJAmount = detail.DJAmount; + orderEntity.NowBlance = detail.NowBlance; + db.Insert(orderEntity); db.Insert(detail); //判断实缴金额是否缴清费用 decimal sjcount = Convert.ToDecimal(db.FindObject("select isnull(sum(SJAmount),0) from FinaChargeStuOrder where StuNo='" + orderEntity.StuNo + "' and Status=1 and YearNo='" + orderEntity.YearNo + "' ")); //增加本次缴费金额 sjcount = sjcount + orderEntity.SJAmount.Value; - decimal yjcount = orderEntity.YJAmount.Value; + decimal yjcount = finaChargeStuYearEntity.YJAmount.Value; if (sjcount >= yjcount) { //更新缴费状态 - db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='1' where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='1' where FSYId='" + finaChargeStuYearEntity.FSYId + "'"); } else//更新部分缴费状态 { //更新缴费状态 - db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='4' where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='4' where FSYId='" + finaChargeStuYearEntity.FSYId + "'"); } //费用变更明细 FinaChargeStuBalanceEntity finaChargeStuBalanceEntity = new FinaChargeStuBalanceEntity(); @@ -408,24 +403,40 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuBalanceEntity.ChargeItemCode = detail.ChargeItemCode; finaChargeStuBalanceEntity.ChargeItemName = detail.ChargeItemName; finaChargeStuBalanceEntity.Standard = finaChargeStuYearItemEntity.Standard; - finaChargeStuBalanceEntity.DJAmount = finaChargeStuYearItemEntity.FSBlance < 0 ? Math.Abs(finaChargeStuYearItemEntity.FSBlance.Value) : 0; + finaChargeStuBalanceEntity.DJAmount = finaChargeStuYearItemEntity.NeedToPay; finaChargeStuBalanceEntity.PaymentAmount = dresult; - finaChargeStuBalanceEntity.QJAmount = finaChargeStuYearItemEntity.Standard - dresult>0?finaChargeStuYearItemEntity.Standard - dresult:0; - finaChargeStuBalanceEntity.OldBalance = finaChargeStuYearItemEntity.FSBlance <= 0? 0: finaChargeStuYearItemEntity.FSBlance; - finaChargeStuBalanceEntity.ChangeAmount = dresult; - finaChargeStuBalanceEntity.NowBalance = finaChargeStuYearItemEntity.FSBlance + dresult > 0? finaChargeStuYearItemEntity.FSBlance + dresult: 0; + finaChargeStuBalanceEntity.QJAmount = finaChargeStuYearItemEntity.NeedToPay - dresult > 0 ? finaChargeStuYearItemEntity.NeedToPay - dresult : 0; + finaChargeStuBalanceEntity.OldBalance = finaChargeStuYearItemEntity.FSBlance; + if (detail.NowBlance > 0) + { + finaChargeStuBalanceEntity.ChangeAmount = dresult - finaChargeStuBalanceEntity.DJAmount; + finaChargeStuBalanceEntity.NowBalance = finaChargeStuBalanceEntity.ChangeAmount; + } + else + { + finaChargeStuBalanceEntity.ChangeAmount = 0; + finaChargeStuBalanceEntity.NowBalance = 0; + } finaChargeStuBalanceEntity.ChangeDate = DateTime.Now; finaChargeStuBalanceEntity.ChangeType = itemcodeint; db.Insert(finaChargeStuBalanceEntity); //FinaChargeStuYearItem表 - finaChargeStuYearItemEntity.SJAmount = finaChargeStuYearItemEntity.SJAmount+ dresult; - finaChargeStuYearItemEntity.FSBlance = finaChargeStuYearItemEntity.FSBlance+ dresult; - finaChargeStuYearItemEntity.PayFeeStatus = finaChargeStuYearItemEntity.FSBlance>0?1:4; + finaChargeStuYearItemEntity.SJAmount = finaChargeStuYearItemEntity.SJAmount + dresult; + if (detail.NowBlance > 0) + { + finaChargeStuYearItemEntity.FSBlance = detail.NowBlance; + finaChargeStuYearItemEntity.NeedToPay = 0; + } + else + { + finaChargeStuYearItemEntity.NeedToPay = finaChargeStuYearItemEntity.Standard - dresult; + } + finaChargeStuYearItemEntity.PayFeeStatus = finaChargeStuYearItemEntity.FSBlance > 0 ? 1 : 4; db.Update(finaChargeStuYearItemEntity); //FinaChargeStuYear表 - db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount+"+ dresult + ",FSBlance=FSBlance+"+dresult+ ",PayFeeStatus=(case when(FSBlance+"+ dresult + ">=0) then 1 else 4 end) where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount+" + dresult + ",NeedToPay=(case when(NeedToPay-"+ dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end),PayFeeStatus=(case when(NeedToPay-" + dresult + ">=0) then 1 else 4 end) where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); //FinaChargeStudent表 - db.ExecuteBySql("update FinaChargeStudent set FSBlance=FSBlance+"+ dresult + " where StuNo='" + finaChargeStuYearItemEntity.StuNo+ "'"); + db.ExecuteBySql("update FinaChargeStudent set NeedToPay=(case when(NeedToPay-"+ dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end) where StuNo='" + finaChargeStuYearItemEntity.StuNo + "'"); db.Commit(); } catch (Exception ex) @@ -459,12 +470,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } - + /// /// 自动分配固定项目缴费多余金额 /// /// - public void AutoCharge(int YearNo=0) + public void AutoCharge(int YearNo = 0) { try { @@ -472,20 +483,18 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //获取有缴费余额的固定项目,按照优先级倒排,即优先级低的,先拿出多出余额去分配给高的项目 var FinaChargeStuYearItemHasBalance = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.FSBlance>0 order by priority desc "); //获取欠费的固定项目,按照优先级排序,优先级高的首先会分配到多出的余额 - var FinaChargeStuYearItemHasDJ = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.FSBlance<0 order by priority "); + var FinaChargeStuYearItemHasDJ = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and a.NeedToPay>0 order by priority "); foreach (var hasBalanceItem in FinaChargeStuYearItemHasBalance) { if (hasBalanceItem.FSBlance > 0) { - //可分配余额 - decimal balance = hasBalanceItem.FSBlance.Value; foreach (var QJItem in FinaChargeStuYearItemHasDJ) { var db = BaseRepository("CollegeMIS").BeginTrans(); - if (QJItem.FSBlance<0 && hasBalanceItem.FSBlance>0) + if (QJItem.NeedToPay >0 && hasBalanceItem.FSBlance > 0) { //费用变更表 - //含余额表扣减 + //超出应收额表余额扣减 FinaChargeStuBalanceEntity finaChargeStuBalanceMinus = new FinaChargeStuBalanceEntity(); finaChargeStuBalanceMinus.Create(); finaChargeStuBalanceMinus.StuNo = hasBalanceItem.StuNo; @@ -496,6 +505,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuBalanceMinus.Standard = hasBalanceItem.Standard; finaChargeStuBalanceMinus.DJAmount = 0; finaChargeStuBalanceMinus.QJAmount = 0; + finaChargeStuBalanceMinus.PaymentAmount = 0; finaChargeStuBalanceMinus.OldBalance = hasBalanceItem.FSBlance; finaChargeStuBalanceMinus.ChangeDate = DateTime.Now; finaChargeStuBalanceMinus.ChangeType = 5; @@ -508,26 +518,26 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuBalanceAdd.ChargeItemCode = QJItem.ChargeItemCode; finaChargeStuBalanceAdd.ChargeItemName = QJItem.ChargeItemName; finaChargeStuBalanceAdd.Standard = QJItem.Standard; - finaChargeStuBalanceAdd.DJAmount = Math.Abs(QJItem.FSBlance.Value); - finaChargeStuBalanceMinus.ChangeDate = DateTime.Now; - finaChargeStuBalanceMinus.ChangeType = 6; + finaChargeStuBalanceAdd.DJAmount =QJItem.NeedToPay; + finaChargeStuBalanceAdd.ChangeDate = DateTime.Now; + finaChargeStuBalanceAdd.ChangeType = 6; //余额分配还有剩余 - if (balance + QJItem.FSBlance >= 0) + if (hasBalanceItem.FSBlance - QJItem.NeedToPay >= 0) { QJItem.SJAmount = QJItem.Standard; QJItem.FSBlance = 0; QJItem.PayFeeStatus = 1; - hasBalanceItem.FSBlance = hasBalanceItem.FSBlance + QJItem.FSBlance; - finaChargeStuBalanceMinus.PaymentAmount = QJItem.FSBlance; - finaChargeStuBalanceMinus.ChangeAmount = QJItem.FSBlance; + hasBalanceItem.FSBlance = hasBalanceItem.FSBlance - QJItem.NeedToPay; + finaChargeStuBalanceMinus.ChangeAmount = -QJItem.NeedToPay; finaChargeStuBalanceMinus.NowBalance = hasBalanceItem.FSBlance; db.Insert(finaChargeStuBalanceMinus); - //欠费变更 - finaChargeStuBalanceAdd.PaymentAmount = Math.Abs(QJItem.FSBlance.Value); + //欠费变更记录 + finaChargeStuBalanceAdd.PaymentAmount = QJItem.NeedToPay; finaChargeStuBalanceAdd.QJAmount = 0; finaChargeStuBalanceAdd.OldBalance = 0; - finaChargeStuBalanceAdd.ChangeAmount = Math.Abs(QJItem.FSBlance.Value); + finaChargeStuBalanceAdd.ChangeAmount = 0; finaChargeStuBalanceAdd.NowBalance = 0; + QJItem.NeedToPay = 0; db.Insert(finaChargeStuBalanceAdd); db.Update(hasBalanceItem); db.Update(QJItem); @@ -537,19 +547,18 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement else { QJItem.SJAmount = QJItem.SJAmount + hasBalanceItem.FSBlance; - QJItem.FSBlance = QJItem.FSBlance + hasBalanceItem.FSBlance; QJItem.PayFeeStatus = 4; - hasBalanceItem.FSBlance = 0; - finaChargeStuBalanceMinus.PaymentAmount = -hasBalanceItem.FSBlance; finaChargeStuBalanceMinus.ChangeAmount = -hasBalanceItem.FSBlance; finaChargeStuBalanceMinus.NowBalance = 0; db.Insert(finaChargeStuBalanceMinus); //欠费变更 finaChargeStuBalanceAdd.PaymentAmount = hasBalanceItem.FSBlance; - finaChargeStuBalanceAdd.QJAmount = QJItem.FSBlance+ hasBalanceItem.FSBlance; + finaChargeStuBalanceAdd.QJAmount = QJItem.NeedToPay - hasBalanceItem.FSBlance; finaChargeStuBalanceAdd.OldBalance = 0; - finaChargeStuBalanceAdd.ChangeAmount = hasBalanceItem.FSBlance; + finaChargeStuBalanceAdd.ChangeAmount = 0; finaChargeStuBalanceAdd.NowBalance = 0; + QJItem.NeedToPay = QJItem.NeedToPay - hasBalanceItem.FSBlance; + hasBalanceItem.FSBlance = 0; db.Insert(finaChargeStuBalanceAdd); db.Update(hasBalanceItem); db.Update(QJItem); diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index 275f8dcf6..0c6ef7075 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -370,11 +370,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //更新主表 oldFinaChargeStuYearEntity.YJAmount+= finaChargeStuYearItem.Standard; oldFinaChargeStuYearEntity.NeedToPay += finaChargeStuYearItem.Standard; - //if (oldFinaChargeStuYearEntity.FSBlance>0) - //{ - - //} - //oldFinaChargeStuYearEntity.FSBlance -= finaChargeStuYearItem.Standard; db.Update(oldFinaChargeStuYearEntity); } else From 93eb299960100a24ccd52cc2010d13d2a1c3611e Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Thu, 24 Aug 2023 18:03:43 +0800 Subject: [PATCH 38/50] =?UTF-8?q?=E7=AE=97=E6=B3=95=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Views/FinaChargeStuOrder/Index.js | 54 +++++++++++++++++-- .../Learun.Application.Web.csproj | 1 - .../FinaChargeStuOrderEntity.cs | 16 ++++++ .../FinaChargeStuOrderService.cs | 20 +------ 4 files changed, 69 insertions(+), 22 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js index c33a7a967..6caa405a6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js @@ -87,11 +87,59 @@ var bootstrap = function ($, learun) { }, // 初始化列表 initGird: function () { - $('#gridtable').lrAuthorizeJfGrid({ + $('#gridtable').jfGrid({ url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuOrder/GetPageList', headData: [ - { label: "缴费年度", name: "YearNo", width: 80, align: "left"}, - { label: "学号", name: "StuNo", width: 100, align: "left"}, + { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "性别", name: "GenderNo", width: 80, align: "left", + formatter: function (cellvalue) { + return cellvalue == true ? "男" : "女"; + } + }, + { label: "身份证号", name: "IdentityCardNo", width: 150, align: "left" }, + { + label: "系所", name: "DeptNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: value, + keyId: 'deptno', + callback: function (_data) { + callback(_data['deptname']); + } + }); + } + }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "年级", name: "Grade", width: 80, align: "left" }, + { label: "缴费年度", name: "YearNo", width: 80, align: "left" }, { label: "订单编号", name: "orderid", width: 150, align: "left"}, { label: "收费标准", name: "YJAmount", width: 100, align: "left"}, { label: "缴费金额", name: "SJAmount", width: 100, align: "left"}, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj index 40e16168a..3f1111039 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Learun.Application.Web.csproj @@ -2442,7 +2442,6 @@ - diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderEntity.cs index b83cd0a13..bf617c008 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderEntity.cs @@ -110,6 +110,22 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } #endregion #region 扩展字段 + [NotMapped] + public string StuName { get; set; } + [NotMapped] + public bool? GenderNo { get; set; } + [NotMapped] + public string IdentityCardNo { get; set; } + [NotMapped] + public string DeptNo { get; set; } + [NotMapped] + public string MajorNo { get; set; } + [NotMapped] + public string ClassNo { get; set; } + [NotMapped] + public string Grade { get; set; } + [NotMapped] + public string Mobile { get; set; } #endregion } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs index 9c0a3c6bb..93b1d8621 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -37,24 +37,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT "); - strSql.Append(@" - t.Id, - t.YearNo, - t.StuNo, - t.orderid, - t.YJAmount, - t.SJAmount, - t.DJAmount, - t.NowBlance, - t.Status, - t.PlaceOrderTime, - t.PayTime, - t.PayMode, - t.OrderType, - t.BankOrder - "); - strSql.Append(" FROM FinaChargeStuOrder t "); + strSql.Append("SELECT t*,b.StuName,b.GenderNo,b.IdentityCardNo,b.DeptNo,b.MajorNo,b.ClassNo,b.Grade,b.Mobile "); + strSql.Append(" FROM FinaChargeStuOrder t left join FinaChargeStudent b on t.StuNo=b.StuNo "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 From b543cda40a5264c66e2e980c51b8dc321542f73c Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Fri, 25 Aug 2023 23:37:32 +0800 Subject: [PATCH 39/50] =?UTF-8?q?=E7=BC=B4=E8=B4=B9=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYearController.cs | 6 +-- .../Views/FinaChargeStuBalance/Index.js | 48 +++++++++++++++++++ .../Views/FinaChargeStuOrderDetail/Index.js | 3 +- .../Views/FinaChargeStuYear/PayFeeForm.js | 4 +- .../FinaChargeStuYearApi.cs | 6 +-- .../FinaChargeStuBalanceEntity.cs | 16 +++++++ .../FinaChargeStuBalanceService.cs | 4 +- .../FinaChargeStuOrderService.cs | 6 +-- .../FinaChargeStuYearService.cs | 4 +- .../FinaChargeStuYearItemService.cs | 3 ++ .../ReceiveSendFeeManagement/PayFee/list.vue | 15 ++++-- .../PayFee/single.vue | 23 +++++---- 12 files changed, 101 insertions(+), 37 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs index 5b5921a16..4110c015b 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeStuYearController.cs @@ -181,15 +181,11 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers var FinaChargeStuYearData = finaChargeStuYearIBLL.GetFinaChargeStuYearEntity(keyValue); //学生缴费明细 var FinaChargeStuItemList = finaChargeStuYearIBLL.GetFinaChargeStuItemList(keyValue); - foreach (var finaChargeStuYearItemEntity in FinaChargeStuItemList) - { - finaChargeStuYearItemEntity.FSBlance = Math.Abs(finaChargeStuYearItemEntity.FSBlance.Value); - } var jsonData = new { StuInfoFreshData = FinaChargeStuYearData, FinaChargesStandardList = FinaChargeStuItemList, - PayFeeTotal = Math.Abs(FinaChargeStuYearData.FSBlance.Value), + PayFeeTotal = FinaChargeStuYearData.NeedToPay, SJAmount = FinaChargeStuYearData.SJAmount }; return Success(jsonData); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js index df60c5809..d062351a4 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuBalance/Index.js @@ -58,6 +58,54 @@ var bootstrap = function ($, learun) { url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeStuBalance/GetPageList', headData: [ { label: "学号", name: "StuNo", width: 100, align: "left" }, + { label: "姓名", name: "StuName", width: 100, align: "left" }, + { + label: "性别", name: "GenderNo", width: 80, align: "left", + formatter: function (cellvalue) { + return cellvalue == true ? "男" : "女"; + } + }, + { label: "身份证号", name: "IdentityCardNo", width: 150, align: "left" }, + { + label: "系所", name: "DeptNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdDeptInfo', + key: value, + keyId: 'deptno', + callback: function (_data) { + callback(_data['deptname']); + } + }); + } + }, + { + label: "专业", name: "MajorNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'CdMajorInfo', + key: value, + keyId: 'majorno', + callback: function (_data) { + callback(_data['majorname']); + } + }); + } + }, + { + label: "班级", name: "ClassNo", width: 100, align: "left", + formatterAsync: function (callback, value, row, op, $cell) { + learun.clientdata.getAsync('custmerData', { + url: '/LR_SystemModule/DataSource/GetDataTable?code=' + 'bjsj', + key: value, + keyId: 'classno', + callback: function (_data) { + callback(_data['classname']); + } + }); + } + }, + { label: "年级", name: "Grade", width: 80, align: "left" }, { label: "缴费年度", name: "FSYear", width: 100, align: "left" }, { label: "收费项目编号", name: "ChargeItemCode", width: 100, align: "left" }, { label: "收费项目名称", name: "ChargeItemName", width: 100, align: "left" }, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js index e17c374ec..8b1dbd5b7 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrderDetail/Index.js @@ -32,7 +32,8 @@ var bootstrap = function ($, learun) { { label: "超出应收额", name: "NowBlance", width: 100, align: "left"}, ], mainId:'Id', - isPage: true + isPage: true, + sidx: 'ChargeItemCode' }); page.search(); }, diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js index c98eba03e..8cba934d2 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/PayFeeForm.js @@ -107,8 +107,8 @@ var bootstrap = function ($, learun) { html += '缴费项目收费标准本次实缴'; $.each(data['FinaChargesStandardList'], function (i, item) { html += '' + item.ChargeItemName + '' + item.Standard + '元' + - ''; + ''; }); html += '应缴合计' + data['PayFeeTotal'] + '元' + PayFeeTotal + ''; diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs index 708a0a401..28c0596ee 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ReceiveSendFeeManagement/FinaChargeStuYearApi.cs @@ -79,15 +79,11 @@ namespace Learun.Application.WebApi.Modules var FinaChargeStuYearData = finaChargeStuYearIBLL.GetFinaChargeStuYearEntity(keyValue); //学生缴费明细 var FinaChargeStuItemList = finaChargeStuYearIBLL.GetFinaChargeStuItemList(keyValue); - foreach (var finaChargeStuYearItemEntity in FinaChargeStuItemList) - { - finaChargeStuYearItemEntity.FSBlance = Math.Abs(finaChargeStuYearItemEntity.FSBlance.Value); - } var jsonData = new { StuInfoFreshData = FinaChargeStuYearData, FinaChargesStandardList = FinaChargeStuItemList, - PayFeeTotal = Math.Abs(FinaChargeStuYearData.FSBlance.Value), + PayFeeTotal =FinaChargeStuYearData.NeedToPay, SJAmount = FinaChargeStuYearData.SJAmount }; return Success(jsonData); diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs index 32f2ccfe4..81d6d67ad 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceEntity.cs @@ -109,6 +109,22 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } #endregion #region 扩展字段 + [NotMapped] + public string StuName { get; set; } + [NotMapped] + public bool? GenderNo { get; set; } + [NotMapped] + public string IdentityCardNo { get; set; } + [NotMapped] + public string DeptNo { get; set; } + [NotMapped] + public string MajorNo { get; set; } + [NotMapped] + public string ClassNo { get; set; } + [NotMapped] + public string Grade { get; set; } + [NotMapped] + public string Mobile { get; set; } #endregion } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs index f3144c848..ca2accd2a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuBalance/FinaChargeStuBalanceService.cs @@ -30,8 +30,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT * "); - strSql.Append(" FROM FinaChargeStuBalance t "); + strSql.Append("SELECT t.*,b.StuName,b.GenderNo,b.IdentityCardNo,b.DeptNo,b.MajorNo,b.ClassNo,b.Grade,b.Mobile "); + strSql.Append(" FROM FinaChargeStuBalance t left join FinaChargeStudent b on t.StuNo=b.StuNo "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); // 虚拟参数 diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs index 93b1d8621..59f603081 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -37,7 +37,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { var strSql = new StringBuilder(); - strSql.Append("SELECT t*,b.StuName,b.GenderNo,b.IdentityCardNo,b.DeptNo,b.MajorNo,b.ClassNo,b.Grade,b.Mobile "); + strSql.Append("SELECT t.*,b.StuName,b.GenderNo,b.IdentityCardNo,b.DeptNo,b.MajorNo,b.ClassNo,b.Grade,b.Mobile "); strSql.Append(" FROM FinaChargeStuOrder t left join FinaChargeStudent b on t.StuNo=b.StuNo "); strSql.Append(" WHERE 1=1 "); var queryParam = queryJson.ToJObject(); @@ -260,7 +260,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement //获取已有年度学生缴费记录 var oldFinaChargeStuYearList = BaseRepository("CollegeMIS").FindList(); //获取已有年度学生缴费明细记录 - var oldFinaChargeStuYearItemList = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId where ChargeItemType=1 and F_DeleteMark=0 and RefundStatus=0"); + var oldFinaChargeStuYearItemList = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo,c.StuName from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId left join FinaChargeStudent c on b.StuNo=c.StuNo where ChargeItemType=1 and F_DeleteMark=0 and RefundStatus=0"); foreach (DataRow dr in dt.Rows) { var db = this.BaseRepository("CollegeMIS").BeginTrans(); @@ -316,7 +316,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement throw new Exception("【缴费方式】只能为现金或贷款,请核对!"); } int itemcodeint = 0; - if (!int.TryParse(itemcodeentity.F_ItemCode, out itemcodeint)) + if (!int.TryParse(itemcodeentity.F_ItemValue, out itemcodeint)) { throw new Exception("【线下缴费方式字典(PayTypeOffLine)】值code只能为整数,请核对!"); } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 223d7ec2b..35cffbfff 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -113,7 +113,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return this.BaseRepository("CollegeMIS").FindEntity("select b.*,a.FSYear,a.YJAmount,a.SJAmount,a.FSBlance,a.PayFeeStatus from FinaChargeStuYear a left join FinaChargeStudent b on a.StuNo=b.StuNo where a.FSYId='" + keyValue + "'", null); + return this.BaseRepository("CollegeMIS").FindEntity("select b.*,a.FSYear,a.YJAmount,a.SJAmount,a.NeedToPay,a.FSBlance,a.PayFeeStatus from FinaChargeStuYear a left join FinaChargeStudent b on a.StuNo=b.StuNo where a.FSYId='" + keyValue + "'", null); } catch (Exception ex) { @@ -137,7 +137,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { try { - return this.BaseRepository("CollegeMIS").FindList("select a.StuNo,b.* from FinaChargeStuYear a left join FinaChargeStuYearItem b on a.FSYId=b.FSYId where b.F_DeleteMark=0 and b.FSBlance<0 and a.FSYId='" + keyValue + "' order by ChargeItemCode"); + return this.BaseRepository("CollegeMIS").FindList("select a.StuNo,b.* from FinaChargeStuYear a left join FinaChargeStuYearItem b on a.FSYId=b.FSYId where b.F_DeleteMark=0 and a.FSYId='" + keyValue + "' order by ChargeItemCode"); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index 0c6ef7075..6950ceec6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -366,6 +366,9 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYearItem.priority = finaChargesStandardEntity.priority; finaChargeStuYearItem.Standard = finaChargesStandardEntity.Standard; finaChargeStuYearItem.NeedToPay = finaChargeStuYearItem.Standard; + var loginUserInfo = LoginUserInfo.Get(); + finaChargeStuYearItem.F_CreateUserId = loginUserInfo.userId; + finaChargeStuYearItem.F_CreateUserName = loginUserInfo.realName; db.Insert(finaChargeStuYearItem); //更新主表 oldFinaChargeStuYearEntity.YJAmount+= finaChargeStuYearItem.Standard; diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue index c9c95af29..26f38a5d3 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue @@ -32,15 +32,19 @@ {{ item.FSYear }} - 应缴金额: + 收费标准: {{ item.YJAmount }} - 实缴金额: + 缴费金额: {{ item.SJAmount }} - 缴费年度余额: + 应缴余额: + {{ item.NeedToPay }} + + + 超出应收额: {{ item.FSBlance }} @@ -59,8 +63,7 @@ - - + 查询 @@ -160,6 +163,8 @@ export default { this.user = this.GET_GLOBAL('loginUser'); this.queryData.StuNo = this.user.account; this.queryData.F_CheckMark=1; + var dateyearnow=new Date(); + this.queryData.FSYear=dateyearnow.getFullYear(); // 拉取加载列表和数据源 await Promise.all([ diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue index 0032b07f6..845d392d4 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue @@ -103,7 +103,7 @@ export default{ fieldsData:[ {type:'label',field:'ChargeItemName',name:'缴费项目'}, {type:'label',field:'Standard',name:'收费标准'}, - {type:'input',field:'FSBlance',name:'本次实缴',edit:true}, + {type:'input',field:'NeedToPay',name:'本次实缴',edit:true}, ] }, qrCodeUrl:'', @@ -150,7 +150,7 @@ export default{ return; } this.FinaChargesStandardList = res.FinaChargesStandardList.map((item)=>{ - item.copy_SJAmount = item.FSBlance + item.copy_SJAmount = item.NeedToPay return item }) this.StuInfoFreshData = res.StuInfoFreshData @@ -210,12 +210,12 @@ export default{ let list = [],isNull=false,tooMuch=false; this.FinaChargesStandardList.forEach(item=>{ let value = 0 - if(/^-?\d+(,\d{3})*(\.\d{1,2})?$/.test(item.FSBlance)&&Number(item.FSBlance)>=0){ - value = Number(item.FSBlance) + if(/^-?\d+(,\d{3})*(\.\d{1,2})?$/.test(item.NeedToPay)&&Number(item.NeedToPay)>=0){ + value = Number(item.NeedToPay) }else{ isNull=true } - if(Number(item.FSBlance)>Number(item.copy_SJAmount)) + if(Number(item.NeedToPay)>Number(item.copy_SJAmount)) { tooMuch=true; @@ -246,7 +246,6 @@ export default{ param.FSYear=this.StuInfoFreshData.FSYear; param.PayMoney = this.payfeetotal; let postData = { strEntity: JSON.stringify(param), detailList: JSON.stringify(list) } - console.log({ strEntity: param, detailList: list }); this.changeIpnutEdit(false) this.LOADING('正在生成付款信息请稍等…'); this.HTTP_POST('/ReceiveSendFeeManagement/FinaChargeStuYearApi/generateqrcode', postData ).then((res)=> { @@ -272,15 +271,15 @@ export default{ getpayfeetotal(){ let value = 0 this.FinaChargesStandardList.map(item=>{ - let strValue = item.FSBlance.toString() + let strValue = item.NeedToPay.toString() // if(strValue.split(".")[1]&&strValue.split(".")[1].length>2){ // item.SJAmount = strValue.match(/^\d+(?:\.\d{0,2})?/) // } - if(/^-?\d+(,\d{3})*(\.\d{1,2})?$/.test(item.FSBlance)){ - if(strValue.indexOf(".") == -1&&Number(item.FSBlance)%1 === 0){ - item.FSBlance = Number(item.FSBlance) + if(/^-?\d+(,\d{3})*(\.\d{1,2})?$/.test(item.NeedToPay)){ + if(strValue.indexOf(".") == -1&&Number(item.NeedToPay)%1 === 0){ + item.NeedToPay = Number(item.NeedToPay) } - value = this.numSub(value,Number(item.FSBlance)) + value = this.numSub(value,Number(item.NeedToPay)) // value += Number(item.SJAmount) } }) @@ -289,7 +288,7 @@ export default{ changeIpnutEdit(edit){ let item = JSON.parse(JSON.stringify(this.item)) item.fieldsData = item.fieldsData.map((item1)=>{ - if(["FSBlance"].includes(item1.field)){ + if(["NeedToPay"].includes(item1.field)){ item1.edit = edit } return item1 From 81421200f58ebb2dcf8a22fc1d1e1712273cbd7e Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sun, 27 Aug 2023 00:11:59 +0800 Subject: [PATCH 40/50] =?UTF-8?q?=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/FinaChargeRefundController.cs | 12 ++++++++ .../Views/FinaChargeRefund/FormView.cshtml | 14 ++++----- .../Views/FinaChargeRefund/FormView.js | 2 +- .../Views/FinaChargeStuOrder/Index.js | 3 +- .../FinaChargeRefund/FinaChargeRefundBLL.cs | 19 ++++++++++++ .../FinaChargeRefund/FinaChargeRefundIBLL.cs | 1 + .../FinaChargeRefundService.cs | 20 ++++++++++++- .../FinaChargeStuOrderService.cs | 29 ++++++++++--------- .../FinaChargeStuYearItemService.cs | 2 ++ .../FinaChargesStandardService.cs | 2 +- .../LearunApp-2.2.0/config.js | 4 +-- 11 files changed, 82 insertions(+), 26 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs index b4be119fb..16d710fcc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargeRefundController.cs @@ -85,6 +85,18 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers }; return Success(jsonData); } + + [HttpGet] + [AjaxOnly] + public ActionResult GetFormDataById(string keyValue) + { + var FinaChargeRefund = FinaChargeRefundIBLL.GetFinaChargeRefundEntityByFSYIId(keyValue); + var jsonData = new + { + FinaChargeRefund = FinaChargeRefund, + }; + return Success(jsonData); + } #endregion #region 提交数据 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.cshtml index 0dc74b5b8..feab65141 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.cshtml @@ -5,31 +5,31 @@
    缴费项目编号
    - +
    缴费项目名称
    - +
    退费方式
    -
    +
    退费金额
    - +
    操作时间
    - +
    操作人
    - +
    备注
    - +
    @Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js index 7a5ada0ee..6aa56b5d6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeRefund/FormView.js @@ -19,7 +19,7 @@ var bootstrap = function ($, learun) { }, initData: function () { if (!!keyValue) { - $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/GetFormData?keyValue=' + keyValue, function (data) { + $.lrSetForm(top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargeRefund/GetFormDataById?keyValue=' + keyValue, function (data) { for (var id in data) { if (!!data[id].length && data[id].length > 0) { $('#' + id ).jfGridSet('refreshdata', data[id]); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js index 6caa405a6..5ac465b3f 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js @@ -180,7 +180,8 @@ var bootstrap = function ($, learun) { { label: "银行订单号", name: "BankOrder", width: 100, align: "left"}, ], mainId:'Id', - isPage: true + isPage: true, + sidx:'PayTime desc' }); }, search: function (param) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundBLL.cs index 24eaac3ea..2dfa31ac0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundBLL.cs @@ -119,6 +119,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public FinaChargeRefundEntity GetFinaChargeRefundEntityByFSYIId(string keyValue) + { + try + { + return FinaChargeRefundService.GetFinaChargeRefundEntityByFSYIId(keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundIBLL.cs index ccf173723..911c207ee 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundIBLL.cs @@ -44,5 +44,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement void SaveEntity(List list, FinaChargeRefundEntity entity); #endregion + FinaChargeRefundEntity GetFinaChargeRefundEntityByFSYIId(string keyValue); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs index 514e83ec4..48566cffc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeRefund/FinaChargeRefundService.cs @@ -173,7 +173,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuBalance.PaymentAmount =0; finaChargeStuBalance.QJAmount = 0; finaChargeStuBalance.OldBalance = finaChargeRefundEntity.Amount; - finaChargeStuBalance.ChangeAmount = finaChargeRefundEntity.Amount; + finaChargeStuBalance.ChangeAmount =- finaChargeRefundEntity.Amount; finaChargeStuBalance.NowBalance = 0; finaChargeStuBalance.ChangeDate = DateTime.Now; finaChargeStuBalance.ChangeType = 4; @@ -209,5 +209,23 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement #endregion + public FinaChargeRefundEntity GetFinaChargeRefundEntityByFSYIId(string keyValue) + { + try + { + return this.BaseRepository("CollegeMIS").FindEntity(m=>m.FSYIId== keyValue); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs index 59f603081..59d73c6df 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -257,15 +257,16 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement var oldOrderList = BaseRepository("CollegeMIS").FindList("select * from FinaChargeStuOrder where OrderType='2' "); //缴费方式字典 var dataitemlist = datarItemService.GetDetailList("PayTypeOffLine"); - //获取已有年度学生缴费记录 - var oldFinaChargeStuYearList = BaseRepository("CollegeMIS").FindList(); - //获取已有年度学生缴费明细记录 - var oldFinaChargeStuYearItemList = BaseRepository("CollegeMIS").FindList("select a.*,b.StuNo,c.StuName from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId left join FinaChargeStudent c on b.StuNo=c.StuNo where ChargeItemType=1 and F_DeleteMark=0 and RefundStatus=0"); + foreach (DataRow dr in dt.Rows) { var db = this.BaseRepository("CollegeMIS").BeginTrans(); try { + //获取已有年度学生缴费记录 + var oldFinaChargeStuYearList = db.FindList(); + //获取已有年度学生缴费明细记录 + var oldFinaChargeStuYearItemList = db.FindList("select a.*,b.StuNo,c.StuName from FinaChargeStuYearItem a left join FinaChargeStuYear b on a.FSYId=b.FSYId left join FinaChargeStudent c on b.StuNo=c.StuNo where ChargeItemType=1 and F_DeleteMark=0 and RefundStatus=0"); IEnumerable finaChargeStuYearItemList = null; FinaChargeStuYearItemEntity finaChargeStuYearItemEntity = null; FinaChargeStuYearEntity finaChargeStuYearEntity = null; @@ -284,7 +285,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } //首先校验金额是否为数字 decimal dresult = 0; - bool parseresult = decimal.TryParse(dr[5].ToString(), out dresult); + bool parseresult = decimal.TryParse(dr[3].ToString(), out dresult); if (!parseresult) { throw new Exception("【金额】转换失败,必须为数字!"); @@ -336,11 +337,12 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement Random ran = new Random(); orderEntity.orderid = DateTime.Now.ToString("yyyyMMddhhmmss") + ran.Next(0, 100000); orderEntity.PlaceOrderTime = DateTime.Now; + orderEntity.PayTime = orderEntity.PlaceOrderTime; orderEntity.Status = 1; orderEntity.OrderType = 2; orderEntity.BankOrder = dr[5].ToString(); //历史固定项目未缴费和部分缴费的数据 - var oldnotpaylist = oldFinaChargeStuYearItemList.Where(m => m.PayFeeStatus != 1).OrderBy(m => m.priority).ToList(); + var oldnotpaylist = finaChargeStuYearItemList.Where(m => m.PayFeeStatus != 1).OrderBy(m => m.priority).ToList(); finaChargeStuYearItemEntity = oldnotpaylist.FirstOrDefault(); //订单明细 写入优先级最高的一条为暂存位置 FinaChargeStuOrderDetailEntity detail = new FinaChargeStuOrderDetailEntity(); @@ -391,7 +393,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuBalanceEntity.PaymentAmount = dresult; finaChargeStuBalanceEntity.QJAmount = finaChargeStuYearItemEntity.NeedToPay - dresult > 0 ? finaChargeStuYearItemEntity.NeedToPay - dresult : 0; finaChargeStuBalanceEntity.OldBalance = finaChargeStuYearItemEntity.FSBlance; - if (detail.NowBlance > 0) + if (finaChargeStuYearItemEntity.NeedToPay-dresult<0) { finaChargeStuBalanceEntity.ChangeAmount = dresult - finaChargeStuBalanceEntity.DJAmount; finaChargeStuBalanceEntity.NowBalance = finaChargeStuBalanceEntity.ChangeAmount; @@ -406,22 +408,23 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement db.Insert(finaChargeStuBalanceEntity); //FinaChargeStuYearItem表 finaChargeStuYearItemEntity.SJAmount = finaChargeStuYearItemEntity.SJAmount + dresult; - if (detail.NowBlance > 0) + if (finaChargeStuYearItemEntity.NeedToPay - dresult < 0) { - finaChargeStuYearItemEntity.FSBlance = detail.NowBlance; + finaChargeStuYearItemEntity.FSBlance = Math.Abs(finaChargeStuYearItemEntity.NeedToPay.Value - dresult); finaChargeStuYearItemEntity.NeedToPay = 0; } else { - finaChargeStuYearItemEntity.NeedToPay = finaChargeStuYearItemEntity.Standard - dresult; + finaChargeStuYearItemEntity.NeedToPay = finaChargeStuYearItemEntity.NeedToPay - dresult; } - finaChargeStuYearItemEntity.PayFeeStatus = finaChargeStuYearItemEntity.FSBlance > 0 ? 1 : 4; + finaChargeStuYearItemEntity.PayFeeStatus = finaChargeStuYearItemEntity.NeedToPay > 0 ? 4 : 1; db.Update(finaChargeStuYearItemEntity); //FinaChargeStuYear表 - db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount+" + dresult + ",NeedToPay=(case when(NeedToPay-"+ dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end),PayFeeStatus=(case when(NeedToPay-" + dresult + ">=0) then 1 else 4 end) where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount+" + dresult + ",NeedToPay=(case when(NeedToPay-"+ dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end),PayFeeStatus=(case when(NeedToPay-" + dresult + ">=0) then 4 else 1 end) where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); //FinaChargeStudent表 db.ExecuteBySql("update FinaChargeStudent set NeedToPay=(case when(NeedToPay-"+ dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end) where StuNo='" + finaChargeStuYearItemEntity.StuNo + "'"); db.Commit(); + snum++; } catch (Exception ex) { @@ -472,7 +475,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { if (hasBalanceItem.FSBlance > 0) { - foreach (var QJItem in FinaChargeStuYearItemHasDJ) + foreach (var QJItem in FinaChargeStuYearItemHasDJ.Where(m=>m.StuNo== hasBalanceItem.StuNo)) { var db = BaseRepository("CollegeMIS").BeginTrans(); if (QJItem.NeedToPay >0 && hasBalanceItem.FSBlance > 0) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs index 6950ceec6..3272f2046 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYearItem/FinaChargeStuYearItemService.cs @@ -349,6 +349,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYear.NeedToPay+= finaChargeStuYearItem.Standard; finaChargeStuYear.FSBlance = 0; db.Insert(finaChargeStuYear); + snum++; } else { @@ -374,6 +375,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement oldFinaChargeStuYearEntity.YJAmount+= finaChargeStuYearItem.Standard; oldFinaChargeStuYearEntity.NeedToPay += finaChargeStuYearItem.Standard; db.Update(oldFinaChargeStuYearEntity); + snum++; } else { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs index 9ac193a26..24ac17782 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs @@ -104,7 +104,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement strSql.Append(" AND m.MajorNo = @MajorNo "); } strSql.Append(" union "); - strSql.Append(" select m.MajorNo as TempId,'' as ChargeStandardID,0 as ChargeItemID,null as ChargeItemName,null as ChargeItemType, null as ChargeItemCode,"); + strSql.Append(" select m.MajorNo as TempId,'' as ChargeStandardID,'0' as ChargeItemID,null as ChargeItemName,null as ChargeItemType, null as ChargeItemCode,"); strSql.Append(" (select SUM(t.Standard) from [dbo].[FinaChargesStandard] t left join [FinaChargeItem] tt on t.ChargeItemID=tt.ChargeItemID where tt.CheckMark=1 and tt.F_DeleteMark=0 and t.MajorNo=m.MajorNo and t.CheckMark=1 and t.F_DeleteMark=0 "); if (!queryParam["SYear"].IsEmpty()) { diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js index fa1181bb7..1d2487021 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js @@ -7,11 +7,11 @@ export default { "enableSignUp": true, //请求数据的接口地址;可以配置多个,开发环境下登录页会出现选择菜单供您选择 "apiHost": [ - "http://localhost:31173/" + "http://112.45.152.8:8011/" // "http://123.57.209.16:31173/" // "http://112.45.152.8:8083/" ], - "webHost":"http://localhost:20472/", + "webHost":"http://112.45.152.8:8010/", // "webHost":"http://112.45.152.8:8000/", // 开发环境下自动填充登录账号密码,与接口地址一一对应,只在开发环境下显示 "devAccount": [ From 8efed860f0e14877e0170fc0cc6e542611108201 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Sun, 27 Aug 2023 19:07:00 +0800 Subject: [PATCH 41/50] =?UTF-8?q?=E6=94=B6=E8=B4=B9=E6=A0=87=E5=87=86?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargesStandardController.cs | 37 +++- .../FinaChargeStuYear/InvoiceForm.cshtml | 2 +- .../Views/FinaChargesStandard/Import.cshtml | 26 +++ .../Views/FinaChargesStandard/Import.js | 175 ++++++++++++++++++ .../Views/FinaChargesStandard/Index.cshtml | 1 + .../Views/FinaChargesStandard/Index.js | 15 ++ .../Content/excel/收费标准设置.xls | Bin 0 -> 28672 bytes .../Content/excel/线下缴费记录.xls | Bin 23552 -> 23552 bytes .../Content/excel/缴费明细.xls | Bin 23552 -> 23552 bytes .../Learun.Application.Web.csproj | 3 + .../FinaChargeStudentService.cs | 2 +- .../FinaChargesStandardBLL.cs | 19 ++ .../FinaChargesStandardIBLL.cs | 1 + .../FinaChargesStandardService.cs | 137 +++++++++++++- .../LearunApp-2.2.0/config.js | 4 +- 15 files changed, 414 insertions(+), 8 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.cshtml create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.js create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/收费标准设置.xls diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs index cbe769f14..714f5856a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Controllers/FinaChargesStandardController.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using Learun.Application.TwoDevelopment.EducationalAdministration; using System.Linq; using System; +using Learun.Application.Base.SystemModule; using Learun.Util.Operat; using static Learun.Util.WebHelper; using Newtonsoft.Json; @@ -23,6 +24,7 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { private FinaChargesStandardIBLL finaChargesStandardIBLL = new FinaChargesStandardBLL(); private FinaChargeItemIBLL finaChargeItemIBLL = new FinaChargeItemBLL(); + private AnnexesFileIBLL annexesFileIBLL = new AnnexesFileBLL(); #region 视图功能 @@ -44,6 +46,11 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers { return View(); } + [HttpGet] + public ActionResult Import() + { + return View(); + } /// /// 编辑表单页 /// @@ -295,7 +302,35 @@ namespace Learun.Application.Web.Areas.ReceiveSendFeeManagement.Controllers #endregion #region 扩展数据 - + /// + /// 导入 + /// + /// + /// + /// + /// + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult ExecuteImportExcel(string fileGuid, int chunks, string queryJson) + { + string path = annexesFileIBLL.SaveAnnexes(fileGuid, fileGuid, chunks, LoginUserInfo.Get()); + if (!string.IsNullOrEmpty(path)) + { + DataTable dt = ExcelHelper.ExcelImport(path); + string res = finaChargesStandardIBLL.ExecuteImportExcel(dt, fileGuid, queryJson); + var data = new + { + Success = res.Split('|')[0], + Fail = res.Split('|')[1] + }; + Success_FinaCharge("导入成功!", "收费标准设置", OperationType.Create, "", "导入收费标准设置成功:" + res.Split('|')[0] + "条,失败:" + res.Split('|')[1] + "条"); + return JsonResult(data); + } + else + { + return Fail("导入数据失败!"); + } + } /// /// 学年 /// diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.cshtml index 4b098158c..2be5e31cc 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.cshtml @@ -12,4 +12,4 @@
    -@Html.AppendJsFile("/Areas/EducationalAdministration/Views/StuInfoBasic_PayFee/InvoiceForm.js") \ No newline at end of file +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuYear/InvoiceForm.js") \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.cshtml new file mode 100644 index 000000000..edf537f46 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.cshtml @@ -0,0 +1,26 @@ +@{ + ViewBag.Title = "Form"; + Layout = "~/Views/Shared/_Form.cshtml"; +} + + +@Html.AppendCssFile("/Areas/LR_SystemModule/Views/ExcelImport/ImportForm.css") + +
    +
    +
    上传文件
    +
    下载模板
    +
    +
    +
    +
    + +
    +
    +

    试试将电脑里的文件拖拽到此上传

    +
    +
    +
    +
    + +@Html.AppendJsFile("/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.js") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.js new file mode 100644 index 000000000..2120b6fc6 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Import.js @@ -0,0 +1,175 @@ +/* + * 描 述:附件上传管理 + */ +var gridId = request('gridtable'); +var bootstrap = function ($, learun) { + "use strict"; + + var fileInfo = {}; + + // 触发合并文件碎片 + var mergeFileChunks = function (file) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileGuid'] = fileInfo[file.id].fileGuid; + param['fileName'] = fileInfo[file.id].name; + param['chunks'] = fileInfo[file.id].chunks; + var queryJson = JSON.stringify(learun.frameTab.currentIframe().queryJson); + + param['queryJson'] = queryJson; + learun.httpAsyncPost(top.$.rootUrl + "/ReceiveSendFeeManagement/FinaChargesStandard/ExecuteImportExcel", param, function (res) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress').remove(); + + if (res.code == learun.httpCode.success) { + if (res.data.Success != '0') { + learun.alert.success('导入成功' + res.data.Success + '条'); + } + // 文件保存成功后 + $fileItem.append('
    ' + res.data.Success + '/' + res.data.Fail + '
    '); + // 如果有失败 + if (res.data.Fail != '0') { + learun.download({ url: top.$.rootUrl + '/LR_SystemModule/ExcelImport/DownImportErrorFile', param: { fileId: fileInfo[file.id].fileGuid, fileName: fileInfo[file.id].name, __RequestVerificationToken: $.lrToken }, method: 'POST' }); + } + + } + else { + learun.alert.error(res.info); + $fileItem.append('
    '); + } + }); + } + // 触发清楚文件碎片 + var reomveFileChunks = function (file) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileGuid'] = fileInfo[file.id].fileGuid; + param['chunks'] = fileInfo[file.id].chunks; + learun.httpAsyncPost(top.$.rootUrl + "/LR_SystemModule/Annexes/MergeAnnexesFile", param, function (res) { }); + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress').remove(); + $fileItem.append('
    '); + } + // 删除文件 + var DeleteFile = function (fileId) { + var param = {}; + param['__RequestVerificationToken'] = $.lrToken; + param['fileId'] = fileInfo[fileId].fileGuid; + learun.httpAsyncPost(top.$.rootUrl + "/LR_SystemModule/Annexes/DeleteAnnexesFile", param, function (res) { }); + var file = page.uploader.getFile(fileId); + if (!!file) { + page.uploader.removeFile(file); + } + delete fileInfo[fileId]; + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + fileId); + $fileItem.remove(); + if ($('#lr_form_file_queue_list>div').length == 0) { + $('#lr_form_file_queue .lr-form-file-queue-bg').show(); + } + } + + var page = { + uploader: null, + init: function () { + if (!WebUploader.Uploader.support()) { + alert('Web Uploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器'); + throw new Error('WebUploader does not support the browser you are using.'); + } + /*导入模板下载*/ + $('#lr_down_file_btn').on('click', function () { + learun.download({ + method: "get", + url: '/Content/excel/收费标准设置.xls' + }); + }); + + page.uploader = WebUploader.create({ + auto: true, + swf: top.$.rootUrl + '/Content/webuploader/Uploader.swf', + // 文件接收服务端。 + server: top.$.rootUrl + "/LR_SystemModule/Annexes/UploadAnnexesFileChunk", + // 选择文件的按钮。可选。 + // 内部根据当前运行是创建,可能是input元素,也可能是flash. + pick: '#lr_add_file_btn', + dnd: '#lr_form_file_queue', + paste: 'document.body', + disableGlobalDnd: true, + accept: { + extensions: "xls,xlsx" + }, + multiple: false, + // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! + resize: false, + // 文件分片上传 + chunked: true, + chunkRetry: 3, + prepareNextFile: true, + chunkSize: '1048576', + // 上传参数 + formData: { + __RequestVerificationToken: $.lrToken + } + }); + page.uploader.on('fileQueued', page.fileQueued); + page.uploader.on('uploadStart', page.uploadStart); + page.uploader.on('uploadBeforeSend', page.uploadBeforeSend); + page.uploader.on('uploadProgress', page.uploadProgress); + page.uploader.on('uploadSuccess', page.uploadSuccess); + page.uploader.on('uploadError', page.uploadError); + page.uploader.on('uploadComplete', page.uploadComplete); + page.uploader.on('error', page.error); + + + //$('#lr_form_file_queue').mCustomScrollbar({ // 优化滚动条 + // theme: "minimal-dark" + //}); + + }, + fileQueued: function (file) {// 文件加载到队列 + fileInfo[file.id] = { name: file.name }; + $('#lr_form_file_queue .lr-form-file-queue-bg').hide(); + // 添加一条文件记录 + var $item = $('
    '); + $item.append('
    '); + $item.append('' + file.name + '(' + learun.countFileSize(file.size) + ')'); + + $('#lr_form_file_queue_list').append($item); + }, + uploadStart: function (file) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.append('
    '); + }, + uploadBeforeSend: function (object, data, headers) { + data.chunk = data.chunk || 0; + data.chunks = data.chunks || 1; + fileInfo[data.id].fileGuid = fileInfo[data.id].fileGuid || WebUploader.Base.guid(); + data.fileGuid = fileInfo[data.id].fileGuid; + fileInfo[data.id].chunks = data.chunks; + }, + uploadProgress: function (file, percentage) { + var $fileItem = $('#lr_form_file_queue_list').find('#lr_filequeue_' + file.id); + $fileItem.find('.lr-uploader-progress-bar').css('width', (percentage * 100 + '%')); + }, + uploadSuccess: function (file, res) { + if (res.code == 200) {// 上传成功 + mergeFileChunks(file); + } + else {// 上传失败 + reomveFileChunks(file); + } + }, + uploadError: function (file, code) { + reomveFileChunks(file); + }, + uploadComplete: function (file) { + }, + error: function (type) { + switch (type) { + case 'Q_TYPE_DENIED': + learun.alert.error('当前文件类型不允许上传'); + break; + }; + } + }; + page.init(); +} diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml index 3066d0a8c..df52abd5c 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.cshtml @@ -37,6 +37,7 @@  删除  审核  去审核 +  导入 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js index 74db2ad4b..dff0af6a9 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargesStandard/Index.js @@ -57,6 +57,21 @@ var bootstrap = function ($, learun) { majorno = $('#MajorNo').lrselectGet(); page.search(); }); + // 导入 + $('#lr_import').on('click', function () { + learun.layerForm({ + id: 'indexImport', + title: "导入收费标准", + url: top.$.rootUrl + '/ReceiveSendFeeManagement/FinaChargesStandard/Import', + width: 600, + height: 400, + maxmin: true, + btn: null, + end: function () { + refreshGirdData(); + } + }); + }); // 新增 $('#lr_add').on('click', function () { var keyValue = $('#gridtable').jfGridValue('TempId'); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/收费标准设置.xls b/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/收费标准设置.xls new file mode 100644 index 0000000000000000000000000000000000000000..fda89b89ce11577022acbc1ee1bffa8d05c980f5 GIT binary patch literal 28672 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 M*$?aaci2DwAIZ8e^Z)<= literal 0 HcmV?d00001 diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/线下缴费记录.xls b/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/线下缴费记录.xls index 17e033b229d760a9422304e8317986bfb899dd4d..62e3aaa5a35e2dfc51f0b16d491b2494cf22eb09 100644 GIT binary patch delta 832 zcmZqJ!Pu~aaf2dry%rN=cXY77A%h6R9R>yl4u%PgK#HM_0`VjD29_VlEE)~Qo&Ik-4Ob3B1Fu@_tiB+75K^$y; zJ!VjIVYQe6XaRPI+F%uDWU$9-F$04gvii-ktQXl09solD1Q;0<7#JKtEFfUxQmEk& zVW{DNa3Q2U!>NaD2AkP<(*%TTIUE^kQDp5V2MQ?(fa2>v5Lw47IK(R`C~VG=l@U^F z)d!it#t@v5np$Gm%D~6aYlI|X1QL-o*}P6)fRPiVp9>h$>64Eew6fJ2GBC&*O%5}e zv-zE28>71&NE^dnpbC(S?SL4@V*>I(wnOBYfjnk7j|IqMf%8}y>?ZFvw&P=CU Bmy!Sg delta 775 zcmZqJ!Pu~aaf2dry%G~+cXY77A%h6R9R>yl4u%PgK#HM_0`VjD29_VlEE)~Qo&Ik-4Ob3B1Fu@_tiB+75K^$y; zJ!VjIVYQe6XaRPI+F%uDWU$9-F$04gvii-ktQXlOYB)p~YB)f_3cff1635lG~K@n&uV0Y=VR&i@Qtz<}bKtYX;8 zreMgxaKLc$dP5~9cYd(>e}S?Lz#!uXVg?2Xj|s>FMKpxR4CFDxc`QI43!KNwz&}~S z#Ey@Pfg32s2s8`G;+~vh;>+Y@JbAt0oXP&CpO`M0fS8-_n<+9*zF-kM$zlf^!>_;P TRaZCfv#?TP4A}fLik%Sv%WaUT diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/缴费明细.xls b/Learun.Framework.Ultimate V7/Learun.Application.Web/Content/excel/缴费明细.xls index 88b2f9a322f5379c358dadf538224815414b827f..cb6504bcb8f2ef8a010d28c2407dfa163b369d95 100644 GIT binary patch delta 940 zcmZqJ!Pu~aal;bk$vmtglNT^&Ojcl#n9RWVj>wf_ThAlt_2(Zjkc)%dSfGIu~hj=#*@g+FKHzJEqcI47b#3RJM3T!Ul zWMOW1PoOkJ^%OzD>D<$~8Ca%)Wr1M<6;DgsFTY=&fn_^bTo5LX=1QT--P{V34|CgN z3Cn$8o$N53@G$PeA-)rbI8kBggcONe!3K$7SiBl6E(#L|dL80Lh}Xp?ALh|E07X9t zFoHtS0mK3VHZFx44iSbLP+Y-*J;SMoZ3dg!c+&)gYdIVlYEfkECI<>B2`~Xw{|6%L zcm;=e1qFr8IkGZBYQ_2>L)aLCGg4Da3|kra7^;nsM2tWp+$NjX>9a91rcd5#(8`u= z$iTpDG}*!Mm8kQ6MkYoEPKH_BCLAe1XYw;dFfmQGH%jN>UAcpanfIN`fAacw=9y6TB0_3s4d8`a}lUEws@v(t31tZYaKoJjm^c?gTmi`Bhl@`>&8061REFl$RbX30 zCku1CCjvtNB0EJ;a60#NZU&ZVU|Au!cv{+i`TgOv7 zu>%Ko3~yRFmv5HiO%vFBQdUMtO-vso$Howxk(yd!*vi1iAZLUmVgwRdXS|u)fQ^xn zYqF4GD;u971H(GQ$qP;9Otv)g6J_4cz{JSF$uNuCgd>H45g3~hOpKG~7^U+t0?qjk z1n!=}CX@M%H@Jfw%fRrL0Tllrg&+kG9uttq1m`gWdCYJg3y{YG=dm*IPi8Z*<6{L{ z2{MHh2st??2buUX8f;!*($C0rz+|(b*?Gpv7c62YS?pxZEoORfX7fG^D + @@ -7998,6 +7999,8 @@ + + diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs index 48891a909..22a009ac0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStudent/FinaChargeStudentService.cs @@ -232,7 +232,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement try { this.BaseRepository("CollegeMIS").ExecuteBySql(@"insert into FinaChargeStudent(FSId, StuNo, StuName, GenderNo, IdentityCardNo, DeptNo, MajorNo, ClassNo,Grade, Mobile,NeedToPay, FSBlance, F_CheckMark) - select newid(), stuno, stuname, genderno, identitycardno, deptno, majorno, classno,grade, mobile, 0,0, 1 from StuInfoBasic a where a.checkmark = 1 and stuno not in(select stuno from FinaChargeStudent)"); + select newid(), stuno, stuname, genderno, identitycardno, deptno, majorno, classno,grade, mobile, 0,0, 1 from StuInfoBasic a where a.checkmark = 1 and InSchoolStatus=1 and stuno not in(select stuno from FinaChargeStudent)"); } catch (Exception ex) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs index c7b61edf4..043b128d0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardBLL.cs @@ -351,6 +351,25 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } + public string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) + { + try + { + return finaChargesStandardService.ExecuteImportExcel(dt, fileGuid, queryJson); + } + catch (Exception ex) + { + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowBusinessException(ex); + } + } + } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs index 605874317..bd3f19e32 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardIBLL.cs @@ -102,5 +102,6 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement IEnumerable GetFinaChargesStandardListByYongYou(string stuNo, int jiaoFeiYear); void Lock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID); void UnLock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID); + string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson); } } diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs index 24ac17782..60f845748 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargesStandard/FinaChargesStandardService.cs @@ -6,6 +6,9 @@ using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; +using Learun.Application.TwoDevelopment.EducationalAdministration; +using Learun.Cache.Base; +using Learun.Cache.Factory; namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { @@ -18,6 +21,8 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement ///
    public class FinaChargesStandardService : RepositoryFactory { + private ICache cache = CacheFactory.CaChe(); + private string cacheKey = "Learun_adms_excelError_"; #region 获取数据 /// @@ -367,7 +372,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement Standard = item.Standard, SYear = Convert.ToInt32(sYear), CheckMark = false, - F_DeleteMark=false + F_DeleteMark = false }; entity.Create(); db.Insert(entity); @@ -456,7 +461,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } - public void Lock(string deptno, string majorNo, string syear, string grade,string ChargeStandardID) + public void Lock(string deptno, string majorNo, string syear, string grade, string ChargeStandardID) { try { @@ -466,7 +471,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } else { - BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargesStandard set CheckMark=1 where ChargeStandardID='"+ ChargeStandardID + "'"); + BaseRepository("CollegeMIS").ExecuteBySql("update FinaChargesStandard set CheckMark=1 where ChargeStandardID='" + ChargeStandardID + "'"); } } catch (Exception ex) @@ -507,5 +512,131 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } } } + + public string ExecuteImportExcel(DataTable dt, string fileGuid, string queryJson) + { + var db = this.BaseRepository("CollegeMIS").BeginTrans(); + try + { + int snum = 0; + int fnum = 0; + if (dt.Rows.Count > 0) + { + DataTable failDt = new DataTable(); + dt.Columns.Add("导入错误", typeof(string)); + foreach (DataColumn dc in dt.Columns) + { + failDt.Columns.Add(dc.ColumnName, dc.DataType); + } + var cddeptlist = db.FindList("select * from cddept"); + var cdmajorlist = db.FindList("select * from cdmajor where checkmark=1"); + var finaChargeItemlist = db.FindList("select * from FinaChargeItem where checkmark=1 and f_deletemark=0"); + //获取收费标准 + var finaChargesStandardList = db.FindList(@"select a.Grade,a.DeptNo,a.MajorNo,a.Standard,a.SYear,b.ChargeItemName,b.ChargeItemCode,b.ChargeItemType,b.priority,a.ChargeItemID +from [dbo].[FinaChargesStandard] a left join [dbo].[FinaChargeItem] b on a.ChargeItemID=b.[ChargeItemID] +where a.F_DeleteMark=0 and a.F_DeleteMark=0 and b.CheckMark=1 and b.F_DeleteMark=0"); + // 循环遍历导入 + foreach (DataRow dr in dt.Rows) + { + try + { + //检测是否有空值 + if (dr[0].ToString() == "" || dr[1].ToString() == "" || dr[2].ToString() == "" || dr[3].ToString() == "" || dr[4].ToString() == "" || dr[5].ToString() == "") + { + throw new Exception("行内数据有空值,不能为空!"); + } + //系部检测 + var deptEntity = cddeptlist.FirstOrDefault(m => m.DeptName == dr[0].ToString()); + if (deptEntity == null) + { + throw new Exception("【系部】不存在,请确认!"); + } + //专业检测 + var cdmajorEntity = cdmajorlist.FirstOrDefault(m => m.MajorName == dr[1].ToString()&&m.DeptNo== deptEntity.DeptNo); + if (cdmajorEntity == null) + { + throw new Exception("【专业】不存在或与系部不对应,请确认!"); + } + //收费项目检测 + var finaChargeItemEntity = finaChargeItemlist.FirstOrDefault(m => m.ChargeItemName == dr[4].ToString()); + if (finaChargeItemEntity == null) + { + throw new Exception("【收费项目】不存在,请确认是否启用!"); + } + //检测缴费年度是否为数字 + int payyearresult = 0; + bool parsepayyearresult = int.TryParse(dr[3].ToString(), out payyearresult); + if (!parsepayyearresult || dr[3].ToString().Length != 4) + { + throw new Exception("【缴费年度】格式不正确,必须为四位数字年份!"); + } + //首先校验金额是否为数字 + decimal dresult = 0; + bool parseresult = decimal.TryParse(dr[5].ToString(), out dresult); + if (!parseresult) + { + throw new Exception("【金额】转换失败,必须为数字!"); + } + //金额不能小于等于零 + if (dresult <= 0) + { + throw new Exception("【金额】不能为零或小于零,必须为正数!"); + } + //年级检测 + int paygraderesult = 0; + bool parsepaygraderesult = int.TryParse(dr[2].ToString(), out paygraderesult); + if (!parsepaygraderesult || dr[2].ToString().Length != 2) + { + throw new Exception("【年级】格式不正确,必须为二位数字年级!"); + } + //去重 + if (finaChargesStandardList.Count(m => m.DeptNo == deptEntity.DeptNo && m.MajorNo ==cdmajorEntity.MajorNo&&m.Grade == paygraderesult.ToString()&& m.SYear==payyearresult&&m.ChargeItemID== finaChargeItemEntity.ChargeItemID) >0) + { + throw new Exception("【收费标准】已存在,不能重复导入!"); + } + //开始导入 + FinaChargesStandardEntity finaChargesStandardEntity=new FinaChargesStandardEntity(); + finaChargesStandardEntity.Create(); + finaChargesStandardEntity.ChargeItemID = finaChargeItemEntity.ChargeItemID; + finaChargesStandardEntity.Grade = paygraderesult.ToString(); + finaChargesStandardEntity.DeptNo = deptEntity.DeptNo; + finaChargesStandardEntity.MajorNo = cdmajorEntity.MajorNo; + finaChargesStandardEntity.Standard = dresult; + finaChargesStandardEntity.SYear = payyearresult; + finaChargesStandardEntity.CheckMark = false; + finaChargesStandardEntity.F_DeleteMark = false; + db.Insert(finaChargesStandardEntity); + snum++; + } + catch (Exception ex) + { + fnum++; + dr["导入错误"] = ex.Message; + failDt.Rows.Add(dr.ItemArray); + } + } + // 写入缓存如果有未导入的数据 + if (failDt.Rows.Count > 0) + { + string errordt = failDt.ToJson(); + cache.Write(cacheKey + fileGuid, errordt, CacheId.excel); + } + db.Commit(); + } + return snum + "|" + fnum; + } + catch (Exception ex) + { + db.Rollback(); + if (ex is ExceptionEx) + { + throw; + } + else + { + throw ExceptionEx.ThrowServiceException(ex); + } + } + } } } diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js index 1d2487021..d4e77b1c4 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/config.js @@ -7,11 +7,11 @@ export default { "enableSignUp": true, //请求数据的接口地址;可以配置多个,开发环境下登录页会出现选择菜单供您选择 "apiHost": [ - "http://112.45.152.8:8011/" + "http://112.45.152.8:8083/" // "http://123.57.209.16:31173/" // "http://112.45.152.8:8083/" ], - "webHost":"http://112.45.152.8:8010/", + "webHost":"http://112.45.152.8:8000/", // "webHost":"http://112.45.152.8:8000/", // 开发环境下自动填充登录账号密码,与接口地址一一对应,只在开发环境下显示 "devAccount": [ From ed90528d1776d3224a3bc25ee2041af0d7b229c1 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Mon, 28 Aug 2023 14:59:44 +0800 Subject: [PATCH 42/50] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=97=B6=E9=97=B4=E5=AD=97=E6=AE=B5=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js | 2 +- .../FinaChargeStuOrder/FinaChargeStuOrderService.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js index 5ac465b3f..1bbdb8193 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js +++ b/Learun.Framework.Ultimate V7/Learun.Application.Web/Areas/ReceiveSendFeeManagement/Views/FinaChargeStuOrder/Index.js @@ -181,7 +181,7 @@ var bootstrap = function ($, learun) { ], mainId:'Id', isPage: true, - sidx:'PayTime desc' + sidx:'PlaceOrderTime desc' }); }, search: function (param) { diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs index 59d73c6df..b1dfbc260 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -47,7 +47,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement { dp.Add("startTime", queryParam["StartTime"].ToDate(), DbType.DateTime); dp.Add("endTime", queryParam["EndTime"].ToDate(), DbType.DateTime); - strSql.Append(" AND ( t.PayTime >= @startTime AND t.PayTime <= @endTime ) "); + strSql.Append(" AND ( t.PlaceOrderTime >= @startTime AND t.PlaceOrderTime <= @endTime ) "); } if (!queryParam["YearNo"].IsEmpty()) { From a8ea3d0a7bf78fa73a03b1bfabdf526204f37612 Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Mon, 28 Aug 2023 16:43:14 +0800 Subject: [PATCH 43/50] =?UTF-8?q?=E7=94=9F=E6=88=90=E7=BC=B4=E8=B4=B9?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=8E=BB=E6=8E=89=E7=B3=BB=E9=83=A8=E5=8C=B9?= =?UTF-8?q?=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuYear/FinaChargeStuYearService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs index 35cffbfff..8a2c5e3a1 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuYear/FinaChargeStuYearService.cs @@ -390,7 +390,7 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement finaChargeStuYearItem.FSBlance = 0; db.Insert(finaChargeStuYearItem); } - finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.DeptNo == stuitem.DeptNo && m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; + finaChargeStuYear.YJAmount = finaChargesStandardListGroup.FirstOrDefault(m => m.MajorNo == stuitem.MajorNo && m.Grade == stuitem.Grade)?.YJAmount; finaChargeStuYear.NeedToPay = finaChargeStuYear.YJAmount; finaChargeStuYear.FSBlance = 0; db.Insert(finaChargeStuYear); From ca524ad56621ef72442a52d48dd56b8fbb2030fd Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Mon, 28 Aug 2023 20:43:46 +0800 Subject: [PATCH 44/50] =?UTF-8?q?=E8=A5=BF=E6=98=8C=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ReceiveSendFeeManagement/PayFee/list.vue | 6 +++--- .../ReceiveSendFeeManagement/PayFee/single.vue | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue index 26f38a5d3..7539d6177 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/list.vue @@ -19,13 +19,13 @@ 姓名: {{ item.StuName }} - + 身份证号: - {{ item.IdentityCardNo }} + {{ item.IdentityCardNo.replace(/^(.{6})(?:\d+)(.{2})$/,"$1**********$2") }} 缴费年度: diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue index 845d392d4..d2b1eee88 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/ReceiveSendFeeManagement/PayFee/single.vue @@ -3,7 +3,8 @@ - + + ({ value: t.value, text: t.text })), // OnsitePayStatus: Object.values(this.GET_GLOBAL('dataDictionary').OnsitePayStatus).map(t => ({ value: t.value, text: t.text })) }, @@ -91,6 +93,10 @@ export default{ type: 'dataItem', dataType: 'dataDictionary' }, + MajorNo:{ + type: 'dataItem', + dataType: 'dataDictionary' + }, }, StuInfoFreshData:{}, @@ -137,6 +143,13 @@ export default{ value: t.deptno })); }), + + this.FETCH_DATASOURCE('CdMajorInfo').then(data => { + this.dataSource.MajorNo = data.data.map(t => ({ + text: t.majorname, + value: t.majorno + })); + }), () => {} ]); From 911bedc26689eed1a849c867e8f98c283ead344d Mon Sep 17 00:00:00 2001 From: fzp <645608524@qq.com> Date: Tue, 29 Aug 2023 18:23:33 +0800 Subject: [PATCH 45/50] =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinaChargeStuOrderService.cs | 60 +++++++++++++------ .../LearunApp-2.2.0/pages/login.vue | 6 +- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs index b1dfbc260..190d35141 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ReceiveSendFeeManagement/FinaChargeStuOrder/FinaChargeStuOrderService.cs @@ -366,20 +366,31 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement db.Insert(orderEntity); db.Insert(detail); //判断实缴金额是否缴清费用 - decimal sjcount = Convert.ToDecimal(db.FindObject("select isnull(sum(SJAmount),0) from FinaChargeStuOrder where StuNo='" + orderEntity.StuNo + "' and Status=1 and YearNo='" + orderEntity.YearNo + "' ")); - //增加本次缴费金额 - sjcount = sjcount + orderEntity.SJAmount.Value; - decimal yjcount = finaChargeStuYearEntity.YJAmount.Value; - if (sjcount >= yjcount) - { - //更新缴费状态 - db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='1' where FSYId='" + finaChargeStuYearEntity.FSYId + "'"); - } - else//更新部分缴费状态 - { - //更新缴费状态 - db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='4' where FSYId='" + finaChargeStuYearEntity.FSYId + "'"); - } + //如果存在未缴费的非固定项目,直接判定部分缴费 + var fgdfinaChargeStuYearItem = db.FindList("select * from FinaChargeStuYearItem where ChargeItemType=2 and PayFeeStatus<>1 and FSYId='"+ finaChargeStuYearEntity.FSYId+ "'"); + var gdfinaChargeStuYearItem = db.FindList("select * from FinaChargeStuYearItem where ChargeItemType=1 and PayFeeStatus<>1 and FSYId='" + finaChargeStuYearEntity.FSYId + "'"); + //if (fgdfinaChargeStuYearItem.Count()==0) + //{ + // decimal sjcount = Convert.ToDecimal(db.FindObject("select isnull(sum(SJAmount),0) from FinaChargeStuOrder where StuNo='" + orderEntity.StuNo + "' and Status=1 and YearNo='" + orderEntity.YearNo + "' ")); + // //增加本次缴费金额 + // sjcount = sjcount + orderEntity.SJAmount.Value; + // decimal yjcount = finaChargeStuYearEntity.YJAmount.Value; + // if (sjcount >= yjcount) + // { + // //更新缴费状态 + // db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='1' where FSYId='" + finaChargeStuYearEntity.FSYId + "'"); + // } + // else//更新部分缴费状态 + // { + // //更新缴费状态 + // db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='4' where FSYId='" + finaChargeStuYearEntity.FSYId + "'"); + // } + //} + //else + //{ + // //更新缴费状态 + // db.ExecuteBySql("update FinaChargeStuYear set PayFeeStatus='4' where FSYId='" + finaChargeStuYearEntity.FSYId + "'"); + //} //费用变更明细 FinaChargeStuBalanceEntity finaChargeStuBalanceEntity = new FinaChargeStuBalanceEntity(); finaChargeStuBalanceEntity.Create(); @@ -419,10 +430,23 @@ namespace Learun.Application.TwoDevelopment.ReceiveSendFeeManagement } finaChargeStuYearItemEntity.PayFeeStatus = finaChargeStuYearItemEntity.NeedToPay > 0 ? 4 : 1; db.Update(finaChargeStuYearItemEntity); - //FinaChargeStuYear表 - db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount+" + dresult + ",NeedToPay=(case when(NeedToPay-"+ dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end),PayFeeStatus=(case when(NeedToPay-" + dresult + ">=0) then 4 else 1 end) where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); - //FinaChargeStudent表 - db.ExecuteBySql("update FinaChargeStudent set NeedToPay=(case when(NeedToPay-"+ dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end) where StuNo='" + finaChargeStuYearItemEntity.StuNo + "'"); + //如果存在未缴费的非固定项目,应缴余额和超出应收应该排除掉 + //同时满足固定项目超出的情况 + if (fgdfinaChargeStuYearItem.Count() == 0) + { + //FinaChargeStuYear表 + db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount+" + dresult + ",NeedToPay=(case when(NeedToPay-" + dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end),PayFeeStatus=(case when(NeedToPay-" + dresult + ">=0) then 4 else 1 end) where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + //FinaChargeStudent表 + db.ExecuteBySql("update FinaChargeStudent set NeedToPay=(case when(NeedToPay-" + dresult + ")>0 then (NeedToPay-" + dresult + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult + ")>=0 then 0 else abs(NeedToPay-" + dresult + ") end) where StuNo='" + finaChargeStuYearItemEntity.StuNo + "'"); + } + if(fgdfinaChargeStuYearItem.Count() >0 && gdfinaChargeStuYearItem.Sum(m => m.NeedToPay).Value - dresult <= 0) + { + decimal fgdcount = fgdfinaChargeStuYearItem.Sum(m=>m.NeedToPay).Value; + //FinaChargeStuYear表 + db.ExecuteBySql("update FinaChargeStuYear set SJAmount=SJAmount+" + dresult + ",NeedToPay=(case when(NeedToPay-" + dresult+"+"+ fgdcount + ")>0 then (NeedToPay-" + dresult+"+"+ fgdcount + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult +"+"+ fgdcount + ")>=0 then 0 else abs(NeedToPay-" + dresult +"+"+ fgdcount + ") end),PayFeeStatus=(case when(NeedToPay-" + dresult +"+"+ fgdcount + ">=0) then 4 else 1 end) where FSYId='" + finaChargeStuYearItemEntity.FSYId + "'"); + //FinaChargeStudent表 + db.ExecuteBySql("update FinaChargeStudent set NeedToPay=(case when(NeedToPay-" + dresult +"+"+ fgdcount + ")>0 then (NeedToPay-" + dresult +"+"+ fgdcount + ") else 0 end),FSBlance=(case when(NeedToPay-" + dresult +"+"+ fgdcount + ")>=0 then 0 else abs(NeedToPay-" + dresult +"+"+ fgdcount + ") end) where StuNo='" + finaChargeStuYearItemEntity.StuNo + "'"); + } db.Commit(); snum++; } diff --git a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/login.vue b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/login.vue index a731c6afc..4cf874dc0 100644 --- a/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/login.vue +++ b/Learun.Framework.Ultimate V7/LearunApp-2.2.0/pages/login.vue @@ -25,7 +25,7 @@ - + @@ -33,9 +33,9 @@ 登 录 微信登录 - +