From ef69cb5d5bd12c55e19f11989c55dc2230c6616f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=93=E5=A4=A7=E5=B8=88?= <156663459@qq.com> Date: Fri, 29 Jan 2021 13:00:03 +0800 Subject: [PATCH] first commit init --- .dockerignore | 25 + .docs/contents/.vuepress/config.js | 46 + .../.vuepress/public/bcvphomelogo.png | Bin 0 -> 5644 bytes .docs/contents/.vuepress/public/favicon.ico | Bin 0 -> 1556 bytes .docs/contents/Contribution/README.md | 84 + .docs/contents/PressureTest/README.md | 54 + .docs/contents/QQ/README.md | 11 + .docs/contents/README.md | 14 + .docs/contents/Update/README.md | 121 + .docs/contents/guide/README.md | 89 + .docs/contents/guide/cheat-sheet.md | 580 ++ .docs/contents/guide/function-sheet.md | 471 ++ .docs/contents/guide/getting-started.md | 125 + .docs/package.json | 12 + .editorconfig | 4 + .github/FUNDING.yml | 12 + .github/ISSUE_TEMPLATE/config.yml | 22 + .github/workflows/dotnetcore.yml | 17 + .gitignore | 353 ++ CreateYourProject.bat | 23 + LICENSE | 201 + .../New_College.AdminMvc.csproj | 7 + New_College.AdminMvc/Program.cs | 20 + .../Properties/launchSettings.json | 27 + New_College.AdminMvc/Startup.cs | 42 + .../appsettings.Development.json | 9 + New_College.AdminMvc/appsettings.json | 10 + New_College.Api/.config/dotnet-tools.json | 12 + .../Controllers/Back/AutoController.cs | 183 + .../Controllers/Back/CustomerController.cs | 33 + .../Back/ExaminationPolicyController.cs | 80 + .../Controllers/Back/OrderInfoController.cs | 43 + .../Controllers/Back/VipCardController.cs | 102 + New_College.Api/Controllers/BlogController.cs | 336 ++ .../Controllers/DbFirst/DbFirstController.cs | 133 + .../Controllers/DbFirst/MigrateController.cs | 191 + .../Controllers/Front/CustomerController.cs | 199 + .../Front/ExaminationPolicyController.cs | 37 + .../Controllers/Front/LibraryController.cs | 334 ++ .../Front/MajorSalaryController.cs | 33 + .../Controllers/Front/OrderController.cs | 39 + .../Controllers/Front/RegionController.cs | 43 + .../Controllers/Front/TestController.cs | 325 ++ .../Front/UniversityCollectionController.cs | 93 + .../Controllers/Front/VipController.cs | 68 + .../Controllers/Front/VolunteerController.cs | 259 + .../Controllers/Front/WeixinPayController.cs | 343 ++ .../Controllers/HealthCheckController.cs | 22 + New_College.Api/Controllers/ImgController.cs | 194 + .../Controllers/LoginController.cs | 299 + .../Controllers/ModuleController.cs | 140 + .../Controllers/MonitorController.cs | 132 + .../Controllers/PermissionController.cs | 536 ++ New_College.Api/Controllers/RoleController.cs | 137 + .../Controllers/SysRegionController.cs | 133 + .../Controllers/TasksQzController.cs | 185 + .../Controllers/TopicController.cs | 72 + .../Controllers/TopicDetailController.cs | 178 + .../Controllers/TransactionController.cs | 129 + New_College.Api/Controllers/UserController.cs | 246 + .../Controllers/UserRoleController.cs | 92 + .../Controllers/ValuesController.cs | 300 + .../Controllers/v1/ApbController.cs | 29 + .../Controllers/v2/ApbController.cs | 32 + New_College.Api/Dockerfile | 36 + .../Filter/CustomRouteAttribute.cs | 37 + .../Filter/GlobalAuthorizeFilter.cs | 56 + .../Filter/GlobalExceptionFilter.cs | 90 + .../Filter/GlobalRoutePrefixFilter.cs | 51 + .../Filter/UseServiceDIAttribute.cs | 42 + New_College.Api/Log4net.config | 61 + New_College.Api/New_College.Api.csproj | 93 + New_College.Api/New_College.Model.xml | 5198 +++++++++++++++++ New_College.Api/New_College.xml | 1469 +++++ New_College.Api/Program.cs | 63 + .../Properties/launchSettings.json | 34 + New_College.Api/Startup.cs | 226 + New_College.Api/appsettings.Development.json | 9 + New_College.Api/appsettings.json | 210 + New_College.Api/index.html | 137 + .../BlogCore.Data.json/BlogArticle.tsv | 15 + .../wwwroot/BlogCore.Data.json/Modules.tsv | 926 +++ .../wwwroot/BlogCore.Data.json/Permission.tsv | 1670 ++++++ .../wwwroot/BlogCore.Data.json/Role.tsv | 408 ++ .../RoleModulePermission.tsv | 1562 +++++ .../wwwroot/BlogCore.Data.json/TasksQz.tsv | 20 + .../wwwroot/BlogCore.Data.json/Topic.tsv | 16 + .../BlogCore.Data.json/TopicDetail.tsv | 19 + .../wwwroot/BlogCore.Data.json/UserRole.tsv | 134 + .../BlogCore.Data.json/sysUserInfo.tsv | 704 +++ New_College.Api/wwwroot/CorsPost.html | 100 + New_College.Api/wwwroot/JMeterTest.png | Bin 0 -> 46381 bytes ...orizontal_Preferred_Cyan300_CMYK_72ppi.png | Bin 0 -> 4674 bytes New_College.Api/wwwroot/NoInterAutofacIOC.rar | Bin 0 -> 42175 bytes New_College.Api/wwwroot/QQGroup.png | Bin 0 -> 20699 bytes New_College.Api/wwwroot/index.html | 42 + New_College.Api/wwwroot/laozhangisphigood.jpg | Bin 0 -> 16218 bytes New_College.Api/wwwroot/logo.jpg.jpg | Bin 0 -> 14778 bytes New_College.Api/wwwroot/logo.png.png | Bin 0 -> 2014 bytes .../wwwroot/logo/favicon-32x32.png | Bin 0 -> 1556 bytes New_College.Api/wwwroot/logocore.png | Bin 0 -> 18630 bytes New_College.Api/wwwroot/operateFlow.gif | Bin 0 -> 1024730 bytes New_College.Api/wwwroot/web.config | 3 + New_College.Build.bat | 21 + .../Attribute/CachingAttribute.cs | 17 + .../Attribute/UseTranAttribute.cs | 13 + New_College.Common/DB/AppSecretConfig.cs | 47 + New_College.Common/DB/BaseDBConfig.cs | 133 + New_College.Common/DB/MainDb.cs | 7 + New_College.Common/Enum/EnumHelper.cs | 210 + New_College.Common/Excel/ExcelUtil.cs | 143 + .../GlobalVar/AliYunOssConfig.cs | 19 + New_College.Common/GlobalVar/GlobalVars.cs | 29 + New_College.Common/GlobalVar/WeiXinConfig.cs | 35 + New_College.Common/Helper/AliYunOssHelper.cs | 44 + New_College.Common/Helper/AliyunSmsSender.cs | 230 + New_College.Common/Helper/Appsettings.cs | 69 + New_College.Common/Helper/Base32Helper.cs | 101 + New_College.Common/Helper/ClearHtmlHelper.cs | 29 + New_College.Common/Helper/CommonTools.cs | 29 + New_College.Common/Helper/ConsoleHelper.cs | 54 + New_College.Common/Helper/DataHelper.cs | 154 + New_College.Common/Helper/DateHelper.cs | 22 + New_College.Common/Helper/FileHelper.cs | 377 ++ .../Helper/GenerateCardNumberHelper.cs | 53 + .../Helper/GenerateChineseWords.cs | 48 + New_College.Common/Helper/GetNetData.cs | 57 + New_College.Common/Helper/HtmlHelper.cs | 24 + New_College.Common/Helper/JsonHelper.cs | 155 + New_College.Common/Helper/MD5Hepler.cs | 67 + New_College.Common/Helper/ObjectExtension.cs | 862 +++ .../Helper/OrderGenerateHelper.cs | 24 + New_College.Common/Helper/RadomHelper.cs | 167 + New_College.Common/Helper/RecursionHelper.cs | 129 + New_College.Common/Helper/SerializeHelper.cs | 35 + New_College.Common/Helper/StringHelper.cs | 43 + New_College.Common/Helper/TimeUtil.cs | 23 + New_College.Common/Helper/UnicodeHelper.cs | 47 + New_College.Common/Helper/UtilConvert.cs | 183 + New_College.Common/Helper/WeChatPayHelper.cs | 77 + .../Helper/WeChatPayOrderQuery.cs | 69 + New_College.Common/Helper/WeixinHelper.cs | 202 + New_College.Common/Helper/WxPayData.cs | 269 + .../Helper/XmlSerializeHelper.cs | 122 + .../HttpContextUser/AspNetUser.cs | 81 + New_College.Common/HttpContextUser/IUser.cs | 17 + .../HttpRestSharp/HttpHelper.cs | 73 + .../HttpRestSharp/IRestSharp.cs | 43 + .../HttpRestSharp/RestSharpClient.cs | 135 + New_College.Common/Hubs/ChatHub.cs | 89 + New_College.Common/Hubs/IChatClient.cs | 24 + New_College.Common/LogHelper/LogInfo.cs | 13 + New_College.Common/LogHelper/LogLock.cs | 391 ++ New_College.Common/LogHelper/RequestInfo.cs | 36 + .../LogHelper/Seri/SerilogServer.cs | 56 + .../MemoryCache/ICachingProvider.cs | 12 + .../MemoryCache/MemoryCaching.cs | 30 + New_College.Common/New_College.Common.csproj | 34 + .../Redis/IRedisCacheManager.cs | 33 + New_College.Common/Redis/RedisCacheManager.cs | 158 + .../New_College.ConsoleApp.csproj | 8 + New_College.ConsoleApp/Program.cs | 12 + New_College.Extensions/AOP/BlogCacheAOP.cs | 53 + New_College.Extensions/AOP/BlogLogAOP.cs | 222 + .../AOP/BlogRedisCacheAOP.cs | 88 + New_College.Extensions/AOP/BlogTranAOP.cs | 91 + .../AOP/BlogUserAuditAOP.cs | 69 + New_College.Extensions/AOP/CacheAOPbase.cs | 224 + .../Authorizations/OverWrite/JwtHelper.cs | 118 + .../Authorizations/OverWrite/JwtTokenAuth.cs | 92 + .../Authorizations/Policys/ApiResponse.cs | 52 + .../Policys/ApiResponseHandler.cs | 38 + .../Authorizations/Policys/JwtToken.cs | 45 + .../Policys/PermissionHandler.cs | 193 + .../Authorizations/Policys/PermissionItem.cs | 19 + .../Policys/PermissionRequirement.cs | 72 + .../AutoMapper/AutoMapperConfig.cs | 18 + .../AutoMapper/CustomProfile.cs | 18 + .../Middlewares/AllServicesMildd.cs | 56 + .../Middlewares/ConsulMildd.cs | 52 + .../Middlewares/ExceptionHandlerMidd.cs | 54 + .../Middlewares/IPLogMildd.cs | 127 + .../Middlewares/IpLimitMildd.cs | 33 + .../Middlewares/MiddlewareHelpers.cs | 68 + .../Middlewares/QuartzJobMildd.cs | 51 + .../Middlewares/RecordAccessLogsMildd.cs | 144 + .../Middlewares/RequRespLogMildd.cs | 120 + .../Middlewares/SeedDataMildd.cs | 33 + .../Middlewares/SignalRSendMildd.cs | 46 + .../Middlewares/SwaggerMildd.cs | 48 + .../New_College.Extensions.csproj | 29 + .../ServiceExtensions/AppConfigSetup.cs | 129 + .../Authentication_Ids4Setup.cs | 40 + .../Authentication_JWTSetup.cs | 94 + .../ServiceExtensions/AuthorizationSetup.cs | 96 + .../ServiceExtensions/AutoMapperSetup.cs | 21 + .../AutofacModuleRegister.cs | 116 + .../ServiceExtensions/CorsSetup.cs | 47 + .../ServiceExtensions/DbSetup.cs | 20 + .../ServiceExtensions/HttpContextSetup.cs | 21 + .../IpPolicyRateLimitSetup.cs | 36 + .../ServiceExtensions/JobSetup.cs | 25 + .../ServiceExtensions/MemoryCacheSetup.cs | 25 + .../ServiceExtensions/MiniProfilerSetup.cs | 30 + .../ServiceExtensions/SqlsugarSetup.cs | 90 + .../ServiceExtensions/SwaggerSetup.cs | 133 + .../ServiceExtensions/WebApiClientSetup.cs | 33 + New_College.FrameWork/DbHelper.ttinclude | 322 + New_College.FrameWork/ModelAuto.ttinclude | 115 + .../New_College.FrameWork.tt | 60 + .../New_College.FrameWork.IRepository.cs | 18 + .../New_College.FrameWork.IRepository.tt | 123 + .../New_College.FrameWork.IServices.cs | 15 + .../New_College.FrameWork.IServices.tt | 126 + .../New_College.FrameWork.Repository.cs | 14 + .../New_College.FrameWork.Repository.tt | 133 + .../New_College.FrameWork.Services.cs | 15 + .../New_College.FrameWork.Services.tt | 158 + .../New_College.FrameWork.csproj | 57 + New_College.IServices/BASE/IBaseServices.cs | 60 + .../IAdvertisementServices.cs | 16 + New_College.IServices/IBlogArticleServices.cs | 16 + .../ID_EnrollmentinproductionServices.cs | 12 + .../ID_GraduateFlowServices.cs | 12 + New_College.IServices/ID_LongIdMapServices.cs | 90 + .../ID_MajorCategoryServices.cs | 12 + .../ID_MajorClassServices.cs | 17 + .../ID_MajorInformationServices.cs | 12 + .../ID_MajorMapOccouptionServices.cs | 12 + .../ID_MajorMapTagServices.cs | 12 + .../ID_MajorMapUniversityServices.cs | 12 + .../ID_MajorObtainServices.cs | 12 + .../ID_MajorSalaryServices.cs | 24 + New_College.IServices/ID_MajorServices.cs | 12 + New_College.IServices/ID_OccMapTagServices.cs | 12 + .../ID_OccupationCategoryServices.cs | 12 + .../ID_OccupationServices.cs | 12 + .../ID_UniversityCollectionServices.cs | 35 + .../ID_UniversityRankServices.cs | 12 + .../ID_UniversityServices.cs | 24 + .../ID_UniversityimgServices.cs | 12 + New_College.IServices/IGuestbookServices.cs | 13 + .../IModulePermissionServices.cs | 9 + New_College.IServices/IModuleServices.cs | 14 + New_College.IServices/IPasswordLibServices.cs | 9 + New_College.IServices/IPermissionServices.cs | 8 + .../IRoleModulePermissionServices.cs | 19 + New_College.IServices/IRoleServices.cs | 16 + New_College.IServices/ISysRegionServices.cs | 18 + .../IT_BatchTypeInfoServices.cs | 12 + New_College.IServices/IT_BatchlineServices.cs | 12 + .../IT_EnrollmentBatchServices.cs | 12 + .../IT_EnrollmentPlaneServices.cs | 14 + .../IT_EnrollmentPlanedescServices.cs | 131 + New_College.IServices/IT_GearInfoServices.cs | 12 + New_College.IServices/IT_LongIdMapServices.cs | 18 + .../IT_PlanMapTagServices.cs | 12 + .../IT_RegionScoreServices.cs | 12 + New_College.IServices/ITasksQzServices.cs | 16 + .../ITest_CategoryInfoServices.cs | 18 + .../ITest_CycleTimeInfoServices.cs | 15 + .../ITest_HollandResultInfoServices.cs | 12 + .../ITest_MBTIMapResultServices.cs | 12 + .../ITest_PsychMeasurementInfoServices.cs | 66 + .../ITest_QuestionInfoServices.cs | 18 + .../ITest_QuestionTypeInfoServices.cs | 12 + New_College.IServices/ITopicDetailServices.cs | 12 + New_College.IServices/ITopicServices.cs | 12 + .../IU_ProbabilityHistoryServices.cs | 12 + .../IU_VolunteerTableDetailServices.cs | 12 + .../IU_VolunteerTableServices.cs | 12 + New_College.IServices/IUserRoleServices.cs | 17 + .../IV_CustomerInfoServices.cs | 69 + .../IV_ExaminationPolicyServices.cs | 27 + New_College.IServices/IV_OrderInfoServices.cs | 64 + .../IV_SubjectSelectServices.cs | 28 + .../IV_VipCardInfoServices.cs | 72 + .../IV_VipCardTypeServices.cs | 22 + New_College.IServices/IsysUserInfoServices.cs | 17 + .../New_College.IServices.csproj | 11 + .../DoubanApis/DoubanViewModel.cs | 96 + .../WebApiClients/DoubanApis/IDoubanApi.cs | 22 + .../WebApiClients/HttpApis/IBlogApi.cs | 84 + New_College.Model/Love.cs | 25 + New_College.Model/MessageModel.cs | 26 + New_College.Model/Models/Advertisement.cs | 35 + New_College.Model/Models/BannerInfo.cs | 43 + New_College.Model/Models/BlogArticle.cs | 73 + .../Models/D_Enrollmentinproduction.cs | 38 + New_College.Model/Models/D_GraduateFlow.cs | 19 + New_College.Model/Models/D_LongIdMap.cs | 18 + New_College.Model/Models/D_Major.cs | 44 + New_College.Model/Models/D_MajorCategory.cs | 30 + New_College.Model/Models/D_MajorClass.cs | 25 + .../Models/D_MajorInformation.cs | 48 + .../Models/D_MajorMapOccouption.cs | 23 + New_College.Model/Models/D_MajorMapTag.cs | 25 + .../Models/D_MajorMapUniversity.cs | 28 + New_College.Model/Models/D_MajorObtain.cs | 131 + New_College.Model/Models/D_MajorSalary.cs | 24 + New_College.Model/Models/D_OccMapTag.cs | 25 + New_College.Model/Models/D_Occupation.cs | 37 + .../Models/D_OccupationCategory.cs | 27 + New_College.Model/Models/D_University.cs | 121 + .../Models/D_UniversityCollection.cs | 27 + New_College.Model/Models/D_UniversityRank.cs | 33 + New_College.Model/Models/D_Universityimg.cs | 21 + New_College.Model/Models/Guestbook.cs | 57 + New_College.Model/Models/Module.cs | 95 + New_College.Model/Models/ModulePermission.cs | 34 + New_College.Model/Models/Modules.cs | 121 + New_College.Model/Models/N_AgentCourse.cs | 24 + New_College.Model/Models/N_MaterialLibrary.cs | 29 + New_College.Model/Models/OperateLog.cs | 60 + New_College.Model/Models/PasswordLib.cs | 60 + New_College.Model/Models/Permission.cs | 150 + New_College.Model/Models/Role.cs | 92 + .../Models/RoleModulePermission.cs | 82 + New_College.Model/Models/RootEntity.cs | 100 + New_College.Model/Models/SysRegion.cs | 52 + New_College.Model/Models/T_BatchTypeInfo.cs | 37 + New_College.Model/Models/T_Batchline.cs | 47 + New_College.Model/Models/T_EnrollmentBatch.cs | 41 + New_College.Model/Models/T_EnrollmentPlane.cs | 28 + .../Models/T_EnrollmentPlanedesc.cs | 117 + New_College.Model/Models/T_GearInfo.cs | 39 + New_College.Model/Models/T_LongIdMap.cs | 18 + New_College.Model/Models/T_PlanMapTag.cs | 22 + New_College.Model/Models/T_RegionScore.cs | 33 + New_College.Model/Models/TasksQz.cs | 74 + New_College.Model/Models/TestModels.cs | 13 + New_College.Model/Models/Test_CategoryInfo.cs | 32 + .../Models/Test_CycleTimeInfo.cs | 28 + .../Models/Test_HollandResultInfo.cs | 74 + .../Models/Test_MBTIMapResult.cs | 51 + .../Models/Test_PsychMeasurementInfo.cs | 51 + New_College.Model/Models/Test_QuestionInfo.cs | 47 + .../Models/Test_QuestionTypeInfo.cs | 22 + New_College.Model/Models/Topic.cs | 45 + New_College.Model/Models/TopicDetail.cs | 53 + .../Models/U_ProbabilityHistory.cs | 47 + New_College.Model/Models/U_VolunteerTable.cs | 22 + .../Models/U_VolunteerTableDetail.cs | 39 + New_College.Model/Models/UserRole.cs | 45 + New_College.Model/Models/V_CustomerInfo.cs | 134 + .../Models/V_ExaminationPolicy.cs | 35 + New_College.Model/Models/V_OrderInfo.cs | 74 + New_College.Model/Models/V_SubjectSelect.cs | 26 + New_College.Model/Models/V_VipCardInfo.cs | 41 + New_College.Model/Models/V_VipCardType.cs | 37 + New_College.Model/Models/sysUserInfo.cs | 109 + New_College.Model/New_College.Model.csproj | 25 + New_College.Model/PageModel.cs | 33 + .../Request/DecryptUserInfoRequest.cs | 25 + New_College.Model/Request/LoginQuery.cs | 19 + New_College.Model/Request/WeixinLogin.cs | 11 + New_College.Model/ResponseEnum.cs | 23 + New_College.Model/Seed/DBSeed.cs | 246 + New_College.Model/Seed/FrameSeed.cs | 648 ++ New_College.Model/Seed/MyContext.cs | 254 + New_College.Model/TableModel.cs | 27 + .../ViewModels/AdvertisementViewModels.cs | 39 + .../ViewModels/AliyunSmsSenderConfig.cs | 69 + New_College.Model/ViewModels/BaseQuery.cs | 33 + New_College.Model/ViewModels/BaseResult.cs | 27 + .../ViewModels/BlogViewModels.cs | 83 + .../ViewModels/GuestbookViewModels.cs | 51 + .../ViewModels/LoginInfoViewModels.cs | 13 + .../ViewModels/ModuleViewModels.cs | 6 + .../ViewModels/Query/AliPayQuery.cs | 28 + .../ViewModels/Query/BatchQuery.cs | 13 + .../ViewModels/Query/CategoryInfoQuery.cs | 30 + .../ViewModels/Query/CustomerInfoQuery.cs | 140 + .../Query/ExaminationPolicyQuery.cs | 43 + .../ViewModels/Query/MajorQuery.cs | 145 + .../ViewModels/Query/MajorSalaryQuery.cs | 14 + .../ViewModels/Query/MajorcategoryQuery.cs | 14 + .../ViewModels/Query/OccupationQuery.cs | 11 + .../ViewModels/Query/OrderInfoQuery.cs | 133 + .../ViewModels/Query/OrderQuery.cs | 28 + .../ViewModels/Query/PlanDetailQuery.cs | 53 + .../ViewModels/Query/PlanQuery.cs | 26 + .../ViewModels/Query/ProbabilityQuery.cs | 11 + .../ViewModels/Query/PsychMeasurementQuery.cs | 106 + .../Query/RecommendUniversityQuery.cs | 82 + .../ViewModels/Query/SubjectSelectQuery.cs | 102 + .../ViewModels/Query/SysRegionQuery.cs | 14 + .../Query/TagEnrollmentPlaneQuery.cs | 178 + .../ViewModels/Query/TestQuery.cs | 19 + .../ViewModels/Query/UniOrderQuery.cs | 15 + .../Query/UniversityCollectionQuery.cs | 40 + .../ViewModels/Query/UniversityQuery.cs | 67 + .../ViewModels/Query/VipCardInfoQuery.cs | 53 + .../ViewModels/Query/VipCardQuery.cs | 36 + .../ViewModels/Query/VipCardTypeQuery.cs | 28 + .../ViewModels/Query/VolunteerTableQuery.cs | 87 + .../ViewModels/Query/WeChatPayQuery.cs | 77 + .../ViewModels/Query/appQuestionQuery.cs | 11 + .../ViewModels/Result/AliPayOrderResponse.cs | 110 + .../ViewModels/Result/AliPayResult.cs | 19 + .../ViewModels/Result/CategoryInfoResult.cs | 35 + .../ViewModels/Result/CreateOrderModel.cs | 29 + .../ViewModels/Result/CustomerInfoResult.cs | 151 + .../ViewModels/Result/CycleInfoResult.cs | 15 + .../Result/EnrollmentinproductionResult.cs | 63 + .../Result/ExaminationPolicyResult.cs | 74 + .../ViewModels/Result/MBTICalcModel.cs | 29 + .../ViewModels/Result/MajorPlanResult.cs | 37 + .../ViewModels/Result/MajorResult.cs | 122 + .../ViewModels/Result/MajorSalaryResult.cs | 31 + .../ViewModels/Result/OccupationResult.cs | 51 + .../ViewModels/Result/OrderResult.cs | 13 + .../ViewModels/Result/ProbabilityResult.cs | 41 + .../Result/PsychMeasurementListResult.cs | 195 + .../ViewModels/Result/SubjectSelectResult.cs | 29 + .../ViewModels/Result/SysRegionResult.cs | 31 + .../Result/UniversityCollectionResult.cs | 122 + .../ViewModels/Result/UniversityResult.cs | 278 + .../ViewModels/Result/VipCardInfoResult.cs | 54 + .../ViewModels/Result/VipCardTypeResult.cs | 28 + .../ViewModels/Result/VipInfoResult.cs | 34 + .../ViewModels/Result/VolunteerResult.cs | 228 + .../ViewModels/Result/VolunteerTableResult.cs | 80 + .../ViewModels/Result/WeChatPayResult.cs | 30 + .../ViewModels/Result/WeixinPayRespose.cs | 37 + .../ViewModels/Result/WeixinPayResult.cs | 23 + .../ViewModels/Result/appQuestionResult.cs | 76 + .../ViewModels/Result/uniMajorSecond.cs | 40 + .../ViewModels/ServerViewModel.cs | 39 + .../ViewModels/SidebarMenuViewModel.cs | 27 + .../ViewModels/TestRestSharpGetDto.cs | 19 + .../ViewModels/TestRestSharpPostDto.cs | 11 + .../ViewModels/TokenInfoViewModel.cs | 10 + .../ViewModels/TopgbViewModels.cs | 23 + New_College.Model/WeixinAuthInfo.cs | 53 + New_College.Model/WeixinResult.cs | 16 + New_College.Publish.Docker.sh | 18 + New_College.Publish.Linux.sh | 6 + New_College.Publish.bat | 19 + New_College.Repository/BASE/BaseRepository.cs | 458 ++ .../D_EnrollmentinproductionRepository.cs | 17 + .../BASE/D_GraduateFlowRepository.cs | 17 + .../BASE/D_LongIdMapRepository.cs | 17 + .../BASE/D_MajorCategoryRepository.cs | 17 + .../BASE/D_MajorClassRepository.cs | 17 + .../BASE/D_MajorInformationRepository.cs | 17 + .../BASE/D_MajorMapOccouptionRepository.cs | 17 + .../BASE/D_MajorMapTagRepository.cs | 17 + .../BASE/D_MajorMapUniversityRepository.cs | 17 + .../BASE/D_MajorObtainRepository.cs | 17 + .../BASE/D_MajorRepository.cs | 17 + .../BASE/D_MajorSalaryRepository.cs | 17 + .../BASE/D_OccMapTagRepository.cs | 17 + .../BASE/D_OccupationCategoryRepository.cs | 17 + .../BASE/D_OccupationRepository.cs | 17 + .../BASE/D_UniversityCollectionRepository.cs | 17 + .../BASE/D_UniversityRankRepository.cs | 17 + .../BASE/D_UniversityRepository.cs | 17 + .../BASE/D_UniversityimgRepository.cs | 17 + .../BASE/IBaseRepository.cs | 58 + .../ID_EnrollmentinproductionRepository.cs | 12 + .../BASE/ID_GraduateFlowRepository.cs | 12 + .../BASE/ID_LongIdMapRepository.cs | 12 + .../BASE/ID_MajorCategoryRepository.cs | 12 + .../BASE/ID_MajorClassRepository.cs | 12 + .../BASE/ID_MajorInformationRepository.cs | 12 + .../BASE/ID_MajorMapOccouptionRepository.cs | 12 + .../BASE/ID_MajorMapTagRepository.cs | 12 + .../BASE/ID_MajorMapUniversityRepository.cs | 12 + .../BASE/ID_MajorObtainRepository.cs | 12 + .../BASE/ID_MajorRepository.cs | 12 + .../BASE/ID_MajorSalaryRepository.cs | 12 + .../BASE/ID_OccMapTagRepository.cs | 12 + .../BASE/ID_OccupationCategoryRepository.cs | 12 + .../BASE/ID_OccupationRepository.cs | 12 + .../BASE/ID_UniversityCollectionRepository.cs | 12 + .../BASE/ID_UniversityRankRepository.cs | 12 + .../BASE/ID_UniversityRepository.cs | 12 + .../BASE/ID_UniversityimgRepository.cs | 12 + .../BASE/ISysRegionRepository.cs | 12 + .../BASE/IT_BatchTypeInfoRepository.cs | 12 + .../BASE/IT_BatchlineRepository.cs | 12 + .../BASE/IT_EnrollmentBatchRepository.cs | 12 + .../BASE/IT_EnrollmentPlaneRepository.cs | 12 + .../BASE/IT_EnrollmentPlanedescRepository.cs | 12 + .../BASE/IT_GearInfoRepository.cs | 12 + .../BASE/IT_LongIdMapRepository.cs | 12 + .../BASE/IT_PlanMapTagRepository.cs | 12 + .../BASE/IT_RegionScoreRepository.cs | 12 + .../BASE/ITest_CategoryInfoRepository.cs | 12 + .../BASE/ITest_CycleTimeInfoRepository.cs | 12 + .../BASE/ITest_HollandResultInfoRepository.cs | 12 + .../BASE/ITest_MBTIMapResultRepository.cs | 12 + .../ITest_PsychMeasurementInfoRepository.cs | 12 + .../BASE/ITest_QuestionInfoRepository.cs | 12 + .../BASE/ITest_QuestionTypeInfoRepository.cs | 12 + .../BASE/IU_ProbabilityHistoryRepository.cs | 12 + .../BASE/IU_VolunteerTableDetailRepository.cs | 12 + .../BASE/IU_VolunteerTableRepository.cs | 12 + .../BASE/IV_CustomerInfoRepository.cs | 12 + .../BASE/IV_ExaminationPolicyRepository.cs | 12 + .../BASE/IV_OrderInfoRepository.cs | 12 + .../BASE/IV_SubjectSelectRepository.cs | 12 + .../BASE/IV_VipCardInfoRepository.cs | 12 + .../BASE/IV_VipCardTypeRepository.cs | 12 + .../BASE/SysRegionRepository.cs | 17 + .../BASE/T_BatchTypeInfoRepository.cs | 17 + .../BASE/T_BatchlineRepository.cs | 17 + .../BASE/T_EnrollmentBatchRepository.cs | 17 + .../BASE/T_EnrollmentPlaneRepository.cs | 17 + .../BASE/T_EnrollmentPlanedescRepository.cs | 17 + .../BASE/T_GearInfoRepository.cs | 17 + .../BASE/T_LongIdMapRepository.cs | 17 + .../BASE/T_PlanMapTagRepository.cs | 17 + .../BASE/T_RegionScoreRepository.cs | 17 + .../BASE/Test_CategoryInfoRepository.cs | 17 + .../BASE/Test_CycleTimeInfoRepository.cs | 17 + .../BASE/Test_HollandResultInfoRepository.cs | 17 + .../BASE/Test_MBTIMapResultRepository.cs | 17 + .../Test_PsychMeasurementInfoRepository.cs | 17 + .../BASE/Test_QuestionInfoRepository.cs | 17 + .../BASE/Test_QuestionTypeInfoRepository.cs | 17 + .../BASE/U_ProbabilityHistoryRepository.cs | 17 + .../BASE/U_VolunteerTableDetailRepository.cs | 17 + .../BASE/U_VolunteerTableRepository.cs | 17 + .../BASE/V_CustomerInfoRepository.cs | 17 + .../BASE/V_ExaminationPolicyRepository.cs | 17 + .../BASE/V_OrderInfoRepository.cs | 17 + .../BASE/V_SubjectSelectRepository.cs | 17 + .../BASE/V_VipCardInfoRepository.cs | 17 + .../BASE/V_VipCardTypeRepository.cs | 17 + .../IRoleModulePermissionRepository.cs | 17 + .../New_College.Repository.csproj | 23 + .../RoleModulePermissionRepository.cs | 97 + .../UnitOfWork/IUnitOfWork.cs | 14 + .../UnitOfWork/UnitOfWork.cs | 51 + New_College.Services/AdvertisementServices.cs | 56 + New_College.Services/BASE/BaseServices.cs | 297 + New_College.Services/BlogArticleServices.cs | 113 + .../D_EnrollmentinproductionServices.cs | 18 + .../D_GraduateFlowServices.cs | 18 + New_College.Services/D_LongIdMapServices.cs | 1568 +++++ .../D_MajorCategoryServices.cs | 18 + New_College.Services/D_MajorClassServices.cs | 41 + .../D_MajorInformationServices.cs | 18 + .../D_MajorMapOccouptionServices.cs | 18 + New_College.Services/D_MajorMapTagServices.cs | 18 + .../D_MajorMapUniversityServices.cs | 18 + New_College.Services/D_MajorObtainServices.cs | 18 + New_College.Services/D_MajorSalaryServices.cs | 128 + New_College.Services/D_MajorServices.cs | 18 + New_College.Services/D_OccMapTagServices.cs | 18 + .../D_OccupationCategoryServices.cs | 18 + New_College.Services/D_OccupationServices.cs | 18 + .../D_UniversityCollectionServices.cs | 217 + .../D_UniversityRankServices.cs | 18 + New_College.Services/D_UniversityServices.cs | 77 + .../D_UniversityimgServices.cs | 18 + New_College.Services/GuestbookServices.cs | 140 + .../ModulePermissionServices.cs | 23 + New_College.Services/ModuleServices.cs | 22 + .../New_College.Services.csproj | 27 + New_College.Services/PasswordLibServices.cs | 18 + New_College.Services/PermissionServices.cs | 22 + .../RoleModulePermissionServices.cs | 81 + New_College.Services/RoleServices.cs | 53 + New_College.Services/SysRegionServices.cs | 54 + .../T_BatchTypeInfoServices.cs | 18 + New_College.Services/T_BatchlineServices.cs | 18 + .../T_EnrollmentBatchServices.cs | 18 + .../T_EnrollmentPlaneServices.cs | 157 + .../T_EnrollmentPlanedescServices.cs | 2178 +++++++ New_College.Services/T_GearInfoServices.cs | 18 + New_College.Services/T_LongIdMapServices.cs | 271 + New_College.Services/T_PlanMapTagServices.cs | 18 + New_College.Services/T_RegionScoreServices.cs | 18 + New_College.Services/TasksQzServices.cs | 19 + .../Test_CategoryInfoServices.cs | 112 + .../Test_CycleTimeInfoServices.cs | 59 + .../Test_HollandResultInfoServices.cs | 18 + .../Test_MBTIMapResultServices.cs | 18 + .../Test_PsychMeasurementInfoServices.cs | 1250 ++++ .../Test_QuestionInfoServices.cs | 95 + .../Test_QuestionTypeInfoServices.cs | 18 + New_College.Services/TopicDetailServices.cs | 30 + New_College.Services/TopicServices.cs | 32 + .../U_ProbabilityHistoryServices.cs | 18 + .../U_VolunteerTableDetailServices.cs | 18 + .../U_VolunteerTableServices.cs | 18 + New_College.Services/UserRoleServices.cs | 57 + .../V_CustomerInfoServices.cs | 385 ++ .../V_ExaminationPolicyServices.cs | 202 + New_College.Services/V_OrderInfoServices.cs | 658 +++ .../V_SubjectSelectServices.cs | 82 + New_College.Services/V_VipCardInfoServices.cs | 419 ++ New_College.Services/V_VipCardTypeServices.cs | 59 + New_College.Services/sysUserInfoServices.cs | 78 + New_College.System.Architecture.png | Bin 0 -> 46932 bytes .../HostedService/Job1TimedService.cs | 60 + .../HostedService/Job2TimedService.cs | 47 + New_College.Tasks/New_College.Tasks.csproj | 15 + .../QuartzNet/ISchedulerCenter.cs | 44 + New_College.Tasks/QuartzNet/JobFactory.cs | 50 + New_College.Tasks/QuartzNet/Jobs/JobBase.cs | 44 + .../QuartzNet/Jobs/Job_Blogs_Quartz.cs | 70 + .../QuartzNet/SchedulerCenterServer.cs | 308 + .../Controller_Test/BlogController_Should.cs | 70 + .../Controller_Test/LoginController_Should.cs | 74 + .../DependencyInjection/DI_Test.cs | 193 + New_College.Tests/New_College.Tests.csproj | 37 + New_College.Tests/Redis_Test/Redis_Should.cs | 26 + .../Repository_Test/Repository_Base_Should.cs | 81 + .../Service_Test/BlogArticleService_Should.cs | 72 + New_College.Tests/appsettings.json | 183 + New_College.sln | 91 + PaymentSDK/AliPay/AliPayConfig.cs | 20 + PaymentSDK/AliPay/AliPayHelper.cs | 35 + PaymentSDK/AliPay/AlipayConstants.cs | 36 + .../AlipayMobilePublicMultiMediaClient.cs | 249 + ...ayMobilePublicMultiMediaDownloadRequest.cs | 117 + ...yMobilePublicMultiMediaDownloadResponse.cs | 9 + .../AlipayOpenAppAlipaycertDownloadRequest.cs | 111 + ...AlipayOpenAppAlipaycertDownloadResponse.cs | 9 + PaymentSDK/AliPay/AopDictionary.cs | 94 + PaymentSDK/AliPay/AopException.cs | 41 + PaymentSDK/AliPay/AopObject.cs | 12 + PaymentSDK/AliPay/AopResponse.cs | 79 + PaymentSDK/AliPay/CertParams.cs | 20 + PaymentSDK/AliPay/DefaultAopClient.cs | 853 +++ PaymentSDK/AliPay/Domain/AOIinfo.cs | 48 + .../AliPay/Domain/AbilityResourceBizMark.cs | 24 + .../AliPay/Domain/AbilityResourceConsume.cs | 50 + PaymentSDK/AliPay/Domain/AccDetailModel.cs | 138 + PaymentSDK/AliPay/Domain/AccPayeeInfo.cs | 24 + PaymentSDK/AliPay/Domain/AccTransDetail.cs | 72 + .../AliPay/Domain/AccessOrdersFeedBack.cs | 48 + .../Domain/AccessOrdersFeedBackResult.cs | 48 + PaymentSDK/AliPay/Domain/AccessParams.cs | 18 + .../AliPay/Domain/AccessProduceOrder.cs | 66 + .../AliPay/Domain/AccessProduceQrcode.cs | 36 + .../AliPay/Domain/AccessPurchaseOrder.cs | 126 + .../AliPay/Domain/AccessPurchaseOrderSend.cs | 72 + .../Domain/AccessPurchaseOrderSendResult.cs | 54 + .../AliPay/Domain/AccessReturnQrcode.cs | 36 + .../AliPay/Domain/AccessReturnQrcodeResult.cs | 54 + PaymentSDK/AliPay/Domain/Account.cs | 36 + PaymentSDK/AliPay/Domain/AccountFreeze.cs | 30 + .../AliPay/Domain/AccountLogItemResult.cs | 96 + PaymentSDK/AliPay/Domain/AccountRecord.cs | 78 + PaymentSDK/AliPay/Domain/ActionProperty.cs | 30 + PaymentSDK/AliPay/Domain/Activity.cs | 104 + PaymentSDK/AliPay/Domain/ActivityAuditDTO.cs | 48 + .../AliPay/Domain/ActivityCopyResult.cs | 30 + .../AliPay/Domain/ActivityLimitationDTO.cs | 30 + PaymentSDK/AliPay/Domain/ActivityOrderDTO.cs | 44 + PaymentSDK/AliPay/Domain/ActivityPlanInfo.cs | 86 + PaymentSDK/AliPay/Domain/ActivityQueryInfo.cs | 30 + .../AliPay/Domain/ActivityQueryResult.cs | 30 + .../AliPay/Domain/ActivityRuleDetail.cs | 42 + PaymentSDK/AliPay/Domain/ActivityShop.cs | 42 + PaymentSDK/AliPay/Domain/ActivityStat.cs | 54 + PaymentSDK/AliPay/Domain/AdCreative.cs | 38 + PaymentSDK/AliPay/Domain/AdCreativeResult.cs | 56 + PaymentSDK/AliPay/Domain/AdGroup.cs | 56 + PaymentSDK/AliPay/Domain/AdMaterial.cs | 54 + PaymentSDK/AliPay/Domain/AdMaterialInfo.cs | 24 + .../AliPay/Domain/AdMaterialResultDTO.cs | 54 + PaymentSDK/AliPay/Domain/AdPlan.cs | 60 + PaymentSDK/AliPay/Domain/AdUser.cs | 84 + .../AliPay/Domain/AdUserQualification.cs | 56 + .../AliPay/Domain/AddPlanGroupResult.cs | 26 + PaymentSDK/AliPay/Domain/AddTagRequest.cs | 30 + PaymentSDK/AliPay/Domain/AddTagResponse.cs | 20 + PaymentSDK/AliPay/Domain/AddTagResult.cs | 54 + PaymentSDK/AliPay/Domain/Address.cs | 36 + PaymentSDK/AliPay/Domain/AddressDTO.cs | 24 + PaymentSDK/AliPay/Domain/AddressInfo.cs | 60 + PaymentSDK/AliPay/Domain/AddressInfoKt.cs | 54 + PaymentSDK/AliPay/Domain/Addresscomponent.cs | 86 + PaymentSDK/AliPay/Domain/AdvanceOrder.cs | 116 + PaymentSDK/AliPay/Domain/Advert.cs | 26 + PaymentSDK/AliPay/Domain/AdvertItem.cs | 24 + PaymentSDK/AliPay/Domain/AdviceVO.cs | 210 + PaymentSDK/AliPay/Domain/AestheticData.cs | 42 + .../AftAifinFireeyeOcrImageQueryModel.cs | 30 + ...nsecureRiskplusSecurityPolicyQueryModel.cs | 24 + PaymentSDK/AliPay/Domain/AgentOrganization.cs | 30 + PaymentSDK/AliPay/Domain/Agreement.cs | 24 + PaymentSDK/AliPay/Domain/AgreementParams.cs | 30 + .../AliPay/Domain/AgreementSignParams.cs | 66 + PaymentSDK/AliPay/Domain/AiOcrTableContext.cs | 62 + PaymentSDK/AliPay/Domain/AiOcrTableRow.cs | 20 + .../AliPay/Domain/AlgorithmGoodsInfo.cs | 42 + .../AliPay/Domain/AliTrustAlipayCert.cs | 48 + PaymentSDK/AliPay/Domain/AliTrustCert.cs | 42 + .../AliPay/Domain/AliTrustRiskIdentify.cs | 32 + PaymentSDK/AliPay/Domain/AliTrustScore.cs | 18 + .../Domain/AliosOpenAutoInfoQueryModel.cs | 24 + .../AliPay/Domain/AlipassInstanceOpInfo.cs | 30 + PaymentSDK/AliPay/Domain/AlipayAccount.cs | 36 + .../AlipayAccountCashpoolAccountBindModel.cs | 32 + ...yAccountCashpoolAllocateruleCreateModel.cs | 36 + ...ipayAccountCashpoolAllocaterulePayModel.cs | 30 + .../AlipayAccountCashpoolBasicQueryModel.cs | 30 + .../AlipayAccountCashpoolCreateModel.cs | 36 + .../AlipayAccountCashpoolDeleteModel.cs | 24 + .../AlipayAccountCashpoolDetailQueryModel.cs | 18 + .../AlipayAccountCashpoolRuleModifyModel.cs | 66 + ...ipayAccountCashpoolRulegroupCreateModel.cs | 86 + ...ipayAccountCashpoolRulegroupModifyModel.cs | 68 + .../AlipayAccountCashpoolStatusModifyModel.cs | 36 + ...yAccountClearingcenterPayoffModifyModel.cs | 24 + ...ayAccountClearingcenterPayoffQueryModel.cs | 30 + .../AlipayAccountExrateAdviceAcceptModel.cs | 18 + ...payAccountExrateAllclientrateQueryModel.cs | 24 + ...ayAccountExrateCollectcoreDataSendModel.cs | 18 + .../AlipayAccountExratePricingNotifyModel.cs | 44 + .../AlipayAccountExrateRateSyncModel.cs | 24 + .../AlipayAccountExrateRatequeryModel.cs | 18 + ...ipayAccountExrateSentimentDataSendModel.cs | 18 + ...AlipayAccountExrateSourcerateQueryModel.cs | 48 + ...payAccountExrateTraderequestCreateModel.cs | 18 + ...yAccountFinriskCompanyVerifyCreateModel.cs | 42 + ...ipayAccountFinriskCompanyVerifyGetModel.cs | 42 + ...yAccountFinriskGiriskrequestCreateModel.cs | 42 + ...kInstriskmonitorKeywordsBatchqueryModel.cs | 18 + ...ountFinriskMarkriskDatafactorQueryModel.cs | 18 + .../AlipayAccountInstfundAccountSyncModel.cs | 18 + .../Domain/AlipayAssetCardDisburseModel.cs | 78 + .../AlipayAssetCardNewtemplateCreateModel.cs | 110 + .../AlipayAssetCardReturnRefundModel.cs | 104 + .../Domain/AlipayAssetCardTransferModel.cs | 72 + .../AlipayAssetPointAccountlogQueryModel.cs | 63 + .../AlipayAssetPointOrderCreateModel.cs | 48 + .../Domain/AlipayAssetPointOrderQueryModel.cs | 18 + ...payAssetPointPointprodBudgetlibAddModel.cs | 54 + ...AssetPointPointprodBudgetlibCreateModel.cs | 84 + ...AssetPointPointprodBudgetlibModifyModel.cs | 42 + ...yAssetPointPointprodBudgetlibQueryModel.cs | 18 + ...AssetPointPointprodBudgetlibReturnModel.cs | 48 + ...ayAssetPointPointprodPointlibQueryModel.cs | 18 + .../AlipayAssetVoucherprodChargeSendModel.cs | 80 + ...lipayBossBaseProcessInstanceCancelModel.cs | 30 + ...lipayBossBaseProcessInstanceCreateModel.cs | 81 + ...AlipayBossBaseProcessInstanceQueryModel.cs | 18 + .../AlipayBossBaseProcessSignVerifyModel.cs | 24 + .../AlipayBossBaseProcessTaskProcessModel.cs | 68 + ...AlipayBossContractManagementCancelModel.cs | 24 + ...AlipayBossContractManagementCreateModel.cs | 44 + ...ipayBossContractManagementIdentifyModel.cs | 26 + .../AlipayBossContractManagementQueryModel.cs | 24 + .../Domain/AlipayBossCsChannelQueryModel.cs | 84 + ...AlipayBossCsCssocialYqmessageQueryModel.cs | 18 + .../AlipayBossCsDatacollectSendModel.cs | 18 + ...ossFncApbillBillcustviewBatchqueryModel.cs | 26 + ...payBossFncApbillCustviewBatchqueryModel.cs | 120 + ...ipayBossFncApbillTotalbillamtQueryModel.cs | 121 + .../AlipayBossFncApinvoiceBatchAddModel.cs | 51 + .../AlipayBossFncApinvoiceRcptQueryModel.cs | 78 + ...ssFncArbillMonthstatementbillQueryModel.cs | 162 + ...lipayBossFncGfacceptanceBillAcceptModel.cs | 24 + ...ipayBossFncGfacceptanceBillReverseModel.cs | 24 + ...ipayBossFncGfacceptanceDetailQueryModel.cs | 24 + .../Domain/AlipayBossFncInvmodeCreateModel.cs | 36 + .../Domain/AlipayBossFncInvoiceApplyModel.cs | 62 + .../AlipayBossFncInvoiceBatchqueryModel.cs | 169 + ...payBossFncInvoiceLinkamtBatchqueryModel.cs | 18 + .../AlipayBossFncInvoiceMailinfoQueryModel.cs | 18 + .../Domain/AlipayBossFncInvoiceQueryModel.cs | 18 + ...ayBossFncInvoiceStatementbillApplyModel.cs | 54 + ...payBossFncInvoicereceiptBatchqueryModel.cs | 26 + .../AlipayBossFncInvoicereceiptCreateModel.cs | 42 + .../AlipayBossFncInvoicreceiptQueryModel.cs | 20 + .../AlipayBossFncPidUnwriteoffQueryModel.cs | 24 + .../AlipayBossFncPriceAutoCreateModel.cs | 114 + .../AlipayBossFncPriceTaskCreateModel.cs | 78 + .../AlipayBossFncSettleCaptureCreateModel.cs | 20 + ...ipayBossFncSettleReceivableConfirmModel.cs | 20 + ...yBossFncSettleSettlementbillCreateModel.cs | 20 + ...lipayBossFncSubaccountAccountApplyModel.cs | 18 + ...lipayBossFncSubaccountAccountQueryModel.cs | 18 + ...ipayBossFncSubaccountBalanceFreezeModel.cs | 18 + ...AlipayBossFncUserinvoiceinfoCreateModel.cs | 146 + ...AlipayBossFncUserinvoiceinfoModifyModel.cs | 134 + ...lipayBossFncUserinvoiceinfoOuQueryModel.cs | 18 + .../AlipayBossFncUserinvoiceinfoQueryModel.cs | 18 + .../Domain/AlipayBossOrderApplyModel.cs | 30 + .../AlipayBossOrderDiagnosisGetModel.cs | 54 + ...ipayBossProdAntlawManualfileUploadModel.cs | 44 + ...yBossProdAntlawOrderhitstatusQueryModel.cs | 36 + ...sProdAntlawSmartcontractcodeModifyModel.cs | 42 + ...rodAntlegalchainNotaryprocsumQueryModel.cs | 36 + ...payBossProdAntlegalchainOrderApplyModel.cs | 116 + .../AlipayBossProdElecsealOrderApplyModel.cs | 82 + .../Domain/AlipayBossProdMyTestQueryModel.cs | 18 + ...ipayBossProdSubaccountBalanceQueryModel.cs | 18 + .../AlipayBusinessItemExternalSyncModel.cs | 98 + ...yBusinessItemInventoryExternalSyncModel.cs | 26 + .../Domain/AlipayBusinessOrderCancelModel.cs | 32 + .../Domain/AlipayBusinessOrderConsultModel.cs | 32 + .../Domain/AlipayBusinessOrderCreateModel.cs | 68 + .../Domain/AlipayBusinessOrderPayModel.cs | 26 + .../Domain/AlipayBusinessOrderQueryModel.cs | 30 + .../Domain/AlipayBusinessOrderRefundModel.cs | 44 + .../AlipayBusinessOrderRefundQueryModel.cs | 24 + .../AlipayBusinessPaymenthubCloseModel.cs | 18 + .../AlipayBusinessPaymenthubDisburseModel.cs | 48 + .../AlipayBusinessPaymenthubPayModel.cs | 98 + .../AlipayBusinessPaymenthubQueryModel.cs | 48 + .../AlipayBusinessPaymenthubRefundModel.cs | 48 + .../AliPay/Domain/AlipayChinareModelResult.cs | 36 + .../AliPay/Domain/AlipayCodeRecoResult.cs | 18 + ...payCommerceAirCallcenterTradeApplyModel.cs | 66 + .../AlipayCommerceAirXfgDsgModifyModel.cs | 36 + ...erceAlideviceinfoOfflinecodeCreateModel.cs | 66 + ...lipayCommerceAntestAppversionQueryModel.cs | 18 + .../AlipayCommerceAntestCaselistQueryModel.cs | 18 + ...ayCommerceAntestMockgrouplistQueryModel.cs | 18 + .../AlipayCommerceAntestReportQueryModel.cs | 18 + .../AlipayCommerceAntestTaskCancelModel.cs | 18 + .../AlipayCommerceAntestTaskCreateModel.cs | 60 + ...lipayCommerceAntestTaskstatusQueryModel.cs | 18 + .../AlipayCommerceAppPageUploadModel.cs | 24 + .../AlipayCommerceBusinessorderQueryModel.cs | 62 + ...mmerceCityfacilitatorDepositCancelModel.cs | 48 + ...merceCityfacilitatorDepositConfirmModel.cs | 54 + ...ommerceCityfacilitatorDepositQueryModel.cs | 30 + ...mmerceCityfacilitatorFunctionQueryModel.cs | 24 + ...CommerceCityfacilitatorScriptQueryModel.cs | 24 + ...ommerceCityfacilitatorStationQueryModel.cs | 18 + ...ceCityfacilitatorVoucherBatchqueryModel.cs | 26 + ...mmerceCityfacilitatorVoucherCancelModel.cs | 42 + ...merceCityfacilitatorVoucherConfirmModel.cs | 102 + ...erceCityfacilitatorVoucherGenerateModel.cs | 60 + ...ommerceCityfacilitatorVoucherQueryModel.cs | 30 + ...mmerceCityfacilitatorVoucherRefundModel.cs | 24 + ...mmerceCityfacilitatorVoucherUploadModel.cs | 48 + .../AlipayCommerceDataCampaignCreateModel.cs | 84 + .../AlipayCommerceDataCampaignSendModel.cs | 78 + ...AlipayCommerceDataCustommetricSyncModel.cs | 26 + .../AlipayCommerceDataLogdataSyncModel.cs | 24 + .../AlipayCommerceDataMonitordataSyncModel.cs | 32 + ...taMonitordeviceQualitycenterModifyModel.cs | 54 + .../AlipayCommerceDataResultSendModel.cs | 60 + .../Domain/AlipayCommerceDataSendModel.cs | 60 + ...ducateAuthenticateCampuscardCreateModel.cs | 90 + ...ducateAuthenticateCampuscardDeleteModel.cs | 36 + ...ducateAuthenticateCampuscardModifyModel.cs | 138 + ...payCommerceEducateCampusCardUploadModel.cs | 26 + ...ipayCommerceEducateCampuscardQueryModel.cs | 18 + ...ayCommerceEducateFacefeatureDeleteModel.cs | 56 + ...ommerceEducateFacefeatureFileApplyModel.cs | 48 + ...rceEducateFacefeatureGroupkeyQueryModel.cs | 30 + ...CommerceEducateFacefeatureInfoSendModel.cs | 62 + ...erceEducateFacefeatureReportUploadModel.cs | 60 + .../AlipayCommerceEducateFacepayApplyModel.cs | 36 + .../AlipayCommerceEducateFacepayCloseModel.cs | 30 + ...ommerceEducateLocalfaceCompareSyncModel.cs | 90 + ...AlipayCommerceEducateNceeApplySyncModel.cs | 108 + ...mmerceEducateParttimejobInfoCreateModel.cs | 150 + ...lipayCommerceEducateSceneKidsCloseModel.cs | 60 + ...payCommerceEducateSceneTokenCreateModel.cs | 54 + ...mmerceEducateSchoolcodeTokenCreateModel.cs | 42 + ...lipayCommerceEducateSignTokenQueryModel.cs | 18 + ...ommerceEducateStudentIdentityQueryModel.cs | 18 + ...ayCommerceEducateStudyAccountQueryModel.cs | 24 + ...lipayCommerceEducateTrainGroupsAddModel.cs | 26 + ...CommerceEducateTrainRecommendQueryModel.cs | 72 + ...EducateTrainStagecaterelationQueryModel.cs | 24 + ...ipayCommerceEducateUserClickCreateModel.cs | 72 + .../AlipayCommerceFixTaskCreateModel.cs | 92 + .../Domain/AlipayCommerceFixTaskQueryModel.cs | 18 + .../AlipayCommerceFixTaskproblemQueryModel.cs | 48 + .../AlipayCommerceFixTaskremarkCreateModel.cs | 24 + ...payCommerceIotAccountbindingCreateModel.cs | 36 + ...payCommerceIotAccountbindingDeleteModel.cs | 24 + ...yCommerceIotAdvertiserAdBatchqueryModel.cs | 30 + ...lipayCommerceIotAdvertiserAdCancelModel.cs | 18 + ...lipayCommerceIotAdvertiserAdCreateModel.cs | 56 + ...lipayCommerceIotAdvertiserAdModifyModel.cs | 26 + ...AlipayCommerceIotAdvertiserAdQueryModel.cs | 18 + ...CommerceIotAdvertiserDeviceConsultModel.cs | 20 + ...ayCommerceIotAdvertiserDeviceQueryModel.cs | 30 + ...rceIotAdvertiserMaterialBatchqueryModel.cs | 30 + ...CommerceIotAdvertiserMaterialQueryModel.cs | 18 + ...payCommerceIotApplyorderStatusSyncModel.cs | 24 + ...eIotDapplyDevicetradestatlistQueryModel.cs | 36 + ...AlipayCommerceIotDapplyOrderCancelModel.cs | 24 + ...AlipayCommerceIotDapplyOrderCreateModel.cs | 116 + .../AlipayCommerceIotDapplyOrderQueryModel.cs | 18 + ...yCommerceIotDapplyOrderdeviceQueryModel.cs | 18 + ...ipayCommerceIotDapplyRefundConfirmModel.cs | 24 + ...lipayCommerceIotDapplyRefundCreateModel.cs | 24 + ...lipayCommerceIotDeviceAddressQueryModel.cs | 18 + ...AlipayCommerceIotDeviceAudioCreateModel.cs | 18 + ...AlipayCommerceIotDeviceAudioDeleteModel.cs | 24 + .../AlipayCommerceIotDeviceAudioQueryModel.cs | 18 + .../AlipayCommerceIotDeviceAudioSendModel.cs | 36 + .../AlipayCommerceIotDeviceAudioSyncModel.cs | 36 + ...payCommerceIotDeviceBroadcastQueryModel.cs | 24 + .../AlipayCommerceIotDeviceDeleteModel.cs | 30 + ...lipayCommerceIotDeviceGeofenceBindModel.cs | 24 + ...ipayCommerceIotDeviceGeofenceQueryModel.cs | 18 + ...AlipayCommerceIotDeviceGeofenceSetModel.cs | 30 + ...ipayCommerceIotDeviceLocationQueryModel.cs | 18 + .../AlipayCommerceIotDeviceModifyModel.cs | 30 + ...ommerceIotDevicePersonalinfoModifyModel.cs | 30 + .../AlipayCommerceIotDeviceTraceQueryModel.cs | 30 + .../AlipayCommerceIotDevicelistCreateModel.cs | 39 + ...ipayCommerceIotDeviceserviceCancelModel.cs | 24 + .../AlipayCommerceIotGroupBatchqueryModel.cs | 30 + .../AlipayCommerceIotGroupCreateModel.cs | 30 + .../AlipayCommerceIotGroupDeleteModel.cs | 18 + .../AlipayCommerceIotGroupMemberAddModel.cs | 26 + ...ayCommerceIotGroupMemberBatchqueryModel.cs | 30 + ...AlipayCommerceIotGroupMemberDeleteModel.cs | 26 + .../AlipayCommerceIotGroupModifyModel.cs | 30 + ...CommerceIotMdeviceprodAccountQueryModel.cs | 18 + ...ayCommerceIotMdeviceprodAssetQueryModel.cs | 18 + ...merceIotMdeviceprodAssetapplyQueryModel.cs | 18 + ...otMdeviceprodBehaviorlogBatchqueryModel.cs | 36 + ...ayCommerceIotMdeviceprodDeviceBindModel.cs | 50 + ...erceIotMdeviceprodDeviceInitializeModel.cs | 72 + ...yCommerceIotMdeviceprodDeviceQueryModel.cs | 30 + ...CommerceIotMdeviceprodDeviceUnbindModel.cs | 44 + ...merceIotMdeviceprodDevicelogUploadModel.cs | 24 + .../AlipayCommerceIotMdeviceprodQueryModel.cs | 18 + ...ayCommerceIotMdeviceprodShopCreateModel.cs | 78 + ...merceIotMdeviceprodTradeBatchqueryModel.cs | 36 + ...mmerceIotMdeviceprodWhitelistQueryModel.cs | 42 + .../AlipayCommerceIotModelModifyModel.cs | 24 + .../AlipayCommerceIotModellistCreateModel.cs | 26 + .../AlipayCommerceIotMsgcenterSendModel.cs | 60 + .../AlipayCommerceIotNetflowInfoQueryModel.cs | 18 + .../AlipayCommerceIotOrderPrintSyncModel.cs | 24 + ...ipayCommerceIotProfileSnBatchqueryModel.cs | 18 + ...lipayCommerceIotReceiptDetailQueryModel.cs | 18 + .../AlipayCommerceIotReceiptSendModel.cs | 36 + ...ayCommerceIotSdarttoolMessageQueryModel.cs | 18 + ...payCommerceIotSdarttoolMessageSendModel.cs | 84 + ...lipayCommerceIotSdarttoolPrintSendModel.cs | 60 + ...AlipayCommerceIotSnApplyBatchqueryModel.cs | 30 + .../Domain/AlipayCommerceIotSnCreateModel.cs | 54 + ...CommerceIotSupplierAssetBatchqueryModel.cs | 36 + ...ipayCommerceIotSupplierAssetCreateModel.cs | 18 + ...ipayCommerceIotSupplierAssetModifyModel.cs | 18 + .../AlipayCommerceIotWifiResultQueryModel.cs | 18 + .../Domain/AlipayCommerceIotWifiSetModel.cs | 30 + .../AlipayCommerceIotWifiStatusQueryModel.cs | 18 + .../AlipayCommerceKidsAccountBindModel.cs | 72 + .../AlipayCommerceKidsAccountConsultModel.cs | 48 + .../AlipayCommerceKidsAccountCreateModel.cs | 78 + .../AlipayCommerceKidsAccountModifyModel.cs | 48 + .../AlipayCommerceKidsAccountQueryModel.cs | 24 + .../AlipayCommerceKidsMsgSceneSendModel.cs | 48 + .../AlipayCommerceKidsTokenCreateModel.cs | 36 + .../AlipayCommerceLogisticsFaceMatchModel.cs | 42 + ...isticsPkgauthrelationAuthtomeQueryModel.cs | 18 + ...payCommerceLogisticsUserOrderQueryModel.cs | 42 + ...ommerceLogisticsWaybillMinimctSyncModel.cs | 32 + .../AlipayCommerceLotteryPresentSendModel.cs | 42 + ...payCommerceLotteryPresentlistQueryModel.cs | 36 + .../AlipayCommerceMedicalCardQueryModel.cs | 60 + ...ayCommerceMedicalInformationUploadModel.cs | 150 + .../AlipayCommerceMedicalInstcardBindModel.cs | 36 + ...ommerceMedicalInstcardCreateandpayModel.cs | 150 + ...lipayCommerceOperationContentApplyModel.cs | 66 + ...lipayCommerceOperationContentQueryModel.cs | 74 + .../Domain/AlipayCommerceTradeApplyModel.cs | 66 + ...ortAdAduserqualificationBatchqueryModel.cs | 18 + ...ansportAdAduserqualificationCreateModel.cs | 24 + ...yCommerceTransportAdCreativeCreateModel.cs | 24 + ...CommerceTransportAdCreativeOfflineModel.cs | 24 + ...ayCommerceTransportAdCreativeQueryModel.cs | 24 + ...ipayCommerceTransportAdPlanCertifyModel.cs | 24 + ...lipayCommerceTransportAdPlanCreateModel.cs | 18 + .../AlipayCommerceTransportAdPlanGetModel.cs | 24 + ...ipayCommerceTransportAdPlanOfflineModel.cs | 24 + ...erceTransportAdStocktaskBatchqueryModel.cs | 18 + ...CommerceTransportAdStocktaskCreateModel.cs | 36 + ...yCommerceTransportAdStocktaskQueryModel.cs | 24 + ...rceTransportAdStocktaskresultQueryModel.cs | 24 + ...lipayCommerceTransportAdUserCreateModel.cs | 18 + ...AlipayCommerceTransportAdUserMatchModel.cs | 18 + ...lipayCommerceTransportEtcApplySyncModel.cs | 108 + ...ipayCommerceTransportEtcBindModifyModel.cs | 36 + ...payCommerceTransportEtcEcodataSyncModel.cs | 204 + ...AlipayCommerceTransportEtcMediaGetModel.cs | 30 + ...AlipayCommerceTransportEtcTripSyncModel.cs | 60 + ...yCommerceTransportIndustryProxyUseModel.cs | 42 + ...rceTransportIntelligentizeDataSyncModel.cs | 36 + ...AlipayCommerceTransportMessageSendModel.cs | 50 + ...AlipayCommerceTransportNfccardSendModel.cs | 30 + ...rceTransportOfflinepayRecordVerifyModel.cs | 18 + ...erceTransportOfflinepayTradeSettleModel.cs | 20 + ...nsportOfflinepayUserblacklistQueryModel.cs | 24 + ...ortOfflinepayVirtualcardBatchqueryModel.cs | 36 + ...TransportOfflinepayVirtualcardSendModel.cs | 90 + ...mmerceTransportOilproductInfoQueryModel.cs | 30 + ...ommerceTransportParkingGoodsCreateModel.cs | 138 + ...ommerceTransportParkingGoodsModifyModel.cs | 120 + ...ommerceTransportParkingGoodsOnlineModel.cs | 36 + ...CommerceTransportParkingGoodsQueryModel.cs | 30 + ...erceTransportParkingReserveConfirmModel.cs | 42 + ...payCommerceTransportTaxiDriverSendModel.cs | 60 + ...merceTransportTaxiDriverlevelQueryModel.cs | 36 + ...eTransportVehicleownerBizruleMatchModel.cs | 24 + ...TransportVehicleownerBlacklistSyncModel.cs | 60 + ...ransportVehicleownerCampaignModifyModel.cs | 84 + ...ansportVehicleownerCampaignOfflineModel.cs | 36 + ...ransportVehicleownerCampaignOnlineModel.cs | 36 + ...ansportVehicleownerCampaignPublishModel.cs | 78 + ...TransportVehicleownerCampaignQueryModel.cs | 20 + ...portVehicleownerCampaignauditQueryModel.cs | 24 + ...ceTransportVehicleownerMessageSendModel.cs | 32 + ...ansportVehicleownerSettlementApplyModel.cs | 150 + ...ansportVehicleownerSettlementQueryModel.cs | 30 + ...nsportVehicleownerSettlementRefundModel.cs | 42 + ...TransportVehicleownerTransdataSyncModel.cs | 30 + ...ommerceTransportWorldCarddataApplyModel.cs | 54 + ...merceTransportWorldCardscriptQueryModel.cs | 24 + ...erceTransportWorldVirtualcardApplyModel.cs | 60 + ...ransportWorldVirtualcardBatchqueryModel.cs | 36 + PaymentSDK/AliPay/Domain/AlipayContract.cs | 48 + ...payCreditAutofinanceDataBatchqueryModel.cs | 20 + .../AlipayCreditAutofinanceLoanApplyModel.cs | 66 + .../AlipayCreditAutofinanceLoanCloseModel.cs | 42 + ...ipayCreditAutofinanceLoanPlanQueryModel.cs | 42 + .../AlipayCreditAutofinanceVidGetModel.cs | 30 + .../AlipayCreditCreditriskDataPutModel.cs | 60 + .../Domain/AlipayDaoweiOrderCancelModel.cs | 24 + .../Domain/AlipayDaoweiOrderConfirmModel.cs | 30 + .../Domain/AlipayDaoweiOrderModifyModel.cs | 54 + .../Domain/AlipayDaoweiOrderQueryModel.cs | 18 + .../Domain/AlipayDaoweiOrderRefundModel.cs | 44 + .../Domain/AlipayDaoweiOrderRefuseModel.cs | 24 + .../Domain/AlipayDaoweiOrderSpModifyModel.cs | 24 + .../Domain/AlipayDaoweiOrderTransferModel.cs | 30 + .../Domain/AlipayDaoweiServiceModifyModel.cs | 172 + .../Domain/AlipayDaoweiSpModifyModel.cs | 86 + .../AlipayDaoweiSpScheduleModifyModel.cs | 24 + .../AlipayDaoweiWeikeTaskviewQueryModel.cs | 24 + ...ataAiserviceCloudbusAvailableQueryModel.cs | 30 + ...taAiserviceCloudbusHistorygeoQueryModel.cs | 30 + ...aAiserviceCloudbusMetrodetailQueryModel.cs | 66 + ...yDataAiserviceCloudbusMetroodQueryModel.cs | 60 + ...ataAiserviceCloudbusMetrotimeQueryModel.cs | 66 + .../AlipayDataAiserviceCloudbusOdGetModel.cs | 56 + ...yDataAiserviceCloudbusOridestodGetModel.cs | 57 + ...serviceCloudbusPredictbuslineRetryModel.cs | 36 + ...erviceCloudbusPredictbuslineSubmitModel.cs | 50 + ...iserviceCloudbusPredictresultQueryModel.cs | 42 + ...DataAiserviceCloudbusResourceQueryModel.cs | 18 + ...ataAiserviceCloudbusResourceUploadModel.cs | 30 + ...AiserviceCloudbusSchedualconfigGetModel.cs | 30 + ...AiserviceCloudbusSchedualconfigSetModel.cs | 44 + ...taAiserviceCloudbusSchedualtaskAddModel.cs | 72 + ...AiserviceCloudbusSchedualtaskQueryModel.cs | 24 + ...serviceCloudbusSchedualtasktimeAddModel.cs | 56 + ...rviceCloudbusSchedualtasktimeQueryModel.cs | 24 + ...rviceCloudbusScheduletasklistQueryModel.cs | 36 + ...AiserviceCloudbusScheduletaskodAddModel.cs | 50 + ...serviceCloudbusScheduletaskodQueryModel.cs | 24 + ...erviceCloudbusScheduletaskshiftAddModel.cs | 75 + ...viceCloudbusScheduletaskshiftQueryModel.cs | 24 + ...serviceCloudbusScheduletriptimeGetModel.cs | 48 + ...ipayDataAiserviceCloudbusTimeodGetModel.cs | 62 + ...yDataAiserviceCloudbusTotalodQueryModel.cs | 56 + ...serviceCloudbusTransitorridorQueryModel.cs | 48 + ...payDataAiserviceHellobikeSiteQueryModel.cs | 18 + ...ayDataAiserviceHellobikeSiteSubmitModel.cs | 89 + ...AlipayDataAiserviceJunengLoanQueryModel.cs | 42 + ...aAiservicePriceoptimizerConfigSyncModel.cs | 60 + ...ataAiservicePriceoptimizerDataSyncModel.cs | 150 + ...ipayDataAiservicePriceoptimizerGetModel.cs | 94 + ...AlipayDataAiserviceSgxGatewayQueryModel.cs | 36 + .../AlipayDataAiserviceSmartpriceGetModel.cs | 117 + ...rviceSmartpriceMerchanteffectQueryModel.cs | 54 + ...ayDataBillAccountbookereceiptApplyModel.cs | 36 + ...ayDataBillAccountbookereceiptQueryModel.cs | 24 + .../AlipayDataBillAccountlogQueryModel.cs | 48 + .../Domain/AlipayDataBillBailQueryModel.cs | 42 + .../AlipayDataBillBalancehisQueryModel.cs | 24 + .../Domain/AlipayDataBillBuyQueryModel.cs | 54 + .../AlipayDataBillEreceiptApplyModel.cs | 24 + .../AlipayDataBillEreceiptQueryModel.cs | 18 + .../Domain/AlipayDataBillSellQueryModel.cs | 54 + .../AlipayDataBillTransferQueryModel.cs | 42 + ...ayDataBillTransferaccountbookQueryModel.cs | 54 + .../AlipayDataDataexchangeDtmorseSyncModel.cs | 36 + ...payDataDataexchangeDtmorsepordSyncModel.cs | 36 + .../AlipayDataDataexchangeSfasdfModel.cs | 53 + ...ataDataserviceAdCreativeBatchqueryModel.cs | 54 + ...ataserviceAdCreativeCreateormodifyModel.cs | 138 + ...ipayDataDataserviceAdCreativeQueryModel.cs | 24 + .../AlipayDataDataserviceAdDataQueryModel.cs | 56 + ...taDataserviceAdGroupCreateormodifyModel.cs | 99 + .../AlipayDataDataserviceAdGroupQueryModel.cs | 24 + .../AlipayDataDataserviceAdOfflineModel.cs | 32 + .../AlipayDataDataserviceAdOnlineModel.cs | 32 + ...ataDataserviceAdPlanCreateormodifyModel.cs | 90 + .../AlipayDataDataserviceAdPlanQueryModel.cs | 24 + ...taserviceAdPrincipalCheckavailableModel.cs | 24 + ...yDataDataserviceAdPrincipalConsultModel.cs | 24 + ...taserviceAdPrincipalCreateormodifyModel.cs | 50 + ...payDataDataserviceAdPrincipalQueryModel.cs | 24 + ...yDataDataserviceAdPromotepageQueryModel.cs | 24 + ...serviceAdPromotepagestatisticQueryModel.cs | 42 + .../AlipayDataDataserviceAdUserCreateModel.cs | 30 + ...ataDataserviceAdUserbalanceOfflineModel.cs | 26 + ...DataDataserviceAdUserbalanceOnlineModel.cs | 26 + ...erviceAntdataassetsClearnodeCreateModel.cs | 18 + ...ceAntdataassetsCloudjobstatusQueryModel.cs | 24 + ...aserviceAntdataassetsFixdataCreateModel.cs | 30 + ...erviceAntdataassetsOdpscolumnQueryModel.cs | 18 + ...viceAntdataassetsPublishtaskCreateModel.cs | 18 + ...erviceAntdataassetsUploadjobCreateModel.cs | 26 + ...payDataDataserviceAntlbsCrowdMatchModel.cs | 38 + ...aserviceBillDingstaffbizorderQueryModel.cs | 72 + ...ataDataserviceBillDownloadurlQueryModel.cs | 24 + ...ayDataDataserviceChinaremodelQueryModel.cs | 30 + .../AlipayDataDataserviceCodeRecoModel.cs | 30 + ...payDataDataserviceConsumIndexQueryModel.cs | 42 + ...payDataDataserviceConsumRatioQueryModel.cs | 42 + .../AlipayDataDataserviceDatabusSendModel.cs | 36 + ...aDataserviceDeployorderDetailQueryModel.cs | 36 + ...taDataserviceDeployorderResultSendModel.cs | 30 + ...payDataDataserviceDmpserviceCreateModel.cs | 84 + ...payDataDataserviceHellobikeLogSyncModel.cs | 54 + ...aDataserviceHolographicFactorQueryModel.cs | 50 + .../AlipayDataDataserviceIcrowdUseModel.cs | 18 + ...PropertyBusinesspropertyBatchqueryModel.cs | 51 + ...vicePropertyBusinesspropertyCreateModel.cs | 122 + ...vicePropertyBusinesspropertyModifyModel.cs | 86 + ...ataserviceShoppingmallrecShopQueryModel.cs | 42 + ...ShoppingmallrecShopandvoucherQueryModel.cs | 42 + ...serviceShoppingmallrecVoucherQueryModel.cs | 42 + ...ayDataDataserviceUserlevelZrankGetModel.cs | 24 + ...aDataserviceVerificationResultSendModel.cs | 26 + ...taDataserviceYuebaoassetDetailSendModel.cs | 20 + ...ataDataserviceYuebaolqdDetailQueryModel.cs | 18 + .../Domain/AlipayDataDingMessageSendModel.cs | 24 + ...taIotdataAnomalydetectionBaiVerifyModel.cs | 42 + ...lipayDataIotdataBaiCargocountQueryModel.cs | 42 + ...ipayDataIotdataBusinessPointCreateModel.cs | 36 + ...lipayDataIotdataBusinessPointQueryModel.cs | 18 + .../AlipayDataIotdataDataDetailQueryModel.cs | 42 + .../AlipayDataIotdataDataTotalQueryModel.cs | 42 + ...yDataIotdataImageaestheticBaiQueryModel.cs | 42 + .../AlipayDataIotdataPointDeviceBindModel.cs | 36 + ...AlipayDataIotdataPointDeviceUnbindModel.cs | 36 + ...ayDataIotdataSearchlibraryBaiQueryModel.cs | 108 + ...yDataIotdataSearchlibraryBaiUploadModel.cs | 108 + ...yDataIotdataTextdifferenceBaiQueryModel.cs | 24 + .../Domain/AlipayDataItemDescription.cs | 39 + .../AliPay/Domain/AlipayDataItemGoodsList.cs | 26 + .../Domain/AlipayDataItemLimitPeriodInfo.cs | 32 + .../AliPay/Domain/AlipayDataItemSalesRule.cs | 32 + .../Domain/AlipayDataItemVoucherTemplete.cs | 104 + .../Domain/AlipayDataPrinterBindModel.cs | 48 + .../Domain/AlipayDataPrinterStatusGetModel.cs | 36 + .../AlipayDataPrinterTaskCancelModel.cs | 42 + .../AlipayDataPrinterTaskSubmitModel.cs | 48 + .../AlipayDataPrinterTasksCancelModel.cs | 36 + .../Domain/AlipayDataPrinterTokenGetModel.cs | 36 + .../Domain/AlipayDataPrinterUnbindModel.cs | 36 + .../AlipayDataRiskRtopobtsregQueryModel.cs | 18 + .../AliPay/Domain/AlipayDataServiceResult.cs | 36 + .../AliPay/Domain/AlipayDataSoundSetModel.cs | 48 + .../Domain/AlipayDataZbdmLineageQueryModel.cs | 39 + .../Domain/AlipayEbppBillRefundModel.cs | 54 + .../Domain/AlipayEbppCommonBillQueryModel.cs | 18 + .../AlipayEbppCommonBillkeyQueryModel.cs | 30 + .../Domain/AlipayEbppCommonNotifySendModel.cs | 54 + .../Domain/AlipayEbppDetectCreateModel.cs | 50 + .../AlipayEbppDetectReportQueryModel.cs | 30 + ...ipayEbppEbppConfirmpayurlTestQueryModel.cs | 18 + ...AlipayEbppEbppPdeductCzsignUpgradeModel.cs | 24 + .../AlipayEbppFacepayBillCancelModel.cs | 36 + .../Domain/AlipayEbppFacepayBillPayModel.cs | 84 + .../Domain/AlipayEbppFacepayBillQueryModel.cs | 36 + .../Domain/AlipayEbppFlowModeQueryModel.cs | 30 + .../AlipayEbppFlowQualificationDetectModel.cs | 32 + .../Domain/AlipayEbppFlowStatusQueryModel.cs | 42 + ...ipayEbppIndustryAntforestEventSendModel.cs | 24 + .../AlipayEbppIndustryApplyflowQueryModel.cs | 30 + ...lipayEbppIndustryBillNettingRefundModel.cs | 44 + .../AlipayEbppIndustryBizinfoApplyModel.cs | 48 + .../AlipayEbppIndustryBizinfoQueryModel.cs | 36 + ...ipayEbppIndustryGovHealthcodeQueryModel.cs | 30 + ...payEbppIndustryGovHealthcodeVerifyModel.cs | 30 + .../AlipayEbppIndustryKmsPubkeyQueryModel.cs | 36 + .../AlipayEbppIndustryOrderCreateModel.cs | 102 + .../AlipayEbppIndustryOrderQueryModel.cs | 18 + .../Domain/AlipayEbppInspectCreateModel.cs | 50 + .../Domain/AlipayEbppInspectNotifyModel.cs | 48 + ...AlipayEbppInstserviceDeductConfirmModel.cs | 84 + ...AlipayEbppInstserviceDeductConsultModel.cs | 54 + .../AlipayEbppInstserviceDeductQueryModel.cs | 60 + .../AlipayEbppInstserviceDeductSignModel.cs | 78 + .../AlipayEbppInstserviceDeductUnsignModel.cs | 60 + ...yEbppInstserviceIdentityInitializeModel.cs | 54 + ...AlipayEbppInstserviceMessageNotifyModel.cs | 72 + .../AlipayEbppInstserviceOrderCreateModel.cs | 78 + .../Domain/AlipayEbppInvoiceApplyModel.cs | 48 + .../AlipayEbppInvoiceApplyResultSyncModel.cs | 42 + .../AlipayEbppInvoiceApplystatusQueryModel.cs | 32 + .../Domain/AlipayEbppInvoiceAuthSignModel.cs | 36 + .../AlipayEbppInvoiceAuthUnsignModel.cs | 36 + .../AlipayEbppInvoiceCompanyQueryModel.cs | 24 + .../AlipayEbppInvoiceCompanySubmitModel.cs | 54 + ...AlipayEbppInvoiceDetailOutputQueryModel.cs | 36 + .../AlipayEbppInvoiceEinvpackageQueryModel.cs | 24 + ...ipayEbppInvoiceExpenseProgressSyncModel.cs | 72 + .../AlipayEbppInvoiceFileOutputQueryModel.cs | 36 + .../Domain/AlipayEbppInvoiceFileQueryModel.cs | 18 + .../AlipayEbppInvoiceFileSyncRetryModel.cs | 54 + ...voiceFinancialBlockchainBatchqueryModel.cs | 42 + .../AlipayEbppInvoiceInfoApplyidQueryModel.cs | 18 + .../Domain/AlipayEbppInvoiceInfoGetModel.cs | 30 + .../Domain/AlipayEbppInvoiceInfoSendModel.cs | 32 + ...AlipayEbppInvoiceIsvtokenReimApplyModel.cs | 18 + .../AlipayEbppInvoiceListExpenseSyncModel.cs | 56 + ...bppInvoiceMerchantEnterstatusQueryModel.cs | 30 + ...yEbppInvoiceMerchantlistEnterApplyModel.cs | 32 + .../AlipayEbppInvoiceOpenRedCreateModel.cs | 200 + .../AlipayEbppInvoiceOrderInfoModifyModel.cs | 66 + .../AlipayEbppInvoiceOrderQueryModel.cs | 30 + .../AlipayEbppInvoiceRegisterCreateModel.cs | 74 + .../AlipayEbppInvoiceRegisterModifyModel.cs | 30 + .../Domain/AlipayEbppInvoiceResultGetModel.cs | 42 + .../Domain/AlipayEbppInvoiceSycnModel.cs | 32 + .../AlipayEbppInvoiceSyncSimpleSendModel.cs | 30 + .../AlipayEbppInvoiceTaxnoBatchqueryModel.cs | 62 + ...payEbppInvoiceTitleBatchqueryInnerModel.cs | 18 + .../AlipayEbppInvoiceTitleBatchqueryModel.cs | 57 + .../AlipayEbppInvoiceTitleDetailQueryModel.cs | 30 + .../AlipayEbppInvoiceTitleDynamicGetModel.cs | 18 + .../AlipayEbppInvoiceTitleFuzzyQueryModel.cs | 30 + .../AlipayEbppInvoiceTitleListGetModel.cs | 18 + .../Domain/AlipayEbppInvoiceTitleSyncModel.cs | 54 + ...EbppInvoiceTitlelibraryDetailQueryModel.cs | 18 + ...ayEbppInvoiceTitlelibraryListQueryModel.cs | 18 + .../AlipayEbppInvoiceTokenBatchqueryModel.cs | 24 + ...EbppInvoiceTopregisterCompanyQueryModel.cs | 24 + ...ppInvoiceTopregisterRegisterCreateModel.cs | 18 + .../AlipayEbppInvoiceUserTradeQueryModel.cs | 36 + .../AlipayEbppIsvImportedbillQueryModel.cs | 48 + .../AlipayEbppIsvProdmodeCreateModel.cs | 18 + .../AlipayEbppJfexportBillCreateModel.cs | 66 + .../AlipayEbppJfexportBillQueryModel.cs | 30 + .../AlipayEbppJfexportChargeinstQueryModel.cs | 48 + .../AlipayEbppJfexportInputfieldQueryModel.cs | 42 + .../AlipayEbppJfexportInstbillQueryModel.cs | 54 + ...lipayEbppJfexportMerchantbillQueryModel.cs | 30 + .../Domain/AlipayEbppOrderItemCancelModel.cs | 18 + .../Domain/AlipayEbppOrderItemCreateModel.cs | 30 + .../Domain/AlipayEbppOrderItemPayModel.cs | 18 + .../Domain/AlipayEbppOrderItemQueryModel.cs | 18 + .../Domain/AlipayEbppPdeductAsyncPayModel.cs | 84 + .../AlipayEbppPdeductSignConfirmModel.cs | 84 + .../Domain/AlipayEbppPdeductSignQueryModel.cs | 48 + .../AlipayEbppPdeductSignValidateModel.cs | 102 + ...ipayEbppProdmodeChargeoffinstQueryModel.cs | 18 + .../AlipayEbppProdmodeDropdataQueryModel.cs | 24 + ...ipayEbppProdmodeInstshortnameQueryModel.cs | 18 + .../AlipayEbppProdmodeProvcityQueryModel.cs | 24 + .../AlipayEbppProdmodeReconconfQueryModel.cs | 24 + .../AlipayEbppProdmodeSignQueryModel.cs | 24 + .../AlipayEbppProdmodeTasknodeQueryModel.cs | 18 + .../AlipayEbppProdmodeUnionbankQueryModel.cs | 18 + .../Domain/AlipayEbppRechargeFlowSendModel.cs | 48 + .../AlipayEbppRechargeNotifySendModel.cs | 54 + .../AlipayEbppRechargeTradeDetectModel.cs | 24 + .../AlipayEbppRechargeUserDetectModel.cs | 24 + .../AlipayEbppUserChargeinstQueryModel.cs | 18 + .../AlipayEcoAcceptanceRequestCreateModel.cs | 48 + .../AlipayEcoAcceptanceTaskCreateModel.cs | 74 + .../Domain/AlipayEcoBasicBizinfoQueryModel.cs | 42 + .../Domain/AlipayEcoBasicRouterSendModel.cs | 30 + .../AlipayEcoCityserviceAppinfoQueryModel.cs | 30 + .../AlipayEcoCityserviceCertinfoQueryModel.cs | 20 + .../AlipayEcoCityserviceMessageSendModel.cs | 32 + ...lipayEcoCityservicePolymerSyncSendModel.cs | 30 + ...ayEcoCityservicePushmsgPermitQueryModel.cs | 36 + ...ipayEcoCityserviceUserAppinfoQueryModel.cs | 36 + ...ayEcoCityserviceUserPropertiesSendModel.cs | 48 + .../Domain/AlipayEcoCmsCdataUploadModel.cs | 78 + .../AlipayEcoContractMerchantSyncModel.cs | 32 + .../AlipayEcoContractMessageSendModel.cs | 63 + .../AlipayEcoContractProcessDeleteModel.cs | 32 + .../AlipayEcoContractProcessSyncModel.cs | 32 + .../AlipayEcoContractSignflowsCreateModel.cs | 39 + ...payEcoCplifeBasicserviceInitializeModel.cs | 48 + .../AlipayEcoCplifeBasicserviceModifyModel.cs | 54 + .../AlipayEcoCplifeBillBatchUploadModel.cs | 32 + .../AlipayEcoCplifeBillBatchqueryModel.cs | 66 + .../Domain/AlipayEcoCplifeBillDeleteModel.cs | 26 + .../Domain/AlipayEcoCplifeBillModifyModel.cs | 26 + .../Domain/AlipayEcoCplifeBillSyncModel.cs | 42 + ...AlipayEcoCplifeCommunityBatchqueryModel.cs | 30 + .../AlipayEcoCplifeCommunityCreateModel.cs | 69 + ...ipayEcoCplifeCommunityDetailsQueryModel.cs | 18 + .../AlipayEcoCplifeCommunityModifyModel.cs | 75 + .../AlipayEcoCplifeNoticeDeleteModel.cs | 26 + .../AlipayEcoCplifeNoticePublishModel.cs | 26 + .../AlipayEcoCplifePayResultQueryModel.cs | 24 + .../AlipayEcoCplifeRepairStatusUpdateModel.cs | 30 + .../AlipayEcoCplifeResidentinfoDeleteModel.cs | 26 + .../AlipayEcoCplifeResidentinfoUploadModel.cs | 32 + .../AlipayEcoCplifeRoominfoDeleteModel.cs | 32 + .../AlipayEcoCplifeRoominfoQueryModel.cs | 30 + .../AlipayEcoCplifeRoominfoUploadModel.cs | 32 + .../AlipayEcoCplifeRooominfoQueryModel.cs | 30 + ...yEcoCplifeUseridentityStatusUpdateModel.cs | 30 + .../Domain/AlipayEcoDingMessageNotifyModel.cs | 30 + .../Domain/AlipayEcoDocTemplateCreateModel.cs | 36 + ...lipayEcoDoctemplateSettingurlQueryModel.cs | 18 + .../AlipayEcoEduJzApplyresultSyncModel.cs | 30 + .../Domain/AlipayEcoEduJzPostPublishModel.cs | 184 + .../AlipayEcoEduKtBillingModifyModel.cs | 78 + .../Domain/AlipayEcoEduKtBillingQueryModel.cs | 30 + .../Domain/AlipayEcoEduKtBillingSendModel.cs | 117 + .../Domain/AlipayEcoEduKtBillingSyncModel.cs | 194 + .../AlipayEcoEduKtDownloadurlQueryModel.cs | 24 + .../Domain/AlipayEcoEduKtParentQueryModel.cs | 54 + .../AlipayEcoEduKtSchoolinfoModifyModel.cs | 174 + .../AlipayEcoEduKtSettleinfoQueryModel.cs | 36 + .../AlipayEcoEduKtStudentModifyModel.cs | 68 + .../Domain/AlipayEcoEduKtStudentQueryModel.cs | 36 + .../AlipayEcoEduKtZftschoolModifyModel.cs | 205 + .../AlipayEcoEduKtZftschoolQueryModel.cs | 24 + .../AlipayEcoEntertainmentOrderUploadModel.cs | 18 + .../AlipayEcoEprintActionNotifyModel.cs | 48 + .../Domain/AlipayEcoEprintCodeNotifyModel.cs | 24 + .../Domain/AlipayEcoEprintOrderCancelModel.cs | 42 + .../Domain/AlipayEcoEprintOrderNotifyModel.cs | 48 + .../Domain/AlipayEcoEprintPrinterAddModel.cs | 54 + .../AlipayEcoEprintPrinterDeleteModel.cs | 36 + .../Domain/AlipayEcoEprintTaskSubmitModel.cs | 48 + .../Domain/AlipayEcoEprintTokenGetModel.cs | 30 + .../AlipayEcoEprintTokenRefreshModel.cs | 30 + .../Domain/AlipayEcoFilePathQueryModel.cs | 36 + .../AlipayEcoLicenseOcrIdentifyModel.cs | 18 + ...coLogisticsExpressNonserviceModifyModel.cs | 26 + ...EcoLogisticsExpressNonserviceQueryModel.cs | 18 + ...ipayEcoLogisticsExpressOrderModifyModel.cs | 156 + ...lipayEcoLogisticsExpressOrderQueryModel.cs | 24 + ...ipayEcoLogisticsExpressPriceModifyModel.cs | 66 + ...lipayEcoLogisticsExpressPriceQueryModel.cs | 42 + .../AlipayEcoMapGeocodingReverseModel.cs | 30 + ...AlipayEcoMedicalcareCommonDataSyncModel.cs | 42 + ...ayEcoMedicalcareCommonTpcardNotifyModel.cs | 69 + .../AlipayEcoMedicalcareHosRegnotifyModel.cs | 126 + ...lipayEcoMedicalcareHosReportnotifyModel.cs | 98 + .../AlipayEcoMedicalcareSiDataSendModel.cs | 50 + .../AliPay/Domain/AlipayEcoMessageEntity.cs | 78 + .../AlipayEcoMycarCarlibInfoPushModel.cs | 60 + .../AlipayEcoMycarCarmodelBatchqueryModel.cs | 36 + .../AlipayEcoMycarCarmodelCreateModel.cs | 108 + .../AlipayEcoMycarCarmodelModifyModel.cs | 114 + .../AlipayEcoMycarCarmodelQueryModel.cs | 18 + .../AlipayEcoMycarDataExternalQueryModel.cs | 36 + .../AlipayEcoMycarDataExternalSendModel.cs | 36 + ...carDataserviceMaintainvehicleShareModel.cs | 18 + ...MycarDataserviceViolationinfoShareModel.cs | 24 + ...ipayEcoMycarDialogonlineAnswerPushModel.cs | 66 + ...EcoMycarDialogonlineAnswererUpdateModel.cs | 24 + ...ayEcoMycarDialogonlineVehicleQueryModel.cs | 18 + ...lipayEcoMycarFuellingProductModifyModel.cs | 39 + .../AlipayEcoMycarFuellingShopCreateModel.cs | 78 + .../AlipayEcoMycarFuellingShopModifyModel.cs | 84 + .../AlipayEcoMycarFuellingShopQueryModel.cs | 24 + .../Domain/AlipayEcoMycarImageUploadModel.cs | 30 + ...lipayEcoMycarMaintainAftersaleSyncModel.cs | 30 + ...ipayEcoMycarMaintainBizorderCreateModel.cs | 116 + ...lipayEcoMycarMaintainBizorderQueryModel.cs | 18 + ...ipayEcoMycarMaintainBizorderUpdateModel.cs | 80 + ...oMycarMaintainBizorderstatusUpdateModel.cs | 78 + .../AlipayEcoMycarMaintainDataUpdateModel.cs | 36 + .../AlipayEcoMycarMaintainOrderCreateModel.cs | 60 + ...yEcoMycarMaintainOrderserverNotifyModel.cs | 30 + ...yEcoMycarMaintainOrderstatusUpdateModel.cs | 42 + ...oMycarMaintainServiceproductUpdateModel.cs | 30 + .../AlipayEcoMycarMaintainShopCreateModel.cs | 167 + .../AlipayEcoMycarMaintainShopDeleteModel.cs | 24 + .../AlipayEcoMycarMaintainShopModifyModel.cs | 173 + .../AlipayEcoMycarMaintainShopQueryModel.cs | 24 + ...MycarMerchantshopCommentBatchqueryModel.cs | 30 + .../Domain/AlipayEcoMycarOrderRefundModel.cs | 36 + ...lipayEcoMycarParkingAgreementQueryModel.cs | 30 + ...lipayEcoMycarParkingBusinessModifyModel.cs | 24 + ...ayEcoMycarParkingCardbarcodeCreateModel.cs | 24 + .../AlipayEcoMycarParkingCardidQueryModel.cs | 36 + ...lipayEcoMycarParkingChargeinfoSyncModel.cs | 132 + .../AlipayEcoMycarParkingConfigQueryModel.cs | 24 + .../AlipayEcoMycarParkingConfigSetModel.cs | 44 + ...ipayEcoMycarParkingDeviceorderSyncModel.cs | 114 + ...AlipayEcoMycarParkingEnterinfoSyncModel.cs | 30 + .../AlipayEcoMycarParkingExitinfoSyncModel.cs | 30 + ...payEcoMycarParkingLotbarcodeCreateModel.cs | 18 + .../AlipayEcoMycarParkingOrderPayModel.cs | 84 + .../AlipayEcoMycarParkingOrderRefundModel.cs | 42 + .../AlipayEcoMycarParkingOrderSyncModel.cs | 102 + .../AlipayEcoMycarParkingOrderUpdateModel.cs | 30 + ...payEcoMycarParkingOrderstatusQueryModel.cs | 36 + ...coMycarParkingParkinglotinfoCreateModel.cs | 174 + ...EcoMycarParkingParkinglotinfoQueryModel.cs | 24 + ...coMycarParkingParkinglotinfoUpdateModel.cs | 180 + ...AlipayEcoMycarParkingSpaceinfoSyncModel.cs | 36 + .../AlipayEcoMycarParkingVehicleQueryModel.cs | 18 + .../AlipayEcoMycarPromoTicketPushModel.cs | 36 + .../AlipayEcoMycarPromoTicketSyncModel.cs | 32 + .../AlipayEcoMycarPromoVoucherVerifyModel.cs | 30 + .../AlipayEcoMycarTradeOrderQueryModel.cs | 30 + .../Domain/AlipayEcoMycarTradeRefundModel.cs | 36 + .../AlipayEcoMycarViolationCityPushModel.cs | 30 + .../AlipayEcoMycarViolationInfoPushModel.cs | 66 + ...lipayEcoMycarViolationVehicleQueryModel.cs | 18 + .../AlipayEcoPrinterStatusNotifyModel.cs | 42 + .../AlipayEcoPrinterStatusQueryModel.cs | 36 + .../AlipayEcoRebateBalanceQueryModel.cs | 24 + .../Domain/AlipayEcoRebateBalanceSendModel.cs | 32 + .../AliPay/Domain/AlipayEcoRenthouseBill.cs | 126 + ...lipayEcoRenthouseBillOrderDownloadModel.cs | 24 + .../AlipayEcoRenthouseBillOrderSyncModel.cs | 32 + .../Domain/AlipayEcoRenthouseBookInfo.cs | 48 + ...lipayEcoRenthouseCommonImageUploadModel.cs | 30 + ...yEcoRenthouseCommunityBaseinfoSyncModel.cs | 140 + ...lipayEcoRenthouseCommunityInfoSyncModel.cs | 66 + .../AlipayEcoRenthouseKaBaseinfoQueryModel.cs | 18 + .../AlipayEcoRenthouseKaBaseinfoSyncModel.cs | 24 + .../AlipayEcoRenthouseKaServiceCreateModel.cs | 30 + .../AlipayEcoRenthouseLeaseOrderSyncModel.cs | 194 + .../AlipayEcoRenthouseLeaseStateSyncModel.cs | 30 + ...nthousePublicrentApplyscheduleSyncModel.cs | 32 + ...lipayEcoRenthouseRenterIdinfoQueryModel.cs | 24 + ...AlipayEcoRenthouseRenterZhimaQueryModel.cs | 24 + ...coRenthouseReservationFeedbackSyncModel.cs | 60 + ...yEcoRenthouseRoomConcentrationSyncModel.cs | 271 + ...ipayEcoRenthouseRoomDispersionSyncModel.cs | 271 + .../AlipayEcoRenthouseRoomStateSyncModel.cs | 36 + .../Domain/AlipayEcoSignFlowCancelModel.cs | 24 + .../Domain/AlipayEcoSignFlowCreateModel.cs | 39 + .../Domain/AlipayEcoSignFlowFinishModel.cs | 18 + .../Domain/AlipayEcoSignFlowQueryModel.cs | 18 + .../Domain/AlipayEcoSignflowsCreateModel.cs | 36 + .../AlipayEcoSignflowsDetailQueryModel.cs | 18 + .../Domain/AlipayEcoSignflowsUrlQueryModel.cs | 30 + .../AliPay/Domain/AlipayEcoSmsSendModel.cs | 24 + .../AliPay/Domain/AlipayEcoTextDetectModel.cs | 20 + .../Domain/AlipayEcoTextVoiceNotifyModel.cs | 20 + .../Domain/AlipayEcoTextVoiceTransferModel.cs | 36 + .../Domain/AlipayEcoTokenFastGetModel.cs | 30 + .../Domain/AlipayEcoTrafficCodeVerifyModel.cs | 42 + .../Domain/AlipayEcoWelfareCodeSyncModel.cs | 96 + ...payFinanceFundFundFixedprofitQueryModel.cs | 18 + ...FinanceFundFundnetvaluesBatchqueryModel.cs | 42 + .../AlipayFinanceFundFundprodQueryModel.cs | 18 + ...lipayFinanceFundFundquotationQueryModel.cs | 18 + ...ayFinanceFundSimilarquotationQueryModel.cs | 18 + ...lipayFinanceQuotationDtcrawlerSendModel.cs | 18 + .../AlipayFinanceQuotationFindataSendModel.cs | 24 + ...uotationStocktoolsFreeuserExchangeModel.cs | 30 + ...inanceQuotationStocktoolsUserQueryModel.cs | 30 + ...inanceZcbEndowmentorderDetailQueryModel.cs | 30 + ...inancialnetAuthCardbinPrivateQueryModel.cs | 24 + ...nancialnetAuthContractMerchantSignModel.cs | 54 + ...ncialnetAuthContractMerchantUnsignModel.cs | 24 + ...cialnetAuthEcsignDataprepareCreateModel.cs | 54 + ...ayFinancialnetAuthEcsignErrorQueryModel.cs | 48 + ...nancialnetAuthEcsignSignorderQueryModel.cs | 36 + .../AlipayFinancialnetAuthPbcQueryModel.cs | 30 + ...ayFinancialnetAuthSpaccountConsultModel.cs | 30 + ...ipayFinancialnetAuthSpaccountQueryModel.cs | 24 + .../Domain/AlipayFundAccountBillQueryModel.cs | 60 + .../Domain/AlipayFundAccountQueryModel.cs | 48 + .../AlipayFundAccountbookCreateModel.cs | 36 + .../Domain/AlipayFundAccountbookQueryModel.cs | 36 + .../AlipayFundAuthOperationCancelModel.cs | 42 + ...AlipayFundAuthOperationDetailQueryModel.cs | 36 + .../AlipayFundAuthOrderAppFreezeModel.cs | 96 + .../Domain/AlipayFundAuthOrderFreezeModel.cs | 114 + .../AlipayFundAuthOrderUnfreezeModel.cs | 42 + .../AlipayFundAuthOrderVoucherCreateModel.cs | 90 + .../Domain/AlipayFundBatchCloseModel.cs | 32 + .../Domain/AlipayFundBatchCreateModel.cs | 86 + .../Domain/AlipayFundBatchDetailQueryModel.cs | 84 + .../Domain/AlipayFundBatchTransferModel.cs | 110 + .../Domain/AlipayFundBatchUniTransferModel.cs | 66 + .../Domain/AlipayFundBizorderCreateModel.cs | 48 + .../AlipayFundCouponOperationQueryModel.cs | 36 + .../AlipayFundCouponOrderAgreementPayModel.cs | 54 + .../AlipayFundCouponOrderAppPayModel.cs | 48 + .../AlipayFundCouponOrderDisburseModel.cs | 72 + .../AlipayFundCouponOrderPagePayModel.cs | 48 + .../AlipayFundCouponOrderRefundModel.cs | 36 + .../AlipayFundCouponWufuCardAcceptModel.cs | 36 + .../AlipayFundCouponWufuCardQueryModel.cs | 24 + .../AlipayFundCouponWufuCardReceiveModel.cs | 30 + .../AlipayFundStudentloanRepayQueryModel.cs | 24 + ...AlipayFundTransAacollectBatchCloseModel.cs | 30 + ...lipayFundTransAacollectBatchCreateModel.cs | 78 + ...AlipayFundTransAacollectBatchQueryModel.cs | 24 + ...ayFundTransAacollectPayorderCreateModel.cs | 48 + .../Domain/AlipayFundTransAppConsultModel.cs | 54 + .../AlipayFundTransAppMergeConfirmModel.cs | 30 + .../Domain/AlipayFundTransAppPayModel.cs | 96 + ...AlipayFundTransAuctionBalanceQueryModel.cs | 36 + .../AlipayFundTransBatchCreateorderModel.cs | 48 + ...payFundTransBatchCreatesinglebatchModel.cs | 60 + .../AlipayFundTransBatchQuerybatchModel.cs | 24 + .../Domain/AlipayFundTransBillCloseModel.cs | 24 + ...TransCollectSinglemoneytokenCreateModel.cs | 72 + .../Domain/AlipayFundTransCommonQueryModel.cs | 42 + .../AlipayFundTransDishonorQueryModel.cs | 30 + ...ransEdumigrateMigrateserviceModifyModel.cs | 24 + .../AlipayFundTransEntrustCloseModel.cs | 30 + .../Domain/AlipayFundTransEntrustPayModel.cs | 84 + .../AlipayFundTransEntrustQueryModel.cs | 36 + .../AlipayFundTransEntrustTransferModel.cs | 78 + ...ipayFundTransGroupfundsBatchCreateModel.cs | 50 + ...yFundTransGroupfundsFundbillsQueryModel.cs | 42 + ...yFundTransGroupfundsPayauthConsultModel.cs | 36 + ...yFundTransGroupfundsPayorderCreateModel.cs | 36 + ...yFundTransGroupfundsUserbillsQueryModel.cs | 26 + .../AlipayFundTransIcrowdTagModifyModel.cs | 42 + ...undTransInvoiceFromisvnotifyModifyModel.cs | 54 + ...ipayFundTransInvoiceResubmitModifyModel.cs | 30 + ...AlipayFundTransInvoiceStatusModifyModel.cs | 54 + ...ipayFundTransInvoiceSyncdataModifyModel.cs | 144 + .../AlipayFundTransMergePrecreateModel.cs | 56 + .../Domain/AlipayFundTransOrderQueryModel.cs | 24 + .../Domain/AlipayFundTransPagePayModel.cs | 84 + .../AliPay/Domain/AlipayFundTransPayModel.cs | 90 + .../Domain/AlipayFundTransRefundModel.cs | 48 + ...payFundTransThirdpartyRewardCreateModel.cs | 54 + ...ipayFundTransThirdpartyRewardQueryModel.cs | 30 + .../AlipayFundTransToaccountTransferModel.cs | 66 + .../AlipayFundTransTobankTransferModel.cs | 96 + ...yFundTransTrusteeshipAccountCreateModel.cs | 42 + .../Domain/AlipayFundTransUniTransferModel.cs | 84 + .../AliPay/Domain/AlipayGongyiAddressTest.cs | 30 + .../AliPay/Domain/AlipayGongyiModelTest.cs | 48 + .../AliPay/Domain/AlipayGongyiUserInfoTest.cs | 57 + .../Domain/AlipayHighValueCustomerResult.cs | 18 + ...utoAutoaftermarketAttachmentUploadModel.cs | 78 + ...AutoaftermarketDepotCreateormodifyModel.cs | 86 + ...utoaftermarketInserviceorderNotifyModel.cs | 50 + ...InsAutoAutoaftermarketOutorderSyncModel.cs | 60 + ...payInsAutoAutoinsprodCommonConsultModel.cs | 24 + ...ipayInsAutoAutoinsprodCommonNotifyModel.cs | 24 + ...ipayInsAutoAutoinsprodEnquriyApplyModel.cs | 84 + ...lipayInsAutoAutoinsprodPolicyApplyModel.cs | 60 + ...ipayInsAutoAutoinsprodPolicyCancelModel.cs | 18 + ...AlipayInsAutoAutoinsprodQuoteApplyModel.cs | 104 + ...AlipayInsAutoAutoinsprodQuoteQueryModel.cs | 24 + ...lipayInsAutoAutoinsprodUserCertifyModel.cs | 30 + ...AlipayInsAutoBenefitCheckavailableModel.cs | 30 + .../Domain/AlipayInsAutoBenefitUseModel.cs | 36 + .../Domain/AlipayInsAutoCarSaveModel.cs | 24 + .../AlipayInsAutoFeeReceiveConfirmModel.cs | 24 + .../AlipayInsAutoPointReceiveQueryModel.cs | 30 + .../AlipayInsAutoServiceCouponVerifyModel.cs | 54 + .../AlipayInsAutoUserCampaignQueryModel.cs | 24 + .../Domain/AlipayInsAutoUserMsgSendModel.cs | 57 + .../AlipayInsAutoUserOilExchangeModel.cs | 54 + .../Domain/AlipayInsAutoUserOilQueryModel.cs | 30 + .../Domain/AlipayInsAutoUserOilRefundModel.cs | 42 + .../AlipayInsAutoUserPointQueryModel.cs | 24 + .../AlipayInsAutoUserPointReceiveModel.cs | 42 + ...ooperationProductOfflineBatchqueryModel.cs | 18 + ...ayInsCooperationProductQrcodeApplyModel.cs | 42 + .../AlipayInsCooperationProductQueryModel.cs | 18 + ...payInsCooperationRegionQrcodeApplyModel.cs | 56 + .../AlipayInsDataAutoFraudQueryModel.cs | 123 + .../Domain/AlipayInsDataAutoFraudSyncModel.cs | 60 + .../AlipayInsDataAutoScoreQueryModel.cs | 84 + ...ipayInsDataAutodamageEstimateApplyModel.cs | 86 + ...ayInsDataAutodamageEstimateConfirmModel.cs | 104 + ...ipayInsDataAutodamageEstimateQueryModel.cs | 18 + ...AlipayInsDataAutodamageRequestImageInfo.cs | 24 + .../AlipayInsDataDiseaseIdentifyModel.cs | 24 + .../Domain/AlipayInsDataDiseaseQueryModel.cs | 30 + .../AlipayInsDataDsbEstimateApplyModel.cs | 122 + .../AlipayInsDataDsbEstimateQueryModel.cs | 36 + .../AlipayInsDataDsbEstimateSyncModel.cs | 62 + .../AlipayInsDataDsbRequestImageInfo.cs | 24 + .../Domain/AlipayInsDataHospitalQueryModel.cs | 24 + .../Domain/AlipayInsDataWeatherSyncModel.cs | 24 + ...AlipayInsMarketingCampaignDecisionModel.cs | 44 + ...lipayInsMarketingCampaignPrizeSendModel.cs | 50 + .../AlipayInsMarketingCampaignQueryModel.cs | 24 + ...InsMarketingCertificateBatchcreateModel.cs | 20 + ...yInsMarketingCertificateBatchqueryModel.cs | 84 + ...AlipayInsMarketingDiscountDecisionModel.cs | 58 + .../AlipayInsMarketingDiscountPreuseModel.cs | 72 + ...InsMarketingExperienceAccountQueryModel.cs | 24 + .../AlipayInsMarketingLifeAccessQueryModel.cs | 24 + ...AlipayInsMarketingProductRecommendModel.cs | 48 + .../AlipayInsMarketingSellerSignModel.cs | 36 + .../AlipayInsSceneApplicationApplyModel.cs | 112 + ...lipayInsSceneApplicationBatchqueryModel.cs | 30 + .../AlipayInsSceneApplicationCancelModel.cs | 18 + ...lipayInsSceneApplicationGroupApplyModel.cs | 75 + ...payInsSceneApplicationIssueConfirmModel.cs | 24 + ...nsSceneApplicationOrderapplyCreateModel.cs | 56 + ...payInsSceneApplicationOutsideApplyModel.cs | 80 + .../AlipayInsSceneApplicationQueryModel.cs | 30 + .../Domain/AlipayInsSceneClaimApplyModel.cs | 86 + ...ipayInsSceneClaimAttachmentConfirmModel.cs | 26 + ...AlipayInsSceneClaimNewreportCreateModel.cs | 78 + .../AlipayInsSceneClaimReportModifyModel.cs | 42 + .../AlipayInsSceneCommandReceiveModel.cs | 18 + .../AlipayInsSceneCouponReceiveModel.cs | 66 + .../Domain/AlipayInsSceneCouponSendModel.cs | 54 + .../Domain/AlipayInsSceneDxDataQueryModel.cs | 24 + .../AlipayInsSceneHealthActivitySyncModel.cs | 48 + ...AlipayInsSceneHealthGiftBatchqueryModel.cs | 58 + .../AlipayInsSceneHealthGiftQueryModel.cs | 42 + ...lipayInsSceneInsserviceprodCertifyModel.cs | 30 + ...AlipayInsSceneInsserviceprodFinishModel.cs | 24 + ...AlipayInsSceneInsserviceprodRefundModel.cs | 24 + ...SceneInsserviceprodSerprogressSyncModel.cs | 60 + .../AlipayInsSceneInsserviceprodSyncModel.cs | 36 + .../Domain/AlipayInsSceneInvoiceApplyModel.cs | 60 + ...AlipayInsSceneLifemssageSingleSendModel.cs | 48 + .../AlipayInsScenePolicyEndorseApplyModel.cs | 38 + ...AlipayInsScenePolicySurrenderApplyModel.cs | 42 + .../AlipayInsSceneProductAccessApplyModel.cs | 36 + ...ipayInsSceneProductAgreementCancelModel.cs | 30 + ...lipayInsSceneProductAgreementQueryModel.cs | 66 + ...AlipayInsSceneProductAgreementSignModel.cs | 60 + .../AlipayInsSceneProductInquiryApplyModel.cs | 68 + .../AlipayInsSceneProductSignConfirmModel.cs | 24 + .../AlipayInsSceneProductSignQueryModel.cs | 24 + .../AlipayInsSceneSellerActivityQueryModel.cs | 30 + .../AlipayInsSceneSellerActivitySignModel.cs | 36 + ...AlipayInsSceneSellerActivityUnsignModel.cs | 30 + .../AlipayInsSceneSellerDataQueryModel.cs | 36 + .../AlipayInsSceneServiceOrderQueryModel.cs | 24 + .../AlipayInsSceneTaskflowBatchCreateModel.cs | 48 + .../AlipayInsSceneTaskflowBatchFinishModel.cs | 38 + .../AlipayInsSceneTaskflowBatchQueryModel.cs | 18 + ...lipayInsUnderwriteClaimReportQueryModel.cs | 18 + ...nsUnderwriteMutualPolicyBatchqueryModel.cs | 36 + .../AlipayInsUnderwritePolicyQueryModel.cs | 30 + ...AlipayInsUnderwriteUserPolicyQueryModel.cs | 44 + ...lipayIserviceCognitiveAswfDagQueryModel.cs | 36 + ...serviceCognitiveBillInferenceQueryModel.cs | 18 + ...ognitiveClassificationCategorySyncModel.cs | 32 + ...ognitiveClassificationFeedbackSyncModel.cs | 66 + ...eCognitiveClassificationWasteQueryModel.cs | 66 + ...ayIserviceCognitiveImageRouteQueryModel.cs | 32 + ...iceCognitiveInvoicesInferenceQueryModel.cs | 24 + ...AlipayIserviceCognitiveKgopenQueryModel.cs | 26 + ...yIserviceCognitiveOcrBankcardQueryModel.cs | 18 + ...ceCognitiveOcrBusinesslicenseQueryModel.cs | 18 + ...payIserviceCognitiveOcrCarvinQueryModel.cs | 18 + ...viceCognitiveOcrDriverlicenseQueryModel.cs | 18 + ...payIserviceCognitiveOcrIdcardQueryModel.cs | 24 + ...viceCognitiveOcrImageclassifyQueryModel.cs | 18 + ...payIserviceCognitiveOcrTablesQueryModel.cs | 18 + ...eCognitiveOcrVehicledashboardQueryModel.cs | 24 + ...iceCognitiveOcrVehiclelicenseQueryModel.cs | 24 + ...rviceCognitiveOcrVehicleplateQueryModel.cs | 18 + .../AlipayIserviceIotIntentQueryModel.cs | 18 + ...AlipayIserviceItaskOrderRecordSyncModel.cs | 18 + ...ayIserviceItaskProcessDetailCreateModel.cs | 74 + ...ayIserviceItaskProcessDetailModifyModel.cs | 92 + ...ipayIserviceItaskProcessDetailSyncModel.cs | 56 + ...ipayIserviceMindvAnswersBatchqueryModel.cs | 48 + .../AlipayIserviceMindvJobCreateModel.cs | 36 + .../AlipayIserviceMindvJobQueryModel.cs | 18 + ...AlipayIserviceMindvJobsbyuserQueryModel.cs | 24 + .../AlipayIserviceMindvSnapshotQueryModel.cs | 18 + ...serviceMindvTroublefreeruleConsultModel.cs | 30 + .../AliPay/Domain/AlipayItemAuditRule.cs | 24 + .../AliPay/Domain/AlipayItemDescription.cs | 39 + .../AliPay/Domain/AlipayItemGoodsList.cs | 26 + .../Domain/AlipayItemLimitPeriodInfo.cs | 32 + .../Domain/AlipayItemOperationContext.cs | 30 + .../AliPay/Domain/AlipayItemSalesRule.cs | 32 + .../Domain/AlipayItemVoucherTemplete.cs | 105 + PaymentSDK/AliPay/Domain/AlipayKeyanClass.cs | 18 + ...etingCampaignActivityOfflineCreateModel.cs | 36 + ...tingCampaignActivityOfflineTriggerModel.cs | 24 + ...ketingCampaignAppleActivityConsultModel.cs | 36 + .../AlipayMarketingCampaignCashCreateModel.cs | 66 + ...ayMarketingCampaignCashDetailQueryModel.cs | 18 + ...ipayMarketingCampaignCashListQueryModel.cs | 30 + ...yMarketingCampaignCashStatusModifyModel.cs | 24 + ...AlipayMarketingCampaignCashTriggerModel.cs | 42 + .../AlipayMarketingCampaignCertCreateModel.cs | 36 + .../AlipayMarketingCampaignCertQueryModel.cs | 30 + ...yMarketingCampaignCommoneventApplyModel.cs | 24 + ...ketingCampaignDiscountBudgetAppendModel.cs | 24 + ...ketingCampaignDiscountBudgetCreateModel.cs | 60 + ...rketingCampaignDiscountBudgetQueryModel.cs | 18 + ...ayMarketingCampaignDiscountOperateModel.cs | 122 + ...ipayMarketingCampaignDiscountQueryModel.cs | 18 + ...ketingCampaignDiscountStatusUpdateModel.cs | 24 + ...tingCampaignDiscountWhitelistQueryModel.cs | 18 + ...ingCampaignDiscountWhitelistUpdateModel.cs | 24 + ...ayMarketingCampaignDrawcampConsultModel.cs | 42 + ...payMarketingCampaignDrawcampCreateModel.cs | 122 + ...ipayMarketingCampaignDrawcampQueryModel.cs | 18 + ...ketingCampaignDrawcampStatusUpdateModel.cs | 24 + ...ayMarketingCampaignDrawcampTriggerModel.cs | 78 + ...payMarketingCampaignDrawcampUpdateModel.cs | 104 + ...ingCampaignDrawcampWhitelistCreateModel.cs | 24 + ...yMarketingCampaignPrizeAmountQueryModel.cs | 24 + ...payMarketingCampaignPrizeSendQueryModel.cs | 24 + ...ketingCampaignPrizepoolPrizeCreateModel.cs | 110 + ...ketingCampaignPrizepoolPrizeDeleteModel.cs | 42 + ...rketingCampaignPrizepoolPrizeQueryModel.cs | 30 + ...payMarketingCampaignRuleCrowdCountModel.cs | 30 + ...ayMarketingCampaignRuleCrowdCreateModel.cs | 30 + ...ayMarketingCampaignRuleCrowdDeleteModel.cs | 24 + ...payMarketingCampaignRuleCrowdQueryModel.cs | 24 + ...MarketingCampaignRuleRulelistQueryModel.cs | 30 + ...lipayMarketingCampaignRuleTagQueryModel.cs | 18 + ...lipayMarketingCampaignSubcertQueryModel.cs | 30 + ...ipayMarketingCampaignWarmcardQueryModel.cs | 24 + ...ipayMarketingCardActivateformQueryModel.cs | 30 + ...lipayMarketingCardActivateurlApplyModel.cs | 36 + .../AlipayMarketingCardBenefitCreateModel.cs | 18 + .../AlipayMarketingCardBenefitDeleteModel.cs | 24 + .../AlipayMarketingCardBenefitModifyModel.cs | 24 + .../AlipayMarketingCardBenefitQueryModel.cs | 24 + .../AlipayMarketingCardConsumeSyncModel.cs | 99 + .../Domain/AlipayMarketingCardDeleteModel.cs | 42 + ...AlipayMarketingCardFormtemplateSetModel.cs | 24 + .../AlipayMarketingCardOpenApplyModel.cs | 42 + .../Domain/AlipayMarketingCardOpenModel.cs | 54 + .../Domain/AlipayMarketingCardQueryModel.cs | 36 + ...payMarketingCardTemplateBatchqueryModel.cs | 24 + .../AlipayMarketingCardTemplateCreateModel.cs | 123 + .../AlipayMarketingCardTemplateModifyModel.cs | 110 + .../AlipayMarketingCardTemplateQueryModel.cs | 18 + .../Domain/AlipayMarketingCardUpdateModel.cs | 56 + ...etingCashitemvoucherTemplateCreateModel.cs | 156 + ...gCashlessitemvoucherTemplateCreateModel.cs | 146 + ...ketingCashlessticketTemplateCreateModel.cs | 108 + ...ketingCashlessticketTemplateModifyModel.cs | 36 + ...etingCashlessvoucherTemplateCreateModel.cs | 102 + ...etingCashlessvoucherTemplateModifyModel.cs | 36 + ...yMarketingCashticketTemplateCreateModel.cs | 120 + ...yMarketingCashticketTemplateModifyModel.cs | 42 + ...MarketingCashvoucherTemplateCreateModel.cs | 114 + ...MarketingCashvoucherTemplateModifyModel.cs | 48 + .../AlipayMarketingCdpAdvertiseCreateModel.cs | 60 + .../AlipayMarketingCdpAdvertiseModifyModel.cs | 48 + ...AlipayMarketingCdpAdvertiseOperateModel.cs | 24 + .../AlipayMarketingCdpAdvertiseQueryModel.cs | 18 + ...ayMarketingCdpAdvertiseReportQueryModel.cs | 18 + .../AlipayMarketingCdpRecommendQueryModel.cs | 30 + ...lipayMarketingCouponTemplateCreateModel.cs | 102 + .../AlipayMarketingCrowdDataSyncModel.cs | 72 + ...DataAntlogmngActivitypagespmCreateModel.cs | 48 + .../AlipayMarketingDataDashboardApplyModel.cs | 20 + ...ayMarketingDataDashboardBatchqueryModel.cs | 24 + ...AlipayMarketingDataDashboardCancelModel.cs | 20 + .../AlipayMarketingDataDashboardQueryModel.cs | 26 + ...payMarketingDataDeerConnectorQueryModel.cs | 24 + ...lipayMarketingDataDeerInsightQueryModel.cs | 66 + .../AlipayMarketingDataEquitySyncModel.cs | 66 + ...AlipayMarketingDataModelBatchqueryModel.cs | 24 + .../AlipayMarketingDataModelQueryModel.cs | 26 + .../Domain/AlipayMarketingDecodeData.cs | 18 + ...ipayMarketingEncodeShortlinkCreateModel.cs | 30 + ...etingExchangevoucherTemplateCreateModel.cs | 90 + .../AlipayMarketingExchangevoucherUseModel.cs | 30 + .../AliPay/Domain/AlipayMarketingExtData.cs | 24 + ...AlipayMarketingFacetofaceDecodeUseModel.cs | 24 + ...ipayMarketingFacetofaceTwostageUseModel.cs | 36 + .../AliPay/Domain/AlipayMarketingIbsInfo.cs | 42 + ...ngIndirectcashticketTemplateCreateModel.cs | 120 + .../AlipayMarketingPassInstanceQueryModel.cs | 48 + .../AlipayMarketingPassShopBindModel.cs | 32 + .../AlipayMarketingPassTemplateQueryModel.cs | 30 + .../Domain/AlipayMarketingProductContext.cs | 30 + .../AlipayMarketingSearchcodeCreateModel.cs | 48 + .../AlipayMarketingSharetokenCreateModel.cs | 78 + .../AlipayMarketingSharetokenDecodeModel.cs | 30 + ...MarketingToolFengdieActivityCreateModel.cs | 24 + ...yMarketingToolFengdieActivityQueryModel.cs | 18 + ...lipayMarketingToolFengdieEditorGetModel.cs | 36 + ...payMarketingToolFengdieEditorQueryModel.cs | 24 + ...ayMarketingToolFengdieMemberCreateModel.cs | 36 + ...ayMarketingToolFengdiePreviewQueryModel.cs | 30 + ...arketingToolFengdieSitesBatchqueryModel.cs | 36 + ...ayMarketingToolFengdieSitesConfirmModel.cs | 42 + ...payMarketingToolFengdieSitesCreateModel.cs | 36 + ...payMarketingToolFengdieSitesDeleteModel.cs | 30 + ...ipayMarketingToolFengdieSitesQueryModel.cs | 30 + ...lipayMarketingToolFengdieSitesSyncModel.cs | 30 + ...arketingToolFengdieSpaceBatchqueryModel.cs | 24 + ...payMarketingToolFengdieSpaceCreateModel.cs | 18 + ...ipayMarketingToolFengdieSpaceQueryModel.cs | 24 + ...etingToolFengdieTemplateBatchqueryModel.cs | 36 + ...yMarketingToolFengdieTemplateQueryModel.cs | 24 + ...ayMarketingToolFengdieTemplateSendModel.cs | 32 + ...etingToolPromocommoptOpeneventSendModel.cs | 54 + .../AlipayMarketingToolSignupSubmitModel.cs | 24 + .../AlipayMarketingUserulePidQueryModel.cs | 18 + .../AlipayMarketingVoucherAuthSendModel.cs | 36 + .../AlipayMarketingVoucherBillQueryModel.cs | 36 + .../AlipayMarketingVoucherConfirmModel.cs | 48 + .../AlipayMarketingVoucherDeleteModel.cs | 30 + .../AlipayMarketingVoucherDirectSendModel.cs | 54 + .../AlipayMarketingVoucherListQueryModel.cs | 24 + .../AlipayMarketingVoucherQueryModel.cs | 18 + .../Domain/AlipayMarketingVoucherSendModel.cs | 60 + .../AlipayMarketingVoucherStockCreateModel.cs | 32 + .../AlipayMarketingVoucherStockMatchModel.cs | 26 + .../AlipayMarketingVoucherStockQueryModel.cs | 18 + .../AlipayMarketingVoucherStockUseModel.cs | 24 + ...ipayMarketingVoucherTemplateDeleteModel.cs | 18 + ...arketingVoucherTemplatedetailQueryModel.cs | 18 + ...yMarketingVoucherTemplatelistQueryModel.cs | 36 + ...payMarketingVoucherdetailListQueryModel.cs | 36 + .../Domain/AlipayMerchantOrderCancelModel.cs | 44 + .../AlipayMerchantOrderConsumerQueryModel.cs | 30 + .../AlipayMerchantOrderCreateandpayModel.cs | 71 + ...chantOrderDigestConsumerBatchqueryModel.cs | 48 + ...hantOrderDigestUnlimitedBatchqueryModel.cs | 54 + ...erchantOrderExternalPaychannelSyncModel.cs | 108 + .../AlipayMerchantOrderMessageSyncModel.cs | 190 + .../AlipayMerchantOrderPointQueryModel.cs | 24 + .../Domain/AlipayMerchantOrderRefundModel.cs | 57 + ...ntOrderSecuritydetailConsumerQueryModel.cs | 30 + ...erSecuritydigestConsumerBatchqueryModel.cs | 42 + .../Domain/AlipayMerchantOrderSyncModel.cs | 148 + .../AlipayMerchantOrderUnlimitedQueryModel.cs | 30 + ...ayforprivilegeMemberremainingQueryModel.cs | 24 + ...ayMerchantPayforprivilegePayCreateModel.cs | 36 + ...yMerchantPayforprivilegeProfileSetModel.cs | 18 + ...PayforprivilegePromotionplanCreateModel.cs | 56 + ...PayforprivilegePromotionplanModifyModel.cs | 36 + ...tPayforprivilegePromotionplanQueryModel.cs | 18 + ...antPayforprivilegeUselogBatchqueryModel.cs | 48 + ...tPayforprivilegeUserrelationCreateModel.cs | 18 + ...ntPayforprivilegeUserrelationQueryModel.cs | 24 + .../AlipayMerchantWeikeBillModifyModel.cs | 120 + .../AlipayMerchantWeikeBilltaxModifyModel.cs | 84 + .../AlipayMerchantWeikeInvoiceNotifyModel.cs | 50 + .../AlipayMerchantWeikeSettleQueryModel.cs | 32 + .../AliPay/Domain/AlipayMiniCardData.cs | 72 + .../Domain/AlipayMsaasItapDataSyncModel.cs | 30 + .../Domain/AlipayMsaasItapDeviceSyncModel.cs | 32 + .../Domain/AlipayMsaasItapPushSendModel.cs | 32 + .../Domain/AlipayMsaasItapStatesSyncModel.cs | 32 + .../Domain/AlipayMsaasItapUserCertifyModel.cs | 32 + .../Domain/AlipayMsaasItapUserConfirmModel.cs | 32 + ...ipayMsaasMediarecogAftsCarIdentifyModel.cs | 60 + ...payMsaasMediarecogAftsCertIdentifyModel.cs | 60 + ...ipayMsaasMediarecogAftsXnnIdentifyModel.cs | 44 + ...ecogAftscvpayTransactionInitializeModel.cs | 56 + ...saasMediarecogMmtcaftscvDeviceBindModel.cs | 30 + ...saasMediarecogMmtcaftscvGoodsApplyModel.cs | 32 + ...recogMmtcaftscvGoodsinfoBatchqueryModel.cs | 20 + ...ediarecogMmtcaftscvMachinegoodsAddModel.cs | 44 + ...diarecogMmtcaftscvMachinetypeQueryModel.cs | 18 + ...sMediarecogMmtcaftscvPicvideoQueryModel.cs | 36 + ...sMediarecogMmtcaftscvTemplateApplyModel.cs | 18 + ...MediarecogMmtcaftscvTemplateVerifyModel.cs | 44 + ...cogMmtcaftscvTransactionInitializeModel.cs | 50 + ...aasMediarecogVoiceMediaaudioUploadModel.cs | 60 + .../AlipayMsaasPromotionCpainfoCreateModel.cs | 66 + .../AlipayMsaasSyncSingledataSendModel.cs | 96 + ...yOfflineMarketApplyorderBatchqueryModel.cs | 87 + .../AlipayOfflineMarketItemCreateModel.cs | 116 + .../AlipayOfflineMarketItemModifyModel.cs | 72 + .../AlipayOfflineMarketItemStateModel.cs | 54 + .../AlipayOfflineMarketMcommentQueryModel.cs | 30 + ...ipayOfflineMarketProductBatchqueryModel.cs | 30 + ...payOfflineMarketProductQuerydetailModel.cs | 30 + ...ipayOfflineMarketReporterrorCreateModel.cs | 48 + ...yOfflineMarketShopApplyorderCancelModel.cs | 30 + .../AlipayOfflineMarketShopBatchqueryModel.cs | 24 + ...ipayOfflineMarketShopCategoryQueryModel.cs | 24 + .../AlipayOfflineMarketShopCreateModel.cs | 294 + ...ipayOfflineMarketShopDiscountQueryModel.cs | 38 + .../AlipayOfflineMarketShopModifyModel.cs | 282 + ...AlipayOfflineMarketShopQuerydetailModel.cs | 24 + ...OfflineMarketShopSummaryBatchqueryModel.cs | 84 + ...lipayOfflineMarketingVoucherCreateModel.cs | 48 + ...lipayOfflineMarketingVoucherModifyModel.cs | 42 + ...ipayOfflineMarketingVoucherOfflineModel.cs | 30 + ...OfflineMarketingVoucherStatusQueryModel.cs | 24 + .../AlipayOfflineMarketingVoucherUseModel.cs | 36 + .../Domain/AlipayOfflinePayMasterKey.cs | 24 + .../AlipayOfflineProviderDishQueryModel.cs | 48 + ...neProviderEquipmentAuthQuerybypageModel.cs | 54 + ...OfflineProviderEquipmentAuthRemoveModel.cs | 48 + ...lipayOfflineProviderMonitorLogSyncModel.cs | 20 + ...payOfflineProviderShopactionRecordModel.cs | 66 + ...payOfflineProviderUseractionRecordModel.cs | 96 + .../AliPay/Domain/AlipayOfflineTrade.cs | 68 + .../AliPay/Domain/AlipayOfflineTradeResult.cs | 60 + .../AlipayOpenAccountAliyunUnbindModel.cs | 30 + .../Domain/AlipayOpenAgentCancelModel.cs | 18 + .../Domain/AlipayOpenAgentConfirmModel.cs | 18 + .../Domain/AlipayOpenAgentCreateModel.cs | 30 + .../Domain/AlipayOpenAgentOrderQueryModel.cs | 18 + .../AlipayOpenAgentSignstatusQueryModel.cs | 26 + .../AlipayOpenAppAlipaycertDownloadModel.cs | 18 + .../Domain/AlipayOpenAppApiresQueryModel.cs | 18 + ...payOpenAppAppcontentFunctionCreateModel.cs | 71 + ...payOpenAppAppcontentFunctionModifyModel.cs | 77 + ...ayOpenAppAppcontentFunctionOfflineModel.cs | 18 + ...ipayOpenAppAppcontentFunctionQueryModel.cs | 18 + ...ipayOpenAppAppcontentInternalQueryModel.cs | 56 + ...payOpenAppAppcontentItemBatchqueryModel.cs | 20 + .../AlipayOpenAppAppcontentItemCreateModel.cs | 107 + .../AlipayOpenAppAppcontentItemDeleteModel.cs | 24 + .../AlipayOpenAppAppcontentItemModifyModel.cs | 112 + .../AlipayOpenAppAppcontentItemQueryModel.cs | 24 + .../AlipayOpenAppAppcontentPoiSyncModel.cs | 93 + ...lipayOpenAppAraterRatestatusModifyModel.cs | 60 + ...OpenAppAraterWaitratealgorankQueryModel.cs | 52 + .../AlipayOpenAppBoyiBoyiCreateModel.cs | 54 + .../Domain/AlipayOpenAppCodetesttestModel.cs | 24 + .../AlipayOpenAppCommunityDataSyncModel.cs | 44 + ...AlipayOpenAppCommunityPartnerQueryModel.cs | 30 + .../AlipayOpenAppCommunityPartnerSyncModel.cs | 44 + ...lipayOpenAppCommunityUserpromoSyncModel.cs | 48 + .../Domain/AlipayOpenAppDedfDdQueryModel.cs | 18 + ...pDeveloperCheckdevelopervalidQueryModel.cs | 18 + .../Domain/AlipayOpenAppDfsfasDeQueryModel.cs | 30 + .../AlipayOpenAppGongyiTestQueryModel.cs | 30 + .../AlipayOpenAppLingbalingliuQueryModel.cs | 18 + ...ayOpenAppLingqierwuLingqierquQueryModel.cs | 20 + .../Domain/AlipayOpenAppMembersCreateModel.cs | 24 + .../Domain/AlipayOpenAppMembersDeleteModel.cs | 24 + .../Domain/AlipayOpenAppMembersQueryModel.cs | 18 + ...ayOpenAppMessageSubscriptionModifyModel.cs | 42 + ...payOpenAppMessageSubscriptionQueryModel.cs | 36 + ...AlipayOpenAppMessageTopicSubscribeModel.cs | 42 + ...ipayOpenAppMessageTopicUnsubscribeModel.cs | 36 + ...ipayOpenAppMiniTemplatemessageSendModel.cs | 42 + .../Domain/AlipayOpenAppMsgDingSendModel.cs | 62 + .../Domain/AlipayOpenAppNotifyVerifyModel.cs | 18 + ...yOpenAppOpenbizmockApisdkgrayQueryModel.cs | 18 + ...lipayOpenAppOpenbizmockMessageSendModel.cs | 30 + ...nAppOpenbizmockOpenidnonstandQueryModel.cs | 18 + .../AlipayOpenAppPropertyAuthSyncModel.cs | 26 + .../AlipayOpenAppPropertyMessageSendModel.cs | 60 + .../Domain/AlipayOpenAppQrcodeCreateModel.cs | 30 + .../Domain/AlipayOpenAppRateDataSyncModel.cs | 72 + .../AlipayOpenAppReproCesCreateModel.cs | 33 + ...payOpenAppServiceBizabilitydataSetModel.cs | 44 + ...ayOpenAppServiceMiniappnearbyQueryModel.cs | 18 + ...penAppServiceMiniappnearbypoiQueryModel.cs | 26 + ...ppServiceMiniappnearbypoipageQueryModel.cs | 30 + .../AlipayOpenAppServiceStatusModifyModel.cs | 36 + .../Domain/AlipayOpenAppServiceSyncModel.cs | 100 + ...payOpenAppServiceViewcallbackQueryModel.cs | 24 + .../AlipayOpenAppSilanApigrayQueryModel.cs | 18 + .../AlipayOpenAppSilanApigrayoneQueryModel.cs | 18 + .../Domain/AlipayOpenAppSmgMsgSendModel.cs | 24 + .../Domain/AlipayOpenAppSmsgDataSyncModel.cs | 24 + ...ppSystemNewcontextupiduoidTransferModel.cs | 18 + .../AlipayOpenAppTestTestCreateModel.cs | 30 + .../Domain/AlipayOpenAppTestapiiSyncModel.cs | 24 + .../AlipayOpenAppUpdattestBatchqueryModel.cs | 24 + .../Domain/AlipayOpenAppXwbsssQueryModel.cs | 38 + .../AlipayOpenAppXwbtestabcQueryModel.cs | 24 + .../AlipayOpenAppXwbtstabcQueryModel.cs | 18 + .../Domain/AlipayOpenAppYiyiyiwuQueryModel.cs | 18 + ...OpenAppYoukuvideoAuditcallbackSendModel.cs | 36 + ...ingsanyaowubYufalingsanyaowubQueryModel.cs | 18 + ...nlingsanyaowuYufalingsanyaowuQueryModel.cs | 20 + .../Domain/AlipayOpenAuthAppAesGetModel.cs | 18 + .../Domain/AlipayOpenAuthAppAesSetModel.cs | 18 + .../Domain/AlipayOpenAuthAppApplyModel.cs | 30 + .../Domain/AlipayOpenAuthAppCancelModel.cs | 30 + .../AlipayOpenAuthAppContentQueryModel.cs | 18 + ...penAuthIndustryPlatformCreateTokenModel.cs | 24 + .../Domain/AlipayOpenAuthLoginApplyModel.cs | 30 + .../Domain/AlipayOpenAuthOperatorAddModel.cs | 18 + .../AlipayOpenAuthOperatorInfoQueryModel.cs | 24 + .../Domain/AlipayOpenAuthTokenAppModel.cs | 30 + .../AlipayOpenAuthTokenAppQueryModel.cs | 18 + .../AlipayOpenAuthUnifygwtestQueryModel.cs | 18 + ...penAuthUserauthRelationshipCertifyModel.cs | 24 + .../AlipayOpenCategoryArticleQueryModel.cs | 24 + ...ntentContentlibYoukuvideoauditSendModel.cs | 42 + ...payOpenDataItemRecommendBatchqueryModel.cs | 36 + .../Domain/AlipayOpenDataItemSyncModel.cs | 42 + .../Domain/AlipayOpenDataServiceQueryModel.cs | 66 + .../AliPay/Domain/AlipayOpenDesCreateModel.cs | 27 + .../AliPay/Domain/AlipayOpenEchoSendModel.cs | 24 + .../AlipayOpenInviteOrderCreateModel.cs | 24 + .../Domain/AlipayOpenInviteOrderQueryModel.cs | 24 + .../Domain/AlipayOpenIotDeviceBindModel.cs | 66 + .../Domain/AlipayOpenIotDeviceQueryModel.cs | 48 + .../Domain/AlipayOpenIotDeviceUnbindModel.cs | 66 + .../AlipayOpenLotteryCampBatchqueryModel.cs | 18 + .../AlipayOpenLotteryCampCertifyModel.cs | 18 + .../AlipayOpenLotteryCampCreateModel.cs | 18 + .../AlipayOpenLotteryCampModifyModel.cs | 18 + .../AlipayOpenLotteryCampOfflineModel.cs | 18 + .../Domain/AlipayOpenLotteryCampQueryModel.cs | 18 + .../AlipayOpenLotteryCampSubmitModel.cs | 18 + ...AlipayOpenLotteryCampdeliverModifyModel.cs | 18 + .../AlipayOpenLotteryCampresultQueryModel.cs | 18 + .../AlipayOpenLotteryRegionBatchqueryModel.cs | 18 + .../AlipayOpenLotteryRegionCreateModel.cs | 18 + .../Domain/AlipayOpenLotteryRegionGetModel.cs | 18 + .../AlipayOpenLotteryRegionModifyModel.cs | 18 + ...otterymallExchangerecordstatusSyncModel.cs | 48 + .../AlipayOpenMessagetestCesSendModel.cs | 27 + .../AlipayOpenMiniActivityGiftQueryModel.cs | 24 + .../AlipayOpenMiniActivityModuleQueryModel.cs | 42 + ...yOpenMiniActivityTaskequityReceiveModel.cs | 24 + ...nMiniAliminiabilityprodJsapiCreateModel.cs | 38 + ...nMiniAliminiabilityprodJsapiModifyModel.cs | 60 + ...enMiniAliminiabilityprodJsapiQueryModel.cs | 30 + ...penMiniAmpeBindedminiappBatchqueryModel.cs | 30 + ...ipayOpenMiniAmpeCategoryBatchqueryModel.cs | 18 + .../AlipayOpenMiniAmpeDeviceAddModel.cs | 32 + .../AlipayOpenMiniAmpeDeviceQueryModel.cs | 42 + .../AlipayOpenMiniAmpeDevicemodelAddModel.cs | 42 + ...yOpenMiniAmpeDevicemodelBatchqueryModel.cs | 24 + ...lipayOpenMiniAmpeDevicemodelModifyModel.cs | 48 + ...payOpenMiniAmpeDeviceproductDeleteModel.cs | 24 + ...ayOpenMiniAmpeDevicetypeBatchqueryModel.cs | 18 + ...payOpenMiniAmpeInvokeappBatchqueryModel.cs | 18 + .../AlipayOpenMiniAmpeInvokeappBindModel.cs | 26 + .../AlipayOpenMiniAmpeInvokeappUnbindModel.cs | 26 + .../AlipayOpenMiniAmpeMiniappBindModel.cs | 30 + .../AlipayOpenMiniAmpeMiniappUnbindModel.cs | 30 + ...payOpenMiniAmpeMobileappBatchqueryModel.cs | 18 + .../AlipayOpenMiniAmpeMobileappBindModel.cs | 38 + .../AlipayOpenMiniAmpeMobileappUnbindModel.cs | 32 + ...lipayOpenMiniAmpeProductBatchqueryModel.cs | 18 + .../AlipayOpenMiniAmpeProductModifyModel.cs | 30 + ...lipayOpenMiniAppdeployByappidQueryModel.cs | 42 + ...OpenMiniAppdeployByappversionQueryModel.cs | 36 + ...nMiniAppdeployBydeployversionQueryModel.cs | 36 + ...ipayOpenMiniAppinfoMultiBatchqueryModel.cs | 26 + .../Domain/AlipayOpenMiniAppinfoQueryModel.cs | 24 + .../AlipayOpenMiniBaseinfoAmapQueryModel.cs | 18 + .../AlipayOpenMiniBaseinfoMultiQueryModel.cs | 24 + ...enMiniBizdataTemplatemessageDeleteModel.cs | 24 + ...enMiniBizdataTemplatemessageUploadModel.cs | 20 + .../AlipayOpenMiniCategoryQueryModel.cs | 18 + .../AlipayOpenMiniCloudDetailQueryModel.cs | 24 + .../Domain/AlipayOpenMiniContentSyncModel.cs | 36 + .../Domain/AlipayOpenMiniDataPoiSyncModel.cs | 18 + .../AlipayOpenMiniDataSummaryQueryModel.cs | 18 + .../AlipayOpenMiniDataVisitQueryModel.cs | 24 + .../AlipayOpenMiniDataVisittrendQueryModel.cs | 18 + .../AlipayOpenMiniDeploypackageQueryModel.cs | 114 + ...OpenMiniDeveloperAppinfoBatchqueryModel.cs | 18 + .../AlipayOpenMiniDeveloppackageQueryModel.cs | 60 + .../AlipayOpenMiniExperienceCancelModel.cs | 24 + .../AlipayOpenMiniExperienceCreateModel.cs | 24 + .../AlipayOpenMiniExperienceQueryModel.cs | 24 + .../AlipayOpenMiniInneraccountCreateModel.cs | 24 + ...AlipayOpenMiniInneraccountPidQueryModel.cs | 24 + .../AlipayOpenMiniInnerappCreateModel.cs | 102 + .../AlipayOpenMiniInnerappPluginOrderModel.cs | 36 + ...enMiniInnerappPluginservicePublishModel.cs | 80 + ...ipayOpenMiniInnerappServicePublishModel.cs | 48 + ...AlipayOpenMiniInnerappServiceQueryModel.cs | 60 + ...payOpenMiniInnerbaseinfoBatchqueryModel.cs | 26 + .../AlipayOpenMiniInnerbaseinfoCreateModel.cs | 132 + .../AlipayOpenMiniInnerbaseinfoDeleteModel.cs | 24 + ...ipayOpenMiniInnerbaseinfoListQueryModel.cs | 42 + .../AlipayOpenMiniInnerbaseinfoModifyModel.cs | 78 + ...enMiniInnerbaseinfoParameterVerifyModel.cs | 24 + ...enMiniInnerbaseinfoPrecreateCancelModel.cs | 18 + ...nMiniInnerbaseinfoPrecreateConfirmModel.cs | 18 + ...ipayOpenMiniInnerbaseinfoPrecreateModel.cs | 90 + .../AlipayOpenMiniInnerbaseinfoQueryModel.cs | 36 + ...penMiniInnerbaseinfoTransferDetectModel.cs | 24 + ...lipayOpenMiniInnerbaseinfoTransferModel.cs | 48 + ...lipayOpenMiniInnerclientinfoCreateModel.cs | 30 + ...InnerclientinfoDefaultversionQueryModel.cs | 18 + ...payOpenMiniInnerdeploypackageQueryModel.cs | 36 + ...ipayOpenMiniInnerversionAuditApplyModel.cs | 24 + ...payOpenMiniInnerversionAuditCancelModel.cs | 42 + ...ayOpenMiniInnerversionAuditOfflineModel.cs | 36 + ...payOpenMiniInnerversionAuditSubmitModel.cs | 134 + ...nMiniInnerversionAuditstatusModifyModel.cs | 36 + ...OpenMiniInnerversionBackdevPublishModel.cs | 42 + ...ipayOpenMiniInnerversionBatchqueryModel.cs | 32 + ...enMiniInnerversionBuildauditSubmitModel.cs | 144 + ...iniInnerversionConditionBatchqueryModel.cs | 48 + ...penMiniInnerversionContentRollbackModel.cs | 42 + .../AlipayOpenMiniInnerversionCreateModel.cs | 42 + ...niInnerversionDeveloppackageCreateModel.cs | 36 + ...ipayOpenMiniInnerversionGrayFinishModel.cs | 42 + ...ipayOpenMiniInnerversionGrayOnlineModel.cs | 36 + ...payOpenMiniInnerversionGrayPublishModel.cs | 48 + ...ayOpenMiniInnerversionGrayRollbackModel.cs | 42 + ...ipayOpenMiniInnerversionInfoDeleteModel.cs | 42 + ...lipayOpenMiniInnerversionInfoQueryModel.cs | 36 + ...MiniInnerversionInstantiationQueryModel.cs | 36 + ...lipayOpenMiniInnerversionLastQueryModel.cs | 36 + ...niInnerversionModelforofflineQueryModel.cs | 36 + .../AlipayOpenMiniInnerversionOfflineModel.cs | 36 + ...OpenMiniInnerversionOfflinePublishModel.cs | 42 + .../AlipayOpenMiniInnerversionOnlineModel.cs | 48 + ...yOpenMiniInnerversionOnlinePublishModel.cs | 54 + ...yOpenMiniInnerversionPackageCreateModel.cs | 48 + ...lipayOpenMiniInnerversionPreCancelModel.cs | 36 + ...lipayOpenMiniInnerversionPreOnlineModel.cs | 36 + ...enMiniInnerversionPreonlineConfirmModel.cs | 30 + ...yOpenMiniInnerversionPreviewUploadModel.cs | 81 + .../AlipayOpenMiniInnerversionQueryModel.cs | 69 + ...AlipayOpenMiniInnerversionRollbackModel.cs | 42 + ...penMiniInnerversionSubstatusModifyModel.cs | 42 + .../AlipayOpenMiniInnerversionSyncModel.cs | 48 + ...iniInnerversionTemplatebasedUploadModel.cs | 72 + ...penMiniInnerversionTemplatedUploadModel.cs | 54 + .../AlipayOpenMiniInnerversionUpgradeModel.cs | 42 + .../AlipayOpenMiniInnerversionUploadModel.cs | 146 + ...nMiniInnerversionUploadstatusQueryModel.cs | 42 + .../AlipayOpenMiniItemBatchqueryModel.cs | 26 + .../AlipayOpenMiniItemPageQueryModel.cs | 38 + ...ayOpenMiniMarketMultibundleConsultModel.cs | 36 + .../AlipayOpenMiniMembersHuobanCreateModel.cs | 36 + .../AlipayOpenMiniMembersHuobanDeleteModel.cs | 36 + .../AlipayOpenMiniMembersHuobanModifyModel.cs | 42 + .../AlipayOpenMiniMiniappFavoriteAddModel.cs | 24 + ...AlipayOpenMiniMiniappFavoriteQueryModel.cs | 24 + ...lipayOpenMiniMiniappFavoriteextAddModel.cs | 56 + ...ayOpenMiniMiniappFavoriteextDeleteModel.cs | 56 + ...ayOpenMiniMiniappFavoritegiftQueryModel.cs | 26 + .../AlipayOpenMiniMiniappHistoryQueryModel.cs | 30 + ...OpenMiniMiniappServiceconfigModifyModel.cs | 24 + .../Domain/AlipayOpenMiniModelQueryModel.cs | 60 + .../AlipayOpenMiniMorphoAppCreateModel.cs | 36 + .../AlipayOpenMiniMorphoAppOfflineModel.cs | 24 + .../AlipayOpenMiniMorphoAppOnlineModel.cs | 24 + .../AlipayOpenMiniMorphoAppRollbackModel.cs | 24 + .../AlipayOpenMiniMorphoAppUploadModel.cs | 30 + ...AlipayOpenMiniMorphoAppauditCancelModel.cs | 30 + ...AlipayOpenMiniMorphoAppauditSubmitModel.cs | 30 + ...ipayOpenMiniMorphoAppbackdevModifyModel.cs | 24 + .../AlipayOpenMiniMorphoAppgrayCancelModel.cs | 24 + .../AlipayOpenMiniMorphoAppgrayOnlineModel.cs | 30 + ...payOpenMiniMorphoApplistBatchqueryModel.cs | 62 + ...enMiniMorphoTemplatelistBatchqueryModel.cs | 42 + .../AlipayOpenMiniMultiAuditModifyModel.cs | 36 + .../Domain/AlipayOpenMiniPayeeBindModel.cs | 24 + .../Domain/AlipayOpenMiniPayeeUnbindModel.cs | 24 + ...lipayOpenMiniPlanOperateBatchqueryModel.cs | 30 + .../AlipayOpenMiniPlanOperateCreateModel.cs | 69 + .../AlipayOpenMiniPlanOperateModifyModel.cs | 24 + .../AlipayOpenMiniPlanOperateOfflineModel.cs | 24 + .../Domain/AlipayOpenMiniPoiDeleteModel.cs | 18 + .../Domain/AlipayOpenMiniPoiQueryModel.cs | 24 + .../AlipayOpenMiniPoiShowstatusModifyModel.cs | 24 + .../AlipayOpenMiniPublicRelationBindModel.cs | 24 + .../AlipayOpenMiniPublicRelationQueryModel.cs | 18 + .../Domain/AlipayOpenMiniQrcodeBindModel.cs | 30 + .../Domain/AlipayOpenMiniQrcodeUnbindModel.cs | 18 + .../AlipayOpenMiniReleaststBatchqueryModel.cs | 24 + .../AlipayOpenMiniSafedomainCreateModel.cs | 18 + .../AlipayOpenMiniSafedomainDeleteModel.cs | 18 + .../AlipayOpenMiniSetintentiondataSetModel.cs | 36 + .../AlipayOpenMiniShopActivityCancelModel.cs | 18 + .../AlipayOpenMiniTemplateUsageQueryModel.cs | 42 + ...niTemplatemessageUsertemplateApplyModel.cs | 24 + .../AlipayOpenMiniTinyappExistQueryModel.cs | 18 + .../AlipayOpenMiniUserportraitQueryModel.cs | 30 + .../AlipayOpenMiniVersionAuditCancelModel.cs | 24 + ...AlipayOpenMiniVersionAuditedCancelModel.cs | 24 + .../AlipayOpenMiniVersionBuildQueryModel.cs | 24 + .../AlipayOpenMiniVersionDeleteModel.cs | 24 + .../AlipayOpenMiniVersionDetailQueryModel.cs | 24 + .../AlipayOpenMiniVersionGrayCancelModel.cs | 24 + .../AlipayOpenMiniVersionGrayOnlineModel.cs | 30 + .../AlipayOpenMiniVersionOfflineModel.cs | 24 + .../AlipayOpenMiniVersionOnlineModel.cs | 24 + .../AlipayOpenMiniVersionRollbackModel.cs | 24 + .../AlipayOpenMiniVersionUploadModel.cs | 42 + ...ayOpenOperationBizfeeActivityApplyModel.cs | 54 + ...ipayOpenOperationBizfeeAftechApplyModel.cs | 120 + ...payOpenOperationBizfeeAftechCancelModel.cs | 42 + ...ayOpenOperationBizfeeAftechConsultModel.cs | 66 + ...nOperationBizfeeAftechCreateandpayModel.cs | 84 + ...payOpenOperationBizfeeAftechRefundModel.cs | 66 + ...OpenOperationBizfeeAftechSubscribeModel.cs | 108 + ...enOperationBizfeeAftechUnsubscribeModel.cs | 66 + ...ayOpenOperationOpenbizmockBizQueryModel.cs | 24 + ...payOpenOperationPartnerLoginCreateModel.cs | 18 + ...ipayOpenOperationPartnerSettleSignModel.cs | 80 + ...yOpenOperationPlatformNoticeCreateModel.cs | 30 + .../AlipayOpenOperationSsffDeeQueryModel.cs | 18 + .../Domain/AlipayOpenOperatorSyncModel.cs | 24 + .../AlipayOpenPageNewcontextTransferModel.cs | 30 + .../AlipayOpenPageOldcontextTransferModel.cs | 30 + .../AlipayOpenPublicAccountCreateModel.cs | 48 + .../AlipayOpenPublicAccountDeleteModel.cs | 24 + .../AlipayOpenPublicAccountQueryModel.cs | 18 + .../AlipayOpenPublicAccountResetModel.cs | 48 + .../AlipayOpenPublicAdvertCreateModel.cs | 20 + .../AlipayOpenPublicAdvertDeleteModel.cs | 18 + .../AlipayOpenPublicAdvertModifyModel.cs | 26 + ...PublicArticlesummaryDataBatchqueryModel.cs | 24 + .../AlipayOpenPublicComptestCreateModel.cs | 26 + .../AlipayOpenPublicContentCancelModel.cs | 18 + .../AlipayOpenPublicContentPublishModel.cs | 60 + ...penPublicContentlibDatacollectSendModel.cs | 18 + .../AlipayOpenPublicCrowdInnerQueryModel.cs | 30 + ...ayOpenPublicDefaultExtensionCreateModel.cs | 20 + .../AlipayOpenPublicFollowBatchqueryModel.cs | 18 + .../AlipayOpenPublicFollowCreateModel.cs | 24 + .../Domain/AlipayOpenPublicGisQueryModel.cs | 18 + .../AlipayOpenPublicGroupCreateModel.cs | 26 + .../AlipayOpenPublicGroupCrowdQueryModel.cs | 20 + .../AlipayOpenPublicGroupDeleteModel.cs | 18 + .../AlipayOpenPublicGroupModifyModel.cs | 32 + .../Domain/AlipayOpenPublicInfoModifyModel.cs | 62 + .../AlipayOpenPublicLabelCreateModel.cs | 18 + .../AlipayOpenPublicLabelDeleteModel.cs | 18 + .../AlipayOpenPublicLabelModifyModel.cs | 24 + .../AlipayOpenPublicLabelUserCreateModel.cs | 24 + .../AlipayOpenPublicLabelUserDeleteModel.cs | 24 + .../AlipayOpenPublicLabelUserQueryModel.cs | 18 + ...ipayOpenPublicLifeAgentcreateQueryModel.cs | 18 + .../AlipayOpenPublicLifeLabelCreateModel.cs | 24 + .../AlipayOpenPublicLifeLabelDeleteModel.cs | 18 + .../AlipayOpenPublicLifeLabelModifyModel.cs | 24 + .../AlipayOpenPublicLifeMsgRecallModel.cs | 18 + .../AlipayOpenPublicLifeaccountCreateModel.cs | 116 + ...ipayOpenPublicMatchuserFollowQueryModel.cs | 30 + ...ipayOpenPublicMatchuserLabelCreateModel.cs | 32 + ...ipayOpenPublicMatchuserLabelDeleteModel.cs | 26 + .../Domain/AlipayOpenPublicMenuCreateModel.cs | 26 + ...AlipayOpenPublicMenuDataBatchqueryModel.cs | 24 + .../Domain/AlipayOpenPublicMenuDeleteModel.cs | 18 + .../Domain/AlipayOpenPublicMenuModifyModel.cs | 26 + ...ipayOpenPublicMessageContentCreateModel.cs | 60 + ...ipayOpenPublicMessageContentModifyModel.cs | 66 + .../AlipayOpenPublicMessageCustomSendModel.cs | 50 + .../AlipayOpenPublicMessageGroupSendModel.cs | 44 + .../AlipayOpenPublicMessageLabelSendModel.cs | 24 + ...AlipayOpenPublicMessagePreviewSendModel.cs | 26 + .../AlipayOpenPublicMessageQueryModel.cs | 20 + .../AlipayOpenPublicMessageSingleSendModel.cs | 24 + .../AlipayOpenPublicMessageTotalSendModel.cs | 32 + .../AlipayOpenPublicOdpsCrowdSyncModel.cs | 56 + ...AlipayOpenPublicPartnerMenuOperateModel.cs | 48 + .../AlipayOpenPublicPartnerMenuQueryModel.cs | 24 + ...ipayOpenPublicPartnerSubscribeSyncModel.cs | 48 + .../AlipayOpenPublicPayeeBindCreateModel.cs | 24 + .../AlipayOpenPublicPayeeBindDeleteModel.cs | 24 + ...nPublicPersonalizedExtensionCreateModel.cs | 27 + ...nPublicPersonalizedExtensionDeleteModel.cs | 18 + ...OpenPublicPersonalizedExtensionSetModel.cs | 24 + ...ayOpenPublicPersonalizedMenuCreateModel.cs | 45 + ...ayOpenPublicPersonalizedMenuDeleteModel.cs | 18 + .../AlipayOpenPublicQrcodeCreateModel.cs | 36 + .../AlipayOpenPublicShortlinkCreateModel.cs | 24 + ...nPublicSinglearticleDataBatchqueryModel.cs | 24 + .../AlipayOpenPublicSummaryQueryModel.cs | 24 + ...AlipayOpenPublicTemplateMessageAddModel.cs | 33 + ...AlipayOpenPublicTemplateMessageGetModel.cs | 18 + ...ublicTemplateMessageIndustryModifyModel.cs | 36 + ...ipayOpenPublicThirdCustomerServiceModel.cs | 18 + .../AlipayOpenPublicTopicCreateModel.cs | 50 + .../AlipayOpenPublicTopicDeleteModel.cs | 18 + .../AlipayOpenPublicTopicModifyModel.cs | 54 + ...AlipayOpenPublicUserDataBatchqueryModel.cs | 24 + .../AlipayOpenPublicUserFollowQueryModel.cs | 18 + ...payOpenPublicXwbtestabcdBatchqueryModel.cs | 18 + ...ServicemarketCommodityAuditConfirmModel.cs | 24 + ...rvicemarketCommodityExtendinfosAddModel.cs | 32 + ...emarketCommodityExtendinfosConfirmModel.cs | 44 + ...payOpenServicemarketCommodityQueryModel.cs | 24 + ...nServicemarketCommodityShopOfflineModel.cs | 24 + ...enServicemarketCommodityShopOnlineModel.cs | 24 + ...ervicemarketCommoditySmartcitySyncModel.cs | 42 + ...lipayOpenServicemarketInstanceSyncModel.cs | 66 + ...AlipayOpenServicemarketOrderAcceptModel.cs | 18 + ...ayOpenServicemarketOrderItemCancelModel.cs | 36 + ...OpenServicemarketOrderItemCompleteModel.cs | 30 + ...yOpenServicemarketOrderItemConfirmModel.cs | 30 + .../AlipayOpenServicemarketOrderQueryModel.cs | 24 + ...AlipayOpenServicemarketOrderRejectModel.cs | 24 + .../AlipayOpenServicemarketOrderSyncModel.cs | 84 + ...payOpenServicemarketResourceCreateModel.cs | 56 + ...lipayOpenServicemarketYcstestQueryModel.cs | 48 + .../Domain/AlipayOpenSmsgDataSetModel.cs | 24 + .../Domain/AlipayOpenStsTokenGetModel.cs | 24 + .../AliPay/Domain/AlipayOpenTestQueryModel.cs | 26 + .../AlipayOpenXwbtesttomsgapiSyncModel.cs | 18 + .../AlipayOrderDataOpenapiResultInfo.cs | 166 + ...seasFundInstitutionschoolinfCreateModel.cs | 234 + .../AlipayOverseasOpenAccountConsultModel.cs | 48 + .../AlipayOverseasOpenPreorderCreateModel.cs | 36 + .../AlipayOverseasOpenPreorderQueryModel.cs | 18 + .../AlipayOverseasOpenSchoolQueryModel.cs | 18 + ...OverseasRemitBeneficialinfoCertifyModel.cs | 66 + ...ayOverseasRemitBeneficialinfoQueryModel.cs | 96 + .../AlipayOverseasRemitFundInitializeModel.cs | 126 + .../AlipayOverseasRemitFundTransferModel.cs | 66 + ...payOverseasRemitFxtradeorderCreateModel.cs | 60 + .../AlipayOverseasRemitResultFinishModel.cs | 54 + .../AlipayOverseasRemitWithdrawNotifyModel.cs | 72 + .../AlipayOverseasTaxAdvancedCreateModel.cs | 108 + .../AlipayOverseasTaxAdvancedPayModel.cs | 24 + .../AlipayOverseasTaxAdvancedRefundModel.cs | 18 + ...ipayOverseasTaxAdvancedStatusQueryModel.cs | 18 + .../AlipayOverseasTaxAdvancedUnfreezeModel.cs | 18 + .../AlipayOverseasTaxNeworderCreateModel.cs | 102 + ...lipayOverseasTaxNeworderStatusSyncModel.cs | 54 + .../Domain/AlipayOverseasTaxOrderPayModel.cs | 156 + .../AlipayOverseasTaxOrderQueryModel.cs | 18 + .../AlipayOverseasTaxUserinfoQueryModel.cs | 24 + .../AlipayOverseasTransferCertifyModel.cs | 84 + .../AlipayOverseasTransferConfirmModel.cs | 90 + ...easTransferInstitutionpaymentQueryModel.cs | 36 + ...lipayOverseasTransferPaymentCancelModel.cs | 36 + ...payOverseasTransferPaymentDisburseModel.cs | 30 + ...lipayOverseasTransferPaymentNotifyModel.cs | 30 + ...ayOverseasTransferPaymentPrecreateModel.cs | 72 + ...AlipayOverseasTransferPaymentQueryModel.cs | 30 + .../AlipayOverseasTransferQueryModel.cs | 24 + ...OverseasTravelAppleCampprizeDetectModel.cs | 24 + ...yOverseasTravelBenefitChangeNotifyModel.cs | 32 + .../AlipayOverseasTravelContentCancelModel.cs | 24 + ...ipayOverseasTravelContentCountSyncModel.cs | 20 + .../AlipayOverseasTravelContentCreateModel.cs | 94 + ...erseasTravelExchangerateBatchqueryModel.cs | 32 + ...payOverseasTravelExchangerateQueryModel.cs | 48 + ...OverseasTravelFliggyAuthorityQueryModel.cs | 42 + ...lipayOverseasTravelFliggyPoiCreateModel.cs | 48 + ...ayOverseasTravelFliggyShopTransferModel.cs | 36 + ...payOverseasTravelFliggyStoreModifyModel.cs | 36 + ...ipayOverseasTravelGkaCampaignApplyModel.cs | 54 + ...payOverseasTravelGkaCampprizeQueryModel.cs | 30 + .../AlipayOverseasTravelPoiQueryModel.cs | 30 + .../AlipayOverseasTravelPromotionGetModel.cs | 113 + ...ipayOverseasTravelPromotionReceiveModel.cs | 42 + ...AlipayOverseasTravelRateBatchqueryModel.cs | 32 + ...erseasTravelRateCurrencyBatchqueryModel.cs | 24 + ...yOverseasTravelRatePromotionVerifyModel.cs | 30 + .../AlipayOverseasTravelRateQueryModel.cs | 48 + ...payOverseasTravelRateRateinfoQueryModel.cs | 54 + .../AlipayOverseasTravelShopFollowModel.cs | 48 + ...OverseasTuitionSchoolcreditConfirmModel.cs | 60 + ...seasTuitionSchoolpaymentBatchqueryModel.cs | 32 + .../Domain/AlipayPassInstanceAddModel.cs | 36 + .../Domain/AlipayPassInstanceUpdateModel.cs | 48 + .../Domain/AlipayPassTemplateAddModel.cs | 24 + .../Domain/AlipayPassTemplateUpdateModel.cs | 24 + .../AliPay/Domain/AlipayPayAppCarPayModel.cs | 36 + .../AliPay/Domain/AlipayPayAppCarSignModel.cs | 18 + .../AlipayPayAppMarketingConsultModel.cs | 48 + ...ayPayApplepayTransactionBatchqueryModel.cs | 36 + ...ApplepayTransactionauthtokenCreateModel.cs | 44 + ...ApplepayTransactionauthtokenDeleteModel.cs | 44 + .../AlipayPayCodecAcodeCertExpireModel.cs | 30 + .../AlipayPayCodecAcodeDecodeUseModel.cs | 60 + ...PayCodecApplepayBarcodeeventNotifyModel.cs | 30 + ...ipayPayCodecApplepayCredentialsGetModel.cs | 60 + ...AlipayPayCodecApplepayEstablishSetModel.cs | 45 + .../AlipayPayCodecHschoolDecodeUseModel.cs | 24 + .../AlipayPayCodecQrcodecacheAddModel.cs | 44 + ...payPcreditCreditriskCustlabelQueryModel.cs | 18 + ...PcreditHuabeiAuthAccumulationQueryModel.cs | 30 + ...payPcreditHuabeiAuthAgreementCloseModel.cs | 42 + ...payPcreditHuabeiAuthAgreementQueryModel.cs | 36 + ...ayPcreditHuabeiAuthBusinessConfirmModel.cs | 54 + .../AlipayPcreditHuabeiAuthOrderCloseModel.cs | 36 + ...AlipayPcreditHuabeiAuthOrderFreezeModel.cs | 48 + .../AlipayPcreditHuabeiAuthOrderQueryModel.cs | 30 + ...ipayPcreditHuabeiAuthOrderUnfreezeModel.cs | 54 + .../AlipayPcreditHuabeiAuthPageSignModel.cs | 60 + ...AlipayPcreditHuabeiAuthRefundApplyModel.cs | 66 + ...AlipayPcreditHuabeiAuthSettleApplyModel.cs | 60 + .../AlipayPcreditHuabeiAuthSignApplyModel.cs | 60 + ...ipayPcreditHuabeiBenefitOrderCloseModel.cs | 36 + ...payPcreditHuabeiBenefitOrderCreateModel.cs | 74 + ...ipayPcreditHuabeiDiscountBillQueryModel.cs | 30 + ...creditHuabeiDiscountSolutionCreateModel.cs | 82 + ...creditHuabeiDiscountSolutionModifyModel.cs | 88 + ...reditHuabeiDiscountSolutionOfflineModel.cs | 18 + ...creditHuabeiDiscountSolutionOnlineModel.cs | 18 + ...editHuabeiEnterpriseReimburseQueryModel.cs | 30 + ...reditHuabeiEnterpriseReimburseSyncModel.cs | 54 + ...creditHuabeiEnterpriseUserinfoSyncModel.cs | 90 + ...creditHuabeiMerchantActivityCreateModel.cs | 87 + ...creditHuabeiMerchantActivityModifyModel.cs | 93 + ...reditHuabeiMerchantActivityOfflineModel.cs | 24 + ...creditHuabeiMerchantActivityOnlineModel.cs | 24 + ...ipayPcreditHuabeiMerchantBillQueryModel.cs | 30 + ...ayPcreditHuabeiMobileauthSignApplyModel.cs | 18 + ...PcreditHuabeiMobileauthSignConfirmModel.cs | 18 + ...PcreditHuabeiMobileauthSignConsultModel.cs | 18 + ...yPcreditHuabeiMobileauthSignVerifyModel.cs | 18 + ...reditHuabeiMobileauthTemplateQueryModel.cs | 18 + ...tHuabeiMobileauthTemplatetextQueryModel.cs | 18 + ...iPcbenefitcoreBfactivitfacadeQueryModel.cs | 45 + ...eiPcreditamountQueryprocessorQueryModel.cs | 24 + ...eiPcreditmerchantProductorderApplyModel.cs | 66 + ...iPcreditmerchantProductorderCancelModel.cs | 60 + ...eiPcreditmerchantProductorderDelayModel.cs | 48 + ...eiPcreditmerchantProductorderQueryModel.cs | 38 + ...creditmerchantProductorderTransferModel.cs | 90 + ...PcreditmerchantProductorderidApplyModel.cs | 18 + ...itHuabeiSelleradmitAdmittanceQueryModel.cs | 54 + ...itHuabeiSelleradmitRealtimeCertifyModel.cs | 54 + ...AlipayPcreditHuabeiSpayAuthConsultModel.cs | 96 + .../AlipayPcreditLoanApplyCreateModel.cs | 48 + .../AlipayPcreditLoanApplyQueryModel.cs | 18 + .../AlipayPcreditLoanApplyUserCertifyModel.cs | 36 + ...LoanBeikeaccountInterestfreeModifyModel.cs | 42 + .../AlipayPcreditLoanBudgetQueryModel.cs | 48 + ...ipayPcreditLoanCollateralCarModifyModel.cs | 102 + ...lipayPcreditLoanCollateralCarQueryModel.cs | 18 + ...PcreditLoanCollateralValuationSyncModel.cs | 60 + .../AlipayPcreditLoanCommissionQueryModel.cs | 54 + ...AlipayPcreditLoanContractInfoQueryModel.cs | 36 + .../AlipayPcreditLoanCreditApplyModel.cs | 36 + .../AlipayPcreditLoanCreditQueryModel.cs | 24 + .../AlipayPcreditLoanDeductApplyModel.cs | 36 + .../Domain/AlipayPcreditLoanLoanApplyModel.cs | 54 + .../AlipayPcreditLoanLoanDetailQueryModel.cs | 30 + .../AlipayPcreditLoanLoanInfoQueryModel.cs | 30 + .../AlipayPcreditLoanLoanResultQueryModel.cs | 30 + .../AlipayPcreditLoanLoanUnclearQueryModel.cs | 24 + .../AlipayPcreditLoanRefundCreateModel.cs | 36 + .../AlipayPcreditLoanRepayApplyModel.cs | 50 + .../AlipayPcreditLoanRepayDetailQueryModel.cs | 42 + .../AlipayPcreditLoanRepayResultQueryModel.cs | 30 + .../AlipayPcreditLoanRepayplanQueryModel.cs | 18 + .../AlipayPcreditUserProfileSendModel.cs | 42 + .../Domain/AlipayPlatformUseridGetModel.cs | 20 + .../Domain/AlipayQueryCardModelResult.cs | 78 + .../AlipaySecurityAafAdfaBatchqueryModel.cs | 18 + ...ipaySecurityDataAmlassetBatchqueryModel.cs | 38 + .../AlipaySecurityDataDatabusSendModel.cs | 24 + ...paySecurityDataInfoMobilecityQueryModel.cs | 18 + ...ySecurityDataInfoSecuritydataQueryModel.cs | 42 + .../AlipaySecurityDataNamelistSendModel.cs | 30 + ...ipaySecurityProdAfsrcVulBatchqueryModel.cs | 18 + .../AlipaySecurityProdAfsrcVulQueryModel.cs | 18 + ...SecurityProdAfsrcWhitehatinfoQueryModel.cs | 24 + ...SecurityProdAlipaySecurityProdTestModel.cs | 26 + .../AlipaySecurityProdAmlriskQueryModel.cs | 62 + .../AlipaySecurityProdCheckIqQueryModel.cs | 18 + .../AlipaySecurityProdCtidInitializeModel.cs | 18 + .../AlipaySecurityProdCtidVerifyModel.cs | 36 + .../Domain/AlipaySecurityProdDesQueryModel.cs | 26 + .../AlipaySecurityProdDeviceinfoQueryModel.cs | 30 + ...ipaySecurityProdDfesfDefBatchqueryModel.cs | 24 + .../AlipaySecurityProdFacePayCreateModel.cs | 24 + .../Domain/AlipaySecurityProdFacePayModel.cs | 18 + .../AlipaySecurityProdFacepayUploadModel.cs | 30 + .../AlipaySecurityProdFacepayVerifyModel.cs | 48 + .../AlipaySecurityProdFacerepoAddModel.cs | 30 + .../AlipaySecurityProdFacerepoSearchModel.cs | 30 + ...rityProdFingerprintApplyInitializeModel.cs | 30 + ...AlipaySecurityProdFingerprintApplyModel.cs | 36 + ...lipaySecurityProdFingerprintDeleteModel.cs | 30 + ...ecurityProdFingerprintDeviceVerifyModel.cs | 30 + ...ityProdFingerprintRiskcontrolQueryModel.cs | 36 + ...ityProdFingerprintVerifyInitializeModel.cs | 30 + ...lipaySecurityProdFingerprintVerifyModel.cs | 42 + ...ySecurityProdIfaaDevicepubkeyQueryModel.cs | 36 + .../AlipaySecurityProdIrisCreateModel.cs | 60 + .../AlipaySecurityProdIrisVerifyModel.cs | 60 + .../AlipaySecurityProdSeAppletQueryModel.cs | 48 + ...ipaySecurityProdSignatureTaskApplyModel.cs | 69 + ...paySecurityProdSignatureTaskCancelModel.cs | 36 + ...ipaySecurityProdSignatureTaskQueryModel.cs | 38 + .../Domain/AlipaySecurityProdTamGetModel.cs | 54 + .../AlipaySecurityProdUmidQueryModel.cs | 18 + ...ipaySecurityProdXwbtestabcAbcQueryModel.cs | 18 + ...AlipaySecurityProdXwbtestprodQueryModel.cs | 30 + ...AlipaySecurityRiskAmlAnalyzeSubmitModel.cs | 54 + ...paySecurityRiskAntifraudBatchqueryModel.cs | 33 + ...aySecurityRiskAuthenticationCancelModel.cs | 36 + ...curityRiskAuthenticationInitializeModel.cs | 30 + ...paySecurityRiskAuthenticationQueryModel.cs | 36 + ...curityRiskBackgroundInterfaceQueryModel.cs | 24 + .../AlipaySecurityRiskBackgroundQueryModel.cs | 24 + .../AlipaySecurityRiskContentAnalyzeModel.cs | 101 + .../AlipaySecurityRiskContentDetectModel.cs | 18 + ...ySecurityRiskContentPerceptionSendModel.cs | 42 + ...AlipaySecurityRiskContentResultGetModel.cs | 30 + ...lipaySecurityRiskCustomerriskQueryModel.cs | 60 + ...AlipaySecurityRiskCustomerriskSendModel.cs | 96 + ...paySecurityRiskCustomerriskrankGetModel.cs | 42 + ...lipaySecurityRiskHideDeviceidQueryModel.cs | 36 + .../AlipaySecurityRiskHufuAuthCreateModel.cs | 48 + .../AlipaySecurityRiskHufuAuthQueryModel.cs | 30 + ...paySecurityRiskMobileactivityQueryModel.cs | 30 + ...AlipaySecurityRiskOfflinevarsQueryModel.cs | 18 + .../AlipaySecurityRiskPolicyConfirmModel.cs | 24 + .../AlipaySecurityRiskPolicyQueryModel.cs | 30 + .../AlipaySecurityRiskPolicyRdsQueryModel.cs | 18 + .../AlipaySecurityRiskRainscoreQueryModel.cs | 36 + ...tyRiskReconfirmRiskidentifyCertifyModel.cs | 66 + ...iskReconfirmVerificatecallbackSendModel.cs | 72 + ...AlipaySecurityRiskRiskprofileQueryModel.cs | 46 + ...paySecurityRiskRiskscanSingleQueryModel.cs | 36 + ...paySecurityRiskVerifyidentityApplyModel.cs | 54 + ...urityRiskVerifyidentityCommonQueryModel.cs | 30 + ...ySecurityRiskVerifyidentityConfirmModel.cs | 36 + ...curityRiskVerifyidentityInitializeModel.cs | 60 + .../AlipaySecurityRopgnRisktaskCreateModel.cs | 42 + .../Domain/AlipaySecuritySssssssQueryModel.cs | 24 + ...cialAntcommonwealDonateConsumeSyncModel.cs | 84 + ...ipaySocialAntforestAccountTransferModel.cs | 54 + .../AlipaySocialAntforestEnergyQueryModel.cs | 18 + .../AlipaySocialAntforestPlantApplyModel.cs | 54 + .../AlipaySocialAntforestPlantConsultModel.cs | 36 + .../AlipaySocialAntforestProjectQueryModel.cs | 24 + .../AlipaySocialAntforestTreeSyncModel.cs | 36 + .../AlipaySocialAntiepSceneSendModel.cs | 60 + ...paySocialAntsportsCurrentpathQueryModel.cs | 48 + .../Domain/AlipaySocialBaseBcMsgSendModel.cs | 156 + .../AlipaySocialBaseChatGinfoQueryModel.cs | 18 + .../AlipaySocialBaseChatGinvSendModel.cs | 26 + ...AlipaySocialBaseChatGmemberConfirmModel.cs | 30 + .../AlipaySocialBaseChatGmemberDeleteModel.cs | 26 + .../AlipaySocialBaseChatGmsgSendModel.cs | 86 + .../AlipaySocialBaseChatGnameModifyModel.cs | 24 + .../AlipaySocialBaseChatGnoticeModifyModel.cs | 24 + .../AlipaySocialBaseChatGroupCreateModel.cs | 24 + .../AlipaySocialBaseChatGroupsQueryModel.cs | 18 + .../AlipaySocialBaseChatMsgSendModel.cs | 66 + .../AlipaySocialBaseChatNewmsgSendModel.cs | 72 + .../Domain/AlipaySocialBaseChatSendModel.cs | 54 + ...ySocialBaseContentlibNewsflashSendModel.cs | 78 + ...lipaySocialBaseContentlibOfferSyncModel.cs | 30 + ...lBaseContentlibStandardcontentSendModel.cs | 102 + ...ialBaseContentlibStandardvideoSendModel.cs | 108 + ...seContentlibStandardvideoauditSendModel.cs | 72 + .../AlipaySocialBaseGroupCreateModel.cs | 36 + .../Domain/AlipaySocialBaseGroupQueryModel.cs | 18 + .../AlipaySocialBaseGroupmemberAddModel.cs | 32 + .../AlipaySocialBaseIdpdrivenSendModel.cs | 30 + .../AlipaySocialBaseIdpsourceSyncModel.cs | 24 + ...paySocialBaseMcommentFootprintSendModel.cs | 60 + ...ySocialBaseMcommentFootprintUploadModel.cs | 60 + ...lipaySocialBaseMcommentNewsfeedAddModel.cs | 160 + .../AlipaySocialBaseQuestInstanceAddModel.cs | 36 + ...lipaySocialBaseQuestInstanceModifyModel.cs | 42 + ...AlipaySocialBaseQuestInstanceQueryModel.cs | 32 + ...lipaySocialBaseQuestInstanceSubmitModel.cs | 30 + ...lipaySocialBaseQuestInstancesQueryModel.cs | 32 + ...paySocialBaseRelationCombinedQueryModel.cs | 24 + ...ipaySocialBaseRelationFriendsQueryModel.cs | 24 + .../AlipaySocialBaseSceneContentQueryModel.cs | 36 + .../AlipaySocialForestTreeQueryModel.cs | 30 + .../AlipaySocialGiftOrderConfirmModel.cs | 42 + .../Domain/AlipaySocialGiftOrderQueryModel.cs | 24 + .../AlipaySocialGiftOrderRefundModel.cs | 36 + .../Domain/AlipaySocialGiftStockQueryModel.cs | 32 + .../AlipaySocialGiftStockUploadModel.cs | 38 + .../Domain/AlipaySocialGiftVoucherUseModel.cs | 54 + ...lipaySocialQuestionnareGrayUpgradeModel.cs | 30 + ...AlipaySocialQuestionnareTaskFinishModel.cs | 24 + ...lipaySocialQuestionnareTaskPublishModel.cs | 42 + .../AlipaySocialQuestionnareTaskQueryModel.cs | 30 + ...AlipaySocialQuestionnareTaskVerifyModel.cs | 36 + .../Domain/AlipayTradeAdvanceConsultModel.cs | 60 + .../Domain/AlipayTradeAppMergePayModel.cs | 18 + .../AliPay/Domain/AlipayTradeAppPayModel.cs | 164 + ...yTradeApplepayAuthenticationSubmitModel.cs | 38 + .../Domain/AlipayTradeBatchRefundModel.cs | 44 + .../AlipayTradeBatchRefundQueryModel.cs | 24 + .../Domain/AlipayTradeBatchSettleModel.cs | 38 + .../AlipayTradeBatchSettleQueryModel.cs | 30 + .../Domain/AlipayTradeBatchTransferModel.cs | 32 + .../AlipayTradeBatchTransferQueryModel.cs | 30 + .../AlipayTradeBuyerCreditApplyModel.cs | 72 + .../AlipayTradeBuyerCreditCancelModel.cs | 24 + .../AlipayTradeBuyerCreditCloseModel.cs | 48 + .../AlipayTradeBuyerCreditConfirmModel.cs | 24 + .../AlipayTradeBuyerCreditQueryModel.cs | 42 + .../AliPay/Domain/AlipayTradeCancelModel.cs | 24 + .../AliPay/Domain/AlipayTradeCloseModel.cs | 30 + .../AliPay/Domain/AlipayTradeCreateModel.cs | 176 + .../AlipayTradeCreditApplyQueryModel.cs | 42 + .../AlipayTradeCreditFinancePayModel.cs | 66 + .../AlipayTradeCreditFinanceRefundModel.cs | 60 + .../AlipayTradeCreditPayConsultModel.cs | 48 + .../AlipayTradeCreditProductSignModel.cs | 36 + .../Domain/AlipayTradeCustomsDeclareModel.cs | 72 + .../Domain/AlipayTradeCustomsQueryModel.cs | 18 + .../AlipayTradeFastpayEteDidiPayModel.cs | 90 + .../AlipayTradeFastpayRefundQueryModel.cs | 44 + ...lipayTradeMerchantCreditInitializeModel.cs | 36 + .../AlipayTradeMerchantCreditModifyModel.cs | 48 + .../AlipayTradeMerchantCreditQueryModel.cs | 30 + .../Domain/AlipayTradeMergePrecreateModel.cs | 32 + .../AliPay/Domain/AlipayTradeOrderPayModel.cs | 44 + .../Domain/AlipayTradeOrderSettleModel.cs | 38 + .../Domain/AlipayTradeOrderinfoSyncModel.cs | 42 + .../Domain/AlipayTradePageMergePayModel.cs | 32 + .../AliPay/Domain/AlipayTradePagePayModel.cs | 176 + .../Domain/AlipayTradePageRefundModel.cs | 72 + .../Domain/AlipayTradePayConsultModel.cs | 66 + .../AliPay/Domain/AlipayTradePayModel.cs | 231 + ...lipayTradePaygrowthPayabilityQueryModel.cs | 36 + ...ipayTradePeerpayprodRelationCreateModel.cs | 48 + .../AlipayTradePrecreateConfirmModel.cs | 48 + .../Domain/AlipayTradePrecreateModel.cs | 164 + .../AliPay/Domain/AlipayTradeQueryModel.cs | 38 + .../Domain/AlipayTradeRefundApplyModel.cs | 66 + .../AliPay/Domain/AlipayTradeRefundModel.cs | 94 + .../Domain/AlipayTradeRepaybillCreateModel.cs | 50 + .../AlipayTradeRepaybillOrderCloseModel.cs | 24 + .../AlipayTradeRepaybillOrderCreateModel.cs | 60 + ...payTradeRepaybillOrderCreateandpayModel.cs | 72 + ...ipayTradeRoyaltyRelationBatchqueryModel.cs | 30 + .../AlipayTradeRoyaltyRelationBindModel.cs | 26 + .../AlipayTradeRoyaltyRelationUnbindModel.cs | 26 + .../AlipayTradeSettleConfirmCancelModel.cs | 24 + .../Domain/AlipayTradeSettleConfirmModel.cs | 30 + .../AlipayTradeSettleReceivablesQueryModel.cs | 42 + ...ipayTradeVendorpayDevicedataUploadModel.cs | 78 + .../Domain/AlipayTradeWapMergePayModel.cs | 18 + .../AliPay/Domain/AlipayTradeWapPayModel.cs | 170 + .../AlipayUserAccountBindingSyncModel.cs | 54 + .../AlipayUserAccountDeviceInfoQueryModel.cs | 44 + .../AlipayUserAccountDeviceInfoUploadModel.cs | 54 + ...lipayUserAccountInstitutionCertifyModel.cs | 24 + ...lipayUserAccountInvitedConvertSyncModel.cs | 24 + ...payUserAccountNewbieBenefitConsultModel.cs | 48 + .../AlipayUserAccountOrderConsultModel.cs | 30 + .../Domain/AlipayUserAddressQueryModel.cs | 18 + .../AlipayUserAgreementAuthApplyModel.cs | 30 + .../AlipayUserAgreementAuthConfirmModel.cs | 30 + .../AlipayUserAgreementBatchQueryModel.cs | 48 + ...ayUserAgreementExecutionplanModifyModel.cs | 30 + .../AlipayUserAgreementPageSignModel.cs | 138 + .../Domain/AlipayUserAgreementQueryModel.cs | 54 + .../AlipayUserAgreementSignConfirmModel.cs | 30 + .../AlipayUserAgreementSignEffectModel.cs | 54 + .../Domain/AlipayUserAgreementSignModel.cs | 144 + .../AlipayUserAgreementTransferModel.cs | 30 + .../Domain/AlipayUserAgreementUnsignModel.cs | 66 + ...AlipayUserAgreementUserverifyApplyModel.cs | 18 + ...AlipayUserAgreementUserverifyQueryModel.cs | 24 + .../Domain/AlipayUserAlipaypointSendModel.cs | 48 + .../AlipayUserAliyunbenefitReceiveModel.cs | 48 + .../AlipayUserAliyunbenefitRefundModel.cs | 24 + .../AlipayUserAliyunbenefitSyncModel.cs | 74 + ...lipayUserAntarchiveCustrelationAddModel.cs | 24 + ...payUserAntarchiveCustrelationCloseModel.cs | 24 + .../AlipayUserAntarchiveFaceIdentifyModel.cs | 48 + .../AlipayUserAntarchiveFaceQueryModel.cs | 48 + .../AlipayUserAntarchiveFaceUploadModel.cs | 54 + ...yUserAntarchiveIdentityrelationAddModel.cs | 42 + .../AlipayUserAntidVirtualCreateModel.cs | 48 + .../AlipayUserAntidVirtualQueryModel.cs | 30 + .../AlipayUserAntpaasAddtesttagModifyModel.cs | 18 + .../AlipayUserAntpaasRoleDeleteModel.cs | 42 + .../AlipayUserAntpaasRoleRelationSaveModel.cs | 48 + ...AlipayUserAntpaasTestaccountCreateModel.cs | 90 + .../AlipayUserAntpaasTokenCreateModel.cs | 60 + ...payUserAntpaasTokenThirdTrustLoginModel.cs | 18 + ...ipayUserAntpaasTokenidentityCreateModel.cs | 48 + ...lipayUserAntpaasTokenidentityQueryModel.cs | 24 + .../Domain/AlipayUserAntpaasUseridGetModel.cs | 18 + ...ayUserApplepayMerchantauthtokenGetModel.cs | 48 + .../Domain/AlipayUserApplepayOtpSendModel.cs | 24 + ...rApplepayOtpresolutionmethodsQueryModel.cs | 18 + .../AlipayUserApplepayPbstatusQueryModel.cs | 36 + ...erApplepayProvisioningbundleCreateModel.cs | 18 + ...erApplepayProvisioningbundleEffectModel.cs | 30 + ...erApplepayProvisioningbundleModifyModel.cs | 36 + ...serApplepayProvisioningbundleQueryModel.cs | 63 + ...ipayUserAuthSecondpartyTokenVerifyModel.cs | 24 + .../AlipayUserAuthUserinfoApplyModel.cs | 30 + ...lipayUserAuthZhimaorgIdentityApplyModel.cs | 30 + .../AlipayUserAuthZhimaperInnerApplyModel.cs | 42 + ...lipayUserAuthZhimaperInternalApplyModel.cs | 42 + .../Domain/AlipayUserBenefitCreateModel.cs | 102 + .../Domain/AlipayUserBenefitEditModel.cs | 108 + .../AlipayUserBenefitStatusUpdateModel.cs | 30 + .../Domain/AlipayUserBillSimpleQueryModel.cs | 24 + .../Domain/AlipayUserCertDocDrivingLicense.cs | 60 + .../AliPay/Domain/AlipayUserCertDocIDCard.cs | 42 + .../Domain/AlipayUserCertDocPassport.cs | 42 + .../Domain/AlipayUserCertDocVehicleLicense.cs | 66 + ...AlipayUserCertdocCertverifyConsultModel.cs | 18 + ...payUserCertdocCertverifyPreconsultModel.cs | 48 + .../Domain/AlipayUserCertdocSyncModel.cs | 56 + .../Domain/AlipayUserCertdocUrlQueryModel.cs | 36 + .../AlipayUserCertifyActionApplyModel.cs | 24 + ...AlipayUserCertifyIdentifyFileQueryModel.cs | 18 + ...AlipayUserCertifyIdentifyInfoQueryModel.cs | 30 + .../AlipayUserCertifyIdentifyVerifyModel.cs | 36 + .../Domain/AlipayUserCertifyImgUploadModel.cs | 30 + .../Domain/AlipayUserCertifyInfoApplyModel.cs | 174 + .../AlipayUserCertifyInfoPersonApplyModel.cs | 96 + .../AlipayUserCertifyOpenCertifyModel.cs | 18 + .../AlipayUserCertifyOpenInitializeModel.cs | 42 + .../Domain/AlipayUserCertifyOpenQueryModel.cs | 18 + .../AlipayUserCertifyStudentinfoSyncModel.cs | 54 + .../AlipayUserCertinfoMaskedQueryModel.cs | 20 + .../AlipayUserCharityCommonwealCreateModel.cs | 54 + .../AlipayUserCharityForestQueryModel.cs | 18 + .../AlipayUserCharityForestSendModel.cs | 48 + ...AlipayUserCharityForestsendpicSendModel.cs | 42 + .../AlipayUserCharityRecordexistQueryModel.cs | 42 + .../AliPay/Domain/AlipayUserCreditCard.cs | 24 + .../Domain/AlipayUserCustIdentifyActivity.cs | 24 + .../Domain/AlipayUserCustomerIdentifyModel.cs | 36 + .../Domain/AlipayUserCustomertagSaveModel.cs | 36 + .../AliPay/Domain/AlipayUserDeliverAddress.cs | 72 + PaymentSDK/AliPay/Domain/AlipayUserDetail.cs | 54 + .../AliPay/Domain/AlipayUserDeviceInfo.cs | 48 + ...rElectronicidMerchantbarcodeCreateModel.cs | 30 + ...tronicidOutermerchantbarcodeCreateModel.cs | 36 + .../AlipayUserElectronicidUserQueryModel.cs | 18 + ...yUserElectronicidUserbarcodeCreateModel.cs | 24 + .../AlipayUserFamilyArchiveInitializeModel.cs | 50 + .../AlipayUserFamilyArchiveQueryModel.cs | 18 + ...AlipayUserFamilyRelationValidQueryModel.cs | 24 + .../Domain/AlipayUserFinanceinfoShareModel.cs | 18 + .../AlipayUserGradeAuthbaseQueryModel.cs | 18 + .../Domain/AlipayUserGroupbuyingSyncModel.cs | 36 + ...lipayUserGroupshoppingBenefitQueryModel.cs | 68 + ...AlipayUserGroupshoppingNewbieQueryModel.cs | 30 + .../AlipayUserIdenticalAuthbaseQueryModel.cs | 24 + .../AliPay/Domain/AlipayUserInfoAuthModel.cs | 26 + .../Domain/AlipayUserInfoInnerQueryModel.cs | 30 + .../Domain/AlipayUserInfoVerifyModel.cs | 18 + .../AlipayUserInviteAwardReceiveModel.cs | 36 + ...AlipayUserInviteOfflinedetailQueryModel.cs | 48 + ...lipayUserInviteOfflinesummaryQueryModel.cs | 36 + .../AlipayUserInviteOnlinedetailQueryModel.cs | 42 + ...AlipayUserInviteOnlinesummaryQueryModel.cs | 30 + .../Domain/AlipayUserInviteRtaConsultModel.cs | 36 + ...lipayUserInvitetaskExchangeConfirmModel.cs | 54 + ...lipayUserInvitetaskExchangeConsultModel.cs | 48 + .../AliPay/Domain/AlipayUserLevelInfo.cs | 30 + .../AlipayUserLogonidMaskedQueryModel.cs | 20 + ...AlipayUserMemberAlipaybigcardQueryModel.cs | 36 + .../AlipayUserMemberAlipaycardQueryModel.cs | 24 + ...payUserMemberCompletegcwtaskModifyModel.cs | 54 + .../AlipayUserMemberGcwtaskQueryModel.cs | 24 + .../Domain/AlipayUserMemberSceneQueryModel.cs | 24 + .../AlipayUserMemberTakegcwtaskCreateModel.cs | 36 + .../AlipayUserMembertaskProcessSyncModel.cs | 42 + .../AlipayUserMpointAuthbasePayModel.cs | 42 + .../AlipayUserMpointAuthbaseQueryModel.cs | 18 + .../AliPay/Domain/AlipayUserMpointPayModel.cs | 36 + .../Domain/AlipayUserMpointRefundModel.cs | 36 + .../Domain/AlipayUserNewbenefitCreateModel.cs | 80 + .../Domain/AlipayUserNewbenefitModifyModel.cs | 86 + .../Domain/AlipayUserNewsceneTagQueryModel.cs | 30 + .../AlipayUserPassGrouplistQueryModel.cs | 60 + .../AlipayUserPassInstancebatchAddModel.cs | 32 + .../AlipayUserPassTemplateCreateModel.cs | 54 + .../AlipayUserPassTemplateModifyModel.cs | 54 + .../AlipayUserPassTemplateQueryModel.cs | 18 + ...ipayUserPeerpayprodAgreementModifyModel.cs | 36 + ...lipayUserPeerpayprodAgreementQueryModel.cs | 24 + ...AlipayUserPeerpayprodAgreementSignModel.cs | 42 + PaymentSDK/AliPay/Domain/AlipayUserPicture.cs | 24 + .../AlipayUserPointAuthbaseDeductModel.cs | 48 + .../AlipayUserPointAuthbaseSendModel.cs | 42 + .../Domain/AlipayUserPointDeductModel.cs | 48 + .../Domain/AlipayUserPointRefundModel.cs | 36 + .../AliPay/Domain/AlipayUserPointSendModel.cs | 36 + .../Domain/AlipayUserPortraitQueryModel.cs | 20 + .../AliPay/Domain/AlipayUserPrincipalInfo.cs | 30 + .../AlipayUserSafeboxAgreementSignModel.cs | 18 + .../AlipayUserSafeboxConditionQueryModel.cs | 18 + .../AlipayUserSafeboxRecordSaveModel.cs | 48 + .../AlipayUserSceneCooperationConsultModel.cs | 42 + .../AlipayUserSigncardExistenceQueryModel.cs | 18 + .../Domain/AlipayUserSocialinfoQueryModel.cs | 20 + ...lipayUserStepcounterDataBatchqueryModel.cs | 42 + .../Domain/AlipayUserStepcounterQueryModel.cs | 36 + .../Domain/AlipayUserStepcounterSyncModel.cs | 90 + .../AlipayUserTwostageCommonUseModel.cs | 36 + .../AlipayUserTwostageIndirectUseModel.cs | 42 + .../AlipayUserUnicomCardInfoSyncModel.cs | 36 + .../Domain/AlipayUserUnicomDataQueryModel.cs | 18 + .../Domain/AlipayUserUnicomMobileSyncModel.cs | 42 + .../AlipayUserUnicomOrderInfoSyncModel.cs | 54 + .../AlipayUserUseridBymobileQueryModel.cs | 24 + .../AlipayUserVirtualcardPageSignModel.cs | 66 + .../AlipayUserVirtualcardSignEffectModel.cs | 60 + .../AliPay/Domain/AlipayYebLqdDataResult.cs | 30 + .../AliPay/Domain/AlipayZmScoreZrankResult.cs | 18 + PaymentSDK/AliPay/Domain/AlisisReport.cs | 38 + .../AliPay/Domain/AlisisReportColumn.cs | 24 + PaymentSDK/AliPay/Domain/AlisisReportRow.cs | 20 + PaymentSDK/AliPay/Domain/AlmReportData.cs | 48 + .../AmapMapMapserviceTeseBatchqueryModel.cs | 18 + PaymentSDK/AliPay/Domain/AmlAssetRecord.cs | 36 + PaymentSDK/AliPay/Domain/Amount.cs | 24 + PaymentSDK/AliPay/Domain/AmountTypeData.cs | 32 + PaymentSDK/AliPay/Domain/AmpeCategoryInfo.cs | 24 + .../AliPay/Domain/AmpeDeviceModelInfo.cs | 36 + .../AliPay/Domain/AmpeDeviceTypeInfo.cs | 24 + PaymentSDK/AliPay/Domain/AmpeDeviceVO.cs | 54 + PaymentSDK/AliPay/Domain/AmpeProductInfo.cs | 104 + PaymentSDK/AliPay/Domain/AnswerModel.cs | 30 + .../Domain/AntArchiveIdentityCertificate.cs | 30 + PaymentSDK/AliPay/Domain/AntInvoiceItem.cs | 84 + PaymentSDK/AliPay/Domain/AntInvoiceResult.cs | 218 + .../AliPay/Domain/AntMemberBenefitInfo.cs | 42 + ...ntExpandActivityQualificationQueryModel.cs | 36 + ...MerchantExpandActivitySignupCreateModel.cs | 24 + ...tMerchantExpandActivitySignupQueryModel.cs | 24 + ...hantExpandAssetdeliveryAssignQueryModel.cs | 18 + ...chantExpandAssetdeliveryAssignSyncModel.cs | 20 + ...antExpandAssetdeliveryCompleteSyncModel.cs | 20 + ...chantExpandAssetinfoCorrectionSyncModel.cs | 18 + ...erchantExpandAssetinfoDeliverySyncModel.cs | 20 + ...MerchantExpandAssetinfoProduceSyncModel.cs | 20 + .../AntMerchantExpandAssetinfoSyncModel.cs | 20 + ...chantExpandAssetproduceAssignQueryModel.cs | 18 + ...rchantExpandAssetproduceAssignSyncModel.cs | 20 + ...hantExpandAssetproduceCompleteSyncModel.cs | 20 + ...chantExpandAssetreverseAssignQueryModel.cs | 18 + ...rchantExpandAssetreverseAssignSyncModel.cs | 20 + ...hantExpandAssetreverseCompleteSyncModel.cs | 20 + ...ntMerchantExpandAutomatApplyModifyModel.cs | 72 + ...ntMerchantExpandAutomatApplyUploadModel.cs | 90 + .../AntMerchantExpandBenefitConfirmModel.cs | 36 + ...ntMerchantExpandBenefitRecordQueryModel.cs | 54 + .../AntMerchantExpandBenefitVerifyModel.cs | 42 + ...ExpandClassificationCreateormodifyModel.cs | 36 + ...chantExpandContractFacetofaceQueryModel.cs | 24 + ...rchantExpandContractFacetofaceSignModel.cs | 78 + ...erchantExpandDeliveryGoodsinfoSyncModel.cs | 42 + ...erchantExpandDeliveryLogisticsSyncModel.cs | 24 + ...tMerchantExpandDeliveryProcessSyncModel.cs | 18 + .../AntMerchantExpandEnterpriseApplyModel.cs | 54 + ...AntMerchantExpandExpressChangeSyncModel.cs | 18 + ...tExpandFrontcategorySecurityCreateModel.cs | 50 + ...tExpandFrontcategorySecurityDeleteModel.cs | 18 + ...tExpandFrontcategorySecurityModifyModel.cs | 38 + ...ntExpandFrontcategorySecurityQueryModel.cs | 30 + ...chantExpandIndirectActivityConfirmModel.cs | 18 + ...MerchantExpandIndirectActivityCopyModel.cs | 32 + ...rchantExpandIndirectActivityCreateModel.cs | 132 + ...hantExpandIndirectAttachmentUploadModel.cs | 32 + ...AntMerchantExpandIndirectBindQueryModel.cs | 24 + .../AntMerchantExpandIndirectCreateModel.cs | 128 + ...AntMerchantExpandIndirectIsvModifyModel.cs | 72 + .../AntMerchantExpandIndirectModifyModel.cs | 134 + ...MerchantExpandIndirectOnlineCreateModel.cs | 127 + ...MerchantExpandIndirectOnlineModifyModel.cs | 133 + ...tMerchantExpandIndirectOnlineQueryModel.cs | 24 + .../AntMerchantExpandIndirectQueryModel.cs | 30 + ...tMerchantExpandIndirectSourceQueryModel.cs | 18 + ...tMerchantExpandIndirectTiansuoBindModel.cs | 20 + ...MerchantExpandIndirectTiansuoQueryModel.cs | 18 + .../AntMerchantExpandIndirectTransferModel.cs | 30 + ...ntMerchantExpandIndirectZftConsultModel.cs | 199 + ...AntMerchantExpandIndirectZftCreateModel.cs | 199 + ...AntMerchantExpandIndirectZftModifyModel.cs | 181 + ...erchantExpandIndirectZftorderQueryModel.cs | 24 + .../AntMerchantExpandIsvDeviceBindModel.cs | 54 + .../AntMerchantExpandIsvDeviceCreateModel.cs | 80 + .../AntMerchantExpandIsvShopCreateModel.cs | 152 + .../AntMerchantExpandItemCreateModel.cs | 81 + .../AntMerchantExpandItemDeleteModel.cs | 24 + .../AntMerchantExpandItemModifyModel.cs | 87 + ...ntMerchantExpandItemOpenBatchqueryModel.cs | 20 + .../AntMerchantExpandItemOpenCreateModel.cs | 83 + .../AntMerchantExpandItemOpenDeleteModel.cs | 18 + .../AntMerchantExpandItemOpenModifyModel.cs | 77 + .../AntMerchantExpandItemOpenQueryModel.cs | 36 + .../Domain/AntMerchantExpandItemQueryModel.cs | 42 + ...rchantExpandItemSecurityBatchqueryModel.cs | 20 + ...ntMerchantExpandItemSecurityCreateModel.cs | 77 + ...ntMerchantExpandItemSecurityDeleteModel.cs | 18 + ...ntMerchantExpandItemSecurityModifyModel.cs | 71 + ...AntMerchantExpandItemSecurityQueryModel.cs | 42 + .../AntMerchantExpandItemStatusModifyModel.cs | 24 + ...MerchantExpandLogisticsorderCreateModel.cs | 182 + .../AntMerchantExpandMapplyorderQueryModel.cs | 18 + ...hantExpandMerchantIndividualCreateModel.cs | 30 + ...rchantExpandMerchantStorelistQueryModel.cs | 36 + ...AntMerchantExpandMerchantTypeQueryModel.cs | 18 + .../AntMerchantExpandOrderQueryModel.cs | 18 + .../AntMerchantExpandPersonalApplyModel.cs | 54 + .../AntMerchantExpandSavingPassQueryModel.cs | 36 + .../AntMerchantExpandScodeApplyModel.cs | 20 + .../AntMerchantExpandScodeEledeSignModel.cs | 20 + .../AntMerchantExpandScodeEledeUnsignModel.cs | 20 + .../AntMerchantExpandScodeModifyModel.cs | 20 + .../AntMerchantExpandShopBatchqueryModel.cs | 36 + .../Domain/AntMerchantExpandShopCloseModel.cs | 30 + .../AntMerchantExpandShopConsultModel.cs | 168 + .../AntMerchantExpandShopCreateModel.cs | 169 + .../AntMerchantExpandShopFengniaoSyncModel.cs | 30 + .../AntMerchantExpandShopModifyModel.cs | 168 + .../Domain/AntMerchantExpandShopQueryModel.cs | 30 + ...rchantExpandStoreShopserviceCreateModel.cs | 81 + ...rchantExpandStoreShopserviceDeleteModel.cs | 42 + ...rchantExpandStoreShopserviceModifyModel.cs | 87 + ...tMerchantExpandTradeorderEventSendModel.cs | 32 + .../AntMerchantExpandTradeorderQueryModel.cs | 24 + .../AntMerchantExpandTradeorderRefundModel.cs | 24 + .../AntMerchantExpandTradeorderSyncModel.cs | 106 + ...ntMerchantExpandWarehouseOrderSyncModel.cs | 30 + .../AntMerchantOrderStoreBatchqueryModel.cs | 60 + .../AntMerchantOrderStoreCreateModel.cs | 87 + .../Domain/AntMerchantOrderStoreQueryModel.cs | 36 + .../Domain/AntMerchantOrderStoreSyncModel.cs | 48 + .../AntOcrDriverlicenseIdentifyModel.cs | 30 + .../Domain/AntOcrGeneralIdentifyModel.cs | 24 + .../Domain/AntOcrIdcardIdentifyModel.cs | 30 + .../AntOcrVehiclelicenseIdentifyModel.cs | 30 + .../Domain/AntOcrVehicleplateIdentifyModel.cs | 24 + .../AntProdpaasArrangementCommonQueryModel.cs | 36 + ...ProdpaasArrangementRebateRateQueryModel.cs | 30 + .../AntProdpaasProductCommonQueryModel.cs | 30 + .../AliPay/Domain/AntdataassetsOdpsColumn.cs | 24 + ...AntfortuneContentCommunityDataSendModel.cs | 30 + ...eContentCommunityHoteventListQueryModel.cs | 30 + ...tfortuneContentCommunityLabelQueryModel.cs | 18 + ...uneContentCommunityOpenSecuaiQueryModel.cs | 30 + ...ntfortuneEquityInstpointPrizeQueryModel.cs | 24 + ...uneEquityInstpointPrizeexchangeUseModel.cs | 36 + .../AntfortuneEquityInstpointQueryModel.cs | 18 + .../AntfortuneEquityInstpointSendModel.cs | 42 + ...ntfortuneEquityInstpointTransQueryModel.cs | 50 + .../AntfortuneEquityMessageSingleSendModel.cs | 30 + .../AntfortuneEquityPortfolioQueryModel.cs | 24 + .../AntfortuneEquityServiceCardSyncModel.cs | 32 + ...fortuneEquityShopCustrelationQueryModel.cs | 18 + ...AntfortuneMarketingCrowdWshopMatchModel.cs | 24 + ...AntfortuneQuotationPlateIndexQueryModel.cs | 24 + ...tfortuneQuotationResearchdataQueryModel.cs | 63 + .../AntfortuneYebInfoAdvertisingQueryModel.cs | 18 + .../AliPay/Domain/AntlawSignOperator.cs | 42 + .../AliPay/Domain/AnttechAiCvDsbGetModel.cs | 18 + .../Domain/AnttechAiCvDsbIdentifyModel.cs | 32 + ...techAiCvOcrBusinesslicenseIdentifyModel.cs | 36 + .../AnttechAiCvOcrVatinvoiceIdentifyModel.cs | 42 + .../AnttechAiCvTfjsModelBatchqueryModel.cs | 18 + .../Domain/AnttechAiCvTfjsModelQueryModel.cs | 24 + ...techAiCvTfjsModelversionBatchqueryModel.cs | 18 + .../AnttechAiCvTfjsModelversionQueryModel.cs | 18 + ...hainDefinAssetmanagePenetrateQueryModel.cs | 30 + ...ainDefinAssetmanagePenetrateSubmitModel.cs | 30 + ...ttechBlockchainDefinBaseFileSubmitModel.cs | 24 + ...ttechBlockchainDefinFinanceArQueryModel.cs | 24 + ...techBlockchainDefinFinanceArSubmitModel.cs | 24 + ...ockchainDefinFinanceInterbankQueryModel.cs | 24 + ...ckchainDefinFinanceInterbankSubmitModel.cs | 24 + .../AnttechBlockchainDefinTradeQueryModel.cs | 24 + ...kchainFinanceAntdaoMypointsPublishModel.cs | 36 + ...chBlockchainFinanceAssetIssueApplyModel.cs | 24 + ...chBlockchainFinanceAssetIssueQueryModel.cs | 24 + ...hBlockchainFinanceAssetIssueSubmitModel.cs | 42 + ...lockchainFinanceAssetRegisterApplyModel.cs | 30 + ...ockchainFinanceAssetRegisterSubmitModel.cs | 36 + ...echBlockchainFinanceCustomerCreateModel.cs | 84 + ...MylogisticfinsandboxMessagePublishModel.cs | 24 + ...nanceMylogisticfinsysContractApplyModel.cs | 18 + ...anceMylogisticfinsysMessagePublishModel.cs | 24 + .../AnttechBlockchainFinanceRiskApplyModel.cs | 36 + ...echBlockchainFinanceRiskWarningAddModel.cs | 24 + ...ttechBlockchainTwcPreauthinfoQueryModel.cs | 36 + ...AnttechBlockchainTwcTradeinfoQueryModel.cs | 30 + .../AnttechBlockchainTwcUserinfoMatchModel.cs | 30 + .../AnttechDataCollectBlockchainSyncModel.cs | 48 + ...hDataServiceBlockchainAccountQueryModel.cs | 66 + ...DataServiceBlockchainContractQueryModel.cs | 60 + ...aServiceBlockchainTransactionQueryModel.cs | 72 + PaymentSDK/AliPay/Domain/AoiInfoDTO.cs | 36 + .../AliPay/Domain/ApBillAmtOpenApiResponse.cs | 24 + .../Domain/ApInvoiceBillAmtOpenApiResponse.cs | 26 + .../Domain/ApInvoiceBillLinkOrderRequest.cs | 30 + .../Domain/ApInvoiceLineOrderRequest.cs | 66 + .../AliPay/Domain/ApInvoiceOrderRequest.cs | 188 + .../ApMonthlyBillCustOpenApiResponse.cs | 204 + .../ApUserInvoiceInfoOpenApiResponse.cs | 182 + .../Domain/ApUserMailInfoOpenApiResponse.cs | 90 + PaymentSDK/AliPay/Domain/ApiContractDetail.cs | 93 + PaymentSDK/AliPay/Domain/ApiContractGoal.cs | 66 + PaymentSDK/AliPay/Domain/ApiContractItem.cs | 80 + .../AliPay/Domain/ApiContractParticipant.cs | 30 + .../AliPay/Domain/AppBasicInfoResponse.cs | 30 + PaymentSDK/AliPay/Domain/AppContentItem.cs | 113 + PaymentSDK/AliPay/Domain/AppMemberInfo.cs | 60 + .../Domain/AppTokenExchangeSubElement.cs | 48 + PaymentSDK/AliPay/Domain/AppVersionInfo.cs | 42 + .../Domain/AppVisitTrendDataResponse.cs | 30 + PaymentSDK/AliPay/Domain/Appinfos.cs | 30 + .../AliPay/Domain/AppletTaskDisplayVO.cs | 66 + PaymentSDK/AliPay/Domain/AppletTaskPrizeVO.cs | 42 + PaymentSDK/AliPay/Domain/AppletTaskVO.cs | 80 + PaymentSDK/AliPay/Domain/ApplyBusinessCity.cs | 24 + PaymentSDK/AliPay/Domain/ApplyCodeRequest.cs | 36 + PaymentSDK/AliPay/Domain/ApplyCodeResponse.cs | 20 + PaymentSDK/AliPay/Domain/ApplyCodeResult.cs | 42 + PaymentSDK/AliPay/Domain/ApplyGoodsInfo.cs | 60 + .../Domain/ApplySubAccountAndBindOrder.cs | 42 + .../Domain/ApplySubAccountAndBindResultDTO.cs | 24 + .../AliPay/Domain/ApproveCreditResult.cs | 76 + PaymentSDK/AliPay/Domain/ApprovedInfo.cs | 90 + .../ArInvoiceBillLinkOpenApiResponse.cs | 96 + .../Domain/ArInvoiceLineOpenApiResponse.cs | 78 + .../AliPay/Domain/ArInvoiceOpenApiResponse.cs | 260 + .../Domain/ArInvoiceReceiptOpenApiResponse.cs | 138 + .../Domain/ArInvoiceReceiptQueryOpenApiDTO.cs | 114 + PaymentSDK/AliPay/Domain/ArMonthlyBillDTO.cs | 342 ++ .../ArMonthlyStatementBillOpenApiResponse.cs | 410 ++ .../AliPay/Domain/ArchiveFaceExtInfo.cs | 18 + PaymentSDK/AliPay/Domain/ArchiveFaceInfo.cs | 30 + PaymentSDK/AliPay/Domain/AreaCode.cs | 24 + PaymentSDK/AliPay/Domain/AreaDetail.cs | 36 + PaymentSDK/AliPay/Domain/AreaInfo.cs | 24 + .../AliPay/Domain/ArrangementBaseSelector.cs | 52 + PaymentSDK/AliPay/Domain/ArrangementBaseVO.cs | 180 + .../ArrangementConditionGroupSelector.cs | 18 + .../Domain/ArrangementInvolvedPartyQuerier.cs | 30 + .../AliPay/Domain/ArrangementNoQuerier.cs | 20 + .../Domain/ArrangementOpenQueryResultVO.cs | 48 + PaymentSDK/AliPay/Domain/ArrangementVORes.cs | 36 + PaymentSDK/AliPay/Domain/Article.cs | 42 + PaymentSDK/AliPay/Domain/ArticleParagraph.cs | 26 + PaymentSDK/AliPay/Domain/ArticlePicture.cs | 36 + .../Domain/ArticleSummaryAnalysisData.cs | 60 + .../AliPay/Domain/AssetDeliveryAddress.cs | 66 + .../AliPay/Domain/AssetDeliveryDetail.cs | 44 + PaymentSDK/AliPay/Domain/AssetDeliveryItem.cs | 192 + .../AliPay/Domain/AssetDeliveryProcessInfo.cs | 42 + .../AliPay/Domain/AssetInfoCorrectionItem.cs | 66 + PaymentSDK/AliPay/Domain/AssetInfoItem.cs | 54 + .../AliPay/Domain/AssetLogisticsRecord.cs | 48 + PaymentSDK/AliPay/Domain/AssetParams.cs | 30 + PaymentSDK/AliPay/Domain/AssetProduceItem.cs | 198 + PaymentSDK/AliPay/Domain/AssetResult.cs | 56 + .../AliPay/Domain/AssetReverseDetail.cs | 42 + .../AliPay/Domain/AssetReverseGoodsItem.cs | 48 + PaymentSDK/AliPay/Domain/AssetReverseItem.cs | 138 + .../AliPay/Domain/AssetSubFeedbackInfo.cs | 30 + PaymentSDK/AliPay/Domain/AssuranceInfo.cs | 24 + PaymentSDK/AliPay/Domain/Attachment.cs | 24 + PaymentSDK/AliPay/Domain/AttachmentDetail.cs | 30 + PaymentSDK/AliPay/Domain/AttachmentExplain.cs | 38 + .../AliPay/Domain/AttachmentExplainBean.cs | 32 + PaymentSDK/AliPay/Domain/AttachmentInfo.cs | 30 + PaymentSDK/AliPay/Domain/Attribute.cs | 26 + PaymentSDK/AliPay/Domain/AudioEvent.cs | 30 + PaymentSDK/AliPay/Domain/AuditLicenseInfo.cs | 44 + PaymentSDK/AliPay/Domain/AuthInfo.cs | 24 + .../AliPay/Domain/AuthenticationInfo.cs | 36 + .../AliPay/Domain/AuthenticationResult.cs | 24 + .../AliPay/Domain/AuthenticationScene.cs | 42 + .../Domain/AutoMktTouchExtendInfoEntry.cs | 24 + .../AliPay/Domain/AvailablePeriodInfo.cs | 30 + PaymentSDK/AliPay/Domain/AvailableTimeInfo.cs | 38 + .../AliPay/Domain/BFActivityFundInfo.cs | 84 + .../AliPay/Domain/BFActivityOpenApiInfo.cs | 86 + .../AliPay/Domain/BFActivityOpenApiResult.cs | 20 + .../AliPay/Domain/BPOpenApiAddSignContent.cs | 50 + PaymentSDK/AliPay/Domain/BPOpenApiInstance.cs | 128 + PaymentSDK/AliPay/Domain/BPOpenApiPUID.cs | 36 + PaymentSDK/AliPay/Domain/BPOpenApiTask.cs | 90 + PaymentSDK/AliPay/Domain/BailDetailResult.cs | 60 + .../AliPay/Domain/BakingItemOperationData.cs | 102 + PaymentSDK/AliPay/Domain/BankCardInfo.cs | 30 + PaymentSDK/AliPay/Domain/BankRepayData.cs | 24 + .../Domain/BankSubAccountBaseInfoDTO.cs | 114 + PaymentSDK/AliPay/Domain/BankcardExtInfo.cs | 48 + .../Domain/BarcodeEventResponseHeader.cs | 30 + PaymentSDK/AliPay/Domain/BarcodeInfoVO.cs | 24 + PaymentSDK/AliPay/Domain/BaseInfo.cs | 82 + PaymentSDK/AliPay/Domain/BaseInfoConfig.cs | 36 + PaymentSDK/AliPay/Domain/BaseLoanApplyVO.cs | 42 + .../Domain/BaseOpenApiResponseHeaderDTO.cs | 18 + PaymentSDK/AliPay/Domain/BatchDetailInfo.cs | 78 + .../AliPay/Domain/BatchFundItemAOPModel.cs | 62 + PaymentSDK/AliPay/Domain/BatchInfo.cs | 26 + .../AliPay/Domain/BatchRefundDetailResult.cs | 98 + .../AliPay/Domain/BatchRoyaltyDetail.cs | 96 + PaymentSDK/AliPay/Domain/BatchSettleDetail.cs | 78 + .../AliPay/Domain/BcBusinessUserInfo.cs | 30 + PaymentSDK/AliPay/Domain/BccEventDetail.cs | 66 + PaymentSDK/AliPay/Domain/BccSubjectDetail.cs | 42 + PaymentSDK/AliPay/Domain/BeaconDeviceInfo.cs | 48 + PaymentSDK/AliPay/Domain/BeaconTemplate.cs | 24 + .../AliPay/Domain/BeikeAccountResponse.cs | 30 + PaymentSDK/AliPay/Domain/BenefitAmountInfo.cs | 24 + PaymentSDK/AliPay/Domain/BenefitDateInfo.cs | 30 + PaymentSDK/AliPay/Domain/BenefitDetailInfo.cs | 72 + .../AliPay/Domain/BenefitDisplayInfo.cs | 36 + .../AliPay/Domain/BenefitGradeConfig.cs | 48 + PaymentSDK/AliPay/Domain/BenefitGradePoint.cs | 38 + PaymentSDK/AliPay/Domain/BenefitInfo.cs | 60 + PaymentSDK/AliPay/Domain/BenefitInfoDetail.cs | 36 + PaymentSDK/AliPay/Domain/BenefitQueryInfo.cs | 60 + PaymentSDK/AliPay/Domain/BenefitSource.cs | 24 + PaymentSDK/AliPay/Domain/BenifitGoodsInfo.cs | 36 + PaymentSDK/AliPay/Domain/BigCardData.cs | 102 + PaymentSDK/AliPay/Domain/BillAmtVo.cs | 48 + PaymentSDK/AliPay/Domain/BillDetailVo.cs | 66 + PaymentSDK/AliPay/Domain/BillDingBizOrder.cs | 126 + .../AliPay/Domain/BillDingBizOrderSum.cs | 30 + .../AliPay/Domain/BillInferenceResult.cs | 73 + PaymentSDK/AliPay/Domain/BillPaymentDetail.cs | 18 + PaymentSDK/AliPay/Domain/BillRepayBudgetVO.cs | 42 + PaymentSDK/AliPay/Domain/BillRepayRequest.cs | 18 + PaymentSDK/AliPay/Domain/BillSendExtInfo.cs | 24 + PaymentSDK/AliPay/Domain/BillSyncExtInfo.cs | 18 + PaymentSDK/AliPay/Domain/BindedMiniAppInfo.cs | 54 + PaymentSDK/AliPay/Domain/BizAbilityData.cs | 24 + PaymentSDK/AliPay/Domain/BizBudgetDTO.cs | 32 + PaymentSDK/AliPay/Domain/BizData.cs | 24 + PaymentSDK/AliPay/Domain/BizExtParams.cs | 20 + PaymentSDK/AliPay/Domain/BizListDataInfo.cs | 24 + .../AliPay/Domain/BizOrderQueryResponse.cs | 96 + PaymentSDK/AliPay/Domain/BizParamKeyValue.cs | 24 + PaymentSDK/AliPay/Domain/BizResData.cs | 36 + PaymentSDK/AliPay/Domain/BizResult.cs | 48 + PaymentSDK/AliPay/Domain/BizUnitInfo.cs | 30 + PaymentSDK/AliPay/Domain/BkPosGoodsInfo.cs | 24 + .../AliPay/Domain/BlockChainAccountApiDO.cs | 78 + .../AliPay/Domain/BlockChainContractApiDO.cs | 78 + .../Domain/BlockChainTransactionApiDO.cs | 78 + PaymentSDK/AliPay/Domain/BookInfoModify.cs | 24 + PaymentSDK/AliPay/Domain/BookTime.cs | 26 + .../AliPay/Domain/BoothContentInfoModel.cs | 26 + PaymentSDK/AliPay/Domain/BrandLevelInfo.cs | 30 + PaymentSDK/AliPay/Domain/BudgetInfo.cs | 36 + PaymentSDK/AliPay/Domain/BudgetLibResult.cs | 132 + PaymentSDK/AliPay/Domain/BudgetVO.cs | 54 + PaymentSDK/AliPay/Domain/Building.cs | 24 + .../AliPay/Domain/BusinessBankAccountInfo.cs | 36 + .../AliPay/Domain/BusinessLicenceInfo.cs | 84 + .../Domain/BusinessLicenseCertFileds.cs | 24 + PaymentSDK/AliPay/Domain/BusinessParams.cs | 30 + PaymentSDK/AliPay/Domain/BusinessPartner.cs | 48 + .../AliPay/Domain/BusinessPermission.cs | 30 + PaymentSDK/AliPay/Domain/BusinessPoint.cs | 42 + .../AliPay/Domain/BusinessPropertyDTO.cs | 98 + PaymentSDK/AliPay/Domain/Businessarea.cs | 30 + PaymentSDK/AliPay/Domain/ButtonObject.cs | 44 + PaymentSDK/AliPay/Domain/BuyerNotesInfo.cs | 26 + PaymentSDK/AliPay/Domain/BuyerPayDetail.cs | 24 + PaymentSDK/AliPay/Domain/CCInfo.cs | 102 + .../AliPay/Domain/CPAliveBillEntrySet.cs | 24 + PaymentSDK/AliPay/Domain/CPBillModifySet.cs | 54 + PaymentSDK/AliPay/Domain/CPBillResultSet.cs | 66 + PaymentSDK/AliPay/Domain/CPBillSet.cs | 72 + PaymentSDK/AliPay/Domain/CPCommServices.cs | 108 + PaymentSDK/AliPay/Domain/CPCommunitySet.cs | 36 + .../AliPay/Domain/CalendarScheduleInfo.cs | 32 + .../Domain/CallCenterTradeApplyParams.cs | 60 + PaymentSDK/AliPay/Domain/CampBaseDto.cs | 74 + PaymentSDK/AliPay/Domain/CampDetail.cs | 112 + PaymentSDK/AliPay/Domain/CampDetailInfo.cs | 80 + PaymentSDK/AliPay/Domain/CampaignExtInfo.cs | 24 + PaymentSDK/AliPay/Domain/CaptureCreateDTO.cs | 24 + .../AliPay/Domain/CaptureCreateOrder.cs | 98 + PaymentSDK/AliPay/Domain/Car.cs | 104 + PaymentSDK/AliPay/Domain/CarModel.cs | 90 + PaymentSDK/AliPay/Domain/CardBinVO.cs | 66 + PaymentSDK/AliPay/Domain/CardCreditInfo.cs | 24 + PaymentSDK/AliPay/Domain/CardDomainVO.cs | 24 + .../AliPay/Domain/CardExtensionInfoData.cs | 24 + PaymentSDK/AliPay/Domain/CardFrontTextDTO.cs | 24 + PaymentSDK/AliPay/Domain/CardFundInfo.cs | 24 + PaymentSDK/AliPay/Domain/CardInfo.cs | 24 + PaymentSDK/AliPay/Domain/CardInstanceDO.cs | 36 + PaymentSDK/AliPay/Domain/CardPromoDO.cs | 54 + PaymentSDK/AliPay/Domain/CardTypeVO.cs | 24 + PaymentSDK/AliPay/Domain/CardUserInfo.cs | 24 + .../AliPay/Domain/CascadeMissionConfModel.cs | 26 + PaymentSDK/AliPay/Domain/CaseInfoCode.cs | 24 + PaymentSDK/AliPay/Domain/CashCampaignInfo.cs | 36 + PaymentSDK/AliPay/Domain/CateInfoVO.cs | 24 + PaymentSDK/AliPay/Domain/Category.cs | 26 + PaymentSDK/AliPay/Domain/CategoryLevelInfo.cs | 30 + PaymentSDK/AliPay/Domain/CategoryRiskInfo.cs | 54 + PaymentSDK/AliPay/Domain/CategoryVO.cs | 54 + PaymentSDK/AliPay/Domain/CaterItemListInfo.cs | 66 + PaymentSDK/AliPay/Domain/CdpDisplayContent.cs | 54 + PaymentSDK/AliPay/Domain/CertAuditResult.cs | 54 + .../AliPay/Domain/CertAvailableNumVO.cs | 24 + PaymentSDK/AliPay/Domain/CertFields.cs | 84 + PaymentSDK/AliPay/Domain/CertInfo.cs | 24 + PaymentSDK/AliPay/Domain/CertInfoRequest.cs | 30 + PaymentSDK/AliPay/Domain/CertInfoResponse.cs | 38 + PaymentSDK/AliPay/Domain/Certificate.cs | 24 + PaymentSDK/AliPay/Domain/ChargeInstMode.cs | 36 + PaymentSDK/AliPay/Domain/ChargeItems.cs | 42 + PaymentSDK/AliPay/Domain/CheckResultList.cs | 48 + PaymentSDK/AliPay/Domain/ChildCertInfo.cs | 24 + .../AliPay/Domain/CircleRecommendItemDTO.cs | 102 + PaymentSDK/AliPay/Domain/CityFunction.cs | 32 + PaymentSDK/AliPay/Domain/CityShopModel.cs | 72 + PaymentSDK/AliPay/Domain/ClaimProgress.cs | 24 + PaymentSDK/AliPay/Domain/ClaimStrategy.cs | 72 + PaymentSDK/AliPay/Domain/ClassRateInfo.cs | 36 + PaymentSDK/AliPay/Domain/ClauseTerm.cs | 26 + .../AliPay/Domain/ClearingCommonResult.cs | 30 + PaymentSDK/AliPay/Domain/ClientInfo.cs | 36 + PaymentSDK/AliPay/Domain/CloudBusOdItem.cs | 42 + PaymentSDK/AliPay/Domain/CloudUserInfo.cs | 24 + .../AliPay/Domain/CloudbusAvaliableItem.cs | 48 + .../AliPay/Domain/CloudbusCommonResult.cs | 30 + PaymentSDK/AliPay/Domain/CloudbusLocation.cs | 24 + .../AliPay/Domain/CloudbusPredictRItem.cs | 40 + .../AliPay/Domain/CloudbusPredictResult.cs | 58 + .../AliPay/Domain/CloudbusRetryPredictItem.cs | 24 + PaymentSDK/AliPay/Domain/CloudbusRoute.cs | 64 + .../AliPay/Domain/CloudbusRouteRItem.cs | 42 + PaymentSDK/AliPay/Domain/CloudbusStop.cs | 54 + .../Domain/CloudbusSubmitPredictItem.cs | 24 + .../AliPay/Domain/CloudbusTimeOdItem.cs | 42 + .../AliPay/Domain/CloudbusTotalOdItem.cs | 42 + .../AliPay/Domain/CloudbusTransitItem.cs | 30 + .../Domain/CloudbusTransitResultItem.cs | 32 + PaymentSDK/AliPay/Domain/CloudbusUserInfo.cs | 60 + PaymentSDK/AliPay/Domain/CmItemInfo.cs | 108 + PaymentSDK/AliPay/Domain/CmItemSkuInfo.cs | 81 + PaymentSDK/AliPay/Domain/CodeCouponInfo.cs | 30 + PaymentSDK/AliPay/Domain/CodeInfo.cs | 24 + PaymentSDK/AliPay/Domain/CodeNOList.cs | 42 + PaymentSDK/AliPay/Domain/CodeResInfo.cs | 24 + PaymentSDK/AliPay/Domain/CodeResult.cs | 30 + .../AliPay/Domain/ColumnMoreInfoModel.cs | 38 + PaymentSDK/AliPay/Domain/Command.cs | 36 + .../AliPay/Domain/CommentReplyOpenModel.cs | 30 + .../Domain/CommerceAppUploadRequestContent.cs | 36 + .../Domain/CommerceAppUploadResponseData.cs | 24 + PaymentSDK/AliPay/Domain/CommodityBaseInfo.cs | 36 + .../AliPay/Domain/CommodityExtInfoConfirm.cs | 36 + .../AliPay/Domain/CommodityPublicExtInfos.cs | 90 + PaymentSDK/AliPay/Domain/CommonDescInfo.cs | 24 + .../AliPay/Domain/CommunityPartnerRelaData.cs | 36 + .../CommunityPartnerRelationDataSyncDTO.cs | 36 + PaymentSDK/AliPay/Domain/CompanyInfo.cs | 68 + PaymentSDK/AliPay/Domain/CompanyRole.cs | 34 + PaymentSDK/AliPay/Domain/ComplexLabelRule.cs | 30 + PaymentSDK/AliPay/Domain/ComplextMockModel.cs | 30 + PaymentSDK/AliPay/Domain/Condition.cs | 30 + .../AliPay/Domain/ConditionItemPattern.cs | 42 + PaymentSDK/AliPay/Domain/ConfigInfo.cs | 80 + PaymentSDK/AliPay/Domain/ConfigInfoBean.cs | 86 + .../AliPay/Domain/ConfirmReceivableDTO.cs | 30 + PaymentSDK/AliPay/Domain/ConstraintInfo.cs | 75 + PaymentSDK/AliPay/Domain/ConsultExtParams.cs | 18 + PaymentSDK/AliPay/Domain/ConsumeInfo.cs | 30 + PaymentSDK/AliPay/Domain/ConsumeOutputInfo.cs | 48 + .../AliPay/Domain/ConsumeRecordAOPModel.cs | 326 ++ PaymentSDK/AliPay/Domain/ContactFollower.cs | 36 + PaymentSDK/AliPay/Domain/ContactInfo.cs | 56 + PaymentSDK/AliPay/Domain/ContactInfoKt.cs | 56 + PaymentSDK/AliPay/Domain/ContactModel.cs | 30 + PaymentSDK/AliPay/Domain/ContactPersonInfo.cs | 36 + .../AliPay/Domain/ContentExtInfoModel.cs | 20 + .../Domain/ContentExtensionForOpenapi.cs | 24 + PaymentSDK/AliPay/Domain/ContentInfoModel.cs | 72 + .../Domain/ContentObjectRelationForOpenapi.cs | 24 + PaymentSDK/AliPay/Domain/ContentPicture.cs | 30 + PaymentSDK/AliPay/Domain/ContentPoiData.cs | 30 + .../AliPay/Domain/ContentPrizeInfoModel.cs | 30 + PaymentSDK/AliPay/Domain/Context.cs | 54 + PaymentSDK/AliPay/Domain/Contract.cs | 30 + .../AliPay/Domain/ContractApprovalInfoVO.cs | 50 + .../Domain/ContractBatchInfoOpenApiResult.cs | 26 + .../AliPay/Domain/ContractConsultResultVO.cs | 24 + PaymentSDK/AliPay/Domain/ContractFileInfo.cs | 24 + PaymentSDK/AliPay/Domain/ContractFileVO.cs | 24 + PaymentSDK/AliPay/Domain/ContractInfo.cs | 58 + PaymentSDK/AliPay/Domain/ContractInfoVO.cs | 50 + .../ContractManagerAttachmentsSyncrequest.cs | 24 + .../ContractManagerParticipantsSyncRequest.cs | 56 + .../ContractManagerProcessSyncRequest.cs | 101 + .../Domain/ContractManagerSignDocsRequest.cs | 30 + PaymentSDK/AliPay/Domain/ContractStatusTag.cs | 30 + PaymentSDK/AliPay/Domain/ContributeDetail.cs | 24 + PaymentSDK/AliPay/Domain/ControlInfo.cs | 18 + .../AliPay/Domain/ConversionDataDetail.cs | 24 + PaymentSDK/AliPay/Domain/CorpEntity.cs | 30 + .../AliPay/Domain/CountControlConfig.cs | 54 + PaymentSDK/AliPay/Domain/CountInfo.cs | 30 + PaymentSDK/AliPay/Domain/Coupon.cs | 102 + .../AliPay/Domain/CplifeNoticeDetail.cs | 56 + PaymentSDK/AliPay/Domain/CplifeNoticeImg.cs | 24 + .../AliPay/Domain/CplifeResidentInfo.cs | 48 + PaymentSDK/AliPay/Domain/CplifeRoomDetail.cs | 54 + PaymentSDK/AliPay/Domain/CplifeRoomInfo.cs | 48 + .../AliPay/Domain/CplifeRoomInfoResp.cs | 24 + .../AliPay/Domain/CraftsmanAssessment.cs | 32 + .../AliPay/Domain/CraftsmanOpenModel.cs | 124 + .../Domain/CraftsmanShopRelationOpenModel.cs | 24 + .../AliPay/Domain/CraftsmanSubAssessment.cs | 24 + .../Domain/CraftsmanWorkCreateOpenModel.cs | 42 + .../AliPay/Domain/CraftsmanWorkOpenModel.cs | 54 + .../Domain/CraftsmanWorkOutIdOpenModel.cs | 24 + PaymentSDK/AliPay/Domain/CreationPlanData.cs | 74 + PaymentSDK/AliPay/Domain/CreativeDetail.cs | 175 + .../AliPay/Domain/CredentialsFraudData.cs | 30 + .../Domain/CredentialsResponseHeader.cs | 30 + .../Domain/CreditFinancePayAccountInfo.cs | 30 + .../AliPay/Domain/CreditFreezeSubOrder.cs | 48 + .../AliPay/Domain/CreditPayAssetBaseVO.cs | 78 + .../AliPay/Domain/CreditPayBillAssetVO.cs | 87 + .../AliPay/Domain/CreditPayChargePricingVO.cs | 42 + PaymentSDK/AliPay/Domain/CreditPayClauseVO.cs | 30 + .../Domain/CreditPayDayRangePricingVO.cs | 36 + .../AliPay/Domain/CreditPayDiscountVO.cs | 42 + PaymentSDK/AliPay/Domain/CreditPayGuideVO.cs | 24 + .../Domain/CreditPayInstallmentAssetVO.cs | 26 + .../Domain/CreditPayInstallmentDetailVO.cs | 87 + .../AliPay/Domain/CreditPayIntPricingVO.cs | 56 + PaymentSDK/AliPay/Domain/CreditPayMoneyVO.cs | 24 + .../AliPay/Domain/CreditPayOrderInfoVO.cs | 24 + PaymentSDK/AliPay/Domain/CreditPayRefuseVO.cs | 24 + PaymentSDK/AliPay/Domain/CreditPayRepayVO.cs | 36 + PaymentSDK/AliPay/Domain/CreditPayTermVO.cs | 36 + PaymentSDK/AliPay/Domain/CreditPayUserVO.cs | 30 + PaymentSDK/AliPay/Domain/CreditResult.cs | 78 + .../AliPay/Domain/CrowdConstraintInfo.cs | 30 + PaymentSDK/AliPay/Domain/CrowdRuleInfo.cs | 30 + PaymentSDK/AliPay/Domain/CrowdSummary.cs | 36 + PaymentSDK/AliPay/Domain/CustScpBillAmtVO.cs | 24 + .../Domain/CustScpInstallmentBudgetVO.cs | 54 + PaymentSDK/AliPay/Domain/CustomMetric.cs | 38 + .../AliPay/Domain/CustomReportCondition.cs | 57 + PaymentSDK/AliPay/Domain/CustomerEntity.cs | 44 + PaymentSDK/AliPay/Domain/CustomerTag.cs | 36 + .../AliPay/Domain/CustomsDeclareBuyerInfo.cs | 24 + .../AliPay/Domain/CustomsDeclareRecordInfo.cs | 102 + PaymentSDK/AliPay/Domain/DashBoardMeta.cs | 36 + PaymentSDK/AliPay/Domain/DashboardParam.cs | 30 + PaymentSDK/AliPay/Domain/Data.cs | 20 + PaymentSDK/AliPay/Domain/DataDetail.cs | 50 + PaymentSDK/AliPay/Domain/DataDim.cs | 30 + PaymentSDK/AliPay/Domain/DataEntry.cs | 36 + PaymentSDK/AliPay/Domain/DataEnumValue.cs | 32 + .../AliPay/Domain/DataSecCheckContent.cs | 38 + .../AliPay/Domain/DataSecCheckResult.cs | 30 + .../AliPay/Domain/DataSendBusinessResult.cs | 24 + PaymentSDK/AliPay/Domain/DataSyncPayload.cs | 30 + PaymentSDK/AliPay/Domain/DataTag.cs | 30 + PaymentSDK/AliPay/Domain/Datas.cs | 27 + PaymentSDK/AliPay/Domain/DateAreaModel.cs | 24 + PaymentSDK/AliPay/Domain/DefaultInCartInfo.cs | 30 + PaymentSDK/AliPay/Domain/DefaultSettleRule.cs | 24 + PaymentSDK/AliPay/Domain/DelayInfo.cs | 24 + PaymentSDK/AliPay/Domain/DeliverAddress.cs | 72 + PaymentSDK/AliPay/Domain/DeliverInfo.cs | 36 + PaymentSDK/AliPay/Domain/DeliveryInfo.cs | 54 + .../AliPay/Domain/DeliveryOrderProcessVO.cs | 78 + .../AliPay/Domain/DeliveryPackageDetail.cs | 48 + PaymentSDK/AliPay/Domain/DeliveryPackageVO.cs | 74 + PaymentSDK/AliPay/Domain/DepartmentDTO.cs | 66 + PaymentSDK/AliPay/Domain/DepartmentLabel.cs | 30 + PaymentSDK/AliPay/Domain/DepositBackInfo.cs | 42 + PaymentSDK/AliPay/Domain/DeskAreaEntity.cs | 36 + PaymentSDK/AliPay/Domain/DeskEntity.cs | 66 + PaymentSDK/AliPay/Domain/Detail.cs | 30 + PaymentSDK/AliPay/Domain/DetailBean.cs | 30 + .../AliPay/Domain/DetectServiceEntity.cs | 57 + .../Domain/DeviceApplyOrderDeviceModel.cs | 30 + .../AliPay/Domain/DeviceApplyOrderItemDto.cs | 62 + .../Domain/DeviceApplyOrderItemModel.cs | 36 + .../AliPay/Domain/DeviceApplyTemplate.cs | 24 + .../Domain/DeviceBehaviorLogResponse.cs | 30 + PaymentSDK/AliPay/Domain/DeviceGroup.cs | 54 + PaymentSDK/AliPay/Domain/DeviceGroupMember.cs | 30 + PaymentSDK/AliPay/Domain/DeviceInfo.cs | 42 + PaymentSDK/AliPay/Domain/DeviceParams.cs | 30 + PaymentSDK/AliPay/Domain/DeviceProductInfo.cs | 24 + PaymentSDK/AliPay/Domain/DevicePushPayload.cs | 30 + .../AliPay/Domain/DeviceRelationData.cs | 26 + PaymentSDK/AliPay/Domain/DeviceResultInfo.cs | 24 + PaymentSDK/AliPay/Domain/DeviceSyncPayload.cs | 24 + .../AliPay/Domain/DeviceTradeInfoList.cs | 90 + .../AliPay/Domain/DeviceTradeResponse.cs | 54 + PaymentSDK/AliPay/Domain/DiagnoseResult.cs | 24 + PaymentSDK/AliPay/Domain/DiagnosisInfo.cs | 48 + PaymentSDK/AliPay/Domain/Dimension.cs | 24 + .../AliPay/Domain/DiscountByDayModel.cs | 30 + PaymentSDK/AliPay/Domain/DiscountDetail.cs | 56 + .../AliPay/Domain/DiscountDetailInfo.cs | 36 + .../Domain/DiscountDstCampPrizeModel.cs | 36 + PaymentSDK/AliPay/Domain/DiscountInfo.cs | 182 + PaymentSDK/AliPay/Domain/DiscountInfos.cs | 48 + PaymentSDK/AliPay/Domain/DiscountModel.cs | 24 + .../AliPay/Domain/DiscountRandomModel.cs | 30 + PaymentSDK/AliPay/Domain/DiscountRateModel.cs | 54 + PaymentSDK/AliPay/Domain/DiseaseDTO.cs | 24 + .../AliPay/Domain/DishCategoryEntity.cs | 36 + PaymentSDK/AliPay/Domain/DishList.cs | 129 + PaymentSDK/AliPay/Domain/DishRecommend.cs | 48 + PaymentSDK/AliPay/Domain/DishTag.cs | 24 + PaymentSDK/AliPay/Domain/Dishes.cs | 48 + .../AliPay/Domain/DishonestyDetailInfo.cs | 60 + PaymentSDK/AliPay/Domain/DishonorOrder.cs | 60 + PaymentSDK/AliPay/Domain/DisplayConfig.cs | 24 + PaymentSDK/AliPay/Domain/District.cs | 24 + .../AliPay/Domain/DmActivityShopData.cs | 66 + PaymentSDK/AliPay/Domain/DocInfo.cs | 24 + PaymentSDK/AliPay/Domain/DrawndnVo.cs | 120 + PaymentSDK/AliPay/Domain/DsbImageInfo.cs | 30 + PaymentSDK/AliPay/Domain/DstCampRuleModel.cs | 54 + PaymentSDK/AliPay/Domain/DxDeployOrderInfo.cs | 66 + .../AliPay/Domain/DxVerifyResultItem.cs | 60 + PaymentSDK/AliPay/Domain/EbppBillKey.cs | 42 + PaymentSDK/AliPay/Domain/EbppOrderItem.cs | 54 + .../AliPay/Domain/EbppOrderItemToCreate.cs | 36 + .../AliPay/Domain/EbppUserChargeInstInfo.cs | 36 + PaymentSDK/AliPay/Domain/EcoAppInfo.cs | 24 + PaymentSDK/AliPay/Domain/EcoApplySchedule.cs | 66 + .../Domain/EcoCenRenthousepayTypeList.cs | 50 + .../Domain/EcoDisRenthousepayTypeList.cs | 56 + PaymentSDK/AliPay/Domain/EcoMockGroupInfo.cs | 48 + .../AliPay/Domain/EcoRenthouseOtherAmount.cs | 30 + .../AliPay/Domain/EcoRenthouseRoomInfoList.cs | 36 + PaymentSDK/AliPay/Domain/EduAgeDemand.cs | 24 + .../Domain/EduOneCardBalanceQueryResult.cs | 48 + .../EduOneCardDepositCardQueryResult.cs | 54 + PaymentSDK/AliPay/Domain/EduPayItems.cs | 42 + PaymentSDK/AliPay/Domain/EduSourceInfo.cs | 30 + .../Domain/EduStudentInfoShareResult.cs | 32 + PaymentSDK/AliPay/Domain/EduTrainExtInfo.cs | 24 + PaymentSDK/AliPay/Domain/EduWorkAddress.cs | 42 + PaymentSDK/AliPay/Domain/EinvTrade.cs | 90 + .../Domain/EncryptedPaymentCredential.cs | 36 + PaymentSDK/AliPay/Domain/EndowmentOrder.cs | 36 + .../AliPay/Domain/EntertainmentOrderInfo.cs | 114 + PaymentSDK/AliPay/Domain/EntityBasicInfo.cs | 116 + PaymentSDK/AliPay/Domain/EntityPriorRiskVO.cs | 42 + PaymentSDK/AliPay/Domain/EntityStatus.cs | 78 + PaymentSDK/AliPay/Domain/EnvInfo.cs | 30 + PaymentSDK/AliPay/Domain/EpElement.cs | 24 + PaymentSDK/AliPay/Domain/EpInfo.cs | 20 + .../EquipmentAuthRemoveQueryBypageDTO.cs | 24 + PaymentSDK/AliPay/Domain/EquipmentBindInfo.cs | 24 + PaymentSDK/AliPay/Domain/EquityInfo.cs | 54 + PaymentSDK/AliPay/Domain/ErrorCodeDTO.cs | 30 + PaymentSDK/AliPay/Domain/ErrorDishEntity.cs | 24 + .../AliPay/Domain/ErrorDishStallEntity.cs | 27 + PaymentSDK/AliPay/Domain/ErrorLog.cs | 42 + PaymentSDK/AliPay/Domain/ErrorMatcher.cs | 24 + .../AliPay/Domain/EstablishFraudData.cs | 30 + .../AliPay/Domain/EstablishResponseHeader.cs | 30 + PaymentSDK/AliPay/Domain/EstimateDishInfo.cs | 30 + PaymentSDK/AliPay/Domain/EventInfo.cs | 72 + PaymentSDK/AliPay/Domain/ExClientRateVO.cs | 234 + PaymentSDK/AliPay/Domain/ExRefRateInfoVO.cs | 54 + PaymentSDK/AliPay/Domain/ExSourceRateVO.cs | 294 + PaymentSDK/AliPay/Domain/ExchangeRate.cs | 30 + .../AliPay/Domain/ExerciseCourseOpenModel.cs | 78 + .../Domain/ExerciseDailySummaryOpenModel.cs | 24 + PaymentSDK/AliPay/Domain/ExerciseItem.cs | 42 + .../AliPay/Domain/ExerciseItemOpenModel.cs | 42 + .../Domain/ExerciseItemOpenModelSecond.cs | 56 + .../Domain/ExerciseItemOpenModelThird.cs | 48 + .../AliPay/Domain/ExercisePlanOpenModel.cs | 45 + .../AliPay/Domain/ExerciseRecordOpenModel.cs | 58 + .../AliPay/Domain/ExerciseUserMappingDTO.cs | 24 + .../AliPay/Domain/ExproductconfResponse.cs | 60 + PaymentSDK/AliPay/Domain/ExtBrand.cs | 24 + PaymentSDK/AliPay/Domain/ExtCardInfo.cs | 54 + PaymentSDK/AliPay/Domain/ExtCategory.cs | 30 + PaymentSDK/AliPay/Domain/ExtContext.cs | 18 + PaymentSDK/AliPay/Domain/ExtInfos.cs | 18 + PaymentSDK/AliPay/Domain/ExtItem.cs | 78 + PaymentSDK/AliPay/Domain/ExtShopItem.cs | 96 + PaymentSDK/AliPay/Domain/ExtUserInfo.cs | 54 + PaymentSDK/AliPay/Domain/ExtendFieldInfo.cs | 24 + PaymentSDK/AliPay/Domain/ExtendInfos.cs | 24 + PaymentSDK/AliPay/Domain/ExtendMedicalCard.cs | 78 + PaymentSDK/AliPay/Domain/ExtendParams.cs | 42 + PaymentSDK/AliPay/Domain/ExtensionArea.cs | 42 + PaymentSDK/AliPay/Domain/ExtitemDetailInfo.cs | 32 + PaymentSDK/AliPay/Domain/ExtraInfoVO.cs | 30 + PaymentSDK/AliPay/Domain/ExtraParams.cs | 36 + .../AliPay/Domain/FaceAbilityExtInfo.cs | 96 + PaymentSDK/AliPay/Domain/FaceAttrInfo.cs | 18 + PaymentSDK/AliPay/Domain/FaceExtInfo.cs | 30 + PaymentSDK/AliPay/Domain/FaceExtParams.cs | 18 + PaymentSDK/AliPay/Domain/FaceMachineInfo.cs | 60 + PaymentSDK/AliPay/Domain/FaceMerchantInfo.cs | 78 + .../Domain/FaceSearchAnonymousUserInfo.cs | 24 + PaymentSDK/AliPay/Domain/FaceSearchResult.cs | 36 + .../AliPay/Domain/FaceSearchUserInfo.cs | 36 + .../AliPay/Domain/FamilyArchiveDetail.cs | 114 + PaymentSDK/AliPay/Domain/FeeRecords.cs | 36 + PaymentSDK/AliPay/Domain/FeeValue.cs | 60 + PaymentSDK/AliPay/Domain/FeedbackSubItem.cs | 30 + PaymentSDK/AliPay/Domain/FenceEvent.cs | 50 + PaymentSDK/AliPay/Domain/FengdieActivity.cs | 74 + .../Domain/FengdieActivityComponentModel.cs | 26 + .../Domain/FengdieActivityCreateData.cs | 38 + .../Domain/FengdieActivityCreateModel.cs | 18 + .../Domain/FengdieActivityCreatePageData.cs | 24 + .../Domain/FengdieActivityCreatePagesData.cs | 39 + .../AliPay/Domain/FengdieActivityPage.cs | 50 + .../Domain/FengdieActivitySchemaData.cs | 24 + .../Domain/FengdieActivitySchemaModel.cs | 24 + .../Domain/FengdieEditorGetRespModel.cs | 18 + .../AliPay/Domain/FengdieListPaginator.cs | 36 + .../AliPay/Domain/FengdiePreviewPagesModel.cs | 24 + .../Domain/FengdiePreviewQueryRespModel.cs | 20 + .../AliPay/Domain/FengdieSitesCreateModel.cs | 50 + .../AliPay/Domain/FengdieSitesListModel.cs | 66 + .../Domain/FengdieSitesListRespModel.cs | 26 + PaymentSDK/AliPay/Domain/FengdieSitesOwner.cs | 24 + .../AliPay/Domain/FengdieSitesPageModel.cs | 50 + .../Domain/FengdieSitesQueryRespModel.cs | 74 + .../AliPay/Domain/FengdieSpaceDetailModel.cs | 38 + .../AliPay/Domain/FengdieSpaceDomains.cs | 30 + .../Domain/FengdieSpaceListRespModel.cs | 26 + .../Domain/FengdieSpaceMemberCreateModel.cs | 24 + .../AliPay/Domain/FengdieSuccessRespModel.cs | 18 + PaymentSDK/AliPay/Domain/FengdieTemplate.cs | 50 + .../Domain/FengdieTemplateDetailModel.cs | 62 + .../Domain/FengdieTemplateListRespModel.cs | 26 + PaymentSDK/AliPay/Domain/FileSignature.cs | 48 + PaymentSDK/AliPay/Domain/FillContent.cs | 24 + PaymentSDK/AliPay/Domain/Filter.cs | 24 + PaymentSDK/AliPay/Domain/FilterTag.cs | 24 + PaymentSDK/AliPay/Domain/FinExtParams.cs | 24 + .../AliPay/Domain/FinanceBankAccountInfo.cs | 72 + PaymentSDK/AliPay/Domain/FinanceCreditItem.cs | 24 + PaymentSDK/AliPay/Domain/FinanceFileInfo.cs | 30 + .../AliPay/Domain/FinanceInvoiceInfo.cs | 66 + PaymentSDK/AliPay/Domain/FinanceMemberInfo.cs | 42 + .../AliPay/Domain/FinancePurchaseInfo.cs | 26 + .../AliPay/Domain/FinanceReceivableInfo.cs | 82 + .../Domain/FinanceReceivableResultInfo.cs | 54 + PaymentSDK/AliPay/Domain/FixCooperationDTO.cs | 60 + PaymentSDK/AliPay/Domain/FixExtData.cs | 24 + PaymentSDK/AliPay/Domain/FixFileInfo.cs | 36 + PaymentSDK/AliPay/Domain/FixProblemDTO.cs | 36 + PaymentSDK/AliPay/Domain/FliggyPoiInfo.cs | 36 + PaymentSDK/AliPay/Domain/FlowSigner.cs | 36 + .../AliPay/Domain/FoodDispenserCellInfo.cs | 42 + PaymentSDK/AliPay/Domain/ForbbidenTime.cs | 18 + PaymentSDK/AliPay/Domain/FraudData.cs | 24 + .../AliPay/Domain/FrequencyRuleDetail.cs | 36 + PaymentSDK/AliPay/Domain/FriendListVO.cs | 36 + PaymentSDK/AliPay/Domain/FrontCategoryInfo.cs | 62 + .../AliPay/Domain/FsServiceDynamicInfo.cs | 42 + PaymentSDK/AliPay/Domain/FulfillmentInfo.cs | 30 + PaymentSDK/AliPay/Domain/FulfillmentResult.cs | 24 + PaymentSDK/AliPay/Domain/FullDiscountDTO.cs | 51 + PaymentSDK/AliPay/Domain/FullGiftDTO.cs | 57 + PaymentSDK/AliPay/Domain/FullReductionDTO.cs | 51 + PaymentSDK/AliPay/Domain/FundBill.cs | 36 + PaymentSDK/AliPay/Domain/FundBillListEco.cs | 24 + .../AliPay/Domain/FundDetailItemAOPModel.cs | 20 + PaymentSDK/AliPay/Domain/FundItemAOPModel.cs | 288 + .../Domain/GFAOpenAPIAcceptanceResult.cs | 60 + .../Domain/GFAOpenAPIAmortizeExtInfo.cs | 54 + .../AliPay/Domain/GFAOpenAPIBaseAcceptance.cs | 108 + .../AliPay/Domain/GFAOpenAPIBillAcceptance.cs | 174 + PaymentSDK/AliPay/Domain/GFAOpenAPICommand.cs | 78 + .../AliPay/Domain/GFAOpenAPICommandReceipt.cs | 24 + .../Domain/GFAOpenAPIDetailQueryResult.cs | 27 + .../Domain/GFAOpenAPIParticipantInfo.cs | 42 + .../AliPay/Domain/GFAOpenAPIQueryRequest.cs | 54 + .../Domain/GFAOpenAPIReverseBillAcceptance.cs | 192 + PaymentSDK/AliPay/Domain/GavinTestnew.cs | 18 + PaymentSDK/AliPay/Domain/Gavinmed.cs | 26 + PaymentSDK/AliPay/Domain/Gavintest.cs | 18 + .../AliPay/Domain/GavintestNewLeveaOne.cs | 39 + .../AliPay/Domain/GavintestNewonline.cs | 26 + .../AliPay/Domain/GeneralInvoiceItem.cs | 90 + PaymentSDK/AliPay/Domain/GetRuleInfo.cs | 30 + PaymentSDK/AliPay/Domain/GoodInfo.cs | 36 + PaymentSDK/AliPay/Domain/GoodsComponent.cs | 30 + PaymentSDK/AliPay/Domain/GoodsDetail.cs | 66 + PaymentSDK/AliPay/Domain/GoodsDetailInfo.cs | 42 + PaymentSDK/AliPay/Domain/GoodsInfo.cs | 42 + PaymentSDK/AliPay/Domain/GoodsInformation.cs | 24 + PaymentSDK/AliPay/Domain/GoodsReturnOrder.cs | 56 + .../AliPay/Domain/GoodsReturnOrderItem.cs | 42 + .../AliPay/Domain/GoodsSafetyInventory.cs | 48 + .../AliPay/Domain/GoodsSafetyInventoryVO.cs | 66 + PaymentSDK/AliPay/Domain/GoodsState.cs | 30 + PaymentSDK/AliPay/Domain/GoodsVO.cs | 138 + PaymentSDK/AliPay/Domain/GovDocRequest.cs | 24 + .../AliPay/Domain/GradeDiscountPoint.cs | 30 + PaymentSDK/AliPay/Domain/GroupFundBill.cs | 62 + PaymentSDK/AliPay/Domain/GroupFundDetail.cs | 36 + PaymentSDK/AliPay/Domain/GroupFundUserBill.cs | 66 + .../AliPay/Domain/GroupFundsImcomeDetails.cs | 30 + PaymentSDK/AliPay/Domain/GroupInfo.cs | 60 + PaymentSDK/AliPay/Domain/GroupMemberInfo.cs | 30 + PaymentSDK/AliPay/Domain/GroupRecord.cs | 62 + PaymentSDK/AliPay/Domain/GroupSetting.cs | 30 + PaymentSDK/AliPay/Domain/HSchoolInfo.cs | 24 + PaymentSDK/AliPay/Domain/HbMerchantBill.cs | 42 + PaymentSDK/AliPay/Domain/HbMerchantInfo.cs | 30 + .../Domain/HbProductOrderQueryResponse.cs | 38 + .../AliPay/Domain/HelloBikePriceCondition.cs | 36 + .../AliPay/Domain/HelloBikePriceConstraint.cs | 54 + .../AliPay/Domain/HelloBikePriceResultItem.cs | 30 + PaymentSDK/AliPay/Domain/HighwaySceneData.cs | 138 + PaymentSDK/AliPay/Domain/Hit.cs | 60 + .../AliPay/Domain/HoloGraphicContactInfo.cs | 54 + PaymentSDK/AliPay/Domain/HomeApiContent.cs | 24 + PaymentSDK/AliPay/Domain/HomeApiRequest.cs | 44 + PaymentSDK/AliPay/Domain/HomeApiResponse.cs | 42 + PaymentSDK/AliPay/Domain/HospitalDTO.cs | 30 + .../Domain/HuanxuTradeOrderCloseModel.cs | 18 + .../Domain/HuanxuTradeOrderDisburseModel.cs | 42 + .../AliPay/Domain/HuanxuTradeOrderPayModel.cs | 102 + .../Domain/HuanxuTradeOrderQueryModel.cs | 48 + .../Domain/HuanxuTradeOrderRefundModel.cs | 60 + PaymentSDK/AliPay/Domain/ISVLogSync.cs | 66 + PaymentSDK/AliPay/Domain/IcrowdUseContext.cs | 36 + PaymentSDK/AliPay/Domain/IcrowdUseParam.cs | 32 + PaymentSDK/AliPay/Domain/IcrowdUseResp.cs | 24 + PaymentSDK/AliPay/Domain/IdCardImg.cs | 30 + PaymentSDK/AliPay/Domain/IdentityParam.cs | 42 + PaymentSDK/AliPay/Domain/IdentityParams.cs | 36 + PaymentSDK/AliPay/Domain/IgAuthQuota.cs | 24 + PaymentSDK/AliPay/Domain/Image.cs | 18 + PaymentSDK/AliPay/Domain/ImageInfo.cs | 36 + PaymentSDK/AliPay/Domain/ImageTextItem.cs | 42 + PaymentSDK/AliPay/Domain/InStockStuffInfo.cs | 36 + PaymentSDK/AliPay/Domain/InboundOrder.cs | 48 + PaymentSDK/AliPay/Domain/InboundOrderLine.cs | 60 + PaymentSDK/AliPay/Domain/InboundOrderVO.cs | 78 + PaymentSDK/AliPay/Domain/IndexBigbuyItem.cs | 102 + PaymentSDK/AliPay/Domain/IndexBlockBanner.cs | 24 + PaymentSDK/AliPay/Domain/IndexDetail.cs | 54 + PaymentSDK/AliPay/Domain/IndirectIsvInfo.cs | 30 + PaymentSDK/AliPay/Domain/IndividualInfo.cs | 48 + .../AliPay/Domain/IndustryExtendField.cs | 24 + .../Domain/IndustryQualificationInfo.cs | 24 + .../Domain/IndustryQualificationInfoKt.cs | 24 + PaymentSDK/AliPay/Domain/InfoCode.cs | 36 + .../AliPay/Domain/InfoSecHitDetectItem.cs | 36 + PaymentSDK/AliPay/Domain/InfoSource.cs | 24 + PaymentSDK/AliPay/Domain/Informant.cs | 36 + PaymentSDK/AliPay/Domain/Injured.cs | 60 + PaymentSDK/AliPay/Domain/InputFieldModel.cs | 56 + PaymentSDK/AliPay/Domain/InputScheduleLine.cs | 36 + PaymentSDK/AliPay/Domain/InputScheduleTime.cs | 42 + PaymentSDK/AliPay/Domain/InsAddressee.cs | 72 + PaymentSDK/AliPay/Domain/InsApplication.cs | 66 + .../AliPay/Domain/InsApplicationQuery.cs | 54 + PaymentSDK/AliPay/Domain/InsCertificate.cs | 30 + .../AliPay/Domain/InsCertificateApiDTO.cs | 102 + .../Domain/InsCertificatePaginationList.cs | 44 + PaymentSDK/AliPay/Domain/InsClaim.cs | 68 + .../AliPay/Domain/InsClaimAttachment.cs | 48 + PaymentSDK/AliPay/Domain/InsClaimPolicy.cs | 18 + PaymentSDK/AliPay/Domain/InsClaimReport.cs | 94 + .../AliPay/Domain/InsClaimReportProgress.cs | 30 + PaymentSDK/AliPay/Domain/InsCoupon.cs | 42 + PaymentSDK/AliPay/Domain/InsCoverage.cs | 60 + .../Domain/InsCreateCertificateRequest.cs | 78 + .../InsDataAutodamageEstimateConfirmModel.cs | 90 + ...DataAutodamageEstimateResultDetailModel.cs | 96 + .../Domain/InsDataDsbEstimateResultDetail.cs | 96 + PaymentSDK/AliPay/Domain/InsEndorseItem.cs | 30 + .../AliPay/Domain/InsHealthGainFlowResult.cs | 78 + .../InsHealthGiftBatchAlreadyOpenedResult.cs | 24 + .../InsHealthGiftBatchGainSumInsuredResult.cs | 42 + .../InsHealthGiftBatchMySumInsuredResult.cs | 24 + .../InsHealthGiftBatchValidGiftResult.cs | 36 + .../AliPay/Domain/InsHealthSendFlowResult.cs | 66 + .../AliPay/Domain/InsInvoiceApplyItem.cs | 36 + PaymentSDK/AliPay/Domain/InsLiability.cs | 86 + PaymentSDK/AliPay/Domain/InsMerchant.cs | 30 + PaymentSDK/AliPay/Domain/InsMktCampaignDTO.cs | 86 + .../AliPay/Domain/InsMktCouponBaseDTO.cs | 30 + .../AliPay/Domain/InsMktCouponCampaignDTO.cs | 60 + .../AliPay/Domain/InsMktCouponCmpgnBaseDTO.cs | 36 + .../AliPay/Domain/InsMktCouponConfigDTO.cs | 48 + PaymentSDK/AliPay/Domain/InsMktCouponDTO.cs | 60 + PaymentSDK/AliPay/Domain/InsMktFactorDTO.cs | 24 + PaymentSDK/AliPay/Domain/InsMktObjectDTO.cs | 24 + .../AliPay/Domain/InsMktPreUseCampaignDTO.cs | 54 + .../AliPay/Domain/InsMktPreUseCouponDTO.cs | 48 + PaymentSDK/AliPay/Domain/InsObject.cs | 30 + PaymentSDK/AliPay/Domain/InsOffilneProduct.cs | 30 + PaymentSDK/AliPay/Domain/InsOption.cs | 24 + PaymentSDK/AliPay/Domain/InsOrderInfo.cs | 60 + PaymentSDK/AliPay/Domain/InsPerson.cs | 108 + PaymentSDK/AliPay/Domain/InsPolicy.cs | 137 + PaymentSDK/AliPay/Domain/InsProdCoverage.cs | 57 + PaymentSDK/AliPay/Domain/InsProdResource.cs | 36 + PaymentSDK/AliPay/Domain/InsProdTag.cs | 24 + PaymentSDK/AliPay/Domain/InsProduct.cs | 130 + PaymentSDK/AliPay/Domain/InsQueryPerson.cs | 42 + .../AliPay/Domain/InsSceneTaskFlowDTO.cs | 96 + PaymentSDK/AliPay/Domain/InsSellerActivity.cs | 30 + PaymentSDK/AliPay/Domain/InsSumInsured.cs | 44 + PaymentSDK/AliPay/Domain/InsTradeInfo.cs | 24 + PaymentSDK/AliPay/Domain/InstAccountDTO.cs | 60 + PaymentSDK/AliPay/Domain/InstAccountInfo.cs | 30 + .../AliPay/Domain/InstAllocationQuotaVO.cs | 60 + .../Domain/InstCashPoolAccountMappingVO.cs | 42 + .../Domain/InstCashPoolAllocationRuleVO.cs | 84 + PaymentSDK/AliPay/Domain/InstRepayPlan.cs | 90 + .../AliPay/Domain/InstRuleCustomMemoVO.cs | 26 + .../AliPay/Domain/InstallmentMetaInfo.cs | 30 + .../AliPay/Domain/InstallmentRepayPlan.cs | 90 + PaymentSDK/AliPay/Domain/InstallmentValue.cs | 20 + PaymentSDK/AliPay/Domain/InstanceInfo.cs | 54 + PaymentSDK/AliPay/Domain/Institution.cs | 24 + PaymentSDK/AliPay/Domain/Insured.cs | 36 + .../AliPay/Domain/InteligentBudgetInfo.cs | 24 + .../AliPay/Domain/InteligentClauseTerm.cs | 26 + .../AliPay/Domain/InteligentConstraintInfo.cs | 50 + .../AliPay/Domain/InteligentDataCondition.cs | 30 + .../AliPay/Domain/InteligentDelayInfo.cs | 24 + .../AliPay/Domain/InteligentDisplayConfig.cs | 24 + .../AliPay/Domain/InteligentForbiddenTime.cs | 18 + .../Domain/InteligentGeneralMerchantPromo.cs | 87 + .../AliPay/Domain/InteligentItemInfo.cs | 75 + .../AliPay/Domain/InteligentMerchantPromo.cs | 24 + .../AliPay/Domain/InteligentPromoTool.cs | 36 + .../AliPay/Domain/InteligentPublishChannel.cs | 36 + .../AliPay/Domain/InteligentSendRule.cs | 36 + PaymentSDK/AliPay/Domain/InteligentUseRule.cs | 57 + PaymentSDK/AliPay/Domain/InteligentUseTime.cs | 30 + PaymentSDK/AliPay/Domain/InteligentVoucher.cs | 178 + .../Domain/InteligentVoucherDescDetail.cs | 36 + .../Domain/IntelligentGuideTradeDetail.cs | 120 + .../Domain/IntelligentGuideTradeInfo.cs | 32 + PaymentSDK/AliPay/Domain/IntelligentPromo.cs | 154 + .../AliPay/Domain/IntelligentPromoDetail.cs | 87 + .../AliPay/Domain/IntelligentPromoEffect.cs | 90 + .../Domain/IntelligentPromoShopSummaryInfo.cs | 24 + .../AliPay/Domain/IntentQueryRequest.cs | 84 + .../AliPay/Domain/IntentQueryResponse.cs | 42 + .../Domain/InterTradeConsultOpenApiResult.cs | 26 + .../Domain/InterTradeContractPartner.cs | 24 + .../InterTradeStartContractApprovalResult.cs | 18 + PaymentSDK/AliPay/Domain/InterfaceInfoList.cs | 30 + PaymentSDK/AliPay/Domain/IntroductionInfo.cs | 26 + .../AliPay/Domain/InvalidTradeDetail.cs | 36 + PaymentSDK/AliPay/Domain/Inventory.cs | 84 + PaymentSDK/AliPay/Domain/InventoryInfo.cs | 24 + PaymentSDK/AliPay/Domain/InventoryItem.cs | 48 + PaymentSDK/AliPay/Domain/InventoryRecord.cs | 114 + .../AliPay/Domain/InvestigCategoryData.cs | 54 + .../AliPay/Domain/InvestigCategoryResult.cs | 26 + .../AliPay/Domain/InvoiceAmountLimitDTO.cs | 30 + .../AliPay/Domain/InvoiceAmountLimitInfo.cs | 30 + .../AliPay/Domain/InvoiceApplyOpenModel.cs | 164 + PaymentSDK/AliPay/Domain/InvoiceCompanyDTO.cs | 140 + .../AliPay/Domain/InvoiceCompanyInfo.cs | 154 + .../Domain/InvoiceCompanyQueryResult.cs | 45 + PaymentSDK/AliPay/Domain/InvoiceContactDTO.cs | 36 + .../AliPay/Domain/InvoiceContactInfo.cs | 36 + .../AliPay/Domain/InvoiceElementModel.cs | 158 + .../InvoiceElementStatusSyncOpenModel.cs | 36 + PaymentSDK/AliPay/Domain/InvoiceInfo.cs | 24 + .../Domain/InvoiceItemApplyOpenModel.cs | 96 + .../AliPay/Domain/InvoiceItemContent.cs | 72 + .../AliPay/Domain/InvoiceItemOpenModel.cs | 78 + .../Domain/InvoiceItemQueryOpenModel.cs | 78 + PaymentSDK/AliPay/Domain/InvoiceKeyInfo.cs | 30 + .../AliPay/Domain/InvoiceModelContent.cs | 182 + .../AliPay/Domain/InvoiceOpenProductDTO.cs | 42 + PaymentSDK/AliPay/Domain/InvoiceOrderDTO.cs | 84 + PaymentSDK/AliPay/Domain/InvoiceOrderInfo.cs | 114 + PaymentSDK/AliPay/Domain/InvoiceOutputInfo.cs | 140 + .../AliPay/Domain/InvoicePDFSynModel.cs | 54 + .../AliPay/Domain/InvoiceQueryOpenModel.cs | 212 + .../AliPay/Domain/InvoiceRegisterCreateDTO.cs | 62 + .../AliPay/Domain/InvoiceSendOpenModel.cs | 189 + .../Domain/InvoiceTitleApplyOpenModel.cs | 48 + PaymentSDK/AliPay/Domain/InvoiceTitleModel.cs | 84 + .../AliPay/Domain/InvoiceTitleOpenModel.cs | 36 + .../Domain/InvoiceTitleQueryOpenModel.cs | 54 + .../AliPay/Domain/InvoiceTradeFundItem.cs | 30 + .../AliPay/Domain/InvoiceTradeGoodsItem.cs | 60 + PaymentSDK/AliPay/Domain/InvoiceTradeInfo.cs | 124 + PaymentSDK/AliPay/Domain/InvokeAppInfo.cs | 38 + PaymentSDK/AliPay/Domain/InvolvedEntity.cs | 36 + PaymentSDK/AliPay/Domain/IotDevice.cs | 54 + PaymentSDK/AliPay/Domain/IotDeviceModel.cs | 62 + .../AliPay/Domain/IotDevicePersonalInfo.cs | 24 + .../AliPay/Domain/IotDevicePrincipal.cs | 24 + PaymentSDK/AliPay/Domain/IpAddrLbsInfo.cs | 24 + .../Domain/IsvCyclePropertyTimeModel.cs | 30 + PaymentSDK/AliPay/Domain/IsvLogisticsInfo.cs | 24 + PaymentSDK/AliPay/Domain/IsvMerchantInfo.cs | 26 + PaymentSDK/AliPay/Domain/IsvShopDishModel.cs | 140 + .../AliPay/Domain/ItapDeviceControlAction.cs | 24 + PaymentSDK/AliPay/Domain/ItapDeviceInfo.cs | 42 + .../AliPay/Domain/ItapResponsePayload.cs | 30 + PaymentSDK/AliPay/Domain/ItemBo.cs | 48 + PaymentSDK/AliPay/Domain/ItemCategoryInfo.cs | 24 + PaymentSDK/AliPay/Domain/ItemCategoryVO.cs | 18 + .../AliPay/Domain/ItemDeliveryDetail.cs | 48 + PaymentSDK/AliPay/Domain/ItemDetail.cs | 36 + .../AliPay/Domain/ItemDiagnoseDetail.cs | 120 + PaymentSDK/AliPay/Domain/ItemDiagnoseType.cs | 24 + PaymentSDK/AliPay/Domain/ItemDishInfo.cs | 32 + PaymentSDK/AliPay/Domain/ItemExt.cs | 24 + PaymentSDK/AliPay/Domain/ItemExtInfo.cs | 24 + PaymentSDK/AliPay/Domain/ItemInfo.cs | 75 + PaymentSDK/AliPay/Domain/ItemInfoVO.cs | 131 + PaymentSDK/AliPay/Domain/ItemInventory.cs | 30 + .../AliPay/Domain/ItemLabelCreateInfo.cs | 24 + .../AliPay/Domain/ItemLabelModifyInfo.cs | 24 + PaymentSDK/AliPay/Domain/ItemModel.cs | 98 + PaymentSDK/AliPay/Domain/ItemOrder.cs | 62 + PaymentSDK/AliPay/Domain/ItemOrderDetail.cs | 36 + PaymentSDK/AliPay/Domain/ItemOrderInfo.cs | 50 + .../AliPay/Domain/ItemOrderInfoResult.cs | 42 + PaymentSDK/AliPay/Domain/ItemOrderOpenData.cs | 96 + PaymentSDK/AliPay/Domain/ItemOrderVO.cs | 60 + PaymentSDK/AliPay/Domain/ItemPackageInfo.cs | 26 + PaymentSDK/AliPay/Domain/ItemProperty.cs | 26 + PaymentSDK/AliPay/Domain/ItemPropertyInfo.cs | 26 + PaymentSDK/AliPay/Domain/ItemQueryResponse.cs | 135 + PaymentSDK/AliPay/Domain/ItemResp.cs | 102 + PaymentSDK/AliPay/Domain/ItemSkuCreateInfo.cs | 50 + PaymentSDK/AliPay/Domain/ItemSkuInfo.cs | 68 + PaymentSDK/AliPay/Domain/ItemSkuModifyInfo.cs | 62 + .../AliPay/Domain/ItemSkuPropertyInfo.cs | 24 + PaymentSDK/AliPay/Domain/ItemStoreDTO.cs | 48 + PaymentSDK/AliPay/Domain/ItemUnitInfo.cs | 42 + PaymentSDK/AliPay/Domain/ItemUrl.cs | 24 + PaymentSDK/AliPay/Domain/ItemVO.cs | 98 + PaymentSDK/AliPay/Domain/ItermInfo.cs | 48 + .../AliPay/Domain/JFExportInputFieldModel.cs | 74 + .../AliPay/Domain/JfExportChargeInstModel.cs | 42 + .../AliPay/Domain/JfExportInstBillModel.cs | 66 + PaymentSDK/AliPay/Domain/JsApiBaseDTO.cs | 90 + .../Domain/KbAdvertAddChannelRequest.cs | 30 + .../Domain/KbAdvertAdvChannelResponse.cs | 44 + .../AliPay/Domain/KbAdvertAdvContent.cs | 24 + .../Domain/KbAdvertAdvContentResponse.cs | 44 + .../AliPay/Domain/KbAdvertAdvResponse.cs | 36 + .../KbAdvertAdvSingleVoucherResponse.cs | 32 + .../Domain/KbAdvertCascadeCommissionInfo.cs | 26 + .../AliPay/Domain/KbAdvertChannelResponse.cs | 42 + .../AliPay/Domain/KbAdvertCommissionClause.cs | 36 + .../KbAdvertCommissionClausePercentage.cs | 36 + ...dvertCommissionClausePercentageResponse.cs | 24 + .../Domain/KbAdvertCommissionClauseQuota.cs | 24 + .../KbAdvertCommissionClauseQuotaResponse.cs | 18 + .../KbAdvertCommissionClauseResponse.cs | 30 + .../AliPay/Domain/KbAdvertContentCodec.cs | 18 + .../AliPay/Domain/KbAdvertContentPassword.cs | 24 + .../Domain/KbAdvertContentPasswordModify.cs | 36 + .../AliPay/Domain/KbAdvertContentShareCode.cs | 18 + .../Domain/KbAdvertContentShareCodeModify.cs | 18 + .../AliPay/Domain/KbAdvertContentShortLink.cs | 18 + .../AliPay/Domain/KbAdvertDealBillResponse.cs | 18 + .../AliPay/Domain/KbAdvertIdentifyResponse.cs | 50 + .../Domain/KbAdvertMissionQueryResponse.cs | 44 + .../AliPay/Domain/KbAdvertMissionResponse.cs | 50 + .../AliPay/Domain/KbAdvertMissionSubject.cs | 32 + .../Domain/KbAdvertModifyChannelRequest.cs | 30 + .../KbAdvertPercentageCommissionClause.cs | 24 + .../KbAdvertPreserveCommissionClause.cs | 26 + .../Domain/KbAdvertProcessMissionResponse.cs | 30 + .../Domain/KbAdvertQuotaCommissionClause.cs | 18 + .../Domain/KbAdvertSettleBillResponse.cs | 24 + ...KbAdvertSpecialAdvContentModifyResponse.cs | 42 + .../KbAdvertSpecialAdvContentRequest.cs | 24 + .../AliPay/Domain/KbAdvertSubjectResponse.cs | 30 + .../AliPay/Domain/KbAdvertSubjectVoucher.cs | 56 + .../Domain/KbAdvertSubjectVoucherResponse.cs | 130 + PaymentSDK/AliPay/Domain/KbCodeBindInfoVO.cs | 48 + PaymentSDK/AliPay/Domain/KbCodeInfoVO.cs | 78 + PaymentSDK/AliPay/Domain/KbExtItemInfo.cs | 112 + PaymentSDK/AliPay/Domain/KbGoodsInfo.cs | 42 + PaymentSDK/AliPay/Domain/KbIsvMaCode.cs | 24 + PaymentSDK/AliPay/Domain/KbItemInfo.cs | 114 + .../AliPay/Domain/KbOrderActivityModel.cs | 24 + .../AliPay/Domain/KbOrderFundsVoucherModel.cs | 54 + PaymentSDK/AliPay/Domain/KbOrderShopModel.cs | 30 + .../AliPay/Domain/KbOrderVoucherModel.cs | 84 + .../AliPay/Domain/KbPosBillDishDetail.cs | 24 + .../AliPay/Domain/KbPosOrderDishDetail.cs | 231 + PaymentSDK/AliPay/Domain/KbTicketUseDetail.cs | 54 + .../Domain/KbVirtualShopCategoryDishInfo.cs | 30 + PaymentSDK/AliPay/Domain/KbVirtualShopInfo.cs | 26 + .../Domain/KbadvertChannelTypeResponse.cs | 30 + .../AliPay/Domain/KbadvertCommissionLimit.cs | 48 + .../AliPay/Domain/KbadvertRoleInfoResponse.cs | 24 + .../Domain/KbadvertSmartPromoRequest.cs | 24 + .../Domain/KbadvertSmartPromoResponse.cs | 24 + .../AliPay/Domain/KbadvertVoucherManual.cs | 26 + .../AliPay/Domain/KbdishAreaFreeInfo.cs | 42 + PaymentSDK/AliPay/Domain/KbdishAreaInfo.cs | 87 + .../Domain/KbdishCategorySimplifyInfo.cs | 44 + .../Domain/KbdishCommGroupDetailInfo.cs | 54 + .../AliPay/Domain/KbdishCommGroupInfo.cs | 74 + .../AliPay/Domain/KbdishCommRuleInfo.cs | 74 + .../AliPay/Domain/KbdishCommRuleShowInfo.cs | 30 + .../AliPay/Domain/KbdishCookCateTopInfo.cs | 42 + .../AliPay/Domain/KbdishCookDetailInfo.cs | 62 + .../Domain/KbdishCookDetailSimplifyInfo.cs | 44 + PaymentSDK/AliPay/Domain/KbdishCookInfo.cs | 147 + .../AliPay/Domain/KbdishCookPriceInfo.cs | 42 + PaymentSDK/AliPay/Domain/KbdishDictionary.cs | 54 + .../AliPay/Domain/KbdishEstimatedInfo.cs | 54 + .../AliPay/Domain/KbdishGroupDetailInfo.cs | 54 + .../Domain/KbdishGroupDetailSimplifyInfo.cs | 42 + PaymentSDK/AliPay/Domain/KbdishGroupInfo.cs | 80 + .../AliPay/Domain/KbdishGroupSimplifyInfo.cs | 32 + PaymentSDK/AliPay/Domain/KbdishInfo.cs | 216 + .../Domain/KbdishMaterialBindingInfo.cs | 24 + .../AliPay/Domain/KbdishMaterialInfo.cs | 96 + .../Domain/KbdishMaterialSimplifyInfo.cs | 32 + .../AliPay/Domain/KbdishPackagesDetailInfo.cs | 66 + .../AliPay/Domain/KbdishPracticeInfo.cs | 36 + .../AliPay/Domain/KbdishPropertyInfo.cs | 44 + .../Domain/KbdishPropertySimplifyInfo.cs | 26 + .../AliPay/Domain/KbdishPropertyValueInfo.cs | 24 + PaymentSDK/AliPay/Domain/KbdishRuleInfo.cs | 62 + PaymentSDK/AliPay/Domain/KbdishSimplyInfo.cs | 131 + PaymentSDK/AliPay/Domain/KbdishSkuInfo.cs | 110 + .../AliPay/Domain/KbdishSkuSimplifyInfo.cs | 80 + PaymentSDK/AliPay/Domain/KbdishSpecGroup.cs | 32 + .../AliPay/Domain/KbdishSpecGroupDetail.cs | 24 + PaymentSDK/AliPay/Domain/KbdishTabInfo.cs | 66 + .../Domain/KbdishVirtualCategoryInfo.cs | 26 + .../KbdishVirtualCatetorySimplifyInfo.cs | 46 + .../AliPay/Domain/KbdishVirtualDishInfo.cs | 54 + .../Domain/KbdishVirtualDishSimplifyInfo.cs | 24 + .../Domain/KbdishVirtualShopSimplifyInfo.cs | 32 + PaymentSDK/AliPay/Domain/KbpFundTool.cs | 30 + PaymentSDK/AliPay/Domain/KcpLeadsInfo.cs | 134 + PaymentSDK/AliPay/Domain/KdsDeviceModel.cs | 30 + .../AliPay/Domain/KdsDishGroupInfoDTO.cs | 132 + PaymentSDK/AliPay/Domain/KdsDishInfoDTO.cs | 128 + PaymentSDK/AliPay/Domain/KdsInfoModel.cs | 88 + PaymentSDK/AliPay/Domain/KdsOrderInfoDTO.cs | 120 + PaymentSDK/AliPay/Domain/KdsPrinterModel.cs | 30 + PaymentSDK/AliPay/Domain/KeyValuePair.cs | 24 + PaymentSDK/AliPay/Domain/KeyWordDTO.cs | 30 + PaymentSDK/AliPay/Domain/KeyanColumn.cs | 18 + PaymentSDK/AliPay/Domain/Keyword.cs | 24 + PaymentSDK/AliPay/Domain/KmsBakingCheckDTO.cs | 36 + .../AliPay/Domain/KmsBakingInventoryDTO.cs | 84 + .../AliPay/Domain/KmsBakingPromotionDTO.cs | 144 + .../Domain/KmsBakingSalesForecastDTO.cs | 48 + .../AliPay/Domain/KnCertSendOrderDetail.cs | 42 + PaymentSDK/AliPay/Domain/KnPrizeInfo.cs | 48 + ...vertCommissionAdvchannelBatchqueryModel.cs | 30 + ...ubeiAdvertCommissionAdvchannelBindModel.cs | 26 + ...eiAdvertCommissionAdvchannelUnbindModel.cs | 26 + ...ubeiAdvertCommissionAdvertPurchaseModel.cs | 68 + .../KoubeiAdvertCommissionAdvertQueryModel.cs | 26 + .../KoubeiAdvertCommissionBillQueryModel.cs | 24 + ...vertCommissionCascademissionCreateModel.cs | 38 + ...iAdvertCommissionChannelBatchqueryModel.cs | 24 + ...oubeiAdvertCommissionChannelCreateModel.cs | 20 + ...oubeiAdvertCommissionChannelDeleteModel.cs | 20 + ...oubeiAdvertCommissionChannelModifyModel.cs | 20 + ...oubeiAdvertCommissionMissionCreateModel.cs | 56 + ...ubeiAdvertCommissionMissionPromoteModel.cs | 30 + ...KoubeiAdvertCommissionMissionQueryModel.cs | 26 + ...oubeiAdvertCommissionMissionSearchModel.cs | 54 + .../KoubeiAdvertCommissionRoleQueryModel.cs | 30 + ...tCommissionSpecialadvcontentModifyModel.cs | 38 + ...iAdvertDataPromotedetailBatchqueryModel.cs | 48 + ...DataPromotedetailChannelBatchqueryModel.cs | 54 + ...rtDataPromotesummaryDateBatchqueryModel.cs | 42 + ...oubeiAdvertDataPromotesummaryQueryModel.cs | 36 + ...tDeliveryDiscountAuthwebBatchqueryModel.cs | 36 + ...eiAdvertDeliveryDiscountBatchqueryModel.cs | 72 + .../KoubeiAdvertDeliveryDiscountGetModel.cs | 60 + .../KoubeiAdvertDeliveryDiscountQueryModel.cs | 18 + .../KoubeiAdvertDeliveryDiscountSendModel.cs | 54 + ...dvertDeliveryDiscountWebBatchqueryModel.cs | 42 + .../KoubeiAdvertDeliveryItemApplyModel.cs | 54 + .../KoubeiCateringBizMovehomeSyncModel.cs | 26 + ...beiCateringBookShopbooknotableSyncModel.cs | 38 + ...oubeiCateringBookShopbooktableSyncModel.cs | 38 + .../KoubeiCateringBookShopinfoSyncModel.cs | 96 + .../KoubeiCateringCommodityOrderBuyModel.cs | 44 + .../Domain/KoubeiCateringConfigModifyModel.cs | 26 + ...beiCateringCookConditionBatchqueryModel.cs | 36 + ...eiCateringCrowdgroupConditionQueryModel.cs | 24 + ...ubeiCateringCrowdgroupConditionSetModel.cs | 56 + .../KoubeiCateringDishAreaQueryModel.cs | 48 + .../Domain/KoubeiCateringDishAreaSyncModel.cs | 30 + .../KoubeiCateringDishCommgroupQueryModel.cs | 30 + .../KoubeiCateringDishCommgroupSyncModel.cs | 30 + .../KoubeiCateringDishCommruleQueryModel.cs | 54 + .../KoubeiCateringDishCommruleSyncModel.cs | 20 + ...beiCateringDishConditionBatchqueryModel.cs | 60 + .../KoubeiCateringDishCookQueryModel.cs | 54 + .../Domain/KoubeiCateringDishCookSyncModel.cs | 30 + .../KoubeiCateringDishCookcatetopSyncModel.cs | 20 + .../KoubeiCateringDishCreatedishSyncModel.cs | 125 + .../KoubeiCateringDishDictionaryQueryModel.cs | 42 + .../KoubeiCateringDishDictionarySyncModel.cs | 30 + .../KoubeiCateringDishEstimateQueryModel.cs | 24 + .../KoubeiCateringDishEstimatedSyncModel.cs | 32 + .../KoubeiCateringDishGroupQueryModel.cs | 30 + .../KoubeiCateringDishGroupSyncModel.cs | 24 + .../KoubeiCateringDishMaterialCreateModel.cs | 18 + .../KoubeiCateringDishMaterialDeleteModel.cs | 18 + .../KoubeiCateringDishMaterialModifyModel.cs | 18 + .../KoubeiCateringDishMaterialQueryModel.cs | 42 + .../KoubeiCateringDishMenuQueryModel.cs | 18 + .../Domain/KoubeiCateringDishMenuSyncModel.cs | 93 + .../Domain/KoubeiCateringDishQueryModel.cs | 78 + .../KoubeiCateringDishQuerydishQueryModel.cs | 30 + .../KoubeiCateringDishRecommendQueryModel.cs | 62 + ...KoubeiCateringDishRemovedishDeleteModel.cs | 36 + .../KoubeiCateringDishRuleCreateModel.cs | 18 + .../KoubeiCateringDishRuleDeleteModel.cs | 18 + .../KoubeiCateringDishRuleModifyModel.cs | 18 + .../KoubeiCateringDishRuleQueryModel.cs | 30 + .../KoubeiCateringDishSpecgroupQueryModel.cs | 24 + .../KoubeiCateringDishSpecgroupSyncModel.cs | 36 + .../Domain/KoubeiCateringDishSyncModel.cs | 30 + ...iCateringDishVirtualcategoryDeleteModel.cs | 30 + ...eiCateringDishVirtualcategoryQueryModel.cs | 30 + ...beiCateringDishVirtualcategorySyncModel.cs | 18 + ...KoubeiCateringDishVirtualdishQueryModel.cs | 24 + .../KoubeiCateringDishVirtualdishSyncModel.cs | 32 + .../Domain/KoubeiCateringEleOrderSyncModel.cs | 36 + .../Domain/KoubeiCateringItemCreateModel.cs | 200 + .../Domain/KoubeiCateringItemModifyModel.cs | 206 + .../Domain/KoubeiCateringItemQueryModel.cs | 36 + .../KoubeiCateringItemlistQueryModel.cs | 48 + .../Domain/KoubeiCateringKbcodeCreateModel.cs | 38 + .../Domain/KoubeiCateringKbcodeQueryModel.cs | 36 + .../KoubeiCateringKdsInfoModifyModel.cs | 20 + .../Domain/KoubeiCateringKdsInfoQueryModel.cs | 24 + .../KoubeiCateringKmsBakingBatchqueryModel.cs | 32 + .../KoubeiCateringKmsBakingSyncModel.cs | 51 + .../Domain/KoubeiCateringKmsOrderSyncModel.cs | 62 + .../KoubeiCateringOrderBillApplyModel.cs | 88 + .../KoubeiCateringOrderBillCancelModel.cs | 30 + .../Domain/KoubeiCateringOrderCancelModel.cs | 36 + .../KoubeiCateringOrderInfoCancelModel.cs | 24 + .../KoubeiCateringOrderInfoCreateModel.cs | 134 + .../KoubeiCateringOrderInfoModifyModel.cs | 74 + .../KoubeiCateringOrderInfoQueryModel.cs | 18 + .../KoubeiCateringOrderInfoSyncModel.cs | 30 + .../KoubeiCateringOrderInfoVerifyModel.cs | 24 + .../KoubeiCateringOrderPayApplyModel.cs | 54 + .../KoubeiCateringOrderPayCancelModel.cs | 24 + .../KoubeiCateringOrderPayConsultModel.cs | 74 + .../KoubeiCateringOrderPayDisburseModel.cs | 54 + .../KoubeiCateringOrderPayQueryModel.cs | 24 + .../KoubeiCateringOrderPushSignModel.cs | 60 + .../Domain/KoubeiCateringOrderRefundModel.cs | 48 + .../Domain/KoubeiCateringOrderSyncModel.cs | 204 + .../KoubeiCateringPosCategoryCreateModel.cs | 30 + .../KoubeiCateringPosCategoryDeleteModel.cs | 24 + .../KoubeiCateringPosCategoryModifyModel.cs | 30 + .../KoubeiCateringPosCategoryQueryModel.cs | 18 + .../KoubeiCateringPosCategorySaveModel.cs | 20 + ...KoubeiCateringPosCategorylistQueryModel.cs | 18 + .../KoubeiCateringPosCooklistQueryModel.cs | 24 + .../KoubeiCateringPosDeskCreateModel.cs | 42 + .../KoubeiCateringPosDeskDeleteModel.cs | 24 + .../KoubeiCateringPosDeskModifyModel.cs | 18 + .../Domain/KoubeiCateringPosDeskQueryModel.cs | 18 + .../KoubeiCateringPosDeskTransferModel.cs | 27 + .../KoubeiCateringPosDeskareaQueryModel.cs | 18 + .../KoubeiCateringPosDeskareaSyncModel.cs | 24 + .../KoubeiCateringPosDishBatchqueryModel.cs | 30 + .../Domain/KoubeiCateringPosDishQueryModel.cs | 24 + .../Domain/KoubeiCateringPosDishSyncModel.cs | 18 + .../KoubeiCateringPosDishbatchDeleteModel.cs | 38 + .../KoubeiCateringPosDishcateTransferModel.cs | 38 + .../KoubeiCateringPosDishgroupSyncModel.cs | 18 + .../KoubeiCateringPosDishstatusModifyModel.cs | 26 + .../KoubeiCateringPosMaterialCreateModel.cs | 30 + .../KoubeiCateringPosMaterialDeleteModel.cs | 24 + .../KoubeiCateringPosMaterialModifyModel.cs | 36 + .../KoubeiCateringPosMaterialQueryModel.cs | 18 + .../KoubeiCateringPosOrderUploadModel.cs | 33 + .../KoubeiCateringPosParamModifyModel.cs | 66 + .../KoubeiCateringPosParamQueryModel.cs | 18 + .../KoubeiCateringPosPaymodeCreateModel.cs | 42 + .../KoubeiCateringPosPaymodeDeleteModel.cs | 30 + .../KoubeiCateringPosPaymodeModifyModel.cs | 78 + .../KoubeiCateringPosPaymodeQueryModel.cs | 18 + ...KoubeiCateringPosPaymodesortModifyModel.cs | 26 + .../KoubeiCateringPosPracticeCreateModel.cs | 24 + .../KoubeiCateringPosPracticeDeleteModel.cs | 24 + .../KoubeiCateringPosPracticeModifyModel.cs | 30 + .../KoubeiCateringPosPracticeQueryModel.cs | 18 + .../KoubeiCateringPosPrintQueryModel.cs | 18 + .../KoubeiCateringPosQrcodeSyncModel.cs | 20 + .../KoubeiCateringPosShiftQueryModel.cs | 18 + .../Domain/KoubeiCateringPosShiftSyncModel.cs | 26 + ...KoubeiCateringPosSidedishbatchSaveModel.cs | 39 + .../Domain/KoubeiCateringPosSpecQueryModel.cs | 18 + .../Domain/KoubeiCateringPosSpecSyncModel.cs | 32 + .../KoubeiCateringPosStallCreateModel.cs | 50 + .../KoubeiCateringPosStallDeleteModel.cs | 24 + .../KoubeiCateringPosStallModifyModel.cs | 62 + .../KoubeiCateringPosStallQueryModel.cs | 18 + .../KoubeiCateringPosStalldetailQueryModel.cs | 24 + .../KoubeiCateringPosStallerrorQueryModel.cs | 18 + ...KoubeiCateringPosStallrepairModifyModel.cs | 30 + .../KoubeiCateringQueueShopinfoSyncModel.cs | 66 + ...ubeiCateringQueueShopqueueinfoSyncModel.cs | 38 + ...eiCateringQueueShopqueuestatusSyncModel.cs | 44 + .../KoubeiCateringServiceOrderModifyModel.cs | 78 + .../KoubeiCateringSmartstoreDataSyncModel.cs | 216 + .../KoubeiCateringTablecodeQueryModel.cs | 18 + .../KoubeiCateringTablelistQueryModel.cs | 18 + .../KoubeiContentContentcountSetModel.cs | 30 + .../KoubeiContentContentinfoCreateModel.cs | 107 + .../KoubeiContentContentinfoDeleteModel.cs | 18 + .../KoubeiContentContentinfoModifyModel.cs | 113 + .../KoubeiContentContentstatusModifyModel.cs | 36 + ...beiCraftsmanDataProviderBatchqueryModel.cs | 63 + .../KoubeiCraftsmanDataProviderCreateModel.cs | 93 + .../KoubeiCraftsmanDataProviderModifyModel.cs | 88 + .../KoubeiCraftsmanDataWorkBatchqueryModel.cs | 44 + .../KoubeiCraftsmanDataWorkCreateModel.cs | 39 + .../KoubeiCraftsmanDataWorkDeleteModel.cs | 32 + .../KoubeiCraftsmanDataWorkModifyModel.cs | 30 + .../Domain/KoubeiItemBatchqueryModel.cs | 42 + ...ubeiItemCategoryChildrenBatchqueryModel.cs | 18 + .../AliPay/Domain/KoubeiItemCreateModel.cs | 146 + .../AliPay/Domain/KoubeiItemDescription.cs | 26 + .../KoubeiItemExtitemBatchqueryModel.cs | 42 + .../KoubeiItemExtitemCategoryQueryModel.cs | 18 + .../Domain/KoubeiItemExtitemCreateModel.cs | 72 + .../KoubeiItemExtitemExistedQueryModel.cs | 20 + .../KoubeiItemExtitemInfoCreateModel.cs | 118 + .../KoubeiItemExtitemInfoDeleteModel.cs | 18 + .../Domain/KoubeiItemExtitemInfoQueryModel.cs | 18 + .../Domain/KoubeiItemExtitemQueryModel.cs | 18 + .../Domain/KoubeiItemExtitemUpdateModel.cs | 78 + .../AliPay/Domain/KoubeiItemModifyModel.cs | 134 + .../AliPay/Domain/KoubeiItemStateModel.cs | 48 + .../Domain/KoubeiItemTaobaoIndexQueryModel.cs | 48 + ...KoubeiMallCircleRecommenditemQueryModel.cs | 72 + .../AliPay/Domain/KoubeiMallEventSendModel.cs | 36 + ...llScanpurchaseDiscountdetailModifyModel.cs | 38 + ...ubeiMallScanpurchasePreorderCancelModel.cs | 18 + ...ubeiMallScanpurchasePreorderCreateModel.cs | 86 + ...oubeiMallScanpurchasePreorderQueryModel.cs | 18 + ...KoubeiMallScanpurchaseTradeConsultModel.cs | 56 + .../KoubeiMallScanpurchaseTradePayModel.cs | 63 + ...eiMallScanpurchaseTraderesultQueryModel.cs | 30 + ...iMallScanpurchaseUserpreorderQueryModel.cs | 24 + ...eiMallScanpurchaseUserverifyVerifyModel.cs | 24 + .../KoubeiMarketingAdvertisingCreateModel.cs | 60 + .../KoubeiMarketingAdvertisingModifyModel.cs | 48 + .../KoubeiMarketingAdvertisingOperateModel.cs | 24 + .../KoubeiMarketingAdvertisingQueryModel.cs | 18 + ...arketingCampaignActivityBatchqueryModel.cs | 44 + ...beiMarketingCampaignActivityCreateModel.cs | 105 + ...beiMarketingCampaignActivityModifyModel.cs | 111 + ...eiMarketingCampaignActivityOfflineModel.cs | 48 + ...ubeiMarketingCampaignActivityQueryModel.cs | 30 + ...iMarketingCampaignAssetDetailQueryModel.cs | 24 + ...oubeiMarketingCampaignBenefitQueryModel.cs | 18 + ...KoubeiMarketingCampaignBenefitSendModel.cs | 72 + ...eiMarketingCampaignCrowdBatchqueryModel.cs | 30 + .../KoubeiMarketingCampaignCrowdCountModel.cs | 30 + ...KoubeiMarketingCampaignCrowdCreateModel.cs | 42 + ...KoubeiMarketingCampaignCrowdDeleteModel.cs | 18 + ...iMarketingCampaignCrowdDetailQueryModel.cs | 18 + ...KoubeiMarketingCampaignCrowdModifyModel.cs | 42 + ...eiMarketingCampaignDetailInfoQueryModel.cs | 24 + ...CampaignIntelligentPromoBatchqueryModel.cs | 36 + ...ingCampaignIntelligentPromoConsultModel.cs | 56 + ...tingCampaignIntelligentPromoCreateModel.cs | 30 + ...tingCampaignIntelligentPromoDeleteModel.cs | 30 + ...tingCampaignIntelligentPromoModifyModel.cs | 30 + ...etingCampaignIntelligentPromoQueryModel.cs | 30 + ...tingCampaignIntelligentShopConsultModel.cs | 66 + ...CampaignIntelligentTemplateConsultModel.cs | 50 + ...beiMarketingCampaignItemBatchqueryModel.cs | 24 + ...aignItemMerchantactivityBatchqueryModel.cs | 30 + ...gCampaignItemMerchantactivityCloseModel.cs | 18 + ...CampaignItemMerchantactivityCreateModel.cs | 104 + ...CampaignItemMerchantactivityModifyModel.cs | 50 + ...gCampaignItemMerchantactivityQueryModel.cs | 24 + .../KoubeiMarketingCampaignItemQueryModel.cs | 30 + ...eiMarketingCampaignMallInviteQueryModel.cs | 24 + ...eiMarketingCampaignMemberAuthApplyModel.cs | 18 + ...arketingCampaignMemberRelationBindModel.cs | 96 + ...ketingCampaignMemberRelationCreateModel.cs | 102 + ...ketingCampaignMemberRelationModifyModel.cs | 96 + ...ketingCampaignMemberRelationUnbindModel.cs | 36 + ...ngCampaignMemberTemplateBatchqueryModel.cs | 20 + ...arketingCampaignMemberTemplateBindModel.cs | 39 + ...ketingCampaignMemberTemplateCreateModel.cs | 84 + ...ketingCampaignMemberTemplateModifyModel.cs | 84 + ...etingCampaignMemberTemplateOfflineModel.cs | 24 + ...ketingCampaignMemberTemplateOnlineModel.cs | 24 + ...CampaignMerchantActivityBatchqueryModel.cs | 44 + ...tingCampaignMerchantActivityCreateModel.cs | 87 + ...tingCampaignMerchantActivityModifyModel.cs | 93 + ...ingCampaignMerchantActivityOfflineModel.cs | 42 + ...etingCampaignMerchantActivityQueryModel.cs | 24 + ...arketingCampaignOpenDeliveryCreateModel.cs | 36 + ...arketingCampaignOpenDeliveryDeleteModel.cs | 30 + ...KoubeiMarketingCampaignQrcodeQueryModel.cs | 18 + ...MarketingCampaignRecruitApplyQueryModel.cs | 30 + ...iMarketingCampaignRecruitShopQueryModel.cs | 48 + ...beiMarketingCampaignRetailDmCreateModel.cs | 110 + ...beiMarketingCampaignRetailDmModifyModel.cs | 122 + ...ubeiMarketingCampaignRetailDmQueryModel.cs | 18 + ...KoubeiMarketingCampaignRetailDmSetModel.cs | 30 + ...beiMarketingCampaignUserAssetQueryModel.cs | 36 + ...arketingCampaignVoucherDetailQueryModel.cs | 24 + ...iMarketingDataActivityBillDownloadModel.cs | 18 + ...eiMarketingDataActivityReportQueryModel.cs | 24 + ...arketingDataAlisisReportBatchqueryModel.cs | 24 + ...ubeiMarketingDataAlisisReportQueryModel.cs | 26 + ...ngDataBizadviserMemberprofileQueryModel.cs | 18 + ...tingDataBizadviserMyddsreportQueryModel.cs | 24 + ...rketingDataBizadviserMyreportQueryModel.cs | 30 + ...arketingDataCustomreportBatchqueryModel.cs | 24 + ...beiMarketingDataCustomreportDeleteModel.cs | 18 + ...rketingDataCustomreportDetailQueryModel.cs | 18 + ...ubeiMarketingDataCustomreportQueryModel.cs | 32 + ...oubeiMarketingDataCustomreportSaveModel.cs | 18 + ...arketingDataDishdiagnoseBatchqueryModel.cs | 36 + ...etingDataEnterpriseStaffinfoUploadModel.cs | 38 + .../KoubeiMarketingDataIndicatorQueryModel.cs | 48 + ...arketingDataIntelligentEffectQueryModel.cs | 30 + ...etingDataIntelligentIndicatorQueryModel.cs | 42 + .../KoubeiMarketingDataIsvShopQueryModel.cs | 20 + .../KoubeiMarketingDataMallCheckGetModel.cs | 26 + ...ubeiMarketingDataMallDiscountQueryModel.cs | 18 + ...beiMarketingDataMallIndicatorQueryModel.cs | 48 + ...oubeiMarketingDataMallRecommendGetModel.cs | 56 + ...beiMarketingDataMallShopitemsQueryModel.cs | 66 + ...ubeiMarketingDataMemberReportQueryModel.cs | 18 + .../KoubeiMarketingDataMessageDeliverModel.cs | 30 + .../KoubeiMarketingDataNearmallQueryModel.cs | 72 + .../KoubeiMarketingDataRetailDmQueryModel.cs | 26 + ...iMarketingDataSceneMemberpointsGetModel.cs | 42 + ...KoubeiMarketingDataSceneParkingGetModel.cs | 42 + ...MarketingDataSceneParkingoutUploadModel.cs | 42 + .../KoubeiMarketingDataSceneTravelGetModel.cs | 42 + ...KoubeiMarketingDataShopCategoryGetModel.cs | 24 + ...eiMarketingDataSmartactivityConfigModel.cs | 18 + ...MarketingDataSmartactivityForecastModel.cs | 30 + ...oubeiMarketingDataTradeHabbitQueryModel.cs | 24 + .../KoubeiMarketingMallMemberModifyModel.cs | 24 + ...beiMarketingMallShoppromoinfoQueryModel.cs | 26 + .../KoubeiMarketingMallTradeBindModel.cs | 24 + .../KoubeiMarketingMallTradeSubscribeModel.cs | 24 + ...KoubeiMarketingTessssssssssstQueryModel.cs | 42 + ...oubeiMarketingToolIsvMerchantQueryModel.cs | 24 + .../KoubeiMarketingToolMallPointsSyncModel.cs | 72 + .../KoubeiMarketingToolPointsQueryModel.cs | 24 + .../KoubeiMarketingToolPointsUpdateModel.cs | 66 + .../KoubeiMarketingToolPrizesendAuthModel.cs | 30 + .../KoubeiMemberDataDesdBatchqueryModel.cs | 24 + .../Domain/KoubeiMemberDataIsvCreateModel.cs | 78 + .../KoubeiMemberDataItemBigbuyQueryModel.cs | 44 + .../KoubeiMemberDataItemNearbyQueryModel.cs | 54 + .../Domain/KoubeiMemberDataOauthQueryModel.cs | 30 + .../KoubeiMemberDataOutuserinfoModifyModel.cs | 60 + .../Domain/KoubeiMemberDataTagQueryModel.cs | 30 + .../KoubeiMerchantDepartmentBatchBindModel.cs | 38 + .../KoubeiMerchantDepartmentCreateModel.cs | 36 + .../KoubeiMerchantDepartmentDeleteModel.cs | 24 + ...oubeiMerchantDepartmentDetailQueryModel.cs | 18 + .../KoubeiMerchantDepartmentModifyModel.cs | 42 + ...KoubeiMerchantDepartmentShopModifyModel.cs | 45 + ...KoubeiMerchantDepartmentShopsQueryModel.cs | 30 + .../KoubeiMerchantDepartmentTreeQueryModel.cs | 30 + ...oubeiMerchantDeviceCrashinfoUploadModel.cs | 60 + ...oubeiMerchantDeviceHeartbeatUploadModel.cs | 138 + .../KoubeiMerchantInfoSimpleQueryModel.cs | 18 + ...beiMerchantKbcloudSubuserinfoQueryModel.cs | 18 + ...hantKbcloudSubuserloginstatusQueryModel.cs | 24 + ...MerchantKbcloudSubuserlogoutEffectModel.cs | 18 + ...iMerchantKbdeviceDevicesBatchqueryModel.cs | 24 + ...ubeiMerchantKbdeviceDispenserQueryModel.cs | 18 + .../KoubeiMerchantOperatorBatchDeleteModel.cs | 26 + .../KoubeiMerchantOperatorCreateModel.cs | 84 + ...KoubeiMerchantOperatorDetailsQueryModel.cs | 24 + .../KoubeiMerchantOperatorFreezeModel.cs | 24 + .../KoubeiMerchantOperatorModifyModel.cs | 84 + .../KoubeiMerchantOperatorRoleCreateModel.cs | 30 + .../KoubeiMerchantOperatorRoleDeleteModel.cs | 24 + .../KoubeiMerchantOperatorRoleQueryModel.cs | 24 + ...eiMerchantOperatorRolerelationBindModel.cs | 32 + ...eiMerchantOperatorSearchBatchqueryModel.cs | 38 + .../KoubeiMerchantOperatorSearchQueryModel.cs | 71 + .../KoubeiMerchantOperatorShopQueryModel.cs | 24 + .../KoubeiMerchantOperatorUnfreezeModel.cs | 24 + .../AliPay/Domain/KoubeiMerchantRole.cs | 42 + .../KoubeiMerchantRoleDetailQueryModel.cs | 24 + ...KoubeiMerchantRolePermissionCreateModel.cs | 45 + .../Domain/KoubeiMerchantShopQueryModel.cs | 24 + .../AliPay/Domain/KoubeiOperationContext.cs | 18 + ...iQualityTestCloudacptActivityQueryModel.cs | 24 + ...ubeiQualityTestCloudacptBatchQueryModel.cs | 30 + ...lityTestCloudacptCheckresultSubmitModel.cs | 54 + ...oubeiQualityTestCloudacptItemQueryModel.cs | 36 + ...eiQualityTestShieldCaselaunchApplyModel.cs | 30 + ...KoubeiQualityTestShieldOrderCreateModel.cs | 80 + .../KoubeiQualityTestShieldResultSyncModel.cs | 56 + ...ubeiQualityTestShieldTestcaseQueryModel.cs | 30 + ...oubeiRetailExtitemShopextitemQueryModel.cs | 30 + .../Domain/KoubeiRetailInstanceQueryModel.cs | 30 + .../KoubeiRetailInstanceTransferModel.cs | 26 + .../Domain/KoubeiRetailItemQueryModel.cs | 24 + .../Domain/KoubeiRetailKbcodeCreateModel.cs | 38 + .../Domain/KoubeiRetailKbcodeQueryModel.cs | 30 + .../Domain/KoubeiRetailMallCdpQueryModel.cs | 18 + .../KoubeiRetailShopitemBatchqueryModel.cs | 20 + .../Domain/KoubeiRetailShopitemModifyModel.cs | 54 + .../Domain/KoubeiRetailShopitemUploadModel.cs | 20 + .../KoubeiRetailTopinstanceQueryModel.cs | 18 + ...KoubeiRetailWmsBatchinventoryQueryModel.cs | 32 + .../KoubeiRetailWmsCategoryQueryModel.cs | 24 + ...RetailWmsDeliveryorderprocessQueryModel.cs | 18 + ...oubeiRetailWmsDeliverypackageQueryModel.cs | 36 + .../KoubeiRetailWmsGoodsBatchqueryModel.cs | 20 + .../Domain/KoubeiRetailWmsGoodsQueryModel.cs | 66 + ...lWmsGoodssafetyinventoryBatchqueryModel.cs | 26 + ...etailWmsGoodssafetyinventoryModifyModel.cs | 20 + ...beiRetailWmsInboundorderBatchqueryModel.cs | 33 + ...KoubeiRetailWmsInboundorderConfirmModel.cs | 36 + .../KoubeiRetailWmsInboundorderCreateModel.cs | 32 + .../KoubeiRetailWmsInboundorderQueryModel.cs | 30 + .../KoubeiRetailWmsInboundworkConfirmModel.cs | 30 + .../KoubeiRetailWmsInboundworkCreateModel.cs | 50 + .../KoubeiRetailWmsInboundworkDeleteModel.cs | 24 + .../KoubeiRetailWmsInboundworkModifyModel.cs | 44 + ...KoubeiRetailWmsInventoryBatchqueryModel.cs | 38 + .../KoubeiRetailWmsInventoryQueryModel.cs | 54 + ...oubeiRetailWmsInventoryrecordQueryModel.cs | 78 + ...eiRetailWmsOutboundorderBatchqueryModel.cs | 33 + ...oubeiRetailWmsOutboundorderConfirmModel.cs | 36 + ...KoubeiRetailWmsOutboundorderCreateModel.cs | 32 + .../KoubeiRetailWmsOutboundorderQueryModel.cs | 30 + ...KoubeiRetailWmsOutboundworkConfirmModel.cs | 30 + .../KoubeiRetailWmsOutboundworkCreateModel.cs | 50 + .../KoubeiRetailWmsOutboundworkDeleteModel.cs | 24 + .../KoubeiRetailWmsOutboundworkModifyModel.cs | 44 + .../KoubeiRetailWmsPartnerQueryModel.cs | 26 + .../KoubeiRetailWmsProducerBatchqueryModel.cs | 20 + .../KoubeiRetailWmsProducerQueryModel.cs | 24 + .../KoubeiRetailWmsSupplierQueryModel.cs | 26 + ...KoubeiRetailWmsSupplierreportQueryModel.cs | 54 + ...RetailWmsSupplierreportdetailQueryModel.cs | 18 + .../KoubeiRetailWmsWarehouseModifyModel.cs | 30 + .../KoubeiRetailWmsWarehouseQueryModel.cs | 54 + .../KoubeiRetailWmsWorkBatchqueryModel.cs | 78 + .../Domain/KoubeiRetailWmsWorkQueryModel.cs | 24 + ...bassetStuffCancelstockinorderQueryModel.cs | 30 + ...assetStuffCancelstockoutorderQueryModel.cs | 30 + ...KbassetStuffFeedbackstockorderSyncModel.cs | 30 + ...sKbassetStuffInventoryrealtimeSyncModel.cs | 32 + ...esKbassetStuffLogisticsinstockSyncModel.cs | 68 + ...sKbassetStuffLogisticsoutstockSyncModel.cs | 80 + ...iSalesKbassetStuffOrdersresultSyncModel.cs | 20 + ...KbassetStuffPagequerystuffinfoSyncModel.cs | 30 + ...KbassetStuffProduceorderBatchqueryModel.cs | 18 + ...bassetStuffProduceqrcodeBatchqueryModel.cs | 30 + ...alesKbassetStuffPurchaseorderQueryModel.cs | 18 + ...iSalesKbassetStuffPurordersendSyncModel.cs | 20 + ...iSalesKbassetStuffQrcodereturnSyncModel.cs | 20 + ...ssetStuffQuerygoodsreturnordeQueryModel.cs | 30 + ...KbassetStuffQuerystockinorderQueryModel.cs | 30 + ...bassetStuffQuerystockoutorderQueryModel.cs | 30 + ...bassetStuffStockoutorderstatusSyncModel.cs | 50 + .../Domain/KoubeiSalesKbsalesShopSyncModel.cs | 84 + .../KoubeiSalesLeadsSaleleadsCreateModel.cs | 50 + .../KoubeiSalesLeadsShopleadsCreateModel.cs | 120 + .../KoubeiSecurityRiskEventSendModel.cs | 42 + ...KoubeiServindustryExerciseItemSyncModel.cs | 32 + ...eiServindustryExerciseMemberCreateModel.cs | 80 + ...eiServindustryExerciseMemberDeleteModel.cs | 36 + ...eiServindustryExerciseMemberModifyModel.cs | 68 + ...ervindustryExerciseMemberphoneSyncModel.cs | 26 + ...eiServindustryExerciseNoticeCreateModel.cs | 84 + ...ubeiServindustryExercisePlanDeleteModel.cs | 54 + ...KoubeiServindustryExercisePlanSyncModel.cs | 38 + ...ServindustryExercisePlancourseSyncModel.cs | 38 + ...eiServindustryExerciseRecordDeleteModel.cs | 54 + ...ubeiServindustryExerciseRecordSyncModel.cs | 38 + ...rvindustryExerciseRecordcourseSyncModel.cs | 38 + ...iServindustryLeadsRecordBatchqueryModel.cs | 36 + ...dustryNatatoriumWaterqualityUploadModel.cs | 180 + ...beiServindustryPortfolioDataCreateModel.cs | 56 + ...beiServindustryPortfolioDataDeleteModel.cs | 24 + ...beiServindustryPortfolioDataModifyModel.cs | 50 + ...ervindustryPortfolioOpusBatchqueryModel.cs | 36 + ...beiServindustryPortfolioOpusCreateModel.cs | 38 + ...beiServindustryPortfolioOpusDeleteModel.cs | 26 + ...ervindustryPortfolioShopBatchqueryModel.cs | 36 + ...dustryPromoIntelligentguideConsultModel.cs | 24 + ...industryPromoIntelligentguideOrderModel.cs | 26 + ...vindustryPromoIntelligentguideSyncModel.cs | 26 + ...ervindustryReservationIsvorderSyncModel.cs | 36 + ...ServindustryReservationLeadsModifyModel.cs | 42 + ...industryReservationPayshopIdentifyModel.cs | 18 + ...ervindustryReservationResourceSyncModel.cs | 36 + ...ustryReservationResourcestatusSyncModel.cs | 68 + ...beiServindustryReservationShopBindModel.cs | 36 + ...iServindustryReservationShopUnbindModel.cs | 42 + ...KoubeiServindustryShopLicenseQueryModel.cs | 18 + .../Domain/KoubeiShopExternalDataSyncModel.cs | 48 + .../Domain/KoubeiShopMallAuditQueryModel.cs | 18 + .../Domain/KoubeiShopMallCardQueryModel.cs | 18 + .../KoubeiShopMallMemberIdentifyModel.cs | 24 + .../Domain/KoubeiShopMallMemberQueryModel.cs | 24 + .../Domain/KoubeiShopMallPageModifyModel.cs | 30 + .../Domain/KoubeiShopMallPageQueryModel.cs | 18 + .../Domain/KoubeiShopWxloginQueryModel.cs | 36 + .../KoubeiTradeBillDownloadurlQueryModel.cs | 36 + .../AliPay/Domain/KoubeiTradeItemBuyModel.cs | 90 + .../Domain/KoubeiTradeItemorderBuyModel.cs | 74 + .../Domain/KoubeiTradeItemorderQueryModel.cs | 18 + .../Domain/KoubeiTradeItemorderRefundModel.cs | 38 + ...KoubeiTradeKbdeliveryDeliveryApplyModel.cs | 48 + ...oubeiTradeKbdeliveryDeliveryCancelModel.cs | 24 + .../KoubeiTradeKbpaymentPayorderSyncModel.cs | 68 + .../KoubeiTradeOrderAggregateConsultModel.cs | 54 + .../KoubeiTradeOrderAggregatePayModel.cs | 66 + .../KoubeiTradeOrderAggregateQueryModel.cs | 36 + .../KoubeiTradeOrderAggregateRefundModel.cs | 48 + .../Domain/KoubeiTradeOrderConsultModel.cs | 56 + .../KoubeiTradeOrderEnterpriseQueryModel.cs | 30 + .../KoubeiTradeOrderEnterpriseSettleModel.cs | 108 + .../Domain/KoubeiTradeOrderPrecreateModel.cs | 36 + .../Domain/KoubeiTradeOrderQueryModel.cs | 18 + .../KoubeiTradeOrderRefundQueryModel.cs | 36 + .../Domain/KoubeiTradePosDataSyncModel.cs | 24 + .../Domain/KoubeiTradeTicketSendCloseModel.cs | 42 + .../KoubeiTradeTicketTicketcodeCancelModel.cs | 48 + ...radeTicketTicketcodeCheckavailableModel.cs | 54 + .../KoubeiTradeTicketTicketcodeDelayModel.cs | 42 + .../KoubeiTradeTicketTicketcodeQueryModel.cs | 24 + .../KoubeiTradeTicketTicketcodeSendModel.cs | 56 + .../KoubeiTradeTicketTicketcodeSyncModel.cs | 54 + .../KoubeiTradeTicketTicketcodeUseModel.cs | 60 + .../KoubeiTradeTicketUsedRefundModel.cs | 30 + ...ubeiTradeTicketUserticketcodeQueryModel.cs | 30 + .../Domain/KoubeiTradeVoucherItemTemplete.cs | 76 + PaymentSDK/AliPay/Domain/LabelContext.cs | 18 + PaymentSDK/AliPay/Domain/LabelFilter.cs | 32 + PaymentSDK/AliPay/Domain/LabelForOpenapi.cs | 24 + PaymentSDK/AliPay/Domain/LabelRule.cs | 30 + .../AliPay/Domain/LawsuitPersonRecord.cs | 41 + PaymentSDK/AliPay/Domain/LawsuitRecord.cs | 62 + PaymentSDK/AliPay/Domain/LeadsOrderInfo.cs | 102 + .../AliPay/Domain/LegalRepresentativeInfo.cs | 48 + .../AliPay/Domain/LegalRepresentativeVO.cs | 24 + PaymentSDK/AliPay/Domain/LendingRecords.cs | 30 + PaymentSDK/AliPay/Domain/Liability.cs | 30 + .../AliPay/Domain/LiabilityQuoteInfo.cs | 48 + PaymentSDK/AliPay/Domain/LicenseInfo.cs | 66 + PaymentSDK/AliPay/Domain/LifeLabel.cs | 68 + .../AliPay/Domain/LifeRecommendArticles.cs | 48 + .../AliPay/Domain/ListListComplexMockModel.cs | 20 + PaymentSDK/AliPay/Domain/LoanApplyBudgetVO.cs | 62 + PaymentSDK/AliPay/Domain/LoanChargeInfo.cs | 30 + PaymentSDK/AliPay/Domain/LoanMoneyTypeAmt.cs | 60 + .../AliPay/Domain/LoanPayAssetResult.cs | 56 + .../AliPay/Domain/LoanPayConsultOrder.cs | 24 + .../AliPay/Domain/LoanPayInstallment.cs | 36 + PaymentSDK/AliPay/Domain/LoanPayUser.cs | 30 + PaymentSDK/AliPay/Domain/LoanRepayPlanTerm.cs | 60 + PaymentSDK/AliPay/Domain/LoanScheme.cs | 96 + PaymentSDK/AliPay/Domain/LoanTerm.cs | 24 + PaymentSDK/AliPay/Domain/LocationInfo.cs | 30 + PaymentSDK/AliPay/Domain/LoginForm.cs | 60 + PaymentSDK/AliPay/Domain/LogisticsDetail.cs | 18 + .../Domain/LogisticsExternalCarrierInfo.cs | 36 + .../AliPay/Domain/LogisticsExternalInfo.cs | 26 + PaymentSDK/AliPay/Domain/LogisticsInfo.cs | 30 + PaymentSDK/AliPay/Domain/LotteryPresent.cs | 66 + PaymentSDK/AliPay/Domain/LotteryType.cs | 24 + .../AliPay/Domain/MActivityDetailInfo.cs | 111 + PaymentSDK/AliPay/Domain/MBudgetInfo.cs | 30 + PaymentSDK/AliPay/Domain/MCardDetail.cs | 30 + .../AliPay/Domain/MEquityDisplayInfo.cs | 30 + PaymentSDK/AliPay/Domain/MEquityInfo.cs | 42 + PaymentSDK/AliPay/Domain/MEquityUseRule.cs | 40 + PaymentSDK/AliPay/Domain/MEquityValidInfo.cs | 48 + PaymentSDK/AliPay/Domain/MEquityWorthInfo.cs | 74 + PaymentSDK/AliPay/Domain/MExtInfo.cs | 24 + PaymentSDK/AliPay/Domain/MItemInfo.cs | 24 + PaymentSDK/AliPay/Domain/MMemberLevel.cs | 30 + PaymentSDK/AliPay/Domain/MPromoConstraint.cs | 57 + PaymentSDK/AliPay/Domain/MPromoInfo.cs | 44 + PaymentSDK/AliPay/Domain/MStepCashRule.cs | 24 + PaymentSDK/AliPay/Domain/MTimeControlInfo.cs | 30 + PaymentSDK/AliPay/Domain/MachineInfo.cs | 30 + PaymentSDK/AliPay/Domain/MachineType.cs | 48 + PaymentSDK/AliPay/Domain/MaintainBizOrder.cs | 42 + .../AliPay/Domain/MaintainBizOrderExpress.cs | 36 + .../AliPay/Domain/MaintainBizOrderGoods.cs | 60 + .../AliPay/Domain/MaintainBizOrderServer.cs | 48 + .../Domain/MaintainOrderStatusExtParams.cs | 48 + .../AliPay/Domain/MaintainVehicleInfo.cs | 135 + .../AliPay/Domain/MaitainShopProduct.cs | 84 + PaymentSDK/AliPay/Domain/MakePriceAgrs.cs | 24 + PaymentSDK/AliPay/Domain/MakePriceCards.cs | 42 + PaymentSDK/AliPay/Domain/MakePriceResult.cs | 30 + PaymentSDK/AliPay/Domain/MallCardBo.cs | 50 + PaymentSDK/AliPay/Domain/MallCardUpdate.cs | 42 + .../AliPay/Domain/MallConsumeVoucher.cs | 36 + .../AliPay/Domain/MallDiscountDetail.cs | 50 + PaymentSDK/AliPay/Domain/MallGoodsDetail.cs | 54 + PaymentSDK/AliPay/Domain/MallUserVerify.cs | 36 + PaymentSDK/AliPay/Domain/ManagerVO.cs | 24 + PaymentSDK/AliPay/Domain/MapParameter.cs | 24 + PaymentSDK/AliPay/Domain/MarketInfo.cs | 72 + PaymentSDK/AliPay/Domain/MarketResult.cs | 26 + PaymentSDK/AliPay/Domain/MarketingInfo.cs | 32 + .../AliPay/Domain/MarketingItemSelection.cs | 18 + .../AliPay/Domain/MarketingSelectionInfo.cs | 26 + PaymentSDK/AliPay/Domain/MaskedLogonIdView.cs | 30 + .../AliPay/Domain/MaskedUserCertView.cs | 30 + PaymentSDK/AliPay/Domain/Matcher.cs | 30 + PaymentSDK/AliPay/Domain/Material.cs | 32 + .../AliPay/Domain/MaterialCreateInfo.cs | 24 + PaymentSDK/AliPay/Domain/MaterialDetail.cs | 36 + PaymentSDK/AliPay/Domain/MaterialEntity.cs | 30 + PaymentSDK/AliPay/Domain/MaterialInfo.cs | 30 + .../AliPay/Domain/MaterialModifyInfo.cs | 24 + PaymentSDK/AliPay/Domain/MaterialUnit.cs | 30 + .../AliPay/Domain/McardNotifyMessage.cs | 30 + PaymentSDK/AliPay/Domain/McardStylInfo.cs | 30 + PaymentSDK/AliPay/Domain/McardTemplate.cs | 42 + .../AliPay/Domain/McardTemplateBenefit.cs | 50 + .../Domain/McardTemplateBenefitQuery.cs | 54 + PaymentSDK/AliPay/Domain/MdCodeInfoDTO.cs | 36 + PaymentSDK/AliPay/Domain/MediaContentList.cs | 30 + .../AliPay/Domain/MedicalHospitalDeptInfo.cs | 42 + .../Domain/MedicalHospitalDoctorInfo.cs | 30 + .../AliPay/Domain/MedicalHospitalInfo.cs | 30 + .../Domain/MedicalHospitalReportList.cs | 42 + .../Domain/MedicalSvTpCardActionInfo.cs | 30 + .../AliPay/Domain/MedicalSvTpCardBodyInfo.cs | 54 + .../AliPay/Domain/MedicalSvTpCardHeadInfo.cs | 24 + PaymentSDK/AliPay/Domain/Member.cs | 48 + PaymentSDK/AliPay/Domain/MemberActionModel.cs | 30 + PaymentSDK/AliPay/Domain/MemberAssetModel.cs | 18 + PaymentSDK/AliPay/Domain/MemberBenefitInfo.cs | 36 + .../AliPay/Domain/MemberBenefitModel.cs | 38 + PaymentSDK/AliPay/Domain/MemberInfo.cs | 48 + PaymentSDK/AliPay/Domain/MemberLevelModel.cs | 50 + .../AliPay/Domain/MemberOpenInfoModel.cs | 24 + PaymentSDK/AliPay/Domain/MemberPointsScene.cs | 54 + PaymentSDK/AliPay/Domain/MemberShip.cs | 42 + PaymentSDK/AliPay/Domain/MemoElement.cs | 24 + PaymentSDK/AliPay/Domain/MenuAnalysisData.cs | 54 + .../MerchantActivityModifyVoucherInfo.cs | 42 + .../Domain/MerchantActivityVoucherInfo.cs | 60 + .../Domain/MerchantApplyResultRecord.cs | 42 + .../Domain/MerchantBaseEnterOpenModel.cs | 30 + PaymentSDK/AliPay/Domain/MerchantCard.cs | 80 + .../AliPay/Domain/MerchantConfigRequest.cs | 78 + .../Domain/MerchantEffectQueryResult.cs | 78 + PaymentSDK/AliPay/Domain/MerchantIDInfo.cs | 30 + .../AliPay/Domain/MerchantInstConfig.cs | 36 + .../AliPay/Domain/MerchantInvoiceInfo.cs | 90 + .../AliPay/Domain/MerchantInvoiceInfoKt.cs | 90 + .../Domain/MerchantMemberTemplateModel.cs | 90 + PaymentSDK/AliPay/Domain/MerchantMenber.cs | 36 + PaymentSDK/AliPay/Domain/MerchantModel.cs | 42 + .../Domain/MerchantOnlineActivityOpenModel.cs | 110 + PaymentSDK/AliPay/Domain/MerchantScreenHit.cs | 24 + .../Domain/MerchantshopCommentResult.cs | 84 + .../Domain/MerchantshopCommentStatistic.cs | 24 + PaymentSDK/AliPay/Domain/MessageContext.cs | 54 + PaymentSDK/AliPay/Domain/MessageTemplate.cs | 24 + .../AliPay/Domain/MessageTemplateKeyword.cs | 24 + PaymentSDK/AliPay/Domain/MeterOpenModel.cs | 54 + .../AliPay/Domain/MetroOdDetailResult.cs | 32 + PaymentSDK/AliPay/Domain/MetroOdItem.cs | 48 + .../AliPay/Domain/MicroPayOrderDetail.cs | 84 + .../Domain/MiniActivityModuleQueryInfo.cs | 66 + .../AliPay/Domain/MiniAppBaseInfoQueryInfo.cs | 18 + .../Domain/MiniAppBaseInfoQueryResponse.cs | 90 + PaymentSDK/AliPay/Domain/MiniAppCategory.cs | 54 + .../AliPay/Domain/MiniAppCategoryInfo.cs | 48 + .../AliPay/Domain/MiniAppClientVersionInfo.cs | 24 + .../AliPay/Domain/MiniAppDeployResponse.cs | 84 + .../AliPay/Domain/MiniAppFirstCategoryInfo.cs | 32 + .../AliPay/Domain/MiniAppHistoryInfo.cs | 48 + .../Domain/MiniAppModelQueryResponse.cs | 26 + .../AliPay/Domain/MiniAppPackageInfo.cs | 30 + PaymentSDK/AliPay/Domain/MiniAppPluginInfo.cs | 30 + .../AliPay/Domain/MiniAppPluginReference.cs | 24 + .../Domain/MiniAppSecondCategoryInfo.cs | 24 + .../AliPay/Domain/MiniAppServiceInfo.cs | 90 + .../AliPay/Domain/MiniAppVersionBaseInfo.cs | 132 + .../AliPay/Domain/MiniAppVersionInfo.cs | 78 + .../AliPay/Domain/MiniAppVersionQueryInfo.cs | 18 + PaymentSDK/AliPay/Domain/MiniPackageInfo.cs | 42 + .../AliPay/Domain/MiniVersionBaseInfo.cs | 54 + .../AliPay/Domain/MiniappCloudDetailInfo.cs | 60 + PaymentSDK/AliPay/Domain/MobileAppInfo.cs | 44 + PaymentSDK/AliPay/Domain/ModelColumn.cs | 24 + PaymentSDK/AliPay/Domain/ModelMeta.cs | 38 + PaymentSDK/AliPay/Domain/ModelQueryParam.cs | 30 + PaymentSDK/AliPay/Domain/Money.cs | 24 + PaymentSDK/AliPay/Domain/MoreInfoDTO.cs | 38 + PaymentSDK/AliPay/Domain/MorphoAppItem.cs | 60 + PaymentSDK/AliPay/Domain/MorphoCreateApp.cs | 84 + .../AliPay/Domain/MorphoCreateSource.cs | 24 + PaymentSDK/AliPay/Domain/MorphoIdentity.cs | 18 + PaymentSDK/AliPay/Domain/MorphoMiniMeta.cs | 48 + PaymentSDK/AliPay/Domain/MorphoPaginator.cs | 36 + PaymentSDK/AliPay/Domain/MorphoSource.cs | 24 + PaymentSDK/AliPay/Domain/MorphoTemplate.cs | 18 + .../AliPay/Domain/MorphoTemplateItem.cs | 54 + PaymentSDK/AliPay/Domain/MorphoUser.cs | 24 + PaymentSDK/AliPay/Domain/MpPrizeInfoModel.cs | 72 + PaymentSDK/AliPay/Domain/MsgSendErrorData.cs | 30 + .../AliPay/Domain/MstDataSyncServiceEntity.cs | 42 + .../AliPay/Domain/MultiAppBaseInfoDto.cs | 42 + .../AliPay/Domain/MultiCurrencyMoney.cs | 24 + .../Domain/MultiCurrencyMoneyOpenApi.cs | 24 + .../AliPay/Domain/MultiCurrencyMoneyVO.cs | 24 + PaymentSDK/AliPay/Domain/MultiStagePayInfo.cs | 32 + .../AliPay/Domain/MultiStagePayLineInfo.cs | 24 + .../AliPay/Domain/MutipleCurrencyDetail.cs | 54 + PaymentSDK/AliPay/Domain/MyBkAccountVO.cs | 78 + PaymentSDK/AliPay/Domain/MyObjectDdd.cs | 24 + ...MybankCreditCreditriskConsultQueryModel.cs | 74 + ...nkCreditCreditriskDsddAdmitConsultModel.cs | 18 + ...ankCreditCreditriskGuarschemeQueryModel.cs | 30 + .../MybankCreditCreditriskWidgetQueryModel.cs | 18 + .../MybankCreditGuaranteeContractSignModel.cs | 36 + ...ybankCreditGuaranteeContractUnsignModel.cs | 24 + ...editGuaranteeSelleradmittanceQueryModel.cs | 24 + ...MybankCreditGuaranteeTradedrivePayModel.cs | 48 + .../MybankCreditGuaranteeWriteoffPayModel.cs | 68 + .../MybankCreditLoanapplyApplyCreateModel.cs | 140 + .../MybankCreditLoanapplyApplyQueryModel.cs | 42 + ...nkCreditLoanapplyArrangementCreateModel.cs | 54 + ...ankCreditLoanapplyArrangementQueryModel.cs | 42 + .../MybankCreditLoanapplyDataQueryModel.cs | 66 + .../MybankCreditLoanapplyDataUploadModel.cs | 60 + .../MybankCreditLoanapplyInsturlQueryModel.cs | 84 + ...itLoanapplyLocallifeBlacklistQueryModel.cs | 24 + ...ditLoanapplyPromotionDynamicurlGetModel.cs | 72 + .../MybankCreditLoanapplyQrcodeCreateModel.cs | 66 + ...CreditLoanapplyQrcodeInvalidDeleteModel.cs | 18 + ...tLoanapplySmartcountyLoaninfoQueryModel.cs | 18 + ...bankCreditLoantradeBillBudgetQueryModel.cs | 48 + ...MybankCreditLoantradeBillListQueryModel.cs | 66 + ...bankCreditLoantradeBillRepayCreateModel.cs | 48 + .../MybankCreditLoantradeLoanarCreateModel.cs | 194 + .../MybankCreditLoantradeLoanarQueryModel.cs | 24 + .../MybankCreditLoantradeLoanarRepayModel.cs | 42 + ...reditLoantradeLoanarrangementQueryModel.cs | 24 + ...CreditLoantradeLoanpayAssetConsultModel.cs | 56 + ...nkCreditLoantradeLoanrelationQueryModel.cs | 48 + ...CreditLoantradeLoanschemeFullQueryModel.cs | 98 + ...bankCreditLoantradeLoanschemeQueryModel.cs | 66 + ...CreditLoantradeNewloanarRepayApplyModel.cs | 72 + ...CreditLoantradePartnerPaymentApplyModel.cs | 87 + ...CreditLoantradePartnerPaymentQueryModel.cs | 18 + ...bankCreditLoantradePayAssetConsultModel.cs | 74 + ...ankCreditLoantradeRepayBudgetQueryModel.cs | 60 + ...ybankCreditLoantradeRepayCustApplyModel.cs | 92 + ...reditLoantradeRepayInitiativeApplyModel.cs | 60 + ...CreditLoantradeShoptransferConsultModel.cs | 42 + ...itProdarrangementContracttextQueryModel.cs | 30 + .../MybankCreditSceneprodBillQueryModel.cs | 42 + .../MybankCreditSceneprodBillSyncModel.cs | 80 + ...ybankCreditSceneprodDataBatchqueryModel.cs | 20 + .../MybankCreditSceneprodDataUploadModel.cs | 42 + ...MybankCreditSceneprodDrawdownApplyModel.cs | 68 + ...bankCreditSceneprodDrawdownConfirmModel.cs | 74 + ...ybankCreditSceneprodFinanceConsultModel.cs | 54 + ...bankCreditSceneprodInstAuthConsultModel.cs | 30 + .../MybankCreditSceneprodLoanApplyModel.cs | 114 + ...nkCreditSceneprodLoanAssetTransferModel.cs | 66 + .../MybankCreditSceneprodLoanCancelModel.cs | 54 + .../MybankCreditSceneprodLoanConfirmModel.cs | 72 + .../MybankCreditSceneprodLoanModifyModel.cs | 84 + .../MybankCreditSceneprodLoanQueryModel.cs | 48 + .../MybankCreditSceneprodPaymentApplyModel.cs | 105 + .../MybankCreditSceneprodPaymentQueryModel.cs | 18 + .../MybankCreditSceneprodPlanQueryModel.cs | 66 + ...MybankCreditSceneprodPreadmitQueryModel.cs | 54 + ...bankCreditSceneprodPrepaymentApplyModel.cs | 90 + ...ankCreditSceneprodRepayDeputyApplyModel.cs | 62 + .../MybankCreditSceneprodVidGetModel.cs | 48 + ...ybankCreditSupplychainArAdmitQueryModel.cs | 54 + .../MybankCreditSupplychainArSignModel.cs | 54 + .../MybankCreditSupplychainArUnsignModel.cs | 60 + ...ditSupplychainCreditpayAmountQueryModel.cs | 30 + ...reditSupplychainCreditpayBillQueryModel.cs | 36 + ...upplychainCreditpayBuyersignCreateModel.cs | 42 + ...plychainCreditpayBuyerunsignCreateModel.cs | 42 + ...hainCreditpayBuyerunsignadmitQueryModel.cs | 48 + ...editSupplychainCreditpayOrderQueryModel.cs | 60 + ...pplychainCreditpaySellersignCreateModel.cs | 54 + ...chainCreditpaySellersignadmitQueryModel.cs | 54 + ...lychainCreditpaySellerunsignCreateModel.cs | 60 + ...plychainCreditpaySellerunsignQueryModel.cs | 54 + ...SupplychainCreditpaySyncnameCreateModel.cs | 72 + ...editSupplychainCreditpayTradeQueryModel.cs | 36 + ...SupplychainFactoringSupplierCreateModel.cs | 144 + ...CreditSupplychainInventoryOutApplyModel.cs | 56 + ...editSupplychainInventoryOutConsultModel.cs | 56 + ...nkCreditSupplychainPrepaymentApplyModel.cs | 48 + ...kCreditSupplychainPrepaymentCancelModel.cs | 30 + ...pplychainTradeBillrepaybudgetQueryModel.cs | 36 + ...MybankCreditSupplychainTradeCancelModel.cs | 60 + ...MybankCreditSupplychainTradeCreateModel.cs | 90 + ...reditSupplychainTradeNettingRefundModel.cs | 66 + ...nkCreditSupplychainTradePayConfirmModel.cs | 36 + .../MybankCreditSupplychainTradePayModel.cs | 60 + ...CreditSupplychainTradePayableQueryModel.cs | 36 + .../MybankCreditUserBankcardBindModel.cs | 78 + .../MybankCreditUserCertifyOpenQueryModel.cs | 18 + .../MybankCreditUserInfoShareQueryModel.cs | 18 + ...MybankCreditUserOpenCertifyCertifyModel.cs | 18 + ...ankCreditUserOpenCertifyInitializeModel.cs | 42 + .../Domain/MybankCreditUserRoleCreateModel.cs | 42 + .../Domain/MybankCreditUserRoleQueryModel.cs | 18 + ...reditUserSitememberEnterpriseMatchModel.cs | 42 + .../MybankCreditUserSystemOauthQueryModel.cs | 30 + ...nkFinanceAccountRysenterpriseQueryModel.cs | 54 + .../MybankFinanceYulibaoAccountQueryModel.cs | 18 + ...ybankFinanceYulibaoCapitalPurchaseModel.cs | 36 + .../MybankFinanceYulibaoCapitalRansomModel.cs | 42 + .../MybankFinanceYulibaoPriceQueryModel.cs | 30 + ...ankFinanceYulibaoTransHistoryQueryModel.cs | 42 + ...kMarketingCampaignPrizeListConsultModel.cs | 66 + ...ankMarketingCampaignPrizeListQueryModel.cs | 42 + ...ntTradeAccountSubvirtualcardCreateModel.cs | 30 + .../MybankPaymentTradeBankBranchQueryModel.cs | 36 + .../MybankPaymentTradeBankRootQueryModel.cs | 18 + ...bankPaymentTradeDepositVerifyApplyModel.cs | 54 + ...bankPaymentTradeDepositVerifyMatchModel.cs | 30 + ...bankPaymentTradeDepositVerifyQueryModel.cs | 18 + .../MybankPaymentTradeDistrictQueryModel.cs | 18 + ...ankPaymentTradeFinancingOrderCloseModel.cs | 54 + ...nkPaymentTradeFinancingOrderCreateModel.cs | 114 + ...nkPaymentTradeFinancingOrderRefundModel.cs | 72 + ...kPaymentTradeNormalpayOperateQueryModel.cs | 24 + ...nkPaymentTradeNormalpayOrderCreateModel.cs | 90 + ...entTradeNormalpayOrderCreateandpayModel.cs | 72 + ...PaymentTradeNormalpayOrderDisburseModel.cs | 72 + ...ybankPaymentTradeNormalpayOrderPayModel.cs | 78 + ...ankPaymentTradeNormalpayOrderQueryModel.cs | 18 + ...ybankPaymentTradeNormalpayTransferModel.cs | 72 + .../MybankPaymentTradeOrderCreateModel.cs | 86 + .../MybankPaymentTradeQrcodeCreateModel.cs | 120 + .../MybankPaymentTradeQrcodeDeleteModel.cs | 18 + ...deUserclassificationCreateormodifyModel.cs | 30 + PaymentSDK/AliPay/Domain/NameOuterIdPair.cs | 24 + PaymentSDK/AliPay/Domain/NearMallBo.cs | 54 + PaymentSDK/AliPay/Domain/NearbyAddressInfo.cs | 48 + PaymentSDK/AliPay/Domain/NearbyGoods.cs | 102 + PaymentSDK/AliPay/Domain/Neighborhood.cs | 24 + .../Domain/NetFlowDeviceOfferInfoResponse.cs | 42 + PaymentSDK/AliPay/Domain/NetFlowOfferInfo.cs | 36 + PaymentSDK/AliPay/Domain/NetValueVO.cs | 36 + PaymentSDK/AliPay/Domain/NewsfeedLabelInfo.cs | 30 + .../AliPay/Domain/NewsfeedLocationInfo.cs | 30 + .../AliPay/Domain/NewsfeedMediaGiftInfo.cs | 66 + PaymentSDK/AliPay/Domain/NewsfeedMediaImg.cs | 30 + .../AliPay/Domain/NewsfeedMediaLinkInfo.cs | 54 + .../AliPay/Domain/NewsfeedMediaVideoInfo.cs | 36 + .../AliPay/Domain/NewsfeedWithMeInfo.cs | 24 + PaymentSDK/AliPay/Domain/NextUrl.cs | 24 + .../AliPay/Domain/NormalBusinessTimeRule.cs | 34 + PaymentSDK/AliPay/Domain/NotaryFileVO.cs | 24 + .../AliPay/Domain/NoticeTemplateArgs.cs | 18 + PaymentSDK/AliPay/Domain/NotifyParam.cs | 36 + PaymentSDK/AliPay/Domain/OcrIdentifyResult.cs | 186 + PaymentSDK/AliPay/Domain/OcrNormalScanInfo.cs | 42 + PaymentSDK/AliPay/Domain/OcrPlaneScanInfo.cs | 60 + PaymentSDK/AliPay/Domain/OcrTaxiScanInfo.cs | 60 + PaymentSDK/AliPay/Domain/OcrTrainScanInfo.cs | 60 + PaymentSDK/AliPay/Domain/OfferObject.cs | 84 + .../Domain/OfflineInviteNewerDetailInfo.cs | 84 + .../Domain/OfflineInviteNewerSummaryInfo.cs | 78 + .../Domain/OfflinepayBaseRPCResponseInfo.cs | 36 + .../AliPay/Domain/OfflinepayErrorIndicator.cs | 72 + PaymentSDK/AliPay/Domain/OilStationDetails.cs | 54 + .../AliPay/Domain/OldComplextMockModel.cs | 30 + .../Domain/OldListListComplexMockModel.cs | 20 + .../Domain/OnlineInviteNewerDetailInfo.cs | 48 + .../Domain/OnlineInviteNewerSummaryInfo.cs | 54 + PaymentSDK/AliPay/Domain/OpenActivity.cs | 48 + .../Domain/OpenApiAppleRequestHeader.cs | 24 + PaymentSDK/AliPay/Domain/OpenApiPassStatus.cs | 24 + .../Domain/OpenApiProvisioningBundle.cs | 36 + .../Domain/OpenApiRefundFundDetailPojo.cs | 38 + .../AliPay/Domain/OpenApiResolutionMethod.cs | 36 + .../AliPay/Domain/OpenApiResponseHeader.cs | 42 + .../Domain/OpenApiRoyaltyDetailInfoPojo.cs | 60 + .../AliPay/Domain/OpenApiSignQueryResponse.cs | 72 + .../AliPay/Domain/OpenApiValidStrategy.cs | 42 + .../AliPay/Domain/OpenAppDeployPackageVO.cs | 36 + PaymentSDK/AliPay/Domain/OpenBatch.cs | 30 + PaymentSDK/AliPay/Domain/OpenCertPic.cs | 24 + PaymentSDK/AliPay/Domain/OpenFormFieldDO.cs | 24 + PaymentSDK/AliPay/Domain/OpenItem.cs | 30 + PaymentSDK/AliPay/Domain/OpenPromoBudget.cs | 24 + PaymentSDK/AliPay/Domain/OpenPromoCamp.cs | 48 + PaymentSDK/AliPay/Domain/OpenPromoPrize.cs | 119 + .../AliPay/Domain/OpenPromoPrizeDimension.cs | 26 + .../Domain/OpenPromoPrizeRelativeTime.cs | 24 + PaymentSDK/AliPay/Domain/OperateContext.cs | 30 + PaymentSDK/AliPay/Domain/OperationAddress.cs | 42 + .../AliPay/Domain/OperationExtDataModel.cs | 36 + PaymentSDK/AliPay/Domain/OperatorAccountVO.cs | 24 + PaymentSDK/AliPay/Domain/OperatorAddVO.cs | 74 + PaymentSDK/AliPay/Domain/OperatorBaseInfo.cs | 78 + PaymentSDK/AliPay/Domain/OperatorBasicInfo.cs | 93 + PaymentSDK/AliPay/Domain/OperatorContactVO.cs | 24 + PaymentSDK/AliPay/Domain/OperatorInfo.cs | 48 + PaymentSDK/AliPay/Domain/OperatorInfoModel.cs | 92 + PaymentSDK/AliPay/Domain/OperatorQuery.cs | 30 + PaymentSDK/AliPay/Domain/Option.cs | 24 + .../AliPay/Domain/OpusCreateResponse.cs | 24 + PaymentSDK/AliPay/Domain/OpusInfo.cs | 54 + .../AliPay/Domain/OrderApplyStatusBriefDTO.cs | 24 + PaymentSDK/AliPay/Domain/OrderDetail.cs | 98 + PaymentSDK/AliPay/Domain/OrderDetailResult.cs | 60 + PaymentSDK/AliPay/Domain/OrderExt.cs | 24 + PaymentSDK/AliPay/Domain/OrderExtInfo.cs | 24 + PaymentSDK/AliPay/Domain/OrderItem.cs | 138 + .../AliPay/Domain/OrderLogisticsExtInfo.cs | 24 + .../AliPay/Domain/OrderLogisticsInfo.cs | 54 + .../Domain/OrderLogisticsInformation.cs | 48 + .../OrderLogisticsInformationRequest.cs | 24 + PaymentSDK/AliPay/Domain/OrderRefundInfo.cs | 24 + PaymentSDK/AliPay/Domain/OrderShopInfo.cs | 42 + .../AliPay/Domain/OrderShopInfoResult.cs | 36 + PaymentSDK/AliPay/Domain/OrderVO.cs | 60 + PaymentSDK/AliPay/Domain/Org.cs | 54 + PaymentSDK/AliPay/Domain/OriDestOdItem.cs | 36 + PaymentSDK/AliPay/Domain/OriTxnInfo.cs | 30 + PaymentSDK/AliPay/Domain/OtherAmountInfos.cs | 24 + PaymentSDK/AliPay/Domain/OutDiscountInfo.cs | 30 + PaymentSDK/AliPay/Domain/OutStockStuffInfo.cs | 30 + PaymentSDK/AliPay/Domain/OutboundOrder.cs | 54 + PaymentSDK/AliPay/Domain/OutboundOrderLine.cs | 60 + PaymentSDK/AliPay/Domain/OutboundOrderVO.cs | 90 + PaymentSDK/AliPay/Domain/OuterAttachment.cs | 42 + PaymentSDK/AliPay/Domain/OuterGroup.cs | 81 + PaymentSDK/AliPay/Domain/OuterMemberInfo.cs | 18 + PaymentSDK/AliPay/Domain/OuterPlan.cs | 96 + PaymentSDK/AliPay/Domain/OuterShopDO.cs | 30 + .../AliPay/Domain/OuterTargetingItem.cs | 26 + .../AliPay/Domain/OverseasTravelRate.cs | 30 + PaymentSDK/AliPay/Domain/PItemInfoVO.cs | 36 + PaymentSDK/AliPay/Domain/POIinfo.cs | 66 + .../AliPay/Domain/PackageItemOpenInfo.cs | 78 + PaymentSDK/AliPay/Domain/PageCreative.cs | 26 + PaymentSDK/AliPay/Domain/PageInfo.cs | 30 + .../AliPay/Domain/PageVisitDataResponse.cs | 30 + .../AliPay/Domain/PaginationCommGroup.cs | 44 + PaymentSDK/AliPay/Domain/PaginationCook.cs | 44 + PaymentSDK/AliPay/Domain/PaginationDish.cs | 44 + PaymentSDK/AliPay/Domain/Pair.cs | 24 + PaymentSDK/AliPay/Domain/Paragraph.cs | 26 + PaymentSDK/AliPay/Domain/ParamExtInfo.cs | 30 + PaymentSDK/AliPay/Domain/ParamModel.cs | 96 + .../AliPay/Domain/ParkingGoodsDetail.cs | 150 + PaymentSDK/AliPay/Domain/ParkingOutScene.cs | 42 + PaymentSDK/AliPay/Domain/ParkingScene.cs | 36 + PaymentSDK/AliPay/Domain/Participant.cs | 48 + PaymentSDK/AliPay/Domain/PartnerVO.cs | 36 + .../AliPay/Domain/PassInfoOpenApiModel.cs | 86 + .../AliPay/Domain/PassInstanceDetail.cs | 116 + .../AliPay/Domain/PassTemplateDetail.cs | 44 + ...ayForPrivilegeCardTemplateAuxiliaryItem.cs | 42 + .../PayForPrivilegeCardTemplateConfig.cs | 40 + ...PayForPrivilegeCardTemplateHeaderConfig.cs | 30 + ...ayForPrivilegeCardTemplateOperationItem.cs | 24 + ...ayForPrivilegeCardTemplateSecondaryItem.cs | 30 + .../PayForPrivilegePaidVoucherConfig.cs | 24 + .../PayForPrivilegePromotionPlanInfo.cs | 74 + .../PayForPrivilegeRechargeCardUseLog.cs | 60 + .../Domain/PayForPrivilegeUserRelation.cs | 48 + PaymentSDK/AliPay/Domain/PayModeModel.cs | 72 + PaymentSDK/AliPay/Domain/PayOffOrderVO.cs | 42 + .../Domain/PaymentAbilityPostbackResponse.cs | 24 + .../Domain/PaymentAbilityQueryResponse.cs | 30 + .../AliPay/Domain/PaymentAccountInfo.cs | 42 + PaymentSDK/AliPay/Domain/PaymentCredential.cs | 36 + .../AliPay/Domain/PaymentInformation.cs | 30 + PaymentSDK/AliPay/Domain/PaymentItems.cs | 54 + PaymentSDK/AliPay/Domain/PaymentList.cs | 74 + PaymentSDK/AliPay/Domain/PaymentSchedule.cs | 66 + .../Domain/PaymentSuccessPagePlanInfo.cs | 86 + .../Domain/PaytoolCancelRequestDetail.cs | 24 + .../Domain/PaytoolRefundRequestDetail.cs | 30 + .../Domain/PaytoolRefundResultDetail.cs | 56 + .../AliPay/Domain/PaytoolRequestDetail.cs | 42 + .../AliPay/Domain/PaytoolResultDetail.cs | 68 + PaymentSDK/AliPay/Domain/PeriodInfo.cs | 24 + PaymentSDK/AliPay/Domain/PeriodRuleParams.cs | 48 + PaymentSDK/AliPay/Domain/Person.cs | 36 + .../AliPay/Domain/PersonalityInfoDTO.cs | 42 + .../AliPay/Domain/PersonnalBankAccountInfo.cs | 36 + PaymentSDK/AliPay/Domain/Picture.cs | 24 + PaymentSDK/AliPay/Domain/PidShopInfo.cs | 26 + PaymentSDK/AliPay/Domain/PintuanUserInfo.cs | 30 + PaymentSDK/AliPay/Domain/PintuanUserInfos.cs | 18 + PaymentSDK/AliPay/Domain/PkgAuthRelation.cs | 30 + .../AliPay/Domain/PlanOperateContent.cs | 24 + PaymentSDK/AliPay/Domain/PlanRule.cs | 48 + PaymentSDK/AliPay/Domain/PlantPlace.cs | 60 + PaymentSDK/AliPay/Domain/PlateInfoForYiCai.cs | 38 + PaymentSDK/AliPay/Domain/PoiQueryResult.cs | 290 + PaymentSDK/AliPay/Domain/PoiSyncData.cs | 32 + PaymentSDK/AliPay/Domain/PointAccountLog.cs | 72 + PaymentSDK/AliPay/Domain/PointCard.cs | 48 + PaymentSDK/AliPay/Domain/PointLibResult.cs | 42 + PaymentSDK/AliPay/Domain/PointPrizeInfo.cs | 66 + PaymentSDK/AliPay/Domain/PointTransInfo.cs | 42 + .../AliPay/Domain/PointsExchangeInfo.cs | 26 + .../Domain/PortfolioDetailProductInfo.cs | 48 + .../AliPay/Domain/PortfolioInfoOpenModel.cs | 42 + .../AliPay/Domain/PortfolioOperatorInfo.cs | 24 + PaymentSDK/AliPay/Domain/PortfolioShop.cs | 24 + .../AliPay/Domain/PortraitDistribution.cs | 30 + PaymentSDK/AliPay/Domain/PosBillPayChannel.cs | 80 + .../AliPay/Domain/PosChooseDishGroupModel.cs | 24 + .../AliPay/Domain/PosCookDishCateModel.cs | 36 + .../Domain/PosCookDishQryDetailModel.cs | 84 + .../AliPay/Domain/PosCookDishQryModel.cs | 27 + PaymentSDK/AliPay/Domain/PosDeviceInfoVO.cs | 144 + PaymentSDK/AliPay/Domain/PosDiscountDetail.cs | 84 + PaymentSDK/AliPay/Domain/PosDishCookModel.cs | 78 + .../AliPay/Domain/PosDishGroupDetailModel.cs | 72 + PaymentSDK/AliPay/Domain/PosDishGroupModel.cs | 81 + .../AliPay/Domain/PosDishMaterialModel.cs | 36 + PaymentSDK/AliPay/Domain/PosDishModel.cs | 181 + .../AliPay/Domain/PosDishPracticeModel.cs | 42 + PaymentSDK/AliPay/Domain/PosDishQryModel.cs | 151 + .../AliPay/Domain/PosFixedDishGroupModel.cs | 66 + .../AliPay/Domain/PosOrderDeviceInfoVO.cs | 72 + PaymentSDK/AliPay/Domain/PosOrderInfoVO.cs | 86 + PaymentSDK/AliPay/Domain/PosOrderKey.cs | 36 + PaymentSDK/AliPay/Domain/PosSkuModel.cs | 54 + PaymentSDK/AliPay/Domain/PosStallModel.cs | 30 + PaymentSDK/AliPay/Domain/Position.cs | 48 + PaymentSDK/AliPay/Domain/PracticeEntity.cs | 36 + .../AliPay/Domain/PreAmountClauseResult.cs | 24 + .../AliPay/Domain/PreAmountInfoResult.cs | 26 + .../AliPay/Domain/PreOrderConfigInfo.cs | 32 + PaymentSDK/AliPay/Domain/PreOrderResult.cs | 36 + .../AliPay/Domain/PreRepayPlanTermVO.cs | 42 + PaymentSDK/AliPay/Domain/PresetPayToolInfo.cs | 26 + PaymentSDK/AliPay/Domain/PriceDetailDTO.cs | 24 + PaymentSDK/AliPay/Domain/PriceInfo.cs | 24 + PaymentSDK/AliPay/Domain/PriceInformation.cs | 24 + PaymentSDK/AliPay/Domain/PricingVO.cs | 150 + PaymentSDK/AliPay/Domain/Principal.cs | 42 + .../AliPay/Domain/PrincipalForOpenapi.cs | 24 + PaymentSDK/AliPay/Domain/PrincipalInfo.cs | 54 + PaymentSDK/AliPay/Domain/PrintModel.cs | 42 + PaymentSDK/AliPay/Domain/PrizeConfig.cs | 104 + PaymentSDK/AliPay/Domain/PrizeCustomMenu.cs | 24 + PaymentSDK/AliPay/Domain/PrizeDetail.cs | 36 + PaymentSDK/AliPay/Domain/PrizeInfo.cs | 66 + PaymentSDK/AliPay/Domain/PrizeLiteInfo.cs | 24 + PaymentSDK/AliPay/Domain/PrizeModel.cs | 99 + PaymentSDK/AliPay/Domain/PrizeOrderVO.cs | 42 + .../AliPay/Domain/PrizePriceStrategy.cs | 42 + PaymentSDK/AliPay/Domain/PrizeValidPeriod.cs | 54 + PaymentSDK/AliPay/Domain/ProdIPRelationVO.cs | 66 + PaymentSDK/AliPay/Domain/ProdLORelationVO.cs | 36 + .../AliPay/Domain/ProdMarkRelationVO.cs | 36 + PaymentSDK/AliPay/Domain/ProdParams.cs | 18 + PaymentSDK/AliPay/Domain/ProdRelationVO.cs | 66 + PaymentSDK/AliPay/Domain/ProdResource.cs | 36 + PaymentSDK/AliPay/Domain/ProducerVO.cs | 48 + PaymentSDK/AliPay/Domain/Product.cs | 24 + PaymentSDK/AliPay/Domain/ProductBaseVO.cs | 78 + .../AliPay/Domain/ProductInviteStatusInfo.cs | 30 + PaymentSDK/AliPay/Domain/ProductOrderDTO.cs | 72 + .../AliPay/Domain/ProductOrderQueryItem.cs | 24 + PaymentSDK/AliPay/Domain/ProductProvider.cs | 54 + .../AliPay/Domain/ProductSignStatusInfo.cs | 30 + PaymentSDK/AliPay/Domain/ProductVOOptions.cs | 54 + PaymentSDK/AliPay/Domain/ProfileSnDetail.cs | 24 + PaymentSDK/AliPay/Domain/PromiseConfig.cs | 102 + PaymentSDK/AliPay/Domain/PromoItemInfo.cs | 48 + PaymentSDK/AliPay/Domain/PromoOperatorInfo.cs | 24 + PaymentSDK/AliPay/Domain/PromoPageInfo.cs | 24 + PaymentSDK/AliPay/Domain/PromoPageResult.cs | 36 + PaymentSDK/AliPay/Domain/PromoParam.cs | 18 + PaymentSDK/AliPay/Domain/PromoTool.cs | 42 + PaymentSDK/AliPay/Domain/PromoVoucherInfo.cs | 108 + PaymentSDK/AliPay/Domain/PromoteDataModel.cs | 30 + PaymentSDK/AliPay/Domain/PromoteDateModel.cs | 24 + .../Domain/PromoteDetailChannelModel.cs | 36 + .../AliPay/Domain/PromoteDetailModel.cs | 42 + PaymentSDK/AliPay/Domain/PromoteItemModel.cs | 30 + PaymentSDK/AliPay/Domain/PromotePage.cs | 30 + .../AliPay/Domain/PromotePageStatistic.cs | 54 + PaymentSDK/AliPay/Domain/PromotionDetail.cs | 42 + PaymentSDK/AliPay/Domain/PromotionInfo.cs | 102 + .../AliPay/Domain/PromoxCrowdMatchModel.cs | 24 + PaymentSDK/AliPay/Domain/PropertyAuthInfo.cs | 60 + PaymentSDK/AliPay/Domain/PubChannelDTO.cs | 24 + PaymentSDK/AliPay/Domain/PublicAuditStatus.cs | 30 + PaymentSDK/AliPay/Domain/PublicBindAccount.cs | 48 + PaymentSDK/AliPay/Domain/PublicLabel.cs | 30 + PaymentSDK/AliPay/Domain/PublicMessageBody.cs | 32 + PaymentSDK/AliPay/Domain/PublicMessageInfo.cs | 44 + PaymentSDK/AliPay/Domain/PublicMsgKeyword.cs | 18 + PaymentSDK/AliPay/Domain/PublishChannel.cs | 36 + .../AliPay/Domain/PurchaseApplyInfoDTO.cs | 90 + PaymentSDK/AliPay/Domain/QRcode.cs | 24 + PaymentSDK/AliPay/Domain/QrcodeEntity.cs | 36 + .../AliPay/Domain/QueryComplexLabelRule.cs | 36 + .../AliPay/Domain/QueryDetailAopResult.cs | 78 + PaymentSDK/AliPay/Domain/QueryExtension.cs | 39 + PaymentSDK/AliPay/Domain/QueryGroup.cs | 32 + .../AliPay/Domain/QueryInstBillDetail.cs | 30 + PaymentSDK/AliPay/Domain/QueryInstBillInfo.cs | 110 + PaymentSDK/AliPay/Domain/QueryLabelRule.cs | 36 + PaymentSDK/AliPay/Domain/QueryMenu.cs | 39 + PaymentSDK/AliPay/Domain/QueryProvCityInfo.cs | 24 + PaymentSDK/AliPay/Domain/QueryRecord.cs | 54 + PaymentSDK/AliPay/Domain/QueryResult.cs | 108 + .../Domain/QueryUserChargeInstAndAreaInfo.cs | 60 + PaymentSDK/AliPay/Domain/QuestInstanceDO.cs | 87 + PaymentSDK/AliPay/Domain/QuestInstanceDTO.cs | 66 + PaymentSDK/AliPay/Domain/QueueInfoModify.cs | 36 + PaymentSDK/AliPay/Domain/QuotaGradientRule.cs | 84 + PaymentSDK/AliPay/Domain/QuoteInfo.cs | 24 + .../Domain/RandomDiscountDstCampPrizeModel.cs | 38 + PaymentSDK/AliPay/Domain/RateCurrency.cs | 30 + PaymentSDK/AliPay/Domain/RatioDetail.cs | 48 + PaymentSDK/AliPay/Domain/RebateGood.cs | 24 + PaymentSDK/AliPay/Domain/RecItemInfo.cs | 84 + PaymentSDK/AliPay/Domain/RecResultInfo.cs | 44 + PaymentSDK/AliPay/Domain/ReceiptBizData.cs | 129 + PaymentSDK/AliPay/Domain/ReceiptDetailInfo.cs | 134 + .../AliPay/Domain/ReceiptDiscountInfo.cs | 24 + PaymentSDK/AliPay/Domain/ReceiptQuoteInfo.cs | 60 + PaymentSDK/AliPay/Domain/ReceiptSku.cs | 30 + .../AliPay/Domain/ReceivableConfirmOrder.cs | 146 + .../AliPay/Domain/ReceiverAddressInfo.cs | 42 + PaymentSDK/AliPay/Domain/ReceiverInfoVO.cs | 48 + PaymentSDK/AliPay/Domain/RechargeBill.cs | 36 + PaymentSDK/AliPay/Domain/RechargeDTO.cs | 38 + PaymentSDK/AliPay/Domain/RechargeDetail.cs | 36 + PaymentSDK/AliPay/Domain/RecomPlan.cs | 30 + PaymentSDK/AliPay/Domain/RecomProduct.cs | 122 + PaymentSDK/AliPay/Domain/RecommendCard.cs | 48 + PaymentSDK/AliPay/Domain/RecommendInfo.cs | 36 + .../AliPay/Domain/RecommendServiceInfo.cs | 60 + PaymentSDK/AliPay/Domain/RecordDetail.cs | 36 + PaymentSDK/AliPay/Domain/RecruitInfo.cs | 42 + .../AliPay/Domain/RecruitItemApplyData.cs | 42 + PaymentSDK/AliPay/Domain/RecruitShopInfo.cs | 36 + PaymentSDK/AliPay/Domain/RecruitTool.cs | 38 + .../AliPay/Domain/ReduceDstCampPrizeModel.cs | 42 + PaymentSDK/AliPay/Domain/ReduceInfo.cs | 48 + .../Domain/ReduceToAmtDstCampPrizeModel.cs | 18 + .../ReduceToDiscountDstCampPrizeModel.cs | 36 + .../AliPay/Domain/RefundDescriptionDTO.cs | 66 + PaymentSDK/AliPay/Domain/RefundDetail.cs | 50 + .../AliPay/Domain/RefundExtendParams.cs | 24 + PaymentSDK/AliPay/Domain/RefundInfo.cs | 24 + PaymentSDK/AliPay/Domain/RefundList.cs | 56 + PaymentSDK/AliPay/Domain/RefundRoyaltyInfo.cs | 48 + .../AliPay/Domain/RefundRoyaltyResult.cs | 54 + .../AliPay/Domain/RefundUnfreezeResult.cs | 48 + PaymentSDK/AliPay/Domain/Refuse.cs | 24 + PaymentSDK/AliPay/Domain/RefuseVo.cs | 24 + PaymentSDK/AliPay/Domain/RegionInfo.cs | 48 + PaymentSDK/AliPay/Domain/RegionState.cs | 36 + .../AliPay/Domain/RelationCombinedVO.cs | 42 + PaymentSDK/AliPay/Domain/RelationInfo.cs | 18 + PaymentSDK/AliPay/Domain/RelationVO.cs | 42 + PaymentSDK/AliPay/Domain/RemoveTagRequest.cs | 30 + PaymentSDK/AliPay/Domain/RemoveTagResponse.cs | 20 + PaymentSDK/AliPay/Domain/RemoveTagResult.cs | 36 + PaymentSDK/AliPay/Domain/RepairItem.cs | 42 + PaymentSDK/AliPay/Domain/RepayDetail.cs | 42 + PaymentSDK/AliPay/Domain/RepayDetailVO.cs | 60 + PaymentSDK/AliPay/Domain/RepayPlanTermVO.cs | 84 + PaymentSDK/AliPay/Domain/RepayTradeDetail.cs | 24 + PaymentSDK/AliPay/Domain/RepaymentRecords.cs | 66 + PaymentSDK/AliPay/Domain/ReportCar.cs | 78 + PaymentSDK/AliPay/Domain/ReportCondition.cs | 24 + PaymentSDK/AliPay/Domain/ReportDataItem.cs | 18 + .../AliPay/Domain/ReportErrorFeature.cs | 18 + .../AliPay/Domain/ReportQueryCondition.cs | 30 + .../AliPay/Domain/RequestExtShopItem.cs | 54 + .../AliPay/Domain/RequestExtShopItemQuery.cs | 54 + .../AliPay/Domain/ReservationTimeUnit.cs | 24 + .../Domain/ResetZeroDstCampPrizeModel.cs | 36 + PaymentSDK/AliPay/Domain/RestTime.cs | 36 + PaymentSDK/AliPay/Domain/Result.cs | 30 + .../AliPay/Domain/RetailItemDescription.cs | 26 + .../AliPay/Domain/RetailKbcodeCreateVo.cs | 24 + .../AliPay/Domain/RetailKbcodeQueryVo.cs | 60 + PaymentSDK/AliPay/Domain/Retailer.cs | 24 + PaymentSDK/AliPay/Domain/RiskConfig.cs | 26 + PaymentSDK/AliPay/Domain/RiskProfileDto.cs | 24 + PaymentSDK/AliPay/Domain/RiskRankInfoCode.cs | 36 + PaymentSDK/AliPay/Domain/RiskResult.cs | 24 + PaymentSDK/AliPay/Domain/Road.cs | 42 + PaymentSDK/AliPay/Domain/Roadinter.cs | 54 + PaymentSDK/AliPay/Domain/RoyaltyDetailInfo.cs | 78 + .../AliPay/Domain/RoyaltyDetailInfos.cs | 72 + PaymentSDK/AliPay/Domain/RoyaltyEntity.cs | 36 + PaymentSDK/AliPay/Domain/RoyaltyInfo.cs | 26 + PaymentSDK/AliPay/Domain/RtaInfo.cs | 18 + PaymentSDK/AliPay/Domain/RubbishDTO.cs | 24 + PaymentSDK/AliPay/Domain/SCardQueryVO.cs | 42 + PaymentSDK/AliPay/Domain/Sale.cs | 36 + PaymentSDK/AliPay/Domain/SaleProduct.cs | 48 + PaymentSDK/AliPay/Domain/Scene.cs | 18 + PaymentSDK/AliPay/Domain/SceneContent.cs | 104 + .../AliPay/Domain/SceneDataQueryParam.cs | 42 + .../Domain/SceneDataQueryResultDetail.cs | 24 + PaymentSDK/AliPay/Domain/SceneDetail.cs | 36 + .../AliPay/Domain/SceneDrawdownDetail.cs | 24 + PaymentSDK/AliPay/Domain/SceneExtParam.cs | 60 + .../AliPay/Domain/SceneMarketingContent.cs | 75 + .../Domain/SceneMarketingContentGroup.cs | 32 + .../AliPay/Domain/SceneMarketingHeader.cs | 50 + PaymentSDK/AliPay/Domain/SceneOrder.cs | 98 + .../AliPay/Domain/SceneProdBillDetail.cs | 144 + .../AliPay/Domain/SceneProdDataQueryParam.cs | 42 + .../Domain/SceneProdDataQueryResultDetail.cs | 24 + .../SceneProdDeputyPaymentBillDetail.cs | 30 + .../Domain/SceneProdDeputyPaymentBillQuery.cs | 30 + .../Domain/SceneProdPaymentAccountInfo.cs | 96 + PaymentSDK/AliPay/Domain/ScenicFaceInfo.cs | 24 + .../AliPay/Domain/ScheduleConfigGetResult.cs | 30 + .../AliPay/Domain/ScheduleConfigItem.cs | 30 + .../AliPay/Domain/ScheduleConfigResult.cs | 30 + PaymentSDK/AliPay/Domain/ScheduleInfo.cs | 24 + PaymentSDK/AliPay/Domain/ScheduleListItem.cs | 30 + .../AliPay/Domain/ScheduleListResult.cs | 32 + PaymentSDK/AliPay/Domain/ScheduleOdItem.cs | 78 + PaymentSDK/AliPay/Domain/ScheduleOdResult.cs | 32 + PaymentSDK/AliPay/Domain/ScheduleResItem.cs | 30 + PaymentSDK/AliPay/Domain/ScheduleResResult.cs | 30 + PaymentSDK/AliPay/Domain/ScheduleShiftItem.cs | 42 + .../AliPay/Domain/ScheduleShiftResult.cs | 32 + PaymentSDK/AliPay/Domain/ScheduleTimeItem.cs | 54 + .../AliPay/Domain/ScheduleTimeResult.cs | 32 + PaymentSDK/AliPay/Domain/ScheduleTripItem.cs | 36 + .../AliPay/Domain/ScheduleTripResult.cs | 32 + PaymentSDK/AliPay/Domain/ScheduleWorkItem.cs | 108 + PaymentSDK/AliPay/Domain/ScheduleWorkItems.cs | 27 + .../AliPay/Domain/ScheduleWorkResult.cs | 30 + .../AliPay/Domain/ScheduleWorkStatItem.cs | 84 + PaymentSDK/AliPay/Domain/SchemaVO.cs | 45 + .../AliPay/Domain/SchoolBatchQueryResult.cs | 30 + PaymentSDK/AliPay/Domain/SchoolCardInfo.cs | 96 + .../AliPay/Domain/SchoolCardSimpleInfo.cs | 42 + PaymentSDK/AliPay/Domain/SealPageInfo.cs | 24 + PaymentSDK/AliPay/Domain/SealPosition.cs | 42 + PaymentSDK/AliPay/Domain/SealRequestInfo.cs | 42 + PaymentSDK/AliPay/Domain/SecurityScene.cs | 54 + .../AliPay/Domain/SecuritydataMobileCity.cs | 30 + PaymentSDK/AliPay/Domain/SelectedMealInfo.cs | 92 + .../AliPay/Domain/SelectedMealSideInfo.cs | 84 + PaymentSDK/AliPay/Domain/SendRule.cs | 36 + PaymentSDK/AliPay/Domain/SenderInfoVO.cs | 48 + .../AliPay/Domain/ServiceAddressSimpleVO.cs | 42 + .../AliPay/Domain/ServiceAttributeSimpleVO.cs | 26 + .../AliPay/Domain/ServiceContactSimpleVO.cs | 30 + PaymentSDK/AliPay/Domain/ServiceContext.cs | 42 + PaymentSDK/AliPay/Domain/ServiceInfo.cs | 104 + PaymentSDK/AliPay/Domain/ServiceOrderInfo.cs | 134 + .../AliPay/Domain/ServiceRegionSimpleVO.cs | 24 + PaymentSDK/AliPay/Domain/ServiceTimeInfo.cs | 26 + PaymentSDK/AliPay/Domain/ServiceUrl.cs | 24 + PaymentSDK/AliPay/Domain/SettleCardInfo.cs | 72 + PaymentSDK/AliPay/Domain/SettleCardInfoKt.cs | 72 + PaymentSDK/AliPay/Domain/SettleClause.cs | 66 + PaymentSDK/AliPay/Domain/SettleDetailInfo.cs | 48 + PaymentSDK/AliPay/Domain/SettleEntity.cs | 24 + PaymentSDK/AliPay/Domain/SettleInfo.cs | 26 + .../Domain/SettlementBillCreateOrder.cs | 168 + .../AliPay/Domain/SettlementbillOpenApiDTO.cs | 30 + PaymentSDK/AliPay/Domain/ShieldDishList.cs | 36 + PaymentSDK/AliPay/Domain/Shop.cs | 36 + PaymentSDK/AliPay/Domain/ShopBusinessTime.cs | 30 + .../AliPay/Domain/ShopCategoryConfigInfo.cs | 42 + PaymentSDK/AliPay/Domain/ShopCategoryInfo.cs | 30 + PaymentSDK/AliPay/Domain/ShopCommentInfo.cs | 36 + PaymentSDK/AliPay/Domain/ShopDiscountInfo.cs | 66 + PaymentSDK/AliPay/Domain/ShopExtInfo.cs | 24 + PaymentSDK/AliPay/Domain/ShopInfo.cs | 32 + .../AliPay/Domain/ShopOrderConfigInfo.cs | 63 + .../AliPay/Domain/ShopOrderModifyResult.cs | 36 + PaymentSDK/AliPay/Domain/ShopPosSchedule.cs | 42 + PaymentSDK/AliPay/Domain/ShopPromoInfo.cs | 128 + PaymentSDK/AliPay/Domain/ShopQueryInfo.cs | 66 + PaymentSDK/AliPay/Domain/ShopQueue.cs | 54 + PaymentSDK/AliPay/Domain/ShopQueueStatus.cs | 36 + PaymentSDK/AliPay/Domain/ShopRec.cs | 140 + PaymentSDK/AliPay/Domain/ShopServiceItem.cs | 32 + PaymentSDK/AliPay/Domain/ShopStaffInfo.cs | 30 + PaymentSDK/AliPay/Domain/ShopSummaryInfo.cs | 164 + .../AliPay/Domain/ShopSummaryQueryResponse.cs | 140 + PaymentSDK/AliPay/Domain/SiData.cs | 84 + PaymentSDK/AliPay/Domain/SignDataInfo.cs | 62 + PaymentSDK/AliPay/Domain/SignField.cs | 30 + PaymentSDK/AliPay/Domain/SignFieldBean.cs | 30 + .../AliPay/Domain/SignMerchantParams.cs | 36 + PaymentSDK/AliPay/Domain/SignParams.cs | 66 + PaymentSDK/AliPay/Domain/SignResultValue.cs | 18 + PaymentSDK/AliPay/Domain/SignTask.cs | 68 + .../AliPay/Domain/SignTaskFileResult.cs | 44 + PaymentSDK/AliPay/Domain/SignTaskResult.cs | 30 + PaymentSDK/AliPay/Domain/SignedFileInfo.cs | 66 + PaymentSDK/AliPay/Domain/Signer.cs | 48 + PaymentSDK/AliPay/Domain/SignerBean.cs | 54 + PaymentSDK/AliPay/Domain/SimpleMockModel.cs | 42 + .../AliPay/Domain/SimpleOperatorModel.cs | 24 + PaymentSDK/AliPay/Domain/SimpleShopInfo.cs | 30 + PaymentSDK/AliPay/Domain/SimpleShopModel.cs | 24 + .../Domain/SingleArticleAnalysisData.cs | 66 + .../AliPay/Domain/SingleDstCampPrizeModel.cs | 30 + .../Domain/SingleFundDetailItemAOPModel.cs | 26 + PaymentSDK/AliPay/Domain/SinglePayDetail.cs | 60 + PaymentSDK/AliPay/Domain/SingleStartAppVO.cs | 24 + PaymentSDK/AliPay/Domain/SiteInfo.cs | 42 + PaymentSDK/AliPay/Domain/SiteInfoKt.cs | 42 + PaymentSDK/AliPay/Domain/SiteItem.cs | 90 + PaymentSDK/AliPay/Domain/SitePlanItem.cs | 30 + PaymentSDK/AliPay/Domain/SiteResult.cs | 39 + PaymentSDK/AliPay/Domain/SkuCreateInfo.cs | 45 + PaymentSDK/AliPay/Domain/SkuDescInfo.cs | 30 + PaymentSDK/AliPay/Domain/SkuInfo.cs | 30 + PaymentSDK/AliPay/Domain/SkuModifyInfo.cs | 51 + PaymentSDK/AliPay/Domain/SkuPropertyInfo.cs | 26 + PaymentSDK/AliPay/Domain/SkuPropertyValue.cs | 24 + PaymentSDK/AliPay/Domain/SmartAddressInfo.cs | 36 + .../AliPay/Domain/SmartAutomatAssociate.cs | 24 + PaymentSDK/AliPay/Domain/SmartAutomatScene.cs | 24 + .../AliPay/Domain/SmartCityCommodityInfo.cs | 42 + PaymentSDK/AliPay/Domain/SnApplyInfo.cs | 54 + PaymentSDK/AliPay/Domain/SocialInfoView.cs | 30 + PaymentSDK/AliPay/Domain/SortDeskParam.cs | 42 + PaymentSDK/AliPay/Domain/SpAccountInfo.cs | 42 + PaymentSDK/AliPay/Domain/SpecEntity.cs | 36 + .../AliPay/Domain/SpecialBusinessTimeRule.cs | 44 + PaymentSDK/AliPay/Domain/SpecialPriceDTO.cs | 45 + .../AliPay/Domain/SpecifiedChannelParam.cs | 30 + .../AliPay/Domain/SpecifyAttachmentInfo.cs | 45 + .../AliPay/Domain/SpiDetectionDetail.cs | 74 + PaymentSDK/AliPay/Domain/SpiDetectionTask.cs | 24 + PaymentSDK/AliPay/Domain/SpiInputObject.cs | 18 + PaymentSDK/AliPay/Domain/SpiOutputObject.cs | 18 + PaymentSDK/AliPay/Domain/SpiVoiceCallback.cs | 54 + .../AliPay/Domain/SquareDanceTaskInfo.cs | 84 + ...aDataserviceDtevalDataanalysisSendModel.cs | 36 + ...ataserviceDtevalIdentitycheckQueryModel.cs | 60 + .../SsdataDataserviceMetainfoSyncModel.cs | 18 + ...dataDataserviceRiskAlixiaohaoQueryModel.cs | 18 + ...taDataserviceRiskAntifinfraudQueryModel.cs | 60 + ...aDataserviceRiskAntifraudlistQueryModel.cs | 84 + ...DataserviceRiskAntifraudscoreQueryModel.cs | 84 + ...ataserviceRiskAntimarketcheatQueryModel.cs | 48 + .../SsdataDataserviceRiskAudioQueryModel.cs | 32 + .../SsdataDataserviceRiskAudioSetModel.cs | 63 + .../SsdataDataserviceRiskAudioVerifyModel.cs | 44 + ...SsdataDataserviceRiskContentVerifyModel.cs | 24 + ...DataserviceRiskDeviceidentityQueryModel.cs | 18 + ...ataserviceRiskDigitalidentityQueryModel.cs | 18 + ...ataDataserviceRiskOfflinevarsQueryModel.cs | 18 + .../SsdataDataserviceRiskRtopQueryModel.cs | 18 + PaymentSDK/AliPay/Domain/StaffInfo.cs | 24 + PaymentSDK/AliPay/Domain/StageCateInfoVO.cs | 32 + PaymentSDK/AliPay/Domain/StageGroupInfoVO.cs | 26 + .../Domain/StagedDiscountDstCampPrizeModel.cs | 38 + PaymentSDK/AliPay/Domain/StallEntity.cs | 81 + PaymentSDK/AliPay/Domain/StallKdsEntity.cs | 48 + PaymentSDK/AliPay/Domain/StallModel.cs | 69 + .../AliPay/Domain/StandardCategoryInfo.cs | 48 + PaymentSDK/AliPay/Domain/StatesSyncPayload.cs | 30 + PaymentSDK/AliPay/Domain/StationDetailInfo.cs | 30 + .../AliPay/Domain/StdPublicBindAccount.cs | 48 + .../AliPay/Domain/StepcounterDataInfo.cs | 30 + PaymentSDK/AliPay/Domain/StockHolderVO.cs | 48 + PaymentSDK/AliPay/Domain/StockQuantity.cs | 24 + .../AliPay/Domain/StockQueryCondition.cs | 32 + .../AliPay/Domain/StockShippingStepInfo.cs | 36 + PaymentSDK/AliPay/Domain/StockTask.cs | 36 + PaymentSDK/AliPay/Domain/StockTaskResult.cs | 56 + PaymentSDK/AliPay/Domain/StoreInfo.cs | 96 + PaymentSDK/AliPay/Domain/StoreOrderDTO.cs | 69 + PaymentSDK/AliPay/Domain/StoreOrderGood.cs | 30 + PaymentSDK/AliPay/Domain/Streetnumber.cs | 42 + .../AliPay/Domain/StructureBrandInfo.cs | 30 + .../AliPay/Domain/StructureServiceInfo.cs | 72 + PaymentSDK/AliPay/Domain/StudentInfo.cs | 72 + PaymentSDK/AliPay/Domain/StudyAccountInfo.cs | 30 + PaymentSDK/AliPay/Domain/StuffInfo.cs | 42 + PaymentSDK/AliPay/Domain/StuffStockInOrder.cs | 50 + .../AliPay/Domain/StuffStockInOrderItem.cs | 30 + .../AliPay/Domain/StuffStockOutOrder.cs | 116 + .../AliPay/Domain/StuffStockOutOrderItem.cs | 36 + .../AliPay/Domain/SubAccountAndBindDTO.cs | 42 + .../AliPay/Domain/SubAccountBalanceDTO.cs | 30 + .../Domain/SubAccountBalanceFreezeOrder.cs | 42 + ...SubAccountBalanceFreezeResultOpenApiDTO.cs | 30 + .../Domain/SubAccountBalanceOpenApiDTO.cs | 30 + .../Domain/SubAccountBalanceQueryOrder.cs | 18 + .../AliPay/Domain/SubAccountBaseInfo.cs | 30 + PaymentSDK/AliPay/Domain/SubAccountInfoDTO.cs | 24 + .../AliPay/Domain/SubAccountInfoQueryOrder.cs | 18 + PaymentSDK/AliPay/Domain/SubButton.cs | 36 + PaymentSDK/AliPay/Domain/SubCertDetail.cs | 30 + PaymentSDK/AliPay/Domain/SubCloudUserInfo.cs | 42 + PaymentSDK/AliPay/Domain/SubMerchant.cs | 24 + .../Domain/SubMerchantCommonEnterOpenModel.cs | 30 + .../Domain/SubMerchantEnterOpenModel.cs | 48 + PaymentSDK/AliPay/Domain/SubMerchantParams.cs | 36 + PaymentSDK/AliPay/Domain/SubPackage.cs | 36 + PaymentSDK/AliPay/Domain/SubShopInfo.cs | 20 + PaymentSDK/AliPay/Domain/SummaryData.cs | 84 + PaymentSDK/AliPay/Domain/SummaryInfo.cs | 36 + .../AliPay/Domain/SupplierAssetResponse.cs | 294 + PaymentSDK/AliPay/Domain/SupplierReport.cs | 72 + .../AliPay/Domain/SupplierReportDetail.cs | 72 + PaymentSDK/AliPay/Domain/SupplierVO.cs | 48 + PaymentSDK/AliPay/Domain/SupportFunction.cs | 38 + PaymentSDK/AliPay/Domain/SystemParam.cs | 30 + PaymentSDK/AliPay/Domain/TBMiniShopBo.cs | 69 + PaymentSDK/AliPay/Domain/TableInfoResult.cs | 20 + PaymentSDK/AliPay/Domain/TableListResult.cs | 24 + PaymentSDK/AliPay/Domain/TaskTypeData.cs | 18 + PaymentSDK/AliPay/Domain/TaxBillContent.cs | 126 + .../Domain/TbapiQueryAmountBizContent.cs | 38 + .../AliPay/Domain/TbapiQueryAmountResponse.cs | 24 + PaymentSDK/AliPay/Domain/Template.cs | 24 + .../AliPay/Domain/TemplateActionInfoDTO.cs | 42 + .../Domain/TemplateActionMiniAppUrlDTO.cs | 36 + PaymentSDK/AliPay/Domain/TemplateBannerDTO.cs | 24 + .../AliPay/Domain/TemplateBenefitInfoDTO.cs | 38 + .../AliPay/Domain/TemplateCardLevelConfDTO.cs | 36 + .../AliPay/Domain/TemplateColumnInfoDTO.cs | 60 + PaymentSDK/AliPay/Domain/TemplateContext.cs | 48 + PaymentSDK/AliPay/Domain/TemplateEInfoDTO.cs | 107 + .../AliPay/Domain/TemplateEInfoMoreDTO.cs | 24 + .../AliPay/Domain/TemplateEInfoUnitDTO.cs | 48 + .../AliPay/Domain/TemplateEvoucherDTO.cs | 80 + .../AliPay/Domain/TemplateFieldRuleDTO.cs | 30 + PaymentSDK/AliPay/Domain/TemplateFileDTO.cs | 36 + PaymentSDK/AliPay/Domain/TemplateImageDTO.cs | 24 + PaymentSDK/AliPay/Domain/TemplateInfo.cs | 38 + PaymentSDK/AliPay/Domain/TemplateInfoBean.cs | 39 + PaymentSDK/AliPay/Domain/TemplateKeyword.cs | 24 + .../Domain/TemplateMdcodeNotifyConfDTO.cs | 24 + .../AliPay/Domain/TemplateMerchantDTO.cs | 48 + .../AliPay/Domain/TemplateOpenCardConfDTO.cs | 44 + .../AliPay/Domain/TemplateOperationDTO.cs | 44 + .../AliPay/Domain/TemplatePlatformDTO.cs | 42 + PaymentSDK/AliPay/Domain/TemplateProfitDTO.cs | 30 + PaymentSDK/AliPay/Domain/TemplateRemindDTO.cs | 18 + .../AliPay/Domain/TemplateRightsContentDTO.cs | 30 + .../Domain/TemplateSecondaryOperationDTO.cs | 30 + PaymentSDK/AliPay/Domain/TemplateStyleDTO.cs | 18 + .../AliPay/Domain/TemplateStyleInfoDTO.cs | 98 + .../AliPay/Domain/TemplateTextMessageDTO.cs | 24 + PaymentSDK/AliPay/Domain/TemplateUsageInfo.cs | 24 + PaymentSDK/AliPay/Domain/Terminal.cs | 48 + PaymentSDK/AliPay/Domain/TestCaseDomain.cs | 48 + PaymentSDK/AliPay/Domain/TestCaseParam.cs | 36 + PaymentSDK/AliPay/Domain/Text.cs | 24 + PaymentSDK/AliPay/Domain/TextContent.cs | 24 + PaymentSDK/AliPay/Domain/TextDiff.cs | 24 + PaymentSDK/AliPay/Domain/TextInstance.cs | 30 + PaymentSDK/AliPay/Domain/ThirdErrorContext.cs | 24 + PaymentSDK/AliPay/Domain/TiansuoIsvBindVO.cs | 30 + .../AliPay/Domain/TicketCodeQueryResponse.cs | 80 + PaymentSDK/AliPay/Domain/TicketDetailInfo.cs | 72 + PaymentSDK/AliPay/Domain/TicketInfo.cs | 36 + PaymentSDK/AliPay/Domain/TicketInfoResult.cs | 36 + PaymentSDK/AliPay/Domain/TicketTransInfo.cs | 42 + PaymentSDK/AliPay/Domain/TimeInterval.cs | 42 + PaymentSDK/AliPay/Domain/TimePeriod.cs | 24 + PaymentSDK/AliPay/Domain/TimePeriodConfig.cs | 26 + PaymentSDK/AliPay/Domain/TimeRange.cs | 24 + PaymentSDK/AliPay/Domain/TimeTableLineInfo.cs | 86 + PaymentSDK/AliPay/Domain/Topic.cs | 50 + PaymentSDK/AliPay/Domain/TopicItem.cs | 36 + PaymentSDK/AliPay/Domain/TopicItemVo.cs | 36 + PaymentSDK/AliPay/Domain/TradeApplyParams.cs | 60 + .../AliPay/Domain/TradeAssocBillDetails.cs | 36 + PaymentSDK/AliPay/Domain/TradeFundBill.cs | 42 + PaymentSDK/AliPay/Domain/TradeItemResult.cs | 108 + .../TradePrecreateConfirmExtendParam.cs | 18 + ...adePrecreateConfirmIndirectMerchantInfo.cs | 66 + .../Domain/TradePrecreateConfirmOrderInfo.cs | 30 + .../TradePrecreateConfirmPrecreateCodeInfo.cs | 30 + .../TradePrecreateConfirmTradeMerchantInfo.cs | 48 + .../TradePrecreateConfirmTradeStoreInfo.cs | 42 + PaymentSDK/AliPay/Domain/TradeRecord.cs | 120 + PaymentSDK/AliPay/Domain/TradeRequestVO.cs | 336 ++ PaymentSDK/AliPay/Domain/TradeSettleDetail.cs | 48 + PaymentSDK/AliPay/Domain/TradeSettleInfo.cs | 20 + PaymentSDK/AliPay/Domain/TransOrderDetail.cs | 54 + PaymentSDK/AliPay/Domain/TransOrderResult.cs | 42 + .../AliPay/Domain/TransactionAmountDTO.cs | 24 + .../Domain/TransactionAmountModifierDTO.cs | 30 + .../TransactionAuthenticationDetailDTO.cs | 26 + .../AliPay/Domain/TransactionDetailDTO.cs | 104 + .../Domain/TransferAccountBookDetailResult.cs | 84 + .../AliPay/Domain/TransferDetailResult.cs | 78 + PaymentSDK/AliPay/Domain/TravelMallRequest.cs | 24 + PaymentSDK/AliPay/Domain/TravelScene.cs | 20 + PaymentSDK/AliPay/Domain/TreeData.cs | 36 + PaymentSDK/AliPay/Domain/TreeDetailData.cs | 36 + .../TrusteeshipAccountBillQueryResponse.cs | 66 + PaymentSDK/AliPay/Domain/TuitionAddress.cs | 48 + .../AliPay/Domain/TuitionBankAccountDetail.cs | 48 + .../AliPay/Domain/TuitionCertificate.cs | 42 + .../AliPay/Domain/TuitionISVAgentInfoDTO.cs | 24 + .../Domain/TuitionISVRequestPaymentInfoDTO.cs | 60 + .../TuitionISVResponsePaymentInfoDTO.cs | 78 + PaymentSDK/AliPay/Domain/TuitionISVResult.cs | 30 + .../AliPay/Domain/TuitionISVSchoolDTO.cs | 30 + .../AliPay/Domain/TuitionISVStudentInfoDTO.cs | 60 + .../AliPay/Domain/TuitionInremitOrder.cs | 72 + PaymentSDK/AliPay/Domain/TuitionMoneyDTO.cs | 24 + PaymentSDK/AliPay/Domain/TuitionQueryOrder.cs | 24 + PaymentSDK/AliPay/Domain/TuitionUserName.cs | 36 + PaymentSDK/AliPay/Domain/UboVO.cs | 30 + .../AliPay/Domain/UnAvailableTimeInfo.cs | 24 + .../AliPay/Domain/UnavailablePeriodInfo.cs | 24 + .../AliPay/Domain/UnfreezeOrderDetail.cs | 60 + PaymentSDK/AliPay/Domain/UpdateCodeRequest.cs | 36 + .../AliPay/Domain/UpdateCodeResponse.cs | 20 + PaymentSDK/AliPay/Domain/UpdateCodeResult.cs | 48 + .../Domain/UpdatedAuthenticationDetails.cs | 44 + PaymentSDK/AliPay/Domain/UseDetail.cs | 36 + PaymentSDK/AliPay/Domain/UseRule.cs | 57 + PaymentSDK/AliPay/Domain/UseRuleInfo.cs | 27 + PaymentSDK/AliPay/Domain/UseTime.cs | 30 + PaymentSDK/AliPay/Domain/UserAdvanceInfo.cs | 36 + PaymentSDK/AliPay/Domain/UserAnalysisData.cs | 42 + .../AliPay/Domain/UserAppBizDataInfo.cs | 72 + PaymentSDK/AliPay/Domain/UserBusiness.cs | 60 + PaymentSDK/AliPay/Domain/UserCert.cs | 66 + .../AliPay/Domain/UserCertifyPayload.cs | 18 + .../AliPay/Domain/UserConfirmPayload.cs | 24 + .../AliPay/Domain/UserCrowdConditions.cs | 32 + PaymentSDK/AliPay/Domain/UserDInfo.cs | 24 + PaymentSDK/AliPay/Domain/UserDetailInfo.cs | 26 + PaymentSDK/AliPay/Domain/UserDetails.cs | 36 + PaymentSDK/AliPay/Domain/UserIdentity.cs | 30 + PaymentSDK/AliPay/Domain/UserIdentityExt.cs | 54 + PaymentSDK/AliPay/Domain/UserIdentityInfo.cs | 18 + .../Domain/UserInfoAndBenefitQueryResult.cs | 32 + PaymentSDK/AliPay/Domain/UserInfoFromNJ.cs | 24 + PaymentSDK/AliPay/Domain/UserInfomation.cs | 36 + .../Domain/UserInvoiceInfoOpenApiResponse.cs | 176 + .../AliPay/Domain/UserLoginStatusDetail.cs | 48 + PaymentSDK/AliPay/Domain/UserMailInfoOrder.cs | 66 + PaymentSDK/AliPay/Domain/UserMailInfoVO.cs | 90 + PaymentSDK/AliPay/Domain/UserName.cs | 36 + PaymentSDK/AliPay/Domain/UserPermit.cs | 24 + PaymentSDK/AliPay/Domain/UserProfileDetail.cs | 24 + PaymentSDK/AliPay/Domain/UserSubmitModel.cs | 68 + PaymentSDK/AliPay/Domain/UserTaskView.cs | 60 + PaymentSDK/AliPay/Domain/UserVo.cs | 30 + PaymentSDK/AliPay/Domain/ValidDateInfo.cs | 36 + PaymentSDK/AliPay/Domain/ValidStrategy.cs | 42 + PaymentSDK/AliPay/Domain/ValidationRule.cs | 24 + PaymentSDK/AliPay/Domain/VcpAssetDetail.cs | 36 + PaymentSDK/AliPay/Domain/VehMessageEntity.cs | 66 + .../AliPay/Domain/VehicleDashboardResult.cs | 30 + PaymentSDK/AliPay/Domain/VehicleInfo.cs | 30 + .../Domain/VehicleMsgSendResultEntity.cs | 30 + PaymentSDK/AliPay/Domain/VehicleSettleInfo.cs | 36 + PaymentSDK/AliPay/Domain/VerifiedInfo.cs | 54 + PaymentSDK/AliPay/Domain/VerifyInfoVO.cs | 178 + PaymentSDK/AliPay/Domain/VerifyParams.cs | 18 + PaymentSDK/AliPay/Domain/Video.cs | 24 + .../AliPay/Domain/ViewColumnInfoModel.cs | 42 + .../AliPay/Domain/ViewStyleInfoModel.cs | 36 + PaymentSDK/AliPay/Domain/Voucher.cs | 190 + PaymentSDK/AliPay/Domain/VoucherBill.cs | 48 + PaymentSDK/AliPay/Domain/VoucherBillDetail.cs | 54 + PaymentSDK/AliPay/Domain/VoucherDescDetail.cs | 39 + .../AliPay/Domain/VoucherDescDetailModel.cs | 26 + PaymentSDK/AliPay/Domain/VoucherDetail.cs | 86 + PaymentSDK/AliPay/Domain/VoucherDetailInfo.cs | 74 + PaymentSDK/AliPay/Domain/VoucherInfo.cs | 68 + PaymentSDK/AliPay/Domain/VoucherInfoDetail.cs | 54 + PaymentSDK/AliPay/Domain/VoucherLiteInfo.cs | 36 + PaymentSDK/AliPay/Domain/VoucherModifyInfo.cs | 45 + PaymentSDK/AliPay/Domain/VoucherQueryInfo.cs | 72 + PaymentSDK/AliPay/Domain/VoucherRec.cs | 204 + .../AliPay/Domain/VoucherTemplateLiteInfo.cs | 54 + PaymentSDK/AliPay/Domain/VoucherTermInfo.cs | 26 + .../Domain/VoucherUserExternalTradeInfo.cs | 36 + PaymentSDK/AliPay/Domain/VoucherVO.cs | 54 + PaymentSDK/AliPay/Domain/VulInfo.cs | 144 + PaymentSDK/AliPay/Domain/VulList.cs | 48 + PaymentSDK/AliPay/Domain/WaitRateAlgoItem.cs | 30 + .../AliPay/Domain/WaitRepaymentOrderInfo.cs | 42 + PaymentSDK/AliPay/Domain/WarehouseVO.cs | 120 + PaymentSDK/AliPay/Domain/WeikeTaskView.cs | 54 + .../AliPay/Domain/WelfareEcoStoreInfo.cs | 36 + PaymentSDK/AliPay/Domain/WhitehatInfo.cs | 30 + PaymentSDK/AliPay/Domain/WorkDetail.cs | 60 + PaymentSDK/AliPay/Domain/WorkListVO.cs | 60 + PaymentSDK/AliPay/Domain/WorkPattern.cs | 50 + PaymentSDK/AliPay/Domain/WorkPatternDetail.cs | 36 + .../AliPay/Domain/WorldBaseRPCResponseInfo.cs | 36 + .../AliPay/Domain/WorldErrorIndicator.cs | 72 + .../AliPay/Domain/WorldOfflineDataInfo.cs | 98 + PaymentSDK/AliPay/Domain/WorldTicketType.cs | 30 + .../AliPay/Domain/WriteoffOrderParam.cs | 30 + PaymentSDK/AliPay/Domain/XXXXsdasdasd.cs | 18 + PaymentSDK/AliPay/Domain/XwbTestData.cs | 18 + .../AliPay/Domain/YLBPriceDetailInfo.cs | 30 + .../AliPay/Domain/YLBProfitDetailInfo.cs | 36 + .../AliPay/Domain/YLBTransDetailInfo.cs | 60 + .../AliPay/Domain/ZMGoOutDiscountInfo.cs | 30 + PaymentSDK/AliPay/Domain/ZMGoTradeInfo.cs | 24 + .../AliPay/Domain/ZftSubMerchantOrder.cs | 90 + .../Domain/ZhimaAuthInfoAuthqueryModel.cs | 30 + .../ZhimaCreditAntifraudRiskListModel.cs | 90 + .../ZhimaCreditAntifraudScoreGetModel.cs | 90 + .../Domain/ZhimaCreditAntifraudVerifyModel.cs | 90 + .../ZhimaCreditContractBorrowCancelModel.cs | 36 + .../ZhimaCreditContractBorrowCreateModel.cs | 54 + .../ZhimaCreditContractBorrowDelayModel.cs | 42 + ...himaCreditContractBorrowInitializeModel.cs | 68 + .../ZhimaCreditContractBorrowQueryModel.cs | 36 + .../ZhimaCreditContractBorrowReturnModel.cs | 42 + .../ZhimaCreditContractPrincipalQueryModel.cs | 60 + .../ZhimaCreditEpDataRatingQueryModel.cs | 66 + .../ZhimaCreditEpEntityMonitorSetModel.cs | 24 + .../ZhimaCreditEpEntityMonitorUploadModel.cs | 36 + .../ZhimaCreditEpFreedepositApplyModel.cs | 30 + ...ZhimaCreditEpFreedepositInitializeModel.cs | 102 + ...aCreditEpFreedepositOrderriskQueryModel.cs | 122 + .../Domain/ZhimaCreditEpInfoGetModel.cs | 36 + .../ZhimaCreditEpLawsuitDetailGetModel.cs | 36 + .../ZhimaCreditEpLawsuitRecordGetModel.cs | 42 + .../ZhimaCreditEpOrderRatingQueryModel.cs | 18 + .../ZhimaCreditEpProductCodeApplyModel.cs | 36 + .../ZhimaCreditEpProductCodeModifyModel.cs | 18 + .../ZhimaCreditEpProductCodeQueryModel.cs | 36 + .../Domain/ZhimaCreditEpRatingApplyModel.cs | 30 + ...ZhimaCreditEpRatingInnerInitializeModel.cs | 54 + .../Domain/ZhimaCreditEpRoleGetModel.cs | 30 + .../ZhimaCreditEpSceneAgreementCancelModel.cs | 30 + .../ZhimaCreditEpSceneAgreementUseModel.cs | 42 + .../ZhimaCreditEpSceneFulfillmentSyncModel.cs | 36 + ...maCreditEpSceneFulfillmentlistSyncModel.cs | 26 + .../ZhimaCreditEpSceneRatingApplyModel.cs | 30 + ...ZhimaCreditEpSceneRatingInitializeModel.cs | 78 + .../ZhimaCreditEpSceneRatingQueryModel.cs | 18 + .../ZhimaCreditEpSceneTradeConsultModel.cs | 42 + .../Domain/ZhimaCreditEpScoreGetModel.cs | 24 + .../ZhimaCreditOrderRepaymentApplyModel.cs | 54 + ...himaCreditPeIndustryLicenseCertifyModel.cs | 42 + ...himaCreditPeIndustryLocationUploadModel.cs | 66 + .../ZhimaCreditPeIndustryOrderQueryModel.cs | 36 + .../ZhimaCreditPeIndustryOrderSyncModel.cs | 48 + .../ZhimaCreditPeIndustryTradeCloseModel.cs | 48 + .../ZhimaCreditPeIndustryTradePayModel.cs | 54 + .../ZhimaCreditPeIndustryTradeQueryModel.cs | 36 + .../ZhimaCreditPeIndustryTradeRefundModel.cs | 54 + .../ZhimaCreditPeLawsuitDetailQueryModel.cs | 36 + .../ZhimaCreditPeLawsuitRecordGetModel.cs | 36 + .../Domain/ZhimaCreditPeLevelQueryModel.cs | 24 + .../Domain/ZhimaCreditPeUserAuthApplyModel.cs | 36 + .../ZhimaCreditPeUserContractQueryModel.cs | 24 + .../ZhimaCreditPeUserContractSignModel.cs | 24 + .../ZhimaCreditPeUserContractUnsignModel.cs | 24 + .../ZhimaCreditPeUserCreditFreezeModel.cs | 74 + .../ZhimaCreditPeUserCreditUnfreezeModel.cs | 60 + .../ZhimaCreditPeUserOrderConsultModel.cs | 66 + .../Domain/ZhimaCreditPeUserOrderSyncModel.cs | 60 + .../ZhimaCreditPeUserRiskConsultModel.cs | 60 + .../ZhimaCreditPeUserSceneConsultModel.cs | 48 + .../ZhimaCreditPeUserScenePreconsultModel.cs | 66 + .../ZhimaCreditPeZmgoPreconsultQueryModel.cs | 42 + .../Domain/ZhimaCreditRelationQueryModel.cs | 60 + .../ZhimaCreditRiskEvaluateQueryModel.cs | 36 + .../Domain/ZhimaCreditScoreBriefGetModel.cs | 54 + .../AliPay/Domain/ZhimaCreditScoreGetModel.cs | 24 + .../ZhimaCreditWatchlistBriefGetModel.cs | 42 + .../Domain/ZhimaCreditWatchlistiiGetModel.cs | 24 + .../ZhimaCustomerAuthMutualviewApplyModel.cs | 42 + .../Domain/ZhimaCustomerBehaviorSyncModel.cs | 62 + .../ZhimaCustomerCertificationCertifyModel.cs | 18 + ...imaCustomerCertificationInitializeModel.cs | 60 + ...stomerCertificationMaterialCertifyModel.cs | 60 + .../ZhimaCustomerCertificationQueryModel.cs | 18 + .../ZhimaCustomerContractDetailQueryModel.cs | 30 + .../ZhimaCustomerContractInitializeModel.cs | 30 + .../ZhimaCustomerContractRecordSyncModel.cs | 42 + ...himaCustomerEpCertificationCertifyModel.cs | 18 + ...aCustomerEpCertificationInitializeModel.cs | 48 + .../ZhimaCustomerEpCertificationQueryModel.cs | 18 + ...imaCustomerEpIdentificationCertifyModel.cs | 18 + ...CustomerEpIdentificationInitializeModel.cs | 48 + ...ZhimaCustomerEpIdentificationQueryModel.cs | 18 + .../ZhimaCustomerFulfillmentSyncModel.cs | 60 + .../Domain/ZhimaDataFeedbackurlQueryModel.cs | 18 + .../Domain/ZhimaDataMorseOperateSyncModel.cs | 36 + .../Domain/ZhimaDataStateDataSyncModel.cs | 54 + .../ZhimaMerchantBorrowEntityUploadModel.cs | 108 + .../ZhimaMerchantContractCommonCancelModel.cs | 24 + ...ZhimaMerchantContractCommonConfirmModel.cs | 42 + .../ZhimaMerchantContractCommonQueryModel.cs | 30 + .../ZhimaMerchantContractOfferModifyModel.cs | 66 + .../ZhimaMerchantContractOfferQueryModel.cs | 18 + .../ZhimaMerchantContractOnofferQueryModel.cs | 30 + .../ZhimaMerchantContractPageQueryModel.cs | 66 + .../ZhimaMerchantContractQuickCreateModel.cs | 132 + .../ZhimaMerchantCreditlifeRiskApplyModel.cs | 48 + ...aMerchantCreditserviceDetailCreateModel.cs | 60 + ...aMerchantCreditserviceDetailModifyModel.cs | 42 + ...maMerchantCreditserviceDetailQueryModel.cs | 24 + .../ZhimaMerchantDataUploadInitializeModel.cs | 24 + .../ZhimaMerchantEvisaStatusSyncModel.cs | 51 + .../Domain/ZhimaMerchantOrderConfirmModel.cs | 24 + .../ZhimaMerchantOrderCreditConfirmModel.cs | 24 + .../ZhimaMerchantOrderCreditCreateModel.cs | 72 + .../ZhimaMerchantOrderCreditPayModel.cs | 60 + .../ZhimaMerchantOrderCreditQueryModel.cs | 24 + .../ZhimaMerchantOrderRentCancelModel.cs | 24 + .../ZhimaMerchantOrderRentCompleteModel.cs | 54 + .../ZhimaMerchantOrderRentCreateModel.cs | 156 + .../ZhimaMerchantOrderRentModifyModel.cs | 36 + .../ZhimaMerchantOrderRentQueryModel.cs | 24 + .../Domain/ZhimaMerchantOrderRentSyncModel.cs | 48 + .../ZhimaMerchantSingleDataUploadModel.cs | 42 + .../Domain/ZhimaMerchantTestPracticeModel.cs | 26 + .../AliPay/Domain/ZhimaOpenAppDesSendModel.cs | 24 + .../Domain/ZhimaOpenAppKeyanLqlCreateModel.cs | 18 + .../Domain/ZhimaOpenQerqQerqQueryModel.cs | 18 + PaymentSDK/AliPay/Domain/ZhimaRiskDetail.cs | 66 + PaymentSDK/AliPay/Domain/ZhubUidTelPair.cs | 24 + PaymentSDK/AliPay/Domain/ZmAuthParams.cs | 24 + PaymentSDK/AliPay/Domain/ZmContractDetail.cs | 207 + PaymentSDK/AliPay/Domain/ZmWatchListDetail.cs | 68 + .../AliPay/Domain/ZmWatchListExtendInfo.cs | 30 + ...onCustomerAnonymousfacesearchMatchModel.cs | 78 + ...icationCustomerFaceabilityIdentifyModel.cs | 48 + ...enticationCustomerFacemanageCreateModel.cs | 78 + ...enticationCustomerFacemanageDeleteModel.cs | 78 + ...henticationCustomerFaceverifyMatchModel.cs | 66 + ...zAuthenticationCustomerFtokenQueryModel.cs | 36 + ...icationCustomerSmileliveInitializeModel.cs | 18 + ...ticationCustomerSmilepayInitializeModel.cs | 30 + .../ZolozAuthenticationFaceInitializeModel.cs | 90 + ...ZolozAuthenticationFaceSearchQueryModel.cs | 36 + ...zAuthenticationSmilefaceSendmeSendModel.cs | 48 + ...ozAuthenticationSmilepayInitializeModel.cs | 90 + PaymentSDK/AliPay/Domain/ZolozDeviceInfo.cs | 204 + ...entificationCustomerBlacklistQueryModel.cs | 54 + ...entificationCustomerCertifyConsultModel.cs | 42 + ...ificationCustomerCertifyInitializeModel.cs | 66 + ...IdentificationCustomerCertifyQueryModel.cs | 24 + ...ationCustomerCertifyzhubInitializeModel.cs | 114 + ...tificationCustomerCertifyzhubQueryModel.cs | 36 + ...IdentificationCustomerEnrollCancelModel.cs | 24 + ...ionCustomerEnrollcertifyInitializeModel.cs | 72 + ...ficationCustomerEnrollcertifyQueryModel.cs | 36 + ...dentificationCustomerIdcardCertifyModel.cs | 42 + ...dentificationCustomerSmilerepoSyncModel.cs | 36 + ...ZolozIdentificationDeviceinfoQueryModel.cs | 30 + ...lozIdentificationUserWebInitializeModel.cs | 36 + .../ZolozIdentificationUserWebQueryModel.cs | 30 + .../ZolozIdentificationZolozidGetModel.cs | 36 + PaymentSDK/AliPay/HtmlHelpler.cs | 29 + PaymentSDK/AliPay/IAopClient.cs | 129 + PaymentSDK/AliPay/IAopRequest.cs | 120 + PaymentSDK/AliPay/IAopUploadRequest.cs | 19 + PaymentSDK/AliPay/Parser/AopAttribute.cs | 14 + PaymentSDK/AliPay/Parser/AopJsonParser.cs | 381 ++ PaymentSDK/AliPay/Parser/AopJsonReader.cs | 168 + PaymentSDK/AliPay/Parser/AopModelParser.cs | 191 + PaymentSDK/AliPay/Parser/AopXmlParser.cs | 265 + PaymentSDK/AliPay/Parser/CertItem.cs | 9 + PaymentSDK/AliPay/Parser/EncryptParseItem.cs | 15 + PaymentSDK/AliPay/Parser/IAopParser.cs | 44 + PaymentSDK/AliPay/Parser/IAopReader.cs | 46 + PaymentSDK/AliPay/Parser/ResponseParseItem.cs | 10 + PaymentSDK/AliPay/Parser/SignItem.cs | 17 + .../AftAifinFireeyeOcrImageQueryRequest.cs | 109 + ...ecureRiskplusSecurityPolicyQueryRequest.cs | 109 + .../Request/AliosOpenAutoInfoQueryRequest.cs | 109 + .../AlipayAccountExrateAdviceAcceptRequest.cs | 109 + ...yAccountExrateAllclientrateQueryRequest.cs | 109 + .../AlipayAccountExrateRatequeryRequest.cs | 109 + ...yAccountExrateTraderequestCreateRequest.cs | 109 + .../Request/AlipayAcquireCancelRequest.cs | 126 + .../Request/AlipayAcquireCloseRequest.cs | 120 + .../AlipayAcquireCreateandpayRequest.cs | 258 + .../Request/AlipayAcquirePrecreateRequest.cs | 210 + .../Request/AlipayAcquireQueryRequest.cs | 114 + .../Request/AlipayAcquireRefundRequest.cs | 150 + .../Request/AlipayAppTokenGetRequest.cs | 108 + .../AlipayAssetPointBalanceQueryRequest.cs | 102 + .../AlipayAssetPointBudgetQueryRequest.cs | 102 + .../AlipayAssetPointOrderCreateRequest.cs | 109 + .../AlipayAssetPointOrderQueryRequest.cs | 109 + .../AlipayBossCsChannelQueryRequest.cs | 109 + .../AlipayBossFncXwbtestRetModifyRequest.cs | 102 + ...yBossProdArrangementOfflineQueryRequest.cs | 108 + .../AlipayBossProdMyTestQueryRequest.cs | 109 + .../AlipayCommerceAdContractSignRequest.cs | 102 + ...yCommerceAirCallcenterTradeApplyRequest.cs | 109 + .../AlipayCommerceAirXfgDsgModifyRequest.cs | 109 + ...CommerceCityfacilitatorCityQueryRequest.cs | 102 + ...erceCityfacilitatorDepositCancelRequest.cs | 109 + ...rceCityfacilitatorDepositConfirmRequest.cs | 109 + ...merceCityfacilitatorDepositQueryRequest.cs | 109 + ...erceCityfacilitatorFunctionQueryRequest.cs | 109 + ...mmerceCityfacilitatorScriptQueryRequest.cs | 109 + ...merceCityfacilitatorStationQueryRequest.cs | 109 + ...CityfacilitatorVoucherBatchqueryRequest.cs | 109 + ...erceCityfacilitatorVoucherCancelRequest.cs | 109 + ...rceCityfacilitatorVoucherConfirmRequest.cs | 109 + ...ceCityfacilitatorVoucherGenerateRequest.cs | 109 + ...merceCityfacilitatorVoucherQueryRequest.cs | 109 + ...erceCityfacilitatorVoucherRefundRequest.cs | 109 + ...erceCityfacilitatorVoucherUploadRequest.cs | 109 + ...AlipayCommerceDataCampaignCreateRequest.cs | 109 + .../AlipayCommerceDataCampaignSendRequest.cs | 109 + ...ipayCommerceDataCustommetricSyncRequest.cs | 109 + .../AlipayCommerceDataLogdataSyncRequest.cs | 109 + ...lipayCommerceDataMonitordataSyncRequest.cs | 109 + ...cateAuthenticateCampuscardCreateRequest.cs | 109 + ...cateAuthenticateCampuscardDeleteRequest.cs | 109 + ...EducateCampuscardAuthorizedQueryRequest.cs | 102 + ...erceEducateParttimejobInfoCreateRequest.cs | 109 + ...erceEducateSchoolcodeTokenCreateRequest.cs | 109 + ...yCommerceEducateStudentinfoShareRequest.cs | 102 + ...ayCommerceEducateUserClickCreateRequest.cs | 109 + ...ayCommerceIotDeviceserviceCancelRequest.cs | 109 + ...payCommerceIotReceiptDetailQueryRequest.cs | 109 + .../AlipayCommerceIotReceiptSendRequest.cs | 109 + ...CommerceIotSdarttoolMessageQueryRequest.cs | 109 + ...yCommerceIotSdarttoolMessageSendRequest.cs | 109 + ...merceLogisticsWaybillMinimctSyncRequest.cs | 109 + ...AlipayCommerceLotteryPresentSendRequest.cs | 109 + ...yCommerceLotteryPresentlistQueryRequest.cs | 109 + ...ipayCommerceLotteryTypelistQueryRequest.cs | 102 + ...eTransportIntelligentizeDataSyncRequest.cs | 109 + ...ipayCommerceTransportNfccardSendRequest.cs | 109 + ...merceTransportOfflinepayKeyQueryRequest.cs | 102 + ...eTransportOfflinepayRecordVerifyRequest.cs | 109 + ...portOfflinepayUserblacklistQueryRequest.cs | 109 + ...ceTransportParkingReserveConfirmRequest.cs | 109 + ...TransportVehicleownerMessageSendRequest.cs | 109 + .../Request/AlipayDaoweiOrderCancelRequest.cs | 109 + .../AlipayDaoweiOrderConfirmRequest.cs | 109 + .../Request/AlipayDaoweiOrderModifyRequest.cs | 109 + .../Request/AlipayDaoweiOrderQueryRequest.cs | 109 + .../Request/AlipayDaoweiOrderRefundRequest.cs | 109 + .../Request/AlipayDaoweiOrderRefuseRequest.cs | 109 + .../AlipayDaoweiOrderSpModifyRequest.cs | 109 + .../AlipayDaoweiOrderTransferRequest.cs | 109 + .../AlipayDaoweiServiceModifyRequest.cs | 109 + .../Request/AlipayDaoweiSpModifyRequest.cs | 109 + .../AlipayDaoweiSpScheduleModifyRequest.cs | 109 + ...ipayDataAiserviceSgxGatewayQueryRequest.cs | 109 + ...iceSmartpriceMerchanteffectQueryRequest.cs | 109 + .../AlipayDataBillAccountlogQueryRequest.cs | 109 + .../Request/AlipayDataBillBailQueryRequest.cs | 109 + .../AlipayDataBillBalanceQueryRequest.cs | 102 + .../AlipayDataBillBalancehisQueryRequest.cs | 109 + .../Request/AlipayDataBillBuyQueryRequest.cs | 109 + .../AlipayDataBillDownloadurlGetRequest.cs | 114 + .../AlipayDataBillEreceiptApplyRequest.cs | 109 + .../AlipayDataBillEreceiptQueryRequest.cs | 109 + .../Request/AlipayDataBillSellQueryRequest.cs | 109 + .../AlipayDataBillTransferQueryRequest.cs | 109 + .../AlipayDataDataexchangeSfasdfRequest.cs | 109 + ...aDataserviceAdCreativeBatchqueryRequest.cs | 109 + ...aserviceAdCreativeCreateormodifyRequest.cs | 109 + ...ayDataDataserviceAdCreativeQueryRequest.cs | 109 + ...AlipayDataDataserviceAdDataQueryRequest.cs | 109 + ...DataserviceAdGroupCreateormodifyRequest.cs | 109 + ...lipayDataDataserviceAdGroupQueryRequest.cs | 109 + .../AlipayDataDataserviceAdOfflineRequest.cs | 109 + .../AlipayDataDataserviceAdOnlineRequest.cs | 109 + ...aDataserviceAdPlanCreateormodifyRequest.cs | 109 + ...AlipayDataDataserviceAdPlanQueryRequest.cs | 109 + ...serviceAdPrincipalCheckavailableRequest.cs | 109 + ...ataDataserviceAdPrincipalConsultRequest.cs | 109 + ...serviceAdPrincipalCreateormodifyRequest.cs | 109 + ...yDataDataserviceAdPrincipalQueryRequest.cs | 109 + ...ataDataserviceAdPromotepageQueryRequest.cs | 109 + ...rviceAdPromotepagestatisticQueryRequest.cs | 109 + ...lipayDataDataserviceAdUserCreateRequest.cs | 109 + ...aDataserviceAdUserbalanceOfflineRequest.cs | 109 + ...taDataserviceAdUserbalanceOnlineRequest.cs | 109 + ...aDataserviceBillDownloadurlQueryRequest.cs | 109 + ...DataDataserviceChinaremodelQueryRequest.cs | 109 + .../AlipayDataDataserviceCodeRecoRequest.cs | 109 + .../AlipayDataDataserviceSdfsdfRequest.cs | 102 + ...aserviceShoppingmallrecShopQueryRequest.cs | 109 + ...rviceShoppingmallrecVoucherQueryRequest.cs | 109 + ...DataDataserviceUserlevelZrankGetRequest.cs | 109 + .../Request/AlipayEbppBillAddRequest.cs | 186 + .../Request/AlipayEbppBillGetRequest.cs | 114 + .../Request/AlipayEbppBillSearchRequest.cs | 144 + ...AlipayEbppInvoiceApplyResultSyncRequest.cs | 109 + ...lipayEbppInvoiceApplystatusQueryRequest.cs | 109 + .../AlipayEbppInvoiceAuthSignRequest.cs | 109 + .../AlipayEbppInvoiceAuthUnsignRequest.cs | 109 + ...ipayEbppInvoiceDetailOutputQueryRequest.cs | 109 + ...lipayEbppInvoiceEinvpackageQueryRequest.cs | 109 + ...ayEbppInvoiceExpenseProgressSyncRequest.cs | 109 + ...AlipayEbppInvoiceFileOutputQueryRequest.cs | 109 + .../AlipayEbppInvoiceInfoSendRequest.cs | 109 + ...ipayEbppInvoiceIsvtokenReimApplyRequest.cs | 109 + ...AlipayEbppInvoiceListExpenseSyncRequest.cs | 109 + ...pInvoiceMerchantEnterstatusQueryRequest.cs | 109 + ...bppInvoiceMerchantlistEnterApplyRequest.cs | 109 + .../AlipayEbppInvoiceOrderQueryRequest.cs | 109 + .../Request/AlipayEbppInvoiceSycnRequest.cs | 109 + .../AlipayEbppInvoiceSyncSimpleSendRequest.cs | 109 + ...AlipayEbppInvoiceTaxnoBatchqueryRequest.cs | 109 + ...AlipayEbppInvoiceTitleDynamicGetRequest.cs | 109 + .../AlipayEbppInvoiceTitleListGetRequest.cs | 109 + .../AlipayEbppMerchantConfigGetRequest.cs | 102 + .../AlipayEbppPdeductBillPayStatusRequest.cs | 114 + .../Request/AlipayEbppPdeductPayRequest.cs | 174 + .../AlipayEbppPdeductSignAddRequest.cs | 210 + .../AlipayEbppPdeductSignCancelRequest.cs | 132 + .../AlipayEbppPdeductSignQueryRequest.cs | 109 + .../AlipayEbppPdeductSignValidateRequest.cs | 109 + .../AlipayEcapiprodCreditGetRequest.cs | 132 + .../Request/AlipayEcapiprodDataPutRequest.cs | 156 + ...lipayEcapiprodDrawndnContractGetRequest.cs | 132 + ...EcapiprodDrawndnDrawndnlistQueryRequest.cs | 132 + ...ayEcapiprodDrawndnFeerecordQueryRequest.cs | 144 + ...apiprodDrawndnLendingrecordQueryRequest.cs | 144 + ...apiprodDrawndnPaymentscheduleGetRequest.cs | 132 + ...iprodDrawndnRepaymentrecordQueryRequest.cs | 144 + .../AlipayEcardEduPublicBindRequest.cs | 138 + .../AlipayEcoCityserviceMessageSendRequest.cs | 109 + ...AlipayEcoContractSignflowsCreateRequest.cs | 109 + ...yEcoCplifeBasicserviceInitializeRequest.cs | 109 + ...lipayEcoCplifeBasicserviceModifyRequest.cs | 109 + .../AlipayEcoCplifeBillBatchUploadRequest.cs | 109 + .../AlipayEcoCplifeBillBatchqueryRequest.cs | 109 + .../AlipayEcoCplifeBillDeleteRequest.cs | 109 + .../AlipayEcoCplifeBillModifyRequest.cs | 109 + .../Request/AlipayEcoCplifeBillSyncRequest.cs | 109 + ...ipayEcoCplifeCommunityBatchqueryRequest.cs | 109 + .../AlipayEcoCplifeCommunityCreateRequest.cs | 109 + ...ayEcoCplifeCommunityDetailsQueryRequest.cs | 109 + .../AlipayEcoCplifeCommunityModifyRequest.cs | 109 + .../AlipayEcoCplifeNoticeDeleteRequest.cs | 109 + .../AlipayEcoCplifeNoticePublishRequest.cs | 109 + .../AlipayEcoCplifePayResultQueryRequest.cs | 109 + ...lipayEcoCplifeRepairStatusUpdateRequest.cs | 109 + ...lipayEcoCplifeResidentinfoDeleteRequest.cs | 109 + ...lipayEcoCplifeResidentinfoUploadRequest.cs | 109 + .../AlipayEcoCplifeRoominfoDeleteRequest.cs | 109 + .../AlipayEcoCplifeRoominfoQueryRequest.cs | 109 + .../AlipayEcoCplifeRoominfoUploadRequest.cs | 109 + .../AlipayEcoCplifeRooominfoQueryRequest.cs | 109 + ...coCplifeUseridentityStatusUpdateRequest.cs | 109 + .../AlipayEcoDocTemplateCreateRequest.cs | 109 + ...payEcoDoctemplateSettingurlQueryRequest.cs | 109 + .../AlipayEcoEduKtBillingModifyRequest.cs | 109 + .../AlipayEcoEduKtBillingQueryRequest.cs | 109 + .../AlipayEcoEduKtBillingSendRequest.cs | 109 + .../AlipayEcoEduKtParentQueryRequest.cs | 109 + .../AlipayEcoEduKtSchoolinfoModifyRequest.cs | 109 + .../AlipayEcoEduKtStudentModifyRequest.cs | 109 + .../AlipayEcoEduKtStudentQueryRequest.cs | 109 + .../Request/AlipayEcoFilePathQueryRequest.cs | 109 + .../AlipayEcoMycarCarlibInfoPushRequest.cs | 109 + .../AlipayEcoMycarCarmodelModifyRequest.cs | 109 + .../AlipayEcoMycarDataExternalQueryRequest.cs | 109 + .../AlipayEcoMycarDataExternalSendRequest.cs | 109 + ...carDataserviceViolationinfoShareRequest.cs | 109 + ...AlipayEcoMycarMaintainDataUpdateRequest.cs | 109 + ...lipayEcoMycarMaintainOrderCreateRequest.cs | 109 + ...coMycarMaintainOrderstatusUpdateRequest.cs | 109 + .../AlipayEcoMycarOrderStatusQueryRequest.cs | 109 + ...payEcoMycarParkingAgreementQueryRequest.cs | 109 + ...EcoMycarParkingCardbarcodeCreateRequest.cs | 109 + ...payEcoMycarParkingChargeinfoSyncRequest.cs | 109 + ...AlipayEcoMycarParkingConfigQueryRequest.cs | 109 + .../AlipayEcoMycarParkingConfigSetRequest.cs | 109 + ...ipayEcoMycarParkingEnterinfoSyncRequest.cs | 109 + ...lipayEcoMycarParkingExitinfoSyncRequest.cs | 109 + ...yEcoMycarParkingLotbarcodeCreateRequest.cs | 109 + .../AlipayEcoMycarParkingOrderPayRequest.cs | 109 + ...AlipayEcoMycarParkingOrderRefundRequest.cs | 109 + .../AlipayEcoMycarParkingOrderSyncRequest.cs | 109 + ...AlipayEcoMycarParkingOrderUpdateRequest.cs | 109 + ...yEcoMycarParkingOrderstatusQueryRequest.cs | 109 + ...MycarParkingParkinglotinfoCreateRequest.cs | 109 + ...oMycarParkingParkinglotinfoQueryRequest.cs | 109 + ...MycarParkingParkinglotinfoUpdateRequest.cs | 109 + ...ipayEcoMycarParkingSpaceinfoSyncRequest.cs | 109 + ...lipayEcoMycarParkingVehicleQueryRequest.cs | 109 + .../AlipayEcoMycarPromoTicketPushRequest.cs | 109 + .../AlipayEcoMycarPromoTicketSyncRequest.cs | 109 + ...AlipayEcoMycarPromoVoucherVerifyRequest.cs | 109 + .../AlipayEcoMycarTradeOrderQueryRequest.cs | 109 + .../AlipayEcoMycarTradeRefundRequest.cs | 109 + .../AlipayEcoMycarViolationCityPushRequest.cs | 109 + .../AlipayEcoMycarViolationInfoPushRequest.cs | 109 + .../AlipayEcoRebateBalanceQueryRequest.cs | 109 + .../AlipayEcoRebateBalanceSendRequest.cs | 109 + .../Request/AlipayEcoSignFlowCancelRequest.cs | 109 + .../Request/AlipayEcoSignFlowCreateRequest.cs | 109 + .../Request/AlipayEcoSignFlowFinishRequest.cs | 109 + .../Request/AlipayEcoSignFlowQueryRequest.cs | 109 + .../AlipayEcoSignflowsDetailQueryRequest.cs | 109 + .../AlipayEcoSignflowsUrlQueryRequest.cs | 109 + .../AlipayEcoWelfareCodeSyncRequest.cs | 109 + .../AlipayExscUserCurrentsignGetRequest.cs | 108 + ...AlipayExscUserFirstfundinpourGetRequest.cs | 108 + .../AlipayExscUserFirstsignGetRequest.cs | 108 + .../AlipayFlashsalesStockSyncUpdateRequest.cs | 120 + .../Request/AlipayFundAccountQueryRequest.cs | 109 + .../AlipayFundAccountbookCreateRequest.cs | 109 + .../AlipayFundAccountbookQueryRequest.cs | 109 + .../AlipayFundAuthOperationCancelRequest.cs | 109 + ...ipayFundAuthOperationDetailQueryRequest.cs | 109 + .../AlipayFundAuthOrderAppFreezeRequest.cs | 109 + .../AlipayFundAuthOrderFreezeRequest.cs | 109 + .../AlipayFundAuthOrderUnfreezeRequest.cs | 109 + ...AlipayFundAuthOrderVoucherCreateRequest.cs | 109 + .../Request/AlipayFundBatchCloseRequest.cs | 109 + .../Request/AlipayFundBatchCreateRequest.cs | 109 + .../AlipayFundBatchDetailQueryRequest.cs | 109 + .../Request/AlipayFundBatchTransferRequest.cs | 109 + .../AlipayFundBatchUniTransferRequest.cs | 109 + .../AlipayFundCouponOperationQueryRequest.cs | 109 + ...lipayFundCouponOrderAgreementPayRequest.cs | 109 + .../AlipayFundCouponOrderAppPayRequest.cs | 109 + .../AlipayFundCouponOrderDisburseRequest.cs | 109 + .../AlipayFundCouponOrderPagePayRequest.cs | 109 + .../AlipayFundCouponOrderRefundRequest.cs | 109 + .../Request/AlipayFundTransAppPayRequest.cs | 109 + .../AlipayFundTransCommonQueryRequest.cs | 109 + .../AlipayFundTransOrderQueryRequest.cs | 109 + .../Request/AlipayFundTransRefundRequest.cs | 109 + ...AlipayFundTransToaccountTransferRequest.cs | 109 + .../AlipayFundTransUniTransferRequest.cs | 109 + ...oAutoaftermarketAttachmentUploadRequest.cs | 109 + ...toaftermarketDepotCreateormodifyRequest.cs | 109 + ...oaftermarketInserviceorderNotifyRequest.cs | 109 + ...sAutoAutoaftermarketOutorderSyncRequest.cs | 109 + ...yInsAutoAutoinsprodCommonConsultRequest.cs | 109 + ...ayInsAutoAutoinsprodEnquriyApplyRequest.cs | 109 + ...payInsAutoAutoinsprodPolicyApplyRequest.cs | 109 + ...ayInsAutoAutoinsprodPolicyCancelRequest.cs | 109 + ...ipayInsAutoAutoinsprodQuoteApplyRequest.cs | 109 + ...ipayInsAutoAutoinsprodQuoteQueryRequest.cs | 109 + ...payInsAutoAutoinsprodUserCertifyRequest.cs | 109 + .../Request/AlipayInsAutoCarSaveRequest.cs | 109 + ...perationProductOfflineBatchqueryRequest.cs | 109 + ...InsCooperationProductQrcodeApplyRequest.cs | 109 + ...yInsCooperationRegionQrcodeApplyRequest.cs | 109 + ...yInsSceneApplicationIssueConfirmRequest.cs | 109 + .../AlipayInsSceneCouponReceiveRequest.cs | 109 + .../AlipayInsSceneCouponSendRequest.cs | 109 + ...ingCampaignActivityOfflineCreateRequest.cs | 109 + ...ngCampaignActivityOfflineTriggerRequest.cs | 109 + ...lipayMarketingCampaignCashCreateRequest.cs | 109 + ...MarketingCampaignCashDetailQueryRequest.cs | 109 + ...ayMarketingCampaignCashListQueryRequest.cs | 109 + ...arketingCampaignCashStatusModifyRequest.cs | 109 + ...ipayMarketingCampaignCashTriggerRequest.cs | 109 + ...lipayMarketingCampaignCertCreateRequest.cs | 109 + ...tingCampaignDiscountBudgetAppendRequest.cs | 109 + ...tingCampaignDiscountBudgetCreateRequest.cs | 109 + ...etingCampaignDiscountBudgetQueryRequest.cs | 109 + ...ayMarketingCampaignDiscountQueryRequest.cs | 109 + ...tingCampaignDiscountStatusUpdateRequest.cs | 109 + ...ngCampaignDiscountWhitelistQueryRequest.cs | 109 + ...gCampaignDiscountWhitelistUpdateRequest.cs | 109 + ...yMarketingCampaignDrawcampCreateRequest.cs | 109 + ...ayMarketingCampaignDrawcampQueryRequest.cs | 109 + ...tingCampaignDrawcampStatusUpdateRequest.cs | 109 + ...yMarketingCampaignDrawcampUpdateRequest.cs | 109 + ...gCampaignDrawcampWhitelistCreateRequest.cs | 109 + ...arketingCampaignPrizeAmountQueryRequest.cs | 109 + ...ayMarketingCardActivateformQueryRequest.cs | 109 + ...payMarketingCardActivateurlApplyRequest.cs | 109 + ...AlipayMarketingCardBenefitCreateRequest.cs | 109 + ...AlipayMarketingCardBenefitDeleteRequest.cs | 109 + ...AlipayMarketingCardBenefitModifyRequest.cs | 109 + .../AlipayMarketingCardBenefitQueryRequest.cs | 109 + .../AlipayMarketingCardConsumeSyncRequest.cs | 109 + .../AlipayMarketingCardDeleteRequest.cs | 109 + ...ipayMarketingCardFormtemplateSetRequest.cs | 109 + .../Request/AlipayMarketingCardOpenRequest.cs | 109 + .../AlipayMarketingCardQueryRequest.cs | 109 + ...yMarketingCardTemplateBatchqueryRequest.cs | 109 + ...lipayMarketingCardTemplateCreateRequest.cs | 109 + ...lipayMarketingCardTemplateModifyRequest.cs | 109 + ...AlipayMarketingCardTemplateQueryRequest.cs | 109 + .../AlipayMarketingCardUpdateRequest.cs | 109 + ...ingCashitemvoucherTemplateCreateRequest.cs | 109 + ...ashlessitemvoucherTemplateCreateRequest.cs | 109 + ...ingCashlessvoucherTemplateCreateRequest.cs | 109 + ...ingCashlessvoucherTemplateModifyRequest.cs | 109 + ...rketingCashvoucherTemplateCreateRequest.cs | 109 + ...rketingCashvoucherTemplateModifyRequest.cs | 109 + ...lipayMarketingCdpAdvertiseCreateRequest.cs | 109 + ...lipayMarketingCdpAdvertiseModifyRequest.cs | 109 + ...ipayMarketingCdpAdvertiseOperateRequest.cs | 109 + ...AlipayMarketingCdpAdvertiseQueryRequest.cs | 109 + ...MarketingCdpAdvertiseReportQueryRequest.cs | 109 + ...AlipayMarketingCdpRecommendQueryRequest.cs | 109 + ...payMarketingCouponTemplateCreateRequest.cs | 109 + ...ingExchangevoucherTemplateCreateRequest.cs | 109 + ...lipayMarketingExchangevoucherUseRequest.cs | 109 + ...ipayMarketingFacetofaceDecodeUseRequest.cs | 109 + ...ipayMarketingMaterialImageUploadRequest.cs | 119 + ...rketingToolFengdieActivityCreateRequest.cs | 109 + ...arketingToolFengdieActivityQueryRequest.cs | 109 + ...yMarketingToolFengdieEditorQueryRequest.cs | 109 + ...MarketingToolFengdieMemberCreateRequest.cs | 109 + ...ketingToolFengdieSitesBatchqueryRequest.cs | 109 + ...MarketingToolFengdieSitesConfirmRequest.cs | 109 + ...yMarketingToolFengdieSitesCreateRequest.cs | 109 + ...yMarketingToolFengdieSitesDeleteRequest.cs | 109 + ...ayMarketingToolFengdieSitesQueryRequest.cs | 109 + ...payMarketingToolFengdieSitesSyncRequest.cs | 109 + ...ketingToolFengdieSpaceBatchqueryRequest.cs | 109 + ...yMarketingToolFengdieSpaceCreateRequest.cs | 109 + ...ayMarketingToolFengdieSpaceQueryRequest.cs | 109 + ...ingToolFengdieTemplateBatchqueryRequest.cs | 109 + ...arketingToolFengdieTemplateQueryRequest.cs | 109 + ...MarketingToolFengdieTemplateSendRequest.cs | 109 + .../AlipayMarketingUserulePidQueryRequest.cs | 109 + .../AlipayMarketingVoucherAuthSendRequest.cs | 109 + .../AlipayMarketingVoucherConfirmRequest.cs | 109 + .../AlipayMarketingVoucherListQueryRequest.cs | 109 + .../AlipayMarketingVoucherQueryRequest.cs | 109 + .../AlipayMarketingVoucherSendRequest.cs | 109 + ...lipayMarketingVoucherStockCreateRequest.cs | 109 + ...AlipayMarketingVoucherStockMatchRequest.cs | 109 + ...AlipayMarketingVoucherStockQueryRequest.cs | 109 + .../AlipayMarketingVoucherStockUseRequest.cs | 109 + ...ayMarketingVoucherTemplateDeleteRequest.cs | 109 + ...ketingVoucherTemplatedetailQueryRequest.cs | 109 + ...arketingVoucherTemplatelistQueryRequest.cs | 109 + .../Request/AlipayMdataTagGetRequest.cs | 114 + .../AlipayMemberCouponQuerylistRequest.cs | 132 + .../AlipayMerchantItemFileUploadRequest.cs | 125 + ...AlipayMerchantOrderConsumerQueryRequest.cs | 109 + ...antOrderDigestConsumerBatchqueryRequest.cs | 109 + ...OrderSecuritydetailConsumerQueryRequest.cs | 109 + ...SecuritydigestConsumerBatchqueryRequest.cs | 109 + .../Request/AlipayMerchantOrderSyncRequest.cs | 109 + ...payMicropayOrderConfirmpayurlGetRequest.cs | 132 + .../AlipayMicropayOrderDirectPayRequest.cs | 132 + .../AlipayMicropayOrderFreezeRequest.cs | 132 + ...ipayMicropayOrderFreezepayurlGetRequest.cs | 108 + .../Request/AlipayMicropayOrderGetRequest.cs | 108 + .../AlipayMicropayOrderUnfreezeRequest.cs | 114 + .../AlipayMobileBeaconDeviceAddRequest.cs | 108 + .../AlipayMobileBeaconDeviceDeleteRequest.cs | 108 + .../AlipayMobileBeaconDeviceModifyRequest.cs | 108 + .../AlipayMobileBeaconDeviceQueryRequest.cs | 108 + .../AlipayMobileBeaconMessageSendRequest.cs | 108 + .../AlipayMobileBksigntokenVerifyRequest.cs | 120 + .../Request/AlipayMobileCodeCreateRequest.cs | 156 + .../Request/AlipayMobileCodeQueryRequest.cs | 108 + .../AlipayMobilePublicAccountAddRequest.cs | 138 + .../AlipayMobilePublicAccountDeleteRequest.cs | 108 + .../AlipayMobilePublicAccountQueryRequest.cs | 108 + .../AlipayMobilePublicAccountResetRequest.cs | 138 + .../AlipayMobilePublicAppinfoUpdateRequest.cs | 108 + ...payMobilePublicContactFollowListRequest.cs | 102 + .../AlipayMobilePublicFollowListRequest.cs | 108 + .../AlipayMobilePublicGisGetRequest.cs | 108 + .../AlipayMobilePublicInfoModifyRequest.cs | 150 + .../AlipayMobilePublicInfoQueryRequest.cs | 102 + .../AlipayMobilePublicLabelAddRequest.cs | 108 + .../AlipayMobilePublicLabelDeleteRequest.cs | 108 + .../AlipayMobilePublicLabelQueryRequest.cs | 108 + .../AlipayMobilePublicLabelUpdateRequest.cs | 108 + .../AlipayMobilePublicLabelUserAddRequest.cs | 108 + ...lipayMobilePublicLabelUserDeleteRequest.cs | 108 + ...AlipayMobilePublicLabelUserQueryRequest.cs | 108 + .../AlipayMobilePublicMenuAddRequest.cs | 108 + .../AlipayMobilePublicMenuDeleteRequest.cs | 108 + .../AlipayMobilePublicMenuGetRequest.cs | 102 + .../AlipayMobilePublicMenuQueryRequest.cs | 102 + .../AlipayMobilePublicMenuUpdateRequest.cs | 108 + .../AlipayMobilePublicMenuUserQueryRequest.cs | 108 + ...AlipayMobilePublicMenuUserUpdateRequest.cs | 108 + ...payMobilePublicMessageCustomSendRequest.cs | 108 + ...ipayMobilePublicMessageLabelSendRequest.cs | 108 + .../AlipayMobilePublicMessagePushRequest.cs | 108 + ...payMobilePublicMessageSingleSendRequest.cs | 108 + ...ipayMobilePublicMessageTotalSendRequest.cs | 108 + ...ipayMobilePublicMessagebatchPushRequest.cs | 108 + ...ayMobilePublicMessagespecifyPushRequest.cs | 108 + .../AlipayMobilePublicQrcodeCreateRequest.cs | 108 + ...lipayMobilePublicShortlinkCreateRequest.cs | 108 + ...obilePublicTemplateMessageDeleteRequest.cs | 108 + ...ayMobilePublicTemplateMessageGetRequest.cs | 108 + ...obilePublicTemplateMessageModifyRequest.cs | 114 + ...MobilePublicTemplateMessageQueryRequest.cs | 114 + .../AlipayMobileRecommendGetRequest.cs | 132 + .../AlipayMobileShakeUserQueryRequest.cs | 114 + ...lipayMobileStdPublicAccountQueryRequest.cs | 108 + ...yMobileStdPublicExpressUserQueryRequest.cs | 108 + .../AlipayMobileStdPublicFollowListRequest.cs | 108 + .../AlipayMobileStdPublicMenuQueryRequest.cs | 102 + ...MobileStdPublicMessageCustomSendRequest.cs | 108 + ...AlipayMpointprodBenefitDetailGetRequest.cs | 108 + ...sMediarecogVoiceMediaaudioUploadRequest.cs | 109 + ...lipayMsaasPromotionCpainfoCreateRequest.cs | 109 + ...fflineMarketApplyorderBatchqueryRequest.cs | 109 + .../AlipayOfflineMarketItemCreateRequest.cs | 109 + .../AlipayOfflineMarketItemModifyRequest.cs | 109 + .../AlipayOfflineMarketItemStateRequest.cs | 109 + ...AlipayOfflineMarketMcommentQueryRequest.cs | 109 + ...ayOfflineMarketProductBatchqueryRequest.cs | 109 + ...yOfflineMarketProductQuerydetailRequest.cs | 109 + ...ayOfflineMarketReporterrorCreateRequest.cs | 109 + ...fflineMarketShopApplyorderCancelRequest.cs | 109 + ...lipayOfflineMarketShopBatchqueryRequest.cs | 109 + ...ayOfflineMarketShopCategoryQueryRequest.cs | 109 + .../AlipayOfflineMarketShopCreateRequest.cs | 109 + ...ayOfflineMarketShopDiscountQueryRequest.cs | 109 + .../AlipayOfflineMarketShopModifyRequest.cs | 109 + ...lipayOfflineMarketShopPublicBindRequest.cs | 114 + ...payOfflineMarketShopPublicUnbindRequest.cs | 114 + ...ipayOfflineMarketShopQuerydetailRequest.cs | 109 + ...flineMarketShopSummaryBatchqueryRequest.cs | 109 + ...fflineMarketingVoucherCodeUploadRequest.cs | 131 + ...payOfflineMarketingVoucherCreateRequest.cs | 109 + ...payOfflineMarketingVoucherModifyRequest.cs | 109 + ...ayOfflineMarketingVoucherOfflineRequest.cs | 109 + ...flineMarketingVoucherStatusQueryRequest.cs | 109 + ...AlipayOfflineMarketingVoucherUseRequest.cs | 109 + ...ipayOfflineMaterialImageDownloadRequest.cs | 108 + ...AlipayOfflineMaterialImageUploadRequest.cs | 137 + .../AlipayOfflineProviderDishQueryRequest.cs | 109 + ...ProviderEquipmentAuthQuerybypageRequest.cs | 109 + ...flineProviderEquipmentAuthRemoveRequest.cs | 109 + ...payOfflineProviderMonitorLogSyncRequest.cs | 109 + ...yOfflineProviderShopactionRecordRequest.cs | 109 + ...yOfflineProviderUseractionRecordRequest.cs | 109 + .../Request/AlipayOpenAgentCancelRequest.cs | 109 + .../Request/AlipayOpenAgentConfirmRequest.cs | 109 + .../Request/AlipayOpenAgentCreateRequest.cs | 109 + .../AlipayOpenAgentFacetofaceSignRequest.cs | 185 + .../AlipayOpenAgentMiniCreateRequest.cs | 173 + .../AlipayOpenAgentMobilepaySignRequest.cs | 173 + ...lipayOpenAgentOfflinepaymentSignRequest.cs | 167 + .../AlipayOpenAgentOrderQueryRequest.cs | 109 + .../AlipayOpenAgentSignstatusQueryRequest.cs | 109 + .../AlipayOpenAgentZhimabriefSignRequest.cs | 234 + .../AlipayOpenAppAlipaycertDownloadRequest.cs | 109 + ...yOpenAppAppcontentFunctionCreateRequest.cs | 109 + ...yOpenAppAppcontentFunctionModifyRequest.cs | 109 + ...OpenAppAppcontentFunctionOfflineRequest.cs | 109 + ...ayOpenAppAppcontentFunctionQueryRequest.cs | 109 + ...yOpenAppAppcontentItemBatchqueryRequest.cs | 109 + ...lipayOpenAppAppcontentItemCreateRequest.cs | 109 + ...lipayOpenAppAppcontentItemDeleteRequest.cs | 109 + ...lipayOpenAppAppcontentItemModifyRequest.cs | 109 + ...AlipayOpenAppAppcontentItemQueryRequest.cs | 109 + .../Request/AlipayOpenAppCallQueryRequest.cs | 102 + .../AlipayOpenAppCodetesttestRequest.cs | 109 + .../AlipayOpenAppDedfDdQueryRequest.cs | 109 + .../AlipayOpenAppDfsfasDeQueryRequest.cs | 109 + .../AlipayOpenAppLingbalingliuQueryRequest.cs | 109 + .../AlipayOpenAppLingjiuyisiCreateRequest.cs | 102 + ...ipayOpenAppLingjiuyiwuBatchqueryRequest.cs | 102 + .../AlipayOpenAppMembersCreateRequest.cs | 109 + .../AlipayOpenAppMembersDeleteRequest.cs | 109 + .../AlipayOpenAppMembersQueryRequest.cs | 109 + ...OpenAppMessageSubscriptionModifyRequest.cs | 109 + ...yOpenAppMessageSubscriptionQueryRequest.cs | 109 + ...ipayOpenAppMessageTopicSubscribeRequest.cs | 109 + ...ayOpenAppMessageTopicUnsubscribeRequest.cs | 109 + ...ayOpenAppMiniTemplatemessageSendRequest.cs | 109 + .../AlipayOpenAppNotifyModifyRequest.cs | 102 + .../AlipayOpenAppNotifyVerifyRequest.cs | 109 + ...penAppOpenbizmockApisdkgrayQueryRequest.cs | 109 + ...payOpenAppOpenbizmockMessageSendRequest.cs | 109 + ...ppOpenbizmockOpenidnonstandQueryRequest.cs | 109 + .../AlipayOpenAppQrcodeCreateRequest.cs | 109 + .../Request/AlipayOpenAppSmgMsgSendRequest.cs | 109 + .../AlipayOpenAppSmsgDataSyncRequest.cs | 109 + ...SystemNewcontextupiduoidTransferRequest.cs | 109 + ...AlipayOpenAppUpdattestBatchqueryRequest.cs | 109 + .../AlipayOpenAppXwbtestabcQueryRequest.cs | 109 + .../AlipayOpenAppYiyiyiwuQueryRequest.cs | 109 + ...ingsanyaowuYufalingsanyaowuQueryRequest.cs | 109 + .../Request/AlipayOpenAuthAppAesGetRequest.cs | 109 + .../Request/AlipayOpenAuthAppAesSetRequest.cs | 109 + ...nAuthIndustryPlatformCreateTokenRequest.cs | 109 + .../AlipayOpenAuthTokenAppQueryRequest.cs | 109 + .../Request/AlipayOpenAuthTokenAppRequest.cs | 109 + .../Request/AlipayOpenBizCreateRequest.cs | 127 + .../Request/AlipayOpenDafBatchqueryRequest.cs | 102 + .../AlipayOpenEchoOfflineSendRequest.cs | 102 + .../AlipayOpenInviteOrderCreateRequest.cs | 109 + .../AlipayOpenInviteOrderQueryRequest.cs | 109 + .../AlipayOpenMessagetestCesSendRequest.cs | 109 + .../AlipayOpenMiniBaseinfoModifyRequest.cs | 167 + .../AlipayOpenMiniBaseinfoQueryRequest.cs | 102 + ...MiniBizdataTemplatemessageDeleteRequest.cs | 109 + ...MiniBizdataTemplatemessageUploadRequest.cs | 109 + .../AlipayOpenMiniCategoryQueryRequest.cs | 109 + .../AlipayOpenMiniContentSyncRequest.cs | 109 + .../AlipayOpenMiniDataVisitQueryRequest.cs | 109 + .../AlipayOpenMiniExperienceCancelRequest.cs | 109 + .../AlipayOpenMiniExperienceCreateRequest.cs | 109 + .../AlipayOpenMiniExperienceQueryRequest.cs | 109 + ...penMiniIndividualBusinessCertifyRequest.cs | 114 + .../AlipayOpenMiniItemBatchqueryRequest.cs | 109 + .../AlipayOpenMiniItemPageQueryRequest.cs | 109 + ...enMiniMiniappServiceconfigModifyRequest.cs | 109 + .../AlipayOpenMiniQrcodeBindRequest.cs | 109 + .../AlipayOpenMiniQrcodeUnbindRequest.cs | 109 + ...lipayOpenMiniReleaststBatchqueryRequest.cs | 109 + .../AlipayOpenMiniSafedomainCreateRequest.cs | 109 + .../AlipayOpenMiniSafedomainDeleteRequest.cs | 109 + ...AlipayOpenMiniTemplateUsageQueryRequest.cs | 109 + ...TemplatemessageUsertemplateApplyRequest.cs | 109 + .../AlipayOpenMiniTinyappExistQueryRequest.cs | 109 + .../AlipayOpenMiniVersionAuditApplyRequest.cs | 324 + ...AlipayOpenMiniVersionAuditCancelRequest.cs | 109 + ...ipayOpenMiniVersionAuditedCancelRequest.cs | 109 + .../AlipayOpenMiniVersionBuildQueryRequest.cs | 109 + .../AlipayOpenMiniVersionDeleteRequest.cs | 109 + ...AlipayOpenMiniVersionDetailQueryRequest.cs | 109 + .../AlipayOpenMiniVersionGrayCancelRequest.cs | 109 + .../AlipayOpenMiniVersionGrayOnlineRequest.cs | 109 + .../AlipayOpenMiniVersionListQueryRequest.cs | 102 + .../AlipayOpenMiniVersionOfflineRequest.cs | 109 + .../AlipayOpenMiniVersionOnlineRequest.cs | 109 + .../AlipayOpenMiniVersionRollbackRequest.cs | 109 + .../AlipayOpenMiniVersionUploadRequest.cs | 109 + .../AlipayOpenNewgotoneCreateRequest.cs | 102 + ...OpenOperationBizfeeActivityApplyRequest.cs | 109 + ...OpenOperationOpenbizmockBizQueryRequest.cs | 109 + .../AlipayOpenOperationSsffDeeQueryRequest.cs | 109 + ...AlipayOpenPageNewcontextTransferRequest.cs | 109 + ...AlipayOpenPageOldcontextTransferRequest.cs | 109 + .../AlipayOpenPublicAccountCreateRequest.cs | 109 + .../AlipayOpenPublicAccountDeleteRequest.cs | 109 + .../AlipayOpenPublicAccountQueryRequest.cs | 109 + .../AlipayOpenPublicAccountResetRequest.cs | 109 + ...AlipayOpenPublicAdvertBatchqueryRequest.cs | 102 + .../AlipayOpenPublicAdvertCreateRequest.cs | 109 + .../AlipayOpenPublicAdvertDeleteRequest.cs | 109 + .../AlipayOpenPublicAdvertModifyRequest.cs | 109 + ...blicArticlesummaryDataBatchqueryRequest.cs | 109 + .../AlipayOpenPublicComptestCreateRequest.cs | 109 + ...penPublicContactFollowBatchqueryRequest.cs | 102 + ...OpenPublicDefaultExtensionCreateRequest.cs | 109 + ...AlipayOpenPublicFollowBatchqueryRequest.cs | 109 + .../AlipayOpenPublicGisQueryRequest.cs | 109 + .../AlipayOpenPublicGroupBatchqueryRequest.cs | 102 + .../AlipayOpenPublicGroupCreateRequest.cs | 109 + .../AlipayOpenPublicGroupCrowdQueryRequest.cs | 109 + .../AlipayOpenPublicGroupDeleteRequest.cs | 109 + .../AlipayOpenPublicGroupModifyRequest.cs | 109 + .../AlipayOpenPublicInfoModifyRequest.cs | 109 + .../AlipayOpenPublicInfoQueryRequest.cs | 102 + .../AlipayOpenPublicLabelCreateRequest.cs | 109 + .../AlipayOpenPublicLabelDeleteRequest.cs | 109 + .../AlipayOpenPublicLabelModifyRequest.cs | 109 + .../AlipayOpenPublicLabelQueryRequest.cs | 102 + .../AlipayOpenPublicLabelUserCreateRequest.cs | 109 + .../AlipayOpenPublicLabelUserDeleteRequest.cs | 109 + .../AlipayOpenPublicLabelUserQueryRequest.cs | 109 + .../AlipayOpenPublicLifeAboardApplyRequest.cs | 102 + ...lipayOpenPublicLifeAccountCreateRequest.cs | 167 + .../AlipayOpenPublicLifeAgentCreateRequest.cs | 215 + ...ayOpenPublicLifeAgentcreateQueryRequest.cs | 109 + .../AlipayOpenPublicLifeCreateRequest.cs | 191 + .../AlipayOpenPublicLifeDebarkApplyRequest.cs | 102 + ...payOpenPublicLifeLabelBatchqueryRequest.cs | 102 + .../AlipayOpenPublicLifeLabelCreateRequest.cs | 109 + .../AlipayOpenPublicLifeLabelDeleteRequest.cs | 109 + .../AlipayOpenPublicLifeLabelModifyRequest.cs | 109 + .../AlipayOpenPublicLifeModifyRequest.cs | 173 + .../AlipayOpenPublicLifeMsgRecallRequest.cs | 109 + .../AlipayOpenPublicLifeMsgSendRequest.cs | 197 + ...ayOpenPublicMatchuserLabelCreateRequest.cs | 109 + ...ayOpenPublicMatchuserLabelDeleteRequest.cs | 109 + .../AlipayOpenPublicMenuBatchqueryRequest.cs | 102 + .../AlipayOpenPublicMenuCreateRequest.cs | 109 + ...ipayOpenPublicMenuDataBatchqueryRequest.cs | 109 + .../AlipayOpenPublicMenuDeleteRequest.cs | 109 + .../AlipayOpenPublicMenuModifyRequest.cs | 109 + .../AlipayOpenPublicMenuQueryRequest.cs | 102 + ...ayOpenPublicMessageContentCreateRequest.cs | 109 + ...ayOpenPublicMessageContentModifyRequest.cs | 109 + ...lipayOpenPublicMessageCustomSendRequest.cs | 109 + ...AlipayOpenPublicMessageGroupSendRequest.cs | 109 + ...AlipayOpenPublicMessageLabelSendRequest.cs | 109 + ...ipayOpenPublicMessagePreviewSendRequest.cs | 109 + .../AlipayOpenPublicMessageQueryRequest.cs | 109 + ...lipayOpenPublicMessageSingleSendRequest.cs | 109 + ...AlipayOpenPublicMessageTotalSendRequest.cs | 109 + ...penPublicMultimediaDownloadProxyRequest.cs | 102 + ...ipayOpenPublicPartnerMenuOperateRequest.cs | 109 + ...AlipayOpenPublicPartnerMenuQueryRequest.cs | 109 + ...ayOpenPublicPartnerSubscribeSyncRequest.cs | 109 + .../AlipayOpenPublicPayeeBindCreateRequest.cs | 109 + .../AlipayOpenPublicPayeeBindDeleteRequest.cs | 109 + ...cPersonalizedExtensionBatchqueryRequest.cs | 102 + ...ublicPersonalizedExtensionCreateRequest.cs | 109 + ...ublicPersonalizedExtensionDeleteRequest.cs | 109 + ...enPublicPersonalizedExtensionSetRequest.cs | 109 + ...OpenPublicPersonalizedMenuCreateRequest.cs | 109 + ...OpenPublicPersonalizedMenuDeleteRequest.cs | 109 + .../AlipayOpenPublicQrcodeCreateRequest.cs | 109 + ...ayOpenPublicSettingCategoryQueryRequest.cs | 102 + .../AlipayOpenPublicShortlinkCreateRequest.cs | 109 + ...ublicSinglearticleDataBatchqueryRequest.cs | 109 + ...ipayOpenPublicTemplateMessageAddRequest.cs | 109 + ...ipayOpenPublicTemplateMessageGetRequest.cs | 109 + ...licTemplateMessageIndustryModifyRequest.cs | 109 + ...ayOpenPublicThirdCustomerServiceRequest.cs | 109 + .../AlipayOpenPublicTopicBatchqueryRequest.cs | 102 + .../AlipayOpenPublicTopicCreateRequest.cs | 109 + .../AlipayOpenPublicTopicDeleteRequest.cs | 109 + .../AlipayOpenPublicTopicModifyRequest.cs | 109 + ...ipayOpenPublicUserDataBatchqueryRequest.cs | 109 + .../AlipayOpenPublicUserFollowQueryRequest.cs | 109 + ...yOpenPublicXwbtestabcdBatchqueryRequest.cs | 109 + ...ervicemarketCommodityShopOfflineRequest.cs | 109 + ...ServicemarketCommodityShopOnlineRequest.cs | 109 + ...ipayOpenServicemarketOrderAcceptRequest.cs | 109 + ...OpenServicemarketOrderItemCancelRequest.cs | 109 + ...enServicemarketOrderItemCompleteRequest.cs | 109 + ...penServicemarketOrderItemConfirmRequest.cs | 109 + ...ipayOpenServicemarketOrderNotifyRequest.cs | 102 + ...lipayOpenServicemarketOrderQueryRequest.cs | 109 + ...ipayOpenServicemarketOrderRejectRequest.cs | 109 + .../Request/AlipayOpenSmsgDataSetRequest.cs | 109 + .../Request/AlipayOpenTestQueryRequest.cs | 109 + .../Request/AlipayPassCodeAddRequest.cs | 126 + .../Request/AlipayPassCodeVerifyRequest.cs | 126 + .../Request/AlipayPassFileAddRequest.cs | 120 + .../Request/AlipayPassInstanceAddRequest.cs | 109 + .../AlipayPassInstanceUpdateRequest.cs | 109 + .../Request/AlipayPassSyncAddRequest.cs | 126 + .../Request/AlipayPassSyncUpdateRequest.cs | 144 + .../Request/AlipayPassTemplateAddRequest.cs | 109 + .../AlipayPassTemplateUpdateRequest.cs | 109 + .../AliPay/Request/AlipayPassTplAddRequest.cs | 114 + .../Request/AlipayPassTplContentAddRequest.cs | 126 + .../AlipayPassTplContentUpdateRequest.cs | 138 + .../Request/AlipayPassTplUpdateRequest.cs | 114 + .../Request/AlipayPassVerifyQueryRequest.cs | 108 + .../AlipayPayAppMarketingConsultRequest.cs | 109 + .../AlipayPayCodecHschoolDecodeUseRequest.cs | 109 + ...reditHuabeiAuthAccumulationQueryRequest.cs | 109 + ...yPcreditHuabeiAuthAgreementCloseRequest.cs | 109 + ...yPcreditHuabeiAuthAgreementQueryRequest.cs | 109 + ...PcreditHuabeiAuthBusinessConfirmRequest.cs | 109 + ...lipayPcreditHuabeiAuthOrderCloseRequest.cs | 109 + ...lipayPcreditHuabeiAuthOrderQueryRequest.cs | 109 + ...ayPcreditHuabeiAuthOrderUnfreezeRequest.cs | 109 + ...ipayPcreditHuabeiAuthRefundApplyRequest.cs | 109 + ...ipayPcreditHuabeiAuthSettleApplyRequest.cs | 109 + ...AlipayPcreditHuabeiAuthSignApplyRequest.cs | 109 + ...ayPcreditHuabeiDiscountBillQueryRequest.cs | 109 + ...editHuabeiDiscountSolutionCreateRequest.cs | 109 + ...editHuabeiDiscountSolutionModifyRequest.cs | 109 + ...ditHuabeiDiscountSolutionOfflineRequest.cs | 109 + ...editHuabeiDiscountSolutionOnlineRequest.cs | 109 + ...editHuabeiMerchantActivityCreateRequest.cs | 109 + ...editHuabeiMerchantActivityModifyRequest.cs | 109 + ...ditHuabeiMerchantActivityOfflineRequest.cs | 109 + ...editHuabeiMerchantActivityOnlineRequest.cs | 109 + ...ayPcreditHuabeiMerchantBillQueryRequest.cs | 109 + .../AlipayPcreditHuabeiPromoQueryRequest.cs | 108 + .../AlipayPcreditLoanApplyCreateRequest.cs | 109 + .../AlipayPcreditLoanRefundCreateRequest.cs | 109 + .../Request/AlipayPlatformOpenidGetRequest.cs | 108 + .../Request/AlipayPlatformUseridGetRequest.cs | 109 + .../Request/AlipayPointBalanceGetRequest.cs | 102 + .../Request/AlipayPointBudgetGetRequest.cs | 102 + .../Request/AlipayPointOrderAddRequest.cs | 138 + .../Request/AlipayPointOrderGetRequest.cs | 120 + ...AlipayPromorulecenterRuleAnalyzeRequest.cs | 120 + .../AlipaySecurityInfoAnalysisRequest.cs | 240 + ...curityProdAlipaySecurityProdTestRequest.cs | 109 + .../AlipaySecurityProdAmlriskQueryRequest.cs | 109 + .../AlipaySecurityProdCheckIqQueryRequest.cs | 109 + .../AlipaySecurityProdDdsBatchqueryRequest.cs | 102 + .../AlipaySecurityProdDesQueryRequest.cs | 109 + ...urityProdDfasfdasFdfdsBatchqueryRequest.cs | 102 + ...aySecurityProdDfesfDefBatchqueryRequest.cs | 109 + .../AlipaySecurityProdFacePayCreateRequest.cs | 109 + .../AlipaySecurityProdFacePayRequest.cs | 109 + .../AlipaySecurityProdFacerepoAddRequest.cs | 109 + ...AlipaySecurityProdFacerepoSearchRequest.cs | 109 + ...tyProdFingerprintApplyInitializeRequest.cs | 109 + ...ipaySecurityProdFingerprintApplyRequest.cs | 109 + ...paySecurityProdFingerprintDeleteRequest.cs | 109 + ...urityProdFingerprintDeviceVerifyRequest.cs | 109 + ...yProdFingerprintRiskcontrolQueryRequest.cs | 109 + ...yProdFingerprintVerifyInitializeRequest.cs | 109 + ...paySecurityProdFingerprintVerifyRequest.cs | 109 + .../AlipaySecurityProdMyQueryRequest.cs | 102 + ...lipaySecurityProdNopidBatchqueryRequest.cs | 102 + .../AlipaySecurityProdShopQueryRequest.cs | 102 + ...ySecurityProdSignatureFileUploadRequest.cs | 125 + ...aySecurityProdSignatureTaskApplyRequest.cs | 109 + ...ySecurityProdSignatureTaskCancelRequest.cs | 109 + ...aySecurityProdSignatureTaskQueryRequest.cs | 109 + ...aySecurityProdXwbtestabcAbcQueryRequest.cs | 109 + ...ipaySecurityProdXwbtestprodQueryRequest.cs | 109 + .../AlipaySecurityRiskContentDetectRequest.cs | 109 + ...paySecurityRiskCustomerriskQueryRequest.cs | 109 + ...ipaySecurityRiskCustomerriskSendRequest.cs | 109 + .../AlipaySecurityRiskDetectRequest.cs | 438 ++ ...paySecurityRiskHideDeviceidQueryRequest.cs | 109 + ...AlipaySecurityRiskRainscoreQueryRequest.cs | 109 + .../AlipaySecuritySssssssQueryRequest.cs | 109 + .../AlipaySecurityTesttestQueryRequest.cs | 102 + .../Request/AlipaySystemOauthTokenRequest.cs | 120 + .../AlipayTradeAdvanceConsultRequest.cs | 109 + .../Request/AlipayTradeAppPayRequest.cs | 109 + .../Request/AlipayTradeCancelRequest.cs | 109 + .../AliPay/Request/AlipayTradeCloseRequest.cs | 109 + .../Request/AlipayTradeCreateRequest.cs | 109 + .../AlipayTradeCustomsDeclareRequest.cs | 109 + .../Request/AlipayTradeCustomsQueryRequest.cs | 109 + .../AlipayTradeFastpayRefundQueryRequest.cs | 109 + .../Request/AlipayTradeOrderSettleRequest.cs | 109 + .../AlipayTradeOrderinfoSyncRequest.cs | 109 + .../Request/AlipayTradePagePayRequest.cs | 109 + .../Request/AlipayTradePageRefundRequest.cs | 109 + .../AliPay/Request/AlipayTradePayRequest.cs | 109 + .../Request/AlipayTradePrecreateRequest.cs | 109 + .../AliPay/Request/AlipayTradeQueryRequest.cs | 109 + .../Request/AlipayTradeRefundRequest.cs | 109 + ...ayTradeRoyaltyRelationBatchqueryRequest.cs | 109 + .../AlipayTradeRoyaltyRelationBindRequest.cs | 109 + ...AlipayTradeRoyaltyRelationUnbindRequest.cs | 109 + ...ayTradeVendorpayDevicedataUploadRequest.cs | 109 + .../Request/AlipayTradeWapPayRequest.cs | 109 + ...ipayTransferThirdpartyBillCreateRequest.cs | 174 + .../Request/AlipayTrustUserAuthSendRequest.cs | 108 + .../AlipayTrustUserReportGetRequest.cs | 114 + .../AlipayTrustUserRiskidentifyGetRequest.cs | 108 + .../Request/AlipayTrustUserScoreGetRequest.cs | 102 + .../Request/AlipayTrustUserTokenGetRequest.cs | 108 + .../AlipayUserAccountFreezeGetRequest.cs | 108 + .../Request/AlipayUserAccountGetRequest.cs | 102 + .../Request/AlipayUserAccountSearchRequest.cs | 138 + ...lipayUserAccountUseridBatchqueryRequest.cs | 108 + .../Request/AlipayUserAddressQueryRequest.cs | 109 + ...UserAgreementExecutionplanModifyRequest.cs | 109 + .../AlipayUserAgreementPageSignRequest.cs | 109 + .../AlipayUserAgreementQueryRequest.cs | 109 + .../AlipayUserAgreementTransferRequest.cs | 109 + .../AlipayUserAgreementUnsignRequest.cs | 109 + ...ipayUserAgreementUserverifyApplyRequest.cs | 109 + ...ipayUserAgreementUserverifyQueryRequest.cs | 109 + .../AlipayUserAlipaypointSendRequest.cs | 109 + ...payUserAuthZhimaorgIdentityApplyRequest.cs | 109 + ...ipayUserCertdocCertverifyConsultRequest.cs | 109 + ...yUserCertdocCertverifyPreconsultRequest.cs | 109 + .../AlipayUserCertifyOpenCertifyRequest.cs | 109 + .../AlipayUserCertifyOpenInitializeRequest.cs | 109 + .../AlipayUserCertifyOpenQueryRequest.cs | 109 + .../Request/AlipayUserContractGetRequest.cs | 108 + ...lipayUserFamilyArchiveInitializeRequest.cs | 109 + .../AlipayUserFamilyArchiveQueryRequest.cs | 109 + .../AlipayUserFinanceinfoShareRequest.cs | 109 + .../AliPay/Request/AlipayUserGetRequest.cs | 108 + .../Request/AlipayUserInfoAuthRequest.cs | 109 + .../Request/AlipayUserInfoShareRequest.cs | 102 + .../AlipayUserPassInstancebatchAddRequest.cs | 109 + .../AlipayUserPassTemplateCreateRequest.cs | 109 + .../AlipayUserPassTemplateModifyRequest.cs | 109 + .../AlipayUserPassTemplateQueryRequest.cs | 109 + .../AliPay/Request/AlipayUserTestRequest.cs | 108 + .../Request/AlipayUserTradeSearchRequest.cs | 156 + .../AlipayUserTwostageCommonUseRequest.cs | 109 + .../Request/AlipayUserUserinfoShareRequest.cs | 102 + .../AlipayZdataassetsEasyserviceRequest.cs | 108 + ...ataassetsFcdatalabZdatamergetaskRequest.cs | 108 + .../AlipayZdataassetsMetadataRequest.cs | 108 + .../AlipayZdatafrontCommonQueryRequest.cs | 138 + ...atafrontDatatransferedFileuploadRequest.cs | 161 + ...ipayZdatafrontDatatransferedSendRequest.cs | 120 + .../AlipayZdataserviceUnidataQueryRequest.cs | 114 + .../Request/AlipayZmscoreZrankGetRequest.cs | 108 + .../AmapMapMapserviceTeseBatchqueryRequest.cs | 109 + ...antExpandContractFacetofaceQueryRequest.cs | 109 + ...hantExpandContractFacetofaceSignRequest.cs | 109 + ...AntMerchantExpandEnterpriseApplyRequest.cs | 109 + .../AntMerchantExpandImageUploadRequest.cs | 125 + ...erchantExpandIndirectImageUploadRequest.cs | 125 + ...tMerchantExpandIndirectIsvModifyRequest.cs | 109 + ...MerchantExpandItemOpenBatchqueryRequest.cs | 109 + .../AntMerchantExpandItemOpenCreateRequest.cs | 109 + .../AntMerchantExpandItemOpenDeleteRequest.cs | 109 + .../AntMerchantExpandItemOpenModifyRequest.cs | 109 + .../AntMerchantExpandItemOpenQueryRequest.cs | 109 + ...ntMerchantExpandMapplyorderQueryRequest.cs | 109 + ...hantExpandMerchantStorelistQueryRequest.cs | 109 + .../AntMerchantExpandOrderQueryRequest.cs | 109 + .../AntMerchantExpandPersonalApplyRequest.cs | 109 + .../AntMerchantExpandShopCloseRequest.cs | 109 + .../AntMerchantExpandShopConsultRequest.cs | 109 + .../AntMerchantExpandShopCreateRequest.cs | 109 + .../AntMerchantExpandShopModifyRequest.cs | 109 + .../AntMerchantExpandShopQueryRequest.cs | 109 + .../AntOcrDriverlicenseIdentifyRequest.cs | 109 + .../Request/AntOcrGeneralIdentifyRequest.cs | 109 + .../Request/AntOcrIdcardIdentifyRequest.cs | 109 + .../AntOcrVehiclelicenseIdentifyRequest.cs | 109 + .../AntOcrVehicleplateIdentifyRequest.cs | 109 + ...ttechBlockchainFinanceFileUploadRequest.cs | 125 + .../Request/HuanxuTradeOrderCloseRequest.cs | 109 + .../HuanxuTradeOrderDisburseRequest.cs | 109 + .../Request/HuanxuTradeOrderQueryRequest.cs | 109 + .../Request/HuanxuTradeOrderRefundRequest.cs | 109 + ...eliveryDiscountAuthwebBatchqueryRequest.cs | 109 + .../KoubeiAdvertDeliveryDiscountGetRequest.cs | 109 + ...oubeiAdvertDeliveryDiscountQueryRequest.cs | 109 + ...KoubeiAdvertDeliveryDiscountSendRequest.cs | 109 + ...ertDeliveryDiscountWebBatchqueryRequest.cs | 109 + .../KoubeiAdvertDeliveryItemApplyRequest.cs | 109 + .../KoubeiCateringCommodityOrderBuyRequest.cs | 109 + ...CateringCrowdgroupConditionQueryRequest.cs | 109 + ...eiCateringCrowdgroupConditionSetRequest.cs | 109 + ...KoubeiCateringDishCommgroupQueryRequest.cs | 109 + .../KoubeiCateringDishCommgroupSyncRequest.cs | 109 + .../KoubeiCateringDishCommruleQueryRequest.cs | 109 + .../KoubeiCateringDishCommruleSyncRequest.cs | 109 + ...oubeiCateringDishCookcatetopSyncRequest.cs | 109 + .../KoubeiCateringDishMenuQueryRequest.cs | 109 + .../KoubeiCateringDishMenuSyncRequest.cs | 109 + ...KoubeiCateringDishSpecgroupQueryRequest.cs | 109 + .../KoubeiCateringDishSpecgroupSyncRequest.cs | 109 + ...ubeiCateringDishVirtualdishQueryRequest.cs | 109 + ...oubeiCateringDishVirtualdishSyncRequest.cs | 109 + .../KoubeiCateringTablecodeQueryRequest.cs | 109 + .../KoubeiCateringTablelistQueryRequest.cs | 109 + ...iCraftsmanDataProviderBatchqueryRequest.cs | 109 + ...oubeiCraftsmanDataProviderCreateRequest.cs | 109 + ...oubeiCraftsmanDataProviderModifyRequest.cs | 109 + ...oubeiCraftsmanDataWorkBatchqueryRequest.cs | 109 + .../KoubeiCraftsmanDataWorkCreateRequest.cs | 109 + .../KoubeiCraftsmanDataWorkDeleteRequest.cs | 109 + .../KoubeiCraftsmanDataWorkModifyRequest.cs | 109 + ...eiItemCategoryChildrenBatchqueryRequest.cs | 109 + .../AliPay/Request/KoubeiItemCreateRequest.cs | 109 + .../KoubeiItemExtitemBatchqueryRequest.cs | 109 + .../KoubeiItemExtitemBrandQueryRequest.cs | 102 + .../KoubeiItemExtitemCategoryQueryRequest.cs | 109 + .../Request/KoubeiItemExtitemCreateRequest.cs | 109 + .../KoubeiItemExtitemExistedQueryRequest.cs | 109 + .../Request/KoubeiItemExtitemQueryRequest.cs | 109 + .../Request/KoubeiItemExtitemUpdateRequest.cs | 109 + .../AliPay/Request/KoubeiItemModifyRequest.cs | 109 + .../AliPay/Request/KoubeiItemStateRequest.cs | 109 + ...ketingCampaignActivityBatchqueryRequest.cs | 109 + ...iMarketingCampaignActivityCreateRequest.cs | 109 + ...iMarketingCampaignActivityModifyRequest.cs | 109 + ...MarketingCampaignActivityOfflineRequest.cs | 109 + ...eiMarketingCampaignActivityQueryRequest.cs | 109 + ...arketingCampaignAssetDetailQueryRequest.cs | 109 + ...MarketingCampaignCrowdBatchqueryRequest.cs | 109 + ...oubeiMarketingCampaignCrowdCountRequest.cs | 109 + ...ubeiMarketingCampaignCrowdCreateRequest.cs | 109 + ...ubeiMarketingCampaignCrowdDeleteRequest.cs | 109 + ...arketingCampaignCrowdDetailQueryRequest.cs | 109 + ...ubeiMarketingCampaignCrowdModifyRequest.cs | 109 + ...MarketingCampaignDetailInfoQueryRequest.cs | 109 + ...mpaignIntelligentPromoBatchqueryRequest.cs | 109 + ...gCampaignIntelligentPromoConsultRequest.cs | 109 + ...ngCampaignIntelligentPromoCreateRequest.cs | 109 + ...ngCampaignIntelligentPromoDeleteRequest.cs | 109 + ...ngCampaignIntelligentPromoModifyRequest.cs | 109 + ...ingCampaignIntelligentPromoQueryRequest.cs | 109 + ...ngCampaignIntelligentShopConsultRequest.cs | 109 + ...mpaignIntelligentTemplateConsultRequest.cs | 109 + ...gnItemMerchantactivityBatchqueryRequest.cs | 109 + ...ampaignItemMerchantactivityCloseRequest.cs | 109 + ...mpaignItemMerchantactivityCreateRequest.cs | 109 + ...mpaignItemMerchantactivityModifyRequest.cs | 109 + ...ampaignItemMerchantactivityQueryRequest.cs | 109 + ...rketingCampaignRecruitApplyQueryRequest.cs | 109 + ...arketingCampaignRecruitShopQueryRequest.cs | 109 + ...KoubeiMarketingCampaignTagsQueryRequest.cs | 102 + ...iMarketingCampaignUserAssetQueryRequest.cs | 109 + ...arketingDataActivityBillDownloadRequest.cs | 109 + ...MarketingDataActivityReportQueryRequest.cs | 109 + ...ketingDataAlisisReportBatchqueryRequest.cs | 109 + ...eiMarketingDataAlisisReportQueryRequest.cs | 109 + ...DataBizadviserMemberprofileQueryRequest.cs | 109 + ...ngDataBizadviserMyddsreportQueryRequest.cs | 109 + ...etingDataBizadviserMyreportQueryRequest.cs | 109 + ...ketingDataCustomreportBatchqueryRequest.cs | 109 + ...iMarketingDataCustomreportDeleteRequest.cs | 109 + ...etingDataCustomreportDetailQueryRequest.cs | 109 + ...eiMarketingDataCustomreportQueryRequest.cs | 109 + ...beiMarketingDataCustomreportSaveRequest.cs | 109 + ...ketingDataDishdiagnoseBatchqueryRequest.cs | 109 + ...ngDataDishdiagnosetypeBatchqueryRequest.cs | 102 + ...ingDataEnterpriseStaffinfoUploadRequest.cs | 109 + ...oubeiMarketingDataIndicatorQueryRequest.cs | 109 + ...ketingDataIntelligentEffectQueryRequest.cs | 109 + ...ingDataIntelligentIndicatorQueryRequest.cs | 109 + .../KoubeiMarketingDataIsvShopQueryRequest.cs | 109 + ...iMarketingDataMallShopitemsQueryRequest.cs | 109 + ...eiMarketingDataMemberReportQueryRequest.cs | 109 + ...oubeiMarketingDataMessageDeliverRequest.cs | 109 + ...KoubeiMarketingDataNearmallQueryRequest.cs | 109 + ...KoubeiMarketingDataRetailDmQueryRequest.cs | 109 + ...MarketingDataSmartactivityConfigRequest.cs | 109 + ...rketingDataSmartactivityForecastRequest.cs | 109 + ...etingDataSmartmanagementDiagnoseRequest.cs | 102 + ...beiMarketingDataTradeHabbitQueryRequest.cs | 109 + ...beiMarketingToolIsvMerchantQueryRequest.cs | 109 + .../KoubeiMarketingToolPointsQueryRequest.cs | 109 + .../KoubeiMarketingToolPointsUpdateRequest.cs | 109 + ...KoubeiMarketingToolPrizesendAuthRequest.cs | 109 + .../KoubeiMemberBrandownerNameQueryRequest.cs | 102 + .../KoubeiMemberDataDesdBatchqueryRequest.cs | 109 + .../KoubeiMemberDataIsvCreateRequest.cs | 109 + .../KoubeiMemberDataOauthQueryRequest.cs | 109 + .../KoubeiMemberRetailerQueryRequest.cs | 102 + ...erchantKbdeviceDevicesBatchqueryRequest.cs | 109 + ...eiMerchantKbdeviceDispenserQueryRequest.cs | 109 + ...ualityTestCloudacptActivityQueryRequest.cs | 109 + ...eiQualityTestCloudacptBatchQueryRequest.cs | 109 + ...tyTestCloudacptCheckresultSubmitRequest.cs | 109 + ...beiQualityTestCloudacptItemQueryRequest.cs | 109 + .../KoubeiRetailShopitemBatchqueryRequest.cs | 109 + .../KoubeiRetailShopitemModifyRequest.cs | 109 + .../KoubeiRetailShopitemUploadRequest.cs | 109 + .../KoubeiSalesLeadsSaleleadsCreateRequest.cs | 109 + .../KoubeiSalesLeadsShopleadsCreateRequest.cs | 109 + .../Request/KoubeiTradeItemBuyRequest.cs | 109 + .../Request/KoubeiTradeItemorderBuyRequest.cs | 109 + .../KoubeiTradeItemorderQueryRequest.cs | 109 + .../KoubeiTradeItemorderRefundRequest.cs | 109 + ...ubeiTradeKbdeliveryDeliveryApplyRequest.cs | 109 + ...beiTradeKbdeliveryDeliveryCancelRequest.cs | 109 + ...KoubeiTradeOrderAggregateConsultRequest.cs | 109 + .../Request/KoubeiTradeOrderConsultRequest.cs | 109 + .../KoubeiTradeOrderEnterpriseQueryRequest.cs | 109 + ...KoubeiTradeOrderEnterpriseSettleRequest.cs | 109 + .../KoubeiTradeOrderPrecreateRequest.cs | 109 + .../Request/KoubeiTradeOrderQueryRequest.cs | 109 + .../KoubeiTradeTicketSendCloseRequest.cs | 109 + ...oubeiTradeTicketTicketcodeCancelRequest.cs | 109 + ...deTicketTicketcodeCheckavailableRequest.cs | 109 + ...KoubeiTradeTicketTicketcodeDelayRequest.cs | 109 + ...KoubeiTradeTicketTicketcodeQueryRequest.cs | 109 + .../KoubeiTradeTicketTicketcodeSendRequest.cs | 109 + .../KoubeiTradeTicketTicketcodeSyncRequest.cs | 109 + .../KoubeiTradeTicketTicketcodeUseRequest.cs | 109 + .../Request/MonitorHeartbeatSynRequest.cs | 108 + .../MybankCreditLoanapplyDataUploadRequest.cs | 109 + ...MybankCreditUserCertifyOpenQueryRequest.cs | 109 + .../MybankCreditUserInfoShareQueryRequest.cs | 109 + ...bankCreditUserOpenCertifyCertifyRequest.cs | 109 + ...kCreditUserOpenCertifyInitializeRequest.cs | 109 + ...MybankCreditUserSystemOauthQueryRequest.cs | 109 + ...MybankFinanceYulibaoAccountQueryRequest.cs | 109 + ...ankFinanceYulibaoCapitalPurchaseRequest.cs | 109 + ...ybankFinanceYulibaoCapitalRansomRequest.cs | 109 + .../MybankFinanceYulibaoPriceQueryRequest.cs | 109 + ...kFinanceYulibaoTransHistoryQueryRequest.cs | 109 + ...kPaymentTradeFinancingOrderCloseRequest.cs | 109 + ...PaymentTradeFinancingOrderCreateRequest.cs | 109 + ...PaymentTradeFinancingOrderRefundRequest.cs | 109 + .../MybankPaymentTradeOrderCreateRequest.cs | 109 + .../MybankPaymentTradeQrcodeCreateRequest.cs | 109 + .../MybankPaymentTradeQrcodeDeleteRequest.cs | 109 + ...taDataserviceRiskAlixiaohaoQueryRequest.cs | 109 + ...ataserviceRiskAntifraudlistQueryRequest.cs | 109 + ...taserviceRiskAntifraudscoreQueryRequest.cs | 109 + .../Request/ZhimaAuthInfoAuthqueryRequest.cs | 109 + .../ZhimaCreditAntifraudRiskListRequest.cs | 109 + .../ZhimaCreditAntifraudScoreGetRequest.cs | 109 + .../ZhimaCreditAntifraudVerifyRequest.cs | 109 + .../ZhimaCreditContractBorrowCancelRequest.cs | 109 + .../ZhimaCreditContractBorrowCreateRequest.cs | 109 + .../ZhimaCreditContractBorrowDelayRequest.cs | 109 + ...maCreditContractBorrowInitializeRequest.cs | 109 + .../ZhimaCreditContractBorrowQueryRequest.cs | 109 + .../ZhimaCreditContractBorrowReturnRequest.cs | 109 + ...himaCreditContractPrincipalQueryRequest.cs | 109 + .../Request/ZhimaCreditEpInfoGetRequest.cs | 109 + .../ZhimaCreditEpLawsuitDetailGetRequest.cs | 109 + .../ZhimaCreditEpLawsuitRecordGetRequest.cs | 109 + ...himaCreditEpSceneAgreementCancelRequest.cs | 109 + .../ZhimaCreditEpSceneAgreementUseRequest.cs | 109 + ...himaCreditEpSceneFulfillmentSyncRequest.cs | 109 + ...CreditEpSceneFulfillmentlistSyncRequest.cs | 109 + .../ZhimaCreditEpSceneRatingApplyRequest.cs | 109 + ...imaCreditEpSceneRatingInitializeRequest.cs | 109 + .../ZhimaCreditEpSceneRatingQueryRequest.cs | 109 + .../Request/ZhimaCreditEpScoreGetRequest.cs | 109 + .../ZhimaCreditOrderRepaymentApplyRequest.cs | 109 + .../ZhimaCreditPeLawsuitDetailQueryRequest.cs | 109 + .../ZhimaCreditPeLawsuitRecordGetRequest.cs | 109 + .../ZhimaCreditScoreBriefGetRequest.cs | 109 + .../Request/ZhimaCreditScoreGetRequest.cs | 109 + .../ZhimaCreditWatchlistBriefGetRequest.cs | 109 + .../ZhimaCreditWatchlistiiGetRequest.cs | 109 + ...ZhimaCustomerAuthMutualviewApplyRequest.cs | 109 + .../ZhimaCustomerBehaviorSyncRequest.cs | 109 + ...himaCustomerCertificationCertifyRequest.cs | 109 + ...aCustomerCertificationInitializeRequest.cs | 109 + ...omerCertificationMaterialCertifyRequest.cs | 109 + .../ZhimaCustomerCertificationQueryRequest.cs | 109 + ...ZhimaCustomerContractDetailQueryRequest.cs | 109 + .../ZhimaCustomerContractInitializeRequest.cs | 109 + ...maCustomerEpCertificationCertifyRequest.cs | 109 + ...ustomerEpCertificationInitializeRequest.cs | 109 + ...himaCustomerEpCertificationQueryRequest.cs | 109 + .../Request/ZhimaDataBatchFeedbackRequest.cs | 161 + .../ZhimaDataFeedbackurlQueryRequest.cs | 109 + .../Request/ZhimaDataStateDataSyncRequest.cs | 109 + .../ZhimaMerchantBorrowEntityUploadRequest.cs | 109 + ...ZhimaMerchantCloseloopDataUploadRequest.cs | 161 + ...himaMerchantContractCommonCancelRequest.cs | 109 + ...imaMerchantContractCommonConfirmRequest.cs | 109 + ...ZhimaMerchantContractCommonQueryRequest.cs | 109 + ...ZhimaMerchantContractOfferModifyRequest.cs | 109 + .../ZhimaMerchantContractOfferQueryRequest.cs | 109 + ...himaMerchantContractOnofferQueryRequest.cs | 109 + .../ZhimaMerchantContractPageQueryRequest.cs | 109 + ...ZhimaMerchantContractQuickCreateRequest.cs | 109 + ...erchantCreditserviceDetailCreateRequest.cs | 109 + ...erchantCreditserviceDetailModifyRequest.cs | 109 + ...MerchantCreditserviceDetailQueryRequest.cs | 109 + ...himaMerchantDataUploadInitializeRequest.cs | 109 + .../ZhimaMerchantLogoImageUploadRequest.cs | 119 + .../ZhimaMerchantOrderRentCancelRequest.cs | 109 + .../ZhimaMerchantOrderRentCompleteRequest.cs | 109 + .../ZhimaMerchantOrderRentCreateRequest.cs | 109 + .../ZhimaMerchantOrderRentModifyRequest.cs | 109 + .../ZhimaMerchantOrderRentQueryRequest.cs | 109 + .../ZhimaMerchantSingleDataUploadRequest.cs | 109 + .../ZhimaMerchantTestPracticeRequest.cs | 109 + .../Request/ZhimaOpenAppDesSendRequest.cs | 109 + .../ZhimaOpenAppKeyanLqlCreateRequest.cs | 109 + .../Request/ZhimaOpenQerqQerqQueryRequest.cs | 109 + ...ticationCustomerFacemanageCreateRequest.cs | 109 + ...ticationCustomerFacemanageDeleteRequest.cs | 109 + ...uthenticationCustomerFtokenQueryRequest.cs | 109 + ...cationCustomerSmilepayInitializeRequest.cs | 109 + ...AuthenticationSmilepayInitializeRequest.cs | 109 + ...ficationCustomerCertifyzhubQueryRequest.cs | 109 + ...zIdentificationUserWebInitializeRequest.cs | 109 + .../ZolozIdentificationUserWebQueryRequest.cs | 109 + .../AftAifinFireeyeOcrImageQueryResponse.cs | 18 + ...cureRiskplusSecurityPolicyQueryResponse.cs | 59 + .../AliosOpenAutoInfoQueryResponse.cs | 41 + ...AlipayAccountExrateAdviceAcceptResponse.cs | 89 + ...AccountExrateAllclientrateQueryResponse.cs | 20 + .../AlipayAccountExrateRatequeryResponse.cs | 20 + ...AccountExrateTraderequestCreateResponse.cs | 101 + .../Response/AlipayAcquireCancelResponse.cs | 47 + .../Response/AlipayAcquireCloseResponse.cs | 47 + .../AlipayAcquireCreateandpayResponse.cs | 59 + .../AlipayAcquirePrecreateResponse.cs | 71 + .../Response/AlipayAcquireQueryResponse.cs | 59 + .../Response/AlipayAcquireRefundResponse.cs | 59 + .../Response/AlipayAppTokenGetResponse.cs | 23 + .../AlipayAssetPointBalanceQueryResponse.cs | 17 + .../AlipayAssetPointBudgetQueryResponse.cs | 17 + .../AlipayAssetPointOrderCreateResponse.cs | 17 + .../AlipayAssetPointOrderQueryResponse.cs | 59 + .../AlipayBossCsChannelQueryResponse.cs | 83 + .../AlipayBossFncXwbtestRetModifyResponse.cs | 12 + ...BossProdArrangementOfflineQueryResponse.cs | 17 + .../AlipayBossProdMyTestQueryResponse.cs | 17 + .../AlipayCommerceAdContractSignResponse.cs | 12 + ...CommerceAirCallcenterTradeApplyResponse.cs | 12 + .../AlipayCommerceAirXfgDsgModifyResponse.cs | 17 + ...ommerceCityfacilitatorCityQueryResponse.cs | 20 + ...rceCityfacilitatorDepositCancelResponse.cs | 12 + ...ceCityfacilitatorDepositConfirmResponse.cs | 12 + ...erceCityfacilitatorDepositQueryResponse.cs | 20 + ...rceCityfacilitatorFunctionQueryResponse.cs | 20 + ...merceCityfacilitatorScriptQueryResponse.cs | 23 + ...erceCityfacilitatorStationQueryResponse.cs | 20 + ...ityfacilitatorVoucherBatchqueryResponse.cs | 20 + ...rceCityfacilitatorVoucherCancelResponse.cs | 12 + ...ceCityfacilitatorVoucherConfirmResponse.cs | 71 + ...eCityfacilitatorVoucherGenerateResponse.cs | 29 + ...erceCityfacilitatorVoucherQueryResponse.cs | 71 + ...rceCityfacilitatorVoucherRefundResponse.cs | 12 + ...rceCityfacilitatorVoucherUploadResponse.cs | 12 + ...lipayCommerceDataCampaignCreateResponse.cs | 17 + .../AlipayCommerceDataCampaignSendResponse.cs | 17 + ...payCommerceDataCustommetricSyncResponse.cs | 12 + .../AlipayCommerceDataLogdataSyncResponse.cs | 12 + ...ipayCommerceDataMonitordataSyncResponse.cs | 17 + ...ateAuthenticateCampuscardCreateResponse.cs | 17 + ...ateAuthenticateCampuscardDeleteResponse.cs | 17 + ...ducateCampuscardAuthorizedQueryResponse.cs | 20 + ...rceEducateParttimejobInfoCreateResponse.cs | 12 + ...rceEducateSchoolcodeTokenCreateResponse.cs | 17 + ...CommerceEducateStudentinfoShareResponse.cs | 18 + ...yCommerceEducateUserClickCreateResponse.cs | 12 + ...yCommerceIotDeviceserviceCancelResponse.cs | 12 + ...ayCommerceIotReceiptDetailQueryResponse.cs | 48 + .../AlipayCommerceIotReceiptSendResponse.cs | 53 + ...ommerceIotSdarttoolMessageQueryResponse.cs | 77 + ...CommerceIotSdarttoolMessageSendResponse.cs | 17 + ...erceLogisticsWaybillMinimctSyncResponse.cs | 12 + ...lipayCommerceLotteryPresentSendResponse.cs | 17 + ...CommerceLotteryPresentlistQueryResponse.cs | 26 + ...payCommerceLotteryTypelistQueryResponse.cs | 26 + ...TransportIntelligentizeDataSyncResponse.cs | 29 + ...payCommerceTransportNfccardSendResponse.cs | 12 + ...erceTransportOfflinepayKeyQueryResponse.cs | 20 + ...TransportOfflinepayRecordVerifyResponse.cs | 12 + ...ortOfflinepayUserblacklistQueryResponse.cs | 19 + ...eTransportParkingReserveConfirmResponse.cs | 12 + ...ransportVehicleownerMessageSendResponse.cs | 20 + .../AlipayDaoweiOrderCancelResponse.cs | 12 + .../AlipayDaoweiOrderConfirmResponse.cs | 12 + .../AlipayDaoweiOrderModifyResponse.cs | 12 + .../AlipayDaoweiOrderQueryResponse.cs | 98 + .../AlipayDaoweiOrderRefundResponse.cs | 12 + .../AlipayDaoweiOrderRefuseResponse.cs | 12 + .../AlipayDaoweiOrderSpModifyResponse.cs | 12 + .../AlipayDaoweiOrderTransferResponse.cs | 12 + .../AlipayDaoweiServiceModifyResponse.cs | 12 + .../Response/AlipayDaoweiSpModifyResponse.cs | 12 + .../AlipayDaoweiSpScheduleModifyResponse.cs | 12 + ...payDataAiserviceSgxGatewayQueryResponse.cs | 23 + ...ceSmartpriceMerchanteffectQueryResponse.cs | 26 + .../AlipayDataBillAccountlogQueryResponse.cs | 38 + .../AlipayDataBillBailQueryResponse.cs | 20 + .../AlipayDataBillBalanceQueryResponse.cs | 29 + .../AlipayDataBillBalancehisQueryResponse.cs | 23 + .../AlipayDataBillBuyQueryResponse.cs | 38 + .../AlipayDataBillDownloadurlGetResponse.cs | 17 + .../AlipayDataBillEreceiptApplyResponse.cs | 17 + .../AlipayDataBillEreceiptQueryResponse.cs | 29 + .../AlipayDataBillSellQueryResponse.cs | 38 + .../AlipayDataBillTransferQueryResponse.cs | 38 + .../AlipayDataDataexchangeSfasdfResponse.cs | 54 + ...DataserviceAdCreativeBatchqueryResponse.cs | 18 + ...serviceAdCreativeCreateormodifyResponse.cs | 23 + ...yDataDataserviceAdCreativeQueryResponse.cs | 18 + ...lipayDataDataserviceAdDataQueryResponse.cs | 20 + ...ataserviceAdGroupCreateormodifyResponse.cs | 23 + ...ipayDataDataserviceAdGroupQueryResponse.cs | 18 + .../AlipayDataDataserviceAdOfflineResponse.cs | 19 + .../AlipayDataDataserviceAdOnlineResponse.cs | 19 + ...DataserviceAdPlanCreateormodifyResponse.cs | 23 + ...lipayDataDataserviceAdPlanQueryResponse.cs | 18 + ...erviceAdPrincipalCheckavailableResponse.cs | 23 + ...taDataserviceAdPrincipalConsultResponse.cs | 17 + ...erviceAdPrincipalCreateormodifyResponse.cs | 17 + ...DataDataserviceAdPrincipalQueryResponse.cs | 50 + ...taDataserviceAdPromotepageQueryResponse.cs | 20 + ...viceAdPromotepagestatisticQueryResponse.cs | 20 + ...ipayDataDataserviceAdUserCreateResponse.cs | 23 + ...DataserviceAdUserbalanceOfflineResponse.cs | 19 + ...aDataserviceAdUserbalanceOnlineResponse.cs | 19 + ...DataserviceBillDownloadurlQueryResponse.cs | 17 + ...ataDataserviceChinaremodelQueryResponse.cs | 18 + .../AlipayDataDataserviceCodeRecoResponse.cs | 18 + .../AlipayDataDataserviceSdfsdfResponse.cs | 12 + ...serviceShoppingmallrecShopQueryResponse.cs | 32 + ...viceShoppingmallrecVoucherQueryResponse.cs | 32 + ...ataDataserviceUserlevelZrankGetResponse.cs | 18 + .../Response/AlipayEbppBillAddResponse.cs | 89 + .../Response/AlipayEbppBillGetResponse.cs | 101 + .../Response/AlipayEbppBillSearchResponse.cs | 26 + ...lipayEbppInvoiceApplyResultSyncResponse.cs | 17 + ...ipayEbppInvoiceApplystatusQueryResponse.cs | 20 + .../AlipayEbppInvoiceAuthSignResponse.cs | 12 + .../AlipayEbppInvoiceAuthUnsignResponse.cs | 12 + ...payEbppInvoiceDetailOutputQueryResponse.cs | 176 + ...ipayEbppInvoiceEinvpackageQueryResponse.cs | 20 + ...yEbppInvoiceExpenseProgressSyncResponse.cs | 12 + ...lipayEbppInvoiceFileOutputQueryResponse.cs | 17 + .../AlipayEbppInvoiceInfoSendResponse.cs | 17 + ...payEbppInvoiceIsvtokenReimApplyResponse.cs | 23 + ...lipayEbppInvoiceListExpenseSyncResponse.cs | 12 + ...InvoiceMerchantEnterstatusQueryResponse.cs | 17 + ...ppInvoiceMerchantlistEnterApplyResponse.cs | 17 + .../AlipayEbppInvoiceOrderQueryResponse.cs | 24 + .../Response/AlipayEbppInvoiceSycnResponse.cs | 17 + ...AlipayEbppInvoiceSyncSimpleSendResponse.cs | 12 + ...lipayEbppInvoiceTaxnoBatchqueryResponse.cs | 26 + ...lipayEbppInvoiceTitleDynamicGetResponse.cs | 18 + .../AlipayEbppInvoiceTitleListGetResponse.cs | 20 + .../AlipayEbppMerchantConfigGetResponse.cs | 26 + .../AlipayEbppPdeductBillPayStatusResponse.cs | 47 + .../Response/AlipayEbppPdeductPayResponse.cs | 53 + .../AlipayEbppPdeductSignAddResponse.cs | 55 + .../AlipayEbppPdeductSignCancelResponse.cs | 29 + .../AlipayEbppPdeductSignQueryResponse.cs | 47 + .../AlipayEbppPdeductSignValidateResponse.cs | 12 + .../AlipayEcapiprodCreditGetResponse.cs | 24 + .../AlipayEcapiprodDataPutResponse.cs | 17 + ...ipayEcapiprodDrawndnContractGetResponse.cs | 29 + ...capiprodDrawndnDrawndnlistQueryResponse.cs | 26 + ...yEcapiprodDrawndnFeerecordQueryResponse.cs | 26 + ...piprodDrawndnLendingrecordQueryResponse.cs | 26 + ...piprodDrawndnPaymentscheduleGetResponse.cs | 26 + ...prodDrawndnRepaymentrecordQueryResponse.cs | 26 + .../AlipayEcardEduPublicBindResponse.cs | 29 + ...AlipayEcoCityserviceMessageSendResponse.cs | 12 + ...lipayEcoContractSignflowsCreateResponse.cs | 17 + ...EcoCplifeBasicserviceInitializeResponse.cs | 29 + ...ipayEcoCplifeBasicserviceModifyResponse.cs | 23 + .../AlipayEcoCplifeBillBatchUploadResponse.cs | 17 + .../AlipayEcoCplifeBillBatchqueryResponse.cs | 32 + .../AlipayEcoCplifeBillDeleteResponse.cs | 20 + .../AlipayEcoCplifeBillModifyResponse.cs | 20 + .../AlipayEcoCplifeBillSyncResponse.cs | 12 + ...payEcoCplifeCommunityBatchqueryResponse.cs | 32 + .../AlipayEcoCplifeCommunityCreateResponse.cs | 29 + ...yEcoCplifeCommunityDetailsQueryResponse.cs | 130 + .../AlipayEcoCplifeCommunityModifyResponse.cs | 23 + .../AlipayEcoCplifeNoticeDeleteResponse.cs | 12 + .../AlipayEcoCplifeNoticePublishResponse.cs | 17 + .../AlipayEcoCplifePayResultQueryResponse.cs | 78 + ...ipayEcoCplifeRepairStatusUpdateResponse.cs | 12 + ...ipayEcoCplifeResidentinfoDeleteResponse.cs | 12 + ...ipayEcoCplifeResidentinfoUploadResponse.cs | 12 + .../AlipayEcoCplifeRoominfoDeleteResponse.cs | 12 + .../AlipayEcoCplifeRoominfoQueryResponse.cs | 26 + .../AlipayEcoCplifeRoominfoUploadResponse.cs | 26 + .../AlipayEcoCplifeRooominfoQueryResponse.cs | 20 + ...oCplifeUseridentityStatusUpdateResponse.cs | 12 + .../AlipayEcoDocTemplateCreateResponse.cs | 23 + ...ayEcoDoctemplateSettingurlQueryResponse.cs | 17 + .../AlipayEcoEduKtBillingModifyResponse.cs | 17 + .../AlipayEcoEduKtBillingQueryResponse.cs | 23 + .../AlipayEcoEduKtBillingSendResponse.cs | 17 + .../AlipayEcoEduKtParentQueryResponse.cs | 17 + .../AlipayEcoEduKtSchoolinfoModifyResponse.cs | 23 + .../AlipayEcoEduKtStudentModifyResponse.cs | 17 + .../AlipayEcoEduKtStudentQueryResponse.cs | 50 + .../AlipayEcoFilePathQueryResponse.cs | 23 + .../AlipayEcoMycarCarlibInfoPushResponse.cs | 12 + .../AlipayEcoMycarCarmodelModifyResponse.cs | 12 + ...AlipayEcoMycarDataExternalQueryResponse.cs | 23 + .../AlipayEcoMycarDataExternalSendResponse.cs | 23 + ...arDataserviceViolationinfoShareResponse.cs | 35 + ...lipayEcoMycarMaintainDataUpdateResponse.cs | 17 + ...ipayEcoMycarMaintainOrderCreateResponse.cs | 17 + ...oMycarMaintainOrderstatusUpdateResponse.cs | 12 + .../AlipayEcoMycarOrderStatusQueryResponse.cs | 59 + ...ayEcoMycarParkingAgreementQueryResponse.cs | 36 + ...coMycarParkingCardbarcodeCreateResponse.cs | 20 + ...ayEcoMycarParkingChargeinfoSyncResponse.cs | 17 + ...lipayEcoMycarParkingConfigQueryResponse.cs | 42 + .../AlipayEcoMycarParkingConfigSetResponse.cs | 12 + ...payEcoMycarParkingEnterinfoSyncResponse.cs | 12 + ...ipayEcoMycarParkingExitinfoSyncResponse.cs | 12 + ...EcoMycarParkingLotbarcodeCreateResponse.cs | 23 + .../AlipayEcoMycarParkingOrderPayResponse.cs | 59 + ...lipayEcoMycarParkingOrderRefundResponse.cs | 35 + .../AlipayEcoMycarParkingOrderSyncResponse.cs | 12 + ...lipayEcoMycarParkingOrderUpdateResponse.cs | 12 + ...EcoMycarParkingOrderstatusQueryResponse.cs | 59 + ...ycarParkingParkinglotinfoCreateResponse.cs | 17 + ...MycarParkingParkinglotinfoQueryResponse.cs | 131 + ...ycarParkingParkinglotinfoUpdateResponse.cs | 12 + ...payEcoMycarParkingSpaceinfoSyncResponse.cs | 17 + ...ipayEcoMycarParkingVehicleQueryResponse.cs | 17 + .../AlipayEcoMycarPromoTicketPushResponse.cs | 17 + .../AlipayEcoMycarPromoTicketSyncResponse.cs | 12 + ...lipayEcoMycarPromoVoucherVerifyResponse.cs | 12 + .../AlipayEcoMycarTradeOrderQueryResponse.cs | 125 + .../AlipayEcoMycarTradeRefundResponse.cs | 12 + ...AlipayEcoMycarViolationCityPushResponse.cs | 12 + ...AlipayEcoMycarViolationInfoPushResponse.cs | 12 + .../AlipayEcoRebateBalanceQueryResponse.cs | 41 + .../AlipayEcoRebateBalanceSendResponse.cs | 17 + .../AlipayEcoSignFlowCancelResponse.cs | 12 + .../AlipayEcoSignFlowCreateResponse.cs | 17 + .../AlipayEcoSignFlowFinishResponse.cs | 12 + .../AlipayEcoSignFlowQueryResponse.cs | 74 + .../AlipayEcoSignflowsDetailQueryResponse.cs | 24 + .../AlipayEcoSignflowsUrlQueryResponse.cs | 35 + .../AlipayEcoWelfareCodeSyncResponse.cs | 12 + .../AlipayExscUserCurrentsignGetResponse.cs | 23 + ...lipayExscUserFirstfundinpourGetResponse.cs | 23 + .../AlipayExscUserFirstsignGetResponse.cs | 23 + ...AlipayFlashsalesStockSyncUpdateResponse.cs | 29 + .../AlipayFundAccountQueryResponse.cs | 24 + .../AlipayFundAccountbookCreateResponse.cs | 24 + .../AlipayFundAccountbookQueryResponse.cs | 24 + .../AlipayFundAuthOperationCancelResponse.cs | 41 + ...payFundAuthOperationDetailQueryResponse.cs | 173 + .../AlipayFundAuthOrderAppFreezeResponse.cs | 83 + .../AlipayFundAuthOrderFreezeResponse.cs | 89 + .../AlipayFundAuthOrderUnfreezeResponse.cs | 65 + ...lipayFundAuthOrderVoucherCreateResponse.cs | 41 + .../Response/AlipayFundBatchCloseResponse.cs | 23 + .../Response/AlipayFundBatchCreateResponse.cs | 29 + .../AlipayFundBatchDetailQueryResponse.cs | 164 + .../AlipayFundBatchTransferResponse.cs | 23 + .../AlipayFundBatchUniTransferResponse.cs | 29 + .../AlipayFundCouponOperationQueryResponse.cs | 113 + ...ipayFundCouponOrderAgreementPayResponse.cs | 53 + .../AlipayFundCouponOrderAppPayResponse.cs | 53 + .../AlipayFundCouponOrderDisburseResponse.cs | 53 + .../AlipayFundCouponOrderPagePayResponse.cs | 53 + .../AlipayFundCouponOrderRefundResponse.cs | 53 + .../Response/AlipayFundTransAppPayResponse.cs | 29 + .../AlipayFundTransCommonQueryResponse.cs | 89 + .../AlipayFundTransOrderQueryResponse.cs | 59 + .../Response/AlipayFundTransRefundResponse.cs | 47 + ...lipayFundTransToaccountTransferResponse.cs | 29 + .../AlipayFundTransUniTransferResponse.cs | 41 + ...AutoaftermarketAttachmentUploadResponse.cs | 12 + ...oaftermarketDepotCreateormodifyResponse.cs | 12 + ...aftermarketInserviceorderNotifyResponse.cs | 12 + ...AutoAutoaftermarketOutorderSyncResponse.cs | 17 + ...InsAutoAutoinsprodCommonConsultResponse.cs | 17 + ...yInsAutoAutoinsprodEnquriyApplyResponse.cs | 32 + ...ayInsAutoAutoinsprodPolicyApplyResponse.cs | 38 + ...yInsAutoAutoinsprodPolicyCancelResponse.cs | 17 + ...payInsAutoAutoinsprodQuoteApplyResponse.cs | 26 + ...payInsAutoAutoinsprodQuoteQueryResponse.cs | 237 + ...ayInsAutoAutoinsprodUserCertifyResponse.cs | 17 + .../Response/AlipayInsAutoCarSaveResponse.cs | 17 + ...erationProductOfflineBatchqueryResponse.cs | 20 + ...nsCooperationProductQrcodeApplyResponse.cs | 17 + ...InsCooperationRegionQrcodeApplyResponse.cs | 17 + ...InsSceneApplicationIssueConfirmResponse.cs | 17 + .../AlipayInsSceneCouponReceiveResponse.cs | 24 + .../AlipayInsSceneCouponSendResponse.cs | 36 + ...ngCampaignActivityOfflineCreateResponse.cs | 23 + ...gCampaignActivityOfflineTriggerResponse.cs | 17 + ...ipayMarketingCampaignCashCreateResponse.cs | 29 + ...arketingCampaignCashDetailQueryResponse.cs | 83 + ...yMarketingCampaignCashListQueryResponse.cs | 38 + ...rketingCampaignCashStatusModifyResponse.cs | 12 + ...payMarketingCampaignCashTriggerResponse.cs | 71 + ...ipayMarketingCampaignCertCreateResponse.cs | 17 + ...ingCampaignDiscountBudgetAppendResponse.cs | 29 + ...ingCampaignDiscountBudgetCreateResponse.cs | 29 + ...tingCampaignDiscountBudgetQueryResponse.cs | 47 + ...yMarketingCampaignDiscountQueryResponse.cs | 122 + ...ingCampaignDiscountStatusUpdateResponse.cs | 12 + ...gCampaignDiscountWhitelistQueryResponse.cs | 23 + ...CampaignDiscountWhitelistUpdateResponse.cs | 12 + ...MarketingCampaignDrawcampCreateResponse.cs | 17 + ...yMarketingCampaignDrawcampQueryResponse.cs | 134 + ...ingCampaignDrawcampStatusUpdateResponse.cs | 17 + ...MarketingCampaignDrawcampUpdateResponse.cs | 17 + ...CampaignDrawcampWhitelistCreateResponse.cs | 17 + ...rketingCampaignPrizeAmountQueryResponse.cs | 17 + ...yMarketingCardActivateformQueryResponse.cs | 17 + ...ayMarketingCardActivateurlApplyResponse.cs | 17 + ...lipayMarketingCardBenefitCreateResponse.cs | 17 + ...lipayMarketingCardBenefitDeleteResponse.cs | 17 + ...lipayMarketingCardBenefitModifyResponse.cs | 17 + ...AlipayMarketingCardBenefitQueryResponse.cs | 20 + .../AlipayMarketingCardConsumeSyncResponse.cs | 17 + .../AlipayMarketingCardDeleteResponse.cs | 17 + ...payMarketingCardFormtemplateSetResponse.cs | 12 + .../AlipayMarketingCardOpenResponse.cs | 30 + .../AlipayMarketingCardQueryResponse.cs | 30 + ...MarketingCardTemplateBatchqueryResponse.cs | 26 + ...ipayMarketingCardTemplateCreateResponse.cs | 17 + ...ipayMarketingCardTemplateModifyResponse.cs | 17 + ...lipayMarketingCardTemplateQueryResponse.cs | 111 + .../AlipayMarketingCardUpdateResponse.cs | 17 + ...ngCashitemvoucherTemplateCreateResponse.cs | 35 + ...shlessitemvoucherTemplateCreateResponse.cs | 23 + ...ngCashlessvoucherTemplateCreateResponse.cs | 17 + ...ngCashlessvoucherTemplateModifyResponse.cs | 12 + ...ketingCashvoucherTemplateCreateResponse.cs | 29 + ...ketingCashvoucherTemplateModifyResponse.cs | 17 + ...ipayMarketingCdpAdvertiseCreateResponse.cs | 17 + ...ipayMarketingCdpAdvertiseModifyResponse.cs | 12 + ...payMarketingCdpAdvertiseOperateResponse.cs | 12 + ...lipayMarketingCdpAdvertiseQueryResponse.cs | 77 + ...arketingCdpAdvertiseReportQueryResponse.cs | 65 + ...lipayMarketingCdpRecommendQueryResponse.cs | 23 + ...ayMarketingCouponTemplateCreateResponse.cs | 29 + ...ngExchangevoucherTemplateCreateResponse.cs | 17 + ...ipayMarketingExchangevoucherUseResponse.cs | 17 + ...payMarketingFacetofaceDecodeUseResponse.cs | 17 + ...payMarketingMaterialImageUploadResponse.cs | 17 + ...ketingToolFengdieActivityCreateResponse.cs | 17 + ...rketingToolFengdieActivityQueryResponse.cs | 18 + ...MarketingToolFengdieEditorQueryResponse.cs | 17 + ...arketingToolFengdieMemberCreateResponse.cs | 18 + ...etingToolFengdieSitesBatchqueryResponse.cs | 18 + ...arketingToolFengdieSitesConfirmResponse.cs | 18 + ...MarketingToolFengdieSitesCreateResponse.cs | 18 + ...MarketingToolFengdieSitesDeleteResponse.cs | 18 + ...yMarketingToolFengdieSitesQueryResponse.cs | 18 + ...ayMarketingToolFengdieSitesSyncResponse.cs | 18 + ...etingToolFengdieSpaceBatchqueryResponse.cs | 18 + ...MarketingToolFengdieSpaceCreateResponse.cs | 18 + ...yMarketingToolFengdieSpaceQueryResponse.cs | 18 + ...ngToolFengdieTemplateBatchqueryResponse.cs | 18 + ...rketingToolFengdieTemplateQueryResponse.cs | 20 + ...arketingToolFengdieTemplateSendResponse.cs | 18 + .../AlipayMarketingUserulePidQueryResponse.cs | 17 + .../AlipayMarketingVoucherAuthSendResponse.cs | 17 + .../AlipayMarketingVoucherConfirmResponse.cs | 53 + ...AlipayMarketingVoucherListQueryResponse.cs | 20 + .../AlipayMarketingVoucherQueryResponse.cs | 86 + .../AlipayMarketingVoucherSendResponse.cs | 23 + ...ipayMarketingVoucherStockCreateResponse.cs | 35 + ...lipayMarketingVoucherStockMatchResponse.cs | 26 + ...lipayMarketingVoucherStockQueryResponse.cs | 23 + .../AlipayMarketingVoucherStockUseResponse.cs | 17 + ...yMarketingVoucherTemplateDeleteResponse.cs | 12 + ...etingVoucherTemplatedetailQueryResponse.cs | 113 + ...rketingVoucherTemplatelistQueryResponse.cs | 44 + .../Response/AlipayMdataTagGetResponse.cs | 17 + .../AlipayMemberCouponQuerylistResponse.cs | 50 + .../AlipayMerchantItemFileUploadResponse.cs | 23 + ...lipayMerchantOrderConsumerQueryResponse.cs | 18 + ...ntOrderDigestConsumerBatchqueryResponse.cs | 32 + ...rderSecuritydetailConsumerQueryResponse.cs | 18 + ...ecuritydigestConsumerBatchqueryResponse.cs | 32 + .../AlipayMerchantOrderSyncResponse.cs | 29 + ...ayMicropayOrderConfirmpayurlGetResponse.cs | 18 + .../AlipayMicropayOrderDirectPayResponse.cs | 18 + .../AlipayMicropayOrderFreezeResponse.cs | 18 + ...payMicropayOrderFreezepayurlGetResponse.cs | 17 + .../AlipayMicropayOrderGetResponse.cs | 18 + .../AlipayMicropayOrderUnfreezeResponse.cs | 18 + .../AlipayMobileBeaconDeviceAddResponse.cs | 23 + .../AlipayMobileBeaconDeviceDeleteResponse.cs | 23 + .../AlipayMobileBeaconDeviceModifyResponse.cs | 23 + .../AlipayMobileBeaconDeviceQueryResponse.cs | 30 + .../AlipayMobileBeaconMessageSendResponse.cs | 23 + .../AlipayMobileBksigntokenVerifyResponse.cs | 47 + .../AlipayMobileCodeCreateResponse.cs | 89 + .../Response/AlipayMobileCodeQueryResponse.cs | 89 + .../AlipayMobilePublicAccountAddResponse.cs | 29 + ...AlipayMobilePublicAccountDeleteResponse.cs | 23 + .../AlipayMobilePublicAccountQueryResponse.cs | 44 + .../AlipayMobilePublicAccountResetResponse.cs | 29 + ...AlipayMobilePublicAppinfoUpdateResponse.cs | 23 + ...ayMobilePublicContactFollowListResponse.cs | 25 + .../AlipayMobilePublicFollowListResponse.cs | 42 + .../AlipayMobilePublicGisGetResponse.cs | 53 + .../AlipayMobilePublicInfoModifyResponse.cs | 23 + .../AlipayMobilePublicInfoQueryResponse.cs | 53 + .../AlipayMobilePublicLabelAddResponse.cs | 35 + .../AlipayMobilePublicLabelDeleteResponse.cs | 29 + .../AlipayMobilePublicLabelQueryResponse.cs | 31 + .../AlipayMobilePublicLabelUpdateResponse.cs | 29 + .../AlipayMobilePublicLabelUserAddResponse.cs | 23 + ...ipayMobilePublicLabelUserDeleteResponse.cs | 23 + ...lipayMobilePublicLabelUserQueryResponse.cs | 29 + .../AlipayMobilePublicMenuAddResponse.cs | 23 + .../AlipayMobilePublicMenuDeleteResponse.cs | 23 + .../AlipayMobilePublicMenuGetResponse.cs | 29 + .../AlipayMobilePublicMenuQueryResponse.cs | 29 + .../AlipayMobilePublicMenuUpdateResponse.cs | 23 + ...AlipayMobilePublicMenuUserQueryResponse.cs | 29 + ...lipayMobilePublicMenuUserUpdateResponse.cs | 23 + ...ayMobilePublicMessageCustomSendResponse.cs | 23 + ...payMobilePublicMessageLabelSendResponse.cs | 29 + .../AlipayMobilePublicMessagePushResponse.cs | 29 + ...ayMobilePublicMessageSingleSendResponse.cs | 23 + ...payMobilePublicMessageTotalSendResponse.cs | 29 + ...payMobilePublicMessagebatchPushResponse.cs | 29 + ...yMobilePublicMessagespecifyPushResponse.cs | 29 + .../AlipayMobilePublicQrcodeCreateResponse.cs | 35 + ...ipayMobilePublicShortlinkCreateResponse.cs | 29 + ...bilePublicTemplateMessageDeleteResponse.cs | 12 + ...yMobilePublicTemplateMessageGetResponse.cs | 23 + ...bilePublicTemplateMessageModifyResponse.cs | 12 + ...obilePublicTemplateMessageQueryResponse.cs | 17 + .../AlipayMobileRecommendGetResponse.cs | 29 + .../AlipayMobileShakeUserQueryResponse.cs | 35 + ...ipayMobileStdPublicAccountQueryResponse.cs | 20 + ...MobileStdPublicExpressUserQueryResponse.cs | 23 + ...AlipayMobileStdPublicFollowListResponse.cs | 36 + .../AlipayMobileStdPublicMenuQueryResponse.cs | 17 + ...obileStdPublicMessageCustomSendResponse.cs | 12 + ...lipayMpointprodBenefitDetailGetResponse.cs | 32 + ...MediarecogVoiceMediaaudioUploadResponse.cs | 35 + ...ipayMsaasPromotionCpainfoCreateResponse.cs | 12 + ...flineMarketApplyorderBatchqueryResponse.cs | 44 + .../AlipayOfflineMarketItemCreateResponse.cs | 23 + .../AlipayOfflineMarketItemModifyResponse.cs | 23 + .../AlipayOfflineMarketItemStateResponse.cs | 23 + ...lipayOfflineMarketMcommentQueryResponse.cs | 35 + ...yOfflineMarketProductBatchqueryResponse.cs | 31 + ...OfflineMarketProductQuerydetailResponse.cs | 105 + ...yOfflineMarketReporterrorCreateResponse.cs | 12 + ...flineMarketShopApplyorderCancelResponse.cs | 17 + ...ipayOfflineMarketShopBatchqueryResponse.cs | 31 + ...yOfflineMarketShopCategoryQueryResponse.cs | 20 + .../AlipayOfflineMarketShopCreateResponse.cs | 59 + ...yOfflineMarketShopDiscountQueryResponse.cs | 40 + .../AlipayOfflineMarketShopModifyResponse.cs | 41 + ...ipayOfflineMarketShopPublicBindResponse.cs | 31 + ...ayOfflineMarketShopPublicUnbindResponse.cs | 31 + ...payOfflineMarketShopQuerydetailResponse.cs | 317 + ...lineMarketShopSummaryBatchqueryResponse.cs | 44 + ...flineMarketingVoucherCodeUploadResponse.cs | 17 + ...ayOfflineMarketingVoucherCreateResponse.cs | 23 + ...ayOfflineMarketingVoucherModifyResponse.cs | 23 + ...yOfflineMarketingVoucherOfflineResponse.cs | 23 + ...lineMarketingVoucherStatusQueryResponse.cs | 29 + ...lipayOfflineMarketingVoucherUseResponse.cs | 12 + ...payOfflineMaterialImageDownloadResponse.cs | 19 + ...lipayOfflineMaterialImageUploadResponse.cs | 23 + .../AlipayOfflineProviderDishQueryResponse.cs | 44 + ...roviderEquipmentAuthQuerybypageResponse.cs | 26 + ...lineProviderEquipmentAuthRemoveResponse.cs | 23 + ...ayOfflineProviderMonitorLogSyncResponse.cs | 12 + ...OfflineProviderShopactionRecordResponse.cs | 12 + ...OfflineProviderUseractionRecordResponse.cs | 12 + .../Response/AlipayOpenAgentCancelResponse.cs | 12 + .../AlipayOpenAgentConfirmResponse.cs | 47 + .../Response/AlipayOpenAgentCreateResponse.cs | 23 + .../AlipayOpenAgentFacetofaceSignResponse.cs | 12 + .../AlipayOpenAgentMiniCreateResponse.cs | 12 + .../AlipayOpenAgentMobilepaySignResponse.cs | 12 + ...ipayOpenAgentOfflinepaymentSignResponse.cs | 12 + .../AlipayOpenAgentOrderQueryResponse.cs | 41 + .../AlipayOpenAgentSignstatusQueryResponse.cs | 20 + .../AlipayOpenAgentZhimabriefSignResponse.cs | 12 + ...AlipayOpenAppAlipaycertDownloadResponse.cs | 17 + ...OpenAppAppcontentFunctionCreateResponse.cs | 17 + ...OpenAppAppcontentFunctionModifyResponse.cs | 17 + ...penAppAppcontentFunctionOfflineResponse.cs | 17 + ...yOpenAppAppcontentFunctionQueryResponse.cs | 95 + ...OpenAppAppcontentItemBatchqueryResponse.cs | 20 + ...ipayOpenAppAppcontentItemCreateResponse.cs | 17 + ...ipayOpenAppAppcontentItemDeleteResponse.cs | 17 + ...ipayOpenAppAppcontentItemModifyResponse.cs | 17 + ...lipayOpenAppAppcontentItemQueryResponse.cs | 26 + .../AlipayOpenAppCallQueryResponse.cs | 12 + .../AlipayOpenAppCodetesttestResponse.cs | 17 + .../AlipayOpenAppDedfDdQueryResponse.cs | 12 + .../AlipayOpenAppDfsfasDeQueryResponse.cs | 17 + ...AlipayOpenAppLingbalingliuQueryResponse.cs | 12 + .../AlipayOpenAppLingjiuyisiCreateResponse.cs | 12 + ...payOpenAppLingjiuyiwuBatchqueryResponse.cs | 12 + .../AlipayOpenAppMembersCreateResponse.cs | 12 + .../AlipayOpenAppMembersDeleteResponse.cs | 12 + .../AlipayOpenAppMembersQueryResponse.cs | 20 + ...penAppMessageSubscriptionModifyResponse.cs | 12 + ...OpenAppMessageSubscriptionQueryResponse.cs | 29 + ...payOpenAppMessageTopicSubscribeResponse.cs | 12 + ...yOpenAppMessageTopicUnsubscribeResponse.cs | 12 + ...yOpenAppMiniTemplatemessageSendResponse.cs | 12 + .../AlipayOpenAppNotifyModifyResponse.cs | 12 + .../AlipayOpenAppNotifyVerifyResponse.cs | 12 + ...enAppOpenbizmockApisdkgrayQueryResponse.cs | 17 + ...ayOpenAppOpenbizmockMessageSendResponse.cs | 12 + ...pOpenbizmockOpenidnonstandQueryResponse.cs | 17 + .../AlipayOpenAppQrcodeCreateResponse.cs | 17 + .../AlipayOpenAppSmgMsgSendResponse.cs | 12 + .../AlipayOpenAppSmsgDataSyncResponse.cs | 12 + ...ystemNewcontextupiduoidTransferResponse.cs | 12 + ...lipayOpenAppUpdattestBatchqueryResponse.cs | 12 + .../AlipayOpenAppXwbtestabcQueryResponse.cs | 17 + .../AlipayOpenAppYiyiyiwuQueryResponse.cs | 17 + ...ngsanyaowuYufalingsanyaowuQueryResponse.cs | 17 + .../AlipayOpenAuthAppAesGetResponse.cs | 17 + .../AlipayOpenAuthAppAesSetResponse.cs | 17 + ...AuthIndustryPlatformCreateTokenResponse.cs | 29 + .../AlipayOpenAuthTokenAppQueryResponse.cs | 55 + .../AlipayOpenAuthTokenAppResponse.cs | 56 + .../Response/AlipayOpenBizCreateResponse.cs | 30 + .../AlipayOpenDafBatchqueryResponse.cs | 12 + .../AlipayOpenEchoOfflineSendResponse.cs | 17 + .../AlipayOpenInviteOrderCreateResponse.cs | 12 + .../AlipayOpenInviteOrderQueryResponse.cs | 26 + .../AlipayOpenMessagetestCesSendResponse.cs | 12 + .../AlipayOpenMiniBaseinfoModifyResponse.cs | 12 + .../AlipayOpenMiniBaseinfoQueryResponse.cs | 74 + ...iniBizdataTemplatemessageDeleteResponse.cs | 17 + ...iniBizdataTemplatemessageUploadResponse.cs | 17 + .../AlipayOpenMiniCategoryQueryResponse.cs | 27 + .../AlipayOpenMiniContentSyncResponse.cs | 17 + .../AlipayOpenMiniDataVisitQueryResponse.cs | 32 + .../AlipayOpenMiniExperienceCancelResponse.cs | 12 + .../AlipayOpenMiniExperienceCreateResponse.cs | 12 + .../AlipayOpenMiniExperienceQueryResponse.cs | 23 + ...enMiniIndividualBusinessCertifyResponse.cs | 17 + .../AlipayOpenMiniItemBatchqueryResponse.cs | 20 + .../AlipayOpenMiniItemPageQueryResponse.cs | 38 + ...nMiniMiniappServiceconfigModifyResponse.cs | 12 + .../AlipayOpenMiniQrcodeBindResponse.cs | 17 + .../AlipayOpenMiniQrcodeUnbindResponse.cs | 12 + ...ipayOpenMiniReleaststBatchqueryResponse.cs | 24 + .../AlipayOpenMiniSafedomainCreateResponse.cs | 12 + .../AlipayOpenMiniSafedomainDeleteResponse.cs | 12 + ...lipayOpenMiniTemplateUsageQueryResponse.cs | 27 + ...emplatemessageUsertemplateApplyResponse.cs | 17 + ...AlipayOpenMiniTinyappExistQueryResponse.cs | 17 + ...AlipayOpenMiniVersionAuditApplyResponse.cs | 12 + ...lipayOpenMiniVersionAuditCancelResponse.cs | 12 + ...payOpenMiniVersionAuditedCancelResponse.cs | 12 + ...AlipayOpenMiniVersionBuildQueryResponse.cs | 35 + .../AlipayOpenMiniVersionDeleteResponse.cs | 12 + ...lipayOpenMiniVersionDetailQueryResponse.cs | 168 + ...AlipayOpenMiniVersionGrayCancelResponse.cs | 12 + ...AlipayOpenMiniVersionGrayOnlineResponse.cs | 12 + .../AlipayOpenMiniVersionListQueryResponse.cs | 19 + .../AlipayOpenMiniVersionOfflineResponse.cs | 12 + .../AlipayOpenMiniVersionOnlineResponse.cs | 12 + .../AlipayOpenMiniVersionRollbackResponse.cs | 12 + .../AlipayOpenMiniVersionUploadResponse.cs | 35 + .../AlipayOpenNewgotoneCreateResponse.cs | 12 + ...penOperationBizfeeActivityApplyResponse.cs | 23 + ...penOperationOpenbizmockBizQueryResponse.cs | 17 + ...AlipayOpenOperationSsffDeeQueryResponse.cs | 12 + ...lipayOpenPageNewcontextTransferResponse.cs | 12 + ...lipayOpenPageOldcontextTransferResponse.cs | 12 + .../AlipayOpenPublicAccountCreateResponse.cs | 17 + .../AlipayOpenPublicAccountDeleteResponse.cs | 12 + .../AlipayOpenPublicAccountQueryResponse.cs | 20 + .../AlipayOpenPublicAccountResetResponse.cs | 17 + ...lipayOpenPublicAdvertBatchqueryResponse.cs | 20 + .../AlipayOpenPublicAdvertCreateResponse.cs | 17 + .../AlipayOpenPublicAdvertDeleteResponse.cs | 12 + .../AlipayOpenPublicAdvertModifyResponse.cs | 12 + ...licArticlesummaryDataBatchqueryResponse.cs | 20 + .../AlipayOpenPublicComptestCreateResponse.cs | 23 + ...enPublicContactFollowBatchqueryResponse.cs | 20 + ...penPublicDefaultExtensionCreateResponse.cs | 17 + ...lipayOpenPublicFollowBatchqueryResponse.cs | 31 + .../AlipayOpenPublicGisQueryResponse.cs | 41 + ...AlipayOpenPublicGroupBatchqueryResponse.cs | 20 + .../AlipayOpenPublicGroupCreateResponse.cs | 17 + ...AlipayOpenPublicGroupCrowdQueryResponse.cs | 17 + .../AlipayOpenPublicGroupDeleteResponse.cs | 12 + .../AlipayOpenPublicGroupModifyResponse.cs | 12 + .../AlipayOpenPublicInfoModifyResponse.cs | 23 + .../AlipayOpenPublicInfoQueryResponse.cs | 80 + .../AlipayOpenPublicLabelCreateResponse.cs | 23 + .../AlipayOpenPublicLabelDeleteResponse.cs | 12 + .../AlipayOpenPublicLabelModifyResponse.cs | 12 + .../AlipayOpenPublicLabelQueryResponse.cs | 20 + ...AlipayOpenPublicLabelUserCreateResponse.cs | 12 + ...AlipayOpenPublicLabelUserDeleteResponse.cs | 12 + .../AlipayOpenPublicLabelUserQueryResponse.cs | 17 + ...AlipayOpenPublicLifeAboardApplyResponse.cs | 17 + ...ipayOpenPublicLifeAccountCreateResponse.cs | 35 + ...AlipayOpenPublicLifeAgentCreateResponse.cs | 17 + ...yOpenPublicLifeAgentcreateQueryResponse.cs | 41 + .../AlipayOpenPublicLifeCreateResponse.cs | 47 + ...AlipayOpenPublicLifeDebarkApplyResponse.cs | 17 + ...ayOpenPublicLifeLabelBatchqueryResponse.cs | 20 + ...AlipayOpenPublicLifeLabelCreateResponse.cs | 17 + ...AlipayOpenPublicLifeLabelDeleteResponse.cs | 12 + ...AlipayOpenPublicLifeLabelModifyResponse.cs | 12 + .../AlipayOpenPublicLifeModifyResponse.cs | 23 + .../AlipayOpenPublicLifeMsgRecallResponse.cs | 12 + .../AlipayOpenPublicLifeMsgSendResponse.cs | 17 + ...yOpenPublicMatchuserLabelCreateResponse.cs | 26 + ...yOpenPublicMatchuserLabelDeleteResponse.cs | 26 + .../AlipayOpenPublicMenuBatchqueryResponse.cs | 26 + .../AlipayOpenPublicMenuCreateResponse.cs | 17 + ...payOpenPublicMenuDataBatchqueryResponse.cs | 20 + .../AlipayOpenPublicMenuDeleteResponse.cs | 12 + .../AlipayOpenPublicMenuModifyResponse.cs | 12 + .../AlipayOpenPublicMenuQueryResponse.cs | 17 + ...yOpenPublicMessageContentCreateResponse.cs | 23 + ...yOpenPublicMessageContentModifyResponse.cs | 23 + ...ipayOpenPublicMessageCustomSendResponse.cs | 12 + ...lipayOpenPublicMessageGroupSendResponse.cs | 17 + ...lipayOpenPublicMessageLabelSendResponse.cs | 12 + ...payOpenPublicMessagePreviewSendResponse.cs | 20 + .../AlipayOpenPublicMessageQueryResponse.cs | 20 + ...ipayOpenPublicMessageSingleSendResponse.cs | 12 + ...lipayOpenPublicMessageTotalSendResponse.cs | 17 + ...enPublicMultimediaDownloadProxyResponse.cs | 12 + ...payOpenPublicPartnerMenuOperateResponse.cs | 12 + ...lipayOpenPublicPartnerMenuQueryResponse.cs | 17 + ...yOpenPublicPartnerSubscribeSyncResponse.cs | 12 + ...AlipayOpenPublicPayeeBindCreateResponse.cs | 12 + ...AlipayOpenPublicPayeeBindDeleteResponse.cs | 12 + ...PersonalizedExtensionBatchqueryResponse.cs | 26 + ...blicPersonalizedExtensionCreateResponse.cs | 17 + ...blicPersonalizedExtensionDeleteResponse.cs | 12 + ...nPublicPersonalizedExtensionSetResponse.cs | 12 + ...penPublicPersonalizedMenuCreateResponse.cs | 17 + ...penPublicPersonalizedMenuDeleteResponse.cs | 12 + .../AlipayOpenPublicQrcodeCreateResponse.cs | 23 + ...yOpenPublicSettingCategoryQueryResponse.cs | 23 + ...AlipayOpenPublicShortlinkCreateResponse.cs | 17 + ...blicSinglearticleDataBatchqueryResponse.cs | 20 + ...payOpenPublicTemplateMessageAddResponse.cs | 23 + ...payOpenPublicTemplateMessageGetResponse.cs | 23 + ...icTemplateMessageIndustryModifyResponse.cs | 12 + ...yOpenPublicThirdCustomerServiceResponse.cs | 17 + ...AlipayOpenPublicTopicBatchqueryResponse.cs | 20 + .../AlipayOpenPublicTopicCreateResponse.cs | 17 + .../AlipayOpenPublicTopicDeleteResponse.cs | 12 + .../AlipayOpenPublicTopicModifyResponse.cs | 12 + ...payOpenPublicUserDataBatchqueryResponse.cs | 20 + ...AlipayOpenPublicUserFollowQueryResponse.cs | 17 + ...OpenPublicXwbtestabcdBatchqueryResponse.cs | 17 + ...rvicemarketCommodityShopOfflineResponse.cs | 12 + ...ervicemarketCommodityShopOnlineResponse.cs | 12 + ...payOpenServicemarketOrderAcceptResponse.cs | 12 + ...penServicemarketOrderItemCancelResponse.cs | 12 + ...nServicemarketOrderItemCompleteResponse.cs | 12 + ...enServicemarketOrderItemConfirmResponse.cs | 12 + ...payOpenServicemarketOrderNotifyResponse.cs | 12 + ...ipayOpenServicemarketOrderQueryResponse.cs | 50 + ...payOpenServicemarketOrderRejectResponse.cs | 12 + .../Response/AlipayOpenSmsgDataSetResponse.cs | 12 + .../Response/AlipayOpenTestQueryResponse.cs | 17 + .../Response/AlipayPassCodeAddResponse.cs | 31 + .../Response/AlipayPassCodeVerifyResponse.cs | 29 + .../Response/AlipayPassFileAddResponse.cs | 29 + .../Response/AlipayPassInstanceAddResponse.cs | 23 + .../AlipayPassInstanceUpdateResponse.cs | 23 + .../Response/AlipayPassSyncAddResponse.cs | 29 + .../Response/AlipayPassSyncUpdateResponse.cs | 29 + .../Response/AlipayPassTemplateAddResponse.cs | 23 + .../AlipayPassTemplateUpdateResponse.cs | 23 + .../Response/AlipayPassTplAddResponse.cs | 29 + .../AlipayPassTplContentAddResponse.cs | 29 + .../AlipayPassTplContentUpdateResponse.cs | 29 + .../Response/AlipayPassTplUpdateResponse.cs | 29 + .../Response/AlipayPassVerifyQueryResponse.cs | 29 + .../AlipayPayAppMarketingConsultResponse.cs | 29 + .../AlipayPayCodecHschoolDecodeUseResponse.cs | 35 + ...editHuabeiAuthAccumulationQueryResponse.cs | 35 + ...PcreditHuabeiAuthAgreementCloseResponse.cs | 17 + ...PcreditHuabeiAuthAgreementQueryResponse.cs | 77 + ...creditHuabeiAuthBusinessConfirmResponse.cs | 23 + ...ipayPcreditHuabeiAuthOrderCloseResponse.cs | 23 + ...ipayPcreditHuabeiAuthOrderQueryResponse.cs | 77 + ...yPcreditHuabeiAuthOrderUnfreezeResponse.cs | 71 + ...payPcreditHuabeiAuthRefundApplyResponse.cs | 35 + ...payPcreditHuabeiAuthSettleApplyResponse.cs | 23 + ...lipayPcreditHuabeiAuthSignApplyResponse.cs | 12 + ...yPcreditHuabeiDiscountBillQueryResponse.cs | 41 + ...ditHuabeiDiscountSolutionCreateResponse.cs | 17 + ...ditHuabeiDiscountSolutionModifyResponse.cs | 17 + ...itHuabeiDiscountSolutionOfflineResponse.cs | 17 + ...ditHuabeiDiscountSolutionOnlineResponse.cs | 23 + ...ditHuabeiMerchantActivityCreateResponse.cs | 23 + ...ditHuabeiMerchantActivityModifyResponse.cs | 23 + ...itHuabeiMerchantActivityOfflineResponse.cs | 23 + ...ditHuabeiMerchantActivityOnlineResponse.cs | 23 + ...yPcreditHuabeiMerchantBillQueryResponse.cs | 26 + .../AlipayPcreditHuabeiPromoQueryResponse.cs | 17 + .../AlipayPcreditLoanApplyCreateResponse.cs | 12 + .../AlipayPcreditLoanRefundCreateResponse.cs | 17 + .../AlipayPlatformOpenidGetResponse.cs | 29 + .../AlipayPlatformUseridGetResponse.cs | 17 + .../Response/AlipayPointBalanceGetResponse.cs | 17 + .../Response/AlipayPointBudgetGetResponse.cs | 17 + .../Response/AlipayPointOrderAddResponse.cs | 23 + .../Response/AlipayPointOrderGetResponse.cs | 59 + ...lipayPromorulecenterRuleAnalyzeResponse.cs | 41 + .../AlipaySecurityInfoAnalysisResponse.cs | 23 + ...urityProdAlipaySecurityProdTestResponse.cs | 17 + .../AlipaySecurityProdAmlriskQueryResponse.cs | 38 + .../AlipaySecurityProdCheckIqQueryResponse.cs | 17 + ...AlipaySecurityProdDdsBatchqueryResponse.cs | 12 + .../AlipaySecurityProdDesQueryResponse.cs | 24 + ...rityProdDfasfdasFdfdsBatchqueryResponse.cs | 12 + ...ySecurityProdDfesfDefBatchqueryResponse.cs | 17 + ...AlipaySecurityProdFacePayCreateResponse.cs | 17 + .../AlipaySecurityProdFacePayResponse.cs | 17 + .../AlipaySecurityProdFacerepoAddResponse.cs | 23 + ...lipaySecurityProdFacerepoSearchResponse.cs | 23 + ...yProdFingerprintApplyInitializeResponse.cs | 17 + ...paySecurityProdFingerprintApplyResponse.cs | 29 + ...aySecurityProdFingerprintDeleteResponse.cs | 17 + ...rityProdFingerprintDeviceVerifyResponse.cs | 12 + ...ProdFingerprintRiskcontrolQueryResponse.cs | 17 + ...ProdFingerprintVerifyInitializeResponse.cs | 17 + ...aySecurityProdFingerprintVerifyResponse.cs | 23 + .../AlipaySecurityProdMyQueryResponse.cs | 12 + ...ipaySecurityProdNopidBatchqueryResponse.cs | 17 + .../AlipaySecurityProdShopQueryResponse.cs | 12 + ...SecurityProdSignatureFileUploadResponse.cs | 17 + ...ySecurityProdSignatureTaskApplyResponse.cs | 26 + ...SecurityProdSignatureTaskCancelResponse.cs | 17 + ...ySecurityProdSignatureTaskQueryResponse.cs | 38 + ...ySecurityProdXwbtestabcAbcQueryResponse.cs | 17 + ...paySecurityProdXwbtestprodQueryResponse.cs | 23 + ...AlipaySecurityRiskContentDetectResponse.cs | 31 + ...aySecurityRiskCustomerriskQueryResponse.cs | 23 + ...paySecurityRiskCustomerriskSendResponse.cs | 12 + .../AlipaySecurityRiskDetectResponse.cs | 23 + ...aySecurityRiskHideDeviceidQueryResponse.cs | 17 + ...lipaySecurityRiskRainscoreQueryResponse.cs | 39 + .../AlipaySecuritySssssssQueryResponse.cs | 17 + .../AlipaySecurityTesttestQueryResponse.cs | 12 + .../AlipaySystemOauthTokenResponse.cs | 53 + .../AlipayTradeAdvanceConsultResponse.cs | 56 + .../Response/AlipayTradeAppPayResponse.cs | 41 + .../Response/AlipayTradeCancelResponse.cs | 47 + .../Response/AlipayTradeCloseResponse.cs | 23 + .../Response/AlipayTradeCreateResponse.cs | 23 + .../AlipayTradeCustomsDeclareResponse.cs | 59 + .../AlipayTradeCustomsQueryResponse.cs | 26 + .../AlipayTradeFastpayRefundQueryResponse.cs | 129 + .../AlipayTradeOrderSettleResponse.cs | 17 + .../AlipayTradeOrderinfoSyncResponse.cs | 29 + .../Response/AlipayTradePagePayResponse.cs | 41 + .../Response/AlipayTradePageRefundResponse.cs | 35 + .../AliPay/Response/AlipayTradePayResponse.cs | 219 + .../Response/AlipayTradePrecreateResponse.cs | 23 + .../Response/AlipayTradeQueryResponse.cs | 255 + .../Response/AlipayTradeRefundResponse.cs | 122 + ...yTradeRoyaltyRelationBatchqueryResponse.cs | 50 + .../AlipayTradeRoyaltyRelationBindResponse.cs | 17 + ...lipayTradeRoyaltyRelationUnbindResponse.cs | 17 + ...yTradeVendorpayDevicedataUploadResponse.cs | 12 + .../Response/AlipayTradeWapPayResponse.cs | 41 + ...payTransferThirdpartyBillCreateResponse.cs | 29 + .../AlipayTrustUserAuthSendResponse.cs | 17 + .../AlipayTrustUserReportGetResponse.cs | 17 + .../AlipayTrustUserRiskidentifyGetResponse.cs | 18 + .../AlipayTrustUserScoreGetResponse.cs | 18 + .../AlipayTrustUserTokenGetResponse.cs | 23 + .../AlipayUserAccountFreezeGetResponse.cs | 26 + .../Response/AlipayUserAccountGetResponse.cs | 18 + .../AlipayUserAccountSearchResponse.cs | 32 + ...ipayUserAccountUseridBatchqueryResponse.cs | 19 + .../AlipayUserAddressQueryResponse.cs | 65 + ...serAgreementExecutionplanModifyResponse.cs | 23 + .../AlipayUserAgreementPageSignResponse.cs | 101 + .../AlipayUserAgreementQueryResponse.cs | 107 + .../AlipayUserAgreementTransferResponse.cs | 47 + .../AlipayUserAgreementUnsignResponse.cs | 12 + ...payUserAgreementUserverifyApplyResponse.cs | 17 + ...payUserAgreementUserverifyQueryResponse.cs | 17 + .../AlipayUserAlipaypointSendResponse.cs | 17 + ...ayUserAuthZhimaorgIdentityApplyResponse.cs | 29 + ...payUserCertdocCertverifyConsultResponse.cs | 29 + ...UserCertdocCertverifyPreconsultResponse.cs | 17 + .../AlipayUserCertifyOpenCertifyResponse.cs | 12 + ...AlipayUserCertifyOpenInitializeResponse.cs | 17 + .../AlipayUserCertifyOpenQueryResponse.cs | 37 + .../Response/AlipayUserContractGetResponse.cs | 18 + ...ipayUserFamilyArchiveInitializeResponse.cs | 17 + .../AlipayUserFamilyArchiveQueryResponse.cs | 20 + .../AlipayUserFinanceinfoShareResponse.cs | 20 + .../AliPay/Response/AlipayUserGetResponse.cs | 18 + .../Response/AlipayUserInfoAuthResponse.cs | 12 + .../Response/AlipayUserInfoShareResponse.cs | 305 + .../AlipayUserPassInstancebatchAddResponse.cs | 25 + .../AlipayUserPassTemplateCreateResponse.cs | 17 + .../AlipayUserPassTemplateModifyResponse.cs | 12 + .../AlipayUserPassTemplateQueryResponse.cs | 48 + .../AliPay/Response/AlipayUserTestResponse.cs | 17 + .../Response/AlipayUserTradeSearchResponse.cs | 32 + .../AlipayUserTwostageCommonUseResponse.cs | 24 + .../AlipayUserUserinfoShareResponse.cs | 254 + .../AlipayZdataassetsEasyserviceResponse.cs | 17 + ...taassetsFcdatalabZdatamergetaskResponse.cs | 17 + .../AlipayZdataassetsMetadataResponse.cs | 20 + .../AlipayZdatafrontCommonQueryResponse.cs | 23 + ...tafrontDatatransferedFileuploadResponse.cs | 23 + ...payZdatafrontDatatransferedSendResponse.cs | 17 + .../AlipayZdataserviceUnidataQueryResponse.cs | 29 + .../Response/AlipayZmscoreZrankGetResponse.cs | 18 + ...AmapMapMapserviceTeseBatchqueryResponse.cs | 17 + ...ntExpandContractFacetofaceQueryResponse.cs | 41 + ...antExpandContractFacetofaceSignResponse.cs | 23 + ...ntMerchantExpandEnterpriseApplyResponse.cs | 23 + .../AntMerchantExpandImageUploadResponse.cs | 17 + ...rchantExpandIndirectImageUploadResponse.cs | 17 + ...MerchantExpandIndirectIsvModifyResponse.cs | 12 + ...erchantExpandItemOpenBatchqueryResponse.cs | 20 + ...AntMerchantExpandItemOpenCreateResponse.cs | 17 + ...AntMerchantExpandItemOpenDeleteResponse.cs | 12 + ...AntMerchantExpandItemOpenModifyResponse.cs | 12 + .../AntMerchantExpandItemOpenQueryResponse.cs | 20 + ...tMerchantExpandMapplyorderQueryResponse.cs | 38 + ...antExpandMerchantStorelistQueryResponse.cs | 44 + .../AntMerchantExpandOrderQueryResponse.cs | 43 + .../AntMerchantExpandPersonalApplyResponse.cs | 23 + .../AntMerchantExpandShopCloseResponse.cs | 12 + .../AntMerchantExpandShopConsultResponse.cs | 29 + .../AntMerchantExpandShopCreateResponse.cs | 17 + .../AntMerchantExpandShopModifyResponse.cs | 17 + .../AntMerchantExpandShopQueryResponse.cs | 168 + .../AntOcrDriverlicenseIdentifyResponse.cs | 17 + .../Response/AntOcrGeneralIdentifyResponse.cs | 17 + .../Response/AntOcrIdcardIdentifyResponse.cs | 17 + .../AntOcrVehiclelicenseIdentifyResponse.cs | 17 + .../AntOcrVehicleplateIdentifyResponse.cs | 17 + ...techBlockchainFinanceFileUploadResponse.cs | 18 + .../Response/HuanxuTradeOrderCloseResponse.cs | 35 + .../HuanxuTradeOrderDisburseResponse.cs | 41 + .../Response/HuanxuTradeOrderQueryResponse.cs | 47 + .../HuanxuTradeOrderRefundResponse.cs | 41 + ...liveryDiscountAuthwebBatchqueryResponse.cs | 12 + ...KoubeiAdvertDeliveryDiscountGetResponse.cs | 24 + ...ubeiAdvertDeliveryDiscountQueryResponse.cs | 18 + ...oubeiAdvertDeliveryDiscountSendResponse.cs | 23 + ...rtDeliveryDiscountWebBatchqueryResponse.cs | 12 + .../KoubeiAdvertDeliveryItemApplyResponse.cs | 23 + ...KoubeiCateringCommodityOrderBuyResponse.cs | 37 + ...ateringCrowdgroupConditionQueryResponse.cs | 20 + ...iCateringCrowdgroupConditionSetResponse.cs | 32 + ...oubeiCateringDishCommgroupQueryResponse.cs | 18 + ...KoubeiCateringDishCommgroupSyncResponse.cs | 24 + ...KoubeiCateringDishCommruleQueryResponse.cs | 42 + .../KoubeiCateringDishCommruleSyncResponse.cs | 20 + ...ubeiCateringDishCookcatetopSyncResponse.cs | 12 + .../KoubeiCateringDishMenuQueryResponse.cs | 80 + .../KoubeiCateringDishMenuSyncResponse.cs | 17 + ...oubeiCateringDishSpecgroupQueryResponse.cs | 26 + ...KoubeiCateringDishSpecgroupSyncResponse.cs | 17 + ...beiCateringDishVirtualdishQueryResponse.cs | 26 + ...ubeiCateringDishVirtualdishSyncResponse.cs | 12 + .../KoubeiCateringTablecodeQueryResponse.cs | 29 + .../KoubeiCateringTablelistQueryResponse.cs | 18 + ...CraftsmanDataProviderBatchqueryResponse.cs | 44 + ...ubeiCraftsmanDataProviderCreateResponse.cs | 17 + ...ubeiCraftsmanDataProviderModifyResponse.cs | 12 + ...ubeiCraftsmanDataWorkBatchqueryResponse.cs | 44 + .../KoubeiCraftsmanDataWorkCreateResponse.cs | 20 + .../KoubeiCraftsmanDataWorkDeleteResponse.cs | 12 + .../KoubeiCraftsmanDataWorkModifyResponse.cs | 12 + ...iItemCategoryChildrenBatchqueryResponse.cs | 20 + .../Response/KoubeiItemCreateResponse.cs | 23 + .../KoubeiItemExtitemBatchqueryResponse.cs | 38 + .../KoubeiItemExtitemBrandQueryResponse.cs | 20 + .../KoubeiItemExtitemCategoryQueryResponse.cs | 20 + .../KoubeiItemExtitemCreateResponse.cs | 12 + .../KoubeiItemExtitemExistedQueryResponse.cs | 19 + .../KoubeiItemExtitemQueryResponse.cs | 18 + .../KoubeiItemExtitemUpdateResponse.cs | 12 + .../Response/KoubeiItemModifyResponse.cs | 23 + .../Response/KoubeiItemStateResponse.cs | 23 + ...etingCampaignActivityBatchqueryResponse.cs | 26 + ...MarketingCampaignActivityCreateResponse.cs | 29 + ...MarketingCampaignActivityModifyResponse.cs | 23 + ...arketingCampaignActivityOfflineResponse.cs | 23 + ...iMarketingCampaignActivityQueryResponse.cs | 18 + ...rketingCampaignAssetDetailQueryResponse.cs | 17 + ...arketingCampaignCrowdBatchqueryResponse.cs | 23 + ...ubeiMarketingCampaignCrowdCountResponse.cs | 23 + ...beiMarketingCampaignCrowdCreateResponse.cs | 17 + ...beiMarketingCampaignCrowdDeleteResponse.cs | 12 + ...rketingCampaignCrowdDetailQueryResponse.cs | 23 + ...beiMarketingCampaignCrowdModifyResponse.cs | 12 + ...arketingCampaignDetailInfoQueryResponse.cs | 17 + ...paignIntelligentPromoBatchqueryResponse.cs | 26 + ...CampaignIntelligentPromoConsultResponse.cs | 18 + ...gCampaignIntelligentPromoCreateResponse.cs | 18 + ...gCampaignIntelligentPromoDeleteResponse.cs | 12 + ...gCampaignIntelligentPromoModifyResponse.cs | 18 + ...ngCampaignIntelligentPromoQueryResponse.cs | 18 + ...gCampaignIntelligentShopConsultResponse.cs | 26 + ...paignIntelligentTemplateConsultResponse.cs | 19 + ...nItemMerchantactivityBatchqueryResponse.cs | 20 + ...mpaignItemMerchantactivityCloseResponse.cs | 12 + ...paignItemMerchantactivityCreateResponse.cs | 17 + ...paignItemMerchantactivityModifyResponse.cs | 12 + ...mpaignItemMerchantactivityQueryResponse.cs | 110 + ...ketingCampaignRecruitApplyQueryResponse.cs | 50 + ...rketingCampaignRecruitShopQueryResponse.cs | 32 + ...oubeiMarketingCampaignTagsQueryResponse.cs | 17 + ...MarketingCampaignUserAssetQueryResponse.cs | 26 + ...rketingDataActivityBillDownloadResponse.cs | 17 + ...arketingDataActivityReportQueryResponse.cs | 17 + ...etingDataAlisisReportBatchqueryResponse.cs | 26 + ...iMarketingDataAlisisReportQueryResponse.cs | 20 + ...ataBizadviserMemberprofileQueryResponse.cs | 17 + ...gDataBizadviserMyddsreportQueryResponse.cs | 17 + ...tingDataBizadviserMyreportQueryResponse.cs | 17 + ...etingDataCustomreportBatchqueryResponse.cs | 20 + ...MarketingDataCustomreportDeleteResponse.cs | 12 + ...tingDataCustomreportDetailQueryResponse.cs | 18 + ...iMarketingDataCustomreportQueryResponse.cs | 26 + ...eiMarketingDataCustomreportSaveResponse.cs | 17 + ...etingDataDishdiagnoseBatchqueryResponse.cs | 26 + ...gDataDishdiagnosetypeBatchqueryResponse.cs | 20 + ...ngDataEnterpriseStaffinfoUploadResponse.cs | 17 + ...ubeiMarketingDataIndicatorQueryResponse.cs | 23 + ...etingDataIntelligentEffectQueryResponse.cs | 18 + ...ngDataIntelligentIndicatorQueryResponse.cs | 17 + ...KoubeiMarketingDataIsvShopQueryResponse.cs | 20 + ...MarketingDataMallShopitemsQueryResponse.cs | 20 + ...iMarketingDataMemberReportQueryResponse.cs | 17 + ...ubeiMarketingDataMessageDeliverResponse.cs | 12 + ...oubeiMarketingDataNearmallQueryResponse.cs | 20 + ...oubeiMarketingDataRetailDmQueryResponse.cs | 38 + ...arketingDataSmartactivityConfigResponse.cs | 89 + ...ketingDataSmartactivityForecastResponse.cs | 71 + ...tingDataSmartmanagementDiagnoseResponse.cs | 20 + ...eiMarketingDataTradeHabbitQueryResponse.cs | 17 + ...eiMarketingToolIsvMerchantQueryResponse.cs | 33 + .../KoubeiMarketingToolPointsQueryResponse.cs | 29 + ...KoubeiMarketingToolPointsUpdateResponse.cs | 17 + ...oubeiMarketingToolPrizesendAuthResponse.cs | 17 + ...KoubeiMemberBrandownerNameQueryResponse.cs | 17 + .../KoubeiMemberDataDesdBatchqueryResponse.cs | 18 + .../KoubeiMemberDataIsvCreateResponse.cs | 12 + .../KoubeiMemberDataOauthQueryResponse.cs | 41 + .../KoubeiMemberRetailerQueryResponse.cs | 20 + ...rchantKbdeviceDevicesBatchqueryResponse.cs | 20 + ...iMerchantKbdeviceDispenserQueryResponse.cs | 32 + ...alityTestCloudacptActivityQueryResponse.cs | 20 + ...iQualityTestCloudacptBatchQueryResponse.cs | 32 + ...yTestCloudacptCheckresultSubmitResponse.cs | 23 + ...eiQualityTestCloudacptItemQueryResponse.cs | 70 + .../KoubeiRetailShopitemBatchqueryResponse.cs | 20 + .../KoubeiRetailShopitemModifyResponse.cs | 12 + .../KoubeiRetailShopitemUploadResponse.cs | 12 + ...KoubeiSalesLeadsSaleleadsCreateResponse.cs | 17 + ...KoubeiSalesLeadsShopleadsCreateResponse.cs | 17 + .../Response/KoubeiTradeItemBuyResponse.cs | 12 + .../KoubeiTradeItemorderBuyResponse.cs | 29 + .../KoubeiTradeItemorderQueryResponse.cs | 110 + .../KoubeiTradeItemorderRefundResponse.cs | 29 + ...beiTradeKbdeliveryDeliveryApplyResponse.cs | 36 + ...eiTradeKbdeliveryDeliveryCancelResponse.cs | 23 + ...oubeiTradeOrderAggregateConsultResponse.cs | 102 + .../KoubeiTradeOrderConsultResponse.cs | 38 + ...KoubeiTradeOrderEnterpriseQueryResponse.cs | 95 + ...oubeiTradeOrderEnterpriseSettleResponse.cs | 29 + .../KoubeiTradeOrderPrecreateResponse.cs | 23 + .../Response/KoubeiTradeOrderQueryResponse.cs | 112 + .../KoubeiTradeTicketSendCloseResponse.cs | 23 + ...ubeiTradeTicketTicketcodeCancelResponse.cs | 23 + ...eTicketTicketcodeCheckavailableResponse.cs | 23 + ...oubeiTradeTicketTicketcodeDelayResponse.cs | 23 + ...oubeiTradeTicketTicketcodeQueryResponse.cs | 110 + ...KoubeiTradeTicketTicketcodeSendResponse.cs | 23 + ...KoubeiTradeTicketTicketcodeSyncResponse.cs | 31 + .../KoubeiTradeTicketTicketcodeUseResponse.cs | 134 + .../Response/MonitorHeartbeatSynResponse.cs | 17 + ...MybankCreditLoanapplyDataUploadResponse.cs | 17 + ...ybankCreditUserCertifyOpenQueryResponse.cs | 35 + .../MybankCreditUserInfoShareQueryResponse.cs | 47 + ...ankCreditUserOpenCertifyCertifyResponse.cs | 17 + ...CreditUserOpenCertifyInitializeResponse.cs | 17 + ...ybankCreditUserSystemOauthQueryResponse.cs | 41 + ...ybankFinanceYulibaoAccountQueryResponse.cs | 42 + ...nkFinanceYulibaoCapitalPurchaseResponse.cs | 29 + ...bankFinanceYulibaoCapitalRansomResponse.cs | 29 + .../MybankFinanceYulibaoPriceQueryResponse.cs | 20 + ...FinanceYulibaoTransHistoryQueryResponse.cs | 38 + ...PaymentTradeFinancingOrderCloseResponse.cs | 35 + ...aymentTradeFinancingOrderCreateResponse.cs | 35 + ...aymentTradeFinancingOrderRefundResponse.cs | 35 + .../MybankPaymentTradeOrderCreateResponse.cs | 12 + .../MybankPaymentTradeQrcodeCreateResponse.cs | 23 + .../MybankPaymentTradeQrcodeDeleteResponse.cs | 17 + ...aDataserviceRiskAlixiaohaoQueryResponse.cs | 17 + ...taserviceRiskAntifraudlistQueryResponse.cs | 35 + ...aserviceRiskAntifraudscoreQueryResponse.cs | 29 + .../ZhimaAuthInfoAuthqueryResponse.cs | 23 + .../ZhimaCreditAntifraudRiskListResponse.cs | 43 + .../ZhimaCreditAntifraudScoreGetResponse.cs | 35 + .../ZhimaCreditAntifraudVerifyResponse.cs | 37 + ...ZhimaCreditContractBorrowCancelResponse.cs | 12 + ...ZhimaCreditContractBorrowCreateResponse.cs | 12 + .../ZhimaCreditContractBorrowDelayResponse.cs | 12 + ...aCreditContractBorrowInitializeResponse.cs | 17 + .../ZhimaCreditContractBorrowQueryResponse.cs | 29 + ...ZhimaCreditContractBorrowReturnResponse.cs | 12 + ...imaCreditContractPrincipalQueryResponse.cs | 23 + .../Response/ZhimaCreditEpInfoGetResponse.cs | 24 + .../ZhimaCreditEpLawsuitDetailGetResponse.cs | 24 + .../ZhimaCreditEpLawsuitRecordGetResponse.cs | 24 + ...imaCreditEpSceneAgreementCancelResponse.cs | 17 + .../ZhimaCreditEpSceneAgreementUseResponse.cs | 17 + ...imaCreditEpSceneFulfillmentSyncResponse.cs | 17 + ...reditEpSceneFulfillmentlistSyncResponse.cs | 20 + .../ZhimaCreditEpSceneRatingApplyResponse.cs | 12 + ...maCreditEpSceneRatingInitializeResponse.cs | 17 + .../ZhimaCreditEpSceneRatingQueryResponse.cs | 65 + .../Response/ZhimaCreditEpScoreGetResponse.cs | 35 + .../ZhimaCreditOrderRepaymentApplyResponse.cs | 23 + ...ZhimaCreditPeLawsuitDetailQueryResponse.cs | 24 + .../ZhimaCreditPeLawsuitRecordGetResponse.cs | 24 + .../ZhimaCreditScoreBriefGetResponse.cs | 23 + .../Response/ZhimaCreditScoreGetResponse.cs | 23 + .../ZhimaCreditWatchlistBriefGetResponse.cs | 23 + .../ZhimaCreditWatchlistiiGetResponse.cs | 32 + ...himaCustomerAuthMutualviewApplyResponse.cs | 47 + .../ZhimaCustomerBehaviorSyncResponse.cs | 25 + ...imaCustomerCertificationCertifyResponse.cs | 29 + ...CustomerCertificationInitializeResponse.cs | 17 + ...merCertificationMaterialCertifyResponse.cs | 29 + ...ZhimaCustomerCertificationQueryResponse.cs | 41 + ...himaCustomerContractDetailQueryResponse.cs | 18 + ...ZhimaCustomerContractInitializeResponse.cs | 17 + ...aCustomerEpCertificationCertifyResponse.cs | 29 + ...stomerEpCertificationInitializeResponse.cs | 17 + ...imaCustomerEpCertificationQueryResponse.cs | 23 + .../ZhimaDataBatchFeedbackResponse.cs | 12 + .../ZhimaDataFeedbackurlQueryResponse.cs | 17 + .../ZhimaDataStateDataSyncResponse.cs | 17 + ...ZhimaMerchantBorrowEntityUploadResponse.cs | 12 + ...himaMerchantCloseloopDataUploadResponse.cs | 23 + ...imaMerchantContractCommonCancelResponse.cs | 35 + ...maMerchantContractCommonConfirmResponse.cs | 23 + ...himaMerchantContractCommonQueryResponse.cs | 191 + ...himaMerchantContractOfferModifyResponse.cs | 17 + ...ZhimaMerchantContractOfferQueryResponse.cs | 107 + ...imaMerchantContractOnofferQueryResponse.cs | 185 + .../ZhimaMerchantContractPageQueryResponse.cs | 38 + ...himaMerchantContractQuickCreateResponse.cs | 29 + ...rchantCreditserviceDetailCreateResponse.cs | 23 + ...rchantCreditserviceDetailModifyResponse.cs | 23 + ...erchantCreditserviceDetailQueryResponse.cs | 132 + ...imaMerchantDataUploadInitializeResponse.cs | 17 + .../ZhimaMerchantLogoImageUploadResponse.cs | 17 + .../ZhimaMerchantOrderRentCancelResponse.cs | 12 + .../ZhimaMerchantOrderRentCompleteResponse.cs | 29 + .../ZhimaMerchantOrderRentCreateResponse.cs | 41 + .../ZhimaMerchantOrderRentModifyResponse.cs | 12 + .../ZhimaMerchantOrderRentQueryResponse.cs | 83 + .../ZhimaMerchantSingleDataUploadResponse.cs | 23 + .../ZhimaMerchantTestPracticeResponse.cs | 24 + .../Response/ZhimaOpenAppDesSendResponse.cs | 12 + .../ZhimaOpenAppKeyanLqlCreateResponse.cs | 12 + .../ZhimaOpenQerqQerqQueryResponse.cs | 12 + ...icationCustomerFacemanageCreateResponse.cs | 41 + ...icationCustomerFacemanageDeleteResponse.cs | 41 + ...thenticationCustomerFtokenQueryResponse.cs | 44 + ...ationCustomerSmilepayInitializeResponse.cs | 17 + ...uthenticationSmilepayInitializeResponse.cs | 35 + ...icationCustomerCertifyzhubQueryResponse.cs | 48 + ...IdentificationUserWebInitializeResponse.cs | 23 + ...ZolozIdentificationUserWebQueryResponse.cs | 17 + PaymentSDK/AliPay/Util/AlipayEncrypt.cs | 100 + PaymentSDK/AliPay/Util/AlipaySignature.cs | 716 +++ .../AliPay/Util/AntCertificationUtil.cs | 330 ++ PaymentSDK/AliPay/Util/AopUtils.cs | 182 + PaymentSDK/AliPay/Util/ArgumentValidator.cs | 32 + .../Util/Asymmetric/AsymmetricManager.cs | 31 + .../Asymmetric/BaseAsymmetricEncryptor.cs | 114 + .../Util/Asymmetric/IAsymmetricEncryptor.cs | 47 + .../AliPay/Util/Asymmetric/RSA2Encryptor.cs | 18 + .../AliPay/Util/Asymmetric/RSAEncryptor.cs | 282 + .../AliPay/Util/Asymmetric/SM2Encryptor.cs | 110 + PaymentSDK/AliPay/Util/CertEnvironment.cs | 89 + PaymentSDK/AliPay/Util/FileItem.cs | 100 + PaymentSDK/AliPay/Util/RSAUtil.cs | 17 + PaymentSDK/AliPay/Util/SignSourceData.cs | 23 + PaymentSDK/AliPay/Util/StringUtil.cs | 90 + PaymentSDK/AliPay/Util/WebUtils.cs | 226 + PaymentSDK/PaymentSDK.csproj | 12 + PaymentSDK/WeiPay/CheckSignature.cs | 84 + PaymentSDK/WeiPay/OrderQuery.cs | 30 + PaymentSDK/WeiPay/WeiPayHelper.cs | 71 + PaymentSDK/WeiPay/WeiXinPayConfig.cs | 24 + PaymentSDK/WeiPay/WeixinModel.cs | 45 + PaymentSDK/WeiPay/WxPayData.cs | 396 ++ README-en.md | 169 + README.md | 390 ++ codecov.yml | 1 + 7880 files changed, 445265 insertions(+) create mode 100644 .dockerignore create mode 100644 .docs/contents/.vuepress/config.js create mode 100644 .docs/contents/.vuepress/public/bcvphomelogo.png create mode 100644 .docs/contents/.vuepress/public/favicon.ico create mode 100644 .docs/contents/Contribution/README.md create mode 100644 .docs/contents/PressureTest/README.md create mode 100644 .docs/contents/QQ/README.md create mode 100644 .docs/contents/README.md create mode 100644 .docs/contents/Update/README.md create mode 100644 .docs/contents/guide/README.md create mode 100644 .docs/contents/guide/cheat-sheet.md create mode 100644 .docs/contents/guide/function-sheet.md create mode 100644 .docs/contents/guide/getting-started.md create mode 100644 .docs/package.json create mode 100644 .editorconfig create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/workflows/dotnetcore.yml create mode 100644 .gitignore create mode 100644 CreateYourProject.bat create mode 100644 LICENSE create mode 100644 New_College.AdminMvc/New_College.AdminMvc.csproj create mode 100644 New_College.AdminMvc/Program.cs create mode 100644 New_College.AdminMvc/Properties/launchSettings.json create mode 100644 New_College.AdminMvc/Startup.cs create mode 100644 New_College.AdminMvc/appsettings.Development.json create mode 100644 New_College.AdminMvc/appsettings.json create mode 100644 New_College.Api/.config/dotnet-tools.json create mode 100644 New_College.Api/Controllers/Back/AutoController.cs create mode 100644 New_College.Api/Controllers/Back/CustomerController.cs create mode 100644 New_College.Api/Controllers/Back/ExaminationPolicyController.cs create mode 100644 New_College.Api/Controllers/Back/OrderInfoController.cs create mode 100644 New_College.Api/Controllers/Back/VipCardController.cs create mode 100644 New_College.Api/Controllers/BlogController.cs create mode 100644 New_College.Api/Controllers/DbFirst/DbFirstController.cs create mode 100644 New_College.Api/Controllers/DbFirst/MigrateController.cs create mode 100644 New_College.Api/Controllers/Front/CustomerController.cs create mode 100644 New_College.Api/Controllers/Front/ExaminationPolicyController.cs create mode 100644 New_College.Api/Controllers/Front/LibraryController.cs create mode 100644 New_College.Api/Controllers/Front/MajorSalaryController.cs create mode 100644 New_College.Api/Controllers/Front/OrderController.cs create mode 100644 New_College.Api/Controllers/Front/RegionController.cs create mode 100644 New_College.Api/Controllers/Front/TestController.cs create mode 100644 New_College.Api/Controllers/Front/UniversityCollectionController.cs create mode 100644 New_College.Api/Controllers/Front/VipController.cs create mode 100644 New_College.Api/Controllers/Front/VolunteerController.cs create mode 100644 New_College.Api/Controllers/Front/WeixinPayController.cs create mode 100644 New_College.Api/Controllers/HealthCheckController.cs create mode 100644 New_College.Api/Controllers/ImgController.cs create mode 100644 New_College.Api/Controllers/LoginController.cs create mode 100644 New_College.Api/Controllers/ModuleController.cs create mode 100644 New_College.Api/Controllers/MonitorController.cs create mode 100644 New_College.Api/Controllers/PermissionController.cs create mode 100644 New_College.Api/Controllers/RoleController.cs create mode 100644 New_College.Api/Controllers/SysRegionController.cs create mode 100644 New_College.Api/Controllers/TasksQzController.cs create mode 100644 New_College.Api/Controllers/TopicController.cs create mode 100644 New_College.Api/Controllers/TopicDetailController.cs create mode 100644 New_College.Api/Controllers/TransactionController.cs create mode 100644 New_College.Api/Controllers/UserController.cs create mode 100644 New_College.Api/Controllers/UserRoleController.cs create mode 100644 New_College.Api/Controllers/ValuesController.cs create mode 100644 New_College.Api/Controllers/v1/ApbController.cs create mode 100644 New_College.Api/Controllers/v2/ApbController.cs create mode 100644 New_College.Api/Dockerfile create mode 100644 New_College.Api/Filter/CustomRouteAttribute.cs create mode 100644 New_College.Api/Filter/GlobalAuthorizeFilter.cs create mode 100644 New_College.Api/Filter/GlobalExceptionFilter.cs create mode 100644 New_College.Api/Filter/GlobalRoutePrefixFilter.cs create mode 100644 New_College.Api/Filter/UseServiceDIAttribute.cs create mode 100644 New_College.Api/Log4net.config create mode 100644 New_College.Api/New_College.Api.csproj create mode 100644 New_College.Api/New_College.Model.xml create mode 100644 New_College.Api/New_College.xml create mode 100644 New_College.Api/Program.cs create mode 100644 New_College.Api/Properties/launchSettings.json create mode 100644 New_College.Api/Startup.cs create mode 100644 New_College.Api/appsettings.Development.json create mode 100644 New_College.Api/appsettings.json create mode 100644 New_College.Api/index.html create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/BlogArticle.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/Modules.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/Permission.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/Role.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/RoleModulePermission.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/TasksQz.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/Topic.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/TopicDetail.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/UserRole.tsv create mode 100644 New_College.Api/wwwroot/BlogCore.Data.json/sysUserInfo.tsv create mode 100644 New_College.Api/wwwroot/CorsPost.html create mode 100644 New_College.Api/wwwroot/JMeterTest.png create mode 100644 New_College.Api/wwwroot/MVP_Logo_Horizontal_Preferred_Cyan300_CMYK_72ppi.png create mode 100644 New_College.Api/wwwroot/NoInterAutofacIOC.rar create mode 100644 New_College.Api/wwwroot/QQGroup.png create mode 100644 New_College.Api/wwwroot/index.html create mode 100644 New_College.Api/wwwroot/laozhangisphigood.jpg create mode 100644 New_College.Api/wwwroot/logo.jpg.jpg create mode 100644 New_College.Api/wwwroot/logo.png.png create mode 100644 New_College.Api/wwwroot/logo/favicon-32x32.png create mode 100644 New_College.Api/wwwroot/logocore.png create mode 100644 New_College.Api/wwwroot/operateFlow.gif create mode 100644 New_College.Api/wwwroot/web.config create mode 100644 New_College.Build.bat create mode 100644 New_College.Common/Attribute/CachingAttribute.cs create mode 100644 New_College.Common/Attribute/UseTranAttribute.cs create mode 100644 New_College.Common/DB/AppSecretConfig.cs create mode 100644 New_College.Common/DB/BaseDBConfig.cs create mode 100644 New_College.Common/DB/MainDb.cs create mode 100644 New_College.Common/Enum/EnumHelper.cs create mode 100644 New_College.Common/Excel/ExcelUtil.cs create mode 100644 New_College.Common/GlobalVar/AliYunOssConfig.cs create mode 100644 New_College.Common/GlobalVar/GlobalVars.cs create mode 100644 New_College.Common/GlobalVar/WeiXinConfig.cs create mode 100644 New_College.Common/Helper/AliYunOssHelper.cs create mode 100644 New_College.Common/Helper/AliyunSmsSender.cs create mode 100644 New_College.Common/Helper/Appsettings.cs create mode 100644 New_College.Common/Helper/Base32Helper.cs create mode 100644 New_College.Common/Helper/ClearHtmlHelper.cs create mode 100644 New_College.Common/Helper/CommonTools.cs create mode 100644 New_College.Common/Helper/ConsoleHelper.cs create mode 100644 New_College.Common/Helper/DataHelper.cs create mode 100644 New_College.Common/Helper/DateHelper.cs create mode 100644 New_College.Common/Helper/FileHelper.cs create mode 100644 New_College.Common/Helper/GenerateCardNumberHelper.cs create mode 100644 New_College.Common/Helper/GenerateChineseWords.cs create mode 100644 New_College.Common/Helper/GetNetData.cs create mode 100644 New_College.Common/Helper/HtmlHelper.cs create mode 100644 New_College.Common/Helper/JsonHelper.cs create mode 100644 New_College.Common/Helper/MD5Hepler.cs create mode 100644 New_College.Common/Helper/ObjectExtension.cs create mode 100644 New_College.Common/Helper/OrderGenerateHelper.cs create mode 100644 New_College.Common/Helper/RadomHelper.cs create mode 100644 New_College.Common/Helper/RecursionHelper.cs create mode 100644 New_College.Common/Helper/SerializeHelper.cs create mode 100644 New_College.Common/Helper/StringHelper.cs create mode 100644 New_College.Common/Helper/TimeUtil.cs create mode 100644 New_College.Common/Helper/UnicodeHelper.cs create mode 100644 New_College.Common/Helper/UtilConvert.cs create mode 100644 New_College.Common/Helper/WeChatPayHelper.cs create mode 100644 New_College.Common/Helper/WeChatPayOrderQuery.cs create mode 100644 New_College.Common/Helper/WeixinHelper.cs create mode 100644 New_College.Common/Helper/WxPayData.cs create mode 100644 New_College.Common/Helper/XmlSerializeHelper.cs create mode 100644 New_College.Common/HttpContextUser/AspNetUser.cs create mode 100644 New_College.Common/HttpContextUser/IUser.cs create mode 100644 New_College.Common/HttpRestSharp/HttpHelper.cs create mode 100644 New_College.Common/HttpRestSharp/IRestSharp.cs create mode 100644 New_College.Common/HttpRestSharp/RestSharpClient.cs create mode 100644 New_College.Common/Hubs/ChatHub.cs create mode 100644 New_College.Common/Hubs/IChatClient.cs create mode 100644 New_College.Common/LogHelper/LogInfo.cs create mode 100644 New_College.Common/LogHelper/LogLock.cs create mode 100644 New_College.Common/LogHelper/RequestInfo.cs create mode 100644 New_College.Common/LogHelper/Seri/SerilogServer.cs create mode 100644 New_College.Common/MemoryCache/ICachingProvider.cs create mode 100644 New_College.Common/MemoryCache/MemoryCaching.cs create mode 100644 New_College.Common/New_College.Common.csproj create mode 100644 New_College.Common/Redis/IRedisCacheManager.cs create mode 100644 New_College.Common/Redis/RedisCacheManager.cs create mode 100644 New_College.ConsoleApp/New_College.ConsoleApp.csproj create mode 100644 New_College.ConsoleApp/Program.cs create mode 100644 New_College.Extensions/AOP/BlogCacheAOP.cs create mode 100644 New_College.Extensions/AOP/BlogLogAOP.cs create mode 100644 New_College.Extensions/AOP/BlogRedisCacheAOP.cs create mode 100644 New_College.Extensions/AOP/BlogTranAOP.cs create mode 100644 New_College.Extensions/AOP/BlogUserAuditAOP.cs create mode 100644 New_College.Extensions/AOP/CacheAOPbase.cs create mode 100644 New_College.Extensions/Authorizations/OverWrite/JwtHelper.cs create mode 100644 New_College.Extensions/Authorizations/OverWrite/JwtTokenAuth.cs create mode 100644 New_College.Extensions/Authorizations/Policys/ApiResponse.cs create mode 100644 New_College.Extensions/Authorizations/Policys/ApiResponseHandler.cs create mode 100644 New_College.Extensions/Authorizations/Policys/JwtToken.cs create mode 100644 New_College.Extensions/Authorizations/Policys/PermissionHandler.cs create mode 100644 New_College.Extensions/Authorizations/Policys/PermissionItem.cs create mode 100644 New_College.Extensions/Authorizations/Policys/PermissionRequirement.cs create mode 100644 New_College.Extensions/AutoMapper/AutoMapperConfig.cs create mode 100644 New_College.Extensions/AutoMapper/CustomProfile.cs create mode 100644 New_College.Extensions/Middlewares/AllServicesMildd.cs create mode 100644 New_College.Extensions/Middlewares/ConsulMildd.cs create mode 100644 New_College.Extensions/Middlewares/ExceptionHandlerMidd.cs create mode 100644 New_College.Extensions/Middlewares/IPLogMildd.cs create mode 100644 New_College.Extensions/Middlewares/IpLimitMildd.cs create mode 100644 New_College.Extensions/Middlewares/MiddlewareHelpers.cs create mode 100644 New_College.Extensions/Middlewares/QuartzJobMildd.cs create mode 100644 New_College.Extensions/Middlewares/RecordAccessLogsMildd.cs create mode 100644 New_College.Extensions/Middlewares/RequRespLogMildd.cs create mode 100644 New_College.Extensions/Middlewares/SeedDataMildd.cs create mode 100644 New_College.Extensions/Middlewares/SignalRSendMildd.cs create mode 100644 New_College.Extensions/Middlewares/SwaggerMildd.cs create mode 100644 New_College.Extensions/New_College.Extensions.csproj create mode 100644 New_College.Extensions/ServiceExtensions/AppConfigSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/Authentication_Ids4Setup.cs create mode 100644 New_College.Extensions/ServiceExtensions/Authentication_JWTSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/AuthorizationSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/AutoMapperSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/AutofacModuleRegister.cs create mode 100644 New_College.Extensions/ServiceExtensions/CorsSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/DbSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/HttpContextSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/IpPolicyRateLimitSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/JobSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/MemoryCacheSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/MiniProfilerSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/SqlsugarSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/SwaggerSetup.cs create mode 100644 New_College.Extensions/ServiceExtensions/WebApiClientSetup.cs create mode 100644 New_College.FrameWork/DbHelper.ttinclude create mode 100644 New_College.FrameWork/ModelAuto.ttinclude create mode 100644 New_College.FrameWork/New_College.FrameWork.Entity/New_College.FrameWork.tt create mode 100644 New_College.FrameWork/New_College.FrameWork.IRepository/New_College.FrameWork.IRepository.cs create mode 100644 New_College.FrameWork/New_College.FrameWork.IRepository/New_College.FrameWork.IRepository.tt create mode 100644 New_College.FrameWork/New_College.FrameWork.IServices/New_College.FrameWork.IServices.cs create mode 100644 New_College.FrameWork/New_College.FrameWork.IServices/New_College.FrameWork.IServices.tt create mode 100644 New_College.FrameWork/New_College.FrameWork.Repository/New_College.FrameWork.Repository.cs create mode 100644 New_College.FrameWork/New_College.FrameWork.Repository/New_College.FrameWork.Repository.tt create mode 100644 New_College.FrameWork/New_College.FrameWork.Services/New_College.FrameWork.Services.cs create mode 100644 New_College.FrameWork/New_College.FrameWork.Services/New_College.FrameWork.Services.tt create mode 100644 New_College.FrameWork/New_College.FrameWork.csproj create mode 100644 New_College.IServices/BASE/IBaseServices.cs create mode 100644 New_College.IServices/IAdvertisementServices.cs create mode 100644 New_College.IServices/IBlogArticleServices.cs create mode 100644 New_College.IServices/ID_EnrollmentinproductionServices.cs create mode 100644 New_College.IServices/ID_GraduateFlowServices.cs create mode 100644 New_College.IServices/ID_LongIdMapServices.cs create mode 100644 New_College.IServices/ID_MajorCategoryServices.cs create mode 100644 New_College.IServices/ID_MajorClassServices.cs create mode 100644 New_College.IServices/ID_MajorInformationServices.cs create mode 100644 New_College.IServices/ID_MajorMapOccouptionServices.cs create mode 100644 New_College.IServices/ID_MajorMapTagServices.cs create mode 100644 New_College.IServices/ID_MajorMapUniversityServices.cs create mode 100644 New_College.IServices/ID_MajorObtainServices.cs create mode 100644 New_College.IServices/ID_MajorSalaryServices.cs create mode 100644 New_College.IServices/ID_MajorServices.cs create mode 100644 New_College.IServices/ID_OccMapTagServices.cs create mode 100644 New_College.IServices/ID_OccupationCategoryServices.cs create mode 100644 New_College.IServices/ID_OccupationServices.cs create mode 100644 New_College.IServices/ID_UniversityCollectionServices.cs create mode 100644 New_College.IServices/ID_UniversityRankServices.cs create mode 100644 New_College.IServices/ID_UniversityServices.cs create mode 100644 New_College.IServices/ID_UniversityimgServices.cs create mode 100644 New_College.IServices/IGuestbookServices.cs create mode 100644 New_College.IServices/IModulePermissionServices.cs create mode 100644 New_College.IServices/IModuleServices.cs create mode 100644 New_College.IServices/IPasswordLibServices.cs create mode 100644 New_College.IServices/IPermissionServices.cs create mode 100644 New_College.IServices/IRoleModulePermissionServices.cs create mode 100644 New_College.IServices/IRoleServices.cs create mode 100644 New_College.IServices/ISysRegionServices.cs create mode 100644 New_College.IServices/IT_BatchTypeInfoServices.cs create mode 100644 New_College.IServices/IT_BatchlineServices.cs create mode 100644 New_College.IServices/IT_EnrollmentBatchServices.cs create mode 100644 New_College.IServices/IT_EnrollmentPlaneServices.cs create mode 100644 New_College.IServices/IT_EnrollmentPlanedescServices.cs create mode 100644 New_College.IServices/IT_GearInfoServices.cs create mode 100644 New_College.IServices/IT_LongIdMapServices.cs create mode 100644 New_College.IServices/IT_PlanMapTagServices.cs create mode 100644 New_College.IServices/IT_RegionScoreServices.cs create mode 100644 New_College.IServices/ITasksQzServices.cs create mode 100644 New_College.IServices/ITest_CategoryInfoServices.cs create mode 100644 New_College.IServices/ITest_CycleTimeInfoServices.cs create mode 100644 New_College.IServices/ITest_HollandResultInfoServices.cs create mode 100644 New_College.IServices/ITest_MBTIMapResultServices.cs create mode 100644 New_College.IServices/ITest_PsychMeasurementInfoServices.cs create mode 100644 New_College.IServices/ITest_QuestionInfoServices.cs create mode 100644 New_College.IServices/ITest_QuestionTypeInfoServices.cs create mode 100644 New_College.IServices/ITopicDetailServices.cs create mode 100644 New_College.IServices/ITopicServices.cs create mode 100644 New_College.IServices/IU_ProbabilityHistoryServices.cs create mode 100644 New_College.IServices/IU_VolunteerTableDetailServices.cs create mode 100644 New_College.IServices/IU_VolunteerTableServices.cs create mode 100644 New_College.IServices/IUserRoleServices.cs create mode 100644 New_College.IServices/IV_CustomerInfoServices.cs create mode 100644 New_College.IServices/IV_ExaminationPolicyServices.cs create mode 100644 New_College.IServices/IV_OrderInfoServices.cs create mode 100644 New_College.IServices/IV_SubjectSelectServices.cs create mode 100644 New_College.IServices/IV_VipCardInfoServices.cs create mode 100644 New_College.IServices/IV_VipCardTypeServices.cs create mode 100644 New_College.IServices/IsysUserInfoServices.cs create mode 100644 New_College.IServices/New_College.IServices.csproj create mode 100644 New_College.IServices/WebApiClients/DoubanApis/DoubanViewModel.cs create mode 100644 New_College.IServices/WebApiClients/DoubanApis/IDoubanApi.cs create mode 100644 New_College.IServices/WebApiClients/HttpApis/IBlogApi.cs create mode 100644 New_College.Model/Love.cs create mode 100644 New_College.Model/MessageModel.cs create mode 100644 New_College.Model/Models/Advertisement.cs create mode 100644 New_College.Model/Models/BannerInfo.cs create mode 100644 New_College.Model/Models/BlogArticle.cs create mode 100644 New_College.Model/Models/D_Enrollmentinproduction.cs create mode 100644 New_College.Model/Models/D_GraduateFlow.cs create mode 100644 New_College.Model/Models/D_LongIdMap.cs create mode 100644 New_College.Model/Models/D_Major.cs create mode 100644 New_College.Model/Models/D_MajorCategory.cs create mode 100644 New_College.Model/Models/D_MajorClass.cs create mode 100644 New_College.Model/Models/D_MajorInformation.cs create mode 100644 New_College.Model/Models/D_MajorMapOccouption.cs create mode 100644 New_College.Model/Models/D_MajorMapTag.cs create mode 100644 New_College.Model/Models/D_MajorMapUniversity.cs create mode 100644 New_College.Model/Models/D_MajorObtain.cs create mode 100644 New_College.Model/Models/D_MajorSalary.cs create mode 100644 New_College.Model/Models/D_OccMapTag.cs create mode 100644 New_College.Model/Models/D_Occupation.cs create mode 100644 New_College.Model/Models/D_OccupationCategory.cs create mode 100644 New_College.Model/Models/D_University.cs create mode 100644 New_College.Model/Models/D_UniversityCollection.cs create mode 100644 New_College.Model/Models/D_UniversityRank.cs create mode 100644 New_College.Model/Models/D_Universityimg.cs create mode 100644 New_College.Model/Models/Guestbook.cs create mode 100644 New_College.Model/Models/Module.cs create mode 100644 New_College.Model/Models/ModulePermission.cs create mode 100644 New_College.Model/Models/Modules.cs create mode 100644 New_College.Model/Models/N_AgentCourse.cs create mode 100644 New_College.Model/Models/N_MaterialLibrary.cs create mode 100644 New_College.Model/Models/OperateLog.cs create mode 100644 New_College.Model/Models/PasswordLib.cs create mode 100644 New_College.Model/Models/Permission.cs create mode 100644 New_College.Model/Models/Role.cs create mode 100644 New_College.Model/Models/RoleModulePermission.cs create mode 100644 New_College.Model/Models/RootEntity.cs create mode 100644 New_College.Model/Models/SysRegion.cs create mode 100644 New_College.Model/Models/T_BatchTypeInfo.cs create mode 100644 New_College.Model/Models/T_Batchline.cs create mode 100644 New_College.Model/Models/T_EnrollmentBatch.cs create mode 100644 New_College.Model/Models/T_EnrollmentPlane.cs create mode 100644 New_College.Model/Models/T_EnrollmentPlanedesc.cs create mode 100644 New_College.Model/Models/T_GearInfo.cs create mode 100644 New_College.Model/Models/T_LongIdMap.cs create mode 100644 New_College.Model/Models/T_PlanMapTag.cs create mode 100644 New_College.Model/Models/T_RegionScore.cs create mode 100644 New_College.Model/Models/TasksQz.cs create mode 100644 New_College.Model/Models/TestModels.cs create mode 100644 New_College.Model/Models/Test_CategoryInfo.cs create mode 100644 New_College.Model/Models/Test_CycleTimeInfo.cs create mode 100644 New_College.Model/Models/Test_HollandResultInfo.cs create mode 100644 New_College.Model/Models/Test_MBTIMapResult.cs create mode 100644 New_College.Model/Models/Test_PsychMeasurementInfo.cs create mode 100644 New_College.Model/Models/Test_QuestionInfo.cs create mode 100644 New_College.Model/Models/Test_QuestionTypeInfo.cs create mode 100644 New_College.Model/Models/Topic.cs create mode 100644 New_College.Model/Models/TopicDetail.cs create mode 100644 New_College.Model/Models/U_ProbabilityHistory.cs create mode 100644 New_College.Model/Models/U_VolunteerTable.cs create mode 100644 New_College.Model/Models/U_VolunteerTableDetail.cs create mode 100644 New_College.Model/Models/UserRole.cs create mode 100644 New_College.Model/Models/V_CustomerInfo.cs create mode 100644 New_College.Model/Models/V_ExaminationPolicy.cs create mode 100644 New_College.Model/Models/V_OrderInfo.cs create mode 100644 New_College.Model/Models/V_SubjectSelect.cs create mode 100644 New_College.Model/Models/V_VipCardInfo.cs create mode 100644 New_College.Model/Models/V_VipCardType.cs create mode 100644 New_College.Model/Models/sysUserInfo.cs create mode 100644 New_College.Model/New_College.Model.csproj create mode 100644 New_College.Model/PageModel.cs create mode 100644 New_College.Model/Request/DecryptUserInfoRequest.cs create mode 100644 New_College.Model/Request/LoginQuery.cs create mode 100644 New_College.Model/Request/WeixinLogin.cs create mode 100644 New_College.Model/ResponseEnum.cs create mode 100644 New_College.Model/Seed/DBSeed.cs create mode 100644 New_College.Model/Seed/FrameSeed.cs create mode 100644 New_College.Model/Seed/MyContext.cs create mode 100644 New_College.Model/TableModel.cs create mode 100644 New_College.Model/ViewModels/AdvertisementViewModels.cs create mode 100644 New_College.Model/ViewModels/AliyunSmsSenderConfig.cs create mode 100644 New_College.Model/ViewModels/BaseQuery.cs create mode 100644 New_College.Model/ViewModels/BaseResult.cs create mode 100644 New_College.Model/ViewModels/BlogViewModels.cs create mode 100644 New_College.Model/ViewModels/GuestbookViewModels.cs create mode 100644 New_College.Model/ViewModels/LoginInfoViewModels.cs create mode 100644 New_College.Model/ViewModels/ModuleViewModels.cs create mode 100644 New_College.Model/ViewModels/Query/AliPayQuery.cs create mode 100644 New_College.Model/ViewModels/Query/BatchQuery.cs create mode 100644 New_College.Model/ViewModels/Query/CategoryInfoQuery.cs create mode 100644 New_College.Model/ViewModels/Query/CustomerInfoQuery.cs create mode 100644 New_College.Model/ViewModels/Query/ExaminationPolicyQuery.cs create mode 100644 New_College.Model/ViewModels/Query/MajorQuery.cs create mode 100644 New_College.Model/ViewModels/Query/MajorSalaryQuery.cs create mode 100644 New_College.Model/ViewModels/Query/MajorcategoryQuery.cs create mode 100644 New_College.Model/ViewModels/Query/OccupationQuery.cs create mode 100644 New_College.Model/ViewModels/Query/OrderInfoQuery.cs create mode 100644 New_College.Model/ViewModels/Query/OrderQuery.cs create mode 100644 New_College.Model/ViewModels/Query/PlanDetailQuery.cs create mode 100644 New_College.Model/ViewModels/Query/PlanQuery.cs create mode 100644 New_College.Model/ViewModels/Query/ProbabilityQuery.cs create mode 100644 New_College.Model/ViewModels/Query/PsychMeasurementQuery.cs create mode 100644 New_College.Model/ViewModels/Query/RecommendUniversityQuery.cs create mode 100644 New_College.Model/ViewModels/Query/SubjectSelectQuery.cs create mode 100644 New_College.Model/ViewModels/Query/SysRegionQuery.cs create mode 100644 New_College.Model/ViewModels/Query/TagEnrollmentPlaneQuery.cs create mode 100644 New_College.Model/ViewModels/Query/TestQuery.cs create mode 100644 New_College.Model/ViewModels/Query/UniOrderQuery.cs create mode 100644 New_College.Model/ViewModels/Query/UniversityCollectionQuery.cs create mode 100644 New_College.Model/ViewModels/Query/UniversityQuery.cs create mode 100644 New_College.Model/ViewModels/Query/VipCardInfoQuery.cs create mode 100644 New_College.Model/ViewModels/Query/VipCardQuery.cs create mode 100644 New_College.Model/ViewModels/Query/VipCardTypeQuery.cs create mode 100644 New_College.Model/ViewModels/Query/VolunteerTableQuery.cs create mode 100644 New_College.Model/ViewModels/Query/WeChatPayQuery.cs create mode 100644 New_College.Model/ViewModels/Query/appQuestionQuery.cs create mode 100644 New_College.Model/ViewModels/Result/AliPayOrderResponse.cs create mode 100644 New_College.Model/ViewModels/Result/AliPayResult.cs create mode 100644 New_College.Model/ViewModels/Result/CategoryInfoResult.cs create mode 100644 New_College.Model/ViewModels/Result/CreateOrderModel.cs create mode 100644 New_College.Model/ViewModels/Result/CustomerInfoResult.cs create mode 100644 New_College.Model/ViewModels/Result/CycleInfoResult.cs create mode 100644 New_College.Model/ViewModels/Result/EnrollmentinproductionResult.cs create mode 100644 New_College.Model/ViewModels/Result/ExaminationPolicyResult.cs create mode 100644 New_College.Model/ViewModels/Result/MBTICalcModel.cs create mode 100644 New_College.Model/ViewModels/Result/MajorPlanResult.cs create mode 100644 New_College.Model/ViewModels/Result/MajorResult.cs create mode 100644 New_College.Model/ViewModels/Result/MajorSalaryResult.cs create mode 100644 New_College.Model/ViewModels/Result/OccupationResult.cs create mode 100644 New_College.Model/ViewModels/Result/OrderResult.cs create mode 100644 New_College.Model/ViewModels/Result/ProbabilityResult.cs create mode 100644 New_College.Model/ViewModels/Result/PsychMeasurementListResult.cs create mode 100644 New_College.Model/ViewModels/Result/SubjectSelectResult.cs create mode 100644 New_College.Model/ViewModels/Result/SysRegionResult.cs create mode 100644 New_College.Model/ViewModels/Result/UniversityCollectionResult.cs create mode 100644 New_College.Model/ViewModels/Result/UniversityResult.cs create mode 100644 New_College.Model/ViewModels/Result/VipCardInfoResult.cs create mode 100644 New_College.Model/ViewModels/Result/VipCardTypeResult.cs create mode 100644 New_College.Model/ViewModels/Result/VipInfoResult.cs create mode 100644 New_College.Model/ViewModels/Result/VolunteerResult.cs create mode 100644 New_College.Model/ViewModels/Result/VolunteerTableResult.cs create mode 100644 New_College.Model/ViewModels/Result/WeChatPayResult.cs create mode 100644 New_College.Model/ViewModels/Result/WeixinPayRespose.cs create mode 100644 New_College.Model/ViewModels/Result/WeixinPayResult.cs create mode 100644 New_College.Model/ViewModels/Result/appQuestionResult.cs create mode 100644 New_College.Model/ViewModels/Result/uniMajorSecond.cs create mode 100644 New_College.Model/ViewModels/ServerViewModel.cs create mode 100644 New_College.Model/ViewModels/SidebarMenuViewModel.cs create mode 100644 New_College.Model/ViewModels/TestRestSharpGetDto.cs create mode 100644 New_College.Model/ViewModels/TestRestSharpPostDto.cs create mode 100644 New_College.Model/ViewModels/TokenInfoViewModel.cs create mode 100644 New_College.Model/ViewModels/TopgbViewModels.cs create mode 100644 New_College.Model/WeixinAuthInfo.cs create mode 100644 New_College.Model/WeixinResult.cs create mode 100644 New_College.Publish.Docker.sh create mode 100644 New_College.Publish.Linux.sh create mode 100644 New_College.Publish.bat create mode 100644 New_College.Repository/BASE/BaseRepository.cs create mode 100644 New_College.Repository/BASE/D_EnrollmentinproductionRepository.cs create mode 100644 New_College.Repository/BASE/D_GraduateFlowRepository.cs create mode 100644 New_College.Repository/BASE/D_LongIdMapRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorCategoryRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorClassRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorInformationRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorMapOccouptionRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorMapTagRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorMapUniversityRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorObtainRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorRepository.cs create mode 100644 New_College.Repository/BASE/D_MajorSalaryRepository.cs create mode 100644 New_College.Repository/BASE/D_OccMapTagRepository.cs create mode 100644 New_College.Repository/BASE/D_OccupationCategoryRepository.cs create mode 100644 New_College.Repository/BASE/D_OccupationRepository.cs create mode 100644 New_College.Repository/BASE/D_UniversityCollectionRepository.cs create mode 100644 New_College.Repository/BASE/D_UniversityRankRepository.cs create mode 100644 New_College.Repository/BASE/D_UniversityRepository.cs create mode 100644 New_College.Repository/BASE/D_UniversityimgRepository.cs create mode 100644 New_College.Repository/BASE/IBaseRepository.cs create mode 100644 New_College.Repository/BASE/ID_EnrollmentinproductionRepository.cs create mode 100644 New_College.Repository/BASE/ID_GraduateFlowRepository.cs create mode 100644 New_College.Repository/BASE/ID_LongIdMapRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorCategoryRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorClassRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorInformationRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorMapOccouptionRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorMapTagRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorMapUniversityRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorObtainRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorRepository.cs create mode 100644 New_College.Repository/BASE/ID_MajorSalaryRepository.cs create mode 100644 New_College.Repository/BASE/ID_OccMapTagRepository.cs create mode 100644 New_College.Repository/BASE/ID_OccupationCategoryRepository.cs create mode 100644 New_College.Repository/BASE/ID_OccupationRepository.cs create mode 100644 New_College.Repository/BASE/ID_UniversityCollectionRepository.cs create mode 100644 New_College.Repository/BASE/ID_UniversityRankRepository.cs create mode 100644 New_College.Repository/BASE/ID_UniversityRepository.cs create mode 100644 New_College.Repository/BASE/ID_UniversityimgRepository.cs create mode 100644 New_College.Repository/BASE/ISysRegionRepository.cs create mode 100644 New_College.Repository/BASE/IT_BatchTypeInfoRepository.cs create mode 100644 New_College.Repository/BASE/IT_BatchlineRepository.cs create mode 100644 New_College.Repository/BASE/IT_EnrollmentBatchRepository.cs create mode 100644 New_College.Repository/BASE/IT_EnrollmentPlaneRepository.cs create mode 100644 New_College.Repository/BASE/IT_EnrollmentPlanedescRepository.cs create mode 100644 New_College.Repository/BASE/IT_GearInfoRepository.cs create mode 100644 New_College.Repository/BASE/IT_LongIdMapRepository.cs create mode 100644 New_College.Repository/BASE/IT_PlanMapTagRepository.cs create mode 100644 New_College.Repository/BASE/IT_RegionScoreRepository.cs create mode 100644 New_College.Repository/BASE/ITest_CategoryInfoRepository.cs create mode 100644 New_College.Repository/BASE/ITest_CycleTimeInfoRepository.cs create mode 100644 New_College.Repository/BASE/ITest_HollandResultInfoRepository.cs create mode 100644 New_College.Repository/BASE/ITest_MBTIMapResultRepository.cs create mode 100644 New_College.Repository/BASE/ITest_PsychMeasurementInfoRepository.cs create mode 100644 New_College.Repository/BASE/ITest_QuestionInfoRepository.cs create mode 100644 New_College.Repository/BASE/ITest_QuestionTypeInfoRepository.cs create mode 100644 New_College.Repository/BASE/IU_ProbabilityHistoryRepository.cs create mode 100644 New_College.Repository/BASE/IU_VolunteerTableDetailRepository.cs create mode 100644 New_College.Repository/BASE/IU_VolunteerTableRepository.cs create mode 100644 New_College.Repository/BASE/IV_CustomerInfoRepository.cs create mode 100644 New_College.Repository/BASE/IV_ExaminationPolicyRepository.cs create mode 100644 New_College.Repository/BASE/IV_OrderInfoRepository.cs create mode 100644 New_College.Repository/BASE/IV_SubjectSelectRepository.cs create mode 100644 New_College.Repository/BASE/IV_VipCardInfoRepository.cs create mode 100644 New_College.Repository/BASE/IV_VipCardTypeRepository.cs create mode 100644 New_College.Repository/BASE/SysRegionRepository.cs create mode 100644 New_College.Repository/BASE/T_BatchTypeInfoRepository.cs create mode 100644 New_College.Repository/BASE/T_BatchlineRepository.cs create mode 100644 New_College.Repository/BASE/T_EnrollmentBatchRepository.cs create mode 100644 New_College.Repository/BASE/T_EnrollmentPlaneRepository.cs create mode 100644 New_College.Repository/BASE/T_EnrollmentPlanedescRepository.cs create mode 100644 New_College.Repository/BASE/T_GearInfoRepository.cs create mode 100644 New_College.Repository/BASE/T_LongIdMapRepository.cs create mode 100644 New_College.Repository/BASE/T_PlanMapTagRepository.cs create mode 100644 New_College.Repository/BASE/T_RegionScoreRepository.cs create mode 100644 New_College.Repository/BASE/Test_CategoryInfoRepository.cs create mode 100644 New_College.Repository/BASE/Test_CycleTimeInfoRepository.cs create mode 100644 New_College.Repository/BASE/Test_HollandResultInfoRepository.cs create mode 100644 New_College.Repository/BASE/Test_MBTIMapResultRepository.cs create mode 100644 New_College.Repository/BASE/Test_PsychMeasurementInfoRepository.cs create mode 100644 New_College.Repository/BASE/Test_QuestionInfoRepository.cs create mode 100644 New_College.Repository/BASE/Test_QuestionTypeInfoRepository.cs create mode 100644 New_College.Repository/BASE/U_ProbabilityHistoryRepository.cs create mode 100644 New_College.Repository/BASE/U_VolunteerTableDetailRepository.cs create mode 100644 New_College.Repository/BASE/U_VolunteerTableRepository.cs create mode 100644 New_College.Repository/BASE/V_CustomerInfoRepository.cs create mode 100644 New_College.Repository/BASE/V_ExaminationPolicyRepository.cs create mode 100644 New_College.Repository/BASE/V_OrderInfoRepository.cs create mode 100644 New_College.Repository/BASE/V_SubjectSelectRepository.cs create mode 100644 New_College.Repository/BASE/V_VipCardInfoRepository.cs create mode 100644 New_College.Repository/BASE/V_VipCardTypeRepository.cs create mode 100644 New_College.Repository/IRoleModulePermissionRepository.cs create mode 100644 New_College.Repository/New_College.Repository.csproj create mode 100644 New_College.Repository/RoleModulePermissionRepository.cs create mode 100644 New_College.Repository/UnitOfWork/IUnitOfWork.cs create mode 100644 New_College.Repository/UnitOfWork/UnitOfWork.cs create mode 100644 New_College.Services/AdvertisementServices.cs create mode 100644 New_College.Services/BASE/BaseServices.cs create mode 100644 New_College.Services/BlogArticleServices.cs create mode 100644 New_College.Services/D_EnrollmentinproductionServices.cs create mode 100644 New_College.Services/D_GraduateFlowServices.cs create mode 100644 New_College.Services/D_LongIdMapServices.cs create mode 100644 New_College.Services/D_MajorCategoryServices.cs create mode 100644 New_College.Services/D_MajorClassServices.cs create mode 100644 New_College.Services/D_MajorInformationServices.cs create mode 100644 New_College.Services/D_MajorMapOccouptionServices.cs create mode 100644 New_College.Services/D_MajorMapTagServices.cs create mode 100644 New_College.Services/D_MajorMapUniversityServices.cs create mode 100644 New_College.Services/D_MajorObtainServices.cs create mode 100644 New_College.Services/D_MajorSalaryServices.cs create mode 100644 New_College.Services/D_MajorServices.cs create mode 100644 New_College.Services/D_OccMapTagServices.cs create mode 100644 New_College.Services/D_OccupationCategoryServices.cs create mode 100644 New_College.Services/D_OccupationServices.cs create mode 100644 New_College.Services/D_UniversityCollectionServices.cs create mode 100644 New_College.Services/D_UniversityRankServices.cs create mode 100644 New_College.Services/D_UniversityServices.cs create mode 100644 New_College.Services/D_UniversityimgServices.cs create mode 100644 New_College.Services/GuestbookServices.cs create mode 100644 New_College.Services/ModulePermissionServices.cs create mode 100644 New_College.Services/ModuleServices.cs create mode 100644 New_College.Services/New_College.Services.csproj create mode 100644 New_College.Services/PasswordLibServices.cs create mode 100644 New_College.Services/PermissionServices.cs create mode 100644 New_College.Services/RoleModulePermissionServices.cs create mode 100644 New_College.Services/RoleServices.cs create mode 100644 New_College.Services/SysRegionServices.cs create mode 100644 New_College.Services/T_BatchTypeInfoServices.cs create mode 100644 New_College.Services/T_BatchlineServices.cs create mode 100644 New_College.Services/T_EnrollmentBatchServices.cs create mode 100644 New_College.Services/T_EnrollmentPlaneServices.cs create mode 100644 New_College.Services/T_EnrollmentPlanedescServices.cs create mode 100644 New_College.Services/T_GearInfoServices.cs create mode 100644 New_College.Services/T_LongIdMapServices.cs create mode 100644 New_College.Services/T_PlanMapTagServices.cs create mode 100644 New_College.Services/T_RegionScoreServices.cs create mode 100644 New_College.Services/TasksQzServices.cs create mode 100644 New_College.Services/Test_CategoryInfoServices.cs create mode 100644 New_College.Services/Test_CycleTimeInfoServices.cs create mode 100644 New_College.Services/Test_HollandResultInfoServices.cs create mode 100644 New_College.Services/Test_MBTIMapResultServices.cs create mode 100644 New_College.Services/Test_PsychMeasurementInfoServices.cs create mode 100644 New_College.Services/Test_QuestionInfoServices.cs create mode 100644 New_College.Services/Test_QuestionTypeInfoServices.cs create mode 100644 New_College.Services/TopicDetailServices.cs create mode 100644 New_College.Services/TopicServices.cs create mode 100644 New_College.Services/U_ProbabilityHistoryServices.cs create mode 100644 New_College.Services/U_VolunteerTableDetailServices.cs create mode 100644 New_College.Services/U_VolunteerTableServices.cs create mode 100644 New_College.Services/UserRoleServices.cs create mode 100644 New_College.Services/V_CustomerInfoServices.cs create mode 100644 New_College.Services/V_ExaminationPolicyServices.cs create mode 100644 New_College.Services/V_OrderInfoServices.cs create mode 100644 New_College.Services/V_SubjectSelectServices.cs create mode 100644 New_College.Services/V_VipCardInfoServices.cs create mode 100644 New_College.Services/V_VipCardTypeServices.cs create mode 100644 New_College.Services/sysUserInfoServices.cs create mode 100644 New_College.System.Architecture.png create mode 100644 New_College.Tasks/HostedService/Job1TimedService.cs create mode 100644 New_College.Tasks/HostedService/Job2TimedService.cs create mode 100644 New_College.Tasks/New_College.Tasks.csproj create mode 100644 New_College.Tasks/QuartzNet/ISchedulerCenter.cs create mode 100644 New_College.Tasks/QuartzNet/JobFactory.cs create mode 100644 New_College.Tasks/QuartzNet/Jobs/JobBase.cs create mode 100644 New_College.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs create mode 100644 New_College.Tasks/QuartzNet/SchedulerCenterServer.cs create mode 100644 New_College.Tests/Controller_Test/BlogController_Should.cs create mode 100644 New_College.Tests/Controller_Test/LoginController_Should.cs create mode 100644 New_College.Tests/DependencyInjection/DI_Test.cs create mode 100644 New_College.Tests/New_College.Tests.csproj create mode 100644 New_College.Tests/Redis_Test/Redis_Should.cs create mode 100644 New_College.Tests/Repository_Test/Repository_Base_Should.cs create mode 100644 New_College.Tests/Service_Test/BlogArticleService_Should.cs create mode 100644 New_College.Tests/appsettings.json create mode 100644 New_College.sln create mode 100644 PaymentSDK/AliPay/AliPayConfig.cs create mode 100644 PaymentSDK/AliPay/AliPayHelper.cs create mode 100644 PaymentSDK/AliPay/AlipayConstants.cs create mode 100644 PaymentSDK/AliPay/AlipayMobilePublicMultiMediaClient.cs create mode 100644 PaymentSDK/AliPay/AlipayMobilePublicMultiMediaDownloadRequest.cs create mode 100644 PaymentSDK/AliPay/AlipayMobilePublicMultiMediaDownloadResponse.cs create mode 100644 PaymentSDK/AliPay/AlipayOpenAppAlipaycertDownloadRequest.cs create mode 100644 PaymentSDK/AliPay/AlipayOpenAppAlipaycertDownloadResponse.cs create mode 100644 PaymentSDK/AliPay/AopDictionary.cs create mode 100644 PaymentSDK/AliPay/AopException.cs create mode 100644 PaymentSDK/AliPay/AopObject.cs create mode 100644 PaymentSDK/AliPay/AopResponse.cs create mode 100644 PaymentSDK/AliPay/CertParams.cs create mode 100644 PaymentSDK/AliPay/DefaultAopClient.cs create mode 100644 PaymentSDK/AliPay/Domain/AOIinfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AbilityResourceBizMark.cs create mode 100644 PaymentSDK/AliPay/Domain/AbilityResourceConsume.cs create mode 100644 PaymentSDK/AliPay/Domain/AccDetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AccPayeeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AccTransDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessOrdersFeedBack.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessOrdersFeedBackResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessParams.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessProduceOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessProduceQrcode.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessPurchaseOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessPurchaseOrderSend.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessPurchaseOrderSendResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessReturnQrcode.cs create mode 100644 PaymentSDK/AliPay/Domain/AccessReturnQrcodeResult.cs create mode 100644 PaymentSDK/AliPay/Domain/Account.cs create mode 100644 PaymentSDK/AliPay/Domain/AccountFreeze.cs create mode 100644 PaymentSDK/AliPay/Domain/AccountLogItemResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AccountRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/ActionProperty.cs create mode 100644 PaymentSDK/AliPay/Domain/Activity.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityAuditDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityCopyResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityLimitationDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityOrderDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityPlanInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityQueryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityRuleDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityShop.cs create mode 100644 PaymentSDK/AliPay/Domain/ActivityStat.cs create mode 100644 PaymentSDK/AliPay/Domain/AdCreative.cs create mode 100644 PaymentSDK/AliPay/Domain/AdCreativeResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AdGroup.cs create mode 100644 PaymentSDK/AliPay/Domain/AdMaterial.cs create mode 100644 PaymentSDK/AliPay/Domain/AdMaterialInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AdMaterialResultDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/AdPlan.cs create mode 100644 PaymentSDK/AliPay/Domain/AdUser.cs create mode 100644 PaymentSDK/AliPay/Domain/AdUserQualification.cs create mode 100644 PaymentSDK/AliPay/Domain/AddPlanGroupResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AddTagRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/AddTagResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/AddTagResult.cs create mode 100644 PaymentSDK/AliPay/Domain/Address.cs create mode 100644 PaymentSDK/AliPay/Domain/AddressDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/AddressInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AddressInfoKt.cs create mode 100644 PaymentSDK/AliPay/Domain/Addresscomponent.cs create mode 100644 PaymentSDK/AliPay/Domain/AdvanceOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/Advert.cs create mode 100644 PaymentSDK/AliPay/Domain/AdvertItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AdviceVO.cs create mode 100644 PaymentSDK/AliPay/Domain/AestheticData.cs create mode 100644 PaymentSDK/AliPay/Domain/AftAifinFireeyeOcrImageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AftFinsecureRiskplusSecurityPolicyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AgentOrganization.cs create mode 100644 PaymentSDK/AliPay/Domain/Agreement.cs create mode 100644 PaymentSDK/AliPay/Domain/AgreementParams.cs create mode 100644 PaymentSDK/AliPay/Domain/AgreementSignParams.cs create mode 100644 PaymentSDK/AliPay/Domain/AiOcrTableContext.cs create mode 100644 PaymentSDK/AliPay/Domain/AiOcrTableRow.cs create mode 100644 PaymentSDK/AliPay/Domain/AlgorithmGoodsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AliTrustAlipayCert.cs create mode 100644 PaymentSDK/AliPay/Domain/AliTrustCert.cs create mode 100644 PaymentSDK/AliPay/Domain/AliTrustRiskIdentify.cs create mode 100644 PaymentSDK/AliPay/Domain/AliTrustScore.cs create mode 100644 PaymentSDK/AliPay/Domain/AliosOpenAutoInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipassInstanceOpInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccount.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolAccountBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolAllocateruleCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolAllocaterulePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolBasicQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolRuleModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolRulegroupCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolRulegroupModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountCashpoolStatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountClearingcenterPayoffModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountClearingcenterPayoffQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExrateAdviceAcceptModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExrateAllclientrateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExrateCollectcoreDataSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExratePricingNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExrateRateSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExrateRatequeryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExrateSentimentDataSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExrateSourcerateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountExrateTraderequestCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountFinriskCompanyVerifyCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountFinriskCompanyVerifyGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountFinriskGiriskrequestCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountFinriskInstriskmonitorKeywordsBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountFinriskMarkriskDatafactorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAccountInstfundAccountSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetCardDisburseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetCardNewtemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetCardReturnRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetCardTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointAccountlogQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointPointprodBudgetlibAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointPointprodBudgetlibCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointPointprodBudgetlibModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointPointprodBudgetlibQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointPointprodBudgetlibReturnModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetPointPointprodPointlibQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayAssetVoucherprodChargeSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossBaseProcessInstanceCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossBaseProcessInstanceCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossBaseProcessInstanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossBaseProcessSignVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossBaseProcessTaskProcessModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossContractManagementCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossContractManagementCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossContractManagementIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossContractManagementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossCsChannelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossCsCssocialYqmessageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossCsDatacollectSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncApbillBillcustviewBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncApbillCustviewBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncApbillTotalbillamtQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncApinvoiceBatchAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncApinvoiceRcptQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncArbillMonthstatementbillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncGfacceptanceBillAcceptModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncGfacceptanceBillReverseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncGfacceptanceDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvmodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoiceApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoiceBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoiceLinkamtBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoiceMailinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoiceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoiceStatementbillApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoicereceiptBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoicereceiptCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncInvoicreceiptQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncPidUnwriteoffQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncPriceAutoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncPriceTaskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncSettleCaptureCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncSettleReceivableConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncSettleSettlementbillCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncSubaccountAccountApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncSubaccountAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncSubaccountBalanceFreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncUserinvoiceinfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncUserinvoiceinfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncUserinvoiceinfoOuQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossFncUserinvoiceinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossOrderApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossOrderDiagnosisGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossProdAntlawManualfileUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossProdAntlawOrderhitstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossProdAntlawSmartcontractcodeModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossProdAntlegalchainNotaryprocsumQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossProdAntlegalchainOrderApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossProdElecsealOrderApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossProdMyTestQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBossProdSubaccountBalanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessItemExternalSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessItemInventoryExternalSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessOrderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessOrderConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessOrderPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessOrderRefundQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessPaymenthubCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessPaymenthubDisburseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessPaymenthubPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessPaymenthubQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayBusinessPaymenthubRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayChinareModelResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCodeRecoResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAirCallcenterTradeApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAirXfgDsgModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAlideviceinfoOfflinecodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAntestAppversionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAntestCaselistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAntestMockgrouplistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAntestReportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAntestTaskCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAntestTaskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAntestTaskstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceAppPageUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceBusinessorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorDepositCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorDepositConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorDepositQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorFunctionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorScriptQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorStationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorVoucherBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorVoucherCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorVoucherConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorVoucherGenerateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorVoucherQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorVoucherRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceCityfacilitatorVoucherUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceDataCampaignCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceDataCampaignSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceDataCustommetricSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceDataLogdataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceDataMonitordataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceDataMonitordeviceQualitycenterModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceDataResultSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceDataSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateAuthenticateCampuscardCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateAuthenticateCampuscardDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateAuthenticateCampuscardModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateCampusCardUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateCampuscardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateFacefeatureDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateFacefeatureFileApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateFacefeatureGroupkeyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateFacefeatureInfoSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateFacefeatureReportUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateFacepayApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateFacepayCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateLocalfaceCompareSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateNceeApplySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateParttimejobInfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateSceneKidsCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateSceneTokenCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateSchoolcodeTokenCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateSignTokenQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateStudentIdentityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateStudyAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateTrainGroupsAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateTrainRecommendQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateTrainStagecaterelationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceEducateUserClickCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceFixTaskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceFixTaskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceFixTaskproblemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceFixTaskremarkCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAccountbindingCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAccountbindingDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserAdBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserAdCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserAdCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserAdModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserAdQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserDeviceConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserDeviceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserMaterialBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotAdvertiserMaterialQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotApplyorderStatusSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDapplyDevicetradestatlistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDapplyOrderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDapplyOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDapplyOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDapplyOrderdeviceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDapplyRefundConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDapplyRefundCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceAddressQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceAudioCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceAudioDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceAudioQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceAudioSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceAudioSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceBroadcastQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceGeofenceBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceGeofenceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceGeofenceSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceLocationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDevicePersonalinfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceTraceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDevicelistCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotDeviceserviceCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotGroupBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotGroupCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotGroupDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotGroupMemberAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotGroupMemberBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotGroupMemberDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotGroupModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodAssetQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodAssetapplyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodBehaviorlogBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodDeviceBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodDeviceInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodDeviceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodDeviceUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodDevicelogUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodShopCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodTradeBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMdeviceprodWhitelistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotModelModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotModellistCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotMsgcenterSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotNetflowInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotOrderPrintSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotProfileSnBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotReceiptDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotReceiptSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotSdarttoolMessageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotSdarttoolMessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotSdarttoolPrintSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotSnApplyBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotSnCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotSupplierAssetBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotSupplierAssetCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotSupplierAssetModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotWifiResultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotWifiSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceIotWifiStatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceKidsAccountBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceKidsAccountConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceKidsAccountCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceKidsAccountModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceKidsAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceKidsMsgSceneSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceKidsTokenCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceLogisticsFaceMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceLogisticsPkgauthrelationAuthtomeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceLogisticsUserOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceLogisticsWaybillMinimctSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceLotteryPresentSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceLotteryPresentlistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceMedicalCardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceMedicalInformationUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceMedicalInstcardBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceMedicalInstcardCreateandpayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceOperationContentApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceOperationContentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTradeApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdAduserqualificationBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdAduserqualificationCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdCreativeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdCreativeOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdCreativeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdPlanCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdPlanCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdPlanGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdPlanOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdStocktaskBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdStocktaskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdStocktaskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdStocktaskresultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdUserCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportAdUserMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportEtcApplySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportEtcBindModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportEtcEcodataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportEtcMediaGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportEtcTripSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportIndustryProxyUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportIntelligentizeDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportMessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportNfccardSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportOfflinepayRecordVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportOfflinepayTradeSettleModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportOfflinepayUserblacklistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportOfflinepayVirtualcardBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportOfflinepayVirtualcardSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportOilproductInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportParkingGoodsCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportParkingGoodsModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportParkingGoodsOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportParkingGoodsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportParkingReserveConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportTaxiDriverSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportTaxiDriverlevelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerBizruleMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerBlacklistSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerCampaignModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerCampaignOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerCampaignOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerCampaignPublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerCampaignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerCampaignauditQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerMessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerSettlementApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerSettlementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerSettlementRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportVehicleownerTransdataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportWorldCarddataApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportWorldCardscriptQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportWorldVirtualcardApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCommerceTransportWorldVirtualcardBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayContract.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCreditAutofinanceDataBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCreditAutofinanceLoanApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCreditAutofinanceLoanCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCreditAutofinanceLoanPlanQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCreditAutofinanceVidGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayCreditCreditriskDataPutModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiOrderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiOrderConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiOrderModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiOrderRefuseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiOrderSpModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiOrderTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiServiceModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiSpModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiSpScheduleModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDaoweiWeikeTaskviewQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusAvailableQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusHistorygeoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusMetrodetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusMetroodQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusMetrotimeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusOdGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusOridestodGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusPredictbuslineRetryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusPredictbuslineSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusPredictresultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusResourceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusResourceUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusSchedualconfigGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusSchedualconfigSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusSchedualtaskAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusSchedualtaskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusSchedualtasktimeAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusSchedualtasktimeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusScheduletasklistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusScheduletaskodAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusScheduletaskodQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusScheduletaskshiftAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusScheduletaskshiftQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusScheduletriptimeGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusTimeodGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusTotalodQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceCloudbusTransitorridorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceHellobikeSiteQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceHellobikeSiteSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceJunengLoanQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiservicePriceoptimizerConfigSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiservicePriceoptimizerDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiservicePriceoptimizerGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceSgxGatewayQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceSmartpriceGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataAiserviceSmartpriceMerchanteffectQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillAccountbookereceiptApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillAccountbookereceiptQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillAccountlogQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillBailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillBalancehisQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillBuyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillEreceiptApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillEreceiptQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillSellQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillTransferQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataBillTransferaccountbookQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataexchangeDtmorseSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataexchangeDtmorsepordSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataexchangeSfasdfModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdCreativeBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdCreativeCreateormodifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdCreativeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdDataQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdGroupCreateormodifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdGroupQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdPlanCreateormodifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdPlanQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdPrincipalCheckavailableModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdPrincipalConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdPrincipalCreateormodifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdPrincipalQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdPromotepageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdPromotepagestatisticQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdUserCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdUserbalanceOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAdUserbalanceOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAntdataassetsClearnodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAntdataassetsCloudjobstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAntdataassetsFixdataCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAntdataassetsOdpscolumnQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAntdataassetsPublishtaskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAntdataassetsUploadjobCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceAntlbsCrowdMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceBillDingstaffbizorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceBillDownloadurlQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceChinaremodelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceCodeRecoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceConsumIndexQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceConsumRatioQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceDatabusSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceDeployorderDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceDeployorderResultSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceDmpserviceCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceHellobikeLogSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceHolographicFactorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceIcrowdUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataservicePropertyBusinesspropertyBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataservicePropertyBusinesspropertyCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataservicePropertyBusinesspropertyModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceShoppingmallrecShopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceShoppingmallrecShopandvoucherQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceShoppingmallrecVoucherQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceUserlevelZrankGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceVerificationResultSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceYuebaoassetDetailSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDataserviceYuebaolqdDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataDingMessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataAnomalydetectionBaiVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataBaiCargocountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataBusinessPointCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataBusinessPointQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataDataDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataDataTotalQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataImageaestheticBaiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataPointDeviceBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataPointDeviceUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataSearchlibraryBaiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataSearchlibraryBaiUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataIotdataTextdifferenceBaiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataItemDescription.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataItemGoodsList.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataItemLimitPeriodInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataItemSalesRule.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataItemVoucherTemplete.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataPrinterBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataPrinterStatusGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataPrinterTaskCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataPrinterTaskSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataPrinterTasksCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataPrinterTokenGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataPrinterUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataRiskRtopobtsregQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataServiceResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataSoundSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayDataZbdmLineageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppBillRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppCommonBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppCommonBillkeyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppCommonNotifySendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppDetectCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppDetectReportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppEbppConfirmpayurlTestQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppEbppPdeductCzsignUpgradeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppFacepayBillCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppFacepayBillPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppFacepayBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppFlowModeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppFlowQualificationDetectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppFlowStatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryAntforestEventSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryApplyflowQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryBillNettingRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryBizinfoApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryBizinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryGovHealthcodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryGovHealthcodeVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryKmsPubkeyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIndustryOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInspectCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInspectNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInstserviceDeductConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInstserviceDeductConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInstserviceDeductQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInstserviceDeductSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInstserviceDeductUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInstserviceIdentityInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInstserviceMessageNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInstserviceOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceApplyResultSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceApplystatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceAuthSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceAuthUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceCompanyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceCompanySubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceDetailOutputQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceEinvpackageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceExpenseProgressSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceFileOutputQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceFileQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceFileSyncRetryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceFinancialBlockchainBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceInfoApplyidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceInfoGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceInfoSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceIsvtokenReimApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceListExpenseSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceMerchantEnterstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceMerchantlistEnterApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceOpenRedCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceOrderInfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceRegisterCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceRegisterModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceResultGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceSycnModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceSyncSimpleSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTaxnoBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitleBatchqueryInnerModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitleBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitleDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitleDynamicGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitleFuzzyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitleListGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitleSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitlelibraryDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTitlelibraryListQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTokenBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTopregisterCompanyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceTopregisterRegisterCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppInvoiceUserTradeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIsvImportedbillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppIsvProdmodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppJfexportBillCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppJfexportBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppJfexportChargeinstQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppJfexportInputfieldQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppJfexportInstbillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppJfexportMerchantbillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppOrderItemCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppOrderItemCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppOrderItemPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppOrderItemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppPdeductAsyncPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppPdeductSignConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppPdeductSignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppPdeductSignValidateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppProdmodeChargeoffinstQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppProdmodeDropdataQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppProdmodeInstshortnameQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppProdmodeProvcityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppProdmodeReconconfQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppProdmodeSignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppProdmodeTasknodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppProdmodeUnionbankQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppRechargeFlowSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppRechargeNotifySendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppRechargeTradeDetectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppRechargeUserDetectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEbppUserChargeinstQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoAcceptanceRequestCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoAcceptanceTaskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoBasicBizinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoBasicRouterSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCityserviceAppinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCityserviceCertinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCityserviceMessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCityservicePolymerSyncSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCityservicePushmsgPermitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCityserviceUserAppinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCityserviceUserPropertiesSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCmsCdataUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoContractMerchantSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoContractMessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoContractProcessDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoContractProcessSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoContractSignflowsCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeBasicserviceInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeBasicserviceModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeBillBatchUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeBillBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeBillDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeBillModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeBillSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeCommunityBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeCommunityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeCommunityDetailsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeCommunityModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeNoticeDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeNoticePublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifePayResultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeRepairStatusUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeResidentinfoDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeResidentinfoUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeRoominfoDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeRoominfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeRoominfoUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeRooominfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoCplifeUseridentityStatusUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoDingMessageNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoDocTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoDoctemplateSettingurlQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduJzApplyresultSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduJzPostPublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtBillingModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtBillingQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtBillingSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtBillingSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtDownloadurlQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtParentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtSchoolinfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtSettleinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtStudentModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtStudentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtZftschoolModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEduKtZftschoolQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEntertainmentOrderUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintActionNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintCodeNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintOrderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintOrderNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintPrinterAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintPrinterDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintTaskSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintTokenGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoEprintTokenRefreshModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoFilePathQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoLicenseOcrIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoLogisticsExpressNonserviceModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoLogisticsExpressNonserviceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoLogisticsExpressOrderModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoLogisticsExpressOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoLogisticsExpressPriceModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoLogisticsExpressPriceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMapGeocodingReverseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMedicalcareCommonDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMedicalcareCommonTpcardNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMedicalcareHosRegnotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMedicalcareHosReportnotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMedicalcareSiDataSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMessageEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarCarlibInfoPushModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarCarmodelBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarCarmodelCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarCarmodelModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarCarmodelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarDataExternalQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarDataExternalSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarDataserviceMaintainvehicleShareModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarDataserviceViolationinfoShareModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarDialogonlineAnswerPushModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarDialogonlineAnswererUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarDialogonlineVehicleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarFuellingProductModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarFuellingShopCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarFuellingShopModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarFuellingShopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarImageUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainAftersaleSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainBizorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainBizorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainBizorderUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainBizorderstatusUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainDataUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainOrderserverNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainOrderstatusUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainServiceproductUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainShopCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainShopDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainShopModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMaintainShopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarMerchantshopCommentBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingAgreementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingBusinessModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingCardbarcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingCardidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingChargeinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingConfigQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingConfigSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingDeviceorderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingEnterinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingExitinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingLotbarcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingOrderPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingOrderUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingOrderstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingParkinglotinfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingParkinglotinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingParkinglotinfoUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingSpaceinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarParkingVehicleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarPromoTicketPushModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarPromoTicketSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarPromoVoucherVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarTradeOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarTradeRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarViolationCityPushModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarViolationInfoPushModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoMycarViolationVehicleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoPrinterStatusNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoPrinterStatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRebateBalanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRebateBalanceSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseBill.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseBillOrderDownloadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseBillOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseBookInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseCommonImageUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseCommunityBaseinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseCommunityInfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseKaBaseinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseKaBaseinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseKaServiceCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseLeaseOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseLeaseStateSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthousePublicrentApplyscheduleSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseRenterIdinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseRenterZhimaQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseReservationFeedbackSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseRoomConcentrationSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseRoomDispersionSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoRenthouseRoomStateSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoSignFlowCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoSignFlowCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoSignFlowFinishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoSignFlowQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoSignflowsCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoSignflowsDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoSignflowsUrlQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoSmsSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoTextDetectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoTextVoiceNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoTextVoiceTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoTokenFastGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoTrafficCodeVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayEcoWelfareCodeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceFundFundFixedprofitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceFundFundnetvaluesBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceFundFundprodQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceFundFundquotationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceFundSimilarquotationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceQuotationDtcrawlerSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceQuotationFindataSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceQuotationStocktoolsFreeuserExchangeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceQuotationStocktoolsUserQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinanceZcbEndowmentorderDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthCardbinPrivateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthContractMerchantSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthContractMerchantUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthEcsignDataprepareCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthEcsignErrorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthEcsignSignorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthPbcQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthSpaccountConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFinancialnetAuthSpaccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAccountBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAccountbookCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAccountbookQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAuthOperationCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAuthOperationDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAuthOrderAppFreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAuthOrderFreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAuthOrderUnfreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundAuthOrderVoucherCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundBatchCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundBatchCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundBatchDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundBatchTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundBatchUniTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundBizorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponOperationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponOrderAgreementPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponOrderAppPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponOrderDisburseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponOrderPagePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponWufuCardAcceptModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponWufuCardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundCouponWufuCardReceiveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundStudentloanRepayQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransAacollectBatchCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransAacollectBatchCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransAacollectBatchQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransAacollectPayorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransAppConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransAppMergeConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransAppPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransAuctionBalanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransBatchCreateorderModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransBatchCreatesinglebatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransBatchQuerybatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransBillCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransCollectSinglemoneytokenCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransCommonQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransDishonorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransEdumigrateMigrateserviceModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransEntrustCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransEntrustPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransEntrustQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransEntrustTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransGroupfundsBatchCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransGroupfundsFundbillsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransGroupfundsPayauthConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransGroupfundsPayorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransGroupfundsUserbillsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransIcrowdTagModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransInvoiceFromisvnotifyModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransInvoiceResubmitModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransInvoiceStatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransInvoiceSyncdataModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransMergePrecreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransPagePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransThirdpartyRewardCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransThirdpartyRewardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransToaccountTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransTobankTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransTrusteeshipAccountCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayFundTransUniTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayGongyiAddressTest.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayGongyiModelTest.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayGongyiUserInfoTest.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayHighValueCustomerResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoaftermarketAttachmentUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoaftermarketDepotCreateormodifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoaftermarketInserviceorderNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoaftermarketOutorderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoinsprodCommonConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoinsprodCommonNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoinsprodEnquriyApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoinsprodPolicyApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoinsprodPolicyCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoinsprodQuoteApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoinsprodQuoteQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoAutoinsprodUserCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoBenefitCheckavailableModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoBenefitUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoCarSaveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoFeeReceiveConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoPointReceiveQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoServiceCouponVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoUserCampaignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoUserMsgSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoUserOilExchangeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoUserOilQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoUserOilRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoUserPointQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsAutoUserPointReceiveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsCooperationProductOfflineBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsCooperationProductQrcodeApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsCooperationProductQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsCooperationRegionQrcodeApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataAutoFraudQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataAutoFraudSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataAutoScoreQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataAutodamageEstimateApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataAutodamageEstimateConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataAutodamageEstimateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataAutodamageRequestImageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataDiseaseIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataDiseaseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataDsbEstimateApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataDsbEstimateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataDsbEstimateSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataDsbRequestImageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataHospitalQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsDataWeatherSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingCampaignDecisionModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingCampaignPrizeSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingCampaignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingCertificateBatchcreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingCertificateBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingDiscountDecisionModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingDiscountPreuseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingExperienceAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingLifeAccessQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingProductRecommendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsMarketingSellerSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneApplicationApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneApplicationBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneApplicationCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneApplicationGroupApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneApplicationIssueConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneApplicationOrderapplyCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneApplicationOutsideApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneApplicationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneClaimApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneClaimAttachmentConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneClaimNewreportCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneClaimReportModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneCommandReceiveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneCouponReceiveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneCouponSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneDxDataQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneHealthActivitySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneHealthGiftBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneHealthGiftQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneInsserviceprodCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneInsserviceprodFinishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneInsserviceprodRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneInsserviceprodSerprogressSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneInsserviceprodSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneInvoiceApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneLifemssageSingleSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsScenePolicyEndorseApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsScenePolicySurrenderApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneProductAccessApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneProductAgreementCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneProductAgreementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneProductAgreementSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneProductInquiryApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneProductSignConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneProductSignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneSellerActivityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneSellerActivitySignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneSellerActivityUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneSellerDataQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneServiceOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneTaskflowBatchCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneTaskflowBatchFinishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsSceneTaskflowBatchQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsUnderwriteClaimReportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsUnderwriteMutualPolicyBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsUnderwritePolicyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayInsUnderwriteUserPolicyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveAswfDagQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveBillInferenceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveClassificationCategorySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveClassificationFeedbackSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveClassificationWasteQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveImageRouteQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveInvoicesInferenceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveKgopenQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrBankcardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrBusinesslicenseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrCarvinQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrDriverlicenseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrIdcardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrImageclassifyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrTablesQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrVehicledashboardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrVehiclelicenseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceCognitiveOcrVehicleplateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceIotIntentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceItaskOrderRecordSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceItaskProcessDetailCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceItaskProcessDetailModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceItaskProcessDetailSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceMindvAnswersBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceMindvJobCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceMindvJobQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceMindvJobsbyuserQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceMindvSnapshotQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayIserviceMindvTroublefreeruleConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayItemAuditRule.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayItemDescription.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayItemGoodsList.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayItemLimitPeriodInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayItemOperationContext.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayItemSalesRule.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayItemVoucherTemplete.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayKeyanClass.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignActivityOfflineCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignActivityOfflineTriggerModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignAppleActivityConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignCashCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignCashDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignCashListQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignCashStatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignCashTriggerModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignCertCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignCertQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignCommoneventApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDiscountBudgetAppendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDiscountBudgetCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDiscountBudgetQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDiscountOperateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDiscountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDiscountStatusUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDiscountWhitelistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDiscountWhitelistUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDrawcampConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDrawcampCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDrawcampQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDrawcampStatusUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDrawcampTriggerModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDrawcampUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignDrawcampWhitelistCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignPrizeAmountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignPrizeSendQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignPrizepoolPrizeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignPrizepoolPrizeDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignPrizepoolPrizeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignRuleCrowdCountModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignRuleCrowdCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignRuleCrowdDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignRuleCrowdQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignRuleRulelistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignRuleTagQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignSubcertQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCampaignWarmcardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardActivateformQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardActivateurlApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardBenefitCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardBenefitDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardBenefitModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardBenefitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardConsumeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardFormtemplateSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardOpenApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardTemplateBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardTemplateModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardTemplateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCardUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashitemvoucherTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashlessitemvoucherTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashlessticketTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashlessticketTemplateModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashlessvoucherTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashlessvoucherTemplateModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashticketTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashticketTemplateModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashvoucherTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCashvoucherTemplateModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCdpAdvertiseCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCdpAdvertiseModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCdpAdvertiseOperateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCdpAdvertiseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCdpAdvertiseReportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCdpRecommendQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCouponTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingCrowdDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataAntlogmngActivitypagespmCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataDashboardApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataDashboardBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataDashboardCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataDashboardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataDeerConnectorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataDeerInsightQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataEquitySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataModelBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDataModelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingDecodeData.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingEncodeShortlinkCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingExchangevoucherTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingExchangevoucherUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingExtData.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingFacetofaceDecodeUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingFacetofaceTwostageUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingIbsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingIndirectcashticketTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingPassInstanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingPassShopBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingPassTemplateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingProductContext.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingSearchcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingSharetokenCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingSharetokenDecodeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieActivityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieActivityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieEditorGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieEditorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieMemberCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdiePreviewQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSitesBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSitesConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSitesCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSitesDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSitesQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSitesSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSpaceBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSpaceCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieSpaceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieTemplateBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieTemplateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolFengdieTemplateSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolPromocommoptOpeneventSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingToolSignupSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingUserulePidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherAuthSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherDirectSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherListQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherStockCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherStockMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherStockQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherStockUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherTemplateDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherTemplatedetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherTemplatelistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMarketingVoucherdetailListQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderConsumerQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderCreateandpayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderDigestConsumerBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderDigestUnlimitedBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderExternalPaychannelSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderMessageSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderPointQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderSecuritydetailConsumerQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderSecuritydigestConsumerBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantOrderUnlimitedQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegeMemberremainingQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegePayCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegeProfileSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegePromotionplanCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegePromotionplanModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegePromotionplanQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegeUselogBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegeUserrelationCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantPayforprivilegeUserrelationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantWeikeBillModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantWeikeBilltaxModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantWeikeInvoiceNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMerchantWeikeSettleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMiniCardData.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasItapDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasItapDeviceSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasItapPushSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasItapStatesSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasItapUserCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasItapUserConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogAftsCarIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogAftsCertIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogAftsXnnIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogAftscvpayTransactionInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvDeviceBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvGoodsApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvGoodsinfoBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvMachinegoodsAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvMachinetypeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvPicvideoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvTemplateApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvTemplateVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogMmtcaftscvTransactionInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasMediarecogVoiceMediaaudioUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasPromotionCpainfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayMsaasSyncSingledataSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketApplyorderBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketItemCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketItemModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketItemStateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketMcommentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketProductBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketProductQuerydetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketReporterrorCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketShopApplyorderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketShopBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketShopCategoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketShopCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketShopDiscountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketShopModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketShopQuerydetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketShopSummaryBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketingVoucherCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketingVoucherModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketingVoucherOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketingVoucherStatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineMarketingVoucherUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflinePayMasterKey.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineProviderDishQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineProviderEquipmentAuthQuerybypageModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineProviderEquipmentAuthRemoveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineProviderMonitorLogSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineProviderShopactionRecordModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineProviderUseractionRecordModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineTrade.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOfflineTradeResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAccountAliyunUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAgentCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAgentConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAgentCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAgentOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAgentSignstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAlipaycertDownloadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppApiresQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentFunctionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentFunctionModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentFunctionOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentFunctionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentInternalQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentItemBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentItemCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentItemDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentItemModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentItemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAppcontentPoiSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAraterRatestatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppAraterWaitratealgorankQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppBoyiBoyiCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppCodetesttestModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppCommunityDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppCommunityPartnerQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppCommunityPartnerSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppCommunityUserpromoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppDedfDdQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppDeveloperCheckdevelopervalidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppDfsfasDeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppGongyiTestQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppLingbalingliuQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppLingqierwuLingqierquQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMembersCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMembersDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMembersQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMessageSubscriptionModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMessageSubscriptionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMessageTopicSubscribeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMessageTopicUnsubscribeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMiniTemplatemessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppMsgDingSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppNotifyVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppOpenbizmockApisdkgrayQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppOpenbizmockMessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppOpenbizmockOpenidnonstandQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppPropertyAuthSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppPropertyMessageSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppQrcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppRateDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppReproCesCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppServiceBizabilitydataSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppServiceMiniappnearbyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppServiceMiniappnearbypoiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppServiceMiniappnearbypoipageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppServiceStatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppServiceSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppServiceViewcallbackQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppSilanApigrayQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppSilanApigrayoneQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppSmgMsgSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppSmsgDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppSystemNewcontextupiduoidTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppTestTestCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppTestapiiSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppUpdattestBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppXwbsssQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppXwbtestabcQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppXwbtstabcQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppYiyiyiwuQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppYoukuvideoAuditcallbackSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppYufalingsanyaowubYufalingsanyaowubQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAppYufanlingsanyaowuYufalingsanyaowuQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthAppAesGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthAppAesSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthAppApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthAppCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthAppContentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthIndustryPlatformCreateTokenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthLoginApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthOperatorAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthOperatorInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthTokenAppModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthTokenAppQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthUnifygwtestQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenAuthUserauthRelationshipCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenCategoryArticleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenContentContentlibYoukuvideoauditSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenDataItemRecommendBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenDataItemSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenDataServiceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenDesCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenEchoSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenInviteOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenInviteOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenIotDeviceBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenIotDeviceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenIotDeviceUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampdeliverModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryCampresultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryRegionBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryRegionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryRegionGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotteryRegionModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenLotterymallExchangerecordstatusSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMessagetestCesSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniActivityGiftQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniActivityModuleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniActivityTaskequityReceiveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAliminiabilityprodJsapiCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAliminiabilityprodJsapiModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAliminiabilityprodJsapiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeBindedminiappBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeCategoryBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeDeviceAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeDeviceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeDevicemodelAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeDevicemodelBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeDevicemodelModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeDeviceproductDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeDevicetypeBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeInvokeappBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeInvokeappBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeInvokeappUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeMiniappBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeMiniappUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeMobileappBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeMobileappBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeMobileappUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeProductBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAmpeProductModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAppdeployByappidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAppdeployByappversionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAppdeployBydeployversionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAppinfoMultiBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniAppinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniBaseinfoAmapQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniBaseinfoMultiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniBizdataTemplatemessageDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniBizdataTemplatemessageUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniCategoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniCloudDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniContentSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniDataPoiSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniDataSummaryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniDataVisitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniDataVisittrendQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniDeploypackageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniDeveloperAppinfoBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniDeveloppackageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniExperienceCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniExperienceCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniExperienceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInneraccountCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInneraccountPidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerappCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerappPluginOrderModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerappPluginservicePublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerappServicePublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerappServiceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoListQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoParameterVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoPrecreateCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoPrecreateConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoPrecreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoTransferDetectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerbaseinfoTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerclientinfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerclientinfoDefaultversionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerdeploypackageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionAuditApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionAuditCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionAuditOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionAuditSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionAuditstatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionBackdevPublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionBuildauditSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionConditionBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionContentRollbackModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionDeveloppackageCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionGrayFinishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionGrayOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionGrayPublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionGrayRollbackModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionInfoDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionInstantiationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionLastQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionModelforofflineQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionOfflinePublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionOnlinePublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionPackageCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionPreCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionPreOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionPreonlineConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionPreviewUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionRollbackModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionSubstatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionTemplatebasedUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionTemplatedUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionUpgradeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniInnerversionUploadstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniItemBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniItemPageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMarketMultibundleConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMembersHuobanCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMembersHuobanDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMembersHuobanModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMiniappFavoriteAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMiniappFavoriteQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMiniappFavoriteextAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMiniappFavoriteextDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMiniappFavoritegiftQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMiniappHistoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMiniappServiceconfigModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniModelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppRollbackModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppauditCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppauditSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppbackdevModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppgrayCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoAppgrayOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoApplistBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMorphoTemplatelistBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniMultiAuditModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPayeeBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPayeeUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPlanOperateBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPlanOperateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPlanOperateModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPlanOperateOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPoiDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPoiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPoiShowstatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPublicRelationBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniPublicRelationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniQrcodeBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniQrcodeUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniReleaststBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniSafedomainCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniSafedomainDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniSetintentiondataSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniShopActivityCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniTemplateUsageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniTemplatemessageUsertemplateApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniTinyappExistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniUserportraitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionAuditCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionAuditedCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionBuildQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionGrayCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionGrayOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionRollbackModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenMiniVersionUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationBizfeeActivityApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationBizfeeAftechApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationBizfeeAftechCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationBizfeeAftechConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationBizfeeAftechCreateandpayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationBizfeeAftechRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationBizfeeAftechSubscribeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationBizfeeAftechUnsubscribeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationOpenbizmockBizQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationPartnerLoginCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationPartnerSettleSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationPlatformNoticeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperationSsffDeeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenOperatorSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPageNewcontextTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPageOldcontextTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicAccountCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicAccountDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicAccountResetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicAdvertCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicAdvertDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicAdvertModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicArticlesummaryDataBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicComptestCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicContentCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicContentPublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicContentlibDatacollectSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicCrowdInnerQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicDefaultExtensionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicFollowBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicFollowCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicGisQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicGroupCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicGroupCrowdQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicGroupDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicGroupModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicInfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLabelCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLabelDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLabelModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLabelUserCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLabelUserDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLabelUserQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLifeAgentcreateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLifeLabelCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLifeLabelDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLifeLabelModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLifeMsgRecallModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicLifeaccountCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMatchuserFollowQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMatchuserLabelCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMatchuserLabelDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMenuCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMenuDataBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMenuDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMenuModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessageContentCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessageContentModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessageCustomSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessageGroupSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessageLabelSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessagePreviewSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessageSingleSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicMessageTotalSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicOdpsCrowdSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPartnerMenuOperateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPartnerMenuQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPartnerSubscribeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPayeeBindCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPayeeBindDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPersonalizedExtensionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPersonalizedExtensionDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPersonalizedExtensionSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPersonalizedMenuCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicPersonalizedMenuDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicQrcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicShortlinkCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicSinglearticleDataBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicSummaryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicTemplateMessageAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicTemplateMessageGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicTemplateMessageIndustryModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicThirdCustomerServiceModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicTopicCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicTopicDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicTopicModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicUserDataBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicUserFollowQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenPublicXwbtestabcdBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketCommodityAuditConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketCommodityExtendinfosAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketCommodityExtendinfosConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketCommodityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketCommodityShopOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketCommodityShopOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketCommoditySmartcitySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketInstanceSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketOrderAcceptModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketOrderItemCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketOrderItemCompleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketOrderItemConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketOrderRejectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketResourceCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenServicemarketYcstestQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenSmsgDataSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenStsTokenGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenTestQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOpenXwbtesttomsgapiSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOrderDataOpenapiResultInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasFundInstitutionschoolinfCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasOpenAccountConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasOpenPreorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasOpenPreorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasOpenSchoolQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasRemitBeneficialinfoCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasRemitBeneficialinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasRemitFundInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasRemitFundTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasRemitFxtradeorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasRemitResultFinishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasRemitWithdrawNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxAdvancedCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxAdvancedPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxAdvancedRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxAdvancedStatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxAdvancedUnfreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxNeworderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxNeworderStatusSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxOrderPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTaxUserinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferInstitutionpaymentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferPaymentCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferPaymentDisburseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferPaymentNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferPaymentPrecreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferPaymentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTransferQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelAppleCampprizeDetectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelBenefitChangeNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelContentCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelContentCountSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelContentCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelExchangerateBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelExchangerateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelFliggyAuthorityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelFliggyPoiCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelFliggyShopTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelFliggyStoreModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelGkaCampaignApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelGkaCampprizeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelPoiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelPromotionGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelPromotionReceiveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelRateBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelRateCurrencyBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelRatePromotionVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelRateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelRateRateinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTravelShopFollowModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTuitionSchoolcreditConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayOverseasTuitionSchoolpaymentBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPassInstanceAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPassInstanceUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPassTemplateAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPassTemplateUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayAppCarPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayAppCarSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayAppMarketingConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayApplepayTransactionBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayApplepayTransactionauthtokenCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayApplepayTransactionauthtokenDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayCodecAcodeCertExpireModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayCodecAcodeDecodeUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayCodecApplepayBarcodeeventNotifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayCodecApplepayCredentialsGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayCodecApplepayEstablishSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayCodecHschoolDecodeUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPayCodecQrcodecacheAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditCreditriskCustlabelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthAccumulationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthAgreementCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthAgreementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthBusinessConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthOrderCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthOrderFreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthOrderUnfreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthPageSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthRefundApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthSettleApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiAuthSignApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiBenefitOrderCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiBenefitOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiDiscountBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiDiscountSolutionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiDiscountSolutionModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiDiscountSolutionOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiDiscountSolutionOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiEnterpriseReimburseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiEnterpriseReimburseSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiEnterpriseUserinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMerchantActivityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMerchantActivityModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMerchantActivityOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMerchantActivityOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMerchantBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMobileauthSignApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMobileauthSignConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMobileauthSignConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMobileauthSignVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMobileauthTemplateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiMobileauthTemplatetextQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiPcbenefitcoreBfactivitfacadeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiPcreditamountQueryprocessorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiPcreditmerchantProductorderApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiPcreditmerchantProductorderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiPcreditmerchantProductorderDelayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiPcreditmerchantProductorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiPcreditmerchantProductorderTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiPcreditmerchantProductorderidApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiSelleradmitAdmittanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiSelleradmitRealtimeCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditHuabeiSpayAuthConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanApplyCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanApplyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanApplyUserCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanBeikeaccountInterestfreeModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanBudgetQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanCollateralCarModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanCollateralCarQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanCollateralValuationSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanCommissionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanContractInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanCreditApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanCreditQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanDeductApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanLoanApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanLoanDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanLoanInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanLoanResultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanLoanUnclearQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanRefundCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanRepayApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanRepayDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanRepayResultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditLoanRepayplanQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPcreditUserProfileSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayPlatformUseridGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayQueryCardModelResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityAafAdfaBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityDataAmlassetBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityDataDatabusSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityDataInfoMobilecityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityDataInfoSecuritydataQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityDataNamelistSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdAfsrcVulBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdAfsrcVulQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdAfsrcWhitehatinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdAlipaySecurityProdTestModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdAmlriskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdCheckIqQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdCtidInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdCtidVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdDesQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdDeviceinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdDfesfDefBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFacePayCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFacePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFacepayUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFacepayVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFacerepoAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFacerepoSearchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFingerprintApplyInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFingerprintApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFingerprintDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFingerprintDeviceVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFingerprintRiskcontrolQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFingerprintVerifyInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdFingerprintVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdIfaaDevicepubkeyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdIrisCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdIrisVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdSeAppletQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdSignatureTaskApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdSignatureTaskCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdSignatureTaskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdTamGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdUmidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdXwbtestabcAbcQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityProdXwbtestprodQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskAmlAnalyzeSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskAntifraudBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskAuthenticationCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskAuthenticationInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskAuthenticationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskBackgroundInterfaceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskBackgroundQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskContentAnalyzeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskContentDetectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskContentPerceptionSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskContentResultGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskCustomerriskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskCustomerriskSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskCustomerriskrankGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskHideDeviceidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskHufuAuthCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskHufuAuthQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskMobileactivityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskOfflinevarsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskPolicyConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskPolicyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskPolicyRdsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskRainscoreQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskReconfirmRiskidentifyCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskReconfirmVerificatecallbackSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskRiskprofileQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskRiskscanSingleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskVerifyidentityApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskVerifyidentityCommonQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskVerifyidentityConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRiskVerifyidentityInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecurityRopgnRisktaskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySecuritySssssssQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntcommonwealDonateConsumeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntforestAccountTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntforestEnergyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntforestPlantApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntforestPlantConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntforestProjectQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntforestTreeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntiepSceneSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialAntsportsCurrentpathQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseBcMsgSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGinvSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGmemberConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGmemberDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGmsgSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGnameModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGnoticeModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGroupCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatGroupsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatMsgSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatNewmsgSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseChatSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseContentlibNewsflashSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseContentlibOfferSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseContentlibStandardcontentSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseContentlibStandardvideoSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseContentlibStandardvideoauditSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseGroupCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseGroupQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseGroupmemberAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseIdpdrivenSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseIdpsourceSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseMcommentFootprintSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseMcommentFootprintUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseMcommentNewsfeedAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseQuestInstanceAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseQuestInstanceModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseQuestInstanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseQuestInstanceSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseQuestInstancesQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseRelationCombinedQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseRelationFriendsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialBaseSceneContentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialForestTreeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialGiftOrderConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialGiftOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialGiftOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialGiftStockQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialGiftStockUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialGiftVoucherUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialQuestionnareGrayUpgradeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialQuestionnareTaskFinishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialQuestionnareTaskPublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialQuestionnareTaskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipaySocialQuestionnareTaskVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeAdvanceConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeAppMergePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeAppPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeApplepayAuthenticationSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBatchRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBatchRefundQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBatchSettleModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBatchSettleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBatchTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBatchTransferQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBuyerCreditApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBuyerCreditCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBuyerCreditCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBuyerCreditConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeBuyerCreditQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCreditApplyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCreditFinancePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCreditFinanceRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCreditPayConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCreditProductSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCustomsDeclareModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeCustomsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeFastpayEteDidiPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeFastpayRefundQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeMerchantCreditInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeMerchantCreditModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeMerchantCreditQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeMergePrecreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeOrderPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeOrderSettleModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeOrderinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePageMergePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePagePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePageRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePayConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePaygrowthPayabilityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePeerpayprodRelationCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePrecreateConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradePrecreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRefundApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRepaybillCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRepaybillOrderCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRepaybillOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRepaybillOrderCreateandpayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRoyaltyRelationBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRoyaltyRelationBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeRoyaltyRelationUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeSettleConfirmCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeSettleConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeSettleReceivablesQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeVendorpayDevicedataUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeWapMergePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayTradeWapPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAccountBindingSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAccountDeviceInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAccountDeviceInfoUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAccountInstitutionCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAccountInvitedConvertSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAccountNewbieBenefitConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAccountOrderConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAddressQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementAuthApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementAuthConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementBatchQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementExecutionplanModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementPageSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementSignConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementSignEffectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementUserverifyApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAgreementUserverifyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAlipaypointSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAliyunbenefitReceiveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAliyunbenefitRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAliyunbenefitSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntarchiveCustrelationAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntarchiveCustrelationCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntarchiveFaceIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntarchiveFaceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntarchiveFaceUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntarchiveIdentityrelationAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntidVirtualCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntidVirtualQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasAddtesttagModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasRoleDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasRoleRelationSaveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasTestaccountCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasTokenCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasTokenThirdTrustLoginModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasTokenidentityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasTokenidentityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAntpaasUseridGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserApplepayMerchantauthtokenGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserApplepayOtpSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserApplepayOtpresolutionmethodsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserApplepayPbstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserApplepayProvisioningbundleCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserApplepayProvisioningbundleEffectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserApplepayProvisioningbundleModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserApplepayProvisioningbundleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAuthSecondpartyTokenVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAuthUserinfoApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAuthZhimaorgIdentityApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAuthZhimaperInnerApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserAuthZhimaperInternalApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserBenefitCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserBenefitEditModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserBenefitStatusUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserBillSimpleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertDocDrivingLicense.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertDocIDCard.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertDocPassport.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertDocVehicleLicense.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertdocCertverifyConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertdocCertverifyPreconsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertdocSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertdocUrlQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyActionApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyIdentifyFileQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyIdentifyInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyIdentifyVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyImgUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyInfoApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyInfoPersonApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyOpenCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyOpenInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyOpenQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertifyStudentinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCertinfoMaskedQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCharityCommonwealCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCharityForestQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCharityForestSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCharityForestsendpicSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCharityRecordexistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCreditCard.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCustIdentifyActivity.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCustomerIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserCustomertagSaveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserDeliverAddress.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserDeviceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserElectronicidMerchantbarcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserElectronicidOutermerchantbarcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserElectronicidUserQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserElectronicidUserbarcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserFamilyArchiveInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserFamilyArchiveQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserFamilyRelationValidQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserFinanceinfoShareModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserGradeAuthbaseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserGroupbuyingSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserGroupshoppingBenefitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserGroupshoppingNewbieQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserIdenticalAuthbaseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInfoAuthModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInfoInnerQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInfoVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInviteAwardReceiveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInviteOfflinedetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInviteOfflinesummaryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInviteOnlinedetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInviteOnlinesummaryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInviteRtaConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInvitetaskExchangeConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserInvitetaskExchangeConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserLevelInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserLogonidMaskedQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMemberAlipaybigcardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMemberAlipaycardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMemberCompletegcwtaskModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMemberGcwtaskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMemberSceneQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMemberTakegcwtaskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMembertaskProcessSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMpointAuthbasePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMpointAuthbaseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMpointPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserMpointRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserNewbenefitCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserNewbenefitModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserNewsceneTagQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPassGrouplistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPassInstancebatchAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPassTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPassTemplateModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPassTemplateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPeerpayprodAgreementModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPeerpayprodAgreementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPeerpayprodAgreementSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPicture.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPointAuthbaseDeductModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPointAuthbaseSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPointDeductModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPointRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPointSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPortraitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserPrincipalInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserSafeboxAgreementSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserSafeboxConditionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserSafeboxRecordSaveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserSceneCooperationConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserSigncardExistenceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserSocialinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserStepcounterDataBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserStepcounterQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserStepcounterSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserTwostageCommonUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserTwostageIndirectUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserUnicomCardInfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserUnicomDataQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserUnicomMobileSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserUnicomOrderInfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserUseridBymobileQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserVirtualcardPageSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayUserVirtualcardSignEffectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayYebLqdDataResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AlipayZmScoreZrankResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AlisisReport.cs create mode 100644 PaymentSDK/AliPay/Domain/AlisisReportColumn.cs create mode 100644 PaymentSDK/AliPay/Domain/AlisisReportRow.cs create mode 100644 PaymentSDK/AliPay/Domain/AlmReportData.cs create mode 100644 PaymentSDK/AliPay/Domain/AmapMapMapserviceTeseBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AmlAssetRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/Amount.cs create mode 100644 PaymentSDK/AliPay/Domain/AmountTypeData.cs create mode 100644 PaymentSDK/AliPay/Domain/AmpeCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AmpeDeviceModelInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AmpeDeviceTypeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AmpeDeviceVO.cs create mode 100644 PaymentSDK/AliPay/Domain/AmpeProductInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AnswerModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntArchiveIdentityCertificate.cs create mode 100644 PaymentSDK/AliPay/Domain/AntInvoiceItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AntInvoiceResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMemberBenefitInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandActivityQualificationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandActivitySignupCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandActivitySignupQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetdeliveryAssignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetdeliveryAssignSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetdeliveryCompleteSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetinfoCorrectionSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetinfoDeliverySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetinfoProduceSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetproduceAssignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetproduceAssignSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetproduceCompleteSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetreverseAssignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetreverseAssignSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAssetreverseCompleteSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAutomatApplyModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandAutomatApplyUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandBenefitConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandBenefitRecordQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandBenefitVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandClassificationCreateormodifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandContractFacetofaceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandContractFacetofaceSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandDeliveryGoodsinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandDeliveryLogisticsSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandDeliveryProcessSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandEnterpriseApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandExpressChangeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandFrontcategorySecurityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandFrontcategorySecurityDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandFrontcategorySecurityModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandFrontcategorySecurityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectActivityConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectActivityCopyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectActivityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectAttachmentUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectBindQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectIsvModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectOnlineCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectOnlineModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectOnlineQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectSourceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectTiansuoBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectTiansuoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectZftConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectZftCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectZftModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIndirectZftorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIsvDeviceBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIsvDeviceCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandIsvShopCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemOpenBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemOpenCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemOpenDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemOpenModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemOpenQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemSecurityBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemSecurityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemSecurityDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemSecurityModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemSecurityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandItemStatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandLogisticsorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandMapplyorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandMerchantIndividualCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandMerchantStorelistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandMerchantTypeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandPersonalApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandSavingPassQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandScodeApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandScodeEledeSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandScodeEledeUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandScodeModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandShopBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandShopCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandShopConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandShopCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandShopFengniaoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandShopModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandShopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandStoreShopserviceCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandStoreShopserviceDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandStoreShopserviceModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandTradeorderEventSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandTradeorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandTradeorderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandTradeorderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantExpandWarehouseOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantOrderStoreBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantOrderStoreCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantOrderStoreQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntMerchantOrderStoreSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntOcrDriverlicenseIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntOcrGeneralIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntOcrIdcardIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntOcrVehiclelicenseIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntOcrVehicleplateIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntProdpaasArrangementCommonQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntProdpaasArrangementRebateRateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntProdpaasProductCommonQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntdataassetsOdpsColumn.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneContentCommunityDataSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneContentCommunityHoteventListQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneContentCommunityLabelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneContentCommunityOpenSecuaiQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityInstpointPrizeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityInstpointPrizeexchangeUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityInstpointQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityInstpointSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityInstpointTransQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityMessageSingleSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityPortfolioQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityServiceCardSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneEquityShopCustrelationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneMarketingCrowdWshopMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneQuotationPlateIndexQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneQuotationResearchdataQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntfortuneYebInfoAdvertisingQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AntlawSignOperator.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechAiCvDsbGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechAiCvDsbIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechAiCvOcrBusinesslicenseIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechAiCvOcrVatinvoiceIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechAiCvTfjsModelBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechAiCvTfjsModelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechAiCvTfjsModelversionBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechAiCvTfjsModelversionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainDefinAssetmanagePenetrateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainDefinAssetmanagePenetrateSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainDefinBaseFileSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainDefinFinanceArQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainDefinFinanceArSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainDefinFinanceInterbankQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainDefinFinanceInterbankSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainDefinTradeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceAntdaoMypointsPublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceAssetIssueApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceAssetIssueQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceAssetIssueSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceAssetRegisterApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceAssetRegisterSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceCustomerCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceMylogisticfinsandboxMessagePublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceMylogisticfinsysContractApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceMylogisticfinsysMessagePublishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceRiskApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainFinanceRiskWarningAddModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainTwcPreauthinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainTwcTradeinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechBlockchainTwcUserinfoMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechDataCollectBlockchainSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechDataServiceBlockchainAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechDataServiceBlockchainContractQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AnttechDataServiceBlockchainTransactionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/AoiInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ApBillAmtOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ApInvoiceBillAmtOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ApInvoiceBillLinkOrderRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/ApInvoiceLineOrderRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/ApInvoiceOrderRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/ApMonthlyBillCustOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ApUserInvoiceInfoOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ApUserMailInfoOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ApiContractDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ApiContractGoal.cs create mode 100644 PaymentSDK/AliPay/Domain/ApiContractItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ApiContractParticipant.cs create mode 100644 PaymentSDK/AliPay/Domain/AppBasicInfoResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/AppContentItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AppMemberInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AppTokenExchangeSubElement.cs create mode 100644 PaymentSDK/AliPay/Domain/AppVersionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AppVisitTrendDataResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/Appinfos.cs create mode 100644 PaymentSDK/AliPay/Domain/AppletTaskDisplayVO.cs create mode 100644 PaymentSDK/AliPay/Domain/AppletTaskPrizeVO.cs create mode 100644 PaymentSDK/AliPay/Domain/AppletTaskVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ApplyBusinessCity.cs create mode 100644 PaymentSDK/AliPay/Domain/ApplyCodeRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/ApplyCodeResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ApplyCodeResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ApplyGoodsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ApplySubAccountAndBindOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/ApplySubAccountAndBindResultDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ApproveCreditResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ApprovedInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ArInvoiceBillLinkOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ArInvoiceLineOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ArInvoiceOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ArInvoiceReceiptOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ArInvoiceReceiptQueryOpenApiDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ArMonthlyBillDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ArMonthlyStatementBillOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ArchiveFaceExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ArchiveFaceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AreaCode.cs create mode 100644 PaymentSDK/AliPay/Domain/AreaDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/AreaInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ArrangementBaseSelector.cs create mode 100644 PaymentSDK/AliPay/Domain/ArrangementBaseVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ArrangementConditionGroupSelector.cs create mode 100644 PaymentSDK/AliPay/Domain/ArrangementInvolvedPartyQuerier.cs create mode 100644 PaymentSDK/AliPay/Domain/ArrangementNoQuerier.cs create mode 100644 PaymentSDK/AliPay/Domain/ArrangementOpenQueryResultVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ArrangementVORes.cs create mode 100644 PaymentSDK/AliPay/Domain/Article.cs create mode 100644 PaymentSDK/AliPay/Domain/ArticleParagraph.cs create mode 100644 PaymentSDK/AliPay/Domain/ArticlePicture.cs create mode 100644 PaymentSDK/AliPay/Domain/ArticleSummaryAnalysisData.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetDeliveryAddress.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetDeliveryDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetDeliveryItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetDeliveryProcessInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetInfoCorrectionItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetInfoItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetLogisticsRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetParams.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetProduceItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetReverseDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetReverseGoodsItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetReverseItem.cs create mode 100644 PaymentSDK/AliPay/Domain/AssetSubFeedbackInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AssuranceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Attachment.cs create mode 100644 PaymentSDK/AliPay/Domain/AttachmentDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/AttachmentExplain.cs create mode 100644 PaymentSDK/AliPay/Domain/AttachmentExplainBean.cs create mode 100644 PaymentSDK/AliPay/Domain/AttachmentInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Attribute.cs create mode 100644 PaymentSDK/AliPay/Domain/AudioEvent.cs create mode 100644 PaymentSDK/AliPay/Domain/AuditLicenseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AuthInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AuthenticationInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AuthenticationResult.cs create mode 100644 PaymentSDK/AliPay/Domain/AuthenticationScene.cs create mode 100644 PaymentSDK/AliPay/Domain/AutoMktTouchExtendInfoEntry.cs create mode 100644 PaymentSDK/AliPay/Domain/AvailablePeriodInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/AvailableTimeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BFActivityFundInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BFActivityOpenApiInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BFActivityOpenApiResult.cs create mode 100644 PaymentSDK/AliPay/Domain/BPOpenApiAddSignContent.cs create mode 100644 PaymentSDK/AliPay/Domain/BPOpenApiInstance.cs create mode 100644 PaymentSDK/AliPay/Domain/BPOpenApiPUID.cs create mode 100644 PaymentSDK/AliPay/Domain/BPOpenApiTask.cs create mode 100644 PaymentSDK/AliPay/Domain/BailDetailResult.cs create mode 100644 PaymentSDK/AliPay/Domain/BakingItemOperationData.cs create mode 100644 PaymentSDK/AliPay/Domain/BankCardInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BankRepayData.cs create mode 100644 PaymentSDK/AliPay/Domain/BankSubAccountBaseInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/BankcardExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BarcodeEventResponseHeader.cs create mode 100644 PaymentSDK/AliPay/Domain/BarcodeInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/BaseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BaseInfoConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/BaseLoanApplyVO.cs create mode 100644 PaymentSDK/AliPay/Domain/BaseOpenApiResponseHeaderDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/BatchDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BatchFundItemAOPModel.cs create mode 100644 PaymentSDK/AliPay/Domain/BatchInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BatchRefundDetailResult.cs create mode 100644 PaymentSDK/AliPay/Domain/BatchRoyaltyDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/BatchSettleDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/BcBusinessUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BccEventDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/BccSubjectDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/BeaconDeviceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BeaconTemplate.cs create mode 100644 PaymentSDK/AliPay/Domain/BeikeAccountResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitAmountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitDateInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitDisplayInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitGradeConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitGradePoint.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitInfoDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitQueryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BenefitSource.cs create mode 100644 PaymentSDK/AliPay/Domain/BenifitGoodsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BigCardData.cs create mode 100644 PaymentSDK/AliPay/Domain/BillAmtVo.cs create mode 100644 PaymentSDK/AliPay/Domain/BillDetailVo.cs create mode 100644 PaymentSDK/AliPay/Domain/BillDingBizOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/BillDingBizOrderSum.cs create mode 100644 PaymentSDK/AliPay/Domain/BillInferenceResult.cs create mode 100644 PaymentSDK/AliPay/Domain/BillPaymentDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/BillRepayBudgetVO.cs create mode 100644 PaymentSDK/AliPay/Domain/BillRepayRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/BillSendExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BillSyncExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BindedMiniAppInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BizAbilityData.cs create mode 100644 PaymentSDK/AliPay/Domain/BizBudgetDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/BizData.cs create mode 100644 PaymentSDK/AliPay/Domain/BizExtParams.cs create mode 100644 PaymentSDK/AliPay/Domain/BizListDataInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BizOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/BizParamKeyValue.cs create mode 100644 PaymentSDK/AliPay/Domain/BizResData.cs create mode 100644 PaymentSDK/AliPay/Domain/BizResult.cs create mode 100644 PaymentSDK/AliPay/Domain/BizUnitInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BkPosGoodsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BlockChainAccountApiDO.cs create mode 100644 PaymentSDK/AliPay/Domain/BlockChainContractApiDO.cs create mode 100644 PaymentSDK/AliPay/Domain/BlockChainTransactionApiDO.cs create mode 100644 PaymentSDK/AliPay/Domain/BookInfoModify.cs create mode 100644 PaymentSDK/AliPay/Domain/BookTime.cs create mode 100644 PaymentSDK/AliPay/Domain/BoothContentInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/BrandLevelInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BudgetInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BudgetLibResult.cs create mode 100644 PaymentSDK/AliPay/Domain/BudgetVO.cs create mode 100644 PaymentSDK/AliPay/Domain/Building.cs create mode 100644 PaymentSDK/AliPay/Domain/BusinessBankAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BusinessLicenceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BusinessLicenseCertFileds.cs create mode 100644 PaymentSDK/AliPay/Domain/BusinessParams.cs create mode 100644 PaymentSDK/AliPay/Domain/BusinessPartner.cs create mode 100644 PaymentSDK/AliPay/Domain/BusinessPermission.cs create mode 100644 PaymentSDK/AliPay/Domain/BusinessPoint.cs create mode 100644 PaymentSDK/AliPay/Domain/BusinessPropertyDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/Businessarea.cs create mode 100644 PaymentSDK/AliPay/Domain/ButtonObject.cs create mode 100644 PaymentSDK/AliPay/Domain/BuyerNotesInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/BuyerPayDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/CCInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CPAliveBillEntrySet.cs create mode 100644 PaymentSDK/AliPay/Domain/CPBillModifySet.cs create mode 100644 PaymentSDK/AliPay/Domain/CPBillResultSet.cs create mode 100644 PaymentSDK/AliPay/Domain/CPBillSet.cs create mode 100644 PaymentSDK/AliPay/Domain/CPCommServices.cs create mode 100644 PaymentSDK/AliPay/Domain/CPCommunitySet.cs create mode 100644 PaymentSDK/AliPay/Domain/CalendarScheduleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CallCenterTradeApplyParams.cs create mode 100644 PaymentSDK/AliPay/Domain/CampBaseDto.cs create mode 100644 PaymentSDK/AliPay/Domain/CampDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/CampDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CampaignExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CaptureCreateDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/CaptureCreateOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/Car.cs create mode 100644 PaymentSDK/AliPay/Domain/CarModel.cs create mode 100644 PaymentSDK/AliPay/Domain/CardBinVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CardCreditInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CardDomainVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CardExtensionInfoData.cs create mode 100644 PaymentSDK/AliPay/Domain/CardFrontTextDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/CardFundInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CardInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CardInstanceDO.cs create mode 100644 PaymentSDK/AliPay/Domain/CardPromoDO.cs create mode 100644 PaymentSDK/AliPay/Domain/CardTypeVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CardUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CascadeMissionConfModel.cs create mode 100644 PaymentSDK/AliPay/Domain/CaseInfoCode.cs create mode 100644 PaymentSDK/AliPay/Domain/CashCampaignInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CateInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/Category.cs create mode 100644 PaymentSDK/AliPay/Domain/CategoryLevelInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CategoryRiskInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CategoryVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CaterItemListInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CdpDisplayContent.cs create mode 100644 PaymentSDK/AliPay/Domain/CertAuditResult.cs create mode 100644 PaymentSDK/AliPay/Domain/CertAvailableNumVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CertFields.cs create mode 100644 PaymentSDK/AliPay/Domain/CertInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CertInfoRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/CertInfoResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/Certificate.cs create mode 100644 PaymentSDK/AliPay/Domain/ChargeInstMode.cs create mode 100644 PaymentSDK/AliPay/Domain/ChargeItems.cs create mode 100644 PaymentSDK/AliPay/Domain/CheckResultList.cs create mode 100644 PaymentSDK/AliPay/Domain/ChildCertInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CircleRecommendItemDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/CityFunction.cs create mode 100644 PaymentSDK/AliPay/Domain/CityShopModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ClaimProgress.cs create mode 100644 PaymentSDK/AliPay/Domain/ClaimStrategy.cs create mode 100644 PaymentSDK/AliPay/Domain/ClassRateInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ClauseTerm.cs create mode 100644 PaymentSDK/AliPay/Domain/ClearingCommonResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ClientInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudBusOdItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusAvaliableItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusCommonResult.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusLocation.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusPredictRItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusPredictResult.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusRetryPredictItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusRoute.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusRouteRItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusStop.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusSubmitPredictItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusTimeOdItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusTotalOdItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusTransitItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusTransitResultItem.cs create mode 100644 PaymentSDK/AliPay/Domain/CloudbusUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CmItemInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CmItemSkuInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CodeCouponInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CodeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CodeNOList.cs create mode 100644 PaymentSDK/AliPay/Domain/CodeResInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CodeResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ColumnMoreInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/Command.cs create mode 100644 PaymentSDK/AliPay/Domain/CommentReplyOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/CommerceAppUploadRequestContent.cs create mode 100644 PaymentSDK/AliPay/Domain/CommerceAppUploadResponseData.cs create mode 100644 PaymentSDK/AliPay/Domain/CommodityBaseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CommodityExtInfoConfirm.cs create mode 100644 PaymentSDK/AliPay/Domain/CommodityPublicExtInfos.cs create mode 100644 PaymentSDK/AliPay/Domain/CommonDescInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CommunityPartnerRelaData.cs create mode 100644 PaymentSDK/AliPay/Domain/CommunityPartnerRelationDataSyncDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/CompanyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CompanyRole.cs create mode 100644 PaymentSDK/AliPay/Domain/ComplexLabelRule.cs create mode 100644 PaymentSDK/AliPay/Domain/ComplextMockModel.cs create mode 100644 PaymentSDK/AliPay/Domain/Condition.cs create mode 100644 PaymentSDK/AliPay/Domain/ConditionItemPattern.cs create mode 100644 PaymentSDK/AliPay/Domain/ConfigInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ConfigInfoBean.cs create mode 100644 PaymentSDK/AliPay/Domain/ConfirmReceivableDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ConstraintInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ConsultExtParams.cs create mode 100644 PaymentSDK/AliPay/Domain/ConsumeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ConsumeOutputInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ConsumeRecordAOPModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ContactFollower.cs create mode 100644 PaymentSDK/AliPay/Domain/ContactInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ContactInfoKt.cs create mode 100644 PaymentSDK/AliPay/Domain/ContactModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ContactPersonInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ContentExtInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ContentExtensionForOpenapi.cs create mode 100644 PaymentSDK/AliPay/Domain/ContentInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ContentObjectRelationForOpenapi.cs create mode 100644 PaymentSDK/AliPay/Domain/ContentPicture.cs create mode 100644 PaymentSDK/AliPay/Domain/ContentPoiData.cs create mode 100644 PaymentSDK/AliPay/Domain/ContentPrizeInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/Context.cs create mode 100644 PaymentSDK/AliPay/Domain/Contract.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractApprovalInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractBatchInfoOpenApiResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractConsultResultVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractFileInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractFileVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractManagerAttachmentsSyncrequest.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractManagerParticipantsSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractManagerProcessSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractManagerSignDocsRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/ContractStatusTag.cs create mode 100644 PaymentSDK/AliPay/Domain/ContributeDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ControlInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ConversionDataDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/CorpEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/CountControlConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/CountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Coupon.cs create mode 100644 PaymentSDK/AliPay/Domain/CplifeNoticeDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/CplifeNoticeImg.cs create mode 100644 PaymentSDK/AliPay/Domain/CplifeResidentInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CplifeRoomDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/CplifeRoomInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CplifeRoomInfoResp.cs create mode 100644 PaymentSDK/AliPay/Domain/CraftsmanAssessment.cs create mode 100644 PaymentSDK/AliPay/Domain/CraftsmanOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/CraftsmanShopRelationOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/CraftsmanSubAssessment.cs create mode 100644 PaymentSDK/AliPay/Domain/CraftsmanWorkCreateOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/CraftsmanWorkOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/CraftsmanWorkOutIdOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/CreationPlanData.cs create mode 100644 PaymentSDK/AliPay/Domain/CreativeDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/CredentialsFraudData.cs create mode 100644 PaymentSDK/AliPay/Domain/CredentialsResponseHeader.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditFinancePayAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditFreezeSubOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayAssetBaseVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayBillAssetVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayChargePricingVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayClauseVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayDayRangePricingVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayDiscountVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayGuideVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayInstallmentAssetVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayInstallmentDetailVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayIntPricingVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayMoneyVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayOrderInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayRefuseVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayRepayVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayTermVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditPayUserVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CreditResult.cs create mode 100644 PaymentSDK/AliPay/Domain/CrowdConstraintInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CrowdRuleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CrowdSummary.cs create mode 100644 PaymentSDK/AliPay/Domain/CustScpBillAmtVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CustScpInstallmentBudgetVO.cs create mode 100644 PaymentSDK/AliPay/Domain/CustomMetric.cs create mode 100644 PaymentSDK/AliPay/Domain/CustomReportCondition.cs create mode 100644 PaymentSDK/AliPay/Domain/CustomerEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/CustomerTag.cs create mode 100644 PaymentSDK/AliPay/Domain/CustomsDeclareBuyerInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/CustomsDeclareRecordInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DashBoardMeta.cs create mode 100644 PaymentSDK/AliPay/Domain/DashboardParam.cs create mode 100644 PaymentSDK/AliPay/Domain/Data.cs create mode 100644 PaymentSDK/AliPay/Domain/DataDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/DataDim.cs create mode 100644 PaymentSDK/AliPay/Domain/DataEntry.cs create mode 100644 PaymentSDK/AliPay/Domain/DataEnumValue.cs create mode 100644 PaymentSDK/AliPay/Domain/DataSecCheckContent.cs create mode 100644 PaymentSDK/AliPay/Domain/DataSecCheckResult.cs create mode 100644 PaymentSDK/AliPay/Domain/DataSendBusinessResult.cs create mode 100644 PaymentSDK/AliPay/Domain/DataSyncPayload.cs create mode 100644 PaymentSDK/AliPay/Domain/DataTag.cs create mode 100644 PaymentSDK/AliPay/Domain/Datas.cs create mode 100644 PaymentSDK/AliPay/Domain/DateAreaModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DefaultInCartInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DefaultSettleRule.cs create mode 100644 PaymentSDK/AliPay/Domain/DelayInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DeliverAddress.cs create mode 100644 PaymentSDK/AliPay/Domain/DeliverInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DeliveryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DeliveryOrderProcessVO.cs create mode 100644 PaymentSDK/AliPay/Domain/DeliveryPackageDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/DeliveryPackageVO.cs create mode 100644 PaymentSDK/AliPay/Domain/DepartmentDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/DepartmentLabel.cs create mode 100644 PaymentSDK/AliPay/Domain/DepositBackInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DeskAreaEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/DeskEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/Detail.cs create mode 100644 PaymentSDK/AliPay/Domain/DetailBean.cs create mode 100644 PaymentSDK/AliPay/Domain/DetectServiceEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceApplyOrderDeviceModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceApplyOrderItemDto.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceApplyOrderItemModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceApplyTemplate.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceBehaviorLogResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceGroup.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceGroupMember.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceParams.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceProductInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DevicePushPayload.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceRelationData.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceResultInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceSyncPayload.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceTradeInfoList.cs create mode 100644 PaymentSDK/AliPay/Domain/DeviceTradeResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/DiagnoseResult.cs create mode 100644 PaymentSDK/AliPay/Domain/DiagnosisInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Dimension.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountByDayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountDstCampPrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountInfos.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountRandomModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DiscountRateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DiseaseDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/DishCategoryEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/DishList.cs create mode 100644 PaymentSDK/AliPay/Domain/DishRecommend.cs create mode 100644 PaymentSDK/AliPay/Domain/DishTag.cs create mode 100644 PaymentSDK/AliPay/Domain/Dishes.cs create mode 100644 PaymentSDK/AliPay/Domain/DishonestyDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DishonorOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/DisplayConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/District.cs create mode 100644 PaymentSDK/AliPay/Domain/DmActivityShopData.cs create mode 100644 PaymentSDK/AliPay/Domain/DocInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DrawndnVo.cs create mode 100644 PaymentSDK/AliPay/Domain/DsbImageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DstCampRuleModel.cs create mode 100644 PaymentSDK/AliPay/Domain/DxDeployOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/DxVerifyResultItem.cs create mode 100644 PaymentSDK/AliPay/Domain/EbppBillKey.cs create mode 100644 PaymentSDK/AliPay/Domain/EbppOrderItem.cs create mode 100644 PaymentSDK/AliPay/Domain/EbppOrderItemToCreate.cs create mode 100644 PaymentSDK/AliPay/Domain/EbppUserChargeInstInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EcoAppInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EcoApplySchedule.cs create mode 100644 PaymentSDK/AliPay/Domain/EcoCenRenthousepayTypeList.cs create mode 100644 PaymentSDK/AliPay/Domain/EcoDisRenthousepayTypeList.cs create mode 100644 PaymentSDK/AliPay/Domain/EcoMockGroupInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EcoRenthouseOtherAmount.cs create mode 100644 PaymentSDK/AliPay/Domain/EcoRenthouseRoomInfoList.cs create mode 100644 PaymentSDK/AliPay/Domain/EduAgeDemand.cs create mode 100644 PaymentSDK/AliPay/Domain/EduOneCardBalanceQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/EduOneCardDepositCardQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/EduPayItems.cs create mode 100644 PaymentSDK/AliPay/Domain/EduSourceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EduStudentInfoShareResult.cs create mode 100644 PaymentSDK/AliPay/Domain/EduTrainExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EduWorkAddress.cs create mode 100644 PaymentSDK/AliPay/Domain/EinvTrade.cs create mode 100644 PaymentSDK/AliPay/Domain/EncryptedPaymentCredential.cs create mode 100644 PaymentSDK/AliPay/Domain/EndowmentOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/EntertainmentOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EntityBasicInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EntityPriorRiskVO.cs create mode 100644 PaymentSDK/AliPay/Domain/EntityStatus.cs create mode 100644 PaymentSDK/AliPay/Domain/EnvInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EpElement.cs create mode 100644 PaymentSDK/AliPay/Domain/EpInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EquipmentAuthRemoveQueryBypageDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/EquipmentBindInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EquityInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ErrorCodeDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ErrorDishEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/ErrorDishStallEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/ErrorLog.cs create mode 100644 PaymentSDK/AliPay/Domain/ErrorMatcher.cs create mode 100644 PaymentSDK/AliPay/Domain/EstablishFraudData.cs create mode 100644 PaymentSDK/AliPay/Domain/EstablishResponseHeader.cs create mode 100644 PaymentSDK/AliPay/Domain/EstimateDishInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/EventInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ExClientRateVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ExRefRateInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ExSourceRateVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ExchangeRate.cs create mode 100644 PaymentSDK/AliPay/Domain/ExerciseCourseOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ExerciseDailySummaryOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ExerciseItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ExerciseItemOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ExerciseItemOpenModelSecond.cs create mode 100644 PaymentSDK/AliPay/Domain/ExerciseItemOpenModelThird.cs create mode 100644 PaymentSDK/AliPay/Domain/ExercisePlanOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ExerciseRecordOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ExerciseUserMappingDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ExproductconfResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtBrand.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtCardInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtCategory.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtContext.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtInfos.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtShopItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtendFieldInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtendInfos.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtendMedicalCard.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtendParams.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtensionArea.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtitemDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtraInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ExtraParams.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceAbilityExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceAttrInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceExtParams.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceMachineInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceMerchantInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceSearchAnonymousUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceSearchResult.cs create mode 100644 PaymentSDK/AliPay/Domain/FaceSearchUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FamilyArchiveDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/FeeRecords.cs create mode 100644 PaymentSDK/AliPay/Domain/FeeValue.cs create mode 100644 PaymentSDK/AliPay/Domain/FeedbackSubItem.cs create mode 100644 PaymentSDK/AliPay/Domain/FenceEvent.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivity.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivityComponentModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivityCreateData.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivityCreatePageData.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivityCreatePagesData.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivityPage.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivitySchemaData.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieActivitySchemaModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieEditorGetRespModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieListPaginator.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdiePreviewPagesModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdiePreviewQueryRespModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSitesCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSitesListModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSitesListRespModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSitesOwner.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSitesPageModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSitesQueryRespModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSpaceDetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSpaceDomains.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSpaceListRespModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSpaceMemberCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieSuccessRespModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieTemplate.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieTemplateDetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FengdieTemplateListRespModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FileSignature.cs create mode 100644 PaymentSDK/AliPay/Domain/FillContent.cs create mode 100644 PaymentSDK/AliPay/Domain/Filter.cs create mode 100644 PaymentSDK/AliPay/Domain/FilterTag.cs create mode 100644 PaymentSDK/AliPay/Domain/FinExtParams.cs create mode 100644 PaymentSDK/AliPay/Domain/FinanceBankAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FinanceCreditItem.cs create mode 100644 PaymentSDK/AliPay/Domain/FinanceFileInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FinanceInvoiceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FinanceMemberInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FinancePurchaseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FinanceReceivableInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FinanceReceivableResultInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FixCooperationDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/FixExtData.cs create mode 100644 PaymentSDK/AliPay/Domain/FixFileInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FixProblemDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/FliggyPoiInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FlowSigner.cs create mode 100644 PaymentSDK/AliPay/Domain/FoodDispenserCellInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ForbbidenTime.cs create mode 100644 PaymentSDK/AliPay/Domain/FraudData.cs create mode 100644 PaymentSDK/AliPay/Domain/FrequencyRuleDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/FriendListVO.cs create mode 100644 PaymentSDK/AliPay/Domain/FrontCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FsServiceDynamicInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FulfillmentInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/FulfillmentResult.cs create mode 100644 PaymentSDK/AliPay/Domain/FullDiscountDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/FullGiftDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/FullReductionDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/FundBill.cs create mode 100644 PaymentSDK/AliPay/Domain/FundBillListEco.cs create mode 100644 PaymentSDK/AliPay/Domain/FundDetailItemAOPModel.cs create mode 100644 PaymentSDK/AliPay/Domain/FundItemAOPModel.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPIAcceptanceResult.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPIAmortizeExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPIBaseAcceptance.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPIBillAcceptance.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPICommand.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPICommandReceipt.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPIDetailQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPIParticipantInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPIQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/GFAOpenAPIReverseBillAcceptance.cs create mode 100644 PaymentSDK/AliPay/Domain/GavinTestnew.cs create mode 100644 PaymentSDK/AliPay/Domain/Gavinmed.cs create mode 100644 PaymentSDK/AliPay/Domain/Gavintest.cs create mode 100644 PaymentSDK/AliPay/Domain/GavintestNewLeveaOne.cs create mode 100644 PaymentSDK/AliPay/Domain/GavintestNewonline.cs create mode 100644 PaymentSDK/AliPay/Domain/GeneralInvoiceItem.cs create mode 100644 PaymentSDK/AliPay/Domain/GetRuleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsComponent.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsInformation.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsReturnOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsReturnOrderItem.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsSafetyInventory.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsSafetyInventoryVO.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsState.cs create mode 100644 PaymentSDK/AliPay/Domain/GoodsVO.cs create mode 100644 PaymentSDK/AliPay/Domain/GovDocRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/GradeDiscountPoint.cs create mode 100644 PaymentSDK/AliPay/Domain/GroupFundBill.cs create mode 100644 PaymentSDK/AliPay/Domain/GroupFundDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/GroupFundUserBill.cs create mode 100644 PaymentSDK/AliPay/Domain/GroupFundsImcomeDetails.cs create mode 100644 PaymentSDK/AliPay/Domain/GroupInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/GroupMemberInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/GroupRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/GroupSetting.cs create mode 100644 PaymentSDK/AliPay/Domain/HSchoolInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/HbMerchantBill.cs create mode 100644 PaymentSDK/AliPay/Domain/HbMerchantInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/HbProductOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/HelloBikePriceCondition.cs create mode 100644 PaymentSDK/AliPay/Domain/HelloBikePriceConstraint.cs create mode 100644 PaymentSDK/AliPay/Domain/HelloBikePriceResultItem.cs create mode 100644 PaymentSDK/AliPay/Domain/HighwaySceneData.cs create mode 100644 PaymentSDK/AliPay/Domain/Hit.cs create mode 100644 PaymentSDK/AliPay/Domain/HoloGraphicContactInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/HomeApiContent.cs create mode 100644 PaymentSDK/AliPay/Domain/HomeApiRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/HomeApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/HospitalDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/HuanxuTradeOrderCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/HuanxuTradeOrderDisburseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/HuanxuTradeOrderPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/HuanxuTradeOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/HuanxuTradeOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ISVLogSync.cs create mode 100644 PaymentSDK/AliPay/Domain/IcrowdUseContext.cs create mode 100644 PaymentSDK/AliPay/Domain/IcrowdUseParam.cs create mode 100644 PaymentSDK/AliPay/Domain/IcrowdUseResp.cs create mode 100644 PaymentSDK/AliPay/Domain/IdCardImg.cs create mode 100644 PaymentSDK/AliPay/Domain/IdentityParam.cs create mode 100644 PaymentSDK/AliPay/Domain/IdentityParams.cs create mode 100644 PaymentSDK/AliPay/Domain/IgAuthQuota.cs create mode 100644 PaymentSDK/AliPay/Domain/Image.cs create mode 100644 PaymentSDK/AliPay/Domain/ImageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ImageTextItem.cs create mode 100644 PaymentSDK/AliPay/Domain/InStockStuffInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InboundOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/InboundOrderLine.cs create mode 100644 PaymentSDK/AliPay/Domain/InboundOrderVO.cs create mode 100644 PaymentSDK/AliPay/Domain/IndexBigbuyItem.cs create mode 100644 PaymentSDK/AliPay/Domain/IndexBlockBanner.cs create mode 100644 PaymentSDK/AliPay/Domain/IndexDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/IndirectIsvInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IndividualInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IndustryExtendField.cs create mode 100644 PaymentSDK/AliPay/Domain/IndustryQualificationInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IndustryQualificationInfoKt.cs create mode 100644 PaymentSDK/AliPay/Domain/InfoCode.cs create mode 100644 PaymentSDK/AliPay/Domain/InfoSecHitDetectItem.cs create mode 100644 PaymentSDK/AliPay/Domain/InfoSource.cs create mode 100644 PaymentSDK/AliPay/Domain/Informant.cs create mode 100644 PaymentSDK/AliPay/Domain/Injured.cs create mode 100644 PaymentSDK/AliPay/Domain/InputFieldModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InputScheduleLine.cs create mode 100644 PaymentSDK/AliPay/Domain/InputScheduleTime.cs create mode 100644 PaymentSDK/AliPay/Domain/InsAddressee.cs create mode 100644 PaymentSDK/AliPay/Domain/InsApplication.cs create mode 100644 PaymentSDK/AliPay/Domain/InsApplicationQuery.cs create mode 100644 PaymentSDK/AliPay/Domain/InsCertificate.cs create mode 100644 PaymentSDK/AliPay/Domain/InsCertificateApiDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsCertificatePaginationList.cs create mode 100644 PaymentSDK/AliPay/Domain/InsClaim.cs create mode 100644 PaymentSDK/AliPay/Domain/InsClaimAttachment.cs create mode 100644 PaymentSDK/AliPay/Domain/InsClaimPolicy.cs create mode 100644 PaymentSDK/AliPay/Domain/InsClaimReport.cs create mode 100644 PaymentSDK/AliPay/Domain/InsClaimReportProgress.cs create mode 100644 PaymentSDK/AliPay/Domain/InsCoupon.cs create mode 100644 PaymentSDK/AliPay/Domain/InsCoverage.cs create mode 100644 PaymentSDK/AliPay/Domain/InsCreateCertificateRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/InsDataAutodamageEstimateConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InsDataAutodamageEstimateResultDetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InsDataDsbEstimateResultDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/InsEndorseItem.cs create mode 100644 PaymentSDK/AliPay/Domain/InsHealthGainFlowResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InsHealthGiftBatchAlreadyOpenedResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InsHealthGiftBatchGainSumInsuredResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InsHealthGiftBatchMySumInsuredResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InsHealthGiftBatchValidGiftResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InsHealthSendFlowResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InsInvoiceApplyItem.cs create mode 100644 PaymentSDK/AliPay/Domain/InsLiability.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMerchant.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktCampaignDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktCouponBaseDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktCouponCampaignDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktCouponCmpgnBaseDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktCouponConfigDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktCouponDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktFactorDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktObjectDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktPreUseCampaignDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsMktPreUseCouponDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsObject.cs create mode 100644 PaymentSDK/AliPay/Domain/InsOffilneProduct.cs create mode 100644 PaymentSDK/AliPay/Domain/InsOption.cs create mode 100644 PaymentSDK/AliPay/Domain/InsOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InsPerson.cs create mode 100644 PaymentSDK/AliPay/Domain/InsPolicy.cs create mode 100644 PaymentSDK/AliPay/Domain/InsProdCoverage.cs create mode 100644 PaymentSDK/AliPay/Domain/InsProdResource.cs create mode 100644 PaymentSDK/AliPay/Domain/InsProdTag.cs create mode 100644 PaymentSDK/AliPay/Domain/InsProduct.cs create mode 100644 PaymentSDK/AliPay/Domain/InsQueryPerson.cs create mode 100644 PaymentSDK/AliPay/Domain/InsSceneTaskFlowDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InsSellerActivity.cs create mode 100644 PaymentSDK/AliPay/Domain/InsSumInsured.cs create mode 100644 PaymentSDK/AliPay/Domain/InsTradeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InstAccountDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InstAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InstAllocationQuotaVO.cs create mode 100644 PaymentSDK/AliPay/Domain/InstCashPoolAccountMappingVO.cs create mode 100644 PaymentSDK/AliPay/Domain/InstCashPoolAllocationRuleVO.cs create mode 100644 PaymentSDK/AliPay/Domain/InstRepayPlan.cs create mode 100644 PaymentSDK/AliPay/Domain/InstRuleCustomMemoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/InstallmentMetaInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InstallmentRepayPlan.cs create mode 100644 PaymentSDK/AliPay/Domain/InstallmentValue.cs create mode 100644 PaymentSDK/AliPay/Domain/InstanceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Institution.cs create mode 100644 PaymentSDK/AliPay/Domain/Insured.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentBudgetInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentClauseTerm.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentConstraintInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentDataCondition.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentDelayInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentDisplayConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentForbiddenTime.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentGeneralMerchantPromo.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentItemInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentMerchantPromo.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentPromoTool.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentPublishChannel.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentSendRule.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentUseRule.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentUseTime.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentVoucher.cs create mode 100644 PaymentSDK/AliPay/Domain/InteligentVoucherDescDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/IntelligentGuideTradeDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/IntelligentGuideTradeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IntelligentPromo.cs create mode 100644 PaymentSDK/AliPay/Domain/IntelligentPromoDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/IntelligentPromoEffect.cs create mode 100644 PaymentSDK/AliPay/Domain/IntelligentPromoShopSummaryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IntentQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/IntentQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/InterTradeConsultOpenApiResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InterTradeContractPartner.cs create mode 100644 PaymentSDK/AliPay/Domain/InterTradeStartContractApprovalResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InterfaceInfoList.cs create mode 100644 PaymentSDK/AliPay/Domain/IntroductionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvalidTradeDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/Inventory.cs create mode 100644 PaymentSDK/AliPay/Domain/InventoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InventoryItem.cs create mode 100644 PaymentSDK/AliPay/Domain/InventoryRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/InvestigCategoryData.cs create mode 100644 PaymentSDK/AliPay/Domain/InvestigCategoryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceAmountLimitDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceAmountLimitInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceApplyOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceCompanyDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceCompanyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceCompanyQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceContactDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceContactInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceElementModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceElementStatusSyncOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceItemApplyOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceItemContent.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceItemOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceItemQueryOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceKeyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceModelContent.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceOpenProductDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceOrderDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceOutputInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoicePDFSynModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceQueryOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceRegisterCreateDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceSendOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceTitleApplyOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceTitleModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceTitleOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceTitleQueryOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceTradeFundItem.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceTradeGoodsItem.cs create mode 100644 PaymentSDK/AliPay/Domain/InvoiceTradeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvokeAppInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/InvolvedEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/IotDevice.cs create mode 100644 PaymentSDK/AliPay/Domain/IotDeviceModel.cs create mode 100644 PaymentSDK/AliPay/Domain/IotDevicePersonalInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IotDevicePrincipal.cs create mode 100644 PaymentSDK/AliPay/Domain/IpAddrLbsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IsvCyclePropertyTimeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/IsvLogisticsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IsvMerchantInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/IsvShopDishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ItapDeviceControlAction.cs create mode 100644 PaymentSDK/AliPay/Domain/ItapDeviceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItapResponsePayload.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemBo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemCategoryVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemDeliveryDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemDiagnoseDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemDiagnoseType.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemDishInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemExt.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemInventory.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemLabelCreateInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemLabelModifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemOrderDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemOrderInfoResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemOrderOpenData.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemOrderVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemPackageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemProperty.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemPropertyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemResp.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemSkuCreateInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemSkuInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemSkuModifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemSkuPropertyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemStoreDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemUnitInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemUrl.cs create mode 100644 PaymentSDK/AliPay/Domain/ItemVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ItermInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/JFExportInputFieldModel.cs create mode 100644 PaymentSDK/AliPay/Domain/JfExportChargeInstModel.cs create mode 100644 PaymentSDK/AliPay/Domain/JfExportInstBillModel.cs create mode 100644 PaymentSDK/AliPay/Domain/JsApiBaseDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertAddChannelRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertAdvChannelResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertAdvContent.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertAdvContentResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertAdvResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertAdvSingleVoucherResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertCascadeCommissionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertChannelResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertCommissionClause.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertCommissionClausePercentage.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertCommissionClausePercentageResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertCommissionClauseQuota.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertCommissionClauseQuotaResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertCommissionClauseResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertContentCodec.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertContentPassword.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertContentPasswordModify.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertContentShareCode.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertContentShareCodeModify.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertContentShortLink.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertDealBillResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertIdentifyResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertMissionQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertMissionResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertMissionSubject.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertModifyChannelRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertPercentageCommissionClause.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertPreserveCommissionClause.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertProcessMissionResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertQuotaCommissionClause.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertSettleBillResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertSpecialAdvContentModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertSpecialAdvContentRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertSubjectResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertSubjectVoucher.cs create mode 100644 PaymentSDK/AliPay/Domain/KbAdvertSubjectVoucherResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbCodeBindInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/KbCodeInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/KbExtItemInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbGoodsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbIsvMaCode.cs create mode 100644 PaymentSDK/AliPay/Domain/KbItemInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbOrderActivityModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KbOrderFundsVoucherModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KbOrderShopModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KbOrderVoucherModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KbPosBillDishDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/KbPosOrderDishDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/KbTicketUseDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/KbVirtualShopCategoryDishInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbVirtualShopInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbadvertChannelTypeResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbadvertCommissionLimit.cs create mode 100644 PaymentSDK/AliPay/Domain/KbadvertRoleInfoResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbadvertSmartPromoRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/KbadvertSmartPromoResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/KbadvertVoucherManual.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishAreaFreeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishAreaInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCategorySimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCommGroupDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCommGroupInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCommRuleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCommRuleShowInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCookCateTopInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCookDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCookDetailSimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCookInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishCookPriceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishDictionary.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishEstimatedInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishGroupDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishGroupDetailSimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishGroupInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishGroupSimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishMaterialBindingInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishMaterialInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishMaterialSimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishPackagesDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishPracticeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishPropertyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishPropertySimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishPropertyValueInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishRuleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishSimplyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishSkuInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishSkuSimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishSpecGroup.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishSpecGroupDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishTabInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishVirtualCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishVirtualCatetorySimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishVirtualDishInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishVirtualDishSimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbdishVirtualShopSimplifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KbpFundTool.cs create mode 100644 PaymentSDK/AliPay/Domain/KcpLeadsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KdsDeviceModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KdsDishGroupInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KdsDishInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KdsInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KdsOrderInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KdsPrinterModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KeyValuePair.cs create mode 100644 PaymentSDK/AliPay/Domain/KeyWordDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KeyanColumn.cs create mode 100644 PaymentSDK/AliPay/Domain/Keyword.cs create mode 100644 PaymentSDK/AliPay/Domain/KmsBakingCheckDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KmsBakingInventoryDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KmsBakingPromotionDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KmsBakingSalesForecastDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/KnCertSendOrderDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/KnPrizeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionAdvchannelBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionAdvchannelBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionAdvchannelUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionAdvertPurchaseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionAdvertQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionCascademissionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionChannelBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionChannelCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionChannelDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionChannelModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionMissionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionMissionPromoteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionMissionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionMissionSearchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionRoleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertCommissionSpecialadvcontentModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDataPromotedetailBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDataPromotedetailChannelBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDataPromotesummaryDateBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDataPromotesummaryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDeliveryDiscountAuthwebBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDeliveryDiscountBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDeliveryDiscountGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDeliveryDiscountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDeliveryDiscountSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDeliveryDiscountWebBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiAdvertDeliveryItemApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringBizMovehomeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringBookShopbooknotableSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringBookShopbooktableSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringBookShopinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringCommodityOrderBuyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringConfigModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringCookConditionBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringCrowdgroupConditionQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringCrowdgroupConditionSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishAreaQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishAreaSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishCommgroupQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishCommgroupSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishCommruleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishCommruleSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishConditionBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishCookQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishCookSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishCookcatetopSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishCreatedishSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishDictionaryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishDictionarySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishEstimateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishEstimatedSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishGroupQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishGroupSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishMaterialCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishMaterialDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishMaterialModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishMaterialQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishMenuQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishMenuSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishQuerydishQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishRecommendQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishRemovedishDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishRuleCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishRuleDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishRuleModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishRuleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishSpecgroupQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishSpecgroupSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishVirtualcategoryDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishVirtualcategoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishVirtualcategorySyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishVirtualdishQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringDishVirtualdishSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringEleOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringItemCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringItemModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringItemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringItemlistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringKbcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringKbcodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringKdsInfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringKdsInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringKmsBakingBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringKmsBakingSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringKmsOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderBillApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderBillCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderInfoCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderInfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderInfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderInfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderInfoVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderPayApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderPayCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderPayConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderPayDisburseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderPayQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderPushSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosCategoryCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosCategoryDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosCategoryModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosCategoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosCategorySaveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosCategorylistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosCooklistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDeskCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDeskDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDeskModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDeskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDeskTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDeskareaQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDeskareaSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDishBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDishQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDishSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDishbatchDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDishcateTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDishgroupSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosDishstatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosMaterialCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosMaterialDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosMaterialModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosMaterialQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosOrderUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosParamModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosParamQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPaymodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPaymodeDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPaymodeModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPaymodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPaymodesortModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPracticeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPracticeDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPracticeModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPracticeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosPrintQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosQrcodeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosShiftQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosShiftSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosSidedishbatchSaveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosSpecQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosSpecSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosStallCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosStallDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosStallModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosStallQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosStalldetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosStallerrorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringPosStallrepairModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringQueueShopinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringQueueShopqueueinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringQueueShopqueuestatusSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringServiceOrderModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringSmartstoreDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringTablecodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCateringTablelistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiContentContentcountSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiContentContentinfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiContentContentinfoDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiContentContentinfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiContentContentstatusModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCraftsmanDataProviderBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCraftsmanDataProviderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCraftsmanDataProviderModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCraftsmanDataWorkBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCraftsmanDataWorkCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCraftsmanDataWorkDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiCraftsmanDataWorkModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemCategoryChildrenBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemDescription.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemCategoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemExistedQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemInfoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemInfoDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemExtitemUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemStateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiItemTaobaoIndexQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallCircleRecommenditemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallEventSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchaseDiscountdetailModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchasePreorderCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchasePreorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchasePreorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchaseTradeConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchaseTradePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchaseTraderesultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchaseUserpreorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMallScanpurchaseUserverifyVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingAdvertisingCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingAdvertisingModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingAdvertisingOperateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingAdvertisingQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignActivityBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignActivityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignActivityModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignActivityOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignActivityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignAssetDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignBenefitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignBenefitSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignCrowdBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignCrowdCountModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignCrowdCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignCrowdDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignCrowdDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignCrowdModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignDetailInfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignIntelligentPromoBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignIntelligentPromoConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignIntelligentPromoCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignIntelligentPromoDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignIntelligentPromoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignIntelligentPromoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignIntelligentShopConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignIntelligentTemplateConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignItemBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignItemMerchantactivityBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignItemMerchantactivityCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignItemMerchantactivityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignItemMerchantactivityModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignItemMerchantactivityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignItemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMallInviteQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberAuthApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberRelationBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberRelationCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberRelationModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberRelationUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberTemplateBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberTemplateBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberTemplateCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberTemplateModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberTemplateOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMemberTemplateOnlineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMerchantActivityBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMerchantActivityCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMerchantActivityModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMerchantActivityOfflineModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignMerchantActivityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignOpenDeliveryCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignOpenDeliveryDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignQrcodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignRecruitApplyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignRecruitShopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignRetailDmCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignRetailDmModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignRetailDmQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignRetailDmSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignUserAssetQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingCampaignVoucherDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataActivityBillDownloadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataActivityReportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataAlisisReportBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataAlisisReportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataBizadviserMemberprofileQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataBizadviserMyddsreportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataBizadviserMyreportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataCustomreportBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataCustomreportDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataCustomreportDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataCustomreportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataCustomreportSaveModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataDishdiagnoseBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataEnterpriseStaffinfoUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataIndicatorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataIntelligentEffectQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataIntelligentIndicatorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataIsvShopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataMallCheckGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataMallDiscountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataMallIndicatorQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataMallRecommendGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataMallShopitemsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataMemberReportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataMessageDeliverModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataNearmallQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataRetailDmQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataSceneMemberpointsGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataSceneParkingGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataSceneParkingoutUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataSceneTravelGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataShopCategoryGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataSmartactivityConfigModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataSmartactivityForecastModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingDataTradeHabbitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingMallMemberModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingMallShoppromoinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingMallTradeBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingMallTradeSubscribeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingTessssssssssstQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingToolIsvMerchantQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingToolMallPointsSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingToolPointsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingToolPointsUpdateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMarketingToolPrizesendAuthModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMemberDataDesdBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMemberDataIsvCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMemberDataItemBigbuyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMemberDataItemNearbyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMemberDataOauthQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMemberDataOutuserinfoModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMemberDataTagQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDepartmentBatchBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDepartmentCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDepartmentDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDepartmentDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDepartmentModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDepartmentShopModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDepartmentShopsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDepartmentTreeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDeviceCrashinfoUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantDeviceHeartbeatUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantInfoSimpleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantKbcloudSubuserinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantKbcloudSubuserloginstatusQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantKbcloudSubuserlogoutEffectModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantKbdeviceDevicesBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantKbdeviceDispenserQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorBatchDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorDetailsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorFreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorRoleCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorRoleDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorRoleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorRolerelationBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorSearchBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorSearchQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorShopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantOperatorUnfreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantRole.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantRoleDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantRolePermissionCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiMerchantShopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiOperationContext.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiQualityTestCloudacptActivityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiQualityTestCloudacptBatchQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiQualityTestCloudacptCheckresultSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiQualityTestCloudacptItemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiQualityTestShieldCaselaunchApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiQualityTestShieldOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiQualityTestShieldResultSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiQualityTestShieldTestcaseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailExtitemShopextitemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailInstanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailInstanceTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailItemQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailKbcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailKbcodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailMallCdpQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailShopitemBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailShopitemModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailShopitemUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailTopinstanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsBatchinventoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsCategoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsDeliveryorderprocessQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsDeliverypackageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsGoodsBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsGoodsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsGoodssafetyinventoryBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsGoodssafetyinventoryModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInboundorderBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInboundorderConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInboundorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInboundorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInboundworkConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInboundworkCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInboundworkDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInboundworkModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInventoryBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInventoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsInventoryrecordQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsOutboundorderBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsOutboundorderConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsOutboundorderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsOutboundorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsOutboundworkConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsOutboundworkCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsOutboundworkDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsOutboundworkModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsPartnerQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsProducerBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsProducerQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsSupplierQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsSupplierreportQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsSupplierreportdetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsWarehouseModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsWarehouseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsWorkBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiRetailWmsWorkQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffCancelstockinorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffCancelstockoutorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffFeedbackstockorderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffInventoryrealtimeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffLogisticsinstockSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffLogisticsoutstockSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffOrdersresultSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffPagequerystuffinfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffProduceorderBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffProduceqrcodeBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffPurchaseorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffPurordersendSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffQrcodereturnSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffQuerygoodsreturnordeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffQuerystockinorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffQuerystockoutorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbassetStuffStockoutorderstatusSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesKbsalesShopSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesLeadsSaleleadsCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSalesLeadsShopleadsCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiSecurityRiskEventSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseItemSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseMemberCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseMemberDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseMemberModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseMemberphoneSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseNoticeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExercisePlanDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExercisePlanSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExercisePlancourseSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseRecordDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseRecordSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryExerciseRecordcourseSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryLeadsRecordBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryNatatoriumWaterqualityUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPortfolioDataCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPortfolioDataDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPortfolioDataModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPortfolioOpusBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPortfolioOpusCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPortfolioOpusDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPortfolioShopBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPromoIntelligentguideConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPromoIntelligentguideOrderModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryPromoIntelligentguideSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryReservationIsvorderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryReservationLeadsModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryReservationPayshopIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryReservationResourceSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryReservationResourcestatusSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryReservationShopBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryReservationShopUnbindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiServindustryShopLicenseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiShopExternalDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiShopMallAuditQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiShopMallCardQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiShopMallMemberIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiShopMallMemberQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiShopMallPageModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiShopMallPageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiShopWxloginQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeBillDownloadurlQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeItemBuyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeItemorderBuyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeItemorderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeItemorderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeKbdeliveryDeliveryApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeKbdeliveryDeliveryCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeKbpaymentPayorderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderAggregateConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderAggregatePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderAggregateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderAggregateRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderEnterpriseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderEnterpriseSettleModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderPrecreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeOrderRefundQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradePosDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketSendCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketTicketcodeCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketTicketcodeCheckavailableModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketTicketcodeDelayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketTicketcodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketTicketcodeSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketTicketcodeSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketTicketcodeUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketUsedRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeTicketUserticketcodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/KoubeiTradeVoucherItemTemplete.cs create mode 100644 PaymentSDK/AliPay/Domain/LabelContext.cs create mode 100644 PaymentSDK/AliPay/Domain/LabelFilter.cs create mode 100644 PaymentSDK/AliPay/Domain/LabelForOpenapi.cs create mode 100644 PaymentSDK/AliPay/Domain/LabelRule.cs create mode 100644 PaymentSDK/AliPay/Domain/LawsuitPersonRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/LawsuitRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/LeadsOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LegalRepresentativeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LegalRepresentativeVO.cs create mode 100644 PaymentSDK/AliPay/Domain/LendingRecords.cs create mode 100644 PaymentSDK/AliPay/Domain/Liability.cs create mode 100644 PaymentSDK/AliPay/Domain/LiabilityQuoteInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LicenseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LifeLabel.cs create mode 100644 PaymentSDK/AliPay/Domain/LifeRecommendArticles.cs create mode 100644 PaymentSDK/AliPay/Domain/ListListComplexMockModel.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanApplyBudgetVO.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanChargeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanMoneyTypeAmt.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanPayAssetResult.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanPayConsultOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanPayInstallment.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanPayUser.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanRepayPlanTerm.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanScheme.cs create mode 100644 PaymentSDK/AliPay/Domain/LoanTerm.cs create mode 100644 PaymentSDK/AliPay/Domain/LocationInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LoginForm.cs create mode 100644 PaymentSDK/AliPay/Domain/LogisticsDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/LogisticsExternalCarrierInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LogisticsExternalInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LogisticsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/LotteryPresent.cs create mode 100644 PaymentSDK/AliPay/Domain/LotteryType.cs create mode 100644 PaymentSDK/AliPay/Domain/MActivityDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MBudgetInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MCardDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/MEquityDisplayInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MEquityInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MEquityUseRule.cs create mode 100644 PaymentSDK/AliPay/Domain/MEquityValidInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MEquityWorthInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MItemInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MMemberLevel.cs create mode 100644 PaymentSDK/AliPay/Domain/MPromoConstraint.cs create mode 100644 PaymentSDK/AliPay/Domain/MPromoInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MStepCashRule.cs create mode 100644 PaymentSDK/AliPay/Domain/MTimeControlInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MachineInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MachineType.cs create mode 100644 PaymentSDK/AliPay/Domain/MaintainBizOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/MaintainBizOrderExpress.cs create mode 100644 PaymentSDK/AliPay/Domain/MaintainBizOrderGoods.cs create mode 100644 PaymentSDK/AliPay/Domain/MaintainBizOrderServer.cs create mode 100644 PaymentSDK/AliPay/Domain/MaintainOrderStatusExtParams.cs create mode 100644 PaymentSDK/AliPay/Domain/MaintainVehicleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MaitainShopProduct.cs create mode 100644 PaymentSDK/AliPay/Domain/MakePriceAgrs.cs create mode 100644 PaymentSDK/AliPay/Domain/MakePriceCards.cs create mode 100644 PaymentSDK/AliPay/Domain/MakePriceResult.cs create mode 100644 PaymentSDK/AliPay/Domain/MallCardBo.cs create mode 100644 PaymentSDK/AliPay/Domain/MallCardUpdate.cs create mode 100644 PaymentSDK/AliPay/Domain/MallConsumeVoucher.cs create mode 100644 PaymentSDK/AliPay/Domain/MallDiscountDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/MallGoodsDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/MallUserVerify.cs create mode 100644 PaymentSDK/AliPay/Domain/ManagerVO.cs create mode 100644 PaymentSDK/AliPay/Domain/MapParameter.cs create mode 100644 PaymentSDK/AliPay/Domain/MarketInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MarketResult.cs create mode 100644 PaymentSDK/AliPay/Domain/MarketingInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MarketingItemSelection.cs create mode 100644 PaymentSDK/AliPay/Domain/MarketingSelectionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MaskedLogonIdView.cs create mode 100644 PaymentSDK/AliPay/Domain/MaskedUserCertView.cs create mode 100644 PaymentSDK/AliPay/Domain/Matcher.cs create mode 100644 PaymentSDK/AliPay/Domain/Material.cs create mode 100644 PaymentSDK/AliPay/Domain/MaterialCreateInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MaterialDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/MaterialEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/MaterialInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MaterialModifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MaterialUnit.cs create mode 100644 PaymentSDK/AliPay/Domain/McardNotifyMessage.cs create mode 100644 PaymentSDK/AliPay/Domain/McardStylInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/McardTemplate.cs create mode 100644 PaymentSDK/AliPay/Domain/McardTemplateBenefit.cs create mode 100644 PaymentSDK/AliPay/Domain/McardTemplateBenefitQuery.cs create mode 100644 PaymentSDK/AliPay/Domain/MdCodeInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/MediaContentList.cs create mode 100644 PaymentSDK/AliPay/Domain/MedicalHospitalDeptInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MedicalHospitalDoctorInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MedicalHospitalInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MedicalHospitalReportList.cs create mode 100644 PaymentSDK/AliPay/Domain/MedicalSvTpCardActionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MedicalSvTpCardBodyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MedicalSvTpCardHeadInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Member.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberActionModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberAssetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberBenefitInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberBenefitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberLevelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberOpenInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberPointsScene.cs create mode 100644 PaymentSDK/AliPay/Domain/MemberShip.cs create mode 100644 PaymentSDK/AliPay/Domain/MemoElement.cs create mode 100644 PaymentSDK/AliPay/Domain/MenuAnalysisData.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantActivityModifyVoucherInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantActivityVoucherInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantApplyResultRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantBaseEnterOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantCard.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantConfigRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantEffectQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantIDInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantInstConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantInvoiceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantInvoiceInfoKt.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantMemberTemplateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantMenber.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantOnlineActivityOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantScreenHit.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantshopCommentResult.cs create mode 100644 PaymentSDK/AliPay/Domain/MerchantshopCommentStatistic.cs create mode 100644 PaymentSDK/AliPay/Domain/MessageContext.cs create mode 100644 PaymentSDK/AliPay/Domain/MessageTemplate.cs create mode 100644 PaymentSDK/AliPay/Domain/MessageTemplateKeyword.cs create mode 100644 PaymentSDK/AliPay/Domain/MeterOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MetroOdDetailResult.cs create mode 100644 PaymentSDK/AliPay/Domain/MetroOdItem.cs create mode 100644 PaymentSDK/AliPay/Domain/MicroPayOrderDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniActivityModuleQueryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppBaseInfoQueryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppBaseInfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppCategory.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppClientVersionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppDeployResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppFirstCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppHistoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppModelQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppPackageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppPluginInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppPluginReference.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppSecondCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppServiceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppVersionBaseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppVersionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniAppVersionQueryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniPackageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniVersionBaseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MiniappCloudDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MobileAppInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ModelColumn.cs create mode 100644 PaymentSDK/AliPay/Domain/ModelMeta.cs create mode 100644 PaymentSDK/AliPay/Domain/ModelQueryParam.cs create mode 100644 PaymentSDK/AliPay/Domain/Money.cs create mode 100644 PaymentSDK/AliPay/Domain/MoreInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoAppItem.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoCreateApp.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoCreateSource.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoIdentity.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoMiniMeta.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoPaginator.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoSource.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoTemplate.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoTemplateItem.cs create mode 100644 PaymentSDK/AliPay/Domain/MorphoUser.cs create mode 100644 PaymentSDK/AliPay/Domain/MpPrizeInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MsgSendErrorData.cs create mode 100644 PaymentSDK/AliPay/Domain/MstDataSyncServiceEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/MultiAppBaseInfoDto.cs create mode 100644 PaymentSDK/AliPay/Domain/MultiCurrencyMoney.cs create mode 100644 PaymentSDK/AliPay/Domain/MultiCurrencyMoneyOpenApi.cs create mode 100644 PaymentSDK/AliPay/Domain/MultiCurrencyMoneyVO.cs create mode 100644 PaymentSDK/AliPay/Domain/MultiStagePayInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MultiStagePayLineInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/MutipleCurrencyDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/MyBkAccountVO.cs create mode 100644 PaymentSDK/AliPay/Domain/MyObjectDdd.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditCreditriskConsultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditCreditriskDsddAdmitConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditCreditriskGuarschemeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditCreditriskWidgetQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditGuaranteeContractSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditGuaranteeContractUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditGuaranteeSelleradmittanceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditGuaranteeTradedrivePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditGuaranteeWriteoffPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyApplyCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyApplyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyArrangementCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyArrangementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyDataQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyDataUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyInsturlQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyLocallifeBlacklistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyPromotionDynamicurlGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyQrcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplyQrcodeInvalidDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoanapplySmartcountyLoaninfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeBillBudgetQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeBillListQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeBillRepayCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeLoanarCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeLoanarQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeLoanarRepayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeLoanarrangementQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeLoanpayAssetConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeLoanrelationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeLoanschemeFullQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeLoanschemeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeNewloanarRepayApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradePartnerPaymentApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradePartnerPaymentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradePayAssetConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeRepayBudgetQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeRepayCustApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeRepayInitiativeApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditLoantradeShoptransferConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditProdarrangementContracttextQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodBillSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodDataBatchqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodDataUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodDrawdownApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodDrawdownConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodFinanceConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodInstAuthConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodLoanApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodLoanAssetTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodLoanCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodLoanConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodLoanModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodLoanQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodPaymentApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodPaymentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodPlanQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodPreadmitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodPrepaymentApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodRepayDeputyApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSceneprodVidGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainArAdmitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainArSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainArUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpayAmountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpayBillQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpayBuyersignCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpayBuyerunsignCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpayBuyerunsignadmitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpayOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpaySellersignCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpaySellersignadmitQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpaySellerunsignCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpaySellerunsignQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpaySyncnameCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainCreditpayTradeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainFactoringSupplierCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainInventoryOutApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainInventoryOutConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainPrepaymentApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainPrepaymentCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainTradeBillrepaybudgetQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainTradeCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainTradeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainTradeNettingRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainTradePayConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainTradePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditSupplychainTradePayableQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserBankcardBindModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserCertifyOpenQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserInfoShareQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserOpenCertifyCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserOpenCertifyInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserRoleCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserRoleQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserSitememberEnterpriseMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankCreditUserSystemOauthQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankFinanceAccountRysenterpriseQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankFinanceYulibaoAccountQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankFinanceYulibaoCapitalPurchaseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankFinanceYulibaoCapitalRansomModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankFinanceYulibaoPriceQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankFinanceYulibaoTransHistoryQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankMarketingCampaignPrizeListConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankMarketingCampaignPrizeListQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeAccountSubvirtualcardCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeBankBranchQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeBankRootQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeDepositVerifyApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeDepositVerifyMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeDepositVerifyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeDistrictQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeFinancingOrderCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeFinancingOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeFinancingOrderRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeNormalpayOperateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeNormalpayOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeNormalpayOrderCreateandpayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeNormalpayOrderDisburseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeNormalpayOrderPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeNormalpayOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeNormalpayTransferModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeOrderCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeQrcodeCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeQrcodeDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/MybankPaymentTradeUserclassificationCreateormodifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/NameOuterIdPair.cs create mode 100644 PaymentSDK/AliPay/Domain/NearMallBo.cs create mode 100644 PaymentSDK/AliPay/Domain/NearbyAddressInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/NearbyGoods.cs create mode 100644 PaymentSDK/AliPay/Domain/Neighborhood.cs create mode 100644 PaymentSDK/AliPay/Domain/NetFlowDeviceOfferInfoResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/NetFlowOfferInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/NetValueVO.cs create mode 100644 PaymentSDK/AliPay/Domain/NewsfeedLabelInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/NewsfeedLocationInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/NewsfeedMediaGiftInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/NewsfeedMediaImg.cs create mode 100644 PaymentSDK/AliPay/Domain/NewsfeedMediaLinkInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/NewsfeedMediaVideoInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/NewsfeedWithMeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/NextUrl.cs create mode 100644 PaymentSDK/AliPay/Domain/NormalBusinessTimeRule.cs create mode 100644 PaymentSDK/AliPay/Domain/NotaryFileVO.cs create mode 100644 PaymentSDK/AliPay/Domain/NoticeTemplateArgs.cs create mode 100644 PaymentSDK/AliPay/Domain/NotifyParam.cs create mode 100644 PaymentSDK/AliPay/Domain/OcrIdentifyResult.cs create mode 100644 PaymentSDK/AliPay/Domain/OcrNormalScanInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OcrPlaneScanInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OcrTaxiScanInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OcrTrainScanInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OfferObject.cs create mode 100644 PaymentSDK/AliPay/Domain/OfflineInviteNewerDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OfflineInviteNewerSummaryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OfflinepayBaseRPCResponseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OfflinepayErrorIndicator.cs create mode 100644 PaymentSDK/AliPay/Domain/OilStationDetails.cs create mode 100644 PaymentSDK/AliPay/Domain/OldComplextMockModel.cs create mode 100644 PaymentSDK/AliPay/Domain/OldListListComplexMockModel.cs create mode 100644 PaymentSDK/AliPay/Domain/OnlineInviteNewerDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OnlineInviteNewerSummaryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenActivity.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiAppleRequestHeader.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiPassStatus.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiProvisioningBundle.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiRefundFundDetailPojo.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiResolutionMethod.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiResponseHeader.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiRoyaltyDetailInfoPojo.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiSignQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenApiValidStrategy.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenAppDeployPackageVO.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenBatch.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenCertPic.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenFormFieldDO.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenItem.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenPromoBudget.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenPromoCamp.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenPromoPrize.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenPromoPrizeDimension.cs create mode 100644 PaymentSDK/AliPay/Domain/OpenPromoPrizeRelativeTime.cs create mode 100644 PaymentSDK/AliPay/Domain/OperateContext.cs create mode 100644 PaymentSDK/AliPay/Domain/OperationAddress.cs create mode 100644 PaymentSDK/AliPay/Domain/OperationExtDataModel.cs create mode 100644 PaymentSDK/AliPay/Domain/OperatorAccountVO.cs create mode 100644 PaymentSDK/AliPay/Domain/OperatorAddVO.cs create mode 100644 PaymentSDK/AliPay/Domain/OperatorBaseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OperatorBasicInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OperatorContactVO.cs create mode 100644 PaymentSDK/AliPay/Domain/OperatorInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OperatorInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/OperatorQuery.cs create mode 100644 PaymentSDK/AliPay/Domain/Option.cs create mode 100644 PaymentSDK/AliPay/Domain/OpusCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/OpusInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderApplyStatusBriefDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderDetailResult.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderExt.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderItem.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderLogisticsExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderLogisticsInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderLogisticsInformation.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderLogisticsInformationRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderRefundInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderShopInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderShopInfoResult.cs create mode 100644 PaymentSDK/AliPay/Domain/OrderVO.cs create mode 100644 PaymentSDK/AliPay/Domain/Org.cs create mode 100644 PaymentSDK/AliPay/Domain/OriDestOdItem.cs create mode 100644 PaymentSDK/AliPay/Domain/OriTxnInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OtherAmountInfos.cs create mode 100644 PaymentSDK/AliPay/Domain/OutDiscountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OutStockStuffInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OutboundOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/OutboundOrderLine.cs create mode 100644 PaymentSDK/AliPay/Domain/OutboundOrderVO.cs create mode 100644 PaymentSDK/AliPay/Domain/OuterAttachment.cs create mode 100644 PaymentSDK/AliPay/Domain/OuterGroup.cs create mode 100644 PaymentSDK/AliPay/Domain/OuterMemberInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/OuterPlan.cs create mode 100644 PaymentSDK/AliPay/Domain/OuterShopDO.cs create mode 100644 PaymentSDK/AliPay/Domain/OuterTargetingItem.cs create mode 100644 PaymentSDK/AliPay/Domain/OverseasTravelRate.cs create mode 100644 PaymentSDK/AliPay/Domain/PItemInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/POIinfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PackageItemOpenInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PageCreative.cs create mode 100644 PaymentSDK/AliPay/Domain/PageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PageVisitDataResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/PaginationCommGroup.cs create mode 100644 PaymentSDK/AliPay/Domain/PaginationCook.cs create mode 100644 PaymentSDK/AliPay/Domain/PaginationDish.cs create mode 100644 PaymentSDK/AliPay/Domain/Pair.cs create mode 100644 PaymentSDK/AliPay/Domain/Paragraph.cs create mode 100644 PaymentSDK/AliPay/Domain/ParamExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ParamModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ParkingGoodsDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ParkingOutScene.cs create mode 100644 PaymentSDK/AliPay/Domain/ParkingScene.cs create mode 100644 PaymentSDK/AliPay/Domain/Participant.cs create mode 100644 PaymentSDK/AliPay/Domain/PartnerVO.cs create mode 100644 PaymentSDK/AliPay/Domain/PassInfoOpenApiModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PassInstanceDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PassTemplateDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegeCardTemplateAuxiliaryItem.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegeCardTemplateConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegeCardTemplateHeaderConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegeCardTemplateOperationItem.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegeCardTemplateSecondaryItem.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegePaidVoucherConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegePromotionPlanInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegeRechargeCardUseLog.cs create mode 100644 PaymentSDK/AliPay/Domain/PayForPrivilegeUserRelation.cs create mode 100644 PaymentSDK/AliPay/Domain/PayModeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PayOffOrderVO.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentAbilityPostbackResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentAbilityQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentCredential.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentInformation.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentItems.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentList.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentSchedule.cs create mode 100644 PaymentSDK/AliPay/Domain/PaymentSuccessPagePlanInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PaytoolCancelRequestDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PaytoolRefundRequestDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PaytoolRefundResultDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PaytoolRequestDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PaytoolResultDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PeriodInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PeriodRuleParams.cs create mode 100644 PaymentSDK/AliPay/Domain/Person.cs create mode 100644 PaymentSDK/AliPay/Domain/PersonalityInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/PersonnalBankAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Picture.cs create mode 100644 PaymentSDK/AliPay/Domain/PidShopInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PintuanUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PintuanUserInfos.cs create mode 100644 PaymentSDK/AliPay/Domain/PkgAuthRelation.cs create mode 100644 PaymentSDK/AliPay/Domain/PlanOperateContent.cs create mode 100644 PaymentSDK/AliPay/Domain/PlanRule.cs create mode 100644 PaymentSDK/AliPay/Domain/PlantPlace.cs create mode 100644 PaymentSDK/AliPay/Domain/PlateInfoForYiCai.cs create mode 100644 PaymentSDK/AliPay/Domain/PoiQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/PoiSyncData.cs create mode 100644 PaymentSDK/AliPay/Domain/PointAccountLog.cs create mode 100644 PaymentSDK/AliPay/Domain/PointCard.cs create mode 100644 PaymentSDK/AliPay/Domain/PointLibResult.cs create mode 100644 PaymentSDK/AliPay/Domain/PointPrizeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PointTransInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PointsExchangeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PortfolioDetailProductInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PortfolioInfoOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PortfolioOperatorInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PortfolioShop.cs create mode 100644 PaymentSDK/AliPay/Domain/PortraitDistribution.cs create mode 100644 PaymentSDK/AliPay/Domain/PosBillPayChannel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosChooseDishGroupModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosCookDishCateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosCookDishQryDetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosCookDishQryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDeviceInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDiscountDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDishCookModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDishGroupDetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDishGroupModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDishMaterialModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDishModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDishPracticeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosDishQryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosFixedDishGroupModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosOrderDeviceInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/PosOrderInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/PosOrderKey.cs create mode 100644 PaymentSDK/AliPay/Domain/PosSkuModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PosStallModel.cs create mode 100644 PaymentSDK/AliPay/Domain/Position.cs create mode 100644 PaymentSDK/AliPay/Domain/PracticeEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/PreAmountClauseResult.cs create mode 100644 PaymentSDK/AliPay/Domain/PreAmountInfoResult.cs create mode 100644 PaymentSDK/AliPay/Domain/PreOrderConfigInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PreOrderResult.cs create mode 100644 PaymentSDK/AliPay/Domain/PreRepayPlanTermVO.cs create mode 100644 PaymentSDK/AliPay/Domain/PresetPayToolInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PriceDetailDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/PriceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PriceInformation.cs create mode 100644 PaymentSDK/AliPay/Domain/PricingVO.cs create mode 100644 PaymentSDK/AliPay/Domain/Principal.cs create mode 100644 PaymentSDK/AliPay/Domain/PrincipalForOpenapi.cs create mode 100644 PaymentSDK/AliPay/Domain/PrincipalInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PrintModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizeConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizeCustomMenu.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizeDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizeLiteInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizeOrderVO.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizePriceStrategy.cs create mode 100644 PaymentSDK/AliPay/Domain/PrizeValidPeriod.cs create mode 100644 PaymentSDK/AliPay/Domain/ProdIPRelationVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ProdLORelationVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ProdMarkRelationVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ProdParams.cs create mode 100644 PaymentSDK/AliPay/Domain/ProdRelationVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ProdResource.cs create mode 100644 PaymentSDK/AliPay/Domain/ProducerVO.cs create mode 100644 PaymentSDK/AliPay/Domain/Product.cs create mode 100644 PaymentSDK/AliPay/Domain/ProductBaseVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ProductInviteStatusInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ProductOrderDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ProductOrderQueryItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ProductProvider.cs create mode 100644 PaymentSDK/AliPay/Domain/ProductSignStatusInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ProductVOOptions.cs create mode 100644 PaymentSDK/AliPay/Domain/ProfileSnDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PromiseConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoItemInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoOperatorInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoPageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoPageResult.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoParam.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoTool.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoVoucherInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoteDataModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoteDateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoteDetailChannelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoteDetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoteItemModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PromotePage.cs create mode 100644 PaymentSDK/AliPay/Domain/PromotePageStatistic.cs create mode 100644 PaymentSDK/AliPay/Domain/PromotionDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/PromotionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PromoxCrowdMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/PropertyAuthInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PubChannelDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/PublicAuditStatus.cs create mode 100644 PaymentSDK/AliPay/Domain/PublicBindAccount.cs create mode 100644 PaymentSDK/AliPay/Domain/PublicLabel.cs create mode 100644 PaymentSDK/AliPay/Domain/PublicMessageBody.cs create mode 100644 PaymentSDK/AliPay/Domain/PublicMessageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/PublicMsgKeyword.cs create mode 100644 PaymentSDK/AliPay/Domain/PublishChannel.cs create mode 100644 PaymentSDK/AliPay/Domain/PurchaseApplyInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/QRcode.cs create mode 100644 PaymentSDK/AliPay/Domain/QrcodeEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryComplexLabelRule.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryDetailAopResult.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryExtension.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryGroup.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryInstBillDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryInstBillInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryLabelRule.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryMenu.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryProvCityInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/QueryUserChargeInstAndAreaInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/QuestInstanceDO.cs create mode 100644 PaymentSDK/AliPay/Domain/QuestInstanceDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/QueueInfoModify.cs create mode 100644 PaymentSDK/AliPay/Domain/QuotaGradientRule.cs create mode 100644 PaymentSDK/AliPay/Domain/QuoteInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RandomDiscountDstCampPrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/RateCurrency.cs create mode 100644 PaymentSDK/AliPay/Domain/RatioDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/RebateGood.cs create mode 100644 PaymentSDK/AliPay/Domain/RecItemInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RecResultInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ReceiptBizData.cs create mode 100644 PaymentSDK/AliPay/Domain/ReceiptDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ReceiptDiscountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ReceiptQuoteInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ReceiptSku.cs create mode 100644 PaymentSDK/AliPay/Domain/ReceivableConfirmOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/ReceiverAddressInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ReceiverInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/RechargeBill.cs create mode 100644 PaymentSDK/AliPay/Domain/RechargeDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/RechargeDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/RecomPlan.cs create mode 100644 PaymentSDK/AliPay/Domain/RecomProduct.cs create mode 100644 PaymentSDK/AliPay/Domain/RecommendCard.cs create mode 100644 PaymentSDK/AliPay/Domain/RecommendInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RecommendServiceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RecordDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/RecruitInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RecruitItemApplyData.cs create mode 100644 PaymentSDK/AliPay/Domain/RecruitShopInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RecruitTool.cs create mode 100644 PaymentSDK/AliPay/Domain/ReduceDstCampPrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ReduceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ReduceToAmtDstCampPrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ReduceToDiscountDstCampPrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/RefundDescriptionDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/RefundDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/RefundExtendParams.cs create mode 100644 PaymentSDK/AliPay/Domain/RefundInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RefundList.cs create mode 100644 PaymentSDK/AliPay/Domain/RefundRoyaltyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RefundRoyaltyResult.cs create mode 100644 PaymentSDK/AliPay/Domain/RefundUnfreezeResult.cs create mode 100644 PaymentSDK/AliPay/Domain/Refuse.cs create mode 100644 PaymentSDK/AliPay/Domain/RefuseVo.cs create mode 100644 PaymentSDK/AliPay/Domain/RegionInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RegionState.cs create mode 100644 PaymentSDK/AliPay/Domain/RelationCombinedVO.cs create mode 100644 PaymentSDK/AliPay/Domain/RelationInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RelationVO.cs create mode 100644 PaymentSDK/AliPay/Domain/RemoveTagRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/RemoveTagResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/RemoveTagResult.cs create mode 100644 PaymentSDK/AliPay/Domain/RepairItem.cs create mode 100644 PaymentSDK/AliPay/Domain/RepayDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/RepayDetailVO.cs create mode 100644 PaymentSDK/AliPay/Domain/RepayPlanTermVO.cs create mode 100644 PaymentSDK/AliPay/Domain/RepayTradeDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/RepaymentRecords.cs create mode 100644 PaymentSDK/AliPay/Domain/ReportCar.cs create mode 100644 PaymentSDK/AliPay/Domain/ReportCondition.cs create mode 100644 PaymentSDK/AliPay/Domain/ReportDataItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ReportErrorFeature.cs create mode 100644 PaymentSDK/AliPay/Domain/ReportQueryCondition.cs create mode 100644 PaymentSDK/AliPay/Domain/RequestExtShopItem.cs create mode 100644 PaymentSDK/AliPay/Domain/RequestExtShopItemQuery.cs create mode 100644 PaymentSDK/AliPay/Domain/ReservationTimeUnit.cs create mode 100644 PaymentSDK/AliPay/Domain/ResetZeroDstCampPrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/RestTime.cs create mode 100644 PaymentSDK/AliPay/Domain/Result.cs create mode 100644 PaymentSDK/AliPay/Domain/RetailItemDescription.cs create mode 100644 PaymentSDK/AliPay/Domain/RetailKbcodeCreateVo.cs create mode 100644 PaymentSDK/AliPay/Domain/RetailKbcodeQueryVo.cs create mode 100644 PaymentSDK/AliPay/Domain/Retailer.cs create mode 100644 PaymentSDK/AliPay/Domain/RiskConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/RiskProfileDto.cs create mode 100644 PaymentSDK/AliPay/Domain/RiskRankInfoCode.cs create mode 100644 PaymentSDK/AliPay/Domain/RiskResult.cs create mode 100644 PaymentSDK/AliPay/Domain/Road.cs create mode 100644 PaymentSDK/AliPay/Domain/Roadinter.cs create mode 100644 PaymentSDK/AliPay/Domain/RoyaltyDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RoyaltyDetailInfos.cs create mode 100644 PaymentSDK/AliPay/Domain/RoyaltyEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/RoyaltyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RtaInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/RubbishDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/SCardQueryVO.cs create mode 100644 PaymentSDK/AliPay/Domain/Sale.cs create mode 100644 PaymentSDK/AliPay/Domain/SaleProduct.cs create mode 100644 PaymentSDK/AliPay/Domain/Scene.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneContent.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneDataQueryParam.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneDataQueryResultDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneDrawdownDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneExtParam.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneMarketingContent.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneMarketingContentGroup.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneMarketingHeader.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneProdBillDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneProdDataQueryParam.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneProdDataQueryResultDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneProdDeputyPaymentBillDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneProdDeputyPaymentBillQuery.cs create mode 100644 PaymentSDK/AliPay/Domain/SceneProdPaymentAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ScenicFaceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleConfigGetResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleConfigItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleConfigResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleListItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleListResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleOdItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleOdResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleResItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleResResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleShiftItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleShiftResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleTimeItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleTimeResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleTripItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleTripResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleWorkItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleWorkItems.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleWorkResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ScheduleWorkStatItem.cs create mode 100644 PaymentSDK/AliPay/Domain/SchemaVO.cs create mode 100644 PaymentSDK/AliPay/Domain/SchoolBatchQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/SchoolCardInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SchoolCardSimpleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SealPageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SealPosition.cs create mode 100644 PaymentSDK/AliPay/Domain/SealRequestInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SecurityScene.cs create mode 100644 PaymentSDK/AliPay/Domain/SecuritydataMobileCity.cs create mode 100644 PaymentSDK/AliPay/Domain/SelectedMealInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SelectedMealSideInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SendRule.cs create mode 100644 PaymentSDK/AliPay/Domain/SenderInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceAddressSimpleVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceAttributeSimpleVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceContactSimpleVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceContext.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceRegionSimpleVO.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceTimeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ServiceUrl.cs create mode 100644 PaymentSDK/AliPay/Domain/SettleCardInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SettleCardInfoKt.cs create mode 100644 PaymentSDK/AliPay/Domain/SettleClause.cs create mode 100644 PaymentSDK/AliPay/Domain/SettleDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SettleEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/SettleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SettlementBillCreateOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/SettlementbillOpenApiDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/ShieldDishList.cs create mode 100644 PaymentSDK/AliPay/Domain/Shop.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopBusinessTime.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopCategoryConfigInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopCommentInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopDiscountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopExtInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopOrderConfigInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopOrderModifyResult.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopPosSchedule.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopPromoInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopQueryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopQueue.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopQueueStatus.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopRec.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopServiceItem.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopStaffInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopSummaryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ShopSummaryQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/SiData.cs create mode 100644 PaymentSDK/AliPay/Domain/SignDataInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SignField.cs create mode 100644 PaymentSDK/AliPay/Domain/SignFieldBean.cs create mode 100644 PaymentSDK/AliPay/Domain/SignMerchantParams.cs create mode 100644 PaymentSDK/AliPay/Domain/SignParams.cs create mode 100644 PaymentSDK/AliPay/Domain/SignResultValue.cs create mode 100644 PaymentSDK/AliPay/Domain/SignTask.cs create mode 100644 PaymentSDK/AliPay/Domain/SignTaskFileResult.cs create mode 100644 PaymentSDK/AliPay/Domain/SignTaskResult.cs create mode 100644 PaymentSDK/AliPay/Domain/SignedFileInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Signer.cs create mode 100644 PaymentSDK/AliPay/Domain/SignerBean.cs create mode 100644 PaymentSDK/AliPay/Domain/SimpleMockModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SimpleOperatorModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SimpleShopInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SimpleShopModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SingleArticleAnalysisData.cs create mode 100644 PaymentSDK/AliPay/Domain/SingleDstCampPrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SingleFundDetailItemAOPModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SinglePayDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SingleStartAppVO.cs create mode 100644 PaymentSDK/AliPay/Domain/SiteInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SiteInfoKt.cs create mode 100644 PaymentSDK/AliPay/Domain/SiteItem.cs create mode 100644 PaymentSDK/AliPay/Domain/SitePlanItem.cs create mode 100644 PaymentSDK/AliPay/Domain/SiteResult.cs create mode 100644 PaymentSDK/AliPay/Domain/SkuCreateInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SkuDescInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SkuInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SkuModifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SkuPropertyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SkuPropertyValue.cs create mode 100644 PaymentSDK/AliPay/Domain/SmartAddressInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SmartAutomatAssociate.cs create mode 100644 PaymentSDK/AliPay/Domain/SmartAutomatScene.cs create mode 100644 PaymentSDK/AliPay/Domain/SmartCityCommodityInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SnApplyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SocialInfoView.cs create mode 100644 PaymentSDK/AliPay/Domain/SortDeskParam.cs create mode 100644 PaymentSDK/AliPay/Domain/SpAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SpecEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/SpecialBusinessTimeRule.cs create mode 100644 PaymentSDK/AliPay/Domain/SpecialPriceDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/SpecifiedChannelParam.cs create mode 100644 PaymentSDK/AliPay/Domain/SpecifyAttachmentInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SpiDetectionDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SpiDetectionTask.cs create mode 100644 PaymentSDK/AliPay/Domain/SpiInputObject.cs create mode 100644 PaymentSDK/AliPay/Domain/SpiOutputObject.cs create mode 100644 PaymentSDK/AliPay/Domain/SpiVoiceCallback.cs create mode 100644 PaymentSDK/AliPay/Domain/SquareDanceTaskInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceDtevalDataanalysisSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceDtevalIdentitycheckQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceMetainfoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskAlixiaohaoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskAntifinfraudQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskAntifraudlistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskAntifraudscoreQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskAntimarketcheatQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskAudioQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskAudioSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskAudioVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskContentVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskDeviceidentityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskDigitalidentityQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskOfflinevarsQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SsdataDataserviceRiskRtopQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/StaffInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StageCateInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/StageGroupInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/StagedDiscountDstCampPrizeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/StallEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/StallKdsEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/StallModel.cs create mode 100644 PaymentSDK/AliPay/Domain/StandardCategoryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StatesSyncPayload.cs create mode 100644 PaymentSDK/AliPay/Domain/StationDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StdPublicBindAccount.cs create mode 100644 PaymentSDK/AliPay/Domain/StepcounterDataInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StockHolderVO.cs create mode 100644 PaymentSDK/AliPay/Domain/StockQuantity.cs create mode 100644 PaymentSDK/AliPay/Domain/StockQueryCondition.cs create mode 100644 PaymentSDK/AliPay/Domain/StockShippingStepInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StockTask.cs create mode 100644 PaymentSDK/AliPay/Domain/StockTaskResult.cs create mode 100644 PaymentSDK/AliPay/Domain/StoreInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StoreOrderDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/StoreOrderGood.cs create mode 100644 PaymentSDK/AliPay/Domain/Streetnumber.cs create mode 100644 PaymentSDK/AliPay/Domain/StructureBrandInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StructureServiceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StudentInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StudyAccountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StuffInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/StuffStockInOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/StuffStockInOrderItem.cs create mode 100644 PaymentSDK/AliPay/Domain/StuffStockOutOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/StuffStockOutOrderItem.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountAndBindDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountBalanceDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountBalanceFreezeOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountBalanceFreezeResultOpenApiDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountBalanceOpenApiDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountBalanceQueryOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountBaseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/SubAccountInfoQueryOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/SubButton.cs create mode 100644 PaymentSDK/AliPay/Domain/SubCertDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SubCloudUserInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SubMerchant.cs create mode 100644 PaymentSDK/AliPay/Domain/SubMerchantCommonEnterOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SubMerchantEnterOpenModel.cs create mode 100644 PaymentSDK/AliPay/Domain/SubMerchantParams.cs create mode 100644 PaymentSDK/AliPay/Domain/SubPackage.cs create mode 100644 PaymentSDK/AliPay/Domain/SubShopInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SummaryData.cs create mode 100644 PaymentSDK/AliPay/Domain/SummaryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/SupplierAssetResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/SupplierReport.cs create mode 100644 PaymentSDK/AliPay/Domain/SupplierReportDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/SupplierVO.cs create mode 100644 PaymentSDK/AliPay/Domain/SupportFunction.cs create mode 100644 PaymentSDK/AliPay/Domain/SystemParam.cs create mode 100644 PaymentSDK/AliPay/Domain/TBMiniShopBo.cs create mode 100644 PaymentSDK/AliPay/Domain/TableInfoResult.cs create mode 100644 PaymentSDK/AliPay/Domain/TableListResult.cs create mode 100644 PaymentSDK/AliPay/Domain/TaskTypeData.cs create mode 100644 PaymentSDK/AliPay/Domain/TaxBillContent.cs create mode 100644 PaymentSDK/AliPay/Domain/TbapiQueryAmountBizContent.cs create mode 100644 PaymentSDK/AliPay/Domain/TbapiQueryAmountResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/Template.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateActionInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateActionMiniAppUrlDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateBannerDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateBenefitInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateCardLevelConfDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateColumnInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateContext.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateEInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateEInfoMoreDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateEInfoUnitDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateEvoucherDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateFieldRuleDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateFileDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateImageDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateInfoBean.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateKeyword.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateMdcodeNotifyConfDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateMerchantDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateOpenCardConfDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateOperationDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplatePlatformDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateProfitDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateRemindDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateRightsContentDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateSecondaryOperationDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateStyleDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateStyleInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateTextMessageDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TemplateUsageInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Terminal.cs create mode 100644 PaymentSDK/AliPay/Domain/TestCaseDomain.cs create mode 100644 PaymentSDK/AliPay/Domain/TestCaseParam.cs create mode 100644 PaymentSDK/AliPay/Domain/Text.cs create mode 100644 PaymentSDK/AliPay/Domain/TextContent.cs create mode 100644 PaymentSDK/AliPay/Domain/TextDiff.cs create mode 100644 PaymentSDK/AliPay/Domain/TextInstance.cs create mode 100644 PaymentSDK/AliPay/Domain/ThirdErrorContext.cs create mode 100644 PaymentSDK/AliPay/Domain/TiansuoIsvBindVO.cs create mode 100644 PaymentSDK/AliPay/Domain/TicketCodeQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/TicketDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TicketInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TicketInfoResult.cs create mode 100644 PaymentSDK/AliPay/Domain/TicketTransInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TimeInterval.cs create mode 100644 PaymentSDK/AliPay/Domain/TimePeriod.cs create mode 100644 PaymentSDK/AliPay/Domain/TimePeriodConfig.cs create mode 100644 PaymentSDK/AliPay/Domain/TimeRange.cs create mode 100644 PaymentSDK/AliPay/Domain/TimeTableLineInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/Topic.cs create mode 100644 PaymentSDK/AliPay/Domain/TopicItem.cs create mode 100644 PaymentSDK/AliPay/Domain/TopicItemVo.cs create mode 100644 PaymentSDK/AliPay/Domain/TradeApplyParams.cs create mode 100644 PaymentSDK/AliPay/Domain/TradeAssocBillDetails.cs create mode 100644 PaymentSDK/AliPay/Domain/TradeFundBill.cs create mode 100644 PaymentSDK/AliPay/Domain/TradeItemResult.cs create mode 100644 PaymentSDK/AliPay/Domain/TradePrecreateConfirmExtendParam.cs create mode 100644 PaymentSDK/AliPay/Domain/TradePrecreateConfirmIndirectMerchantInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TradePrecreateConfirmOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TradePrecreateConfirmPrecreateCodeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TradePrecreateConfirmTradeMerchantInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TradePrecreateConfirmTradeStoreInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TradeRecord.cs create mode 100644 PaymentSDK/AliPay/Domain/TradeRequestVO.cs create mode 100644 PaymentSDK/AliPay/Domain/TradeSettleDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/TradeSettleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/TransOrderDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/TransOrderResult.cs create mode 100644 PaymentSDK/AliPay/Domain/TransactionAmountDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TransactionAmountModifierDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TransactionAuthenticationDetailDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TransactionDetailDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TransferAccountBookDetailResult.cs create mode 100644 PaymentSDK/AliPay/Domain/TransferDetailResult.cs create mode 100644 PaymentSDK/AliPay/Domain/TravelMallRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/TravelScene.cs create mode 100644 PaymentSDK/AliPay/Domain/TreeData.cs create mode 100644 PaymentSDK/AliPay/Domain/TreeDetailData.cs create mode 100644 PaymentSDK/AliPay/Domain/TrusteeshipAccountBillQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionAddress.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionBankAccountDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionCertificate.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionISVAgentInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionISVRequestPaymentInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionISVResponsePaymentInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionISVResult.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionISVSchoolDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionISVStudentInfoDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionInremitOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionMoneyDTO.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionQueryOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/TuitionUserName.cs create mode 100644 PaymentSDK/AliPay/Domain/UboVO.cs create mode 100644 PaymentSDK/AliPay/Domain/UnAvailableTimeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/UnavailablePeriodInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/UnfreezeOrderDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/UpdateCodeRequest.cs create mode 100644 PaymentSDK/AliPay/Domain/UpdateCodeResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/UpdateCodeResult.cs create mode 100644 PaymentSDK/AliPay/Domain/UpdatedAuthenticationDetails.cs create mode 100644 PaymentSDK/AliPay/Domain/UseDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/UseRule.cs create mode 100644 PaymentSDK/AliPay/Domain/UseRuleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/UseTime.cs create mode 100644 PaymentSDK/AliPay/Domain/UserAdvanceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/UserAnalysisData.cs create mode 100644 PaymentSDK/AliPay/Domain/UserAppBizDataInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/UserBusiness.cs create mode 100644 PaymentSDK/AliPay/Domain/UserCert.cs create mode 100644 PaymentSDK/AliPay/Domain/UserCertifyPayload.cs create mode 100644 PaymentSDK/AliPay/Domain/UserConfirmPayload.cs create mode 100644 PaymentSDK/AliPay/Domain/UserCrowdConditions.cs create mode 100644 PaymentSDK/AliPay/Domain/UserDInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/UserDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/UserDetails.cs create mode 100644 PaymentSDK/AliPay/Domain/UserIdentity.cs create mode 100644 PaymentSDK/AliPay/Domain/UserIdentityExt.cs create mode 100644 PaymentSDK/AliPay/Domain/UserIdentityInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/UserInfoAndBenefitQueryResult.cs create mode 100644 PaymentSDK/AliPay/Domain/UserInfoFromNJ.cs create mode 100644 PaymentSDK/AliPay/Domain/UserInfomation.cs create mode 100644 PaymentSDK/AliPay/Domain/UserInvoiceInfoOpenApiResponse.cs create mode 100644 PaymentSDK/AliPay/Domain/UserLoginStatusDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/UserMailInfoOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/UserMailInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/UserName.cs create mode 100644 PaymentSDK/AliPay/Domain/UserPermit.cs create mode 100644 PaymentSDK/AliPay/Domain/UserProfileDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/UserSubmitModel.cs create mode 100644 PaymentSDK/AliPay/Domain/UserTaskView.cs create mode 100644 PaymentSDK/AliPay/Domain/UserVo.cs create mode 100644 PaymentSDK/AliPay/Domain/ValidDateInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ValidStrategy.cs create mode 100644 PaymentSDK/AliPay/Domain/ValidationRule.cs create mode 100644 PaymentSDK/AliPay/Domain/VcpAssetDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/VehMessageEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/VehicleDashboardResult.cs create mode 100644 PaymentSDK/AliPay/Domain/VehicleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VehicleMsgSendResultEntity.cs create mode 100644 PaymentSDK/AliPay/Domain/VehicleSettleInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VerifiedInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VerifyInfoVO.cs create mode 100644 PaymentSDK/AliPay/Domain/VerifyParams.cs create mode 100644 PaymentSDK/AliPay/Domain/Video.cs create mode 100644 PaymentSDK/AliPay/Domain/ViewColumnInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ViewStyleInfoModel.cs create mode 100644 PaymentSDK/AliPay/Domain/Voucher.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherBill.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherBillDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherDescDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherDescDetailModel.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherInfoDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherLiteInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherModifyInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherQueryInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherRec.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherTemplateLiteInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherTermInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherUserExternalTradeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VoucherVO.cs create mode 100644 PaymentSDK/AliPay/Domain/VulInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/VulList.cs create mode 100644 PaymentSDK/AliPay/Domain/WaitRateAlgoItem.cs create mode 100644 PaymentSDK/AliPay/Domain/WaitRepaymentOrderInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/WarehouseVO.cs create mode 100644 PaymentSDK/AliPay/Domain/WeikeTaskView.cs create mode 100644 PaymentSDK/AliPay/Domain/WelfareEcoStoreInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/WhitehatInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/WorkDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/WorkListVO.cs create mode 100644 PaymentSDK/AliPay/Domain/WorkPattern.cs create mode 100644 PaymentSDK/AliPay/Domain/WorkPatternDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/WorldBaseRPCResponseInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/WorldErrorIndicator.cs create mode 100644 PaymentSDK/AliPay/Domain/WorldOfflineDataInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/WorldTicketType.cs create mode 100644 PaymentSDK/AliPay/Domain/WriteoffOrderParam.cs create mode 100644 PaymentSDK/AliPay/Domain/XXXXsdasdasd.cs create mode 100644 PaymentSDK/AliPay/Domain/XwbTestData.cs create mode 100644 PaymentSDK/AliPay/Domain/YLBPriceDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/YLBProfitDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/YLBTransDetailInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ZMGoOutDiscountInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ZMGoTradeInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ZftSubMerchantOrder.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaAuthInfoAuthqueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditAntifraudRiskListModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditAntifraudScoreGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditAntifraudVerifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditContractBorrowCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditContractBorrowCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditContractBorrowDelayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditContractBorrowInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditContractBorrowQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditContractBorrowReturnModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditContractPrincipalQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpDataRatingQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpEntityMonitorSetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpEntityMonitorUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpFreedepositApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpFreedepositInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpFreedepositOrderriskQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpInfoGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpLawsuitDetailGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpLawsuitRecordGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpOrderRatingQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpProductCodeApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpProductCodeModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpProductCodeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpRatingApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpRatingInnerInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpRoleGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpSceneAgreementCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpSceneAgreementUseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpSceneFulfillmentSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpSceneFulfillmentlistSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpSceneRatingApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpSceneRatingInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpSceneRatingQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpSceneTradeConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditEpScoreGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditOrderRepaymentApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeIndustryLicenseCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeIndustryLocationUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeIndustryOrderQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeIndustryOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeIndustryTradeCloseModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeIndustryTradePayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeIndustryTradeQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeIndustryTradeRefundModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeLawsuitDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeLawsuitRecordGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeLevelQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserAuthApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserContractQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserContractSignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserContractUnsignModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserCreditFreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserCreditUnfreezeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserOrderConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserOrderSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserRiskConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserSceneConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeUserScenePreconsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditPeZmgoPreconsultQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditRelationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditRiskEvaluateQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditScoreBriefGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditScoreGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditWatchlistBriefGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCreditWatchlistiiGetModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerAuthMutualviewApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerBehaviorSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerCertificationCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerCertificationInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerCertificationMaterialCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerCertificationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerContractDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerContractInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerContractRecordSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerEpCertificationCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerEpCertificationInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerEpCertificationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerEpIdentificationCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerEpIdentificationInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerEpIdentificationQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaCustomerFulfillmentSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaDataFeedbackurlQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaDataMorseOperateSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaDataStateDataSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantBorrowEntityUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantContractCommonCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantContractCommonConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantContractCommonQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantContractOfferModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantContractOfferQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantContractOnofferQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantContractPageQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantContractQuickCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantCreditlifeRiskApplyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantCreditserviceDetailCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantCreditserviceDetailModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantCreditserviceDetailQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantDataUploadInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantEvisaStatusSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderCreditConfirmModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderCreditCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderCreditPayModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderCreditQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderRentCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderRentCompleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderRentCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderRentModifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderRentQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantOrderRentSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantSingleDataUploadModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaMerchantTestPracticeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaOpenAppDesSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaOpenAppKeyanLqlCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaOpenQerqQerqQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhimaRiskDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ZhubUidTelPair.cs create mode 100644 PaymentSDK/AliPay/Domain/ZmAuthParams.cs create mode 100644 PaymentSDK/AliPay/Domain/ZmContractDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ZmWatchListDetail.cs create mode 100644 PaymentSDK/AliPay/Domain/ZmWatchListExtendInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationCustomerAnonymousfacesearchMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationCustomerFaceabilityIdentifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationCustomerFacemanageCreateModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationCustomerFacemanageDeleteModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationCustomerFaceverifyMatchModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationCustomerFtokenQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationCustomerSmileliveInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationCustomerSmilepayInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationFaceInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationFaceSearchQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationSmilefaceSendmeSendModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozAuthenticationSmilepayInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozDeviceInfo.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerBlacklistQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerCertifyConsultModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerCertifyInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerCertifyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerCertifyzhubInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerCertifyzhubQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerEnrollCancelModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerEnrollcertifyInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerEnrollcertifyQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerIdcardCertifyModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationCustomerSmilerepoSyncModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationDeviceinfoQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationUserWebInitializeModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationUserWebQueryModel.cs create mode 100644 PaymentSDK/AliPay/Domain/ZolozIdentificationZolozidGetModel.cs create mode 100644 PaymentSDK/AliPay/HtmlHelpler.cs create mode 100644 PaymentSDK/AliPay/IAopClient.cs create mode 100644 PaymentSDK/AliPay/IAopRequest.cs create mode 100644 PaymentSDK/AliPay/IAopUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Parser/AopAttribute.cs create mode 100644 PaymentSDK/AliPay/Parser/AopJsonParser.cs create mode 100644 PaymentSDK/AliPay/Parser/AopJsonReader.cs create mode 100644 PaymentSDK/AliPay/Parser/AopModelParser.cs create mode 100644 PaymentSDK/AliPay/Parser/AopXmlParser.cs create mode 100644 PaymentSDK/AliPay/Parser/CertItem.cs create mode 100644 PaymentSDK/AliPay/Parser/EncryptParseItem.cs create mode 100644 PaymentSDK/AliPay/Parser/IAopParser.cs create mode 100644 PaymentSDK/AliPay/Parser/IAopReader.cs create mode 100644 PaymentSDK/AliPay/Parser/ResponseParseItem.cs create mode 100644 PaymentSDK/AliPay/Parser/SignItem.cs create mode 100644 PaymentSDK/AliPay/Request/AftAifinFireeyeOcrImageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AftFinsecureRiskplusSecurityPolicyQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AliosOpenAutoInfoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAccountExrateAdviceAcceptRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAccountExrateAllclientrateQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAccountExrateRatequeryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAccountExrateTraderequestCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAcquireCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAcquireCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAcquireCreateandpayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAcquirePrecreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAcquireQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAcquireRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAppTokenGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAssetPointBalanceQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAssetPointBudgetQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAssetPointOrderCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayAssetPointOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayBossCsChannelQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayBossFncXwbtestRetModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayBossProdArrangementOfflineQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayBossProdMyTestQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceAdContractSignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceAirCallcenterTradeApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceAirXfgDsgModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorCityQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorDepositCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorDepositConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorDepositQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorFunctionQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorScriptQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorStationQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorVoucherBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorVoucherCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorVoucherConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorVoucherGenerateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorVoucherQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorVoucherRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceCityfacilitatorVoucherUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceDataCampaignCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceDataCampaignSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceDataCustommetricSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceDataLogdataSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceDataMonitordataSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceEducateAuthenticateCampuscardCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceEducateAuthenticateCampuscardDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceEducateCampuscardAuthorizedQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceEducateParttimejobInfoCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceEducateSchoolcodeTokenCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceEducateStudentinfoShareRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceEducateUserClickCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceIotDeviceserviceCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceIotReceiptDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceIotReceiptSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceIotSdarttoolMessageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceIotSdarttoolMessageSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceLogisticsWaybillMinimctSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceLotteryPresentSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceLotteryPresentlistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceLotteryTypelistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceTransportIntelligentizeDataSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceTransportNfccardSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceTransportOfflinepayKeyQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceTransportOfflinepayRecordVerifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceTransportOfflinepayUserblacklistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceTransportParkingReserveConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayCommerceTransportVehicleownerMessageSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiOrderCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiOrderConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiOrderModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiOrderRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiOrderRefuseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiOrderSpModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiOrderTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiServiceModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiSpModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDaoweiSpScheduleModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataAiserviceSgxGatewayQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataAiserviceSmartpriceMerchanteffectQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillAccountlogQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillBailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillBalanceQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillBalancehisQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillBuyQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillDownloadurlGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillEreceiptApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillEreceiptQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillSellQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataBillTransferQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataexchangeSfasdfRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdCreativeBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdCreativeCreateormodifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdCreativeQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdDataQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdGroupCreateormodifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdGroupQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdOnlineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdPlanCreateormodifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdPlanQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdPrincipalCheckavailableRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdPrincipalConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdPrincipalCreateormodifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdPrincipalQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdPromotepageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdPromotepagestatisticQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdUserCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdUserbalanceOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceAdUserbalanceOnlineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceBillDownloadurlQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceChinaremodelQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceCodeRecoRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceSdfsdfRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceShoppingmallrecShopQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceShoppingmallrecVoucherQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayDataDataserviceUserlevelZrankGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppBillAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppBillGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppBillSearchRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceApplyResultSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceApplystatusQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceAuthSignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceAuthUnsignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceDetailOutputQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceEinvpackageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceExpenseProgressSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceFileOutputQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceInfoSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceIsvtokenReimApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceListExpenseSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceMerchantEnterstatusQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceMerchantlistEnterApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceSycnRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceSyncSimpleSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceTaxnoBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceTitleDynamicGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppInvoiceTitleListGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppMerchantConfigGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppPdeductBillPayStatusRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppPdeductPayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppPdeductSignAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppPdeductSignCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppPdeductSignQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEbppPdeductSignValidateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcapiprodCreditGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcapiprodDataPutRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcapiprodDrawndnContractGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcapiprodDrawndnDrawndnlistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcapiprodDrawndnFeerecordQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcapiprodDrawndnLendingrecordQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcapiprodDrawndnPaymentscheduleGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcapiprodDrawndnRepaymentrecordQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcardEduPublicBindRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCityserviceMessageSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoContractSignflowsCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeBasicserviceInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeBasicserviceModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeBillBatchUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeBillBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeBillDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeBillModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeBillSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeCommunityBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeCommunityCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeCommunityDetailsQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeCommunityModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeNoticeDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeNoticePublishRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifePayResultQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeRepairStatusUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeResidentinfoDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeResidentinfoUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeRoominfoDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeRoominfoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeRoominfoUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeRooominfoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoCplifeUseridentityStatusUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoDocTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoDoctemplateSettingurlQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoEduKtBillingModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoEduKtBillingQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoEduKtBillingSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoEduKtParentQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoEduKtSchoolinfoModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoEduKtStudentModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoEduKtStudentQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoFilePathQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarCarlibInfoPushRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarCarmodelModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarDataExternalQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarDataExternalSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarDataserviceViolationinfoShareRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarMaintainDataUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarMaintainOrderCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarMaintainOrderstatusUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarOrderStatusQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingAgreementQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingCardbarcodeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingChargeinfoSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingConfigQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingConfigSetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingEnterinfoSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingExitinfoSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingLotbarcodeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingOrderPayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingOrderRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingOrderSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingOrderUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingOrderstatusQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingParkinglotinfoCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingParkinglotinfoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingParkinglotinfoUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingSpaceinfoSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarParkingVehicleQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarPromoTicketPushRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarPromoTicketSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarPromoVoucherVerifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarTradeOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarTradeRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarViolationCityPushRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoMycarViolationInfoPushRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoRebateBalanceQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoRebateBalanceSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoSignFlowCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoSignFlowCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoSignFlowFinishRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoSignFlowQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoSignflowsDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoSignflowsUrlQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayEcoWelfareCodeSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayExscUserCurrentsignGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayExscUserFirstfundinpourGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayExscUserFirstsignGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFlashsalesStockSyncUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAccountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAccountbookCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAccountbookQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAuthOperationCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAuthOperationDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAuthOrderAppFreezeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAuthOrderFreezeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAuthOrderUnfreezeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundAuthOrderVoucherCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundBatchCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundBatchCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundBatchDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundBatchTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundBatchUniTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundCouponOperationQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundCouponOrderAgreementPayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundCouponOrderAppPayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundCouponOrderDisburseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundCouponOrderPagePayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundCouponOrderRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundTransAppPayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundTransCommonQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundTransOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundTransRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundTransToaccountTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayFundTransUniTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoaftermarketAttachmentUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoaftermarketDepotCreateormodifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoaftermarketInserviceorderNotifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoaftermarketOutorderSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoinsprodCommonConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoinsprodEnquriyApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoinsprodPolicyApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoinsprodPolicyCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoinsprodQuoteApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoinsprodQuoteQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoAutoinsprodUserCertifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsAutoCarSaveRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsCooperationProductOfflineBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsCooperationProductQrcodeApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsCooperationRegionQrcodeApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsSceneApplicationIssueConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsSceneCouponReceiveRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayInsSceneCouponSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignActivityOfflineCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignActivityOfflineTriggerRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignCashCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignCashDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignCashListQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignCashStatusModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignCashTriggerRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignCertCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDiscountBudgetAppendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDiscountBudgetCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDiscountBudgetQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDiscountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDiscountStatusUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDiscountWhitelistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDiscountWhitelistUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDrawcampCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDrawcampQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDrawcampStatusUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDrawcampUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignDrawcampWhitelistCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCampaignPrizeAmountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardActivateformQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardActivateurlApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardBenefitCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardBenefitDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardBenefitModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardBenefitQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardConsumeSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardFormtemplateSetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardOpenRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardTemplateBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardTemplateModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardTemplateQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCardUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCashitemvoucherTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCashlessitemvoucherTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCashlessvoucherTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCashlessvoucherTemplateModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCashvoucherTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCashvoucherTemplateModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCdpAdvertiseCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCdpAdvertiseModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCdpAdvertiseOperateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCdpAdvertiseQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCdpAdvertiseReportQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCdpRecommendQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingCouponTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingExchangevoucherTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingExchangevoucherUseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingFacetofaceDecodeUseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingMaterialImageUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieActivityCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieActivityQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieEditorQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieMemberCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSitesBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSitesConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSitesCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSitesDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSitesQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSitesSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSpaceBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSpaceCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieSpaceQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieTemplateBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieTemplateQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingToolFengdieTemplateSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingUserulePidQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherAuthSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherListQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherStockCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherStockMatchRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherStockQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherStockUseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherTemplateDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherTemplatedetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMarketingVoucherTemplatelistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMdataTagGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMemberCouponQuerylistRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMerchantItemFileUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMerchantOrderConsumerQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMerchantOrderDigestConsumerBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMerchantOrderSecuritydetailConsumerQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMerchantOrderSecuritydigestConsumerBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMerchantOrderSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMicropayOrderConfirmpayurlGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMicropayOrderDirectPayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMicropayOrderFreezeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMicropayOrderFreezepayurlGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMicropayOrderGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMicropayOrderUnfreezeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileBeaconDeviceAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileBeaconDeviceDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileBeaconDeviceModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileBeaconDeviceQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileBeaconMessageSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileBksigntokenVerifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileCodeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileCodeQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicAccountAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicAccountDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicAccountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicAccountResetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicAppinfoUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicContactFollowListRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicFollowListRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicGisGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicInfoModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicInfoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicLabelAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicLabelDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicLabelQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicLabelUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicLabelUserAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicLabelUserDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicLabelUserQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMenuAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMenuDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMenuGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMenuQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMenuUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMenuUserQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMenuUserUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMessageCustomSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMessageLabelSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMessagePushRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMessageSingleSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMessageTotalSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMessagebatchPushRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicMessagespecifyPushRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicQrcodeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicShortlinkCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicTemplateMessageDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicTemplateMessageGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicTemplateMessageModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobilePublicTemplateMessageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileRecommendGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileShakeUserQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileStdPublicAccountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileStdPublicExpressUserQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileStdPublicFollowListRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileStdPublicMenuQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMobileStdPublicMessageCustomSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMpointprodBenefitDetailGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMsaasMediarecogVoiceMediaaudioUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayMsaasPromotionCpainfoCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketApplyorderBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketItemCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketItemModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketItemStateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketMcommentQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketProductBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketProductQuerydetailRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketReporterrorCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopApplyorderCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopCategoryQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopDiscountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopPublicBindRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopPublicUnbindRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopQuerydetailRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketShopSummaryBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketingVoucherCodeUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketingVoucherCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketingVoucherModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketingVoucherOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketingVoucherStatusQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMarketingVoucherUseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMaterialImageDownloadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineMaterialImageUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineProviderDishQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineProviderEquipmentAuthQuerybypageRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineProviderEquipmentAuthRemoveRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineProviderMonitorLogSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineProviderShopactionRecordRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOfflineProviderUseractionRecordRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentFacetofaceSignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentMiniCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentMobilepaySignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentOfflinepaymentSignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentSignstatusQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAgentZhimabriefSignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAlipaycertDownloadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentFunctionCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentFunctionModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentFunctionOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentFunctionQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentItemBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentItemCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentItemDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentItemModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppAppcontentItemQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppCallQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppCodetesttestRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppDedfDdQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppDfsfasDeQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppLingbalingliuQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppLingjiuyisiCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppLingjiuyiwuBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppMembersCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppMembersDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppMembersQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppMessageSubscriptionModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppMessageSubscriptionQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppMessageTopicSubscribeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppMessageTopicUnsubscribeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppMiniTemplatemessageSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppNotifyModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppNotifyVerifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppOpenbizmockApisdkgrayQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppOpenbizmockMessageSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppOpenbizmockOpenidnonstandQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppQrcodeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppSmgMsgSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppSmsgDataSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppSystemNewcontextupiduoidTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppUpdattestBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppXwbtestabcQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppYiyiyiwuQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAppYufanlingsanyaowuYufalingsanyaowuQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAuthAppAesGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAuthAppAesSetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAuthIndustryPlatformCreateTokenRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAuthTokenAppQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenAuthTokenAppRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenBizCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenDafBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenEchoOfflineSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenInviteOrderCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenInviteOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMessagetestCesSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniBaseinfoModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniBaseinfoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniBizdataTemplatemessageDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniBizdataTemplatemessageUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniCategoryQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniContentSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniDataVisitQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniExperienceCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniExperienceCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniExperienceQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniIndividualBusinessCertifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniItemBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniItemPageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniMiniappServiceconfigModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniQrcodeBindRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniQrcodeUnbindRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniReleaststBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniSafedomainCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniSafedomainDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniTemplateUsageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniTemplatemessageUsertemplateApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniTinyappExistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionAuditApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionAuditCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionAuditedCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionBuildQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionGrayCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionGrayOnlineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionListQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionOnlineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionRollbackRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenMiniVersionUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenNewgotoneCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenOperationBizfeeActivityApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenOperationOpenbizmockBizQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenOperationSsffDeeQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPageNewcontextTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPageOldcontextTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicAccountCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicAccountDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicAccountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicAccountResetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicAdvertBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicAdvertCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicAdvertDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicAdvertModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicArticlesummaryDataBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicComptestCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicContactFollowBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicDefaultExtensionCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicFollowBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicGisQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicGroupBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicGroupCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicGroupCrowdQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicGroupDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicGroupModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicInfoModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicInfoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLabelCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLabelDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLabelModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLabelQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLabelUserCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLabelUserDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLabelUserQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeAboardApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeAccountCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeAgentCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeAgentcreateQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeDebarkApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeLabelBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeLabelCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeLabelDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeLabelModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeMsgRecallRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicLifeMsgSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMatchuserLabelCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMatchuserLabelDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMenuBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMenuCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMenuDataBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMenuDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMenuModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMenuQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessageContentCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessageContentModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessageCustomSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessageGroupSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessageLabelSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessagePreviewSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessageSingleSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMessageTotalSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicMultimediaDownloadProxyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPartnerMenuOperateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPartnerMenuQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPartnerSubscribeSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPayeeBindCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPayeeBindDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPersonalizedExtensionBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPersonalizedExtensionCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPersonalizedExtensionDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPersonalizedExtensionSetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPersonalizedMenuCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicPersonalizedMenuDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicQrcodeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicSettingCategoryQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicShortlinkCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicSinglearticleDataBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicTemplateMessageAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicTemplateMessageGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicTemplateMessageIndustryModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicThirdCustomerServiceRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicTopicBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicTopicCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicTopicDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicTopicModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicUserDataBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicUserFollowQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenPublicXwbtestabcdBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketCommodityShopOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketCommodityShopOnlineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketOrderAcceptRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketOrderItemCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketOrderItemCompleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketOrderItemConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketOrderNotifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenServicemarketOrderRejectRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenSmsgDataSetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayOpenTestQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassCodeAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassCodeVerifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassFileAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassInstanceAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassInstanceUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassSyncAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassSyncUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassTemplateAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassTemplateUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassTplAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassTplContentAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassTplContentUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassTplUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPassVerifyQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPayAppMarketingConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPayCodecHschoolDecodeUseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthAccumulationQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthAgreementCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthAgreementQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthBusinessConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthOrderCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthOrderUnfreezeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthRefundApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthSettleApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiAuthSignApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiDiscountBillQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiDiscountSolutionCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiDiscountSolutionModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiDiscountSolutionOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiDiscountSolutionOnlineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiMerchantActivityCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiMerchantActivityModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiMerchantActivityOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiMerchantActivityOnlineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiMerchantBillQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditHuabeiPromoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditLoanApplyCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPcreditLoanRefundCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPlatformOpenidGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPlatformUseridGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPointBalanceGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPointBudgetGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPointOrderAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPointOrderGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayPromorulecenterRuleAnalyzeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityInfoAnalysisRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdAlipaySecurityProdTestRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdAmlriskQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdCheckIqQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdDdsBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdDesQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdDfasfdasFdfdsBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdDfesfDefBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFacePayCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFacePayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFacerepoAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFacerepoSearchRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFingerprintApplyInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFingerprintApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFingerprintDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFingerprintDeviceVerifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFingerprintRiskcontrolQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFingerprintVerifyInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdFingerprintVerifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdMyQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdNopidBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdShopQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdSignatureFileUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdSignatureTaskApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdSignatureTaskCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdSignatureTaskQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdXwbtestabcAbcQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityProdXwbtestprodQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityRiskContentDetectRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityRiskCustomerriskQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityRiskCustomerriskSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityRiskDetectRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityRiskHideDeviceidQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityRiskRainscoreQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecuritySssssssQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySecurityTesttestQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipaySystemOauthTokenRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeAdvanceConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeAppPayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeCustomsDeclareRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeCustomsQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeFastpayRefundQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeOrderSettleRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeOrderinfoSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradePagePayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradePageRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradePayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradePrecreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeRoyaltyRelationBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeRoyaltyRelationBindRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeRoyaltyRelationUnbindRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeVendorpayDevicedataUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTradeWapPayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTransferThirdpartyBillCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTrustUserAuthSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTrustUserReportGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTrustUserRiskidentifyGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTrustUserScoreGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayTrustUserTokenGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAccountFreezeGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAccountGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAccountSearchRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAccountUseridBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAddressQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAgreementExecutionplanModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAgreementPageSignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAgreementQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAgreementTransferRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAgreementUnsignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAgreementUserverifyApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAgreementUserverifyQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAlipaypointSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserAuthZhimaorgIdentityApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserCertdocCertverifyConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserCertdocCertverifyPreconsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserCertifyOpenCertifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserCertifyOpenInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserCertifyOpenQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserContractGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserFamilyArchiveInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserFamilyArchiveQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserFinanceinfoShareRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserInfoAuthRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserInfoShareRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserPassInstancebatchAddRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserPassTemplateCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserPassTemplateModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserPassTemplateQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserTestRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserTradeSearchRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserTwostageCommonUseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayUserUserinfoShareRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayZdataassetsEasyserviceRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayZdataassetsFcdatalabZdatamergetaskRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayZdataassetsMetadataRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayZdatafrontCommonQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayZdatafrontDatatransferedFileuploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayZdatafrontDatatransferedSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayZdataserviceUnidataQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AlipayZmscoreZrankGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AmapMapMapserviceTeseBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandContractFacetofaceQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandContractFacetofaceSignRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandEnterpriseApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandImageUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandIndirectImageUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandIndirectIsvModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandItemOpenBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandItemOpenCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandItemOpenDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandItemOpenModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandItemOpenQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandMapplyorderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandMerchantStorelistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandPersonalApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandShopCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandShopConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandShopCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandShopModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntMerchantExpandShopQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntOcrDriverlicenseIdentifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntOcrGeneralIdentifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntOcrIdcardIdentifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntOcrVehiclelicenseIdentifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AntOcrVehicleplateIdentifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/AnttechBlockchainFinanceFileUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/HuanxuTradeOrderCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/HuanxuTradeOrderDisburseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/HuanxuTradeOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/HuanxuTradeOrderRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiAdvertDeliveryDiscountAuthwebBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiAdvertDeliveryDiscountGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiAdvertDeliveryDiscountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiAdvertDeliveryDiscountSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiAdvertDeliveryDiscountWebBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiAdvertDeliveryItemApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringCommodityOrderBuyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringCrowdgroupConditionQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringCrowdgroupConditionSetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishCommgroupQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishCommgroupSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishCommruleQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishCommruleSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishCookcatetopSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishMenuQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishMenuSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishSpecgroupQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishSpecgroupSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishVirtualdishQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringDishVirtualdishSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringTablecodeQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCateringTablelistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCraftsmanDataProviderBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCraftsmanDataProviderCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCraftsmanDataProviderModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCraftsmanDataWorkBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCraftsmanDataWorkCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCraftsmanDataWorkDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiCraftsmanDataWorkModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemCategoryChildrenBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemExtitemBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemExtitemBrandQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemExtitemCategoryQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemExtitemCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemExtitemExistedQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemExtitemQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemExtitemUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiItemStateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignActivityBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignActivityCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignActivityModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignActivityOfflineRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignActivityQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignAssetDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignCrowdBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignCrowdCountRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignCrowdCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignCrowdDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignCrowdDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignCrowdModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignDetailInfoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignIntelligentPromoBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignIntelligentPromoConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignIntelligentPromoCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignIntelligentPromoDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignIntelligentPromoModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignIntelligentPromoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignIntelligentShopConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignIntelligentTemplateConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignItemMerchantactivityBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignItemMerchantactivityCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignItemMerchantactivityCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignItemMerchantactivityModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignItemMerchantactivityQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignRecruitApplyQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignRecruitShopQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignTagsQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingCampaignUserAssetQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataActivityBillDownloadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataActivityReportQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataAlisisReportBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataAlisisReportQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataBizadviserMemberprofileQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataBizadviserMyddsreportQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataBizadviserMyreportQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataCustomreportBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataCustomreportDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataCustomreportDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataCustomreportQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataCustomreportSaveRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataDishdiagnoseBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataDishdiagnosetypeBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataEnterpriseStaffinfoUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataIndicatorQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataIntelligentEffectQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataIntelligentIndicatorQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataIsvShopQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataMallShopitemsQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataMemberReportQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataMessageDeliverRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataNearmallQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataRetailDmQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataSmartactivityConfigRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataSmartactivityForecastRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataSmartmanagementDiagnoseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingDataTradeHabbitQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingToolIsvMerchantQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingToolPointsQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingToolPointsUpdateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMarketingToolPrizesendAuthRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMemberBrandownerNameQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMemberDataDesdBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMemberDataIsvCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMemberDataOauthQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMemberRetailerQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMerchantKbdeviceDevicesBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiMerchantKbdeviceDispenserQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiQualityTestCloudacptActivityQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiQualityTestCloudacptBatchQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiQualityTestCloudacptCheckresultSubmitRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiQualityTestCloudacptItemQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiRetailShopitemBatchqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiRetailShopitemModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiRetailShopitemUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiSalesLeadsSaleleadsCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiSalesLeadsShopleadsCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeItemBuyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeItemorderBuyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeItemorderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeItemorderRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeKbdeliveryDeliveryApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeKbdeliveryDeliveryCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeOrderAggregateConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeOrderConsultRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeOrderEnterpriseQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeOrderEnterpriseSettleRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeOrderPrecreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeOrderQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeTicketSendCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeTicketTicketcodeCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeTicketTicketcodeCheckavailableRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeTicketTicketcodeDelayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeTicketTicketcodeQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeTicketTicketcodeSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeTicketTicketcodeSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/KoubeiTradeTicketTicketcodeUseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MonitorHeartbeatSynRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankCreditLoanapplyDataUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankCreditUserCertifyOpenQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankCreditUserInfoShareQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankCreditUserOpenCertifyCertifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankCreditUserOpenCertifyInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankCreditUserSystemOauthQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankFinanceYulibaoAccountQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankFinanceYulibaoCapitalPurchaseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankFinanceYulibaoCapitalRansomRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankFinanceYulibaoPriceQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankFinanceYulibaoTransHistoryQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankPaymentTradeFinancingOrderCloseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankPaymentTradeFinancingOrderCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankPaymentTradeFinancingOrderRefundRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankPaymentTradeOrderCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankPaymentTradeQrcodeCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/MybankPaymentTradeQrcodeDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/SsdataDataserviceRiskAlixiaohaoQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/SsdataDataserviceRiskAntifraudlistQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/SsdataDataserviceRiskAntifraudscoreQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaAuthInfoAuthqueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditAntifraudRiskListRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditAntifraudScoreGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditAntifraudVerifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditContractBorrowCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditContractBorrowCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditContractBorrowDelayRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditContractBorrowInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditContractBorrowQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditContractBorrowReturnRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditContractPrincipalQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpInfoGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpLawsuitDetailGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpLawsuitRecordGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpSceneAgreementCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpSceneAgreementUseRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpSceneFulfillmentSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpSceneFulfillmentlistSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpSceneRatingApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpSceneRatingInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpSceneRatingQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditEpScoreGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditOrderRepaymentApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditPeLawsuitDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditPeLawsuitRecordGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditScoreBriefGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditScoreGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditWatchlistBriefGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCreditWatchlistiiGetRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerAuthMutualviewApplyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerBehaviorSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerCertificationCertifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerCertificationInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerCertificationMaterialCertifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerCertificationQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerContractDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerContractInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerEpCertificationCertifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerEpCertificationInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaCustomerEpCertificationQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaDataBatchFeedbackRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaDataFeedbackurlQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaDataStateDataSyncRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantBorrowEntityUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantCloseloopDataUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantContractCommonCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantContractCommonConfirmRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantContractCommonQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantContractOfferModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantContractOfferQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantContractOnofferQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantContractPageQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantContractQuickCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantCreditserviceDetailCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantCreditserviceDetailModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantCreditserviceDetailQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantDataUploadInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantLogoImageUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantOrderRentCancelRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantOrderRentCompleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantOrderRentCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantOrderRentModifyRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantOrderRentQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantSingleDataUploadRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaMerchantTestPracticeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaOpenAppDesSendRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaOpenAppKeyanLqlCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZhimaOpenQerqQerqQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZolozAuthenticationCustomerFacemanageCreateRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZolozAuthenticationCustomerFacemanageDeleteRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZolozAuthenticationCustomerFtokenQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZolozAuthenticationCustomerSmilepayInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZolozAuthenticationSmilepayInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZolozIdentificationCustomerCertifyzhubQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZolozIdentificationUserWebInitializeRequest.cs create mode 100644 PaymentSDK/AliPay/Request/ZolozIdentificationUserWebQueryRequest.cs create mode 100644 PaymentSDK/AliPay/Response/AftAifinFireeyeOcrImageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AftFinsecureRiskplusSecurityPolicyQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AliosOpenAutoInfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAccountExrateAdviceAcceptResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAccountExrateAllclientrateQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAccountExrateRatequeryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAccountExrateTraderequestCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAcquireCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAcquireCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAcquireCreateandpayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAcquirePrecreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAcquireQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAcquireRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAppTokenGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAssetPointBalanceQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAssetPointBudgetQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAssetPointOrderCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayAssetPointOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayBossCsChannelQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayBossFncXwbtestRetModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayBossProdArrangementOfflineQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayBossProdMyTestQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceAdContractSignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceAirCallcenterTradeApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceAirXfgDsgModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorCityQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorDepositCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorDepositConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorDepositQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorFunctionQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorScriptQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorStationQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorVoucherBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorVoucherCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorVoucherConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorVoucherGenerateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorVoucherQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorVoucherRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceCityfacilitatorVoucherUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceDataCampaignCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceDataCampaignSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceDataCustommetricSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceDataLogdataSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceDataMonitordataSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceEducateAuthenticateCampuscardCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceEducateAuthenticateCampuscardDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceEducateCampuscardAuthorizedQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceEducateParttimejobInfoCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceEducateSchoolcodeTokenCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceEducateStudentinfoShareResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceEducateUserClickCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceIotDeviceserviceCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceIotReceiptDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceIotReceiptSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceIotSdarttoolMessageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceIotSdarttoolMessageSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceLogisticsWaybillMinimctSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceLotteryPresentSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceLotteryPresentlistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceLotteryTypelistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceTransportIntelligentizeDataSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceTransportNfccardSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceTransportOfflinepayKeyQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceTransportOfflinepayRecordVerifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceTransportOfflinepayUserblacklistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceTransportParkingReserveConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayCommerceTransportVehicleownerMessageSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiOrderCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiOrderConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiOrderModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiOrderRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiOrderRefuseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiOrderSpModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiOrderTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiServiceModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiSpModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDaoweiSpScheduleModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataAiserviceSgxGatewayQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataAiserviceSmartpriceMerchanteffectQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillAccountlogQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillBailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillBalanceQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillBalancehisQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillBuyQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillDownloadurlGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillEreceiptApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillEreceiptQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillSellQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataBillTransferQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataexchangeSfasdfResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdCreativeBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdCreativeCreateormodifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdCreativeQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdDataQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdGroupCreateormodifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdGroupQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdOnlineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdPlanCreateormodifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdPlanQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdPrincipalCheckavailableResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdPrincipalConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdPrincipalCreateormodifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdPrincipalQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdPromotepageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdPromotepagestatisticQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdUserCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdUserbalanceOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceAdUserbalanceOnlineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceBillDownloadurlQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceChinaremodelQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceCodeRecoResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceSdfsdfResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceShoppingmallrecShopQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceShoppingmallrecVoucherQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayDataDataserviceUserlevelZrankGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppBillAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppBillGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppBillSearchResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceApplyResultSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceApplystatusQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceAuthSignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceAuthUnsignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceDetailOutputQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceEinvpackageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceExpenseProgressSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceFileOutputQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceInfoSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceIsvtokenReimApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceListExpenseSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceMerchantEnterstatusQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceMerchantlistEnterApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceSycnResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceSyncSimpleSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceTaxnoBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceTitleDynamicGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppInvoiceTitleListGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppMerchantConfigGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppPdeductBillPayStatusResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppPdeductPayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppPdeductSignAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppPdeductSignCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppPdeductSignQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEbppPdeductSignValidateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcapiprodCreditGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcapiprodDataPutResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcapiprodDrawndnContractGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcapiprodDrawndnDrawndnlistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcapiprodDrawndnFeerecordQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcapiprodDrawndnLendingrecordQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcapiprodDrawndnPaymentscheduleGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcapiprodDrawndnRepaymentrecordQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcardEduPublicBindResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCityserviceMessageSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoContractSignflowsCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeBasicserviceInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeBasicserviceModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeBillBatchUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeBillBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeBillDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeBillModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeBillSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeCommunityBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeCommunityCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeCommunityDetailsQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeCommunityModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeNoticeDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeNoticePublishResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifePayResultQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeRepairStatusUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeResidentinfoDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeResidentinfoUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeRoominfoDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeRoominfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeRoominfoUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeRooominfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoCplifeUseridentityStatusUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoDocTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoDoctemplateSettingurlQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoEduKtBillingModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoEduKtBillingQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoEduKtBillingSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoEduKtParentQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoEduKtSchoolinfoModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoEduKtStudentModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoEduKtStudentQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoFilePathQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarCarlibInfoPushResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarCarmodelModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarDataExternalQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarDataExternalSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarDataserviceViolationinfoShareResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarMaintainDataUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarMaintainOrderCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarMaintainOrderstatusUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarOrderStatusQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingAgreementQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingCardbarcodeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingChargeinfoSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingConfigQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingConfigSetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingEnterinfoSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingExitinfoSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingLotbarcodeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingOrderPayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingOrderRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingOrderSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingOrderUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingOrderstatusQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingParkinglotinfoCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingParkinglotinfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingParkinglotinfoUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingSpaceinfoSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarParkingVehicleQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarPromoTicketPushResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarPromoTicketSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarPromoVoucherVerifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarTradeOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarTradeRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarViolationCityPushResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoMycarViolationInfoPushResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoRebateBalanceQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoRebateBalanceSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoSignFlowCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoSignFlowCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoSignFlowFinishResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoSignFlowQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoSignflowsDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoSignflowsUrlQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayEcoWelfareCodeSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayExscUserCurrentsignGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayExscUserFirstfundinpourGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayExscUserFirstsignGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFlashsalesStockSyncUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAccountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAccountbookCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAccountbookQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAuthOperationCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAuthOperationDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAuthOrderAppFreezeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAuthOrderFreezeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAuthOrderUnfreezeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundAuthOrderVoucherCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundBatchCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundBatchCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundBatchDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundBatchTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundBatchUniTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundCouponOperationQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundCouponOrderAgreementPayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundCouponOrderAppPayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundCouponOrderDisburseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundCouponOrderPagePayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundCouponOrderRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundTransAppPayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundTransCommonQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundTransOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundTransRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundTransToaccountTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayFundTransUniTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoaftermarketAttachmentUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoaftermarketDepotCreateormodifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoaftermarketInserviceorderNotifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoaftermarketOutorderSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoinsprodCommonConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoinsprodEnquriyApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoinsprodPolicyApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoinsprodPolicyCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoinsprodQuoteApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoinsprodQuoteQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoAutoinsprodUserCertifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsAutoCarSaveResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsCooperationProductOfflineBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsCooperationProductQrcodeApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsCooperationRegionQrcodeApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsSceneApplicationIssueConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsSceneCouponReceiveResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayInsSceneCouponSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignActivityOfflineCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignActivityOfflineTriggerResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignCashCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignCashDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignCashListQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignCashStatusModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignCashTriggerResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignCertCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDiscountBudgetAppendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDiscountBudgetCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDiscountBudgetQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDiscountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDiscountStatusUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDiscountWhitelistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDiscountWhitelistUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDrawcampCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDrawcampQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDrawcampStatusUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDrawcampUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignDrawcampWhitelistCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCampaignPrizeAmountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardActivateformQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardActivateurlApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardBenefitCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardBenefitDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardBenefitModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardBenefitQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardConsumeSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardFormtemplateSetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardOpenResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardTemplateBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardTemplateModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardTemplateQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCardUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCashitemvoucherTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCashlessitemvoucherTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCashlessvoucherTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCashlessvoucherTemplateModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCashvoucherTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCashvoucherTemplateModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCdpAdvertiseCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCdpAdvertiseModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCdpAdvertiseOperateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCdpAdvertiseQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCdpAdvertiseReportQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCdpRecommendQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingCouponTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingExchangevoucherTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingExchangevoucherUseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingFacetofaceDecodeUseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingMaterialImageUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieActivityCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieActivityQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieEditorQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieMemberCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSitesBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSitesConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSitesCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSitesDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSitesQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSitesSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSpaceBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSpaceCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieSpaceQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieTemplateBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieTemplateQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingToolFengdieTemplateSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingUserulePidQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherAuthSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherListQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherStockCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherStockMatchResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherStockQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherStockUseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherTemplateDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherTemplatedetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMarketingVoucherTemplatelistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMdataTagGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMemberCouponQuerylistResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMerchantItemFileUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMerchantOrderConsumerQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMerchantOrderDigestConsumerBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMerchantOrderSecuritydetailConsumerQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMerchantOrderSecuritydigestConsumerBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMerchantOrderSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMicropayOrderConfirmpayurlGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMicropayOrderDirectPayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMicropayOrderFreezeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMicropayOrderFreezepayurlGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMicropayOrderGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMicropayOrderUnfreezeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileBeaconDeviceAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileBeaconDeviceDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileBeaconDeviceModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileBeaconDeviceQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileBeaconMessageSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileBksigntokenVerifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileCodeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileCodeQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicAccountAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicAccountDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicAccountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicAccountResetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicAppinfoUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicContactFollowListResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicFollowListResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicGisGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicInfoModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicInfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicLabelAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicLabelDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicLabelQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicLabelUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicLabelUserAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicLabelUserDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicLabelUserQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMenuAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMenuDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMenuGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMenuQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMenuUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMenuUserQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMenuUserUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMessageCustomSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMessageLabelSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMessagePushResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMessageSingleSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMessageTotalSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMessagebatchPushResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicMessagespecifyPushResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicQrcodeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicShortlinkCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicTemplateMessageDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicTemplateMessageGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicTemplateMessageModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobilePublicTemplateMessageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileRecommendGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileShakeUserQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileStdPublicAccountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileStdPublicExpressUserQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileStdPublicFollowListResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileStdPublicMenuQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMobileStdPublicMessageCustomSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMpointprodBenefitDetailGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMsaasMediarecogVoiceMediaaudioUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayMsaasPromotionCpainfoCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketApplyorderBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketItemCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketItemModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketItemStateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketMcommentQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketProductBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketProductQuerydetailResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketReporterrorCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopApplyorderCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopCategoryQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopDiscountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopPublicBindResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopPublicUnbindResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopQuerydetailResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketShopSummaryBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketingVoucherCodeUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketingVoucherCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketingVoucherModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketingVoucherOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketingVoucherStatusQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMarketingVoucherUseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMaterialImageDownloadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineMaterialImageUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineProviderDishQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineProviderEquipmentAuthQuerybypageResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineProviderEquipmentAuthRemoveResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineProviderMonitorLogSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineProviderShopactionRecordResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOfflineProviderUseractionRecordResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentFacetofaceSignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentMiniCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentMobilepaySignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentOfflinepaymentSignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentSignstatusQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAgentZhimabriefSignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAlipaycertDownloadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentFunctionCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentFunctionModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentFunctionOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentFunctionQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentItemBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentItemCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentItemDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentItemModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppAppcontentItemQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppCallQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppCodetesttestResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppDedfDdQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppDfsfasDeQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppLingbalingliuQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppLingjiuyisiCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppLingjiuyiwuBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppMembersCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppMembersDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppMembersQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppMessageSubscriptionModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppMessageSubscriptionQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppMessageTopicSubscribeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppMessageTopicUnsubscribeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppMiniTemplatemessageSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppNotifyModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppNotifyVerifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppOpenbizmockApisdkgrayQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppOpenbizmockMessageSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppOpenbizmockOpenidnonstandQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppQrcodeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppSmgMsgSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppSmsgDataSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppSystemNewcontextupiduoidTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppUpdattestBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppXwbtestabcQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppYiyiyiwuQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAppYufanlingsanyaowuYufalingsanyaowuQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAuthAppAesGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAuthAppAesSetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAuthIndustryPlatformCreateTokenResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAuthTokenAppQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenAuthTokenAppResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenBizCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenDafBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenEchoOfflineSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenInviteOrderCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenInviteOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMessagetestCesSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniBaseinfoModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniBaseinfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniBizdataTemplatemessageDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniBizdataTemplatemessageUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniCategoryQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniContentSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniDataVisitQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniExperienceCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniExperienceCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniExperienceQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniIndividualBusinessCertifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniItemBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniItemPageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniMiniappServiceconfigModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniQrcodeBindResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniQrcodeUnbindResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniReleaststBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniSafedomainCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniSafedomainDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniTemplateUsageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniTemplatemessageUsertemplateApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniTinyappExistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionAuditApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionAuditCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionAuditedCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionBuildQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionGrayCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionGrayOnlineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionListQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionOnlineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionRollbackResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenMiniVersionUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenNewgotoneCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenOperationBizfeeActivityApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenOperationOpenbizmockBizQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenOperationSsffDeeQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPageNewcontextTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPageOldcontextTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicAccountCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicAccountDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicAccountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicAccountResetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicAdvertBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicAdvertCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicAdvertDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicAdvertModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicArticlesummaryDataBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicComptestCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicContactFollowBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicDefaultExtensionCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicFollowBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicGisQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicGroupBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicGroupCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicGroupCrowdQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicGroupDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicGroupModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicInfoModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicInfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLabelCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLabelDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLabelModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLabelQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLabelUserCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLabelUserDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLabelUserQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeAboardApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeAccountCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeAgentCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeAgentcreateQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeDebarkApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeLabelBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeLabelCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeLabelDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeLabelModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeMsgRecallResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicLifeMsgSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMatchuserLabelCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMatchuserLabelDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMenuBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMenuCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMenuDataBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMenuDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMenuModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMenuQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessageContentCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessageContentModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessageCustomSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessageGroupSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessageLabelSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessagePreviewSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessageSingleSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMessageTotalSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicMultimediaDownloadProxyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPartnerMenuOperateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPartnerMenuQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPartnerSubscribeSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPayeeBindCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPayeeBindDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPersonalizedExtensionBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPersonalizedExtensionCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPersonalizedExtensionDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPersonalizedExtensionSetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPersonalizedMenuCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicPersonalizedMenuDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicQrcodeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicSettingCategoryQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicShortlinkCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicSinglearticleDataBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicTemplateMessageAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicTemplateMessageGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicTemplateMessageIndustryModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicThirdCustomerServiceResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicTopicBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicTopicCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicTopicDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicTopicModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicUserDataBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicUserFollowQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenPublicXwbtestabcdBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketCommodityShopOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketCommodityShopOnlineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketOrderAcceptResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketOrderItemCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketOrderItemCompleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketOrderItemConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketOrderNotifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenServicemarketOrderRejectResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenSmsgDataSetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayOpenTestQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassCodeAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassCodeVerifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassFileAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassInstanceAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassInstanceUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassSyncAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassSyncUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassTemplateAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassTemplateUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassTplAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassTplContentAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassTplContentUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassTplUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPassVerifyQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPayAppMarketingConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPayCodecHschoolDecodeUseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthAccumulationQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthAgreementCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthAgreementQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthBusinessConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthOrderCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthOrderUnfreezeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthRefundApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthSettleApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiAuthSignApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiDiscountBillQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiDiscountSolutionCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiDiscountSolutionModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiDiscountSolutionOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiDiscountSolutionOnlineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiMerchantActivityCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiMerchantActivityModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiMerchantActivityOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiMerchantActivityOnlineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiMerchantBillQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditHuabeiPromoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditLoanApplyCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPcreditLoanRefundCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPlatformOpenidGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPlatformUseridGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPointBalanceGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPointBudgetGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPointOrderAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPointOrderGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayPromorulecenterRuleAnalyzeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityInfoAnalysisResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdAlipaySecurityProdTestResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdAmlriskQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdCheckIqQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdDdsBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdDesQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdDfasfdasFdfdsBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdDfesfDefBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFacePayCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFacePayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFacerepoAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFacerepoSearchResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFingerprintApplyInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFingerprintApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFingerprintDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFingerprintDeviceVerifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFingerprintRiskcontrolQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFingerprintVerifyInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdFingerprintVerifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdMyQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdNopidBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdShopQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdSignatureFileUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdSignatureTaskApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdSignatureTaskCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdSignatureTaskQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdXwbtestabcAbcQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityProdXwbtestprodQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityRiskContentDetectResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityRiskCustomerriskQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityRiskCustomerriskSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityRiskDetectResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityRiskHideDeviceidQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityRiskRainscoreQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecuritySssssssQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySecurityTesttestQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipaySystemOauthTokenResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeAdvanceConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeAppPayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeCustomsDeclareResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeCustomsQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeFastpayRefundQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeOrderSettleResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeOrderinfoSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradePagePayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradePageRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradePayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradePrecreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeRoyaltyRelationBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeRoyaltyRelationBindResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeRoyaltyRelationUnbindResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeVendorpayDevicedataUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTradeWapPayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTransferThirdpartyBillCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTrustUserAuthSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTrustUserReportGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTrustUserRiskidentifyGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTrustUserScoreGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayTrustUserTokenGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAccountFreezeGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAccountGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAccountSearchResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAccountUseridBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAddressQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAgreementExecutionplanModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAgreementPageSignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAgreementQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAgreementTransferResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAgreementUnsignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAgreementUserverifyApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAgreementUserverifyQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAlipaypointSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserAuthZhimaorgIdentityApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserCertdocCertverifyConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserCertdocCertverifyPreconsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserCertifyOpenCertifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserCertifyOpenInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserCertifyOpenQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserContractGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserFamilyArchiveInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserFamilyArchiveQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserFinanceinfoShareResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserInfoAuthResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserInfoShareResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserPassInstancebatchAddResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserPassTemplateCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserPassTemplateModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserPassTemplateQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserTestResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserTradeSearchResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserTwostageCommonUseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayUserUserinfoShareResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayZdataassetsEasyserviceResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayZdataassetsFcdatalabZdatamergetaskResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayZdataassetsMetadataResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayZdatafrontCommonQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayZdatafrontDatatransferedFileuploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayZdatafrontDatatransferedSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayZdataserviceUnidataQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AlipayZmscoreZrankGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AmapMapMapserviceTeseBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandContractFacetofaceQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandContractFacetofaceSignResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandEnterpriseApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandImageUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandIndirectImageUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandIndirectIsvModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandItemOpenBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandItemOpenCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandItemOpenDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandItemOpenModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandItemOpenQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandMapplyorderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandMerchantStorelistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandPersonalApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandShopCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandShopConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandShopCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandShopModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntMerchantExpandShopQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntOcrDriverlicenseIdentifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntOcrGeneralIdentifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntOcrIdcardIdentifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntOcrVehiclelicenseIdentifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AntOcrVehicleplateIdentifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/AnttechBlockchainFinanceFileUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/HuanxuTradeOrderCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/HuanxuTradeOrderDisburseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/HuanxuTradeOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/HuanxuTradeOrderRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiAdvertDeliveryDiscountAuthwebBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiAdvertDeliveryDiscountGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiAdvertDeliveryDiscountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiAdvertDeliveryDiscountSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiAdvertDeliveryDiscountWebBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiAdvertDeliveryItemApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringCommodityOrderBuyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringCrowdgroupConditionQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringCrowdgroupConditionSetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishCommgroupQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishCommgroupSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishCommruleQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishCommruleSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishCookcatetopSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishMenuQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishMenuSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishSpecgroupQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishSpecgroupSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishVirtualdishQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringDishVirtualdishSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringTablecodeQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCateringTablelistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCraftsmanDataProviderBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCraftsmanDataProviderCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCraftsmanDataProviderModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCraftsmanDataWorkBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCraftsmanDataWorkCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCraftsmanDataWorkDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiCraftsmanDataWorkModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemCategoryChildrenBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemExtitemBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemExtitemBrandQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemExtitemCategoryQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemExtitemCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemExtitemExistedQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemExtitemQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemExtitemUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiItemStateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignActivityBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignActivityCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignActivityModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignActivityOfflineResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignActivityQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignAssetDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignCrowdBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignCrowdCountResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignCrowdCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignCrowdDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignCrowdDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignCrowdModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignDetailInfoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignIntelligentPromoBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignIntelligentPromoConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignIntelligentPromoCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignIntelligentPromoDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignIntelligentPromoModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignIntelligentPromoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignIntelligentShopConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignIntelligentTemplateConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignItemMerchantactivityBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignItemMerchantactivityCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignItemMerchantactivityCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignItemMerchantactivityModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignItemMerchantactivityQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignRecruitApplyQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignRecruitShopQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignTagsQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingCampaignUserAssetQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataActivityBillDownloadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataActivityReportQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataAlisisReportBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataAlisisReportQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataBizadviserMemberprofileQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataBizadviserMyddsreportQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataBizadviserMyreportQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataCustomreportBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataCustomreportDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataCustomreportDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataCustomreportQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataCustomreportSaveResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataDishdiagnoseBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataDishdiagnosetypeBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataEnterpriseStaffinfoUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataIndicatorQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataIntelligentEffectQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataIntelligentIndicatorQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataIsvShopQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataMallShopitemsQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataMemberReportQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataMessageDeliverResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataNearmallQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataRetailDmQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataSmartactivityConfigResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataSmartactivityForecastResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataSmartmanagementDiagnoseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingDataTradeHabbitQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingToolIsvMerchantQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingToolPointsQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingToolPointsUpdateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMarketingToolPrizesendAuthResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMemberBrandownerNameQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMemberDataDesdBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMemberDataIsvCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMemberDataOauthQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMemberRetailerQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMerchantKbdeviceDevicesBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiMerchantKbdeviceDispenserQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiQualityTestCloudacptActivityQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiQualityTestCloudacptBatchQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiQualityTestCloudacptCheckresultSubmitResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiQualityTestCloudacptItemQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiRetailShopitemBatchqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiRetailShopitemModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiRetailShopitemUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiSalesLeadsSaleleadsCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiSalesLeadsShopleadsCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeItemBuyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeItemorderBuyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeItemorderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeItemorderRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeKbdeliveryDeliveryApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeKbdeliveryDeliveryCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeOrderAggregateConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeOrderConsultResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeOrderEnterpriseQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeOrderEnterpriseSettleResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeOrderPrecreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeOrderQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeTicketSendCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeTicketTicketcodeCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeTicketTicketcodeCheckavailableResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeTicketTicketcodeDelayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeTicketTicketcodeQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeTicketTicketcodeSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeTicketTicketcodeSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/KoubeiTradeTicketTicketcodeUseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MonitorHeartbeatSynResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankCreditLoanapplyDataUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankCreditUserCertifyOpenQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankCreditUserInfoShareQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankCreditUserOpenCertifyCertifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankCreditUserOpenCertifyInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankCreditUserSystemOauthQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankFinanceYulibaoAccountQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankFinanceYulibaoCapitalPurchaseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankFinanceYulibaoCapitalRansomResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankFinanceYulibaoPriceQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankFinanceYulibaoTransHistoryQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankPaymentTradeFinancingOrderCloseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankPaymentTradeFinancingOrderCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankPaymentTradeFinancingOrderRefundResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankPaymentTradeOrderCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankPaymentTradeQrcodeCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/MybankPaymentTradeQrcodeDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/SsdataDataserviceRiskAlixiaohaoQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/SsdataDataserviceRiskAntifraudlistQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/SsdataDataserviceRiskAntifraudscoreQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaAuthInfoAuthqueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditAntifraudRiskListResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditAntifraudScoreGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditAntifraudVerifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditContractBorrowCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditContractBorrowCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditContractBorrowDelayResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditContractBorrowInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditContractBorrowQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditContractBorrowReturnResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditContractPrincipalQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpInfoGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpLawsuitDetailGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpLawsuitRecordGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpSceneAgreementCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpSceneAgreementUseResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpSceneFulfillmentSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpSceneFulfillmentlistSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpSceneRatingApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpSceneRatingInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpSceneRatingQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditEpScoreGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditOrderRepaymentApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditPeLawsuitDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditPeLawsuitRecordGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditScoreBriefGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditScoreGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditWatchlistBriefGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCreditWatchlistiiGetResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerAuthMutualviewApplyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerBehaviorSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerCertificationCertifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerCertificationInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerCertificationMaterialCertifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerCertificationQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerContractDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerContractInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerEpCertificationCertifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerEpCertificationInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaCustomerEpCertificationQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaDataBatchFeedbackResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaDataFeedbackurlQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaDataStateDataSyncResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantBorrowEntityUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantCloseloopDataUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantContractCommonCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantContractCommonConfirmResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantContractCommonQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantContractOfferModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantContractOfferQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantContractOnofferQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantContractPageQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantContractQuickCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantCreditserviceDetailCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantCreditserviceDetailModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantCreditserviceDetailQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantDataUploadInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantLogoImageUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantOrderRentCancelResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantOrderRentCompleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantOrderRentCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantOrderRentModifyResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantOrderRentQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantSingleDataUploadResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaMerchantTestPracticeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaOpenAppDesSendResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaOpenAppKeyanLqlCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZhimaOpenQerqQerqQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZolozAuthenticationCustomerFacemanageCreateResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZolozAuthenticationCustomerFacemanageDeleteResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZolozAuthenticationCustomerFtokenQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZolozAuthenticationCustomerSmilepayInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZolozAuthenticationSmilepayInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZolozIdentificationCustomerCertifyzhubQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZolozIdentificationUserWebInitializeResponse.cs create mode 100644 PaymentSDK/AliPay/Response/ZolozIdentificationUserWebQueryResponse.cs create mode 100644 PaymentSDK/AliPay/Util/AlipayEncrypt.cs create mode 100644 PaymentSDK/AliPay/Util/AlipaySignature.cs create mode 100644 PaymentSDK/AliPay/Util/AntCertificationUtil.cs create mode 100644 PaymentSDK/AliPay/Util/AopUtils.cs create mode 100644 PaymentSDK/AliPay/Util/ArgumentValidator.cs create mode 100644 PaymentSDK/AliPay/Util/Asymmetric/AsymmetricManager.cs create mode 100644 PaymentSDK/AliPay/Util/Asymmetric/BaseAsymmetricEncryptor.cs create mode 100644 PaymentSDK/AliPay/Util/Asymmetric/IAsymmetricEncryptor.cs create mode 100644 PaymentSDK/AliPay/Util/Asymmetric/RSA2Encryptor.cs create mode 100644 PaymentSDK/AliPay/Util/Asymmetric/RSAEncryptor.cs create mode 100644 PaymentSDK/AliPay/Util/Asymmetric/SM2Encryptor.cs create mode 100644 PaymentSDK/AliPay/Util/CertEnvironment.cs create mode 100644 PaymentSDK/AliPay/Util/FileItem.cs create mode 100644 PaymentSDK/AliPay/Util/RSAUtil.cs create mode 100644 PaymentSDK/AliPay/Util/SignSourceData.cs create mode 100644 PaymentSDK/AliPay/Util/StringUtil.cs create mode 100644 PaymentSDK/AliPay/Util/WebUtils.cs create mode 100644 PaymentSDK/PaymentSDK.csproj create mode 100644 PaymentSDK/WeiPay/CheckSignature.cs create mode 100644 PaymentSDK/WeiPay/OrderQuery.cs create mode 100644 PaymentSDK/WeiPay/WeiPayHelper.cs create mode 100644 PaymentSDK/WeiPay/WeiXinPayConfig.cs create mode 100644 PaymentSDK/WeiPay/WeixinModel.cs create mode 100644 PaymentSDK/WeiPay/WxPayData.cs create mode 100644 README-en.md create mode 100644 README.md create mode 100644 codecov.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3729ff0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.docs/contents/.vuepress/config.js b/.docs/contents/.vuepress/config.js new file mode 100644 index 0000000..982fb80 --- /dev/null +++ b/.docs/contents/.vuepress/config.js @@ -0,0 +1,46 @@ +module.exports = { + title: 'New_College', + description: 'Hello, 欢迎使用前后端分离之 ASP.NET Core 后端全家桶框架!', + base : '/.doc/', + head: [ + ['link', { + rel: 'icon', + href: `/favicon.ico` + }] + ], + dest: './contents/.vuepress/dist', + ga: '', + evergreen: true, + themeConfig: { + nav: [ + { text: '首页', link: '/' }, + { text: '指南', link: '/guide/' }, + { text: '更新日志', link: '/Update/' }, + { text: '压测', link: '/PressureTest/' }, + { text: '参与贡献', link: '/Contribution/' }, + { text: '社区', link: '/QQ/' }, + { text: '接口API', link: 'http://apk.neters.club' }, + { text: '管理后台', link: 'http://vueadmin.neters.club' }, + { text: 'Github', link: 'https://github.com/anjoy8/New_College' }, + ], + sidebarDepth: 2, + sidebar: { + '/guide/': getGuideSidebar('Guide'), + } + } +} + +function getGuideSidebar (groupA) { + return [ + { + title: groupA, + collapsable: false, + children: [ + '', + 'getting-started', + 'function-sheet', + 'cheat-sheet' + ] + } + ] + } \ No newline at end of file diff --git a/.docs/contents/.vuepress/public/bcvphomelogo.png b/.docs/contents/.vuepress/public/bcvphomelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..e1bf0f79d16b27c9f911c995cdd0f15a849c1d14 GIT binary patch literal 5644 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 Ip26V%1Gkl@sQ>@~ literal 0 HcmV?d00001 diff --git a/.docs/contents/.vuepress/public/favicon.ico b/.docs/contents/.vuepress/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..68062fe0577bebf8065cfc59d83f29f40a8bd7f1 GIT binary patch literal 1556 zcmV+v2J88WP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1*u6yK~z{r?N(WA zR8<)MX6~J(v$Qi4x`7m0T3QN4s8R%i5L{Ri6D5e4078sDXynC>5EB)BktcjIp@s+= zqL8R5Dq&GE2&GtB#ZsUP6l6MWXz4PY&fTy7IdiA9(qaq5^ucd(=H7GubI$*rf4j$K z5-?6+x1Qqy|C1RBN?e1}CBPqYBP-vJ$;Cd{?f36IBakss zeW(@9HC<2@9fD|s%}&im5}IuqCUo6^U>7jGEP&GGlSpRcV~iYozZ={}rZW=5(cMkZ zGy|eT-~>hjTWaVgC;HfiX~@X&!7vhp?gm51M6UGW2oZ6*M|V1=m`!7ZRLR7Om-CS| zHO-Qa9?1g?kcsum*#FTvI8(?P^cw(4nUxIfmI28-mepvU&9q!cn?lFx*Ji^TbXqe< zhs2>sYm&@2AJ-w;B|#8wnOLVu8lAYHG#$CKL+}S(i1o;5sq4nYs&+U%cA8JjES@aB zGIRY{zIl3LV2mI#x_P}JibJ1XfZHcp!$gFv;dDB%=8f6pHd07XWSwVI^8MSL^^heQ zf+KMNL$$#d6!G+y65eNE^O&6-*19`^Tjq!Ii)g#r%}vi>P_~%54Vyol$NQ%bUc>p5 z5h#iVQ548h8Cbe5kIVMHR}EEDV5f|eq6U_4oPoRtL+EOc149=>uDKkjQFR|;6XCJ!rLEaF6ZZb;a_ zqn3!+D9~-zo-F-AF$Ns}s);LRIQU6Dc5OY0-P@{oSlE@gPGmG*$V>`Yg9?}1lgNfh zOD}C`ks#UN#?rsxY=kyDh40Jj@XLWFe7U0UVn&m`4R!V_x;m|#ctIY=D%RN59{7~mT z#U+ZBL{u|K{VL`x&c)KT`Mlr!M+Z8?eMn1BLE*eiKK5%xBhDOdgv(9q=%lKwA*Ub< ztGCSM@^1RlH`jLX_uP^YLRnt^J`y+?_OkQUW0WP7-V|g>FhW_AgH#_1k(rZfjRGCv zD30yBh}M=)xG1xdU=|Hb@MGgU3$2l{VSr41RRrIa*TNfc4b&SZUKq7H`$(Pf9O zm^_A9Ad7_dwdhxgW@=I1N$raFhXY&h^*LQj^;GZ#(7 zs*Q7af5=yV47iO9LqknF4wl#O6lNbdRu2Z>Z`cy%K6b6}r@Qgw`dP>=${__?-%Zg3^VHeH0(HX6Yw|3()tChQ+DtG0000 + + + +## 2、测试准备 +因为 `JMeter` 是使用 `JAVA` 写的,所以使用 `JMeter` 之前,先安装 `JAVA` 环境。 +安装好后,在 `bin` 文件夹下,点击 `jmeter.bat` 启动程序。 +启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI。前面不要忽略CMD窗口的提示信息,不要关闭它。 + +## 3、配置数据 +本地发布后的 `windows` 环境,直接用 `kestrel` 启动。 +线程数:100 +循环数:10000 +HTTP默认值:协议:`http`;服务器或IP:`localhost`;端口号:`8081`; +HTTP请求:方法:GET;路径:`/api/blog/ApacheTestUpdate` +HTTP信息请求管理器:无 +响应断言:无 + + + +## 项目配置 +目前采用 `New_College` 默认的配置, +开启了内存 `AOP` 和日志 `AOP`, +其他的都是默认的,然后也把任务调度也关闭了, +最后注意要把 `IP限流`给关闭,不然压测没效果,因为限流了: + + + +## 压测结果 +1、为了显示正确性,我用动图,来显示日志生成情况,整个阶段无任何异常: + + + + +2、内存方面,`100*10000` 的压测过程中,项目保证所占内存在 `160~220m` 之间: + + + +## 压测配置文件下载 + [配置文件](https://img.neters.club/doc/new_collegetest.jmx) + 下载后,导入到工具里,可以直接测试,察看结果树。 + + ## Docker 镜像 + 已经提交到 `docker hub` 自行拉取操作即可: + ``` + docker pull laozhangisphi/apkimg:latest + ``` \ No newline at end of file diff --git a/.docs/contents/QQ/README.md b/.docs/contents/QQ/README.md new file mode 100644 index 0000000..485261c --- /dev/null +++ b/.docs/contents/QQ/README.md @@ -0,0 +1,11 @@ +## QQ 群 + +群1 +群2 + + +## 微信公众号 + +公众号 + + diff --git a/.docs/contents/README.md b/.docs/contents/README.md new file mode 100644 index 0000000..e7e1b12 --- /dev/null +++ b/.docs/contents/README.md @@ -0,0 +1,14 @@ +--- +home: true +heroImage: /bcvphomelogo.png +actionText: 快速上手 → +actionLink: /guide/ +features: +- title: 详尽的文档 + details: 通过详细的文章和视频讲解,将知识点各个击破,入门ASP.Net Core不再难 +- title: 强大的社区 + details: 通过 QQ 群,和数千位同业大佬一起切磋交流。 +- title: 丰富的内容 + details: 框架涵盖ASP.Net Core开发中常见的基本知识点,不仅适合初学者入门,同时也适用于企业级别的开发。 +footer: MIT Licensed | Copyright © 2018-2020-老张的哲学 +--- \ No newline at end of file diff --git a/.docs/contents/Update/README.md b/.docs/contents/Update/README.md new file mode 100644 index 0000000..b8cdfca --- /dev/null +++ b/.docs/contents/Update/README.md @@ -0,0 +1,121 @@ + +## 更新日志 + +### 2020-08-06 + +项目更新:更新项目模板 `Update New_College.Webapi.Template.2.2.0.nupkg` 。 +> 1、根据解决方案名,来自动导入model; +> 2、单独封装服务扩展层 `New_College.Extensions` ; +> 3、代码生成器,支持控制器文件的生成; +> 4、弱化仓储层,用泛型仓储基类注入服务; + + + + +### 2020-08-01 + +> 重大结构更新:弱化仓储层,通过泛型仓储基类,来实现仓储服务注入,并去掉`New_College.IRepository` 接口层; + +### 2020-07-03 + +> 更新:`DbFirstController` 生成四层文件,目前新增支持 `控制器Controller` 文件的输出; + + +### 2020-06-22 + +> 项目更新:将服务扩展和自定义中间件,单独封装一层 `New_College.Extensions` ,更解耦。 + + + +### 2020-06-08 + +> 简单项目更新:生成数据库表结构的时候,利用反射机制,自动生成固定命名空间 `New_College.Model.Models` 下的全部实体. +> 同时判断表是否存在,如果存在下次不再重复生成。 + + +### 2020-06-06 + +项目更新:更新项目模板 `Update New_College.Webapi.Template.2.1.0.nupkg` [1a726f8](https://github.com/anjoy8/New_College/commit/1a726f890e527c978982071462e82db4478632f0),更新项目即可 。 +> 1、配置内容展示到控制台; +> 2、简化封装 `Startup.cs` 类文件; +> 3、`DbFirst` 模式支持多库模式; +> 4、`Log4net` 讲异常和 `Info` 分开; +> 5、修复 `BlogLogAop` 偶尔卡顿问题; +> 6、将生成种子数据和任务调度功能,封装到中间件; +> 7、获取当前项目在服务器中的运行信息; +> 8、删除所有的不需要的 `using` 指令; + + + + +### 2020-05-29 +项目启动开启 `QuzrtzNet` 调度任务,并且在 `Admin` 后台管理中配置操作界面; +> 内容更新:封装生成种子数据的入口方法; + + + +### 2020-05-12 +修复:支持多库模式下,生成项目模板代码 `DbFirstController` [102c6d6](https://github.com/anjoy8/New_College/commit/102c6d6bfcafd06bf5241844759dea5e7a6815da) +> 注意:`T4` 模板不能此功能,一次只能一个数据库,且只能 `SqlServer` + + +### 2020-05-07 +> 重大内容更新:更新项目模板 `Update New_College.Webapi.Template.2.1.0.nupkg` [7f64fde](https://github.com/anjoy8/New_College/commit/7f64fde5507f7a8572372dcadb6af5110bd37d68) + + +### 2020-05-06 +> 重大内容更新:优化Log4Net使用方案,完美配合 `NetCore` 官方的 `ILogger`, [ecaffb6](https://github.com/anjoy8/New_College/commit/ecaffb66bdf10a90c087d01e6e817e54f23a97d4) + + +### 2020-05-01 + +> 重要内容更新:配合Admin全部完成按钮级别权限,更新初始化种子数据 + +### 2020-04-27 + +增加功能:配合前端Admin,增加页面 `KeepAlive` 功能; +增加功能:增加 `Sql` 语句查询Demo,支持返回 `DataTable`; + + +### 2020-04-25 + +增加功能:`Http api` 接口调用,满足微服务需求 +> 重要内容更新:优化 `Appsettings.app()` 方法,通过官方 `IConfiguration` 接口来获取DBS连接字符串; +> 优化 `BlogLogAOP.cs` + + +### 2020-04-15 + +> 重大内容更新:更新项目模板 `Update New_College.Webapi.Template.1.11.30.nupkg` + + +### 2020-04-14 +> 重大内容更新:主分支,可以通过配置,一键切换JWT和Ids4认证授权模式 + + +### 2020-03-30 +> 重大内容更新:统一所有接口返回格式 + + +### 2020-03-25 +增加功能:支持读写分离(目前是三种模式:单库、多库、读写分离) +> 重大BUG更新:系统登录接口,未对用户软删除进行判断,现已修复 +> API: /api/login/GetJwtToken3 +> Code: await _sysUserInfoServices.Query(d => d.uLoginName == name && d.uLoginPWD == pass && d.tdIsDelete == false); + + + +### 2020-03-18 +增加功能:创建 Quartz.net 任务调度服务 + + +### 2020-01-09 +增加功能:项目迁移到IdentityServer4,统一授权认证中心 + + +### 2020-01-05 +增加功能:设计一个简单的中间件,可以查看所有已经注入的服务 + + +### 2020-01-04 +增加功能:Ip限流,防止过多刷数据 diff --git a/.docs/contents/guide/README.md b/.docs/contents/guide/README.md new file mode 100644 index 0000000..adcccf9 --- /dev/null +++ b/.docs/contents/guide/README.md @@ -0,0 +1,89 @@ +# J 介绍 + +最新的前后端完全分离框架【 ASP.NET Core 3.1 Api + Vue 2.x + ele】。 +ASP.NET Core 3.1 教程,前后端分离的后端接口,vue教程的姊妹篇。 +BCVP(New_College&Vue Project)开箱即用的企业级前后端分离【 .NET Core3.1 Api + Vue 2.x + RBAC】权限框架。 + +## 你能得到什么? +1、从 0 到 1 快速入门 ASP.NET Core 框架。 +2、掌握开发中的常用知识点,为跨平台、微服务打好基础。 +3、下载即用,简单高效开发属于自己公司项目,配置简单,功能完善。 + + + +## 功能与进度 + +- [√] 采用仓储+服务+接口的形式封装框架; +- [√] 使用Swagger做api文档; +- [√] 使用MiniProfiler做接口性能分析; +- [√] 使用Automapper做Dto处理; +- [√] 接入SqlSugar ORM,封装数据库操作; +- [√] 项目启动,自动生成seed种子数据; +- [√] 提供五种日志输出; +- [√] 支持自由切换多种数据库,Sqlite/SqlServer/MySql/PostgreSQL/Oracle; +- [√] 异步async/await开发; +- [√] 支持事务; +- [√] AutoFac接入做依赖注入; +- [√] 支持AOP切面编程; +- [√] 支持CORS跨域; +- [√] 支持T4代码模板,自动生成每层代码; +- [√] 支持一键创建自己项目; +- [√] 封装 JWT 自定义策略授权; +- [√] 使用Log4Net日志框架+自定义日志输出; +- [√] 使用SingleR推送日志信息到管理后台; +- [√] 搭配前端Blog项目,vue开发; +- [√] 搭配一个Admin管理后台,用vue+ele开发; +- [√] IdentityServer4 认证; +- [√] API 限速; +- [√] 作业调度 Quartz.net; +- [√] Sqlsugar 读写分离; +- [ ] Redis 队列; +- [ ] 支付; +- [ ] 数据部门权限; + + + +## 它是如何工作的? + +这是一个基于 ASP.NET Core 3.1 的 api 项目,配合搭建 VUE 实现前后端分离工程。 + +************************************************************** +系统环境 + +> windows 10、SQL server 2012、Visual Studio 2017、Windows Server 2008 R2 + +后端技术: + +> 1、ASP.NET Core 3.1 API + 2、Swagger 前后端文档说明,基于RESTful风格编写接口 + 3、Repository + Service 仓储模式编程 + 4、Async和Await 异步编程 + 5、CORS 简单的跨域解决方案 + 6、AOP基于切面编程技术 + 7、Autofac 轻量级IoC和DI依赖注入 + 8、Vue 本地代理跨域方案,Nginx跨域代理 + 9、JWT权限验证 +10、Filter 过滤器 +11、Middleware 中间件 +12、AutoMapper 自动对象映射 +13、Redis + + +数据库技术 + +> SqlSugar 轻量级ORM框架,CodeFirst + T4 模板生成框架结构 + 支持SqlServer、Mysql、Sqlite、Oracle、Pgql数据库 + 支持多库操作 + + + + +前端技术 + +> Vue 2.x 框架全家桶 Vue2 + VueRouter2 + Webpack + Axios + vue-cli + vuex +ElementUI 基于Vue 2.0的组件库 +Nuxt.js服务端渲染SSR + + + diff --git a/.docs/contents/guide/cheat-sheet.md b/.docs/contents/guide/cheat-sheet.md new file mode 100644 index 0000000..6f6dd6a --- /dev/null +++ b/.docs/contents/guide/cheat-sheet.md @@ -0,0 +1,580 @@ +# Z 主要知识点 + + + +## AOP + +本项目多处采用面向切面编程思想——AOP,除了广义上的过滤器和中间件以外,主要通过动态代理的形式来实现AOP编程思想,主要的案例共有四个,分别是: +1、服务日志AOP; +2、服务InMemory缓存AOP; +3、服务Redis缓存AOP; +4、服务事务AOP; + + +具体的代码可以在 `New_College\New_College\AOP` 文件夹下查看。 + +与此同时,多个AOP也设置了阀门来控制是否开启,具体的可以查看 `appsettings.json` 中的: + +``` + "AppSettings": { + "RedisCachingAOP": { + "Enabled": false, + "ConnectionString": "127.0.0.1:6319" + }, + "MemoryCachingAOP": { + "Enabled": true + }, + "LogAOP": { + "Enabled": false + }, + "TranAOP": { + "Enabled": false + }, + "SqlAOP": { + "Enabled": false + } + }, + +``` + +## Appsettings + +整个系统通过一个封装的操作类 `Appsettings.cs` 来控制配置文件 `appsettings.json` 文件, +操作类地址在:`\New_College.Common\Helper` 文件夹下。 +具体的使用方法是: + +``` +Appsettings.app(new string[] { "AppSettings", "RedisCachingAOP", "Enabled" }) + +// 里边的参数,按照 appsettings.json 中设置的层级顺序来写,可以获取到指定的任意内容。 + +``` + + + +## AspNetCoreRateLimit + +系统使用 `AspNetCoreRateLimit` 组件来实现ip限流: +1、添加 `nuget` 包: +``` + +``` + +2、注入服务 `IpPolicyRateLimitSetup.cs` +``` +services.AddIpPolicyRateLimitSetup(Configuration); +``` + +3、配置中间件 +``` + // Ip限流,尽量放管道外层 + app.UseIpRateLimiting(); +``` + +4、配置数据 + +具体的内容,自行百度即可 +``` + "IpRateLimiting": { + "EnableEndpointRateLimiting": true, + "StackBlockedRequests": false, + "RealIpHeader": "X-Real-IP", + "ClientIdHeader": "X-ClientId", + "HttpStatusCode": 429,//返回状态码 + "GeneralRules": [//规则,结尾一定要带* + { + "Endpoint": "*", + "Period": "1m", + "Limit": 120 + }, + { + "Endpoint": "*:/api/blog*", + "Period": "1m", + "Limit": 30 + } + ] + + } +``` + + + +## Async-Await + +整个系统采用 async/await 异步编程,符合主流的开发模式, +特别是对多线程开发很友好。 + + + +## Authorization-Ids4 + +本系统 v2.0 版本(目前的系统已经集成 `ids4` 和 `jwt`,并且可以自由切换),已经支持了统一授权认证,和 `blog` 项目、`Admin` 项目、`DDD` 项目等一起,使用一个统一的认证中心。 + +具体的代码参考:`.\New_College\Extensions` 文件夹下的 `Authorization_Ids4Setup.cs` ,注意需要引用指定的 `nuget` 包,核心代码如下: + +``` + //【认证】 + services.AddAuthentication(o => + { + o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; + o.DefaultChallengeScheme = nameof(ApiResponseHandler); + o.DefaultForbidScheme = nameof(ApiResponseHandler); + }) + // 2.添加Identityserver4认证 + .AddIdentityServerAuthentication(options => + { + options.Authority = Appsettings.app(new string[] { "Startup", "IdentityServer4", "AuthorizationUrl" }); + options.RequireHttpsMetadata = false; + options.ApiName = Appsettings.app(new string[] { "Startup", "IdentityServer4", "ApiName" }); + options.SupportedTokens = IdentityServer4.AccessTokenValidation.SupportedTokens.Jwt; + options.ApiSecret = "api_secret"; + + }) + + +``` + +### 如何在Swagger中配置Ids4? +很简单,直接在 `SwaggerSetup.cs` 中直接接入 `oauth、Implicit` 即可: + +``` + //接入identityserver4 + c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme + { + Type = SecuritySchemeType.OAuth2, + Flows = new OpenApiOAuthFlows + { + Implicit = new OpenApiOAuthFlow + { + AuthorizationUrl = new Uri($"{Appsettings.app(new string[] { "Startup", "IdentityServer4", "AuthorizationUrl" })}/connect/authorize"), + Scopes = new Dictionary { + { + "new_college.api","ApiResource id" + } + } + } + } + }); + +``` + +然后在 `IdentityServer4` 项目中,做指定的修改,配置 `8081` 的回调地址: + +``` + new Client { + ClientId = "blogadminjs", + ClientName = "Blog.Admin JavaScript Client", + AllowedGrantTypes = GrantTypes.Implicit, + AllowAccessTokensViaBrowser = true, + + RedirectUris = + { + "http://vueadmin.neters.club/callback", + // 这里要配置回调地址 + "http://localhost:8081/oauth2-redirect.html" + }, + PostLogoutRedirectUris = { "http://vueadmin.neters.club" }, + AllowedCorsOrigins = { "http://vueadmin.neters.club" }, + + AllowedScopes = { + IdentityServerConstants.StandardScopes.OpenId, + IdentityServerConstants.StandardScopes.Profile, + "roles", + "new_college.api" + } + }, + +``` + +然后再 `Swagger` 中,配置登录授权: + +swagger + + +## Authorization-JWT + +如果你不想使用 `IdentityServer4` 的话,也可以使用 `JWT` 认证,同样是是`New_College\New_College\Extensions` 文件夹下的 `AuthorizationSetup.cs` 中有关认证的部分: + +``` + 1.添加JwtBearer认证服务 +.AddJwtBearer(o => +{ + o.TokenValidationParameters = tokenValidationParameters; + o.Events = new JwtBearerEvents + { + OnAuthenticationFailed = context => + { + // 如果过期,则把<是否过期>添加到,返回头信息中 + if (context.Exception.GetType() == typeof(SecurityTokenExpiredException)) + { + context.Response.Headers.Add("Token-Expired", "true"); + } + return Task.CompletedTask; + } + }; +}) + +``` + + +## AutoMapper + +使用 `AutoMapper` 组件来实现 `Dto` 模型的传输转换,具体的用法,可以查看: +`New_College\New_College\Extensions` 文件夹下的 `AutoMapperSetup.cs` 扩展类, +通过引用 `AutoMapper` 和 `AutoMapper.Extensions.Microsoft.DependencyInjection` 两个 `nuget` 包,并设置指定的 `profile` 文件,来实现模型转换控制。 + +``` +// 比如如何定义: + public class CustomProfile : Profile + { + /// + /// 配置构造函数,用来创建关系映射 + /// + public CustomProfile() + { + CreateMap(); + CreateMap(); + } + } + + +// 比如如何使用 +models = _mapper.Map(blogArticle); + +``` + +具体的查看项目中代码即可。 + + + + +## CORS + +在线项目使用的是 `nginx` 跨域代理,但是同时也是支持 `CORS` 代理: +1、注入服务 `services.AddCorsSetup();` 具体代码 `New_College\New_College\Extensions` 文件夹下的 `CorsSetup.cs` 扩展类; +2、配置中间件 `app.UseCors("LimitRequests");` ,要注意中间件顺序; +3、配置自己项目的前端端口,通过在 `appsettings.json` 文件中配置自己的前端项目 `ip:端口` ,来实现跨域: + +``` + "Startup": { + "Cors": { + "IPs": "http://127.0.0.1:2364,http://localhost:2364,http://localhost:8080,http://localhost:8021,http://localhost:1818" + } + }, + +``` + + +## DI-AutoFac + +项目使用了依赖注入,除了原生的依赖注入以外,更多的使用的是第三方组件 `Autofac` : +1、引用依赖包: +``` + + + +``` +主要是第一个 `nuget` 包,下边的是为了实现动态代理 `AOP` 操作; + +2、项目之间采用引用解耦的方式,通过反射来注入服务层和仓储层的程序集 `dll` 来实现批量注入,更方便,以后每次新增和修改 `Service` 层和 `Repository` 层,只需要 `F6` 编译一下即可,具体代码查看 `Startup.cs`: + +``` + + + // 注意在CreateDefaultBuilder中,添加Autofac服务工厂 + public void ConfigureContainer(ContainerBuilder builder) + { + var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath; + //builder.RegisterType().As(); + + + #region 带有接口层的服务注入 + + + var servicesDllFile = Path.Combine(basePath, "New_College.Services.dll"); + var repositoryDllFile = Path.Combine(basePath, "New_College.Repository.dll"); + + if (!(File.Exists(servicesDllFile) && File.Exists(repositoryDllFile))) + { + throw new Exception("Repository.dll和service.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。"); + } + + + + // AOP 开关,如果想要打开指定的功能,只需要在 appsettigns.json 对应对应 true 就行。 + var cacheType = new List(); + if (Appsettings.app(new string[] { "AppSettings", "RedisCachingAOP", "Enabled" }).ObjToBool()) + { + builder.RegisterType(); + cacheType.Add(typeof(BlogRedisCacheAOP)); + } + if (Appsettings.app(new string[] { "AppSettings", "MemoryCachingAOP", "Enabled" }).ObjToBool()) + { + builder.RegisterType(); + cacheType.Add(typeof(BlogCacheAOP)); + } + if (Appsettings.app(new string[] { "AppSettings", "TranAOP", "Enabled" }).ObjToBool()) + { + builder.RegisterType(); + cacheType.Add(typeof(BlogTranAOP)); + } + if (Appsettings.app(new string[] { "AppSettings", "LogAOP", "Enabled" }).ObjToBool()) + { + builder.RegisterType(); + cacheType.Add(typeof(BlogLogAOP)); + } + + // 获取 Service.dll 程序集服务,并注册 + var assemblysServices = Assembly.LoadFrom(servicesDllFile); + builder.RegisterAssemblyTypes(assemblysServices) + .AsImplementedInterfaces() + .InstancePerDependency() + .EnableInterfaceInterceptors()//引用Autofac.Extras.DynamicProxy; + .InterceptedBy(cacheType.ToArray());//允许将拦截器服务的列表分配给注册。 + + // 获取 Repository.dll 程序集服务,并注册 + var assemblysRepository = Assembly.LoadFrom(repositoryDllFile); + builder.RegisterAssemblyTypes(assemblysRepository) + .AsImplementedInterfaces() + .InstancePerDependency(); + + #endregion + + #region 没有接口层的服务层注入 + + //因为没有接口层,所以不能实现解耦,只能用 Load 方法。 + //注意如果使用没有接口的服务,并想对其使用 AOP 拦截,就必须设置为虚方法 + //var assemblysServicesNoInterfaces = Assembly.Load("New_College.Services"); + //builder.RegisterAssemblyTypes(assemblysServicesNoInterfaces); + + #endregion + + #region 没有接口的单独类 class 注入 + + //只能注入该类中的虚方法 + builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(Love))) + .EnableClassInterceptors() + .InterceptedBy(cacheType.ToArray()); + + #endregion + + + // 这里和注入没关系,只是获取注册列表,请忽略 + tsDIAutofac.AddRange(assemblysServices.GetTypes().ToList()); + tsDIAutofac.AddRange(assemblysRepository.GetTypes().ToList()); + } + +``` + +3、然后 `Program.cs` 中也要加一句话:` .UseServiceProviderFactory(new AutofacServiceProviderFactory()) //<--NOTE THIS ` + + + +## DI-NetCore + +除了主要的 `Autofac` 依赖注入以外,也减少的使用了原生的依赖注入方式,很简单,比如这样的: +``` + + services.AddSingleton(); + // 注入权限处理器 + services.AddScoped(); + services.AddSingleton(permissionRequirement); +``` + + +## Filter + +项目中一共有四个过滤器 +``` +1、GlobalAuthorizeFilter.cs —— 全局授权配置,添加后,就可以不用在每一个控制器上添加 [Authorize] 特性,但是3.1版本好像有些问题,【暂时放弃使用】; +2、GlobalExceptionFilter.cs —— 全局异常处理,实现 actionContext 级别的异常日志收集; +3、GlobalRoutePrefixFilter.cs —— 全局路由前缀公约,统计在路由上加上前缀; +4、UseServiceDIAttribute.cs —— 测试注入,【暂时无用】; +``` +文件地址在 `.\New_College\Filter` 文件夹下,其中核心的是 `2` 个,重点使用的是 `1` 个 —— 全局异常错误日志 `GlobalExceptionsFilter`: +通过注册在 `MVC` 服务 `services.AddControllers()` 中,实现全局异常过滤: +``` + services.AddControllers(o => + { + // 全局异常过滤 + o.Filters.Add(typeof(GlobalExceptionsFilter)); + // 全局路由权限公约 + //o.Conventions.Insert(0, new GlobalRouteAuthorizeConvention()); + // 全局路由前缀,统一修改路由 + o.Conventions.Insert(0, new GlobalRoutePrefixFilter(new RouteAttribute(RoutePrefix.Name))); + }) +``` + + + +## Framework + +项目采用 `服务+仓储+接口` 的多层结构,使用依赖注入,并且通过解耦项目,较完整的实现了 `DIP` 原则: +高层模块不应该依赖于底层模块,二者都应该依赖于抽象。 +抽象不应该依赖于细节,细节应该依赖于抽象。 + +同时项目也封装了: +`CodeFirst` 初始化数据库以及数据; +`DbFirst` 根据数据库(支持多库),生成多层代码,算是简单代码生成器; +其他功能,[核心功能与进度](http://apk.neters.club/.doc/guide/#%E5%8A%9F%E8%83%BD%E4%B8%8E%E8%BF%9B%E5%BA%A6) + + + + +## Log + +通过集成 `Log4Net` 组件,完美配合 `NetCore` 官方的 `ILogger` 接口,实现对日志的管控,引用 `nuget` 包 `Microsoft.Extensions.Logging.Log4Net.AspNetCore`: +Program.cs +``` + webBuilder + .UseStartup() + .ConfigureLogging((hostingContext, builder) => + { + //该方法需要引入Microsoft.Extensions.Logging名称空间 + builder.AddFilter("System", LogLevel.Error); //过滤掉系统默认的一些日志 + builder.AddFilter("Microsoft", LogLevel.Error);//过滤掉系统默认的一些日志 + + //添加Log4Net + //var path = Directory.GetCurrentDirectory() + "\\log4net.config"; + //不带参数:表示log4net.config的配置文件就在应用程序根目录下,也可以指定配置文件的路径 + //需要添加nuget包:Microsoft.Extensions.Logging.Log4Net.AspNetCore + builder.AddLog4Net(); + }); + +``` + +然后直接在需要的地方注入使用,比如在控制器中 +` public UserController(ILogger logger)` + +然后就可以使用了。 + +> 注意:日志 其实是分为两部分的: +> netcore输出(控制台、输出窗口等) 和 `ILogger` 持久化 +> 两者对应配置也不一样,就比如上边的过滤,是针对日志持久化的,如果想要对控制台进行控制,需要配置 `appsettings.json` 中的 `Logging` 节点 + + +## MemoryCache + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 + +## Middleware + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## MiniProfiler + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 + +## publish +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 + + +## Redis + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## Repository +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## SeedData + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## SignalR + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## SqlSugar + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## SqlSugar-Codefirst&DataSeed + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## SqlSugar-SqlAOP + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## Swagger + +精力有限,还是更新中... +如果你愿意帮忙,可以直接在GitHub中,提交pull request, +我会在后边的贡献者页面里,列出你的名字和项目地址做推广 +## T4 + +项目集成 `T4` 模板 `.\New_College.FrameWork` 层,目的是可以一键生成项目模板代码。 +1、需要在 `DbHelper.ttinclude` 中配置连接数据库连接字符串; +2、针对每一层的代码,就去指定的 `.tt` 模板,直接 `CTRL+S` 保存即可; + +> 注意,目前的代码是 `SqlServer` 版本的,其他数据库版本的,可以去群文件查看。 + + +## Test-xUnit + +项目简单使用了单元测试,通过 `xUnit` 组件,具体的可以查看 `New_College.Tests` 层相关代码。 +目前单元测试用例还比较少,大家可以自行添加。 + + +## Temple-Nuget + +本项目封装了 `Nuget` 自定义模板,你可以根据这个模板,一键创建自己的项目名,具体的操作,可以双击项目根目录下的 `CreateYourProject.bat` ,可以参考 [#如何项目重命名](http://apk.neters.club/.doc/guide/getting-started.html#%E5%A6%82%E4%BD%95%E9%A1%B9%E7%9B%AE%E9%87%8D%E5%91%BD%E5%90%8D) + +同时,你也可以再 `Nuget` 管理器中,搜索到: +nuget + + + +## UserInfo + + +项目中封装了获取用户信息的代码: +在 `.\New_College.Common\HttpContextUser` 文件夹下 `AspNetUser.cs` 实现类和 `IUser.cs` 接口。 + +如果使用,首先需要注册相应的服务,参见:`.\New_College\Extensions` 文件夹下的 `HttpContextSetup.cs`; +然后,就直接在控制器构造函数中,注入接口 `IUser` 即可; + +> `注意`: +> 1、如果要想获取指定的服务,必须登录,也就是必须要在 `Header` 中传递有效 `Token` ,这是肯定的。 +> 2、如果要获取用户信息,一定要在中间件 `app.UseAuthentication()` 之后(不要问为什么),控制器肯定在它之后,所以能获取到; +> 3、`【并不是】`一定需要添加 `[Authorize]` 特性,如果你加了这个特性,可以直接获取,但是如果不加,可以从我的 `AspNetUser.cs` 方法中,有一个直接从 `Header` 中解析的方法 `List GetUserInfoFromToken(string ClaimType);`: + +``` + public string GetToken() + { + return _accessor.HttpContext.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); + } + + public List GetUserInfoFromToken(string ClaimType) + { + + var jwtHandler = new JwtSecurityTokenHandler(); + if (!string.IsNullOrEmpty(GetToken())) + { + JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(GetToken()); + + return (from item in jwtToken.Claims + where item.Type == ClaimType + select item.Value).ToList(); + } + else + { + return new List() { }; + } + } + +``` diff --git a/.docs/contents/guide/function-sheet.md b/.docs/contents/guide/function-sheet.md new file mode 100644 index 0000000..3119a36 --- /dev/null +++ b/.docs/contents/guide/function-sheet.md @@ -0,0 +1,471 @@ +# H 核心功能一览表 + +## 一、表结构解析 + +`New_College` 项目共包含四部分的数据库表结构,分别是:用户角色管理部分、接口菜单权限管理部分、博客文章管理部分、以及其他不重要部分。 +> 注意:目前不提供与维护数据库数据,直接通过 `SeedData` 生成种子数据; + +### 1、用户角色管理部分[必须] +主要是三个表:分别对应用户表(sysUserInfo)、角色表(Role)、用户角色关系表(UserRole)。 + +usermanager + + + +### 2、接口菜单权限管理部分[必须] + +主要是四个表:分别对应接口表(Module)、菜单表(Permission)、接口菜单关系表(ModulePermission)暂时没用到、角色接口菜单关系表(RoleModulePermission)。 + +permissionmanager + + + + +### 3、博客文章管理部分[可选] +主要是三个表:分别对应博客表(BlogArticle)、Bug专题表(Topic)、Bug内容表(TopicDetail)。 + +blogmanager + + + + +### 4、其他不重要部分 + +主要是三个表:分别对应Job调度表(TasksQz)、密码库表(PasswordLib)、操作日志表(OperateLog)、广告表(Advertisement)、公告表(Guestbook)。 + +othersmanager + + + + + + +## 二、日志记录 + +本框架涵盖了不同领域的日志记录,共五个,分别是: + +1、全局异常日志 + + 开启方式:无需操作。 + 文件路径:web目录下,Log/GlobalExcepLogs_{日期}.log。 + 功能描述:记录项目启动后出现的所有异常日志,不包括中间件中异常。 + + +2、IP 请求日志 + + 开启方式:无需操作。 + 文件路径:web目录下,Log/RequestIpInfoLog.log。 + 功能描述:记录项目启动后客户端请求的ip和接口信息。 + 举例来说: + {"Ip":"xxx.xx.xx.x","Url":"/api/values","Datetime":"2020-01-06 18:02:19","Date":"2020-01-06","Week":"周一"} + + +3、全部请求与响应日志 + + 开启方式:appsettings.json -> Middlewar -> RequestResponseLog 节点为true。 + 文件路径:web目录下,Log/RequestIpInfoLog.log。 + 功能描述:记录项目启动后客户端所有的请求和响应日志,包括url参数、body以及相应json。 + + +4、服务层请求响应AOP日志 + + 开启方式:appsettings.json -> AppSettings -> LogAOP 节点为true。 + 文件路径:web目录下,Log/AOPLog.log。 + 功能描述:记录项目启动请求api后,所有的service层日志,包括方法名、参数、响应结果或用户(非必须)。 + + +5、数据库操作日志 + + 开启方式:appsettings.json -> AppSettings -> SqlAOP 节点为true。 + 文件路径:web目录下,Log/SqlLog.log。 + 功能描述:记录项目启动请求api并访问service后,所有的db操作日志,包括Sql参数与Sql语句。 + 举例来说: + -------------------------------- + 1/6/2020 6:13:04 PM| + 【SQL参数】:@bID0:1 + 【SQL语句】:SELECT `bID`,`bsubmitter`,`btitle`,`bcategory`,`bcontent`,`btraffic`,`bcommentNum`,`bUpdateTime`,`bCreateTime`,`bRemark`,`IsDeleted` FROM `BlogArticle` WHERE ( `bID` = @bID0 ) + + + ## 三、控制台信息展示 + + 配置 + + + + ## 四、Nginx一览表 + + + +``` +#user nobody; +worker_processes 1; + +#error_log logs/error.log; +#error_log logs/error.log notice; +#error_log logs/error.log info; + +#pid logs/nginx.pid; +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/octet-stream; + server_names_hash_bucket_size 64; + + #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + # '$status $body_bytes_sent "$http_referer" ' + # '"$http_user_agent" "$http_x_forwarded_for"'; + + #access_log logs/access.log main; + sendfile on; + #tcp_nopush on; + + #keepalive_timeout 0; + keepalive_timeout 600; + proxy_read_timeout 600; + proxy_send_timeout 600; + + proxy_buffer_size 128k; + proxy_buffers 32 32k; + proxy_busy_buffers_size 128k; + + #gzip on; + + ###################################################################### + server { + listen 80; + server_name www.neters.club; + + #charset koi8-r; + + #access_log logs/host.access.log main; + location / { + root C:\code\Code\Neters\home; + index index.html index.htm; + } + } + + server { + listen 80; + server_name neters.club; + + #charset koi8-r; + + #access_log logs/host.access.log main; + location / { + root C:\code\Code\Neters\home; + + index index.html index.htm; + } + } + + server { + listen 80; + server_name ids.neters.club; + rewrite ^(.*)$ https://$host$1 permanent;#把http的域名请求转成https,第二种写法在此节的末端 + + #charset koi8-r; + + #access_log logs/host.access.log main; + location / { + #proxy_pass http://localhost:5004; + root html; + index index.html index.htm; + } + } + + server { + listen 443 ssl; + server_name ids.neters.club; #网站域名,和80端口保持一致 + ssl on; + ssl_certificate 1_ids.neters.club_bundle.crt; #证书公钥 + ssl_certificate_key 2_ids.neters.club.key; #证书私钥 + ssl_session_cache shared:SSL:1m; + ssl_session_timeout 5m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!3DES:!aNULL:!eNULL; + ssl_prefer_server_ciphers on; + + error_page 497 https://$host$uri?$args; + + location / { + proxy_pass http://localhost:5004; + proxy_redirect off; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_set_header Cookie $http_cookie; + #proxy_cookie_path + chunked_transfer_encoding off; + } + } + + server { + listen 80; + server_name apk.neters.club; + + #charset koi8-r; + + #access_log logs/host.access.log main; + location / { + root html; + proxy_pass http://localhost:8081; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + index index.html index.htm; + } + + location /.doc/ { + proxy_pass http://docs.neters.club/; + } + } + + server { + listen 80; + server_name docs.neters.club; + + location / { + root C:\code\Code\New_College\.docs\contents\.vuepress\dist; + index index.html index.htm; + } + } + + server { + listen 80; + server_name vueadmin.neters.club; + + location / { + try_files $uri $uri/ /index.html; + root C:\code\Code\Blog.Admin\distis; + #proxy_pass http://localhost:2364; + index index.html index.htm; + } + + location /api/ { + rewrite ^.+apb/?(.*)$ /$1 break; + include uwsgi_params; + proxy_pass http://localhost:8081; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + #proxy_set_header Connection "upgrade"; + #proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location /api2/ { + rewrite ^.+apb/?(.*)$ /$1 break; + include uwsgi_params; + proxy_pass http://localhost:8081; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + location /images/ { + include uwsgi_params; + proxy_pass http://localhost:8081; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + #proxy_set_header Connection "upgrade"; + #proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location /.doc/ { + proxy_pass http://docsadmin.neters.club/; + } + + error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } + + server { + listen 80; + server_name docsadmin.neters.club; + + location / { + root C:\code\Code\Blog.Admin\.doc\contents\.vuepress\dist; + index index.html index.htm; + } + } + + + server { + listen 80; + server_name ddd.neters.club; + location / { + proxy_pass http://localhost:4773; + index index.php index.html index.htm; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + } + } + + + server { + listen 80; + server_name ask.neters.club; + + #charset koi8-r; + + #access_log logs/host.access.log main; + location / { + root html; + proxy_pass http://localhost:5020; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + #proxy_set_header Connection "upgrade"; + #proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + index index.html index.htm; + } + } + + + server { + listen 80; + server_name vueblog.neters.club; + + location / { + try_files $uri $uri/ /index.html; + root C:\code\Code\Blog.Vue\dist; + index index.html index.htm; + } + + + location /api { + rewrite ^.+apb/?(.*)$ /$1 break; + include uwsgi_params; + proxy_pass http://localhost:8081; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + + location /images { + include uwsgi_params; + proxy_pass http://localhost:8081; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } + + upstream nodenuxt { + server 127.0.0.1:3089; # nuxt 项目监听PC端端口 + keepalive 64; + } + server { + listen 80; + server_name tibug.neters.club; + + location / { + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Nginx-Proxy true; + proxy_cache_bypass $http_upgrade; + proxy_pass http://nodenuxt; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } + + server { + listen 80; + server_name jwt.neters.club; + + location / { + root C:\code\Code\jwttoken; + index index.html index.htm; + } + + error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + } +} + +``` +> 这里说明下,我的 `Nginx` 文件中,`Ids4` 项目强制使用 `Https` ,采用的是直接跳转,这也是一个办法,当然还有第二种办法(感谢 `tibos`): +``` +server { + listen 80; + server_name admin.wmowm.com; + location / { + proxy_pass http://localhost:9002; + index index.php index.html index.htm; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + } +} + +server { + listen 443 ssl;#监听443端口(https默认端口) + server_name admin.wmowm.com; #填写绑定证书的域名 + ssl_certificate /etc/nginx/conf.d/key/admin.wm.crt;#填写你的证书所在的位置 + ssl_certificate_key /etc/nginx/conf.d/key/admin.wm.key;#填写你的key所在的位置 + ssl_session_timeout 5m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 + ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 + ssl_prefer_server_ciphers on; + location / { + proxy_pass http://localhost:9002; + index index.php index.html index.htm; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + +} +``` \ No newline at end of file diff --git a/.docs/contents/guide/getting-started.md b/.docs/contents/guide/getting-started.md new file mode 100644 index 0000000..f6dd463 --- /dev/null +++ b/.docs/contents/guide/getting-started.md @@ -0,0 +1,125 @@ +# K 快速上手 +注意 + +请确保你的 `Visual Studio 2019` 版本 >= `16.4`。 + + +## 下载 +Github(国际) 下载 [https://github.com/anjoy8/New_College](https://github.com/anjoy8/New_College) + +Gitee(国内) 下载 [https://gitee.com/laozhangIsPhi/New_College](https://gitee.com/laozhangIsPhi/New_College) + + +## 编译与运行 +1、拿到项目后,双击 `New_College.sln` 解决方案; +2、首先 `F6` 编译,看是否有错误; +3、然后 `F5` 运行,调起 `8081` 端口,浏览器查看效果; +4、因为系统默认的是 `sqlite` 数据库,如果你想换其他数据库,请看下边; +5、注意:本系统是直接自动生成数据库和数据的,不用手动创建数据库; + + + + +## CodeFirst 与 DbFirst +1、项目同时支持两个常见开发模式:`CodeFirst` 和 `DbFirst`; +2、首先 如果你是第一次下载我的项目,肯定是想要浏览效果和直接使用对应的权限相关的内容,这个时候肯定需要用到数据库表结构,那就肯定需要 `CodeFirst` ,只需要在`appsettings.json` 里配置好数据库连接字符串(下文会说到如何配置),就能正确运行; +3、浏览器查看效果,或者配合 `Admin` 项目查看效果后,如果感觉项目可行,并打算在此基础上二次开发,那肯定会在你刚刚创建的数据库种去创建新的表结构,这个时候就需要使用 `DbFirst` 模式,来生成四层项目问题:Model+Service+Repository等; +4、你可以使用T4模板,但是我更建议使用 `/api/DbFirst/GetFrameFiles` 接口来生成,不仅支持多种类型的数据库,还支持同时多库模式的输出; +5、如果你不想用我的表结构和实体类,在项目启动的时候,把配置文件的 `SeedDBEnabled`节点设置成False即可,然后配置对应的你自己的数据库连接字符串,比如是商城的,然后使用 `/api/DbFirst/GetFrameFiles` 接口来生成你的数据库四层类文件; + + + +## 如何配置数据库连接字符串 + +1、打开 `New_College` 项目下的 `appsettings.json` 文件; +2、修改 `DBS` 字节内容,配置对应的连接字符串,注意`DBType`对应不同的数据库类型; +3、把你想要运行的数据库 `Enabled` 为 `true` 即可,其他都要设置 `false`; +4、然后 `MainDB` 设置为下边你使用的指定 `ConnId`: + +``` + "MainDB": "WMBLOG_MSSQL", //当前项目的主库,所对应的连接字符串的Enabled必须为true + "MutiDBEnabled": false, //是否开启多库 + "DBS": [ + { + "ConnId": "WMBLOG_SQLITE", + "DBType": 2,// sqlite数据库 + "Enabled": true,// 设置为true,启用1 + "Connection": "WMBlog.db" //只写数据库名就行 + }, + { + "ConnId": "WMBLOG_MSSQL", + "DBType": 1,// sqlserver数据库 + "Enabled": true,// 设置为true,启用2 + "Connection": "Server=.;Database=WMBlogDB;User ID=sa;Password=123;", + "ProviderName": "System.Data.SqlClient" + }, + { + "ConnId": "WMBLOG_MYSQL", + "DBType": 0,// mysql + "Enabled": false,// false 不启用 + "Connection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;" + }, + { + "ConnId": "WMBLOG_ORACLE", + "DBType": 3,// Oracle + "Enabled": false,// 不启用 + "Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;" + } + ], +``` + + +5、如果你想多库操作,需要配置 +``` + a:MainDB 设置为主库的 ConnId; + b:MutiDBEnabled设置为true, + c:把下边想要连接的多个连接字符串都设置为true +``` + +## 如何配置项目端口号 +1、在 `New_College` 层下的 `program.cs` 文件中,将 `8081`端口,修改为自己想要的端口号; +2、或者在 `launchSettings.json` 中设置; + +## 如何项目重命名 +1、双击项目根目录下的 `CreateYourProject.bat` 批处理文件; +2、根据提示,输入自己想要的项目名称即可; +3、在根目录会有一个 `.1YourProject` 文件夹,里边即你的项目; + + +## 新增实体模块后如何迁移到数据库 +1、在 `New_College.Model` 项目目录下的 `Seed` 文件夹下,找到 `DBSeed` 类; +2、根据提示,找到生成table的地方 `myContext.CreateTableByEntity`; +3、添加进去你新增的实体类,当然也可以用下边的单独写法; +4、编译项目,没错后,运行,则数据库更新完毕; + + +## 新增实体,如何进行增删改查CURD操作 +1、随便找一个含有业务逻辑的 `controller` 参考一下即可; +2、主要 `api` 是通过 `Service` 服务层提供业务逻辑; +3、然后服务层通过 `Repository` 仓储层封装持久化操作; +4、每一个表基本上对应一个仓储类,基本的操作都封装到了 `BaseRepository.cs` 基类仓储中; +5、添加完业务逻辑,记得要 `F6` 重新编译一下,因为项目间引用解耦了; +6、项目已经自动注入了,直接在控制器使用对应的服务层接口就行: `IxxxxService` ; + + +## 新增数据库表,如何反向生成四层文件 +1、可以通过 `T4` 模板来生成,在 `New_College.FrameWork` 层,使用方法: [9757999.html](https://www.cnblogs.com/laozhang-is-phi/p/9757999.html#autoid-4-3-0) ; +> 注意:这种方案,目前默认的只能是 `SqlServer` ,其他类型的数据库,可以看上边文章中的代码,或者群文件里对应的代码。 + +2、也可以通过 `Sqlsugar` 所带的方法来实现 `DbFirst`,具体查看 `Controller` 层下的 `DbFirstController.cs`; + +3、总体操作过程,可以参考我的视频:[av77612407](https://www.bilibili.com/video/av77612407?p=2) ; + + +## 发布与部署 +1、双击项目根目录下的 `New_College.Publish.bat`批处理文件; +2、执行完成后,根目录会有一个`.PublishFiles` 文件夹,就是发布后的项目; + + +## 如何更新项目模板 +1、着急的话自己打包,不着急就提 `issue`,等我更新; +2、我的开源项目中,有个模板项目 `BlogCoreTempl` [地址](https://github.com/anjoy8/BlogCoreTempl),下载下来; +3、下载最新的 `New_College` 源代码; +4、将源代码拷贝到模板项目的 `content` 文件夹下; +5、双击 `Package.bat` 文件,就生成了最新的模板了; + diff --git a/.docs/package.json b/.docs/package.json new file mode 100644 index 0000000..3f0483b --- /dev/null +++ b/.docs/package.json @@ -0,0 +1,12 @@ +{ + "name": "BCVP", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7711e94 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# IDE0005: Using 指令是不需要的。 +dotnet_diagnostic.IDE0005.severity = warning diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..7c3b424 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: http://apk.neters.club/laozhangisphigood.jpg diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..80815c1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,22 @@ +blank_issues_enabled: false +contact_links: + - name: 🚨 Bug report | Bug 提交 + url: https://github.com/anjoy8/New_College/issues/new + about: | + Please report bugs here. + 请在此提交 Bug。 + - name: 🙋 Feature request | 新功能提案 + url: https://github.com/anjoy8/New_College/issues/new + about: | + Please request features here. + 请在此提交新功能提案。 + - name: 🤔 Consulting from the New_College team | 咨询 作者 + url: https://github.com/anjoy8/New_College/issues/new + about: | + Get technical support, project audits, app deployments, and custom development from the core New_College team. + 咨询核心 New_College 团队以获得技术支持,项目审核,应用程序部署以及自定义开发等方面上的帮助。 + - name: ❗️ All other issues | 其他问题 + url: https://github.com/anjoy8/New_College/issues/new + about: | + Please create all other issues here. + 请在此创建其他类型问题。 \ No newline at end of file diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml new file mode 100644 index 0000000..b72c6aa --- /dev/null +++ b/.github/workflows/dotnetcore.yml @@ -0,0 +1,17 @@ +name: .NET Core + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: Setup .NET Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 3.1.100 + - name: Build with dotnet + run: dotnet build --configuration Release diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..832276b --- /dev/null +++ b/.gitignore @@ -0,0 +1,353 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ +# ASP.NET Core default setup: bower directory is configured as wwwroot/lib/ and bower restore is true +**/wwwroot/lib/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + + +# wwwroot/images +*images/ +.1YourProject +.PublishFiles +!.template.config/*.nupkg +!New_College.Webapi.Template.*.nupkg +New_College/WMBlog.db +.docs/contents/.vuepress/dist/* +New_College/New_College*.xml +New_College.Api/WMBlog.db diff --git a/CreateYourProject.bat b/CreateYourProject.bat new file mode 100644 index 0000000..eb904eb --- /dev/null +++ b/CreateYourProject.bat @@ -0,0 +1,23 @@ +color 3 + +dotnet new -i .template.config\New_College.Webapi.Template.2.1.0.nupkg + +set /p OP=Please set your project name(for example:Baidu.Api): + +md .1YourProject + +cd .1YourProject + +dotnet new blogcoretpl -n %OP% + +cd ../ + + +echo "Create Successfully!!!! ^ please see the folder .1YourProject" + +dotnet new -u New_College.Webapi.Template + + +echo "Delete Template Successfully" + +pause \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/New_College.AdminMvc/New_College.AdminMvc.csproj b/New_College.AdminMvc/New_College.AdminMvc.csproj new file mode 100644 index 0000000..92605c5 --- /dev/null +++ b/New_College.AdminMvc/New_College.AdminMvc.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp3.1 + + + diff --git a/New_College.AdminMvc/Program.cs b/New_College.AdminMvc/Program.cs new file mode 100644 index 0000000..1397a74 --- /dev/null +++ b/New_College.AdminMvc/Program.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; + +namespace New_College.AdminMvc +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); + } +} diff --git a/New_College.AdminMvc/Properties/launchSettings.json b/New_College.AdminMvc/Properties/launchSettings.json new file mode 100644 index 0000000..f53df01 --- /dev/null +++ b/New_College.AdminMvc/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:51491", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "New_College.AdminMvc": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/New_College.AdminMvc/Startup.cs b/New_College.AdminMvc/Startup.cs new file mode 100644 index 0000000..13a4baa --- /dev/null +++ b/New_College.AdminMvc/Startup.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace New_College.AdminMvc +{ + public class Startup + { + /** + *┌──────────────────────────────────────────────────────────────┐ + *│ 描 述:当前项目为空,只是模拟一个MVC客户端 + *│ 作 者:anson zhang + *└──────────────────────────────────────────────────────────────┘ + */ + // This method gets called by the runtime. Use this method to add services to the container. + // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 + public void ConfigureServices(IServiceCollection services) + { + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseRouting(); + + app.UseEndpoints(endpoints => + { + endpoints.MapGet("/", async context => + { + await context.Response.WriteAsync("Hello World!"); + }); + }); + } + } +} diff --git a/New_College.AdminMvc/appsettings.Development.json b/New_College.AdminMvc/appsettings.Development.json new file mode 100644 index 0000000..8983e0f --- /dev/null +++ b/New_College.AdminMvc/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/New_College.AdminMvc/appsettings.json b/New_College.AdminMvc/appsettings.json new file mode 100644 index 0000000..d9d9a9b --- /dev/null +++ b/New_College.AdminMvc/appsettings.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + }, + "AllowedHosts": "*" +} diff --git a/New_College.Api/.config/dotnet-tools.json b/New_College.Api/.config/dotnet-tools.json new file mode 100644 index 0000000..c6f5df7 --- /dev/null +++ b/New_College.Api/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "3.1.9", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/New_College.Api/Controllers/Back/AutoController.cs b/New_College.Api/Controllers/Back/AutoController.cs new file mode 100644 index 0000000..ed39c17 --- /dev/null +++ b/New_College.Api/Controllers/Back/AutoController.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IRepository; +using New_College.IServices; +using New_College.Model; + +namespace New_College.Api.Controllers.Back +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class AutoController : ControllerBase + { + private readonly ITest_CycleTimeInfoServices test_CycleTimeInfoServices; + private readonly ID_LongIdMapServices d_LongIdMapServices; + private readonly IT_LongIdMapServices t_LongIdMapServices; + private readonly IT_EnrollmentPlaneServices t_EnrollmentPlaneServices; + private readonly ID_UniversityServices d_UniversityServices; + private readonly ID_MajorSalaryServices d_MajorSalaryServices; + + public AutoController(ITest_CycleTimeInfoServices ITest_CycleTimeInfoServices + , ID_LongIdMapServices ID_LongIdMapServices + , IT_LongIdMapServices IT_LongIdMapServices + , IT_EnrollmentPlaneServices IT_EnrollmentPlaneServices + , ID_UniversityServices ID_UniversityServices + , ID_MajorSalaryServices ID_MajorSalaryServices) + { + + test_CycleTimeInfoServices = ITest_CycleTimeInfoServices; + d_LongIdMapServices = ID_LongIdMapServices; + t_LongIdMapServices = IT_LongIdMapServices; + t_EnrollmentPlaneServices = IT_EnrollmentPlaneServices; + d_UniversityServices = ID_UniversityServices; + d_MajorSalaryServices = ID_MajorSalaryServices; + } + #region old + ///// + ///// 生成周期 + ///// + ///// + //[HttpPost] + //public async Task> AutoCycleTime() + //{ + // var result = await test_CycleTimeInfoServices.AutoCycleTime(); + // return new MessageModel() + // { + // success = result, + // response = result, + // msg = result == true ? "成功" : "失败" + // }; + //} + + ///// + ///// + ///// + ///// + //[HttpPost] + //public async Task> Import() + //{ + // var result = await d_LongIdMapServices.Import(); + // return new MessageModel() + // { + // success = true, + // msg = "成功", + // response = result + // }; + //} + #endregion + + #region new T + ///// + ///// EnrollmentBatch + ///// + ///// + //[HttpPost] + //public async Task> ImportEnrollmentBatch() + //{ + // return new MessageModel() + // { + // success = true, + // msg = "成功", + // response = await t_LongIdMapServices.ImportEnrollmentBatch() + // }; + //} + + ///// + ///// EnrollmentPlane + ///// + ///// + //[HttpPost] + //public async Task> ImportEnrollmentPlane() + //{ + // return new MessageModel() + // { + // success = true, + // msg = "成功", + // response = await t_LongIdMapServices.ImportEnrollmentPlane() + // }; + //} + + ///// + ///// EnrollmentPlanedesc + ///// + ///// + //[HttpPost] + //public async Task> ImportEnrollmentPlanedesc() + //{ + // return new MessageModel() + // { + // success = true, + // msg = "成功", + // response = await t_LongIdMapServices.ImportEnrollmentPlanedesc() + // }; + //} + + ///// + ///// Batchline + ///// + ///// + //[HttpPost] + //public async Task> ImportBatchline() + //{ + // return new MessageModel() + // { + // success = true, + // msg = "成功", + // response = await t_LongIdMapServices.ImportBatchline() + // }; + //} + + ///// + ///// BatchTypeInfo + ///// + ///// + //[HttpPost] + //public async Task> ImportBatchTypeInfo() + //{ + // return new MessageModel() + // { + // success = true, + // msg = "成功", + // response = await t_LongIdMapServices.ImportBatchTypeInfo() + // }; + //} + #endregion + + ///// + ///// 2019上海招生分数更新 + ///// + ///// + //[HttpPost] + //public async Task> Import() + //{ + // var result = await t_EnrollmentPlaneServices.Import(); + // return new MessageModel() { success = true }; + //} + + ///// + ///// 下载图片 + ///// + ///// + //[HttpPost] + //public async Task> SaveImg() + //{ + // var result = await d_UniversityServices.SaveImg(); + // return new MessageModel() { success = true, msg = "成功" }; + //} + + + ///// + ///// 专业薪酬 + ///// + ///// + //[HttpPost] + //public async Task Import() + //{ + // return await d_MajorSalaryServices.Import(); + //} + } +} diff --git a/New_College.Api/Controllers/Back/CustomerController.cs b/New_College.Api/Controllers/Back/CustomerController.cs new file mode 100644 index 0000000..2c79b8d --- /dev/null +++ b/New_College.Api/Controllers/Back/CustomerController.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace New_College.Api.Controllers.Back +{ + [Route("api/back/[controller]/[action]")] + [ApiController] + //[Authorize] + public class CustomerController : ControllerBase + { + private readonly IV_CustomerInfoServices v_CustomerInfoServices; + public CustomerController(IV_CustomerInfoServices IV_CustomerInfoServices) + { + v_CustomerInfoServices = IV_CustomerInfoServices; + } + /// + /// 获取分页 + /// + /// + /// + [HttpGet] + public async Task>> GetCustomerInfoListByPage([FromQuery] CustomerSeachQuery query) + { + return await v_CustomerInfoServices.GetCustomerInfoListByPage(query); + } + } +} diff --git a/New_College.Api/Controllers/Back/ExaminationPolicyController.cs b/New_College.Api/Controllers/Back/ExaminationPolicyController.cs new file mode 100644 index 0000000..07259ef --- /dev/null +++ b/New_College.Api/Controllers/Back/ExaminationPolicyController.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Back +{ + [Route("api/back/[controller]/[action]")] + [ApiController] + [Authorize] + public class ExaminationPolicyController : ControllerBase + { + private readonly IV_ExaminationPolicyServices iV_ExaminationPolicyServices; + public ExaminationPolicyController(IV_ExaminationPolicyServices IV_ExaminationPolicyServices) + { + iV_ExaminationPolicyServices = IV_ExaminationPolicyServices; + } + + /// + /// 获取分页 + /// + /// + /// + [HttpGet] + public async Task>> GetExaminationPolicyByPage([FromQuery] ExaminationPolicySearchQuery query) + { + return await iV_ExaminationPolicyServices.GetExaminationPolicyByPage(query); + } + + /// + /// 获取单个 + /// + /// + /// + [HttpGet] + public async Task> GetExaminationPolicyOne([FromQuery] IdQuery query) + { + return await iV_ExaminationPolicyServices.GetExaminationPolicyOne(query); + } + + /// + /// 添加 + /// + /// + /// + [HttpPost] + public async Task> AddExaminationPolicy([FromBody] ExaminationPolicyQuery query) + { + return await iV_ExaminationPolicyServices.AddExaminationPolicy(query); + } + + /// + /// 修改 + /// + /// + /// + [HttpPut] + public async Task> UpdateExaminationPolicy(ExaminationPolicyQuery query) + { + return await iV_ExaminationPolicyServices.UpdateExaminationPolicy(query); + } + + /// + /// 删除 + /// + /// + /// + [HttpPost] + public async Task> DeleteExaminationPolicy([FromBody] IdQuery query) + { + return await iV_ExaminationPolicyServices.DeleteExaminationPolicy(query); + } + } +} diff --git a/New_College.Api/Controllers/Back/OrderInfoController.cs b/New_College.Api/Controllers/Back/OrderInfoController.cs new file mode 100644 index 0000000..85d553a --- /dev/null +++ b/New_College.Api/Controllers/Back/OrderInfoController.cs @@ -0,0 +1,43 @@ +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; +using System.Threading.Tasks; + +namespace New_College.Api.Controllers.Back +{ + [Route("api/back/[controller]/[action]")] + [ApiController] + public class OrderInfoController : ControllerBase + { + private readonly IV_OrderInfoServices v_OrderInfoServices; + private readonly IV_VipCardTypeServices iV_VipCardTypeServices; + public OrderInfoController(IV_OrderInfoServices IV_OrderInfoServices, IV_VipCardTypeServices IV_VipCardTypeServices) + { + v_OrderInfoServices = IV_OrderInfoServices; + iV_VipCardTypeServices = IV_VipCardTypeServices; + } + + /// + /// 获取分页 + /// + /// + /// + [HttpGet] + public async Task>> GetVipCardInfoByPage([FromQuery] SearchOrderQuery query) + { + return await v_OrderInfoServices.GetOrderInfoByPage(query); + } + + /// + /// 获取分页 + /// + /// + /// + [HttpGet] + public async Task>> GetOrderInfoList([FromQuery] SearchOrderQuery query) + { + return await v_OrderInfoServices.GetOrderInfoByPage(query); + } + } +} diff --git a/New_College.Api/Controllers/Back/VipCardController.cs b/New_College.Api/Controllers/Back/VipCardController.cs new file mode 100644 index 0000000..ad19718 --- /dev/null +++ b/New_College.Api/Controllers/Back/VipCardController.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using New_College.Model.ViewModels.Query; + +namespace New_College.Api.Controllers.Back +{ + [Route("api/back/[controller]/[action]")] + [ApiController] + public class VipCardController : ControllerBase + { + private readonly IV_VipCardInfoServices iV_VipCardInfoServices; + private readonly IV_VipCardTypeServices iV_VipCardTypeServices; + private readonly IV_OrderInfoServices iV_OrderInfoServices; + public VipCardController(IV_VipCardInfoServices IV_VipCardInfoServices, IV_VipCardTypeServices IV_VipCardTypeServices, IV_OrderInfoServices IV_OrderInfoServices) + { + iV_VipCardInfoServices = IV_VipCardInfoServices; + iV_VipCardTypeServices = IV_VipCardTypeServices; + iV_OrderInfoServices= IV_OrderInfoServices; + } + /// + /// 生成卡信息 + /// + /// + /// + [HttpPost] + public async Task>> AutoVipCardInfo([FromBody] AutoVipInfoQuery query) + { + return await iV_VipCardInfoServices.AutoVipCardInfo(query); + } + /// + /// 获取分页 + /// + /// + /// + [HttpGet] + public async Task>> GetVipCardInfoByPage([FromQuery] VipCardInfoSearchQuery query) + { + return await iV_VipCardInfoServices.GetVipCardInfoByPage(query); + } + + /// + /// 获取单个 + /// + /// + /// + [HttpGet] + public async Task> GetVipCardInfoOne([FromQuery] IdQuery query) + { + return await iV_VipCardInfoServices.GetVipCardInfoOne(query); + } + + /// + /// 添加 + /// + /// + /// + [HttpPost] + public async Task> AddVipCardInfo([FromBody] VipCardInfoQuery query) + { + return await iV_VipCardInfoServices.AddVipCardInfo(query); + } + + /// + /// 修改 + /// + /// + /// + [HttpPut] + public async Task> UpdateVipCardInfo(VipCardInfoQuery query) + { + return await iV_VipCardInfoServices.UpdateVipCardInfo(query); + } + + /// + /// 删除 + /// + /// + /// + [HttpPost] + public async Task> DeleteVipCardInfo([FromBody] IdQuery query) + { + return await iV_VipCardInfoServices.DeleteVipCardInfo(query); + } + /// + /// 获取vipcardTypeList + /// + /// + [HttpPost] + public async Task> GetVipCardType() + { + return await iV_VipCardTypeServices.GetVipCardType(); + } + } +} diff --git a/New_College.Api/Controllers/BlogController.cs b/New_College.Api/Controllers/BlogController.cs new file mode 100644 index 0000000..a2ccf4b --- /dev/null +++ b/New_College.Api/Controllers/BlogController.cs @@ -0,0 +1,336 @@ +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Threading.Tasks; +using New_College.Common.Helper; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using New_College.SwaggerHelper; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using StackExchange.Profiling; +using static New_College.Extensions.CustomApiVersion; + +namespace New_College.Controllers +{ + /// + /// 博客管理 + /// + [Produces("application/json")] + [Route("api/Blog")] + public class BlogController : Controller + { + readonly IBlogArticleServices _blogArticleServices; + private readonly ILogger _logger; + + /// + /// 构造函数 + /// + /// + /// + public BlogController(IBlogArticleServices blogArticleServices, ILogger logger) + { + _blogArticleServices = blogArticleServices; + _logger = logger; + } + + + /// + /// 获取博客列表【无权限】 + /// + /// + /// + /// + /// + /// + [HttpGet] + public async Task>> Get(int id, int page = 1, string bcategory = "技术博文", string key = "") + { + int intPageSize = 6; + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + + Expression> whereExpression = a => (a.bcategory == bcategory && a.IsDeleted == false) && ((a.btitle != null && a.btitle.Contains(key)) || (a.bcontent != null && a.bcontent.Contains(key))); + + var pageModelBlog = await _blogArticleServices.QueryPage(whereExpression, page, intPageSize, " bID desc "); + + using (MiniProfiler.Current.Step("获取成功后,开始处理最终数据")) + { + foreach (var item in pageModelBlog.data) + { + if (!string.IsNullOrEmpty(item.bcontent)) + { + item.bRemark = (HtmlHelper.ReplaceHtmlTag(item.bcontent)).Length >= 200 ? (HtmlHelper.ReplaceHtmlTag(item.bcontent)).Substring(0, 200) : (HtmlHelper.ReplaceHtmlTag(item.bcontent)); + int totalLength = 500; + if (item.bcontent.Length > totalLength) + { + item.bcontent = item.bcontent.Substring(0, totalLength); + } + } + } + } + + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = new PageModel() + { + page = page, + dataCount = pageModelBlog.dataCount, + data = pageModelBlog.data, + pageCount = pageModelBlog.pageCount, + } + }; + } + + + /// + /// 获取博客详情 + /// + /// + /// + [HttpGet("{id}")] + [Authorize(Policy = "Scope_BlogModule_Policy")] + public async Task> Get(int id) + { + return new MessageModel() + { + msg = "获取成功", + success = true, + response = await _blogArticleServices.GetBlogDetails(id) + }; + } + + + /// + /// 获取详情【无权限】 + /// + /// + /// + [HttpGet] + [Route("DetailNuxtNoPer")] + public async Task> DetailNuxtNoPer(int id) + { + _logger.LogInformation("xxxxxxxxxxxxxxxxxxx"); + return new MessageModel() + { + msg = "获取成功", + success = true, + response = await _blogArticleServices.GetBlogDetails(id) + }; + } + + [HttpGet] + [Route("GoUrl")] + public async Task GoUrl(int id) + { + var response = await _blogArticleServices.QueryById(id); + if (response != null && response.bsubmitter.IsNotEmptyOrNull()) + { + response.btraffic += 1; + await _blogArticleServices.Update(response); + return Redirect(response.bsubmitter); + } + + return null; + } + + [HttpGet] + [Route("GetBlogsByTypesForMVP")] + public async Task>> GetBlogsByTypesForMVP(string types = "", int id = 0) + { + if (types.IsNotEmptyOrNull()) + { + var blogs = await _blogArticleServices.Query(d => d.bcategory != null && types.Contains(d.bcategory) && d.IsDeleted == false); + return new MessageModel>() + { + msg = "获取成功", + success = true, + response = blogs + }; + } + + return new MessageModel>() { }; + } + + [HttpGet] + [Route("GetBlogByIdForMVP")] + public async Task> GetBlogByIdForMVP(int id = 0) + { + if (id > 0) + { + return new MessageModel() + { + msg = "获取成功", + success = true, + response = await _blogArticleServices.QueryById(id) + }; + } + + return new MessageModel() { }; + } + + /// + /// 获取博客测试信息 v2版本 + /// + /// + [HttpGet] + ////MVC自带特性 对 api 进行组管理 + //[ApiExplorerSettings(GroupName = "v2")] + ////路径 如果以 / 开头,表示绝对路径,反之相对 controller 的想u地路径 + //[Route("/api/v2/blog/Blogtest")] + //和上边的版本控制以及路由地址都是一样的 + + [CustomRoute(ApiVersions.V2, "Blogtest")] + public MessageModel V2_Blogtest() + { + return new MessageModel() + { + msg = "获取成功", + success = true, + response = "我是第二版的博客信息" + }; + } + + /// + /// 添加博客【无权限】 + /// + /// + /// + [HttpPost] + [Authorize(Policy = "Scope_BlogModule_Policy")] + public async Task> Post([FromBody] BlogArticle blogArticle) + { + var data = new MessageModel(); + + blogArticle.bCreateTime = DateTime.Now; + blogArticle.bUpdateTime = DateTime.Now; + blogArticle.IsDeleted = false; + blogArticle.bcategory = "技术博文"; + + var id = (await _blogArticleServices.Add(blogArticle)); + data.success = id > 0; + if (data.success) + { + data.response = id.ObjToString(); + data.msg = "添加成功"; + } + + return data; + } + + + /// + /// + /// + /// + /// + [HttpPost] + [Route("AddForMVP")] + [Authorize(Permissions.Name)] + public async Task> AddForMVP([FromBody] BlogArticle blogArticle) + { + var data = new MessageModel(); + + blogArticle.bCreateTime = DateTime.Now; + blogArticle.bUpdateTime = DateTime.Now; + blogArticle.IsDeleted = false; + + var id = (await _blogArticleServices.Add(blogArticle)); + data.success = id > 0; + if (data.success) + { + data.response = id.ObjToString(); + data.msg = "添加成功"; + } + + return data; + } + /// + /// 更新博客信息 + /// + /// + /// + // PUT: api/User/5 + [HttpPut] + [Route("Update")] + [Authorize(Permissions.Name)] + public async Task> Put([FromBody] BlogArticle BlogArticle) + { + var data = new MessageModel(); + if (BlogArticle != null && BlogArticle.bID > 0) + { + var model = await _blogArticleServices.QueryById(BlogArticle.bID); + + if (model != null) + { + model.btitle = BlogArticle.btitle; + model.bcategory = BlogArticle.bcategory; + model.bsubmitter = BlogArticle.bsubmitter; + model.bcontent = BlogArticle.bcontent; + model.btraffic = BlogArticle.btraffic; + + data.success = await _blogArticleServices.Update(model); + if (data.success) + { + data.msg = "更新成功"; + data.response = BlogArticle?.bID.ObjToString(); + } + } + + } + + return data; + } + + + + /// + /// 删除博客 + /// + /// + /// + [HttpDelete] + [Authorize(Permissions.Name)] + [Route("Delete")] + public async Task> Delete(int id) + { + var data = new MessageModel(); + if (id > 0) + { + var blogArticle = await _blogArticleServices.QueryById(id); + blogArticle.IsDeleted = true; + data.success = await _blogArticleServices.Update(blogArticle); + if (data.success) + { + data.msg = "删除成功"; + data.response = blogArticle?.bID.ObjToString(); + } + } + + return data; + } + /// + /// apache jemeter 压力测试 + /// 更新接口 + /// + /// + [HttpGet] + [Route("ApacheTestUpdate")] + public async Task> ApacheTestUpdate() + { + return new MessageModel() + { + success = true, + msg = "更新成功", + response = await _blogArticleServices.Update(new { bsubmitter = $"laozhang{DateTime.Now.Millisecond}", bID = 1 }) + }; + } + } +} \ No newline at end of file diff --git a/New_College.Api/Controllers/DbFirst/DbFirstController.cs b/New_College.Api/Controllers/DbFirst/DbFirstController.cs new file mode 100644 index 0000000..9083bcf --- /dev/null +++ b/New_College.Api/Controllers/DbFirst/DbFirstController.cs @@ -0,0 +1,133 @@ +using New_College.Common; +using New_College.Common.DB; +using New_College.Model; +using New_College.Model.Seed; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Hosting; +using SqlSugar; +using System.Linq; + +namespace New_College.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + //[Authorize(Permissions.Name)] + public class DbFirstController : ControllerBase + { + private readonly SqlSugarClient _sqlSugarClient; + private readonly IWebHostEnvironment Env; + + /// + /// 构造函数 + /// + public DbFirstController(ISqlSugarClient sqlSugarClient, IWebHostEnvironment env) + { + _sqlSugarClient = sqlSugarClient as SqlSugarClient; + Env = env; + } + + /// + /// 获取 整体框架 文件 + /// + /// + [HttpGet] + public MessageModel GetFrameFiles() + { + var data = new MessageModel() { success = true, msg = "" }; + data.response += @"file path is:C:\my-file\}"; + var isMuti = Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool(); + if (Env.IsDevelopment()) + { + data.response += $"Controller层生成:{FrameSeed.CreateControllers(_sqlSugarClient)} || "; + + BaseDBConfig.MutiConnectionString.Item1.ToList().ForEach(m => + { + _sqlSugarClient.ChangeDatabase(m.ConnId.ToLower()); + data.response += $"库{m.ConnId}-Model层生成:{FrameSeed.CreateModels(_sqlSugarClient, m.ConnId, isMuti)} || "; + data.response += $"库{m.ConnId}-IRepositorys层生成:{FrameSeed.CreateIRepositorys(_sqlSugarClient, m.ConnId, isMuti)} || "; + data.response += $"库{m.ConnId}-IServices层生成:{FrameSeed.CreateIServices(_sqlSugarClient, m.ConnId, isMuti)} || "; + data.response += $"库{m.ConnId}-Repository层生成:{FrameSeed.CreateRepository(_sqlSugarClient, m.ConnId, isMuti)} || "; + data.response += $"库{m.ConnId}-Services层生成:{FrameSeed.CreateServices(_sqlSugarClient, m.ConnId, isMuti)} || "; + }); + + // 切回主库 + _sqlSugarClient.ChangeDatabase(MainDb.CurrentDbConnId.ToLower()); + } + else + { + data.success = false; + data.msg = "当前不处于开发模式,代码生成不可用!"; + } + + return data; + } + + /// + /// 根据数据库表名 生成整体框架 + /// 仅针对通过CodeFirst生成表的情况 + /// + /// 数据库链接名称 + /// 需要生成的表名 + /// + [HttpPost] + public MessageModel GetFrameFilesByTableNames([FromBody]string[] tableNames, [FromQuery]string ConnID = null) + { + ConnID = ConnID == null ? MainDb.CurrentDbConnId.ToLower() : ConnID; + + var isMuti = Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool(); + var data = new MessageModel() { success = true, msg = "" }; + if (Env.IsDevelopment()) + { + + data.response += $"库{ConnID}-IRepositorys层生成:{FrameSeed.CreateIRepositorys(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + data.response += $"库{ConnID}-IServices层生成:{FrameSeed.CreateIServices(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + data.response += $"库{ConnID}-Repository层生成:{FrameSeed.CreateRepository(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + data.response += $"库{ConnID}-Services层生成:{FrameSeed.CreateServices(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + } + else + { + data.success = false; + data.msg = "当前不处于开发模式,代码生成不可用!"; + } + + return data; + } + + /// + /// DbFrist 根据数据库表名 生成整体框架,包含Model层 + /// + /// 数据库链接名称 + /// 需要生成的表名 + /// + [HttpPost] + public MessageModel GetAllFrameFilesByTableNames([FromBody]string[] tableNames, [FromQuery]string ConnID = null) + { + ConnID = ConnID == null ? MainDb.CurrentDbConnId.ToLower() : ConnID; + + var isMuti = Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool(); + var data = new MessageModel() { success = true, msg = "" }; + if (Env.IsDevelopment()) + { + _sqlSugarClient.ChangeDatabase(ConnID.ToLower()); + data.response += $"Controller层生成:{FrameSeed.CreateControllers(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + data.response += $"库{ConnID}-Model层生成:{FrameSeed.CreateModels(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + data.response += $"库{ConnID}-IRepositorys层生成:{FrameSeed.CreateIRepositorys(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + data.response += $"库{ConnID}-IServices层生成:{FrameSeed.CreateIServices(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + data.response += $"库{ConnID}-Repository层生成:{FrameSeed.CreateRepository(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + data.response += $"库{ConnID}-Services层生成:{FrameSeed.CreateServices(_sqlSugarClient, ConnID, isMuti, tableNames)} || "; + // 切回主库 + _sqlSugarClient.ChangeDatabase(MainDb.CurrentDbConnId.ToLower()); + } + else + { + data.success = false; + data.msg = "当前不处于开发模式,代码生成不可用!"; + } + + return data; + } + + + } +} \ No newline at end of file diff --git a/New_College.Api/Controllers/DbFirst/MigrateController.cs b/New_College.Api/Controllers/DbFirst/MigrateController.cs new file mode 100644 index 0000000..2476e46 --- /dev/null +++ b/New_College.Api/Controllers/DbFirst/MigrateController.cs @@ -0,0 +1,191 @@ +using New_College.Common.Helper; +using New_College.IRepository.UnitOfWork; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Hosting; +using Newtonsoft.Json; +using System; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + //[Authorize(Permissions.Name)] + public class MigrateController : ControllerBase + { + private readonly IUnitOfWork _unitOfWork; + private readonly IRoleModulePermissionServices _roleModulePermissionServices; + private readonly IUserRoleServices _userRoleServices; + private readonly IRoleServices _roleServices; + private readonly IPermissionServices _permissionServices; + private readonly IModuleServices _moduleServices; + private readonly IWebHostEnvironment _env; + + public MigrateController(IUnitOfWork unitOfWork, + IRoleModulePermissionServices roleModulePermissionServices, + IUserRoleServices userRoleServices, + IRoleServices roleServices, + IPermissionServices permissionServices, + IModuleServices moduleServices, + IWebHostEnvironment env) + { + _unitOfWork = unitOfWork; + _roleModulePermissionServices = roleModulePermissionServices; + _userRoleServices = userRoleServices; + _roleServices = roleServices; + _permissionServices = permissionServices; + _moduleServices = moduleServices; + _env = env; + } + + /// + /// 获取权限部分Map数据(从库) + /// 迁移到新库(主库) + /// + /// + [HttpGet] + public async Task> DataMigrateFromOld2New() + { + var data = new MessageModel() { success = true, msg = "" }; + if (_env.IsDevelopment()) + { + try + { + // 获取权限集合数据 + var rmps = await _roleModulePermissionServices.GetRMPMaps(); + // 当然,你可以做个where查询 + //rmps = rmps.Where(d => d.ModuleId > 88).ToList(); + + // 开启事务,保证数据一致性 + _unitOfWork.BeginTran(); + + var rid = 0; + var pid = 0; + var mid = 0; + var rpmid = 0; + + // 注意信息的完整性,不要重复添加,确保主库没有要添加的数据 + foreach (var item in rmps) + { + // 角色信息,防止重复添加,做了判断 + if (item.Role != null) + { + var isExit = (await _roleServices.Query(d => d.Name == item.Role.Name && d.IsDeleted == false)).FirstOrDefault(); + if (isExit == null) + { + rid = await _roleServices.Add(item.Role); + Console.WriteLine($"Role Added:{item.Role.Name}"); + } + else + { + rid = isExit.Id; + } + } + + // 菜单 + if (item.Permission != null) + { + pid = await _permissionServices.Add(item.Permission); + Console.WriteLine($"Permission Added:{item.Permission.Name}"); + } + + // 接口 + if (item.Module != null) + { + mid = await _moduleServices.Add(item.Module); + Console.WriteLine($"Module Added:{item.Module.LinkUrl}"); + } + + // 关系 + if (rid > 0 && pid > 0 && mid > 0) + { + rpmid = await _roleModulePermissionServices.Add(new RoleModulePermission() + { + IsDeleted = false, + CreateTime = DateTime.Now, + ModifyTime = DateTime.Now, + ModuleId = mid, + PermissionId = pid, + RoleId = rid, + }); + Console.WriteLine($"RMP Added:{rpmid}"); + } + + } + + + _unitOfWork.CommitTran(); + + data.success = true; + data.msg = "导入成功!"; + } + catch (Exception) + { + _unitOfWork.RollbackTran(); + + } + } + else + { + data.success = false; + data.msg = "当前不处于开发模式,代码生成不可用!"; + } + + return data; + } + + + /// + /// 权限数据库导出tsv + /// + /// + [HttpGet] + public async Task> SaveData2TsvAsync() + { + var data = new MessageModel() { success = true, msg = "" }; + if (_env.IsDevelopment()) + { + try + { + // 取出数据,序列化,自己可以处理判空 + var rolesJson = JsonConvert.SerializeObject(await _roleServices.Query(d => d.IsDeleted == false)); + FileHelper.WriteFile(Path.Combine(_env.WebRootPath, "BlogCore.Data.json", "Role_New.tsv"), rolesJson, Encoding.UTF8); + + + var permissionsJson = JsonConvert.SerializeObject(await _permissionServices.Query(d => d.IsDeleted == false)); + FileHelper.WriteFile(Path.Combine(_env.WebRootPath, "BlogCore.Data.json", "Permission_New.tsv"), permissionsJson, Encoding.UTF8); + + + var modulesJson = JsonConvert.SerializeObject(await _moduleServices.Query(d => d.IsDeleted == false)); + FileHelper.WriteFile(Path.Combine(_env.WebRootPath, "BlogCore.Data.json", "Modules_New.tsv"), modulesJson, Encoding.UTF8); + + + var rmpsJson = JsonConvert.SerializeObject(await _roleModulePermissionServices.Query(d => d.IsDeleted == false)); + FileHelper.WriteFile(Path.Combine(_env.WebRootPath, "BlogCore.Data.json", "RoleModulePermission_New.tsv"), rmpsJson, Encoding.UTF8); + } + catch (Exception) + { + } + + + data.success = true; + data.msg = "生成成功!"; + } + else + { + data.success = false; + data.msg = "当前不处于开发模式,代码生成不可用!"; + } + + return data; + } + + } +} \ No newline at end of file diff --git a/New_College.Api/Controllers/Front/CustomerController.cs b/New_College.Api/Controllers/Front/CustomerController.cs new file mode 100644 index 0000000..bb009b5 --- /dev/null +++ b/New_College.Api/Controllers/Front/CustomerController.cs @@ -0,0 +1,199 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.AuthHelper.OverWrite; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Request; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + [Authorize(Roles = "users")] + public class CustomerController : ControllerBase + { + private readonly IV_CustomerInfoServices _services; + public CustomerController(IV_CustomerInfoServices IV_CustomerInfoServices) + { + _services = IV_CustomerInfoServices; + } + + + /// + /// 获取微信openid + /// + /// + /// + [HttpPost] + [AllowAnonymous] + public MessageModel GetWeixinAuthinfo(WeixinLogin login) + { + var response = new CustomerInfoResult(); + try + { + var result = _services.AuthCode2Session(login.code); + if (result.openid != "" && result.openid != null) + { + var loginstatus = _services.Logined(new LoginQuery() { openId = result.openid }).Result; + if (loginstatus.Item1) + { + response = loginstatus.Item2; + } + else + { + var save = _services.CustomerSave(new DecryptUserInfoRequest() { openid = result.openid }).Result; + response.OpenId = result.openid; + response.Id = save; + } + TokenModelJwt tokenModel = new TokenModelJwt { Uid = response.Id, Role = "users" }; + response.Token = JwtHelper.IssueJwt(tokenModel); + return new MessageModel() + { + success = true, + msg = "success", + response = response + }; + } + else + { + return new MessageModel() + { + success = false, + response = response + }; + } + } + catch (Exception ex) + { + return new MessageModel() + { + msg = ex.ToString(), + success = false, + response = response + }; + } + } + + + + + + /// + /// 解密手机号同时保存用户信息 + /// + /// + /// + [HttpPost] + public async Task> WeixinDecryptUserInfo(DecryptUserInfoRequest request) + { + var phoneinfo = _services.GetWeixinPhone(new GetPhoneInfo() + { + + encryptedData = request.encryptedData, + iv = request.iv, + openid = request.openid, + session_key = request.session_key + }); + request.phone = phoneinfo; + var customerinfo = (await _services.Query(e => e.OpenId == request.openid)).FirstOrDefault(); + customerinfo.AvatarUrl = request.avatarUrl; + customerinfo.NickName = request.nickName; + customerinfo.Gender = request.gender; + customerinfo.Phone = phoneinfo; + var result = await _services.Update(customerinfo); + return new MessageModel() + { + msg = result ? "修改成功" : "保存失败", + response = result, + success = result + }; + + } + + + + + /// + ///用户获取用户信息有OpenId 调用此接口 + /// + /// + /// + [HttpGet] + public async Task> GetUserInfo([FromQuery] LoginQuery query) + { + var result = await _services.GetUserInfo(query); + return new MessageModel() + { + response = result.Item2, + success = result.Item1, + msg = result.Item1 ? "登陆成功" : "用户不存在" + }; + } + + + + + + + /// + /// 更改分数 + /// + /// + /// + [HttpPost] + public async Task> UpdateScore(UpdateScoreQuery query) + { + var result = await _services.UpdateScore(query); + if (result.Id > 0) + { + var token = JwtHelper.IssueJwt(new TokenModelJwt() { Uid = result.Id, Role = "学生" }); + result.Token = token; + } + return new MessageModel() + { + success = result.Status == 1, + msg = result.Status == 1 ? "修改成功" : "修改失败", + response = result + }; + } + + /// + /// 完善用户信息 + /// + /// + /// + [HttpPost] + public async Task> UpdateCustomer(CustomerUpdateQuery query) + { + var result = await _services.UpdateCustomer(query); + if (result.Id > 0) + { + var token = JwtHelper.IssueJwt(new TokenModelJwt() { Uid = result.Id, Role = "学生" }); + result.Token = token; + } + return new MessageModel() + { + success = result.Status == 1, + msg = result.Status == 1 ? "成功" : "失败", + response = result + }; + } + + /// + /// 根绝Id获取用户信息 + /// + /// + /// + [HttpGet] + public async Task> GetCustomerInfoById([FromQuery] IdQuery query) + { + return await _services.GetCustomerInfoById(query); + } + } +} diff --git a/New_College.Api/Controllers/Front/ExaminationPolicyController.cs b/New_College.Api/Controllers/Front/ExaminationPolicyController.cs new file mode 100644 index 0000000..525da47 --- /dev/null +++ b/New_College.Api/Controllers/Front/ExaminationPolicyController.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.AuthHelper.OverWrite; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + [Authorize] + public class ExaminationPolicyController : ControllerBase + { + private readonly IV_ExaminationPolicyServices iV_ExaminationPolicyServices; + public ExaminationPolicyController(IV_ExaminationPolicyServices IV_ExaminationPolicyServices) + { + iV_ExaminationPolicyServices = IV_ExaminationPolicyServices; + } + + /// + /// 获取考试时间 + /// + /// + /// + [HttpGet] + public async Task> GetExaminationPolicyDetail([FromQuery] ExaminationPolicyAreaQuery query) + { + return await iV_ExaminationPolicyServices.GetExaminationPolicyDetail(query); + } + } +} diff --git a/New_College.Api/Controllers/Front/LibraryController.cs b/New_College.Api/Controllers/Front/LibraryController.cs new file mode 100644 index 0000000..1ddf48d --- /dev/null +++ b/New_College.Api/Controllers/Front/LibraryController.cs @@ -0,0 +1,334 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; + + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + public class LibraryController : ControllerBase + { + private readonly ID_LongIdMapServices iD_LongIdMapServices; + public LibraryController(ID_LongIdMapServices ID_LongIdMapServices) + { + iD_LongIdMapServices = ID_LongIdMapServices; + } + + /// + /// 获取院校库 + /// + /// + /// + [HttpGet] + public async Task>> GetUniversitys([FromQuery] UniversityQuery query) + { + var result = await iD_LongIdMapServices.GetUniversitys(query); + if (result.data == null || result.data.Count <= 0) + { + return new MessageModel>() + { + success = false, + msg = "获取失败", + }; + } + else + { + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = result + }; + + } + + } + + /// + /// 专业库 一级二级列表 + /// + /// + /// + [HttpGet] + public async Task>> uniGetMajorInfo([FromQuery] MajorcategoryQuery query) + { + var result = await iD_LongIdMapServices.uniGetMajorInfo(query); + return new MessageModel>() + { + success = result.Count <= 0 ? false : true, + msg = result.Count <= 0 ? "获取失败" : "获取成功", + response = result + }; + } + + /// + /// 获取推荐职业 + /// + /// + [HttpGet] + public async Task>> GetRecommendOccupation() + { + var result = await iD_LongIdMapServices.GetRecommendOccupation(); + return new MessageModel>() + { + success = result.Count <= 0 ? false : true, + msg = result.Count <= 0 ? "获取失败" : "获取成功", + response = result + }; + } + + /// + /// 职业库 一级二级列表 + /// + /// + [HttpGet] + public async Task>> uniGetOccupationInfo() + { + var result = await iD_LongIdMapServices.uniGetOccupationInfo(); + return new MessageModel>() + { + success = result.Count <= 0 ? false : true, + msg = result.Count <= 0 ? "获取失败" : "获取成功", + response = result + }; + } + + /// + /// 获取职业第三级 + /// + /// + /// + [HttpGet] + public async Task>> GetOccupationThree([FromQuery] IdQuery query) + { + return await iD_LongIdMapServices.GetOccupationThree(query); + } + + /// + /// 院校详情 + /// + /// + /// + [HttpGet] + public async Task> GetUniversityDetails([FromQuery] IdQuery query) + { + var result = await iD_LongIdMapServices.GetUniversityDetails(query); + return new MessageModel() + { + success = result.Status == 1 ? true : false, + msg = result.Status == 1 ? "获取成功" : "获取失败", + response = result + }; + } + + /// + /// 获取专业介绍 + /// + /// + /// + [HttpGet] + public async Task> GetMajorDetail([FromQuery] MajorQuery query) + { + var result = await iD_LongIdMapServices.GetMajorDetail(query); + return new MessageModel() + { + success = result.id > 0 ? true : false, + msg = result.id > 0 ? "获取成功" : "获取失败", + response = result + }; + } + + /// + /// 相关院校 + /// + /// + /// + [HttpGet] + public async Task>> GetRelevantSchool([FromQuery] MajorSchoolQuery query) + { + var result = await iD_LongIdMapServices.GetRelevantSchool(query); + return new MessageModel>() + { + success = (result.data == null || result.data.Count <= 0) == true ? false : true, + msg = (result.data == null || result.data.Count <= 0) == true ? "获取失败" : "获取成功", + response = result + }; + } + + /// + /// 获取专业就业前景 + /// + /// + /// + [HttpGet] + public async Task> GetCareerProspects([FromQuery] MajorCareerQuery query) + { + var result = await iD_LongIdMapServices.GetCareerProspects(query); + return new MessageModel() + { + success = true, + msg = "获取成功", + response = result + }; + } + + /// + /// 获取第三级 + /// + /// + /// + [HttpGet] + public async Task>> uniGetMajorThree([FromQuery] ManageMajorQuery query) + { + return await iD_LongIdMapServices.uniGetMajorThree(query); + } + + /// + /// 根据标签推荐专业 + /// + /// + /// + [HttpGet] + public async Task>> GetMajorThreeByTag([FromQuery] MajorThreeByTagQuery query) + { + return await iD_LongIdMapServices.GetMajorThreeByTag(query); + } + + /// + /// 获取职业详情-职业介绍 + /// + /// + [HttpGet] + public async Task> GetRecommendIntroduce([FromQuery] IdQuery query) + { + var result = await iD_LongIdMapServices.GetRecommendIntroduce(query); + return new MessageModel() + { + success = result.Status == 1 ? true : false, + msg = result.Status == 1 ? "获取成功" : "获取失败", + response = result + }; + } + + /// + /// 院校相关专业专用 + /// + /// + /// + [HttpGet] + public async Task>> GetUniversityMajor([FromQuery] IdQuery query) + { + var result = await iD_LongIdMapServices.GetUniversityMajor(query); + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = result + }; + } + + /// + /// 查学校省份的 年份批次 + /// + /// + /// + [HttpGet] + public async Task> GetBatchYearBySchoolId([FromQuery] PlanYearQuery query) + { + var result = await iD_LongIdMapServices.GetBatchYearBySchoolId(query); + return new MessageModel() + { + success = result != null, + msg = result != null ? "获取成功" : "获取失败", + response = result + }; + } + + /// + /// 获取招生计划 院校详情 + /// + /// + /// + [HttpGet] + public async Task>> GetPlanBySchollId([FromQuery] PlanQuery query) + { + var result = await iD_LongIdMapServices.GetPlanBySchollId(query); + if (result == null || result.Count() <= 0) + { + return new MessageModel>() + { + success = false, + msg = "获取失败" + }; + } + else + { + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = result + }; + } + } + + /// + /// 获取院校排名 + /// + /// + /// + [HttpGet] + public async Task>> GetUniversityRank([FromQuery] UniversityRankQuery query) + { + var result = await iD_LongIdMapServices.GetUniversityRank(query); + return new MessageModel>() + { + success = result.Count > 0, + msg = result.Count > 0 ? "获取成功" : "获取失败", + response = result + }; + } + + /// + /// 专业搜索 + /// + /// + /// + [HttpGet] + public async Task>> uniGetSearchMajor([FromQuery] NameBaseQuery query) + { + return await iD_LongIdMapServices.uniGetSearchMajor(query); + } + + /// + /// 获取招生简章列表 + /// + /// + /// + [HttpGet] + public async Task>> GetRequestEnrollmentinproductionResult([FromQuery] UniversityIdQuery query) + { + return await iD_LongIdMapServices.GetRequestEnrollmentinproductionResult(query); + } + + + /// + /// 获取招生简介详情 + /// + /// + /// + [HttpGet] + public async Task> GetRequestEnrollmentinproductionDetailResult([FromQuery] StringIdQuery query) + { + return await iD_LongIdMapServices.GetRequestEnrollmentinproductionDetailResult(query); + } + } +} diff --git a/New_College.Api/Controllers/Front/MajorSalaryController.cs b/New_College.Api/Controllers/Front/MajorSalaryController.cs new file mode 100644 index 0000000..0851dec --- /dev/null +++ b/New_College.Api/Controllers/Front/MajorSalaryController.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + public class MajorSalaryController : ControllerBase + { + private readonly ID_MajorSalaryServices iD_MajorSalaryServices; + public MajorSalaryController(ID_MajorSalaryServices ID_MajorSalaryServices) + { + iD_MajorSalaryServices = ID_MajorSalaryServices; + } + + /// + /// 获取高薪推荐 + /// + /// + [HttpGet] + public async Task>> GetMajorSalaryResult([FromQuery] MajorSalaryQuery query) + { + return await iD_MajorSalaryServices.GetMajorSalaryResult(query); + } + } +} diff --git a/New_College.Api/Controllers/Front/OrderController.cs b/New_College.Api/Controllers/Front/OrderController.cs new file mode 100644 index 0000000..fd9e908 --- /dev/null +++ b/New_College.Api/Controllers/Front/OrderController.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + public class OrderController : ControllerBase + { + private readonly IV_OrderInfoServices v_OrderInfoServices; + public OrderController(IV_OrderInfoServices IV_OrderInfoServices) + { + v_OrderInfoServices = IV_OrderInfoServices; + } + + /// + /// 下订单 + /// + /// + [HttpPost] + public async Task> CreateOrder(UniOrderQuery query) + { + var result = await v_OrderInfoServices.CreateOrder(query); + return new MessageModel() + { + success = result.success, + msg = result.msg, + response = result + }; + } + } +} diff --git a/New_College.Api/Controllers/Front/RegionController.cs b/New_College.Api/Controllers/Front/RegionController.cs new file mode 100644 index 0000000..6336681 --- /dev/null +++ b/New_College.Api/Controllers/Front/RegionController.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + public class RegionController : ControllerBase + { + private readonly ISysRegionServices sysRegionServices; + public RegionController(ISysRegionServices ISysRegionServices) + { + sysRegionServices = ISysRegionServices; + } + + /// + /// 获取省市区 + /// + /// + /// + [HttpGet] + public async Task>> GetRegionList([FromQuery] SysRegionQuery query) + { + List list = new List() { }; + list.Add(new SysRegionResult() { Id = 0, Code = "0", Name = "全国" }); + var result = await sysRegionServices.GetRegionList(query); + list.AddRange(result); + return new MessageModel>() + { + success = true, + msg = "成功", + response = list + }; + } + } +} diff --git a/New_College.Api/Controllers/Front/TestController.cs b/New_College.Api/Controllers/Front/TestController.cs new file mode 100644 index 0000000..edc0096 --- /dev/null +++ b/New_College.Api/Controllers/Front/TestController.cs @@ -0,0 +1,325 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + + public class TestController : ControllerBase + { + private readonly ITest_CategoryInfoServices test_CategoryInfoServices; + private readonly ITest_QuestionInfoServices test_QuestionInfoServices; + private readonly IV_SubjectSelectServices v_SubjectSelectServices; + private readonly ITest_PsychMeasurementInfoServices test_PsychMeasurementInfoServices; + private readonly IT_EnrollmentPlanedescServices t_EnrollmentPlanedescServices; + + public TestController(ITest_CategoryInfoServices ITest_CategoryInfoServices + , ITest_QuestionInfoServices ITest_QuestionInfoServices + , ITest_PsychMeasurementInfoServices ITest_PsychMeasurementInfoServices + , IV_SubjectSelectServices IV_SubjectSelectServices + , IT_EnrollmentPlanedescServices IT_EnrollmentPlanedescServices) + { + test_CategoryInfoServices = ITest_CategoryInfoServices; + test_QuestionInfoServices = ITest_QuestionInfoServices; + test_PsychMeasurementInfoServices = ITest_PsychMeasurementInfoServices; + v_SubjectSelectServices = IV_SubjectSelectServices; + t_EnrollmentPlanedescServices = IT_EnrollmentPlanedescServices; + } + + /// + /// 获取分类 根绝type + /// + /// + [HttpGet] + public async Task>> GetCateSelectByType([FromQuery] CategoryInfoQuery query) + { + var result = await test_CategoryInfoServices.GetCateSelectByType(query); + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = result + }; + } + + /// + /// 获取个人某个维度测评结果 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task>> GetPsychListByCateAndCustomerId([FromQuery] PsychMeasurementQuery query) + { + var result = await test_PsychMeasurementInfoServices.GetPsychListByCateAndCustomerId(query); + return new MessageModel>() + { + msg = "获取成功", + success = true, + response = result + }; + } + + /// + /// 获取测评状态 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetTestStatus([FromQuery] CategoryStatusQuery query) + { + var result = await test_CategoryInfoServices.GetTestStatus(query); + return new MessageModel() + { + msg = "获取成功", + success = true, + response = result + }; + } + + /// + /// 获取问题 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task>> GetQuestion([FromQuery] appQuestionQuery query) + { + var result = await test_QuestionInfoServices.GetQuestion(query); + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = result + }; + } + + /// + /// 获取mbti试题 + /// + /// + [HttpGet] + [Authorize] + public async Task>> GetQuestionMBTI() + { + var result = await test_QuestionInfoServices.GetQuestionMBTI(); + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = result + }; + } + + /// + /// 提交 + /// + /// + [HttpPost] + [Authorize] + public async Task> SavePsych([FromBody] SavePsychQuery query) + { + var result = await test_PsychMeasurementInfoServices.SavePsych(query); + return new MessageModel() + { + success = result, + msg = result == true ? "提交成功" : "提交失败", + response = result + }; + } + + /// + /// 提交 霍兰德和MBTI + /// + /// + /// + [HttpPost] + [Authorize] + public async Task> SaveHolland(SaveHollandQuery query) + { + var result = await test_PsychMeasurementInfoServices.SaveHolland(query); + return new MessageModel() + { + success = result, + msg = result == true ? "提交成功" : "提交失败", + response = result + }; + } + + /// + /// 获取学生发展 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetPsychDetail([FromQuery] ResultLookQuery query) + { + var result = await test_PsychMeasurementInfoServices.GetPsychDetail(query); + return new MessageModel() + { + success = true, + msg = "获取成功", + response = result + }; + } + + /// + /// 获取霍兰德测评结果 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetHollandResult([FromQuery] ResultLookQuery query) + { + var result = await test_PsychMeasurementInfoServices.GetHollandResult(query); + return new MessageModel() + { + success = true, + msg = "获取成功", + response = result + }; + } + + /// + /// 获取MBTI测评结果 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetMBTIResult([FromQuery] ResultLookQuery query) + { + var result = await test_PsychMeasurementInfoServices.GetMBTIResult(query); + return new MessageModel() + { + success = true, + msg = "获取成功", + response = result + }; + } + + + /// + /// 学科探索 结果 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> SubjectChartRadar([FromQuery] ResultLookQuery query) + { + return await test_PsychMeasurementInfoServices.SubjectChartRadar(query); + } + + /// + /// 传入用户Id 获取霍兰德测评状态 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetHollandStatus([FromQuery] IdQuery query) + { + return await test_PsychMeasurementInfoServices.GetHollandStatus(query); + } + + /// + /// 传入用户Id 获取学科探索测评状态 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetSubjectSelectStatus([FromQuery] IdQuery query) + { + return await test_PsychMeasurementInfoServices.GetSubjectSelectStatus(query); + } + + + /// + /// 获取我的自选科目 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetSubjectSelect([FromQuery] IdQuery query) + { + return await v_SubjectSelectServices.GetSubjectSelect(query); + } + + /// + /// 保存我的选科 + /// + /// + /// + [HttpPost] + [Authorize] + public async Task> SaveSubjectSelect([FromBody] SubjectSelectQuery query) + { + return await v_SubjectSelectServices.SaveSubjectSelect(query); + } + + /// + /// 根据标签推荐选科 + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetSubjectSelectByTag([FromQuery] ByTagSubjectSelectQuery query) + { + return await t_EnrollmentPlanedescServices.GetSubjectSelectByTag(query); + } + + /// + /// 获取测评最新周期Id + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetReportCycleInfo([FromQuery] IdQuery query) + { + return await test_PsychMeasurementInfoServices.GetReportCycleInfo(query); + } + + /// + /// 获取三种推荐选科 + /// + /// + /// + [HttpGet] + //[Authorize] + public async Task>> GetSubjectSelectResult([FromQuery] NewSubjectQuery query) + { + return await test_PsychMeasurementInfoServices.GetSubjectSelectResult(query); + } + + + /// + /// 根绝霍兰德获取推荐选科 + /// + /// + /// + [HttpGet] + //[Authorize] + public async Task> GetHollandSubject([FromQuery]HollandSubjectQuery query) + { + return await test_PsychMeasurementInfoServices.GetHollandSubject(query); + } + } +} diff --git a/New_College.Api/Controllers/Front/UniversityCollectionController.cs b/New_College.Api/Controllers/Front/UniversityCollectionController.cs new file mode 100644 index 0000000..30ca777 --- /dev/null +++ b/New_College.Api/Controllers/Front/UniversityCollectionController.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + [Authorize] + public class UniversityCollectionController : ControllerBase + { + private readonly ID_UniversityCollectionServices d_UniversityCollectionServices; + private readonly ID_UniversityServices d_UniversityServices; + public UniversityCollectionController(ID_UniversityCollectionServices ID_UniversityCollectionServices + , ID_UniversityServices ID_UniversityServices) + { + d_UniversityCollectionServices = ID_UniversityCollectionServices; + d_UniversityServices = ID_UniversityServices; + } + + /// + /// 获取收藏和对比 + /// + /// + /// + [HttpGet] + public async Task>> GetUniversityCollection([FromQuery] UniversityCollectionQuery query) + { + return await d_UniversityCollectionServices.GetUniversityCollection(query); + } + + /// + /// 删除 + /// + /// + /// + [HttpPost] + public async Task> DeleteCollection(UniversityCollectionAddQuery query) + { + return await d_UniversityCollectionServices.DeleteCollection(query); + } + + /// + /// 添加收藏、对比 + /// + /// + /// + [HttpPost] + public async Task> AddCollection([FromBody] UniversityCollectionAddQuery query) + { + return await d_UniversityCollectionServices.AddCollection(query); + } + + /// + /// 获取院校对比结果 传Ids + /// + /// + [HttpPost] + public async Task>> GetUniversityContrasts([FromBody] IdQuery query) + { + return await d_UniversityCollectionServices.GetUniversityContrasts(query); + } + + /// + /// 获取搜索学校 + /// + /// + /// + [HttpGet] + public async Task>> GetUniversitList([FromQuery] NameQuery query) + { + return await d_UniversityServices.GetUniversitList(query); + } + + + /// + /// 报告 获取我喜欢的院校 + /// + /// + /// + [HttpGet] + public async Task>> GetUniversityMap([FromQuery] IdQuery query) + { + return await d_UniversityCollectionServices.GetUniversityMap(query); + } + } +} diff --git a/New_College.Api/Controllers/Front/VipController.cs b/New_College.Api/Controllers/Front/VipController.cs new file mode 100644 index 0000000..ec0374b --- /dev/null +++ b/New_College.Api/Controllers/Front/VipController.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + + public class VipController : ControllerBase + { + private readonly IV_VipCardTypeServices v_VipCardTypeServices; + private readonly IV_VipCardInfoServices v_VipCardInfoServices; + public VipController(IV_VipCardTypeServices IV_VipCardTypeServices, + IV_VipCardInfoServices IV_VipCardInfoServices) + { + v_VipCardTypeServices = IV_VipCardTypeServices; + v_VipCardInfoServices = IV_VipCardInfoServices; + } + + /// + /// 获取Vip卡列表 + /// + /// + [HttpGet] + public async Task>> GetVipCardTypeList() + { + var result = await v_VipCardTypeServices.GetVipCardTypeList(); + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = result + }; + } + + /// + /// 绑定卡 + /// + /// + /// + [HttpPost] + [Authorize] + public async Task> BindCardInfo(VipCardQuery query) + { + return await v_VipCardInfoServices.BindCardInfo(query); + } + + /// + /// 获取vip信息 传用户Id + /// + /// + /// + [HttpGet] + [Authorize] + public async Task> GetVipInfo([FromQuery] IdQuery query) + { + return await v_VipCardInfoServices.GetVipInfo(query); + } + } +} diff --git a/New_College.Api/Controllers/Front/VolunteerController.cs b/New_College.Api/Controllers/Front/VolunteerController.cs new file mode 100644 index 0000000..85c210c --- /dev/null +++ b/New_College.Api/Controllers/Front/VolunteerController.cs @@ -0,0 +1,259 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.Model; +using New_College.Model.ViewModels; +using New_College.IServices; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + public class VolunteerController : ControllerBase + { + private readonly IT_EnrollmentPlanedescServices t_EnrollmentPlanedescServices; + private readonly ID_MajorClassServices d_MajorClassServices; + public VolunteerController(IT_EnrollmentPlanedescServices IT_EnrollmentPlanedescServices + , ID_MajorClassServices ID_MajorClassServices) + { + t_EnrollmentPlanedescServices = IT_EnrollmentPlanedescServices; + d_MajorClassServices = ID_MajorClassServices; + } + /// + /// 专业分类列表(二级) 传Id 1本科 2 专科 + /// + /// + /// + [HttpGet] + public async Task>> GetMajorClassListByType([FromQuery] IdQuery query) + { + var result = await d_MajorClassServices.GetMajorClassListByType(query); + return new MessageModel>() + { + success = result.Count > 0, + msg = result.Count > 0 ? "获取成功" : "获取失败", + response = result + }; + } + + /// + /// 根据分数获取个性推荐学校 + /// + /// + /// + [HttpGet] + public async Task>> GetRecommendUniversity([FromQuery] RecommendUniversityQuery query) + { + var result = await t_EnrollmentPlanedescServices.GetRecommendUniversity(query); + return new MessageModel>() + { + response = result, + success = true, + msg = "获取成功" + }; + } + + /// + /// 懒人模式 + /// 办学性质 + /// 高校级别 + /// 专业ids + /// + /// + /// + [HttpPost] + public async Task>> GetEnrollmentLazyByPage([FromBody] LazyEnrollmentPlaneQuery query) + { + return await t_EnrollmentPlanedescServices.GetEnrollmentLazyByPage(query); + } + + /// + /// 根据计划Ids 获取招生计划 + /// + /// + /// + [HttpPost] + public async Task>> GetPlanByUniversity([FromBody] PlanDetailQuery query) + { + return await t_EnrollmentPlanedescServices.GetPlanByUniversity(query); + } + + /// + /// 根据年份省份获取批次 + /// + /// + [HttpGet] + public async Task>> GetBatchByAreaAndYear([FromQuery] BatchQuery query) + { + return await t_EnrollmentPlanedescServices.GetBatchByAreaAndYear(query); + } + + /// + /// 冲稳保获取推荐学校专业 + /// + /// + /// + [HttpPost] + public async Task>> GetEnrollmentCWBByPage([FromBody] CWBEnrollmentPlaneQuery query) + { + return await t_EnrollmentPlanedescServices.GetEnrollmentCWBByPage(query); + } + + /// + /// 冲稳保详情 + /// + /// + /// + [HttpPost] + public async Task>> GetCWBUniversityDetail([FromBody] CWBUniversityDetailQuery query) + { + return await t_EnrollmentPlanedescServices.GetCWBUniversityDetail(query); + } + + /// + /// 霍兰德推荐学校专业 + /// + /// + /// + [HttpPost] + public async Task>> GetEnrollmentTagByPage([FromBody] TagEnrollmentPlaneQuery query) + { + return await t_EnrollmentPlanedescServices.GetEnrollmentTagByPage(query); + } + + /// + /// 获取分析结果录取概率 获取之后保存一下 + /// + /// + /// + [HttpGet] + public async Task> GetUniversityProbability([FromQuery] UniversityProbabilityQuery query) + { + return await t_EnrollmentPlanedescServices.GetUniversityProbability(query); + } + + /// + /// 获取概率历史记录列表 + /// + /// + [HttpGet] + public async Task>> GetProbabilityResult([FromQuery] ProbabilityQuery query) + { + return await t_EnrollmentPlanedescServices.GetProbabilityResult(query); + } + + /// + /// 保存志愿表 + /// + /// + /// + [HttpPost] + public async Task> SaveVolunteerTable([FromBody] VolunteerTableQuery query) + { + return await t_EnrollmentPlanedescServices.SaveVolunteerTable(query); + } + + /// + /// 获取个人志愿列表 传Id + /// + /// + /// + [HttpGet] + public async Task>> GetVolunteerTableList([FromQuery] IdQuery query) + { + return await t_EnrollmentPlanedescServices.GetVolunteerTableList(query); + } + + /// + /// 获取志愿表详情 传Id + /// + /// + /// + [HttpGet] + public async Task>> GetVolunteerTableDetail([FromQuery] IdQuery query) + { + return await t_EnrollmentPlanedescServices.GetVolunteerTableDetail(query); + } + + /// + /// 删除志愿表 + /// + /// + /// + [HttpPost] + public async Task> DeleteVolunteerTable([FromBody] IdQuery query) + { + return await t_EnrollmentPlanedescServices.DeleteVolunteerTable(query); + } + + ///// + ///// 保存志愿表 霍兰德专用 弃用 + ///// + ///// + ///// + //[HttpPost] + //public async Task> SaveHollandVolunteer([FromBody] HollandVolunteerTableQuery query) + //{ + // return await t_EnrollmentPlanedescServices.SaveHollandVolunteer(query); + //} + + /// + /// 获取一键生成的志愿表 + /// + /// + /// + [HttpPost] + public async Task>> GetAutoVolunteerTableDetail([FromBody] VolunteerTableQuery query) + { + return await t_EnrollmentPlanedescServices.GetAutoVolunteerTableDetail(query); + } + + /// + /// 获取霍兰德一键生成的志愿表 + /// + /// + /// + [HttpPost] + public async Task>> GetHollandVolunteerTableDetail([FromBody] HollandVolunteerTableQuery query) + { + return await t_EnrollmentPlanedescServices.GetHollandVolunteerTableDetail(query); + } + + + /// + /// 获取喜欢的院校 + /// + /// + /// + [HttpGet] + public async Task>> GetLikeSchoolMajor([FromQuery] IdQuery query) + { + return await t_EnrollmentPlanedescServices.GetLikeSchoolMajor(query); + } + + /// + /// 专业规划 + /// + /// + [HttpGet] + public async Task>> GetMajorPlanClaim([FromQuery] CustomerQuery query) + { + return await t_EnrollmentPlanedescServices.GetMajorPlanClaim(query); + } + + + /// + /// 获取批次 + /// + /// + /// + [HttpPost] + public async Task>> GetBatchByYearArea([FromBody] YearAreaQuery query) + { + return await t_EnrollmentPlanedescServices.GetBatchByYearArea(query); + } + } +} diff --git a/New_College.Api/Controllers/Front/WeixinPayController.cs b/New_College.Api/Controllers/Front/WeixinPayController.cs new file mode 100644 index 0000000..5a256f0 --- /dev/null +++ b/New_College.Api/Controllers/Front/WeixinPayController.cs @@ -0,0 +1,343 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using New_College.Common; +using New_College.IRepository; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers.Front +{ + [Route("api/front/[controller]/[action]")] + [ApiController] + [Authorize] + public class WeixinPayController : ControllerBase + { + private readonly IV_OrderInfoRepository v_OrderInfoRepository; + private readonly IV_CustomerInfoRepository v_CustomerInfoRepository; + private readonly IV_VipCardInfoRepository v_VipCardInfoRepository; + private readonly IV_VipCardTypeRepository v_VipCardTypeRepository; + + private readonly ILogger logger; + public WeixinPayController(IV_OrderInfoRepository IV_OrderInfoRepository + , IV_CustomerInfoRepository IV_CustomerInfoRepository + , IV_VipCardInfoRepository IV_VipCardInfoRepository + , IV_VipCardTypeRepository IV_VipCardTypeRepository + , ILogger loggers) + { + v_OrderInfoRepository = IV_OrderInfoRepository; + v_CustomerInfoRepository = IV_CustomerInfoRepository; + v_VipCardInfoRepository = IV_VipCardInfoRepository; + v_VipCardTypeRepository = IV_VipCardTypeRepository; + logger = loggers; + } + + /// + /// 下订单 + /// + /// + [HttpPost] + public async Task UnifiedOrder(UnifiedOrderQuery query) + { + var resp = new WeixinPayResult(); + try + { + Random rd = new Random(); + //HttpContext.GetClientUserIp(); + //外部商户订单号 + var payNum = DateTime.Now.ToString("yyyyMMddHHmmss") + rd.Next(0, 1000).ToString().PadLeft(3, '0'); + var data = new WxPayData(); + data.SetValue("body", "壹志愿好帮手VIP购买"); + data.SetValue("out_trade_no", payNum); + data.SetValue("detail", "志愿好帮手VIP卡购买"); + data.SetValue("total_fee", Convert.ToInt32(query.total_fee * 100)); + data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss")); + //data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); + data.SetValue("notify_url", WeixinConfig.NotifyUrl); + //data.SetValue("goods_tag", "test"); + data.SetValue("trade_type", "JSAPI"); + data.SetValue("openid", query.Phone); + //可以将用户Id和订单Id同时封装在attach中 + data.SetValue("attach", string.Format("{0}|{1}", query.Phone, payNum)); + WxPayData result = UnifiedOrder(data); + if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "") + { + resp.err_code_des = result.GetValue("err_code_des").ToString(); + resp.err_code = result.GetValue("err_code").ToString(); + resp.result_code = result.GetValue("result_code").ToString(); + return resp; + } + else + { + resp.nonce_str = result.GetValue("nonce_str").ToString(); + resp.appid = result.GetValue("appid").ToString(); + resp.mchi_id = result.GetValue("mch_id").ToString(); + resp.result_code = result.GetValue("result_code").ToString(); + resp.prepay_id = "prepay_id=" + result.GetValue("prepay_id").ToString(); + //resp.code_url = result.GetValue("code_url").ToString(); + resp.trade_type = result.GetValue("trade_type").ToString(); + var signType = "MD5"; + var timeStamp = ((DateTime.Now.Ticks - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).Ticks) / 10000).ToString(); + WxPayData applet = new WxPayData(); + applet.SetValue("appId", resp.appid); + applet.SetValue("nonceStr", resp.nonce_str); + applet.SetValue("package", resp.prepay_id); + applet.SetValue("signType", signType); + applet.SetValue("timeStamp", timeStamp); + resp.sign = applet.MakeSign(); + resp.timeStamp = timeStamp; + //NLogHelper.WriteInfo("Signurl" + Newtonsoft.Json.JsonConvert.SerializeObject(resp), DevAuthorNameEnum.Michael, false); + // WebHookHelper.WebHookmarkdownSend("Signurl" + Newtonsoft.Json.JsonConvert.SerializeObject(resp)); + var customer = await v_CustomerInfoRepository.Query(x => x.OpenId == query.Phone && x.IsDelete == false); + if (customer.Count <= 0) + return new WeixinPayResult() { err_code_des = "用户出现错误" }; + //添加一张卡 + var cardtype = await v_VipCardTypeRepository.QueryById(query.CardTypeId); + if (cardtype == null) + return new WeixinPayResult() { err_code_des = "卡出现错误" }; + var code = RadomHelper.GetGuid(); + var addcard = await v_VipCardInfoRepository.Add(new V_VipCardInfo() + { + CardTypeId = query.CardTypeId, + CardTypeName = cardtype.Name, + Code = code, + IsBind = 1, + Money = query.total_fee, + Day = cardtype.Day, + EndTime = DateTime.Now.AddDays(cardtype.Day) + }); + var baseResult = await v_OrderInfoRepository.Add(new V_OrderInfo + { + out_trade_no = payNum, + // PayType = 2, + CardTypeId = query.CardTypeId, + // Status = 1, + CustomerId = customer.FirstOrDefault().Id, + Price = query.total_fee, + PayPrice = query.total_fee, + Name = "壹志愿好帮手VIP购买", + CardNo = code, + CardId = addcard + }); + if (baseResult > 0) + { + //订单号 + applet.SetValue("orderid", baseResult); + resp.orderid = baseResult.ToString(); + } + } + } + catch (Exception ex) + { + //WebHookHelper.WebHookmarkdownSend(ex.ToString()); + + //NLogHelper.WriteError(ex, DevAuthorNameEnum.Michael, false); + } + return resp; + } + + + /// + /// 支付返回值 + /// + /// + [HttpPost] + public async Task PayNotify() + { + logger.LogInformation("开始回调PayNotify"); + + WxPayData res = new WxPayData(); + + //接收从微信后台POST过来的数据 + //转换数据格式并验证签名 + WxPayData data = new WxPayData(); + using (var reader = new StreamReader(Request.Body)) + { + var builder = reader.ReadToEnd(); + //WebHookHelper.WebHookmarkdownSend(builder.ToString()); + try + { + data.FromXml(builder.ToString()); + } + catch (Exception ex) + { + //若签名错误,则立即返回结果给微信支付后台 + + res.SetValue("return_code", "FAIL"); + res.SetValue("return_msg", ex.Message); + // NLogHelper.WriteError("Sign check error : " + res.ToXml(), DevAuthorNameEnum.Michael, false); + //WebHookHelper.WebHookmarkdownSend(string.Format("return_msg:{0}", ex.Message)); + return Content(res.ToXml(), "text/xml"); + } + + }; + // WebHookHelper.WebHookmarkdownSend("Check sign success"); + //检查支付结果中transaction_id是否存在 + if (!data.IsSet("transaction_id")) + { + //若transaction_id不存在,则立即返回结果给微信支付后台 + res.SetValue("return_code", "FAIL"); + res.SetValue("return_msg", "支付结果中微信订单号不存在"); + //WebHookHelper.WebHookmarkdownSend("支付结果中微信订单号不存在"); + return Content(res.ToXml(), "text/xml"); + } + // 执行订单状态操作 + string out_trade_no = data.GetValue("out_trade_no").ToString(); + logger.LogInformation("开始回调PayNotify"+ out_trade_no); + var info = await v_OrderInfoRepository.Query(x => x.out_trade_no == out_trade_no); + if (info.Count <= 0) + { + res.SetValue("return_code", "FAIL"); + res.SetValue("return_msg", "在自有平台未找到该订单号"); + //WebHookHelper.WebHookmarkdownSend("支付结果中微信订单号不存在"); + return Content(res.ToXml(), "text/xml"); + } + var oneinfo = info.FirstOrDefault(); + oneinfo.Status = EnumOrderType.payoff; + var rep = await v_OrderInfoRepository.Update(oneinfo); + if (rep) + { + //修改用户信息 修改为VIp + var customerinfo = await v_CustomerInfoRepository.QueryById(oneinfo.CustomerId); + customerinfo.IsVIP = true; + customerinfo.VipCode = oneinfo.CardNo; + await v_CustomerInfoRepository.Update(customerinfo); + //支付成功后根据用户code找到对应用户修改vip 状态 + res.SetValue("return_code", "SUCCESS"); + res.SetValue("return_msg", "OK"); + } + else + { + // string attach = data.GetValue("attach").ToString(); + // WebHookHelper.WebHookmarkdownSend(attach); + res.SetValue("return_code", "FAIL"); + res.SetValue("return_msg", "在自有平台未找到该订单号"); + } + + return Content(res.ToXml(), "text/xml"); + } + + + /** + * + * 统一下单 + * @param WxPaydata inputObj 提交给统一下单API的参数 + * @param int timeOut 超时时间 + * @throws WePayException + * @return 成功时返回,其他抛异常 + */ + public static WxPayData UnifiedOrder(WxPayData inputObj, int timeOut = 60) + { + string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; + //检测必填参数 + if (!inputObj.IsSet("out_trade_no")) + { + throw new Exception("缺少统一支付接口必填参数out_trade_no!"); + } + else if (!inputObj.IsSet("body")) + { + throw new Exception("缺少统一支付接口必填参数body!"); + } + else if (!inputObj.IsSet("total_fee")) + { + throw new Exception("缺少统一支付接口必填参数total_fee!"); + } + else if (!inputObj.IsSet("trade_type")) + { + throw new Exception("缺少统一支付接口必填参数trade_type!"); + } + + //关联参数 + if (inputObj.GetValue("trade_type").ToString() == "JSAPI" && !inputObj.IsSet("openid")) + { + throw new Exception("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"); + } + if (inputObj.GetValue("trade_type").ToString() == "NATIVE" && !inputObj.IsSet("product_id")) + { + throw new Exception("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!"); + } + + //异步通知url未设置,则使用配置文件中的url + if (!inputObj.IsSet("notify_url")) + { + inputObj.SetValue("notify_url", WeixinConfig.NotifyUrl);//异步通知url + } + + inputObj.SetValue("appid", WeixinConfig.Appid);//公众账号ID + inputObj.SetValue("mch_id", WeixinConfig.MCHID);//商户号 + inputObj.SetValue("spbill_create_ip", WePayConfig.IP);//终端ip + inputObj.SetValue("nonce_str", GenerateNonceStr());//随机字符串 + + //签名 + inputObj.SetValue("sign", inputObj.MakeSign()); + string xml = inputObj.ToXml(); + + var start = DateTime.Now; + + // Log.Info("XcxPayApi", "UnfiedOrder request : " + xml); + string response = HttpPost(xml, url, "application/xml", timeOut); + //Log.Info("XcxPayApi", "UnfiedOrder response : " + response); + // WebHookHelper.WebHookmarkdownSend(response); + + var end = DateTime.Now; + int timeCost = (int)((end - start).TotalMilliseconds); + + WxPayData result = new WxPayData(); + result.FromXml(response); + // ReportCostTime(url, timeCost, result);//测速上报网络不好时使用 + return result; + } + /// + /// 生成随机数 + /// + /// + public static string GenerateNonceStr() + { + return Guid.NewGuid().ToString().Replace("-", ""); + } + /// + /// POST请求 + /// + /// + /// + /// application/xml、application/json、application/text、application/x-www-form-urlencoded + /// + /// + /// + public static string HttpPost(string postData, string url, string contentType = null, int timeOut = 30, Dictionary headers = null) + { + postData = postData ?? ""; + + var httpClientHandler = new HttpClientHandler + { + ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true + }; + using (HttpClient httpClient = new HttpClient(httpClientHandler)) + { + if (headers != null) + { + foreach (var header in headers) + httpClient.DefaultRequestHeaders.Add(header.Key, header.Value); + } + using (HttpContent client = new StringContent(postData, Encoding.UTF8)) + { + if (contentType != null) + client.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType); + + HttpResponseMessage response = httpClient.PostAsync(url, client).Result; + return response.Content.ReadAsStringAsync().Result; + } + } + } + } +} diff --git a/New_College.Api/Controllers/HealthCheckController.cs b/New_College.Api/Controllers/HealthCheckController.cs new file mode 100644 index 0000000..8d4fc3a --- /dev/null +++ b/New_College.Api/Controllers/HealthCheckController.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// 健康检查 + /// + [Route("[controller]")] + [ApiController] + public class HealthCheckController : ControllerBase + { + /// + /// 健康检查接口 + /// + /// + [HttpGet] + public IActionResult Get() + { + return Ok(); + } + } +} \ No newline at end of file diff --git a/New_College.Api/Controllers/ImgController.cs b/New_College.Api/Controllers/ImgController.cs new file mode 100644 index 0000000..54ace19 --- /dev/null +++ b/New_College.Api/Controllers/ImgController.cs @@ -0,0 +1,194 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using New_College.Model; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.Common; + +namespace New_College.Controllers +{ + /// + /// 图片管理 + /// + [Route("api/[controller]")] + [ApiController] + + public class ImgController : Controller + { + // GET: api/Download + /// + /// 下载图片(支持中文字符) + /// + /// + /// + [HttpGet] + [Authorize] + [Route("/images/Down/Pic")] + public FileStreamResult DownImg([FromServices]IWebHostEnvironment environment) + { + string foldername = ""; + string filepath = Path.Combine(environment.WebRootPath, foldername, "测试下载中文名称的图片.png"); + var stream = System.IO.File.OpenRead(filepath); + string fileExt = ".jpg"; // 这里可以写一个获取文件扩展名的方法,获取扩展名 + //获取文件的ContentType + var provider = new Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider(); + var memi = provider.Mappings[fileExt]; + var fileName = Path.GetFileName(filepath); + + + return File(stream, memi, fileName); + } + + /// + /// 上传图片,多文件,可以使用 postman 测试, + /// 如果是单文件,可以 参数写 IFormFile file1 + /// + /// + /// + [HttpPost] + [Authorize] + [Route("/images/Upload/Pic")] + public async Task> InsertPicture([FromServices]IWebHostEnvironment environment) + { + var data = new MessageModel(); + string path = string.Empty; + string foldername = "images"; + IFormFileCollection files = null; + + try + { + files = Request.Form.Files; + } + catch (Exception) + { + files = null; + } + + if (files == null || !files.Any()) { data.msg = "请选择上传的文件。"; return data; } + //格式限制 + var allowType = new string[] { "image/jpg", "image/png", "image/jpeg" }; + + string folderpath = Path.Combine(environment.WebRootPath, foldername); + if (!Directory.Exists(folderpath)) + { + Directory.CreateDirectory(folderpath); + } + + if (files.Any(c => allowType.Contains(c.ContentType))) + { + if (files.Sum(c => c.Length) <= 1024 * 1024 * 4) + { + //foreach (var file in files) + var file = files.FirstOrDefault(); + string strpath = Path.Combine(foldername, DateTime.Now.ToString("MMddHHmmss") + file.FileName); + path = Path.Combine(environment.WebRootPath, strpath); + + using (var stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite)) + { + await file.CopyToAsync(stream); + } + + data = new MessageModel() + { + response = strpath, + msg = "上传成功", + success = true, + }; + return data; + } + else + { + data.msg = "图片过大"; + return data; + } + } + else + + { + data.msg = "图片格式错误"; + return data; + } + } + + + // POST: api/Img + [HttpPost] + public void Post([FromBody] object formdata) + { + } + + // PUT: api/Img/5 + [HttpPut("{id}")] + public void Put(int id, [FromBody] string value) + { + } + + // DELETE: api/ApiWithActions/5 + [HttpDelete("{id}")] + public void Delete(int id) + { + } + + + /// + /// 上传图片 + /// + /// + /// + [HttpPost("UploadImg")] + public async Task> UploadImg([FromServices] IWebHostEnvironment environment) + { + var data = new MessageModel(); + var file = Request.Form.Files.First(); + if (file == null) { data.msg = "请选择上传的文件。"; return data; } + var path = environment.WebRootPath; + string urlPath = $"/Content/Upload/"; + string DirectoryName = Path.GetDirectoryName(path + urlPath); + if (!Directory.Exists(DirectoryName)) + Directory.CreateDirectory(DirectoryName); + var reportImage = ""; + if (file.Length > 0) + { + var fileName = DateTime.Now.ToString("yyyyMMddHHssfff") + + Path.GetExtension(file.FileName); + using (var stream = new FileStream(path + urlPath + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)) + { + await file.CopyToAsync(stream); + } + var newimg = path + urlPath + fileName; + var picfullname = string.Format("{0}{1}", DateTime.Now.ToString("yyyyMMddHHssfff"), ".JPEG"); + reportImage = AliYunOssHelper.UploadFile(picfullname, newimg); + if (string.IsNullOrWhiteSpace(reportImage)) + { + return new MessageModel() + { + response = reportImage, + msg = "上传失败", + success = false, + }; + } + data = new MessageModel() + { + response = reportImage, + msg = "上传成功", + success = true, + }; + if (System.IO.File.Exists(path + urlPath + fileName))//判断文件是否存在bai + { + System.IO.File.Delete(path + urlPath + fileName); + } + return data; + } + else + { + + } + return data; + } + } + +} diff --git a/New_College.Api/Controllers/LoginController.cs b/New_College.Api/Controllers/LoginController.cs new file mode 100644 index 0000000..de3bc1f --- /dev/null +++ b/New_College.Api/Controllers/LoginController.cs @@ -0,0 +1,299 @@ +using System; +using System.Collections.Generic; +using System.IdentityModel.Tokens.Jwt; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using New_College.AuthHelper; +using New_College.AuthHelper.OverWrite; +using New_College.Common.Helper; +using New_College.IServices; +using New_College.Model; +using New_College.Model.ViewModels; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// 登录管理【无权限】 + /// + [Produces("application/json")] + [Route("api/Login")] + [AllowAnonymous] + public class LoginController : Controller + { + readonly ISysUserInfoServices _sysUserInfoServices; + readonly IUserRoleServices _userRoleServices; + readonly IRoleServices _roleServices; + readonly PermissionRequirement _requirement; + private readonly IRoleModulePermissionServices _roleModulePermissionServices; + + + /// + /// 构造函数注入 + /// + /// + /// + /// + /// + /// + public LoginController(ISysUserInfoServices sysUserInfoServices, IUserRoleServices userRoleServices, IRoleServices roleServices, PermissionRequirement requirement, IRoleModulePermissionServices roleModulePermissionServices) + { + this._sysUserInfoServices = sysUserInfoServices; + this._userRoleServices = userRoleServices; + this._roleServices = roleServices; + _requirement = requirement; + _roleModulePermissionServices = roleModulePermissionServices; + } + + + #region 获取token的第1种方法 + /// + /// 获取JWT的方法1 + /// + /// + /// + /// + [HttpGet] + [Route("Token")] + public async Task> GetJwtStr(string name, string pass) + { + string jwtStr = string.Empty; + bool suc = false; + //这里就是用户登陆以后,通过数据库去调取数据,分配权限的操作 + + var user = await _sysUserInfoServices.GetUserRoleNameStr(name, MD5Helper.MD5Encrypt32(pass)); + if (user != null) + { + + TokenModelJwt tokenModel = new TokenModelJwt { Uid = 1, Role = user }; + + jwtStr = JwtHelper.IssueJwt(tokenModel); + suc = true; + } + else + { + jwtStr = "login fail!!!"; + } + + return new MessageModel() + { + success = suc, + msg = suc ? "获取成功" : "获取失败", + response = jwtStr + }; + } + + + /// + /// 获取JWT的方法2:给Nuxt提供 + /// + /// + /// + /// + [HttpGet] + [Route("GetTokenNuxt")] + public MessageModel GetJwtStrForNuxt(string name, string pass) + { + string jwtStr = string.Empty; + bool suc = false; + //这里就是用户登陆以后,通过数据库去调取数据,分配权限的操作 + //这里直接写死了 + if (name == "admins" && pass == "admins") + { + TokenModelJwt tokenModel = new TokenModelJwt + { + Uid = 1, + Role = "Admin" + }; + + jwtStr = JwtHelper.IssueJwt(tokenModel); + suc = true; + } + else + { + jwtStr = "login fail!!!"; + } + var result = new + { + data = new { success = suc, token = jwtStr } + }; + + return new MessageModel() + { + success = suc, + msg = suc ? "获取成功" : "获取失败", + response = jwtStr + }; + } + #endregion + + + + /// + /// 获取JWT的方法3:整个系统主要方法 + /// + /// + /// + /// + [HttpGet] + [Route("JWTToken3.0")] + public async Task> GetJwtToken3(string name = "", string pass = "") + { + string jwtStr = string.Empty; + + if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pass)) + { + return new MessageModel() + { + success = false, + msg = "用户名或密码不能为空", + }; + } + + pass = MD5Helper.MD5Encrypt32(pass); + + var user = await _sysUserInfoServices.Query(d => d.uLoginName == name && d.uLoginPWD == pass && d.tdIsDelete == false); + if (user.Count > 0) + { + var userRoles = await _sysUserInfoServices.GetUserRoleNameStr(name, pass); + //如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色 + var claims = new List { + new Claim(ClaimTypes.Name, name), + new Claim(JwtRegisteredClaimNames.Jti, user.FirstOrDefault().uID.ToString()), + new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString()) }; + claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s))); + + + // ids4和jwt切换 + // jwt + if (!Permissions.IsUseIds4) + { + var data = await _roleModulePermissionServices.RoleModuleMaps(); + var list = (from item in data + where item.IsDeleted == false + orderby item.Id + select new PermissionItem + { + Url = item.Module?.LinkUrl, + Role = item.Role?.Name.ObjToString(), + }).ToList(); + + _requirement.Permissions = list; + } + + var token = JwtToken.BuildJwtToken(claims.ToArray(), _requirement); + return new MessageModel() + { + success = true, + msg = "获取成功", + response = token + }; + } + else + { + return new MessageModel() + { + success = false, + msg = "认证失败", + }; + } + } + + /// + /// 请求刷新Token(以旧换新) + /// + /// + /// + [HttpGet] + [Route("RefreshToken")] + public async Task> RefreshToken(string token = "") + { + string jwtStr = string.Empty; + + if (string.IsNullOrEmpty(token)) + { + return new MessageModel() + { + success = false, + msg = "token无效,请重新登录!", + }; + } + var tokenModel = JwtHelper.SerializeJwt(token); + if (tokenModel != null && tokenModel.Uid > 0) + { + var user = await _sysUserInfoServices.QueryById(tokenModel.Uid); + if (user != null) + { + var userRoles = await _sysUserInfoServices.GetUserRoleNameStr(user.uLoginName, user.uLoginPWD); + //如果是基于用户的授权策略,这里要添加用户;如果是基于角色的授权策略,这里要添加角色 + var claims = new List { + new Claim(ClaimTypes.Name, user.uLoginName), + new Claim(JwtRegisteredClaimNames.Jti, tokenModel.Uid.ObjToString()), + new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_requirement.Expiration.TotalSeconds).ToString()) }; + claims.AddRange(userRoles.Split(',').Select(s => new Claim(ClaimTypes.Role, s))); + + //用户标识 + var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme); + identity.AddClaims(claims); + + var refreshToken = JwtToken.BuildJwtToken(claims.ToArray(), _requirement); + return new MessageModel() + { + success = true, + msg = "获取成功", + response = refreshToken + }; + } + } + + return new MessageModel() + { + success = false, + msg = "认证失败!", + }; + } + + /// + /// 获取JWT的方法4:给 JSONP 测试 + /// + /// + /// + /// + /// + /// + /// + [HttpGet] + [Route("jsonp")] + public void Getjsonp(string callBack, long id = 1, string sub = "Admin", int expiresSliding = 30, int expiresAbsoulute = 30) + { + TokenModelJwt tokenModel = new TokenModelJwt + { + Uid = id, + Role = sub + }; + + string jwtStr = JwtHelper.IssueJwt(tokenModel); + + string response = string.Format("\"value\":\"{0}\"", jwtStr); + string call = callBack + "({" + response + "})"; + Response.WriteAsync(call); + } + + + /// + /// 测试 MD5 加密字符串 + /// + /// + /// + [HttpGet] + [Route("Md5Password")] + public string Md5Password(string password = "") + { + return MD5Helper.MD5Encrypt32(password); + } + } +} \ No newline at end of file diff --git a/New_College.Api/Controllers/ModuleController.cs b/New_College.Api/Controllers/ModuleController.cs new file mode 100644 index 0000000..80c9310 --- /dev/null +++ b/New_College.Api/Controllers/ModuleController.cs @@ -0,0 +1,140 @@ +using System; +using System.Linq.Expressions; +using System.Threading.Tasks; +using New_College.Common.HttpContextUser; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// 接口管理 + /// + [Route("api/[controller]/[action]")] + [ApiController] + [Authorize(Permissions.Name)] + public class ModuleController : ControllerBase + { + readonly IModuleServices _moduleServices; + readonly IUser _user; + + + public ModuleController(IModuleServices moduleServices, IUser user) + { + _moduleServices = moduleServices; + _user = user; + } + + /// + /// 获取全部接口api + /// + /// + /// + /// + // GET: api/User + [HttpGet] + public async Task>> Get(int page = 1, string key = "") + { + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + int intPageSize = 50; + + Expression> whereExpression = a => a.IsDeleted != true && (a.Name != null && a.Name.Contains(key)); + + var data = await _moduleServices.QueryPage(whereExpression, page, intPageSize, " Id desc "); + + return new MessageModel>() + { + msg = "获取成功", + success = data.dataCount >= 0, + response = data + }; + + } + + // GET: api/User/5 + [HttpGet("{id}")] + public string Get(string id) + { + return "value"; + } + + /// + /// 添加一条接口信息 + /// + /// + /// + // POST: api/User + [HttpPost] + public async Task> Post([FromBody] Modules module) + { + var data = new MessageModel(); + + module.CreateId = _user.ID; + module.CreateBy = _user.Name; + + var id = (await _moduleServices.Add(module)); + data.success = id > 0; + if (data.success) + { + data.response = id.ObjToString(); + data.msg = "添加成功"; + } + + return data; + } + + /// + /// 更新接口信息 + /// + /// + /// + // PUT: api/User/5 + [HttpPut] + public async Task> Put([FromBody] Modules module) + { + var data = new MessageModel(); + if (module != null && module.Id > 0) + { + data.success = await _moduleServices.Update(module); + if (data.success) + { + data.msg = "更新成功"; + data.response = module?.Id.ObjToString(); + } + } + + return data; + } + + /// + /// 删除一条接口 + /// + /// + /// + // DELETE: api/ApiWithActions/5 + [HttpDelete] + public async Task> Delete(int id) + { + var data = new MessageModel(); + if (id > 0) + { + var userDetail = await _moduleServices.QueryById(id); + userDetail.IsDeleted = true; + data.success = await _moduleServices.Update(userDetail); + if (data.success) + { + data.msg = "删除成功"; + data.response = userDetail?.Id.ObjToString(); + } + } + + return data; + } + } +} diff --git a/New_College.Api/Controllers/MonitorController.cs b/New_College.Api/Controllers/MonitorController.cs new file mode 100644 index 0000000..dae182a --- /dev/null +++ b/New_College.Api/Controllers/MonitorController.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using New_College.Common.Helper; +using New_College.Common.LogHelper; +using New_College.Hubs; +using New_College.Middlewares; +using New_College.Model; +using New_College.Model.ViewModels; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json; + +namespace New_College.Controllers +{ + [Route("api/[Controller]/[action]")] + [ApiController] + [AllowAnonymous] + public class MonitorController : Controller + { + private readonly IHubContext _hubContext; + private readonly IWebHostEnvironment _env; + + public MonitorController(IHubContext hubContext, IWebHostEnvironment env) + { + _hubContext = hubContext; + _env = env; + } + + /// + /// 服务器配置信息 + /// + /// + [HttpGet] + public MessageModel Server() + { + return new MessageModel() + { + msg = "获取成功", + success = true, + response = new ServerViewModel() + { + EnvironmentName = _env.EnvironmentName, + OSArchitecture = RuntimeInformation.OSArchitecture.ObjToString(), + ContentRootPath = _env.ContentRootPath, + WebRootPath = _env.WebRootPath, + FrameworkDescription = RuntimeInformation.FrameworkDescription, + MemoryFootprint = (Process.GetCurrentProcess().WorkingSet64 / 1048576).ToString("N2") + " MB", + WorkingTime = DateHelper.TimeSubTract(DateTime.Now, Process.GetCurrentProcess().StartTime) + } + }; + } + + + /// + /// SignalR send data + /// + /// + // GET: api/Logs + [HttpGet] + public MessageModel> Get() + { + + _hubContext.Clients.All.SendAsync("ReceiveUpdate", LogLock.GetLogData()).Wait(); + + return new MessageModel>() + { + msg = "获取成功", + success = true, + response = null + }; + } + + + + [HttpGet] + public MessageModel GetRequestApiinfoByWeek() + { + return new MessageModel() + { + msg = "获取成功", + success = true, + response = LogLock.RequestApiinfoByWeek() + }; + } + + [HttpGet] + public MessageModel GetAccessApiByDate() + { + return new MessageModel() + { + msg = "获取成功", + success = true, + response = LogLock.AccessApiByDate() + }; + } + + [HttpGet] + public MessageModel GetAccessApiByHour() + { + return new MessageModel() + { + msg = "获取成功", + success = true, + response = LogLock.AccessApiByHour() + }; + } + + [HttpGet] + public MessageModel> GetAccessLogs([FromServices]IWebHostEnvironment environment) + { + var Logs = JsonConvert.DeserializeObject>("[" + LogLock.ReadLog(Path.Combine(environment.ContentRootPath, "Log"), "RecordAccessLogs_", Encoding.UTF8, ReadType.Prefix) + "]"); + + Logs = Logs.Where(d => d.BeginTime.ObjToDate() >= DateTime.Today).OrderByDescending(d => d.BeginTime).Take(50).ToList(); + return new MessageModel>() + { + msg = "获取成功", + success = true, + response = Logs + }; + } + + } + + +} diff --git a/New_College.Api/Controllers/PermissionController.cs b/New_College.Api/Controllers/PermissionController.cs new file mode 100644 index 0000000..4cb0102 --- /dev/null +++ b/New_College.Api/Controllers/PermissionController.cs @@ -0,0 +1,536 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using New_College.AuthHelper; +using New_College.AuthHelper.OverWrite; +using New_College.Common.Helper; +using New_College.Common.HttpContextUser; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// 菜单管理 + /// + [Route("api/[controller]/[action]")] + [ApiController] + [Authorize(Permissions.Name)] + public class PermissionController : ControllerBase + { + readonly IPermissionServices _permissionServices; + readonly IModuleServices _moduleServices; + readonly IRoleModulePermissionServices _roleModulePermissionServices; + readonly IUserRoleServices _userRoleServices; + readonly IHttpContextAccessor _httpContext; + readonly IUser _user; + private readonly PermissionRequirement _requirement; + + /// + /// 构造函数 + /// + /// + /// + /// + /// + /// + /// + /// + public PermissionController(IPermissionServices permissionServices, IModuleServices moduleServices, IRoleModulePermissionServices roleModulePermissionServices, IUserRoleServices userRoleServices, IHttpContextAccessor httpContext, IUser user, PermissionRequirement requirement) + { + _permissionServices = permissionServices; + _moduleServices = moduleServices; + _roleModulePermissionServices = roleModulePermissionServices; + _userRoleServices = userRoleServices; + _httpContext = httpContext; + _user = user; + _requirement = requirement; + } + + /// + /// 获取菜单 + /// + /// + /// + /// + // GET: api/User + [HttpGet] + public async Task>> Get(int page = 1, string key = "") + { + PageModel permissions = new PageModel(); + int intPageSize = 50; + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + + #region 舍弃 + //var permissions = await _permissionServices.Query(a => a.IsDeleted != true); + //if (!string.IsNullOrEmpty(key)) + //{ + // permissions = permissions.Where(t => (t.Name != null && t.Name.Contains(key))).ToList(); + //} + ////筛选后的数据总数 + //totalCount = permissions.Count; + ////筛选后的总页数 + //pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intTotalCount.ObjToDecimal())).ObjToInt(); + //permissions = permissions.OrderByDescending(d => d.Id).Skip((page - 1) * intTotalCount).Take(intTotalCount).ToList(); + #endregion + + + + permissions = await _permissionServices.QueryPage(a => a.IsDeleted != true && (a.Name != null && a.Name.Contains(key)), page, intPageSize, " Id desc "); + + + #region 单独处理 + + var apis = await _moduleServices.Query(d => d.IsDeleted == false); + var permissionsView = permissions.data; + + var permissionAll = await _permissionServices.Query(d => d.IsDeleted != true); + foreach (var item in permissionsView) + { + List pidarr = new List + { + item.Pid + }; + if (item.Pid > 0) + { + pidarr.Add(0); + } + var parent = permissionAll.FirstOrDefault(d => d.Id == item.Pid); + + while (parent != null) + { + pidarr.Add(parent.Id); + parent = permissionAll.FirstOrDefault(d => d.Id == parent.Pid); + } + + + item.PidArr = pidarr.OrderBy(d => d).Distinct().ToList(); + foreach (var pid in item.PidArr) + { + var per = permissionAll.FirstOrDefault(d => d.Id == pid); + item.PnameArr.Add((per != null ? per.Name : "根节点") + "/"); + //var par = Permissions.Where(d => d.Pid == item.Id ).ToList(); + //item.PCodeArr.Add((per != null ? $"/{per.Code}/{item.Code}" : "")); + //if (par.Count == 0 && item.Pid == 0) + //{ + // item.PCodeArr.Add($"/{item.Code}"); + //} + } + + item.MName = apis.FirstOrDefault(d => d.Id == item.Mid)?.LinkUrl; + } + + permissions.data = permissionsView; + + #endregion + + + return new MessageModel>() + { + msg = "获取成功", + success = permissions.dataCount >= 0, + response = permissions + }; + + } + + /// + /// 查询树形 Table + /// + /// 父节点 + /// 关键字 + /// + [HttpGet] + [AllowAnonymous] + public async Task>> GetTreeTable(int f = 0, string key = "") + { + List permissions = new List(); + var apiList = await _moduleServices.Query(d => d.IsDeleted == false); + var permissionsList = await _permissionServices.Query(d => d.IsDeleted == false); + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + + if (key != "") + { + permissions = permissionsList.Where(a => a.Name.Contains(key)).OrderBy(a => a.OrderSort).ToList(); + } + else + { + permissions = permissionsList.Where(a => a.Pid == f).OrderBy(a => a.OrderSort).ToList(); + } + + foreach (var item in permissions) + { + List pidarr = new List { }; + var parent = permissionsList.FirstOrDefault(d => d.Id == item.Pid); + + while (parent != null) + { + pidarr.Add(parent.Id); + parent = permissionsList.FirstOrDefault(d => d.Id == parent.Pid); + } + + //item.PidArr = pidarr.OrderBy(d => d).Distinct().ToList(); + + pidarr.Reverse(); + pidarr.Insert(0, 0); + item.PidArr = pidarr; + + item.MName = apiList.FirstOrDefault(d => d.Id == item.Mid)?.LinkUrl; + item.hasChildren = permissionsList.Where(d => d.Pid == item.Id).Any(); + } + + + return new MessageModel>() + { + msg = "获取成功", + success = permissions.Count >= 0, + response = permissions + }; + } + + // GET: api/User/5 + [HttpGet("{id}")] + public string Get(string id) + { + return "value"; + } + + /// + /// 添加一个菜单 + /// + /// + /// + // POST: api/User + [HttpPost] + public async Task> Post([FromBody] Permission permission) + { + var data = new MessageModel(); + + permission.CreateId = _user.ID; + permission.CreateBy = _user.Name; + + var id = (await _permissionServices.Add(permission)); + data.success = id > 0; + if (data.success) + { + data.response = id.ObjToString(); + data.msg = "添加成功"; + } + + return data; + } + + /// + /// 保存菜单权限分配 + /// + /// + /// + [HttpPost] + public async Task> Assign([FromBody] AssignView assignView) + { + var data = new MessageModel(); + + try + { + if (assignView.rid > 0) + { + data.success = true; + + var roleModulePermissions = await _roleModulePermissionServices.Query(d => d.RoleId == assignView.rid); + + var remove = roleModulePermissions.Where(d => !assignView.pids.Contains(d.PermissionId.ObjToInt())).Select(c => (object)c.Id); + data.success &= remove.Any() ? await _roleModulePermissionServices.DeleteByIds(remove.ToArray()) : true; + + foreach (var item in assignView.pids) + { + var rmpitem = roleModulePermissions.Where(d => d.PermissionId == item); + if (!rmpitem.Any()) + { + var moduleid = (await _permissionServices.Query(p => p.Id == item)).FirstOrDefault()?.Mid; + RoleModulePermission roleModulePermission = new RoleModulePermission() + { + IsDeleted = false, + RoleId = assignView.rid, + ModuleId = moduleid.ObjToInt(), + PermissionId = item, + }; + + + roleModulePermission.CreateId = _user.ID; + roleModulePermission.CreateBy = _user.Name; + + data.success &= (await _roleModulePermissionServices.Add(roleModulePermission)) > 0; + + } + } + + if (data.success) + { + _requirement.Permissions.Clear(); + data.response = ""; + data.msg = "保存成功"; + } + + } + } + catch (Exception) + { + data.success = false; + } + + return data; + } + + + /// + /// 获取菜单树 + /// + /// + /// + /// + [HttpGet] + public async Task> GetPermissionTree(int pid = 0, bool needbtn = false) + { + var data = new MessageModel(); + + var permissions = await _permissionServices.Query(d => d.IsDeleted == false); + var permissionTrees = (from child in permissions + where child.IsDeleted == false + orderby child.Id + select new PermissionTree + { + value = child.Id, + label = child.Name, + Pid = child.Pid, + isbtn = child.IsButton, + order = child.OrderSort, + }).ToList(); + PermissionTree rootRoot = new PermissionTree + { + value = 0, + Pid = 0, + label = "根节点" + }; + + permissionTrees = permissionTrees.OrderBy(d => d.order).ToList(); + + + RecursionHelper.LoopToAppendChildren(permissionTrees, rootRoot, pid, needbtn); + + data.success = true; + if (data.success) + { + data.response = rootRoot; + data.msg = "获取成功"; + } + + return data; + } + + /// + /// 获取路由树 + /// + /// + /// + [HttpGet] + public async Task> GetNavigationBar(int uid) + { + + var data = new MessageModel(); + + var uidInHttpcontext1 = 0; + var roleIds = new List(); + // ids4和jwt切换 + if (Permissions.IsUseIds4) + { + // ids4 + uidInHttpcontext1 = (from item in _httpContext.HttpContext.User.Claims + where item.Type == "sub" + select item.Value).FirstOrDefault().ObjToInt(); + roleIds = (from item in _httpContext.HttpContext.User.Claims + where item.Type == "role" + select item.Value.ObjToInt()).ToList(); + } + else + { + // jwt + uidInHttpcontext1 = ((JwtHelper.SerializeJwt(_httpContext.HttpContext.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", "")))?.Uid).ObjToInt(); + roleIds = (await _userRoleServices.Query(d => d.IsDeleted == false && d.UserId == uid)).Select(d => d.RoleId.ObjToInt()).Distinct().ToList(); + } + + + if (uid > 0 && uid == uidInHttpcontext1) + { + if (roleIds.Any()) + { + var pids = (await _roleModulePermissionServices.Query(d => d.IsDeleted == false && roleIds.Contains(d.RoleId))).Select(d => d.PermissionId.ObjToInt()).Distinct(); + if (pids.Any()) + { + var rolePermissionMoudles = (await _permissionServices.Query(d => pids.Contains(d.Id))).OrderBy(c => c.OrderSort); + var permissionTrees = (from child in rolePermissionMoudles + where child.IsDeleted == false + orderby child.Id + select new NavigationBar + { + id = child.Id, + name = child.Name, + pid = child.Pid, + order = child.OrderSort, + path = child.Code, + iconCls = child.Icon, + Func = child.Func, + IsHide = child.IsHide.ObjToBool(), + IsButton = child.IsButton.ObjToBool(), + meta = new NavigationBarMeta + { + requireAuth = true, + title = child.Name, + NoTabPage = child.IsHide.ObjToBool(), + keepAlive = child.IskeepAlive.ObjToBool() + } + }).ToList(); + + + NavigationBar rootRoot = new NavigationBar() + { + id = 0, + pid = 0, + order = 0, + name = "根节点", + path = "", + iconCls = "", + meta = new NavigationBarMeta(), + + }; + + permissionTrees = permissionTrees.OrderBy(d => d.order).ToList(); + + RecursionHelper.LoopNaviBarAppendChildren(permissionTrees, rootRoot); + + data.success = true; + if (data.success) + { + data.response = rootRoot; + data.msg = "获取成功"; + } + } + } + } + return data; + } + + /// + /// 通过角色获取菜单【无权限】 + /// + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task> GetPermissionIdByRoleId(int rid = 0) + { + var data = new MessageModel(); + + var rmps = await _roleModulePermissionServices.Query(d => d.IsDeleted == false && d.RoleId == rid); + var permissionTrees = (from child in rmps + orderby child.Id + select child.PermissionId.ObjToInt()).ToList(); + + var permissions = await _permissionServices.Query(d => d.IsDeleted == false); + List assignbtns = new List(); + + foreach (var item in permissionTrees) + { + var pername = permissions.FirstOrDefault(d => d.IsButton && d.Id == item)?.Name; + if (!string.IsNullOrEmpty(pername)) + { + //assignbtns.Add(pername + "_" + item); + assignbtns.Add(item.ObjToString()); + } + } + + data.success = true; + if (data.success) + { + data.response = new AssignShow() + { + permissionids = permissionTrees, + assignbtns = assignbtns, + }; + data.msg = "获取成功"; + } + + return data; + } + + /// + /// 更新菜单 + /// + /// + /// + // PUT: api/User/5 + [HttpPut] + public async Task> Put([FromBody] Permission permission) + { + var data = new MessageModel(); + if (permission != null && permission.Id > 0) + { + data.success = await _permissionServices.Update(permission); + if (data.success) + { + data.msg = "更新成功"; + data.response = permission?.Id.ObjToString(); + } + } + + return data; + } + + /// + /// 删除菜单 + /// + /// + /// + // DELETE: api/ApiWithActions/5 + [HttpDelete] + public async Task> Delete(int id) + { + var data = new MessageModel(); + if (id > 0) + { + var userDetail = await _permissionServices.QueryById(id); + userDetail.IsDeleted = true; + data.success = await _permissionServices.Update(userDetail); + if (data.success) + { + data.msg = "删除成功"; + data.response = userDetail?.Id.ObjToString(); + } + } + + return data; + } + } + + public class AssignView + { + public List pids { get; set; } + public int rid { get; set; } + } + public class AssignShow + { + public List permissionids { get; set; } + public List assignbtns { get; set; } + } + +} diff --git a/New_College.Api/Controllers/RoleController.cs b/New_College.Api/Controllers/RoleController.cs new file mode 100644 index 0000000..9931b4c --- /dev/null +++ b/New_College.Api/Controllers/RoleController.cs @@ -0,0 +1,137 @@ +using System.Threading.Tasks; +using New_College.Common.HttpContextUser; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// 角色管理 + /// + [Route("api/[controller]/[action]")] + [ApiController] + [Authorize(Permissions.Name)] + public class RoleController : ControllerBase + { + readonly IRoleServices _roleServices; + readonly IUser _user; + + + public RoleController(IRoleServices roleServices, IUser user) + { + _roleServices = roleServices; + _user = user; + } + + /// + /// 获取全部角色 + /// + /// + /// + /// + // GET: api/User + [HttpGet] + public async Task>> Get(int page = 1, string key = "") + { + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + + int intPageSize = 50; + + var data = await _roleServices.QueryPage(a => a.IsDeleted != true && (a.Name != null && a.Name.Contains(key)), page, intPageSize, " Id desc "); + + return new MessageModel>() + { + msg = "获取成功", + success = data.dataCount >= 0, + response = data + }; + + } + + // GET: api/User/5 + [HttpGet("{id}")] + public string Get(string id) + { + return "value"; + } + + /// + /// 添加角色 + /// + /// + /// + // POST: api/User + [HttpPost] + public async Task> Post([FromBody] Role role) + { + var data = new MessageModel(); + + role.CreateId = _user.ID; + role.CreateBy = _user.Name; + + var id = (await _roleServices.Add(role)); + data.success = id > 0; + if (data.success) + { + data.response = id.ObjToString(); + data.msg = "添加成功"; + } + + return data; + } + + /// + /// 更新角色 + /// + /// + /// + // PUT: api/User/5 + [HttpPut] + public async Task> Put([FromBody] Role role) + { + var data = new MessageModel(); + if (role != null && role.Id > 0) + { + data.success = await _roleServices.Update(role); + if (data.success) + { + data.msg = "更新成功"; + data.response = role?.Id.ObjToString(); + } + } + + return data; + } + + /// + /// 删除角色 + /// + /// + /// + // DELETE: api/ApiWithActions/5 + [HttpDelete] + public async Task> Delete(int id) + { + var data = new MessageModel(); + if (id > 0) + { + var userDetail = await _roleServices.QueryById(id); + userDetail.IsDeleted = true; + data.success = await _roleServices.Update(userDetail); + if (data.success) + { + data.msg = "删除成功"; + data.response = userDetail?.Id.ObjToString(); + } + } + + return data; + } + } +} diff --git a/New_College.Api/Controllers/SysRegionController.cs b/New_College.Api/Controllers/SysRegionController.cs new file mode 100644 index 0000000..83f8c38 --- /dev/null +++ b/New_College.Api/Controllers/SysRegionController.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AutoMapper; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using New_College.Common.HttpContextUser; +using New_College.IRepository.UnitOfWork; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; + +namespace New_College.Api.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class SysRegionController : ControllerBase + { + private readonly IUser _user; + IMapper _mapper; + private readonly IUnitOfWork _unitOfWork; + private readonly ISysRegionServices _regionRepository; + + /// + /// 省市区操作类 + /// + public SysRegionController(ISysRegionServices sysRegionRepository, IUnitOfWork unitOf, IMapper mapper) + { + this._regionRepository = sysRegionRepository; + this._unitOfWork = unitOf; + this._mapper = mapper; + } + + + + + /// + /// 根据ID获取 + /// + /// + /// + [HttpGet] + public async Task> GetSingle(int id) + { + try + { + var regions = (await this._regionRepository.QueryById(id)); + + return new MessageModel() + { + msg = "success", + success = true, + //url = "", + response = regions + }; + } + catch (Exception ex) + { + + return new MessageModel() + { + success = false, + msg = "Error", + status = 500 + }; + } + + } + + + + + + /// + /// 根据level和parentId获取省市区列表信息 + /// + /// + /// + [HttpGet] + public async Task>> GetListByParentId(string Id) + { + try + { + var regionlist = (await _regionRepository.GetListByParentId(Id)); + return new MessageModel>() + { + msg = "success", + success = true, + response = _mapper.Map>(regionlist.ToList()) + }; + } + catch (Exception ex) + { + return new MessageModel>() + { + msg = "error", + success = false + }; + } + } + + + /// + /// 获取省市区 + /// + /// + /// + [HttpGet] + public async Task>> GetRegionList([FromQuery] SysRegionQuery query) + { + try + { + var regionlist = (await _regionRepository.GetRegionList(query)); + return new MessageModel>() + { + msg = "success", + success = true, + response = _mapper.Map>(regionlist.ToList()) + }; + } + catch (Exception ex) + { + return new MessageModel>() + { + msg = "error", + success = false + }; + } + } + } +} diff --git a/New_College.Api/Controllers/TasksQzController.cs b/New_College.Api/Controllers/TasksQzController.cs new file mode 100644 index 0000000..1805808 --- /dev/null +++ b/New_College.Api/Controllers/TasksQzController.cs @@ -0,0 +1,185 @@ +using System; +using System.Linq.Expressions; +using System.Threading.Tasks; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using New_College.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + [Authorize(Permissions.Name)] + public class TasksQzController : ControllerBase + { + private readonly ITasksQzServices _tasksQzServices; + private readonly ISchedulerCenter _schedulerCenter; + + public TasksQzController(ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter) + { + _tasksQzServices = tasksQzServices; + _schedulerCenter = schedulerCenter; + } + + /// + /// 分页获取 + /// + /// + /// + /// + // GET: api/Buttons/5 + [HttpGet] + public async Task>> Get(int page = 1, string key = "") + { + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + int intPageSize = 50; + + Expression> whereExpression = a => a.IsDelete != true && (a.Name != null && a.Name.Contains(key)); + + var data = await _tasksQzServices.QueryPage(whereExpression, page, intPageSize, " Id desc "); + + return new MessageModel>() + { + msg = "获取成功", + success = data.dataCount >= 0, + response = data + }; + + } + + /// + /// 添加计划任务 + /// + /// + /// + [HttpPost] + public async Task> Post([FromBody] TasksQz tasksQz) + { + var data = new MessageModel(); + + var id = (await _tasksQzServices.Add(tasksQz)); + data.success = id > 0; + if (data.success) + { + data.response = id.ObjToString(); + data.msg = "添加成功"; + } + + return data; + } + + + /// + /// 修改计划任务 + /// + /// + /// + [HttpPut] + public async Task> Put([FromBody] TasksQz tasksQz) + { + var data = new MessageModel(); + if (tasksQz != null && tasksQz.Id > 0) + { + data.success = await _tasksQzServices.Update(tasksQz); + if (data.success) + { + data.msg = "更新成功"; + data.response = tasksQz?.Id.ObjToString(); + } + } + + return data; + } + + /// + /// 启动计划任务 + /// + /// + /// + [HttpGet] + public async Task> StartJob(int jobId) + { + var data = new MessageModel(); + + var model = await _tasksQzServices.QueryById(jobId); + if (model != null) + { + var ResuleModel = await _schedulerCenter.AddScheduleJobAsync(model); + if (ResuleModel.success) + { + model.IsStart = true; + data.success = await _tasksQzServices.Update(model); + } + if (data.success) + { + data.msg = "启动成功"; + data.response = jobId.ObjToString(); + } + } + return data; + + } + /// + /// 停止一个计划任务 + /// + /// + /// + [HttpGet] + public async Task> StopJob(int jobId) + { + var data = new MessageModel(); + + var model = await _tasksQzServices.QueryById(jobId); + if (model != null) + { + var ResuleModel = await _schedulerCenter.StopScheduleJobAsync(model); + if (ResuleModel.success) + { + model.IsStart = false; + data.success = await _tasksQzServices.Update(model); + } + if (data.success) + { + data.msg = "暂停成功"; + data.response = jobId.ObjToString(); + } + } + return data; + + } + /// + /// 重启一个计划任务 + /// + /// + /// + [HttpGet] + public async Task> ReCovery(int jobId) + { + var data = new MessageModel(); + + var model = await _tasksQzServices.QueryById(jobId); + if (model != null) + { + var ResuleModel = await _schedulerCenter.ResumeJob(model); + if (ResuleModel.success) + { + model.IsStart = true; + data.success = await _tasksQzServices.Update(model); + } + if (data.success) + { + data.msg = "重启成功"; + data.response = jobId.ObjToString(); + } + } + return data; + + } + } +} diff --git a/New_College.Api/Controllers/TopicController.cs b/New_College.Api/Controllers/TopicController.cs new file mode 100644 index 0000000..6c14d48 --- /dev/null +++ b/New_College.Api/Controllers/TopicController.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// 类别管理【无权限】 + /// + [Route("api/[controller]")] + [ApiController] + [AllowAnonymous] + public class TopicController : ControllerBase + { + readonly ITopicServices _topicServices; + + /// + /// 构造函数 + /// + /// + public TopicController(ITopicServices topicServices) + { + _topicServices = topicServices; + } + + /// + /// 获取Tibug所有分类 + /// + /// + // GET: api/Topic + [HttpGet] + public async Task>> Get() + { + var data = new MessageModel> {response = await _topicServices.GetTopics()}; + if (data.response != null) + { + data.success = true; + data.msg = ""; + } + return data; + } + + // GET: api/Topic/5 + [HttpGet("{id}")] + public string Get(int id) + { + return "value"; + } + + // POST: api/Topic + [HttpPost] + public void Post([FromBody] string value) + { + } + + // PUT: api/Topic/5 + [HttpPut("{id}")] + public void Put(int id, [FromBody] string value) + { + } + + // DELETE: api/ApiWithActions/5 + [HttpDelete("{id}")] + public void Delete(int id) + { + } + } +} diff --git a/New_College.Api/Controllers/TopicDetailController.cs b/New_College.Api/Controllers/TopicDetailController.cs new file mode 100644 index 0000000..71ef4a2 --- /dev/null +++ b/New_College.Api/Controllers/TopicDetailController.cs @@ -0,0 +1,178 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using New_College.Common.Helper; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// Tibug 管理 + /// + [Route("api/[controller]/[action]")] + [ApiController] + [Authorize(Permissions.Name)] + public class TopicDetailController : ControllerBase + { + readonly ITopicServices _topicServices; + readonly ITopicDetailServices _topicDetailServices; + + /// + /// 构造函数 + /// + /// + /// + public TopicDetailController(ITopicServices topicServices, ITopicDetailServices topicDetailServices) + { + _topicServices = topicServices; + _topicDetailServices = topicDetailServices; + } + + /// + /// 获取Bug数据列表(带分页) + /// 【无权限】 + /// + /// 页数 + /// 专题类型 + /// 关键字 + /// + /// + [HttpGet] + [AllowAnonymous] + public async Task>> Get(int page = 1, string tname = "", string key = "", int intPageSize = 12) + { + int tid = 0; + + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + if (string.IsNullOrEmpty(tname) || string.IsNullOrWhiteSpace(tname)) + { + tname = ""; + } + tname = UnicodeHelper.UnicodeToString(tname); + + if (!string.IsNullOrEmpty(tname)) + { + tid = ((await _topicServices.Query(ts => ts.tName == tname)).FirstOrDefault()?.Id).ObjToInt(); + } + + + var data = await _topicDetailServices.QueryPage(a => !a.tdIsDelete && a.tdSectendDetail == "tbug" && ((tid == 0 && true) || (tid > 0 && a.TopicId == tid)) && ((a.tdName != null && a.tdName.Contains(key)) || (a.tdDetail != null && a.tdDetail.Contains(key))), page, intPageSize, " Id desc "); + + + + return new MessageModel>() + { + msg = "获取成功", + success = data.dataCount >= 0, + response = data + }; + + } + + /// + /// 获取详情【无权限】 + /// + /// + /// + // GET: api/TopicDetail/5 + [HttpGet("{id}")] + [AllowAnonymous] + public async Task> Get(int id) + { + var data = new MessageModel(); + var response = id > 0 ? await _topicDetailServices.QueryById(id) : new TopicDetail(); + data.response = (response?.tdIsDelete).ObjToBool() ? new TopicDetail() : response; + if (data.response != null) + { + data.success = true; + data.msg = ""; + } + + return data; + } + + /// + /// 添加一个 BUG 【无权限】 + /// + /// + /// + // POST: api/TopicDetail + [HttpPost] + [AllowAnonymous] + public async Task> Post([FromBody] TopicDetail topicDetail) + { + var data = new MessageModel(); + + topicDetail.tdCreatetime = DateTime.Now; + topicDetail.tdRead = 0; + topicDetail.tdCommend = 0; + topicDetail.tdGood = 0; + topicDetail.tdTop = 0; + + var id = (await _topicDetailServices.Add(topicDetail)); + data.success = id > 0; + if (data.success) + { + data.response = id.ObjToString(); + data.msg = "添加成功"; + } + + return data; + } + + /// + /// 更新 bug + /// + /// + /// + // PUT: api/TopicDetail/5 + [HttpPut] + public async Task> Update([FromBody] TopicDetail topicDetail) + { + var data = new MessageModel(); + if (topicDetail != null && topicDetail.Id > 0) + { + data.success = await _topicDetailServices.Update(topicDetail); + if (data.success) + { + data.msg = "更新成功"; + data.response = topicDetail?.Id.ObjToString(); + } + } + + return data; + } + + /// + /// 删除 bug + /// + /// + /// + // DELETE: api/ApiWithActions/5 + [HttpDelete] + public async Task> Delete(int id) + { + var data = new MessageModel(); + if (id > 0) + { + var topicDetail = await _topicDetailServices.QueryById(id); + topicDetail.tdIsDelete = true; + data.success = await _topicDetailServices.Update(topicDetail); + if (data.success) + { + data.msg = "删除成功"; + data.response = topicDetail?.Id.ObjToString(); + } + } + + return data; + } + } +} diff --git a/New_College.Api/Controllers/TransactionController.cs b/New_College.Api/Controllers/TransactionController.cs new file mode 100644 index 0000000..9cf473b --- /dev/null +++ b/New_College.Api/Controllers/TransactionController.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using New_College.IRepository.UnitOfWork; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + [AllowAnonymous] + public class TransactionController : ControllerBase + { + private readonly IPasswordLibServices _passwordLibServices; + private readonly IGuestbookServices _guestbookServices; + private readonly IUnitOfWork _unitOfWork; + + + public TransactionController(IUnitOfWork unitOfWork, IPasswordLibServices passwordLibServices, IGuestbookServices guestbookServices) + { + _unitOfWork = unitOfWork; + _passwordLibServices = passwordLibServices; + _guestbookServices = guestbookServices; + } + + // GET: api/Transaction + [HttpGet] + public async Task>> Get() + { + List returnMsg = new List() { }; + try + { + returnMsg.Add($"Begin Transaction"); + + _unitOfWork.BeginTran(); + var passwords = await _passwordLibServices.Query(d => d.IsDeleted == false); + returnMsg.Add($"first time : the count of passwords is :{passwords.Count}"); + + + returnMsg.Add($"insert a data into the table PasswordLib now."); + var insertPassword = await _passwordLibServices.Add(new PasswordLib() + { + IsDeleted = false, + plAccountName = "aaa", + plCreateTime = DateTime.Now + }); + + + passwords = await _passwordLibServices.Query(d => d.IsDeleted == false); + returnMsg.Add($"second time : the count of passwords is :{passwords.Count}"); + returnMsg.Add($" "); + + //...... + + var guestbooks = await _guestbookServices.Query(); + returnMsg.Add($"first time : the count of guestbooks is :{guestbooks.Count}"); + + int ex = 0; + returnMsg.Add($"There's an exception!!"); + returnMsg.Add($" "); + int throwEx = 1 / ex; + + var insertGuestbook = await _guestbookServices.Add(new Guestbook() + { + username = "bbb", + blogId = 1, + createdate = DateTime.Now, + isshow = true + }); + + guestbooks = await _guestbookServices.Query(); + returnMsg.Add($"first time : the count of guestbooks is :{guestbooks.Count}"); + returnMsg.Add($" "); + + _unitOfWork.CommitTran(); + } + catch (Exception) + { + _unitOfWork.RollbackTran(); + var passwords = await _passwordLibServices.Query(); + returnMsg.Add($"third time : the count of passwords is :{passwords.Count}"); + + var guestbooks = await _guestbookServices.Query(); + returnMsg.Add($"third time : the count of guestbooks is :{guestbooks.Count}"); + } + + return new MessageModel>() + { + success = true, + msg = "操作完成", + response = returnMsg + }; + } + + // GET: api/Transaction/5 + [HttpGet("{id}")] + public async Task> Get(int id) + { + return await _guestbookServices.TestTranInRepository(); + } + + // POST: api/Transaction + [HttpPost] + public void Post([FromBody] string value) + { + } + + // PUT: api/Transaction/5 + [HttpPut("{id}")] + public void Put(int id, [FromBody] string value) + { + } + + /// + /// 测试事务在AOP中的使用 + /// + /// + /// + [HttpDelete("{id}")] + public async Task Delete(int id) + { + return await _guestbookServices.TestTranInRepositoryAOP(); + } + } +} diff --git a/New_College.Api/Controllers/UserController.cs b/New_College.Api/Controllers/UserController.cs new file mode 100644 index 0000000..e62a9c7 --- /dev/null +++ b/New_College.Api/Controllers/UserController.cs @@ -0,0 +1,246 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using New_College.AuthHelper.OverWrite; +using New_College.Common.Helper; +using New_College.Common.HttpContextUser; +using New_College.IRepository.UnitOfWork; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; + +namespace New_College.Controllers +{ + /// + /// 用户管理 + /// + [Route("api/[controller]/[action]")] + [ApiController] + [Authorize(Permissions.Name)] + public class UserController : ControllerBase + { + private readonly IUnitOfWork _unitOfWork; + readonly ISysUserInfoServices _sysUserInfoServices; + readonly IUserRoleServices _userRoleServices; + readonly IRoleServices _roleServices; + private readonly IUser _user; + private readonly ILogger _logger; + + /// + /// 构造函数 + /// + /// + /// + /// + /// + /// + /// + public UserController(IUnitOfWork unitOfWork, ISysUserInfoServices sysUserInfoServices, IUserRoleServices userRoleServices, IRoleServices roleServices, IUser user, ILogger logger) + { + _unitOfWork = unitOfWork; + _sysUserInfoServices = sysUserInfoServices; + _userRoleServices = userRoleServices; + _roleServices = roleServices; + _user = user; + _logger = logger; + } + + /// + /// 获取全部用户 + /// + /// + /// + /// + // GET: api/User + [HttpGet] + public async Task>> Get(int page = 1, string key = "") + { + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = ""; + } + int intPageSize = 50; + + + var data = await _sysUserInfoServices.QueryPage(a => a.tdIsDelete != true && a.uStatus >= 0 && ((a.uLoginName != null && a.uLoginName.Contains(key)) || (a.uRealName != null && a.uRealName.Contains(key))), page, intPageSize, " uID desc "); + + + #region MyRegion + + // 这里可以封装到多表查询,此处简单处理 + var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false); + var allRoles = await _roleServices.Query(d => d.IsDeleted == false); + + var sysUserInfos = data.data; + foreach (var item in sysUserInfos) + { + var currentUserRoles = allUserRoles.Where(d => d.UserId == item.uID).Select(d => d.RoleId).ToList(); + item.RIDs = currentUserRoles; + item.RoleNames = allRoles.Where(d => currentUserRoles.Contains(d.Id)).Select(d => d.Name).ToList(); + } + + data.data = sysUserInfos; + #endregion + + + return new MessageModel>() + { + msg = "获取成功", + success = data.dataCount >= 0, + response = data + }; + + } + + // GET: api/User/5 + [HttpGet("{id}")] + [AllowAnonymous] + public string Get(string id) + { + _logger.LogError("test wrong"); + return "value"; + } + + // GET: api/User/5 + /// + /// 获取用户详情根据token + /// 【无权限】 + /// + /// 令牌 + /// + [HttpGet] + [AllowAnonymous] + public async Task> GetInfoByToken(string token) + { + var data = new MessageModel(); + if (!string.IsNullOrEmpty(token)) + { + var tokenModel = JwtHelper.SerializeJwt(token); + if (tokenModel != null && tokenModel.Uid > 0) + { + var userinfo = await _sysUserInfoServices.QueryById(tokenModel.Uid); + if (userinfo != null) + { + data.response = userinfo; + data.success = true; + data.msg = "获取成功"; + } + } + + } + return data; + } + + /// + /// 添加一个用户 + /// + /// + /// + // POST: api/User + [HttpPost] + public async Task> Post([FromBody] sysUserInfo sysUserInfo) + { + var data = new MessageModel(); + + sysUserInfo.uLoginPWD = MD5Helper.MD5Encrypt32(sysUserInfo.uLoginPWD); + sysUserInfo.uRemark = _user.Name; + + var id = await _sysUserInfoServices.Add(sysUserInfo); + data.success = id > 0; + if (data.success) + { + data.response = id.ObjToString(); + data.msg = "添加成功"; + } + + return data; + } + + /// + /// 更新用户与角色 + /// + /// + /// + // PUT: api/User/5 + [HttpPut] + public async Task> Put([FromBody] sysUserInfo sysUserInfo) + { + // 这里使用事务处理 + + var data = new MessageModel(); + try + { + _unitOfWork.BeginTran(); + + if (sysUserInfo != null && sysUserInfo.uID > 0) + { + if (sysUserInfo.RIDs.Count > 0) + { + // 无论 Update Or Add , 先删除当前用户的全部 U_R 关系 + var usreroles = (await _userRoleServices.Query(d => d.UserId == sysUserInfo.uID)).Select(d => d.Id.ToString()).ToArray(); + if (usreroles.Count() > 0) + { + var isAllDeleted = await _userRoleServices.DeleteByIds(usreroles); + } + + // 然后再执行添加操作 + var userRolsAdd = new List(); + sysUserInfo.RIDs.ForEach(rid => + { + userRolsAdd.Add(new UserRole(sysUserInfo.uID, rid)); + }); + + await _userRoleServices.Add(userRolsAdd); + + } + + data.success = await _sysUserInfoServices.Update(sysUserInfo); + + _unitOfWork.CommitTran(); + + if (data.success) + { + data.msg = "更新成功"; + data.response = sysUserInfo?.uID.ObjToString(); + } + } + } + catch (Exception e) + { + _unitOfWork.RollbackTran(); + _logger.LogError(e, e.Message); + } + + return data; + } + + /// + /// 删除用户 + /// + /// + /// + // DELETE: api/ApiWithActions/5 + [HttpDelete] + public async Task> Delete(int id) + { + var data = new MessageModel(); + if (id > 0) + { + var userDetail = await _sysUserInfoServices.QueryById(id); + userDetail.tdIsDelete = true; + data.success = await _sysUserInfoServices.Update(userDetail); + if (data.success) + { + data.msg = "删除成功"; + data.response = userDetail?.uID.ObjToString(); + } + } + + return data; + } + } +} diff --git a/New_College.Api/Controllers/UserRoleController.cs b/New_College.Api/Controllers/UserRoleController.cs new file mode 100644 index 0000000..20201d8 --- /dev/null +++ b/New_College.Api/Controllers/UserRoleController.cs @@ -0,0 +1,92 @@ +using System.Threading.Tasks; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// 用户角色关系 + /// + [Produces("application/json")] + [Route("api/[controller]/[action]")] + [ApiController] + [Authorize(Permissions.Name)] + public class UserRoleController : Controller + { + readonly ISysUserInfoServices _sysUserInfoServices; + readonly IUserRoleServices _userRoleServices; + readonly IRoleServices _roleServices; + + /// + /// 构造函数 + /// + /// + /// + /// + public UserRoleController(ISysUserInfoServices sysUserInfoServices, IUserRoleServices userRoleServices, IRoleServices roleServices) + { + this._sysUserInfoServices = sysUserInfoServices; + this._userRoleServices = userRoleServices; + this._roleServices = roleServices; + } + + + + /// + /// 新建用户 + /// + /// + /// + /// + [HttpGet] + public async Task> AddUser(string loginName, string loginPwd) + { + return new MessageModel() + { + success = true, + msg = "添加成功", + response = await _sysUserInfoServices.SaveUserInfo(loginName, loginPwd) + }; + } + + /// + /// 新建Role + /// + /// + /// + [HttpGet] + public async Task> AddRole(string roleName) + { + return new MessageModel() + { + success = true, + msg = "添加成功", + response = await _roleServices.SaveRole(roleName) + }; + } + + /// + /// 新建用户角色关系 + /// + /// + /// + /// + [HttpGet] + public async Task> AddUserRole(int uid, int rid) + { + return new MessageModel() + { + success = true, + msg = "添加成功", + response = await _userRoleServices.SaveUserRole(uid, rid) + }; + } + + + + + } +} diff --git a/New_College.Api/Controllers/ValuesController.cs b/New_College.Api/Controllers/ValuesController.cs new file mode 100644 index 0000000..68145f4 --- /dev/null +++ b/New_College.Api/Controllers/ValuesController.cs @@ -0,0 +1,300 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using AutoMapper; +using New_College.Common.HttpContextUser; +using New_College.Common.HttpRestSharp; +using New_College.Common.WebApiClients.HttpApis; +using New_College.Filter; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace New_College.Controllers +{ + /// + /// Values控制器 + /// + [Route("api/[controller]")] + [ApiController] + //[Authorize] + //[Authorize(Roles = "Admin,Client")] + //[Authorize(Policy = "SystemOrAdmin")] + //[Authorize(PermissionNames.Permission)] + [Authorize] + public class ValuesController : ControllerBase + { + private IMapper _mapper; + private readonly IAdvertisementServices _advertisementServices; + private readonly Love _love; + private readonly IRoleModulePermissionServices _roleModulePermissionServices; + private readonly IUser _user; + private readonly IPasswordLibServices _passwordLibServices; + private readonly IBlogApi _blogApi; + private readonly IDoubanApi _doubanApi; + readonly IBlogArticleServices _blogArticleServices; + + /// + /// ValuesController + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public ValuesController(IBlogArticleServices blogArticleServices, IMapper mapper, IAdvertisementServices advertisementServices, Love love, IRoleModulePermissionServices roleModulePermissionServices, IUser user, IPasswordLibServices passwordLibServices, IBlogApi blogApi, IDoubanApi doubanApi) + { + // 测试 Authorize 和 mapper + _mapper = mapper; + _advertisementServices = advertisementServices; + _love = love; + _roleModulePermissionServices = roleModulePermissionServices; + // 测试 Httpcontext + _user = user; + // 测试多库 + _passwordLibServices = passwordLibServices; + // 测试http请求 + _blogApi = blogApi; + _doubanApi = doubanApi; + // 测试AOP加载顺序,配合 return + _blogArticleServices = blogArticleServices; + } + /// + /// Get方法 + /// + /// + // GET api/values + [HttpGet] + [AllowAnonymous] + public async Task> Get() + { + var data = new MessageModel(); + + /* + * 测试 sql 查询 + */ + var queryBySql = await _blogArticleServices.QuerySql("SELECT bsubmitter,btitle,bcontent,bCreateTime FROM BlogArticle WHERE bID>5"); + + + /* + * 测试 sql 更新 + * + * 【SQL参数】:@bID:5 + * @bsubmitter:laozhang619 + * @IsDeleted:False + * 【SQL语句】:UPDATE `BlogArticle` SET + * `bsubmitter`=@bsubmitter,`IsDeleted`=@IsDeleted WHERE `bID`=@bID + */ + var updateSql = await _blogArticleServices.Update(new { bsubmitter = $"laozhang{DateTime.Now.Millisecond}", IsDeleted = false, bID = 5 }); + + + // 测试模拟异常,全局异常过滤器拦截 + var i = 0; + var d = 3 / i; + + + // 测试 AOP 缓存 + var blogArticles = await _blogArticleServices.GetBlogs(); + + + // 测试多表联查 + var roleModulePermissions = await _roleModulePermissionServices.QueryMuchTable(); + + + // 测试多个异步执行时间 + var roleModuleTask = _roleModulePermissionServices.Query(); + var listTask = _advertisementServices.Query(); + var ad = await roleModuleTask; + var list = await listTask; + + + // 测试service层返回异常 + _advertisementServices.ReturnExp(); + + Love love = null; + love.SayLoveU(); + + return data; + } + /// + /// Get(int id)方法 + /// + /// + /// + // GET api/values/5 + [HttpGet("{id}")] + [AllowAnonymous] + //[TypeFilter(typeof(DeleteSubscriptionCache),Arguments =new object[] { "1"})] + [TypeFilter(typeof(UseServiceDIAttribute), Arguments = new object[] { "laozhang" })] + public ActionResult Get(int id) + { + var loveu = _love.SayLoveU(); + + return "value"; + } + + /// + /// 测试参数是必填项 + /// + /// + /// + [HttpGet] + [Route("/api/values/RequiredPara")] + public string RequiredP([Required]string id) + { + return id; + } + + + /// + /// 通过 HttpContext 获取用户信息 + /// + /// 声明类型,默认 jti + /// + [HttpGet] + [Route("/api/values/UserInfo")] + public MessageModel> GetUserInfo(string ClaimType = "jti") + { + var getUserInfoByToken = _user.GetUserInfoFromToken(ClaimType); + return new MessageModel>() + { + success = _user.IsAuthenticated(), + msg = _user.IsAuthenticated() ? _user.Name.ObjToString() : "未登录", + response = _user.GetClaimValueByType(ClaimType) + }; + } + + /// + /// to redirect by route template name. + /// + [HttpGet("/api/custom/go-destination")] + [AllowAnonymous] + public void Source() + { + var url = Url.RouteUrl("Destination_Route"); + Response.Redirect(url); + } + + /// + /// route with template name. + /// + /// + [HttpGet("/api/custom/destination", Name = "Destination_Route")] + [AllowAnonymous] + public string Destination() + { + return "555"; + } + + + /// + /// 测试 post 一个对象 + 独立参数 + /// + /// model实体类参数 + /// 独立参数 + [HttpPost] + [AllowAnonymous] + public object Post([FromBody] BlogArticle blogArticle, int id) + { + return Ok(new { success = true, data = blogArticle, id = id }); + } + + + /// + /// 测试 post 参数 + /// + /// + /// + [HttpPost] + [Route("TestPostPara")] + [AllowAnonymous] + public object TestPostPara(string name) + { + return Ok(new { success = true, name = name }); + } + + /// + /// 测试http请求 RestSharp Get + /// + /// + [HttpGet("RestsharpGet")] + [AllowAnonymous] + public TestRestSharpGetDto RestsharpGet() + { + return HttpHelper.GetApi("http://apk.neters.club/", "api/Blog/DetailNuxtNoPer", "id=1"); + } + /// + /// 测试http请求 RestSharp Post + /// + /// + [HttpGet("RestsharpPost")] + [AllowAnonymous] + public TestRestSharpPostDto RestsharpPost() + { + return HttpHelper.PostApi("http://apk.neters.club/api/Values/TestPostPara?name=老张", new { age = 18 }); + } + + /// + /// 测试多库连接 + /// + /// + [HttpGet("TestMutiDBAPI")] + [AllowAnonymous] + public async Task TestMutiDBAPI() + { + // 从主库(Sqlite)中,操作blogs + var blogs = await _blogArticleServices.Query(d => d.bID == 1); + + // 从从库(Sqlserver)中,获取pwds + var pwds = await _passwordLibServices.Query(d => d.PLID > 0); + + return new + { + blogs, + pwds + }; + } + + /// + /// 测试http请求 WebApiClient Get + /// + /// + [HttpGet("WebApiClientGetAsync")] + [AllowAnonymous] + public async Task WebApiClientGetAsync() + { + int id = 1; + string isbn = "9787544270878"; + var doubanVideoDetail = await _doubanApi.VideoDetailAsync(isbn); + return await _blogApi.DetailNuxtNoPerAsync(id); + } + + /// + /// Put方法 + /// + /// + /// + // PUT api/values/5 + [HttpPut("{id}")] + public void Put(int id, [FromBody] string value) + { + } + /// + /// Delete方法 + /// + /// + // DELETE api/values/5 + [HttpDelete("{id}")] + public void Delete(int id) + { + } + } +} diff --git a/New_College.Api/Controllers/v1/ApbController.cs b/New_College.Api/Controllers/v1/ApbController.cs new file mode 100644 index 0000000..c9fb8e8 --- /dev/null +++ b/New_College.Api/Controllers/v1/ApbController.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using New_College.SwaggerHelper; +using Microsoft.AspNetCore.Mvc; +using static New_College.Extensions.CustomApiVersion; + +namespace New_College.Controllers.v1 +{ + [Route("api/[controller]")] + [ApiController] + public class ApbController : ControllerBase + { + + + /************************************************/ + // 如果不需要使用Http协议带名称的,比如这种 [HttpGet] + // 就可以按照下边的写法去写,在方法上直接加特性 [CustomRoute(ApiVersions.v1, "apbs")] + // 反之,如果你需要http协议带名称,请看 V2 文件夹的方法 + /************************************************/ + + [HttpGet] + [CustomRoute(ApiVersions.V1, "apbs")] + public IEnumerable Get() + { + return new string[] { "第一版的 apbs" }; + } + + + } +} diff --git a/New_College.Api/Controllers/v2/ApbController.cs b/New_College.Api/Controllers/v2/ApbController.cs new file mode 100644 index 0000000..a3162d7 --- /dev/null +++ b/New_College.Api/Controllers/v2/ApbController.cs @@ -0,0 +1,32 @@ +using New_College.SwaggerHelper; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using static New_College.Extensions.CustomApiVersion; + +namespace New_College.Controllers.v2 +{ + [CustomRoute(ApiVersions.V2)] + //[Route("api/[controller]")] + [ApiController] + [Authorize(Permissions.Name)] + public class ApbController : ControllerBase + { + + + /************************************************/ + // 如果需要使用Http协议带名称的,比如这种 [HttpGet("apbs")] + // 目前只能把[CustomRoute(ApiVersions.v2)] 提到 controller 的上边,做controller的特性 + // 并且去掉//[Route("api/[controller]")]路由特性,否则会有两个接口 + /************************************************/ + + + [HttpGet("apbs")] + public IEnumerable Get() + { + return new string[] { "第二版的 apbs" }; + } + + + } +} diff --git a/New_College.Api/Dockerfile b/New_College.Api/Dockerfile new file mode 100644 index 0000000..37e0a50 --- /dev/null +++ b/New_College.Api/Dockerfile @@ -0,0 +1,36 @@ +FROM swr.cn-south-1.myhuaweicloud.com/mcr/aspnet:3.1-alpine +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +RUN echo 'Asia/Shanghai' >/etc/timezone + +#RUN apk add --no-cache ca-certificates python3 bash openssh git openssl-dev uwsgi uwsgi-python3 +#RUN apk add --no-cache --virtual .build-deps python3-dev gcc musl-dev libffi-dev make \ + #&& pip3 install --no-cache-dir --trusted-host mirrors.aliyun.com -i http://mirrors.aliyun.com/pypi/simple/ \ + #pymysql==0.8.1 \ + #Flask==1.0.2 \ + #Flask-RESTful==0.3.6 \ + #Flask-Script==2.0.6 \ + #Flask-SQLAlchemy==2.3.2 \ + #Flask-WTF==0.14.2 \ + #SQLAlchemy==1.2.7 \ + #simplejson==3.16.0 \ + #six==1.11.0 \ + #celery==4.2.1 \ + #xlrd==1.1.0 \ + #xlwt==1.3.0 \ + #msgpack==0.5.0 \ + #&& apk del .build-deps +# +#RUN git clone https://github.com/Supervisor/supervisor.git \ + #&& cd supervisor \ + #&& python3 setup.py install \ + #&& cd .. \ + #&& rm -rf supervisor \ + #&& cd /etc/ \ + #&& echo_supervisord_conf > supervisord.conf \ + #&& echo '[include]' >> supervisord.conf \ + #&& echo 'files = /code/supervisor/*.ini' >> supervisord.conf \ + #&& supervisord -c /etc/supervisord.conf +WORKDIR /app +COPY . . +EXPOSE 8083 +ENTRYPOINT ["dotnet", "New_College.Api.dll","-b","0.0.0.0"] \ No newline at end of file diff --git a/New_College.Api/Filter/CustomRouteAttribute.cs b/New_College.Api/Filter/CustomRouteAttribute.cs new file mode 100644 index 0000000..b8d1681 --- /dev/null +++ b/New_College.Api/Filter/CustomRouteAttribute.cs @@ -0,0 +1,37 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ApiExplorer; +using System; +using static New_College.Extensions.CustomApiVersion; + +namespace New_College.SwaggerHelper +{ + /// + /// 自定义路由 /api/{version}/[controler]/[action] + /// + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] + public class CustomRouteAttribute : RouteAttribute, IApiDescriptionGroupNameProvider + { + + /// + /// 分组名称,是来实现接口 IApiDescriptionGroupNameProvider + /// + public string GroupName { get; set; } + + /// + /// 自定义路由构造函数,继承基类路由 + /// + /// + public CustomRouteAttribute(string actionName = "[action]") : base("/api/{version}/[controller]/" + actionName) + { + } + /// + /// 自定义版本+路由构造函数,继承基类路由 + /// + /// + /// + public CustomRouteAttribute(ApiVersions version, string actionName = "") : base($"/api/{version.ToString()}/[controller]/{actionName}") + { + GroupName = version.ToString(); + } + } +} diff --git a/New_College.Api/Filter/GlobalAuthorizeFilter.cs b/New_College.Api/Filter/GlobalAuthorizeFilter.cs new file mode 100644 index 0000000..7bb6cce --- /dev/null +++ b/New_College.Api/Filter/GlobalAuthorizeFilter.cs @@ -0,0 +1,56 @@ +using Microsoft.AspNetCore.Mvc.ApplicationModels; +using Microsoft.AspNetCore.Mvc.Authorization; +using Microsoft.AspNetCore.Mvc.Filters; +using System.Linq; +using System.Threading.Tasks; + +namespace New_College.Filter +{ + /// + /// Summary:全局路由权限公约 + /// Remarks:目的是针对不同的路由,采用不同的授权过滤器 + /// 如果 controller 上不加 [Authorize] 特性,默认都是 Permission 策略 + /// 否则,如果想特例其他授权机制的话,需要在 controller 上带上 [Authorize],然后再action上自定义授权即可,比如 [Authorize(Roles = "Admin")] + /// + public class GlobalRouteAuthorizeConvention : IApplicationModelConvention + { + public void Apply(ApplicationModel application) + { + foreach (var c in application.Controllers) + { + if (!c.Filters.Any(e => e is AuthorizeFilter)) + { + // 没有写特性,就用全局的 Permission 授权 + c.Filters.Add(new AuthorizeFilter(Permissions.Name)); + } + else { + // 写了特性,[Authorize] 或 [AllowAnonymous] ,根据情况进行权限认证 + } + + } + } + } + + /// + /// 全局权限过滤器【无效】 + /// + public class GlobalAuthorizeFilter : AuthorizeFilter + { + + public override Task OnAuthorizationAsync(AuthorizationFilterContext context) + { + if (context.Filters.Any(item => item is IAsyncAuthorizationFilter && item != this)) + { + return Task.FromResult(0); + } + + + return base.OnAuthorizationAsync(context); + + + } + } + + + +} diff --git a/New_College.Api/Filter/GlobalExceptionFilter.cs b/New_College.Api/Filter/GlobalExceptionFilter.cs new file mode 100644 index 0000000..be64f51 --- /dev/null +++ b/New_College.Api/Filter/GlobalExceptionFilter.cs @@ -0,0 +1,90 @@ +using New_College.Common.LogHelper; +using New_College.Hubs; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using StackExchange.Profiling; +using System; + +namespace New_College.Filter +{ + /// + /// 全局异常错误日志 + /// + public class GlobalExceptionsFilter : IExceptionFilter + { + private readonly IWebHostEnvironment _env; + private readonly IHubContext _hubContext; + private readonly ILogger _loggerHelper; + + public GlobalExceptionsFilter(IWebHostEnvironment env, ILogger loggerHelper, IHubContext hubContext) + { + _env = env; + _loggerHelper = loggerHelper; + _hubContext = hubContext; + } + + public void OnException(ExceptionContext context) + { + var json = new JsonErrorResponse(); + + json.Message = context.Exception.Message;//错误信息 + var errorAudit = "Unable to resolve service for"; + if (!string.IsNullOrEmpty(json.Message)&& json.Message.Contains(errorAudit)) + { + json.Message = json.Message.Replace(errorAudit, $"(若新添加服务,需要重新编译项目){errorAudit}"); + } + if (_env.IsDevelopment()) + { + json.DevelopmentMessage = context.Exception.StackTrace;//堆栈信息 + } + context.Result = new InternalServerErrorObjectResult(json); + + MiniProfiler.Current.CustomTiming("Errors:", json.Message); + + + //采用log4net 进行错误日志记录 + _loggerHelper.LogError(json.Message + WriteLog(json.Message, context.Exception)); + + _hubContext.Clients.All.SendAsync("ReceiveUpdate", LogLock.GetLogData()).Wait(); + + } + + /// + /// 自定义返回格式 + /// + /// + /// + /// + public string WriteLog(string throwMsg, Exception ex) + { + return string.Format("\r\n【自定义错误】:{0} \r\n【异常类型】:{1} \r\n【异常信息】:{2} \r\n【堆栈调用】:{3}", new object[] { throwMsg, + ex.GetType().Name, ex.Message, ex.StackTrace }); + } + + } + public class InternalServerErrorObjectResult : ObjectResult + { + public InternalServerErrorObjectResult(object value) : base(value) + { + StatusCode = StatusCodes.Status500InternalServerError; + } + } + //返回错误信息 + public class JsonErrorResponse + { + /// + /// 生产环境的消息 + /// + public string Message { get; set; } + /// + /// 开发环境的消息 + /// + public string DevelopmentMessage { get; set; } + } + +} diff --git a/New_College.Api/Filter/GlobalRoutePrefixFilter.cs b/New_College.Api/Filter/GlobalRoutePrefixFilter.cs new file mode 100644 index 0000000..9dd89e5 --- /dev/null +++ b/New_College.Api/Filter/GlobalRoutePrefixFilter.cs @@ -0,0 +1,51 @@ +using Microsoft.AspNetCore.Mvc.ApplicationModels; +using Microsoft.AspNetCore.Mvc.Routing; +using System.Linq; + +namespace New_College.Filter +{ + /// + /// 全局路由前缀公约 + /// + public class GlobalRoutePrefixFilter : IApplicationModelConvention + { + private readonly AttributeRouteModel _centralPrefix; + + public GlobalRoutePrefixFilter(IRouteTemplateProvider routeTemplateProvider) + { + _centralPrefix = new AttributeRouteModel(routeTemplateProvider); + } + + //接口的Apply方法 + public void Apply(ApplicationModel application) + { + //遍历所有的 Controller + foreach (var controller in application.Controllers) + { + // 已经标记了 RouteAttribute 的 Controller + var matchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel != null).ToList(); + if (matchedSelectors.Any()) + { + foreach (var selectorModel in matchedSelectors) + { + // 在 当前路由上 再 添加一个 路由前缀 + selectorModel.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_centralPrefix, + selectorModel.AttributeRouteModel); + } + } + + // 没有标记 RouteAttribute 的 Controller + var unmatchedSelectors = controller.Selectors.Where(x => x.AttributeRouteModel == null).ToList(); + if (unmatchedSelectors.Any()) + { + foreach (var selectorModel in unmatchedSelectors) + { + // 添加一个 路由前缀 + selectorModel.AttributeRouteModel = _centralPrefix; + } + } + } + } + } + +} diff --git a/New_College.Api/Filter/UseServiceDIAttribute.cs b/New_College.Api/Filter/UseServiceDIAttribute.cs new file mode 100644 index 0000000..403370f --- /dev/null +++ b/New_College.Api/Filter/UseServiceDIAttribute.cs @@ -0,0 +1,42 @@ +using New_College.IServices; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.Extensions.Logging; +using System; + +namespace New_College.Filter +{ + public class UseServiceDIAttribute : ActionFilterAttribute + { + + protected readonly ILogger _logger; + private readonly IBlogArticleServices _blogArticleServices; + private readonly string _name; + + public UseServiceDIAttribute(ILogger logger, IBlogArticleServices blogArticleServices,string Name="") + { + _logger = logger; + _blogArticleServices = blogArticleServices; + _name = Name; + } + + + public override void OnActionExecuted(ActionExecutedContext context) + { + //var dd =await _blogArticleServices.Query(); + base.OnActionExecuted(context); + DeleteSubscriptionFiles(); + } + + private void DeleteSubscriptionFiles() + { + try + { + // ... + } + catch (Exception e) + { + _logger.LogError(e, "Error Delete Subscription Files"); + } + } + } +} diff --git a/New_College.Api/Log4net.config b/New_College.Api/Log4net.config new file mode 100644 index 0000000..67beb3d --- /dev/null +++ b/New_College.Api/Log4net.config @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/New_College.Api/New_College.Api.csproj b/New_College.Api/New_College.Api.csproj new file mode 100644 index 0000000..cc53dd2 --- /dev/null +++ b/New_College.Api/New_College.Api.csproj @@ -0,0 +1,93 @@ + + + + + Exe + + netcoreapp3.1 + + OutOfProcess + Linux + 9dd21652-c528-44ce-9a01-f33c5d3edab8 + + + + ..\New_College.Api\New_College.xml + 1701;1702;1591 + + + + ..\New_College\New_College.xml + 1701;1702;1591 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always + + + + + + Always + + + + + + diff --git a/New_College.Api/New_College.Model.xml b/New_College.Api/New_College.Model.xml new file mode 100644 index 0000000..8880d0d --- /dev/null +++ b/New_College.Api/New_College.Model.xml @@ -0,0 +1,5198 @@ + + + + New_College.Model + + + + + 这是爱 + + + + + id + + + + + 姓名 + + + + + 年龄 + + + + + 通用返回信息类 + + + + + 状态码 + + + + + 操作是否成功 + + + + + 返回信息 + + + + + 返回数据集合 + + + + + 广告图片 + + + + + 广告标题 + + + + + 广告链接 + + + + + 备注 + + + + + 海报管理 + + + + + banner name + + + + + 图片地址 + + + + + 要去的地址 + + + + + banner 0,不展示,1展示是否展示 + + + + + 海报位置:0 首页banner + + + + + 博客文章 + + + + + 主键 + + 这里之所以没用RootEntity,是想保持和之前的数据库一致,主键是bID,不是Id + + + + 创建人 + + + + + 标题blog + + + + + 类别 + + + + + 内容 + + + + + 访问量 + + + + + 评论数量 + + + + + 修改时间 + + + + + 创建时间 + + + + + 备注 + + + + + 逻辑删除 + + + + + 招生简章 + + + + + 院校Id + + + + + 发布时间 + + + + + 标题 + + + + + 文章内容 + + + + + 专业二级分类id + + + + + 专业名称 + + + + + 教育部专业编号 + + + + + 热度 + + + + + 专业分类 1文科 2理科 3不区分 + + + + + + + + + + + + + + + 本科/专科大类 1本科 2 专科 + + + + + 专业类型名称 + + + + + 专业一级分类id + + + + + 院校id + + + + + 专业id + + + + + 专业主修课程 + + + + + 专业前景 + + + + + 专业介绍 + + + + + 相关技能 + + + + + 考研方向 + + + + + 专业ID + + + + + 职业ID + + + + + 职业id + + + + + 标签 + + + + + 院校id + + + + + 专业id + + + + + 是否为特殊专业,0为不是,1为是 + + + + + 专业名称 + + + + + 就业概况-名次 + + + + + 就业概况-名次描述 + + + + + 就业最多地区 + + + + + 就业最多行业 + + + + + 就业行业分布 + + + + + 就业行业分布比例 + + + + + 就业地区分布 + + + + + 就业地区分布比例 + + + + + 工资情况 + + + + + 工资比例 + + + + + 经验情况 + + + + + 经验比例 + + + + + 学历要求 + + + + + 学历要求 + + + + + 就业方向 + + + + + 从事岗位 + + + + + 平均工资 + + + + + 工作年限 + + + + + 工作年限工资 + + + + + 专业Id + + + + + 专业名称 + + + + + 薪资 + + + + + 职业id + + + + + 标签 + + + + + 职业分类id + + + + + 职业名称 + + + + + 职业介绍 + + + + + 是否推荐,0为不推荐,1为推荐 + + + + + 分类名称 + + + + + 分类等级 + + + + + 省id + + + + + 省name + + + + + 排名 + + + + + 创办时间 + + + + + 办学性质 1、公立,2、私立 + + + + + 隶属于 1、教育部,2、省政府, 3 其他部委,4 军校 + + + + + 教育行政主管部门名称 + + + + + 学科层次 1、本科,2、专科 + + + + + 是否985 0、否,1、是 + + + + + 是否211 0、否,1、是 + + + + + 是否双一流 0、否,1、是 + + + + + 院士数 + + + + + 博士数 + + + + + 硕士数 + + + + + 大学类型 0综合,1理工类,2医学类... + + + + + logo + + + + + 院校官网 + + + + + 院校简介 + + + + + 院校收藏和对比 + + + + + 用户Id + + + + + 院校Id + + + + + 1收藏 2对比 + + + + + 院校Id + + + + + 院校图片列表地址 + + + + + 院校名称 + + + + + 类型(0,校友会 1,武书连 2,软科 3,QS 4,U.S.News) + + + + + 年份 + + + + + 排名 + + + + + 留言表 + + + + 博客ID + + + + + 创建时间 + + + + + 手机 + + + + + qq + + + + + 留言内容 + + + + + ip地址 + + + + + 是否显示在前台,0否1是 + + + + + + 接口API地址信息表 + + + + + ID + + + + + 获取或设置是否禁用,逻辑上的删除,非物理删除 + + + + + 父ID + + + + + 名称 + + + + + 菜单链接地址 + + + + + 区域名称 + + + + + 控制器名称 + + + + + Action名称 + + + + + 图标 + + + + + 菜单编号 + + + + + 排序 + + + + + /描述 + + + + + 是否是右侧菜单 + + + + + 是否激活 + + + + + 菜单与按钮关系表 + + + + + 获取或设置是否禁用,逻辑上的删除,非物理删除 + + + + + 菜单ID + + + + + 按钮ID + + + + + 接口API地址信息表 + + + + + ID + + + + + 获取或设置是否禁用,逻辑上的删除,非物理删除 + + + + + 父ID + + + + + 名称 + + + + + 菜单链接地址 + + + + + 区域名称 + + + + + 控制器名称 + + + + + Action名称 + + + + + 图标 + + + + + 菜单编号 + + + + + 排序 + + + + + /描述 + + + + + 是否是右侧菜单 + + + + + 是否激活 + + + + + 创建ID + + + + + 创建者 + + + + + 创建时间 + + + + + 修改ID + + + + + 修改者 + + + + + 修改时间 + + + + + 产品教程,赚钱攻略,操作指南 + + + + + 素材库 + + + + + 素材封面 + + + + + 素材内容 + + + + + 日志记录 + + + + + 区域名 + + + + + 区域控制器名 + + + + + Action名称 + + + + + IP地址 + + + + + 描述 + + + + + 登录时间 + + + + + 登录名称 + + + + + 用户ID + + + + + 密码库表 + + + + + 获取或设置是否禁用,逻辑上的删除,非物理删除 + + + + + 路由菜单表 + + + + + ID + + + + + 菜单执行Action名 + + + + + 菜单显示名(如用户页、编辑(按钮)、删除(按钮)) + + + + + 是否是按钮 + + + + + 组件类型(0,为button或菜单,1为下拉框,2...) + + + + + 是否是隐藏菜单 + + + + + 是否keepAlive + + + + + 按钮事件 + + + + + 上一级菜单(0表示上一级无菜单) + + + + + 接口api + + + + + 排序 + + + + + 菜单图标 + + + + + 菜单描述 + + + + + 激活状态 + + + + + 创建ID + + + + + 创建者 + + + + + 创建时间 + + + + + 修改ID + + + + + 修改者 + + + + + 修改时间 + + + + + 获取或设置是否禁用,逻辑上的删除,非物理删除 + + + + + 角色表 + + + + + ID + + + + + 获取或设置是否禁用,逻辑上的删除,非物理删除 + + + + + 角色名 + + + + + 描述 + + + + + 排序 + + + + + 是否激活 + + + + + 创建ID + + + + + 创建者 + + + + + 创建时间 + + + + + 修改ID + + + + + 修改者 + + + + + 修改时间 + + + + + 按钮跟权限关联表 + + + + + ID + + + + + 获取或设置是否禁用,逻辑上的删除,非物理删除 + + + + + 角色ID + + + + + 菜单ID + + + + + api ID + + + + + 创建ID + + + + + 创建者 + + + + + 创建时间 + + + + + 修改ID + + + + + 修改者 + + + + + 修改时间 + + + + + 带创建人BaseModel + + + + + ID + + + + + 排序 + + + + + 创建ID + + + + + 创建者 + + + + + 创建时间 + + + + + 修改ID + + + + + 修改者 + + + + + 修改时间 + + + + + 是否删除 + + + + + 不带创建人BaseModel + + + + + ID + + + + + 排序 + + + + + 创建时间 + + + + + + 是否删除 + + + + + 省市区 + + + + + 主键ID + + + + + 用户信息表 + + + + + 用户ID + + + + + 登录账号 + + + + + 登录密码 + + + + + 真实姓名 + + + + + 状态 + + + + + 备注 + + + + + 创建时间 + + + + + 更新时间 + + + + + 最后登录时间 + + + + + 错误次数 + + + + + 登录账号 + + + + + 任务计划表 + + + + + 任务名称 + + + + + 任务分组 + + + + + 任务运行时间表达式 + + + + + 任务所在DLL对应的程序集名称 + + + + + 任务所在类 + + + + + 任务描述 + + + + + 执行次数 + + + + + 开始时间 + + + + + 结束时间 + + + + + 触发器类型(0、simple 1、cron) + + + + + 执行间隔时间, 秒为单位 + + + + + 是否启动 + + + + + 执行传参 + + + + + 测评分类表 + + + + + 分类名称 + + + + + 解释 + + + + + 解释详情 + + + + + Vip卡类型 + + + + + 测评分类Id + + + + + 周期名称 + + + + + 个性倾向结果表 + + + + + 学生Id + + + + + 周期Id + + + + + 年级名称 + + + + + 班级名称 + + + + + 喜欢的学科 + + + + + + + + + + 是否出国留学 + + + + + 结果 + + + + + Tag标签 + + + + + 自选标签 + + + + + 标签 + + + + + 适合的领域 + + + + + 性格特征解读 + + + + + 优势 + + + + + 劣势 + + + + + 偏好的活动特质 + + + + + 可能存在的盲点 + + + + + 建议 + + + + + 测评结果表 生涯能力和心理测量 + + + + + 学生Id + + + + + 周期Id + + + + + 年级名称 + + + + + 班级名称 + + + + + 分类Id + + + + + 结果 + + + + + 是否打开 + + + + + 问题表 + + + + + 问题分类Id + + + + + 问题类型Id + + + + + 问题 + + + + + 问题类型 + + + + + 问题Tag + + + + + 版本 + + + + + 正反记分 1是正向记分 0是反向记分 + + + + + 问题类型表 + + + + + 问题类型 + + + + + 分类Id + + + + + Tibug 类别 + + + + + Tibug 博文 + + + + + 省份id + + + + + 省份名称 + + + + + 学界 + + + + + 分数 + + + + + 类型 + + + + + 批次名称 + + + + + 批次表 + + + + + 省份ID + + + + + 省份名称 + + + + + 批次名称 + + + + + 年份 + + + + + 省份id + + + + + 省份名称 + + + + + 年份 + + + + + 本科1,专科0,其他-1 + + + + + 文理 不分文理 + + + + + 计划名称 + + + + + 省份Id + + + + + 年份 + + + + + 招生计划id + + + + + 招生计划批次id + + + + + 招生院校id + + + + + 选科限制:新高考(物理,化学,生物),老高考(无);新高考省份:江苏 湖北 福建 辽宁 广东 重庆 河北 湖南 + + + + + 计划招生数 + + + + + 专业学费 + + + + + 语言限制-------------------------------------- + + + + + 标签匹配 + + + + + 分数线 + + + + + 备注 + + + + + 专业学年制(4年,3年) + + + + + 专业ID -------------------------------------- + + + + + 专业名称-》招生计划名称 + + + + + 专业平均分 + + + + + 位次 + + + + + 招生计划Id + + + + + 省份Id + + + + + 类型 不分文理(0),理工类(1),文史类(2),default(1) + + + + + 档位名称 + + + + + 最高分 + + + + + 最低分 + + + + + 计划名称 + + + + + 标签 + + + + + 省份Id + + + + + 省份名称 + + + + + 年份 + + + + + 满分 + + + + + 用户跟角色关联表 + + + + + 获取或设置是否禁用,逻辑上的删除,非物理删除 + + + + + 用户ID + + + + + 角色ID + + + + + 概率历史 + + + + + 用户Id + + + + + 院校Id + + + + + 概率 + + + + + 预估分数 + + + + + 区域Id + + + + + 年份 + + + + + 志愿Table + + + + + 用户ID + + + + + 志愿表名称 + + + + + 志愿表详情 + + + + + 志愿表Id + + + + + 院校Id + + + + + 院校名称 + + + + + 院校编码 + + + + + 招生计划Id列表逗号隔开 + + + + + 用户头像 + + + + + 用户code + + + + + 小程序openid + + + + + 用户名 + + + + + 性别 1男 2女 + + + + + 电话 + + + + + 用户密码 + + + + + 密码混合验证字段 + + + + + 学生所在学校 + + + + + 学生所在班级 + + + + + 用户类型 + + + + + 省市区id + + + + + 省市区名称 + + + + + 状态:0、未启用,1、启用,2、禁用 + + + + + 学生数据是否初始化(省份,选科等) + + + + + 0(新高考),1(文科,理科) + + + + + 选科文字展示 + + + + + 考生预计分数 + + + + + 是否为VIP + + + + + 是否更新分数 + + + + + 年份 + + + + + 省份id + + + + + 标题 + + + + + 图片 + + + + + 政策内容 + + + + + 此表用户绑定后添加和直接购买 + + + + + 1支付宝支付 0微信支付 + + + + + 状态 + + + + + 价格 + + + + + 实付款 + + + + + 卡Id + + + + + 卡号 + + + + + 卡类型Id + + + + + 用户Id + + + + + + + + + + + + + + + 订单号 + + + + + 用户Id + + + + + 逗号隔开 + + + + + 状态1初选 + 状态2是结束 + 重新选择的时候修改为1 + + + + + 账号 key + + + + + 是否一绑定 + + + + + 天数 + + + + + 金额 + + + + + 卡类型Id + + + + + 卡类型 + + + + + 卡类型名称 + + + + + 金额 + + + + + + + + + + 天数 + + + + + 介绍 + + + + + 通用分页信息类 + + + + + 当前页标 + + + + + 总页数 + + + + + 数据总数 + + + + + 每页大小 + + + + + 返回数据 + + + + + 用户头像 + + + + + 首次注册时传此值 + + + + + 退出重新登录时传此值 + + + + + 无权限 + + + + + 找不到指定资源 + + + + + 找不到指定资源 + + + + + 异步添加种子数据 + + + + + + + + 生成Controller层 + + sqlsugar实例 + 数据库链接ID + 数据库表名数组,默认空,生成所有表 + + + + + + 生成Model层 + + sqlsugar实例 + 数据库链接ID + 数据库表名数组,默认空,生成所有表 + + + + + + 生成IRepository层 + + sqlsugar实例 + 数据库链接ID + + 数据库表名数组,默认空,生成所有表 + + + + + 生成 IService 层 + + sqlsugar实例 + 数据库链接ID + + 数据库表名数组,默认空,生成所有表 + + + + + 生成 Repository 层 + + sqlsugar实例 + 数据库链接ID + + 数据库表名数组,默认空,生成所有表 + + + + + 生成 Service 层 + + sqlsugar实例 + 数据库链接ID + + 数据库表名数组,默认空,生成所有表 + + + + + 功能描述:根据数据库表生产Controller层 + 作  者:New_College + + + 数据库链接ID + 实体类存放路径 + 命名空间 + 生产指定的表 + 实现接口 + + 是否序列化 + + + + 功能描述:根据数据库表生产Model层 + 作  者:New_College + + + 数据库链接ID + 实体类存放路径 + 命名空间 + 生产指定的表 + 实现接口 + + 是否序列化 + + + + 功能描述:根据数据库表生产IRepository层 + 作  者:New_College + + + 数据库链接ID + 实体类存放路径 + 命名空间 + 生产指定的表 + 实现接口 + + + + + 功能描述:根据数据库表生产IServices层 + 作  者:New_College + + + 数据库链接ID + 实体类存放路径 + 命名空间 + 生产指定的表 + 实现接口 + + + + + 功能描述:根据数据库表生产 Repository 层 + 作  者:New_College + + + 数据库链接ID + 实体类存放路径 + 命名空间 + 生产指定的表 + 实现接口 + + + + + 功能描述:根据数据库表生产 Services 层 + 作  者:New_College + + + 数据库链接ID + 实体类存放路径 + 命名空间 + 生产指定的表 + 实现接口 + + + + + 根据模板内容批量生成文件 + + 类文件字符串list + 生成路径 + 文件名格式模板 + + + + 连接字符串 + New_College + + + + + 连接字符串 + New_College + + + + + 数据库类型 + New_College + + + + + 数据连接对象 + New_College + + + + + 数据库上下文实例(自动关闭连接) + New_College + + + + + 功能描述:构造函数 + 作  者:New_College + + + + + 功能描述:获取数据库处理对象 + 作  者:New_College + + 返回值 + + + + 功能描述:获取数据库处理对象 + 作  者:New_College + + db + 返回值 + + + + 功能描述:根据实体类生成数据库表 + 作  者:New_College + + 是否备份表 + 指定的实体 + + + + 功能描述:根据实体类生成数据库表 + 作  者:New_College + + 是否备份表 + 指定的实体 + + + + 功能描述:获得一个DbContext + 作  者:New_College + + + + + + 功能描述:设置初始化参数 + 作  者:New_College + + 连接字符串 + 数据库类型 + + + + 功能描述:创建一个链接配置 + 作  者:New_College + + 是否自动关闭连接 + 是否夸类事务 + ConnectionConfig + + + + 功能描述:获取一个自定义的DB + 作  者:New_College + + config + 返回值 + + + + 功能描述:获取一个自定义的数据库处理对象 + 作  者:New_College + + sugarClient + 返回值 + + + + 功能描述:获取一个自定义的数据库处理对象 + 作  者:New_College + + config + 返回值 + + + + 表格数据,支持分页 + + + + + 返回编码 + + + + + 返回信息 + + + + + 记录总数 + + + + + 返回数据集 + + + + + 广告类 + + + + + 分类ID + + + + + 创建时间 + + + + + 广告图片 + + + + + 广告标题 + + + + + 广告链接 + + + + + 备注 + + + + + 微信小程序配置 + + + + + 绑定支付的APPID(必须配置) + + + + + 公众账号secert + + + + + 商户号(必填) + + + + + 商户支付密钥 + + + + + 支付结果回调URL + + + + + + + + + + 本科/专科大类 1本科 2 专科 + + + + + 博客信息展示类 + + + + + + + + + 创建人 + + + + + 博客标题 + + + + + 摘要 + + + + + + 上一篇 + + + + + 上一篇id + + + + + 下一篇 + + + + + 下一篇id + + + + 类别 + + + + + 内容 + + + + + + 访问量 + + + + + 评论数量 + + + + 修改时间 + + + + + + 创建时间 + + + + 备注 + + + + + + 留言信息展示类 + + + + 留言表 + + + + + 博客ID + + + + + 创建时间 + + + + + 手机 + + + + + qq + + + + + 留言内容 + + + + + ip地址 + + + + + 是否显示在前台,0否1是 + + + + + + 测评类型 + + + + + + + + + + 纬度Id + + + + + 用户Id + + + + + 不传就不修改密码 + + + + + 用户头像 + + + + + 用户名 + + + + + 性别 1男 2女 + + + + + 0(新高考),1,文科,2 理科 + + + + + 选科文字展示 + + + + + 更新信息query + + + + + 省市区id + + + + + 省市区名称 + + + + + 0(新高考),1,文科,2 理科 + + + + + 选科文字展示 + + + + + 考生预计分数 + + + + + + + + + + 省市区id + + + + + 省市区名称 + + + + + 年份 + + + + + + + + + + + + + + + + + + + + 图片 + + + + + 办学层次 本科/专科大类 1本科 2 专科 + + + + + 专业基础查询 + + + + + 学科层次 + + + + + 省市区名称 + + + + + 办学性质 + + + + + 学校类型 + + + + + 是否985 0、否,1、是 + + + + + 是否211 0、否,1、是 + + + + + 是否双一流 0、否,1、是 + + + + + 选科 物化生 中文逗号(,)隔开 + + + + + 高考年份 + + + + + 省市区名称 + + + + + 省份Id + + + + + 分数 + + + + + 专业分类 1文科 2理科 3不区分 + + + + + 教育部专业编号 + + + + + 专业名称 + + + + + 是否前10个 1是2不是 + + + + + 霍兰德标签 + + + + + 选科 物化生 中文逗号(,)隔开 + + + + + 高考年份 + + + + + 省市区名称 + + + + + 省份Id + + + + + 分数 + + + + + 类型 1本科 2专科 + + + + + 1支付宝支付 2微信支付 + + + + + 1支付宝支付 2微信支付 + + + + + 状态 1待支付 2已支付 + + + + + 状态 1待支付 2已支付 + + + + + 价格 + + + + + 实付款 + + + + + 卡Id + + + + + 卡号 + + + + + 卡类型Id + + + + + 卡类型名字 + + + + + 用户Id + + + + + 用户名 + + + + + 名字 + + + + + out_trade_no + + + + + 订单号 + + + + + 电话 + + + + + 根据卡号查询 + + + + + 根据VIP类别查询 + + + + + 根据支付方式查询 + + + + + 根据支付状态查询 + + + + + 根据手机号查询 + + + + + 根据out_trade_no号查询 + + + + + 微信浏览器(标价金额) + + + + + trade_type=JSAPI时(即JSAPI支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识。openid如何获取,可参考【获取openid】。企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换 + + + + + 系统生成订单号 + + + + + 招生计划Ids + + + + + 高考年份 + + + + + 专业Ids + + + + + + + + + + 省份Id + + + + + 生涯能力提交 + + + + + 学科探索传入 + + + + + 学生发展 + + + + + 学科探索query + + + + + 生涯能力json + + + + + 学生发展 + + + + + 霍兰德如果不传周期Id的话就获取最新的 + + + + + 学科层次 + + + + + 省市区名称 + + + + + 办学性质 + + + + + 学校类型 + + + + + 是否985 0、否,1、是 + + + + + 是否211 0、否,1、是 + + + + + 是否双一流 0、否,1、是 + + + + + 录取概率传入 + + + + + 用户Id + + + + + 分数 + + + + + 院校Id + + + + + 省份名称 + + + + + 省份Id + + + + + 年份 + + + + + 用户Id + + + + + 逗号隔开 + + + + + 第三部传1 第五步选择传2 + + + + + 年份 + + + + + 省份Id + + + + + 标签 + + + + + 用户Id + + + + + 第四步选的专业名称 + + + + + 第四步选科 + + + + + 年份 + + + + + 省份Id + + + + + 标签 + + + + + 年份 + + + + + 省份Id + + + + + 省份名称 + + + + + 传0位获取省 传其他Code为获取下级数据 + + + + + 检索省份 + + + + + 科目 物化生政史地 传的话都好隔开 中文逗号 + + + + + 高考年份 + + + + + 学生预估分数 + + + + + 省市区名称 + + + + + 省份Id + + + + + 霍兰德标签 + + + + + 1专业到学校 2学校到专业 + + + + + 批次Id + + + + + 懒人模式Query + + + + + 高考年份 + + + + + 学生预估分数 + + + + + 省市区名称 + + + + + 省份Id + + + + + 办学性质1、公立,2、私立 + + + + + 省份 名称 + + + + + 专业Ids最多三个 + + + + + 冲稳保Query + + + + + 高考年份 + + + + + 批次Id + + + + + 学生预估分数 + + + + + 学校省份 + + + + + 省市区名称 + + + + + 省份Id + + + + + 办学性质1、公立,2、私立 + + + + + 高校级别 985传1 211传2 双一流传3 其他传0或者不传 + + + + + 专业Ids + + + + + dto query + + + + + 用户Id + + + + + 1收藏 2对比 + + + + + 添加Query + + + + + 用户Id + + + + + 1收藏 2对比 + + + + + 院校Id + + + + + 学科层次 + + + + + 省市区名称 + + + + + 办学性质 + + + + + 用户id + + + + + 学校类型 + + + + + 是否985 0、否,1、是 + + + + + 是否211 0、否,1、是 + + + + + 是否双一流 0、否,1、是 + + + + + 院校类型 (0,校友会 1,武书连 2,软科 3,QS 4,U.S.News) + + + + + 编号id + + + + + 账号 key + + + + + vip 卡类别id + + + + + 编号id + + + + + 账号 key + + + + + 卡片类别 + + + + + 是否绑定 + + + + + 卡类型名称 + + + + + 金额 + + + + + 天数 + + + + + vip卡类型id + + + + + 头部 + + + + + 长度 + + + + + 数量 + + + + + 用户Id + + + + + 省份Id + + + + + 省份Name + + + + + 年份 + + + + + 分数 + + + + + 霍兰德推荐专业学校信息 + + + + + 霍兰德推荐专业学校信息 + + + + + 计划名称 + + + + + 院校信息 + + + + + 院校信息 + + + + + 院校Id + + + + + 院校名称 + + + + + 创建者Ip + + + + + 后端域名 + + + + + 用户Id + + + + + 卡类型Id + + + + + 金额 + + + + + 回调地址 + + + + + 订单号 + + + + + 金额 + + + + + 后端IP + + + + + 项目编号 + + + + + 通知时间 + + + + + 通知的类型 + + + + + 通知校验ID + + + + + 开发者的app_id + + + + + 编码格式 + + + + + 接口版本 + + + + + 签名类型 + + + + + 签名 + + + + + 支付宝交易号 + + + + + 商户订单号 + + + + + 商户业务号 + + + + + 买家支付宝用户号 + + + + + 买家支付宝账号 + + + + + 卖家支付宝用户号 + + + + + 卖家支付宝账号 + + + + + 交易状态 + + + + + 订单金额 + + + + + 实收金额 + + + + + 付款金额 + + + + + 标题 + + + + + 描述 + + + + + 交易创建时间 + + + + + 交易付款时间 + + + + + 交易结束时间 + + + + + 试题编号 + + + + + 问题typeid + + + + + 问题 + + + + + 标签 + + + + + 问题类型 + + + + + 是否正反记分 + + + + + 试题编号 + + + + + 试题 + + + + + 选项 + + + + + A或者B + + + + + 选项内容 + + + + + 选项标签 + + + + + 测试次数 + + + + + 周期Id + + + + + 上次测试时间 + + + + + 订单ID + + + + + 交易号 + + + + + 订单状态 + + + + + 创建时间 + + + + + 返回状态1成功 2验证码错误 3失败 + + + + + 小程序openid + + + + + 用户头像 + + + + + 用户名 + + + + + 性别 1男 2女 + + + + + 省市区id + + + + + 省市区名称 + + + + + 学生数据是否初始化(省份,选科等) + + + + + 0(新高考),1(文科,理科) + + + + + 选科文字展示 + + + + + 考生预计分数 + + + + + 是否为VIP + + + + + 学届 + + + + + 编号id + + + + + 用户名 + + + + + 电话 + + + + + 住址 + + + + + Vip账号 + + + + + 0(新高考),1(文科,理科) + + + + + 选科文字展示 + + + + + 考生预计分数 + + + + + 根据用户名查询 + + + + + 根据选科查询 + + + + + 根据电话查询 + + + + + 主键 + + + + + 招生标题 + + + + + 主键 + + + + + 招生标题 + + + + + 发布时间 + + + + + 文章内容 + + + + + 省份名称 + + + + + 标题 + + + + + 修改时间 + + + + + 省份id + + + + + 标题 + + + + + 图片 + + + + + 政策内容 + + + + + + + + + + 标题 + + + + + 图片 + + + + + 政策内容 + + + + + 大类名称 + + + + + 专业科目信息 + + + + + 专业科目信息 + + + + + 专业名称 + + + + + 科目要求 + + + + + 专业介绍 + + + + + 专业简介 + + + + + 主要课程 + + + + + 考研方向 + + + + + 就业方向 + + + + + 专业ID + + + + + 学校ID + + + + + 学校名称 + + + + + 学校类型/公立/私立 + + + + + 985/211 + + + + + 双一流 + + + + + 就业前景 + + + + + 职业分布 + + + + + 行业分布 + + + + + 地区分布 + + + + + 工资分布 + + + + + 名称 + + + + + 分布比例 + + + + + 备注 + + + + + 专业名称 + + + + + 薪资 + + + + + 上级名称 + + + + + 本科还是专科 + + + + + 主键id + + + + + 职业名称 + + + + + 职业 + + + + + 主键id + + + + + 职业名称 + + + + + 排序 + + + + + 职业介绍 + + + + + 院校名称 + + + + + 院校Id + + + + + 概率 + + + + + 预估分数 + + + + + 年份 + + + + + 省份Id + + + + + Id + + + + + 周期Id + + + + + 周期名称 + + + + + 测评时间 + + + + + 生涯能力反回结果 + + + + + 能力评估 + + + + + 变化反馈 + + + + + 分数 + + + + + namevalue + + + + + 推荐选科 + + + + + 学科兴趣 + + + + + 学科能力 + + + + + + + + + + 测评结果 + + + + + 标签 + + + + + 适合的领域 + + + + + 性格特征解读 + + + + + 优势 + + + + + 劣势 + + + + + 偏好的活动特质 + + + + + 可能存在的盲点 + + + + + 建议 + + + + + 推荐选科 + + + + + 霍兰德 + + + + + 学科探索 + + + + + 自选结果 + + + + + uni 专业列表 + + + + + uni二级专业列表 + + + + + 院校Id + + + + + 名称 + + + + + 是否985 + + + + + 是否211 + + + + + 是否双一流 + + + + + 学校logo + + + + + 是否加入对比 0就是没有 + + + + + 是否收藏 + + + + + 名称 + + + + + 排名 + + + + + 是否985 + + + + + 是否211 + + + + + 是否双一流 + + + + + 省市区名称 + + + + + 办学性质 + + + + + 隶属于 + + + + + 学科层次 + + + + + 学校类型 + + + + + 创办时间 + + + + + 院士数 + + + + + 博士数 + + + + + 硕士数 + + + + + 主键id + + + + + 名称 + + + + + 排名 + + + + + 是否985 + + + + + 是否211 + + + + + 是否双一流 + + + + + 学校logo + + + + + 学校简介 + + + + + 省市区名称 + + + + + 办学性质 + + + + + 隶属于 + + + + + 学科层次 + + + + + 学校类型 + + + + + 创办时间 + + + + + 院士数 + + + + + 博士数 + + + + + 硕士数 + + + + + 是否收藏 + + + + + 是否对比 + + + + + 是否分数接近 + + + + + 院校图片json + + + + + 长学校id + + + + + + + + + + -1代表 id为空 -2代表院校为空 + + + + + 特色专业 + + + + + 毕业生省份流向 + + + + + 相关专业 + + + + + 毕业生省份流向 + + + + + 院校招生计划 + + + + + 院校名称 + + + + + 排名 最新 + + + + + 录取概率分析结果 + + + + + 是否985 + + + + + 是否211 + + + + + 是否双一流 + + + + + 学校logo + + + + + 名称 + + + + + 省市区名称 + + + + + 学科层次 + + + + + 办学性质 + + + + + 隶属于 + + + + + 排行 + + + + + 概率 + + + + + 预估分数 + + + + + 历年最低分 + + + + + 建议 + + + + + 历年最低分 + + + + + 年份 + + + + + 批次名称 + + + + + 最低分 + + + + + 编号id + + + + + 账号 key + + + + + 是否一绑定 + + + + + 是否一绑定 + + + + + vip 天数 + + + + + vip 金额 + + + + + vip 卡类别名字 + + + + + 卡类型Id + + + + + 卡类型名称 + + + + + 金额 + + + + + 天数 + + + + + 是否是Vip + + + + + 卡类型Id + + + + + 卡类型名称 + + + + + 卡号 + + + + + 到期时间 + + + + + 志愿填报推荐一级懒人专用 + + + + + 排名 + + + + + 是否211 + + + + + 是否双一流 + + + + + 行政名称 + + + + + 志愿填报推荐一级 + + + + + 冲稳保 类型 + + + + + 排名 + + + + + 是否211 + + + + + 是否双一流 + + + + + 对应的Ids + + + + + 对应专业数 + + + + + 点开学校 展示专业 + + + + + 冲稳保返回 + + + + + 霍兰德获取推荐专业 + + + + + Id + + + + + 名称 + + + + + 颜色 + + + + + 对应信息 + + + + + 专用 + + + + + Id + + + + + 名称 + + + + + 颜色 + + + + + 学校信息 + + + + + 院校Id + + + + + 院校名称 + + + + + 是否211 + + + + + 是否双一流 + + + + + 志愿表详情 + + + + + 志愿列表 + + + + + 名称 + + + + + 排名 + + + + + 是否985 + + + + + 是否211 + + + + + 是否双一流 + + + + + 学校logo + + + + + + + + + + 服务器VM + + + + + 环境变量 + + + + + 系统架构 + + + + + ContentRootPath + + + + + WebRootPath + + + + + .NET Core版本 + + + + + 内存占用 + + + + + 启动时间 + + + + + 菜单展示model + + + + + 用来测试 RestSharp Get 请求 + + + + + + + + + + + + + + + 用来测试 RestSharp Post 请求 + + + + + 留言排名展示类 + + + + 博客ID + + + + + + 评论数量 + + + + 博客标题 + + + + + diff --git a/New_College.Api/New_College.xml b/New_College.Api/New_College.xml new file mode 100644 index 0000000..6a4a1b0 --- /dev/null +++ b/New_College.Api/New_College.xml @@ -0,0 +1,1469 @@ + + + + New_College.Api + + + + + 获取分页 + + + + + + + 获取分页 + + + + + + + 获取单个 + + + + + + + 添加 + + + + + + + 修改 + + + + + + + 删除 + + + + + + + 获取分页 + + + + + + + 获取分页 + + + + + + + 生成卡信息 + + + + + + + 获取分页 + + + + + + + 获取单个 + + + + + + + 添加 + + + + + + + 修改 + + + + + + + 删除 + + + + + + + 获取vipcardTypeList + + + + + + 获取微信openid + + + + + + + 解密手机号同时保存用户信息 + + + + + + + 用户获取用户信息有OpenId 调用此接口 + + + + + + + 更改分数 + + + + + + + 完善用户信息 + + + + + + + 根绝Id获取用户信息 + + + + + + + 获取考试时间 + + + + + + + 获取院校库 + + + + + + + 专业库 一级二级列表 + + + + + + + 获取推荐职业 + + + + + + 职业库 一级二级列表 + + + + + + 获取职业第三级 + + + + + + + 院校详情 + + + + + + + 获取专业介绍 + + + + + + + 相关院校 + + + + + + + 获取专业就业前景 + + + + + + + 获取第三级 + + + + + + + 根据标签推荐专业 + + + + + + + 获取职业详情-职业介绍 + + + + + + 院校相关专业专用 + + + + + + + 查学校省份的 年份批次 + + + + + + + 获取招生计划 院校详情 + + + + + + + 获取院校排名 + + + + + + + 专业搜索 + + + + + + + 获取招生简章列表 + + + + + + + 获取招生简介详情 + + + + + + + 获取高薪推荐 + + + + + + 下订单 + + + + + + 获取省市区 + + + + + + + 获取分类 根绝type + + + + + + 获取个人某个维度测评结果 + + + + + + + 获取测评状态 + + + + + + + 获取问题 + + + + + + + 获取mbti试题 + + + + + + 提交 + + + + + + 提交 霍兰德和MBTI + + + + + + + 获取学生发展 + + + + + + + 获取霍兰德测评结果 + + + + + + + 获取MBTI测评结果 + + + + + + + 学科探索 结果 + + + + + + + 传入用户Id 获取霍兰德测评状态 + + + + + + + 传入用户Id 获取学科探索测评状态 + + + + + + + 获取我的自选科目 + + + + + + + 保存我的选科 + + + + + + + 根据标签推荐选科 + + + + + + + 获取测评最新周期Id + + + + + + + 获取三种推荐选科 + + + + + + + 根绝霍兰德获取推荐选科 + + + + + + + 获取收藏和对比 + + + + + + + 删除 + + + + + + + 添加收藏、对比 + + + + + + + 获取院校对比结果 传Ids + + + + + + 获取搜索学校 + + + + + + + 报告 获取我喜欢的院校 + + + + + + + 获取Vip卡列表 + + + + + + 绑定卡 + + + + + + + 获取vip信息 传用户Id + + + + + + + 专业分类列表(二级) 传Id 1本科 2 专科 + + + + + + + 根据分数获取个性推荐学校 + + + + + + + 懒人模式 + 办学性质 + 高校级别 + 专业ids + + + + + + + 根据计划Ids 获取招生计划 + + + + + + + 根据年份省份获取批次 + + + + + + 冲稳保获取推荐学校专业 + + + + + + + 冲稳保详情 + + + + + + + 霍兰德推荐学校专业 + + + + + + + 获取分析结果录取概率 获取之后保存一下 + + + + + + + 获取概率历史记录列表 + + + + + + 保存志愿表 + + + + + + + 获取个人志愿列表 传Id + + + + + + + 获取志愿表详情 传Id + + + + + + + 删除志愿表 + + + + + + + 获取一键生成的志愿表 + + + + + + + 获取霍兰德一键生成的志愿表 + + + + + + + 获取喜欢的院校 + + + + + + + 专业规划 + + + + + + 获取批次 + + + + + + + 下订单 + + + + + + 支付返回值 + + + + + + 统一下单 + @param WxPaydata inputObj 提交给统一下单API的参数 + @param int timeOut 超时时间 + @throws WePayException + @return 成功时返回,其他抛异常 + + + + 生成随机数 + + + + + + POST请求 + + + + application/xml、application/json、application/text、application/x-www-form-urlencoded + + + + + + + 省市区操作类 + + + + + 根据ID获取 + + + + + + + 根据level和parentId获取省市区列表信息 + + + + + + + 获取省市区 + + + + + + + 博客管理 + + + + + 构造函数 + + + + + + + 获取博客列表【无权限】 + + + + + + + + + + 获取博客详情 + + + + + + + 获取详情【无权限】 + + + + + + + 获取博客测试信息 v2版本 + + + + + + 添加博客【无权限】 + + + + + + + + + + + + + + 更新博客信息 + + + + + + + 删除博客 + + + + + + + apache jemeter 压力测试 + 更新接口 + + + + + + 构造函数 + + + + + 获取 整体框架 文件 + + + + + + 根据数据库表名 生成整体框架 + 仅针对通过CodeFirst生成表的情况 + + 数据库链接名称 + 需要生成的表名 + + + + + DbFrist 根据数据库表名 生成整体框架,包含Model层 + + 数据库链接名称 + 需要生成的表名 + + + + + 获取权限部分Map数据(从库) + 迁移到新库(主库) + + + + + + 权限数据库导出tsv + + + + + + 健康检查 + + + + + 健康检查接口 + + + + + + 图片管理 + + + + + 下载图片(支持中文字符) + + + + + + + 上传图片,多文件,可以使用 postman 测试, + 如果是单文件,可以 参数写 IFormFile file1 + + + + + + + 上传图片 + + + + + + + 登录管理【无权限】 + + + + + 构造函数注入 + + + + + + + + + + 获取JWT的方法1 + + + + + + + + 获取JWT的方法2:给Nuxt提供 + + + + + + + + 获取JWT的方法3:整个系统主要方法 + + + + + + + + 请求刷新Token(以旧换新) + + + + + + + 获取JWT的方法4:给 JSONP 测试 + + + + + + + + + + + 测试 MD5 加密字符串 + + + + + + + 接口管理 + + + + + 获取全部接口api + + + + + + + + 添加一条接口信息 + + + + + + + 更新接口信息 + + + + + + + 删除一条接口 + + + + + + + 服务器配置信息 + + + + + + SignalR send data + + + + + + 菜单管理 + + + + + 构造函数 + + + + + + + + + + + + 获取菜单 + + + + + + + + 查询树形 Table + + 父节点 + 关键字 + + + + + 添加一个菜单 + + + + + + + 保存菜单权限分配 + + + + + + + 获取菜单树 + + + + + + + + 获取路由树 + + + + + + + 通过角色获取菜单【无权限】 + + + + + + + 更新菜单 + + + + + + + 删除菜单 + + + + + + + 角色管理 + + + + + 获取全部角色 + + + + + + + + 添加角色 + + + + + + + 更新角色 + + + + + + + 删除角色 + + + + + + + 分页获取 + + + + + + + + 添加计划任务 + + + + + + + 修改计划任务 + + + + + + + 启动计划任务 + + + + + + + 停止一个计划任务 + + + + + + + 重启一个计划任务 + + + + + + + 类别管理【无权限】 + + + + + 构造函数 + + + + + + 获取Tibug所有分类 + + + + + + Tibug 管理 + + + + + 构造函数 + + + + + + + 获取Bug数据列表(带分页) + 【无权限】 + + 页数 + 专题类型 + 关键字 + + + + + + 获取详情【无权限】 + + + + + + + 添加一个 BUG 【无权限】 + + + + + + + 更新 bug + + + + + + + 删除 bug + + + + + + + 测试事务在AOP中的使用 + + + + + + + 用户管理 + + + + + 构造函数 + + + + + + + + + + + 获取全部用户 + + + + + + + + 获取用户详情根据token + 【无权限】 + + 令牌 + + + + + 添加一个用户 + + + + + + + 更新用户与角色 + + + + + + + 删除用户 + + + + + + + 用户角色关系 + + + + + 构造函数 + + + + + + + + 新建用户 + + + + + + + + 新建Role + + + + + + + 新建用户角色关系 + + + + + + + + Values控制器 + + + + + ValuesController + + + + + + + + + + + + + + Get方法 + + + + + + Get(int id)方法 + + + + + + + 测试参数是必填项 + + + + + + + 通过 HttpContext 获取用户信息 + + 声明类型,默认 jti + + + + + to redirect by route template name. + + + + + route with template name. + + + + + + 测试 post 一个对象 + 独立参数 + + model实体类参数 + 独立参数 + + + + 测试 post 参数 + + + + + + + 测试http请求 RestSharp Get + + + + + + 测试http请求 RestSharp Post + + + + + + 测试多库连接 + + + + + + 测试http请求 WebApiClient Get + + + + + + Put方法 + + + + + + + Delete方法 + + + + + + 自定义路由 /api/{version}/[controler]/[action] + + + + + 分组名称,是来实现接口 IApiDescriptionGroupNameProvider + + + + + 自定义路由构造函数,继承基类路由 + + + + + + 自定义版本+路由构造函数,继承基类路由 + + + + + + + Summary:全局路由权限公约 + Remarks:目的是针对不同的路由,采用不同的授权过滤器 + 如果 controller 上不加 [Authorize] 特性,默认都是 Permission 策略 + 否则,如果想特例其他授权机制的话,需要在 controller 上带上 [Authorize],然后再action上自定义授权即可,比如 [Authorize(Roles = "Admin")] + + + + + 全局权限过滤器【无效】 + + + + + 全局异常错误日志 + + + + + 自定义返回格式 + + + + + + + + 生产环境的消息 + + + + + 开发环境的消息 + + + + + 全局路由前缀公约 + + + + + 加载配置文件,构建IConfigurationRoot + + + + + 获取配置文件中的内容,继承自IConfiguration + + + + diff --git a/New_College.Api/Program.cs b/New_College.Api/Program.cs new file mode 100644 index 0000000..8ff2f9d --- /dev/null +++ b/New_College.Api/Program.cs @@ -0,0 +1,63 @@ +using Autofac.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using System.IO; + +namespace New_College +{ + public class Program + { + /// + /// 加载配置文件,构建IConfigurationRoot + /// + private static readonly IConfigurationBuilder ConfigurationBuilder = new ConfigurationBuilder(); + /// + /// 获取配置文件中的内容,继承自IConfiguration + /// + private static IConfigurationRoot _configuration; + + public static void Main(string[] args) + { + _configuration = ConfigurationBuilder + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile(cfg => + { + cfg.Path = "appsettings.json"; + cfg.ReloadOnChange = true; + cfg.Optional = false; + }) + //Build方法的调用要在AddJsonFile之后,否则生成的IConfigurationRoot实例的 + //Providers属性不包含任何元素而导致无法读取文件中的信息 + .Build(); + + var url = _configuration.GetSection("urls"); + //初始化默认主机Builder + Host.CreateDefaultBuilder(args) + .UseServiceProviderFactory(new AutofacServiceProviderFactory()) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder + .UseStartup() + .UseUrls(url.Value) + .ConfigureLogging((hostingContext, builder) => + { + //过滤掉系统默认的一些日志 + builder.AddFilter("System", LogLevel.Error); + builder.AddFilter("Microsoft", LogLevel.Error); + builder.AddFilter("New_College.AuthHelper.ApiResponseHandler", LogLevel.Error); + + //可配置文件 + var path = Path.Combine(Directory.GetCurrentDirectory(), "Log4net.config"); + builder.AddLog4Net(path); + }); + }) + // 生成承载 web 应用程序的 Microsoft.AspNetCore.Hosting.IWebHost。Build是WebHostBuilder最终的目的,将返回一个构造的WebHost,最终生成宿主。 + .Build() + // 运行 web 应用程序并阻止调用线程, 直到主机关闭。 + // ※※※※ 有异常,查看 Log 文件夹下的异常日志 ※※※※ + .Run(); + } + } +} diff --git a/New_College.Api/Properties/launchSettings.json b/New_College.Api/Properties/launchSettings.json new file mode 100644 index 0000000..de44141 --- /dev/null +++ b/New_College.Api/Properties/launchSettings.json @@ -0,0 +1,34 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:60716", + "sslPort": 0 + } + }, + "$schema": "http://json.schemastore.org/launchsettings.json", + "profiles": { + "New_College": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:8083" + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "publishAllPorts": true + } + } +} \ No newline at end of file diff --git a/New_College.Api/Startup.cs b/New_College.Api/Startup.cs new file mode 100644 index 0000000..9e494b8 --- /dev/null +++ b/New_College.Api/Startup.cs @@ -0,0 +1,226 @@ +using Autofac; +using New_College.Common; +using New_College.Common.LogHelper; +using New_College.Extensions; +using New_College.Filter; +using New_College.Hubs; +using New_College.IServices; +using New_College.Middlewares; +using New_College.Model.Seed; +using New_College.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Server.Kestrel.Core; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using System.Reflection; +using New_College.Model.ViewModels; +using Essensoft.AspNetCore.Payment.WeChatPay; +using Essensoft.AspNetCore.Payment.Alipay; + +namespace New_College +{ + public class Startup + { + + private IServiceCollection _services; + + public Startup(IConfiguration configuration, IWebHostEnvironment env) + { + Configuration = configuration; + Env = env; + } + + public IConfiguration Configuration { get; } + public IWebHostEnvironment Env { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + // 以下code可能与文章中不一样,对代码做了封装,具体查看右侧 Extensions 文件夹. + services.AddSingleton(); + services.AddSingleton(new Appsettings(Configuration)); + services.AddSingleton(new LogLock(Env.ContentRootPath)); + + Permissions.IsUseIds4 = Appsettings.app(new string[] { "Startup", "IdentityServer4", "Enabled" }).ObjToBool(); + //短信配置 + AliyunSmsSenderConfig.accessKeyId = Appsettings.app(new string[] { "AliyunSmsSenderConfig", "accessKeyId" }).ObjToString(); + AliyunSmsSenderConfig.accessKeySecret = Appsettings.app(new string[] { "AliyunSmsSenderConfig", "accessKeySecret" }).ObjToString(); + + WeixinConfig.Appid = Appsettings.app(new string[] { "Weixin", "Appid" }).ObjToString(); + WeixinConfig.Secret = Appsettings.app(new string[] { "Weixin", "Secret" }).ObjToString(); + WeixinConfig.MCHID = Appsettings.app(new string[] { "Weixin", "MCHID" }).ObjToString(); + WeixinConfig.KEY = Appsettings.app(new string[] { "Weixin", "KEY" }).ObjToString(); + WeixinConfig.NotifyUrl = Appsettings.app(new string[] { "Weixin", "NotifyUrl" }).ObjToString(); + + //阿里云oss配置 + AliYunOssConfig.wendpoint = Appsettings.app(new string[] { "AliYunOss", "wendpoint" }).ObjToString(); + AliYunOssConfig.accessKeyId = Appsettings.app(new string[] { "AliYunOss", "accessKeyId" }).ObjToString(); + AliYunOssConfig.accessKeySecret = Appsettings.app(new string[] { "AliYunOss", "accessKeySecret" }).ObjToString(); + AliYunOssConfig.bucket = Appsettings.app(new string[] { "AliYunOss", "bucket" }).ObjToString(); + AliYunOssConfig.endpoint = Appsettings.app(new string[] { "AliYunOss", "endpoint" }).ObjToString(); + + ////微信app支付 + //WeiXinPayConfig.NotifyUrl= Appsettings.app(new string[] { "WeChatPay", "NotifyUrl" }).ObjToString(); + //WeiXinPayConfig.APP_ID= Appsettings.app(new string[] { "WeChatPay", "AppId" }).ObjToString(); + //WeiXinPayConfig.MCHID= Appsettings.app(new string[] { "WeChatPay", "MchId" }).ObjToString(); + ////支付宝app支付 + //AliPayConfig.APP_ID = Appsettings.app(new string[] { "Alipay", "AppId" }).ObjToString(); + //AliPayConfig.APP_PRIVATE_KEY = Appsettings.app(new string[] { "Alipay", "AppPrivateKey" }).ObjToString(); + //AliPayConfig.ALIPAY_PUBLIC_KEY = Appsettings.app(new string[] { "Alipay", "AlipayPublicKey" }).ObjToString(); + //AliPayConfig.CHARSET = Appsettings.app(new string[] { "Alipay", "CHARSET" }).ObjToString(); + //AliPayConfig.NotifyUrl = Appsettings.app(new string[] { "Alipay", "NotifyUrl" }).ObjToString(); + //支付信息传入 + //PayInfoQuery.CreateIp= Appsettings.app(new string[] { "PayInfoQuery", "CreateIp" }).ObjToString(); + //PayInfoQuery.ApiUrl= Appsettings.app(new string[] { "PayInfoQuery", "ApiUrl" }).ObjToString(); + + //支付注入 + //services.AddAlipay(); + //services.AddWeChatPay(); + + //services.Configure(Configuration.GetSection("WeChatPay")); + //services.Configure(Configuration.GetSection("Alipay")); + + + + services.AddMemoryCacheSetup(); + services.AddSqlsugarSetup(); + services.AddDbSetup(); + services.AddAutoMapperSetup(); + services.AddCorsSetup(); + services.AddMiniProfilerSetup(); + services.AddSwaggerSetup(); + services.AddJobSetup(); + services.AddHttpContextSetup(); + services.AddAppConfigSetup(); + services.AddHttpApi(); + + // 授权+认证 (jwt or ids4) + services.AddAuthorizationSetup(); + if (Permissions.IsUseIds4) + { + services.AddAuthentication_Ids4Setup(); + } + else + { + services.AddAuthentication_JWTSetup(); + } + + services.AddIpPolicyRateLimitSetup(Configuration); + + services.AddSignalR().AddNewtonsoftJsonProtocol(); + + services.AddScoped(); + + services.Configure(x => x.AllowSynchronousIO = true) + .Configure(x => x.AllowSynchronousIO = true); + + services.AddControllers(o => + { + // 全局异常过滤 + o.Filters.Add(typeof(GlobalExceptionsFilter)); + // 全局路由权限公约 + //o.Conventions.Insert(0, new GlobalRouteAuthorizeConvention()); + // 全局路由前缀,统一修改路由 + o.Conventions.Insert(0, new GlobalRoutePrefixFilter(new RouteAttribute(RoutePrefix.Name))); + }) + //全局配置Json序列化处理 + .AddNewtonsoftJson(options => + { + //忽略循环引用 + options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; + //不使用驼峰样式的key + options.SerializerSettings.ContractResolver = new DefaultContractResolver(); + //设置时间格式 + //options.SerializerSettings.DateFormatString = "yyyy-MM-dd"; + }); + + _services = services; + } + + // 注意在Program.CreateHostBuilder,添加Autofac服务工厂 + public void ConfigureContainer(ContainerBuilder builder) + { + builder.RegisterModule(new AutofacModuleRegister()); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, MyContext myContext, ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter, IHostApplicationLifetime lifetime) + { + // Ip限流,尽量放管道外层 + //app.UseIpLimitMildd(); + // 记录请求与返回数据 + app.UseReuestResponseLog(); + // signalr + app.UseSignalRSendMildd(); + // 记录ip请求 + app.UseIPLogMildd(); + // 查看注入的所有服务 + app.UseAllServicesMildd(_services); + + if (env.IsDevelopment()) + { + // 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。 + app.UseDeveloperExceptionPage(); + } + else + { + app.UseExceptionHandler("/Error"); + // 在非开发环境中,使用HTTP严格安全传输(or HSTS) 对于保护web安全是非常重要的。 + // 强制实施 HTTPS 在 ASP.NET Core,配合 app.UseHttpsRedirection + //app.UseHsts(); + } + + // 封装Swagger展示 + app.UseSwaggerMildd(() => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("New_College.Api.index.html")); + + // ↓↓↓↓↓↓ 注意下边这些中间件的顺序,很重要 ↓↓↓↓↓↓ + + // CORS跨域 + app.UseCors(Appsettings.app(new string[] { "Startup", "Cors", "PolicyName" })); + // 跳转https + //app.UseHttpsRedirection(); + // 使用静态文件 + app.UseStaticFiles(); + // 使用cookie + app.UseCookiePolicy(); + // 返回错误码 + app.UseStatusCodePages(); + // Routing + app.UseRouting(); + // 这种自定义授权中间件,可以尝试,但不推荐 + // app.UseJwtTokenAuth(); + // 先开启认证 + app.UseAuthentication(); + // 然后是授权中间件 + app.UseAuthorization(); + // 开启异常中间件,要放到最后 + //app.UseExceptionHandlerMidd(); + // 性能分析 + app.UseMiniProfiler(); + // 用户访问记录 + app.UseRecordAccessLogsMildd(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + + endpoints.MapHub("/api2/chatHub"); + }); + + // 生成种子数据 + app.UseSeedDataMildd(myContext, Env.WebRootPath); + // 开启QuartzNetJob调度服务 + app.UseQuartzJobMildd(tasksQzServices, schedulerCenter); + //服务注册 + app.UseConsulMildd(Configuration, lifetime); + } + + } +} diff --git a/New_College.Api/appsettings.Development.json b/New_College.Api/appsettings.Development.json new file mode 100644 index 0000000..e203e94 --- /dev/null +++ b/New_College.Api/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/New_College.Api/appsettings.json b/New_College.Api/appsettings.json new file mode 100644 index 0000000..5ce9ebb --- /dev/null +++ b/New_College.Api/appsettings.json @@ -0,0 +1,210 @@ +{ + "Weixin": { + "Appid": "wx6d433f70416c37d4", + "Secret": "d7cb43cd2546f04f87c04d6ffd5fa9be", + //MCHID + "MCHID": "1600580140", + //MCHKey + "KEY": "sa6328ahwqiuyoa923zaswq7ed021mns", + //NotifyUrl + "NotifyUrl": "http://*:8082/api/WeixinPay/PayNotify" + }, + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Warning" + } + }, + "Console": { + "LogLevel": { + "Default": "Warning", + "Microsoft.Hosting.Lifetime": "Debug" + } + }, + "Log4Net": { + "Name": "New_College" + } + }, + "urls": "http://*:8083", // IIS 部署,注释掉 + "AllowedHosts": "*", + "AppSettings": { + "RedisCachingAOP": { + "Enabled": true, + "ConnectionString": "127.0.0.1:6379", + "Password": "Vs_.127134" + }, + "MemoryCachingAOP": { + "Enabled": true + }, + "LogAOP": { + "Enabled": false + }, + "TranAOP": { + "Enabled": false + }, + "SqlAOP": { + "Enabled": false + }, + "Date": "2018-08-28", + "SeedDBEnabled": true, //只生成表结构 + "SeedDBDataEnabled": true, //生成表,并初始化数据 + "Author": "New_College" + }, + + // 请配置MainDB为你想要的主库的ConnId值,并设置对应的Enabled为true; + // *** 单库操作,把 MutiDBEnabled 设为false ***; + // *** 多库操作,把 MutiDBEnabled 设为true,其他的从库Enabled也为true **; + // 具体配置看视频:https://www.bilibili.com/video/BV1BJ411B7mn?p=6 + + "MainDB": "WMBLOG_MYSQL", //当前项目的主库,所对应的连接字符串的Enabled必须为true + "MutiDBEnabled": false, //是否开启多库模式 + "CQRSEnabled": false, //是否开启读写分离模式,必须是单库模式,且数据库类型一致,比如都是SqlServer + "DBS": [ + /* + 对应下边的 DBType + MySql = 0, + SqlServer = 1, + Sqlite = 2, + Oracle = 3, + PostgreSQL = 4 + */ + { + "ConnId": "WMBLOG_SQLITE", + "DBType": 2, + "Enabled": false, + "HitRate": 50, // 值越大,优先级越高 + "Connection": "WMBlog.db" //sqlite只写数据库名就行 + }, + { + "ConnId": "WMBLOG_MSSQL_1", + "DBType": 1, + "Enabled": false, + "HitRate": 40, + "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "ProviderName": "System.Data.SqlClient" + }, + { + "ConnId": "WMBLOG_MSSQL_2", + "DBType": 1, + "Enabled": false, + "HitRate": 30, + "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "ProviderName": "System.Data.SqlClient" + }, + { + "ConnId": "WMBLOG_MYSQL", + "DBType": 0, + "Enabled": true, + "HitRate": 20, + "Connection": "Server=47.103.130.88; Port=3306;SslMode=None;Database=new_college; Uid=root; Pwd=Vs..127134;CharSet=utf8mb4" + }, + { + "ConnId": "WMBLOG_ORACLE", + "DBType": 3, + "Enabled": false, + "HitRate": 10, + "Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;", + "OracleConnection_other1": "User ID=sss;Password=789;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.65)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = orcl)))" + } + ], + "Audience": { + "Secret": "sdfsdfsrty45634kkhllghtdgdfss345t678fs", //不要太短,16位+ + "SecretFile": "C:\\my-file\\new_college.audience.secret.txt", //安全。内容就是Secret + "Issuer": "New_College", + "Audience": "wr" + }, + "Startup": { + "Cors": { + "PolicyName": "CorsIpAccess", //策略名称 + "EnableAllIPs": true, //是否应用所有的IP + // 支持多个域名端口,注意端口号后不要带/斜杆:比如localhost:8000/,是错的 + // 注意,http://127.0.0.1:1818 和 http://localhost:1818 是不一样的 + "IPs": "http://127.0.0.1:2364,http://localhost:2364,http://127.0.0.1:6391,http://localhost:6391,http://127.0.0.1:8080,http://localhost:8080,http://web.riyuemedia.cn,https://payment.riyuemedia.cn" + }, + "AppConfigAlert": { + "Enabled": true + }, + "ApiName": "New_College", + "IdentityServer4": { + "Enabled": false, // 这里默认是false,表示使用jwt,如果设置为true,则表示系统使用Ids4模式 + "AuthorizationUrl": "https://ids.neters.club", // 认证中心域名 + "ApiName": "new_college.api" // 资源服务器 + } + }, + "Middleware": { + "RequestResponseLog": { + "Enabled": false + }, + "IPLog": { + "Enabled": true + }, + "RecordAccessLogs": { + "Enabled": true + }, + "SignalR": { + "Enabled": false + }, + "QuartzNetJob": { + "Enabled": true + }, + "Consul": { + "Enabled": false + }, + "IpRateLimit": { + "Enabled": true + } + }, + "IpRateLimiting": { + "EnableEndpointRateLimiting": true, //False: globally executed, true: executed for each + "StackBlockedRequests": false, //False: Number of rejections should be recorded on another counter + "RealIpHeader": "X-Real-IP", + "ClientIdHeader": "X-ClientId", + "IpWhitelist": [], //ip访问白名单 + "EndpointWhitelist": [ "get:/api/xxx", "*:/api/yyy" ], + "ClientWhitelist": [ "dev-client-1", "dev-client-2" ], + "HttpStatusCode": 429, //返回状态码 + "GeneralRules": [ //api规则,结尾一定要带* + { + "Endpoint": "*:/api/blog*", + "Period": "1m", + "Limit": 20000 + }, + { + "Endpoint": "*/api/*", + "Period": "1s", + "Limit": 3000 + }, + { + "Endpoint": "*/api/*", + "Period": "1m", + "Limit": 300000 + }, + { + "Endpoint": "*/api/*", + "Period": "12h", + "Limit": 5000000 + } + ] + + }, + "ConsulSetting": { + "ServiceName": "BlogCoreService", + "ServiceIP": "localhost", + "ServicePort": "8081", + "ServiceHealthCheck": "/healthcheck", + "ConsulAddress": "http://localhost:8500" + }, + "AliyunSmsSenderConfig": { + "accessKeyId": "LTAI4GK6SGUmMX3J9Wyzyt6C", + "accessKeySecret": "vTUjL4so42kiuctWEb6WoaxtXs3MLS" + }, + + "AliYunOss": { + "wendpoint": "http://yrtsedu.oss-cn-shanghai.aliyuncs.com/", + "accessKeyId": "LTAI4GBVp1V6CVGpuHdznRLw", + "accessKeySecret": "JVcuywn3ZU5dhFEgvcfzIxoMRm0qVs", + "bucket": "yrtsedu", + "endpoint": "http://oss-cn-shanghai.aliyuncs.com" + } +} diff --git a/New_College.Api/index.html b/New_College.Api/index.html new file mode 100644 index 0000000..6a88948 --- /dev/null +++ b/New_College.Api/index.html @@ -0,0 +1,137 @@ + + + + + + + + + + + %(DocumentTitle) + + + + + + + %(HeadContent) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/BlogArticle.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/BlogArticle.tsv new file mode 100644 index 0000000..2bd7067 --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/BlogArticle.tsv @@ -0,0 +1,15 @@ +[ + { + "bID": 1, + "bsubmitter": "admin", + "btitle": "测试数据:IIS new add website ,some wrong:The requested page cannot be accessed because the related configuration data for the page is invalid.", + "bcategory": "技术博文", + "bcontent": "

问题:

The requested page cannot be accessed because the related configuration data for the page is invalid.

HTTP Error 500.19 - Internal Server Error The requested page cannot be accessed because the related configuration data for the page is invalid.

Detailed Error Information:

Module IIS Web Core

Notification Unknown

Handler Not yet determined

Error Code 0x80070003

Config Error Cannot read configuration file

Config File \\?\\D:\\Projects\\...\\web.config

Requested URL http:// localhost:8080/

Physical Path

Logon Method Not yet determined

Logon User Not yet determined

Request Tracing Directory C:\\Users\\...\\TraceLogFiles\\

Config Source:

Answer:

1,find the site's application pools

2,\"Advanced Settings\" ==> Indentity ==>  Custom account



", + "btraffic": 127, + "bcommentNum": 1, + "bUpdateTime": "\/Date(1546272000000+0800)\/", + "bCreateTime": "\/Date(1546272000000+0800)\/", + "bRemark": null, + "IsDeleted": "0" + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/Modules.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/Modules.tsv new file mode 100644 index 0000000..446327d --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/Modules.tsv @@ -0,0 +1,926 @@ +[ + { + "IsDeleted": "0", + "ParentId": null, + "Name": "values接口", + "LinkUrl": "\/api\/values", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 1, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 1 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "claims的接口", + "LinkUrl": "\/api\/claims", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 1, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 2 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "UserRole接口", + "LinkUrl": "\/api\/UserRole", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 1, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 3 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": null, + "LinkUrl": "\/api\/v2\/Apb\/apbs", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 1, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 4 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "修改 tibug 文章", + "LinkUrl": "\/api\/TopicDetail\/update", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 1, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 5 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "删除tibug文章", + "LinkUrl": "\/api\/TopicDetail\/delete", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 1, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 6 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取用户", + "LinkUrl": "\/api\/user\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 1, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 7 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取用户详情", + "LinkUrl": "\/api\/user\/get\/\\d+", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 1, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 8 + }, + { + "IsDeleted": "1", + "ParentId": null, + "Name": "角色接口", + "LinkUrl": "\/api\/role", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 9 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "添加用户", + "LinkUrl": "\/api\/user\/post", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 10 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "删除用户", + "LinkUrl": "\/api\/user\/delete", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 11 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "修改用户", + "LinkUrl": "\/api\/user\/put", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 12 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取api接口", + "LinkUrl": "\/api\/module\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 13 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "删除api接口", + "LinkUrl": "\/api\/module\/delete", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 14 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "修改api接口", + "LinkUrl": "\/api\/module\/put", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 15 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "添加api接口", + "LinkUrl": "\/api\/module\/post", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 16 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取菜单", + "LinkUrl": "\/api\/permission\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 17 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "删除菜单", + "LinkUrl": "\/api\/permission\/delete", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 18 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "修改菜单", + "LinkUrl": "\/api\/permission\/put", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 19 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "添加菜单", + "LinkUrl": "\/api\/permission\/post", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 20 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取菜单树", + "LinkUrl": "\/api\/permission\/getpermissiontree", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 21 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取角色", + "LinkUrl": "\/api\/role\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 22 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "删除角色", + "LinkUrl": "\/api\/role\/delete", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 23 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "修改角色", + "LinkUrl": "\/api\/role\/put", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 24 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "添加角色", + "LinkUrl": "\/api\/role\/post", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 25 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取bug", + "LinkUrl": "\/api\/TopicDetail\/Get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 26 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取博客", + "LinkUrl": "\/api\/Blog", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 27 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "保存分配", + "LinkUrl": "\/api\/permission\/Assign", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 28 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "Get导航条", + "LinkUrl": "\/api\/permission\/GetNavigationBar", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 29 + }, + { + "IsDeleted": "1", + "ParentId": null, + "Name": "test", + "LinkUrl": "\/api\/Blog\/delete1", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 30 + }, + { + "IsDeleted": "1", + "ParentId": null, + "Name": "test", + "LinkUrl": "\/api\/Blog\/delete2", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 31 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "删除博客", + "LinkUrl": "\/api\/Blog\/delete", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 32 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取全部日志", + "LinkUrl": "\/api\/Monitor\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 33 + }, + { + "IsDeleted": "1", + "ParentId": null, + "Name": "Agent -测试- 快速添加接口权限", + "LinkUrl": "\/api\/Agent\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 34 + }, + { + "IsDeleted": "1", + "ParentId": null, + "Name": "test", + "LinkUrl": "\/api\/test\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 35 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "Department - 测试新建api - 部门管控", + "LinkUrl": "\/api\/Department\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 36 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "获取任务调取分页", + "LinkUrl": "\/api\/TasksQz\/get", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 37 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "添加任务", + "LinkUrl": "\/api\/TasksQz\/Post", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 38 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "编辑任务", + "LinkUrl": "\/api\/TasksQz\/put", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 39 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "开启任务", + "LinkUrl": "\/api\/TasksQz\/StartJob", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 40 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "停止任务", + "LinkUrl": "\/api\/TasksQz\/StopJob", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 41 + }, + { + "IsDeleted": "0", + "ParentId": null, + "Name": "重启任务", + "LinkUrl": "\/api\/TasksQz\/ReCovery", + "Area": null, + "Controller": null, + "Action": null, + "Icon": null, + "Code": null, + "OrderSort": 0, + "Description": null, + "IsMenu": "0", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 42 + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/Permission.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/Permission.tsv new file mode 100644 index 0000000..d3f1ef1 --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/Permission.tsv @@ -0,0 +1,1670 @@ +[ + { + "Code": "\/", + "Name": "QQ欢迎页", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-qq", + "Description": "33", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 1, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "用户角色管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-users", + "Description": "11", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 2, + "IsHide": "0" + }, + { + "Code": "\/User\/Roles", + "Name": "角色管理", + "IsButton": "0", + "Pid": 2, + "Mid": 22, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 3, + "IsHide": "0" + }, + { + "Code": "\/User\/Users", + "Name": "用户管理", + "IsButton": "0", + "Pid": 2, + "Mid": 7, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 4, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "菜单权限管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-sitemap", + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 5, + "IsHide": "0" + }, + { + "Code": "\/Permission\/Module", + "Name": "接口管理", + "IsButton": "0", + "Pid": 5, + "Mid": 13, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 6, + "IsHide": "0" + }, + { + "Code": "\/Permission\/Permission", + "Name": "菜单管理", + "IsButton": "0", + "Pid": 5, + "Mid": 17, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 7, + "IsHide": "0" + }, + { + "Code": "\/Thanks", + "Name": "致谢页", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 5, + "Icon": "fa-star ", + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 8, + "IsHide": "0" + }, + { + "Code": "无", + "Name": "查询", + "IsButton": "1", + "Pid": 4, + "Mid": 7, + "OrderSort": 0, + "Icon": null, + "Description": "这个用户页的查询按钮", + "Enabled": "1", + "Func": "getUsers", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 9, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "报表管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-line-chart", + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 10, + "IsHide": "0" + }, + { + "Code": "\/Form\/Charts", + "Name": "图表", + "IsButton": "0", + "Pid": 10, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 11, + "IsHide": "0" + }, + { + "Code": "\/Form\/Form", + "Name": "表单", + "IsButton": "0", + "Pid": 10, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 12, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "新增", + "IsButton": "1", + "Pid": 4, + "Mid": 10, + "OrderSort": 0, + "Icon": null, + "Description": "新增用户", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "Func": "handleAdd", + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 13, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "编辑", + "IsButton": "1", + "Pid": 4, + "Mid": 12, + "OrderSort": 0, + "Icon": null, + "Description": "编辑用户", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "Func": "handleEdit", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 14, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "删除", + "IsButton": "1", + "Pid": 4, + "Mid": 11, + "OrderSort": 0, + "Icon": null, + "Description": "删除用户", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "Func": "handleDel", + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 15, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 3, + "Mid": 22, + "OrderSort": 0, + "Icon": null, + "Description": "查询 角色", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Func": "getRoles", + "IsDeleted": "0", + "Id": 16, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "新增", + "IsButton": "1", + "Pid": 3, + "Mid": 25, + "OrderSort": 0, + "Icon": null, + "Description": "新增 角色", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Func": "handleAdd", + "IsDeleted": "0", + "Id": 17, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "编辑", + "IsButton": "1", + "Pid": 3, + "Mid": 24, + "OrderSort": 0, + "Icon": null, + "Description": "编辑角色", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Func": "handleEdit", + "IsDeleted": "0", + "Id": 18, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "删除", + "IsButton": "1", + "Pid": 3, + "Mid": 23, + "OrderSort": 0, + "Icon": null, + "Description": "删除角色", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Func": "handleDel", + "IsDeleted": "0", + "Id": 19, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 6, + "Mid": 13, + "OrderSort": 0, + "Icon": null, + "Description": "查询 接口", + "Func": "getModules", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 20, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "新增", + "IsButton": "1", + "Pid": 6, + "Mid": 16, + "OrderSort": 0, + "Icon": null, + "Description": "新增 接口", + "Enabled": "1", + "Func": "handleAdd", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 21, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "编辑", + "IsButton": "1", + "Pid": 6, + "Mid": 15, + "OrderSort": 0, + "Icon": null, + "Description": "编辑 接口", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "Func": "handleEdit", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 22, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "删除", + "IsButton": "1", + "Pid": 6, + "Mid": 14, + "OrderSort": 0, + "Icon": null, + "Description": "删除接口", + "Enabled": "1", + "CreateId": 18, + "Func": "handleDel", + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 23, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 7, + "Mid": 17, + "OrderSort": 0, + "Icon": null, + "Description": "查询 菜单", + "Func": "getPermissions", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 24, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "新增", + "IsButton": "1", + "Pid": 7, + "Mid": 20, + "OrderSort": 0, + "Icon": null, + "Description": "新增菜单", + "Enabled": "1", + "Func": "handleAdd", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 25, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "编辑", + "IsButton": "1", + "Pid": 7, + "Mid": 19, + "OrderSort": 0, + "Icon": null, + "Description": "编辑菜单", + "Enabled": "1", + "Func": "handleEdit", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 26, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "删除", + "IsButton": "1", + "Pid": 7, + "Mid": 18, + "OrderSort": 0, + "Icon": null, + "Description": "删除 菜单", + "Enabled": "1", + "CreateId": 18, + "Func": "handleDel", + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 27, + "IsHide": "0" + }, + { + "Code": "\/Tibug\/Bugs", + "Name": "TiBug", + "IsButton": "0", + "Pid": 42, + "Mid": 26, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 28, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "博客管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-file-word-o", + "Description": null, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 29, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "编辑", + "IsButton": "1", + "Pid": 28, + "Mid": 5, + "OrderSort": 0, + "Icon": null, + "Description": "编辑 tibug ", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "Func": "handleEdit", + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 30, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "删除", + "IsButton": "1", + "Pid": 28, + "Mid": 6, + "OrderSort": 0, + "Icon": null, + "Description": "删除 tibug", + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "Func": "handleDel", + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 31, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 28, + "Mid": 26, + "OrderSort": 0, + "Icon": null, + "Description": "查询 tibug", + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "Func": "getBugs", + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 32, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "菜单树", + "IsButton": "1", + "Pid": 7, + "Mid": 21, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 33, + "IsHide": "1" + }, + { + "Code": "\/Permission\/Assign", + "Name": "权限分配", + "IsButton": "0", + "Pid": 5, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 34, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "保存权限", + "IsButton": "1", + "Pid": 34, + "Mid": 28, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 35, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "左侧导航", + "IsButton": "1", + "Pid": 7, + "Mid": 29, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 36, + "IsHide": "1" + }, + { + "Code": "-", + "Name": "测试页面管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-flask", + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 37, + "IsHide": "0" + }, + { + "Code": "\/TestShow\/TestOne", + "Name": "测试页面1", + "IsButton": "0", + "Pid": 37, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 38, + "IsHide": "0" + }, + { + "Code": "\/TestShow\/TestTwo", + "Name": "测试页面2", + "IsButton": "0", + "Pid": 37, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 39, + "IsHide": "0" + }, + { + "Code": "\/I18n\/index", + "Name": "国际化", + "IsButton": "0", + "Pid": 41, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 40, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "多语言管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-language", + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 41, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "问题管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-bug", + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 42, + "IsHide": "0" + }, + { + "Code": "\/Blog\/Blogs", + "Name": "博客", + "IsButton": "0", + "Pid": 29, + "Mid": 27, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 43, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "多级路由", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-sort-amount-asc", + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 44, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "Menu-1", + "IsButton": "0", + "Pid": 44, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 45, + "IsHide": "0" + }, + { + "Code": "\/Recursion\/Menu_1\/Menu_1_2", + "Name": "Menu-1-2", + "IsButton": "0", + "Pid": 45, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 46, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "Menu-1-1", + "IsButton": "0", + "Pid": 45, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 47, + "IsHide": "0" + }, + { + "Code": "\/Recursion\/Menu_1\/Menu_1_1\/Menu_1_1_1", + "Name": "Menu-1-1-1", + "IsButton": "0", + "Pid": 47, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 48, + "IsHide": "0" + }, + { + "Code": "\/Recursion\/Menu_1\/Menu_1_1\/Menu_1_1_2", + "Name": "Menu-1-1-2", + "IsButton": "0", + "Pid": 47, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 49, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 50, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 51, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 52, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 53, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 54, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 55, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 56, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 57, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 58, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 59, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 60, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 61, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 62, + "IsHide": "0" + }, + { + "Code": "s", + "Name": "s", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "0", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 63, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "删除", + "IsButton": "1", + "Pid": 43, + "Mid": 32, + "OrderSort": 0, + "Icon": null, + "Description": "删除博客按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "handleDel", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 64, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "日志管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 0, + "Icon": "fa-diamond", + "Description": null, + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 65, + "IsHide": "0" + }, + { + "Code": "\/Logs\/Index", + "Name": "全部日志", + "IsButton": "0", + "Pid": 65, + "Mid": 33, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 66, + "IsHide": "0" + }, + { + "Code": "\/Blog\/Detail\/:id", + "Name": "博客详情", + "IsButton": "0", + "Pid": 29, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 67, + "IsHide": "1" + }, + { + "Code": "-", + "Name": "系统管理", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 1, + "Icon": "el-icon-s-operation", + "Description": null, + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 68, + "IsHide": "0" + }, + { + "Code": "\/System\/My", + "Name": "个人中心", + "IsButton": "0", + "Pid": 68, + "Mid": 0, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 69, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 69, + "Mid": 34, + "OrderSort": 0, + "Icon": null, + "Description": "Agent 代理的查询接口", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 70, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 69, + "Mid": 35, + "OrderSort": 0, + "Icon": null, + "Description": "查询 部门 Department get", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "1", + "Id": 71, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 69, + "Mid": 36, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 72, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 43, + "Mid": 27, + "OrderSort": 0, + "Icon": null, + "Description": "查询博客按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "getBlogs", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 73, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "编辑", + "IsButton": "1", + "Pid": 43, + "Mid": 27, + "OrderSort": 0, + "Icon": null, + "Description": "编辑博客按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "handleEdit", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 74, + "IsHide": "0" + }, + { + "Code": "-", + "Name": "任务调度", + "IsButton": "0", + "Pid": 0, + "Mid": 0, + "OrderSort": 1, + "Icon": "fa-history", + "Description": null, + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 75, + "IsHide": "0" + }, + { + "Code": "\/Task\/QuartzJob", + "Name": "任务列表", + "IsButton": "0", + "Pid": 75, + "Mid": 37, + "OrderSort": 0, + "Icon": null, + "Description": null, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 76, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "查询", + "IsButton": "1", + "Pid": 76, + "Mid": 37, + "OrderSort": 0, + "Icon": null, + "Description": "查询任务按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "getTasks", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 77, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "添加", + "IsButton": "1", + "Pid": 76, + "Mid": 38, + "OrderSort": 0, + "Icon": null, + "Description": "添加任务按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "handleAdd", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 78, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "编辑", + "IsButton": "1", + "Pid": 76, + "Mid": 39, + "OrderSort": 0, + "Icon": null, + "Description": "编辑任务按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "handleEdit", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 79, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "开启", + "IsButton": "1", + "Pid": 76, + "Mid": 40, + "OrderSort": 0, + "Icon": null, + "Description": "开启任务按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "handleStartJob", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 80, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "暂停", + "IsButton": "1", + "Pid": 76, + "Mid": 41, + "OrderSort": 0, + "Icon": null, + "Description": "暂停任务按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "handleStopJob", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 81, + "IsHide": "0" + }, + { + "Code": " ", + "Name": "重启", + "IsButton": "1", + "Pid": 76, + "Mid": 42, + "OrderSort": 0, + "Icon": null, + "Description": "重启任务按钮", + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "Func": "handleReCoveryJob", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "IsDeleted": "0", + "Id": 82, + "IsHide": "0" + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/Role.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/Role.tsv new file mode 100644 index 0000000..510cbb1 --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/Role.tsv @@ -0,0 +1,408 @@ +[ + { + "IsDeleted": "0", + "Name": "Admin", + "Description": "普通管理", + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 1 + }, + { + "IsDeleted": "0", + "Name": "System", + "Description": "系统管理", + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 2 + }, + { + "IsDeleted": "0", + "Name": "Tibug", + "Description": "tibug系统管理", + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 3 + }, + { + "IsDeleted": "0", + "Name": "SuperAdmin", + "Description": "超级管理", + "OrderSort": 0, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "blogadmin", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 4 + }, + { + "IsDeleted": "1", + "Name": "AdminTest", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": 18, + "CreateBy": "提bug账号", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 5 + }, + { + "IsDeleted": "0", + "Name": "AdminTest", + "Description": "测试管理", + "OrderSort": 1, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 6 + }, + { + "IsDeleted": "0", + "Name": "AdminTest2", + "Description": "测试管理2", + "OrderSort": 1, + "Enabled": "1", + "CreateId": 23, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 7 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 8 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 9 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 10 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 11 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 12 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 13 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 14 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 15 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 16 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 17 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 18 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 19 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 20 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 21 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 22 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 23 + }, + { + "IsDeleted": "1", + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 24 + }, + { + "IsDeleted": null, + "Name": "sss", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 25 + }, + { + "IsDeleted": null, + "Name": "213", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 26 + }, + { + "IsDeleted": null, + "Name": "抬头填", + "Description": null, + "OrderSort": 1, + "Enabled": "1", + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 27 + }, + { + "IsDeleted": "0", + "Name": "hello1", + "Description": "测试 常用 get post put 请求", + "OrderSort": 1, + "Enabled": "1", + "CreateId": 12, + "CreateBy": "后台总管理员", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 28 + }, + { + "IsDeleted": "1", + "Name": "55", + "Description": "555", + "OrderSort": 1, + "Enabled": "0", + "CreateId": 39, + "CreateBy": "Kawhi", + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 29 + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/RoleModulePermission.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/RoleModulePermission.tsv new file mode 100644 index 0000000..bb624d0 --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/RoleModulePermission.tsv @@ -0,0 +1,1562 @@ +[ + { + "IsDeleted": "0", + "RoleId": 1, + "ModuleId": 1, + "PermissionId": null, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 1 + }, + { + "IsDeleted": "0", + "RoleId": 1, + "ModuleId": 2, + "PermissionId": null, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 2 + }, + { + "IsDeleted": "0", + "RoleId": 1, + "ModuleId": 3, + "PermissionId": null, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 3 + }, + { + "IsDeleted": "0", + "RoleId": 1, + "ModuleId": 4, + "PermissionId": null, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 4 + }, + { + "IsDeleted": "0", + "RoleId": 2, + "ModuleId": 4, + "PermissionId": null, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 5 + }, + { + "IsDeleted": "0", + "RoleId": 3, + "ModuleId": 5, + "PermissionId": 30, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 6 + }, + { + "IsDeleted": "0", + "RoleId": 3, + "ModuleId": 6, + "PermissionId": 31, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 7 + }, + { + "IsDeleted": "0", + "RoleId": 3, + "ModuleId": 7, + "PermissionId": 9, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 8 + }, + { + "IsDeleted": "0", + "RoleId": 3, + "ModuleId": 26, + "PermissionId": 28, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 9 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 7, + "PermissionId": 3, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 10 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 7, + "PermissionId": 9, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 11 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 10, + "PermissionId": 13, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 12 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 12, + "PermissionId": 14, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 13 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 11, + "PermissionId": 15, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 14 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 2, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 15 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 22, + "PermissionId": 4, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 16 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 22, + "PermissionId": 16, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 17 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 25, + "PermissionId": 17, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 18 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 24, + "PermissionId": 18, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 19 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 23, + "PermissionId": 19, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 20 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 1, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 21 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 5, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 22 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 13, + "PermissionId": 6, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 23 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 13, + "PermissionId": 20, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 24 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 16, + "PermissionId": 21, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 25 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 15, + "PermissionId": 22, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 26 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 14, + "PermissionId": 23, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 27 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 17, + "PermissionId": 7, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 28 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 17, + "PermissionId": 24, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 29 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 20, + "PermissionId": 25, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 30 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 19, + "PermissionId": 26, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 31 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 18, + "PermissionId": 27, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 32 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 8, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 33 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 10, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 34 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 11, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 35 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 12, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 36 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 26, + "PermissionId": 28, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 37 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 5, + "PermissionId": 30, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 38 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 6, + "PermissionId": 31, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 39 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 27, + "PermissionId": 29, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 40 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 26, + "PermissionId": 32, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 41 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 1, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 42 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 8, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 43 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 10, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 44 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 11, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 45 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 12, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 46 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 27, + "PermissionId": 29, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 47 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 2, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 48 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 7, + "PermissionId": 3, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 49 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 22, + "PermissionId": 4, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 50 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 5, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 51 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 13, + "PermissionId": 6, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 52 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 17, + "PermissionId": 7, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 53 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 26, + "PermissionId": 28, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 54 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 28, + "PermissionId": 34, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 55 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 21, + "PermissionId": 33, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 56 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 7, + "PermissionId": 9, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 57 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 22, + "PermissionId": 16, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 58 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 13, + "PermissionId": 20, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 59 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 17, + "PermissionId": 24, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 60 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 26, + "PermissionId": 32, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 61 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 28, + "PermissionId": 35, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 62 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 21, + "PermissionId": 33, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 63 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 29, + "PermissionId": 36, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 64 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 34, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 65 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 0, + "PermissionId": 1, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 66 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 0, + "PermissionId": 2, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 67 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 7, + "PermissionId": 4, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 68 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 0, + "PermissionId": 10, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 69 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 0, + "PermissionId": 12, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 70 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 0, + "PermissionId": 8, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 71 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 22, + "PermissionId": 16, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 72 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 37, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 73 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 38, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 74 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 39, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 75 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 40, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 76 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 40, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 77 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 37, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 78 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 38, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 79 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 39, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 80 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 41, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 81 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 41, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 82 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 42, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 83 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 42, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 84 + }, + { + "IsDeleted": "0", + "RoleId": 3, + "ModuleId": 0, + "PermissionId": 42, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 85 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 43, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 86 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 43, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 87 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 44, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 88 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 45, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 89 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 46, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 90 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 47, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 91 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 48, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 92 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 32, + "PermissionId": 64, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 128 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 65, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 129 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 33, + "PermissionId": 66, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 130 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 65, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 131 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 33, + "PermissionId": 66, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 132 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 67, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 133 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 67, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 134 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 68, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 135 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 0, + "PermissionId": 69, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 136 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 68, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 137 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 0, + "PermissionId": 69, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 138 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 29, + "PermissionId": 36, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 139 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 29, + "PermissionId": 36, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 140 + }, + { + "IsDeleted": "0", + "RoleId": 7, + "ModuleId": 27, + "PermissionId": 33, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 141 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 36, + "PermissionId": 72, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 144 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 0, + "PermissionId": 1, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 145 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 0, + "PermissionId": 2, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 146 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 22, + "PermissionId": 3, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 147 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 7, + "PermissionId": 4, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 148 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 22, + "PermissionId": 16, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 149 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 7, + "PermissionId": 9, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 150 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 25, + "PermissionId": 17, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 151 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 10, + "PermissionId": 13, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 152 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 21, + "PermissionId": 33, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 153 + }, + { + "IsDeleted": "0", + "RoleId": 28, + "ModuleId": 29, + "PermissionId": 36, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 154 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 32, + "PermissionId": 73, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 155 + }, + { + "IsDeleted": "0", + "RoleId": 6, + "ModuleId": 32, + "PermissionId": 73, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 156 + }, + { + "IsDeleted": "0", + "RoleId": 4, + "ModuleId": 27, + "PermissionId": 74, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 157 + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/TasksQz.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/TasksQz.tsv new file mode 100644 index 0000000..bcf4608 --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/TasksQz.tsv @@ -0,0 +1,20 @@ +[ + { + "Name": "博客管理", + "JobGroup": "博客测试组", + "TriggerType": 1, + "Cron": "0 */1 * * * ?", + "AssemblyName": "New_College.Tasks", + "ClassName": "Job_Blogs_Quartz", + "Remark": "", + "RunTimes": 0, + "BeginTime": "\/Date(1546272000000+0800)\/", + "EndTime": "\/Date(1640966400000+0800)\/", + "IntervalSecond": 0, + "IsStart": true, + "JobParams": "1", + "IsDeleted": false, + "CreateTime": "\/Date(1546272000000+0800)\/", + "Id": 1 + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/Topic.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/Topic.tsv new file mode 100644 index 0000000..ef96b80 --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/Topic.tsv @@ -0,0 +1,16 @@ +[ + { + "tLogo": "\/Upload\/20180626\/95445c8e288e47e3af7a180b8a4cc0c7.jpg", + "tName": "《罗马人的故事》", + "tDetail": "这是一个荡气回肠的故事", + "tAuthor": "Laozhang", + "tSectendDetail": null, + "tIsDelete": "0", + "tRead": 0, + "tCommend": 0, + "tGood": 0, + "tCreatetime": "\/Date(1546272000000+0800)\/", + "tUpdatetime": "\/Date(1546272000000+0800)\/", + "Id": 1 + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/TopicDetail.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/TopicDetail.tsv new file mode 100644 index 0000000..895ebed --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/TopicDetail.tsv @@ -0,0 +1,19 @@ +[ + { + "TopicId": 1, + "tdLogo": null, + "tdName": "第一章 罗马的诞生 第一节 传说的年代", + "tdContent": "

第一节 传说的年代<\/p>

每个民族都有自己的神话传说。大概希望知道本民族的来源是个很自然的愿望吧。但这是一个难题,因为这几乎不可能用科学的方法来解释清楚。不过所有的民族都没有这样的奢求。他们只要有一个具有一定的条理性,而又能振奋其民族精神的浪漫故事就行,别抬杠,象柏杨那样将中国的三皇五帝都来个科学分析,来评论他们的执政之优劣是大可不必的。<\/p>

对於罗马人,他们有一个和特洛伊城的陷落相关的传说。<\/p>

位於小亚细亚西岸的繁荣的城市特洛伊,在遭受了阿加美农统帅的希腊联军的十年围攻之後,仍未陷落。希腊联军於是留下一个巨大的木马後假装撤兵。特洛伊人以为那是希腊联军留给自己的礼物,就将它拉入城内。<\/p>

当庆祝胜利的狂欢结束,特洛伊人满怀对明日的和平生活的希望熟睡後,藏在木马内的希腊士兵一个又一个地爬了出来。就在这天夜里,特洛伊城便在火光和叫喊中陷落了。全城遭到大屠杀 ,幸免於死的人全都沦为奴隶。混乱之中只有特洛伊国王的驸马阿伊尼阿斯带着老父,儿子等数人在女神维娜斯的帮助下成功地逃了出来。这驸马爷乃是女神维娜斯与凡人男子之间的儿子,女神维娜斯不忍心看着自己的儿子被希腊士兵屠杀 。<\/p>

这阿驸马一行人分乘几条船,离开了火光冲天的特洛伊城。在女神维娜斯的指引下,浪迹地中海,最後在意大利西岸登陆。当地的国王看上了阿伊尼阿斯并把自己的女儿嫁给了他。他又是驸马了,与他的新妻过起了幸福的生活。难民们也安定了下来。<\/p>

阿伊尼阿斯死後,跟随他逃难来的儿子继承了王位。新王在位三十年後,离开了这块地方,到台伯河(Tiber)下游建了一个新城亚尔巴龙迦城。这便是罗马城的前身了。<\/p>

罗马人自古相信罗马城是公元前731年4月21日由罗莫路和勒莫(Romulus and Remus)建设的。而这两个孪生兄弟是从特洛伊逃出的阿伊尼阿斯的子孙。後来,罗马人接触了希腊文化後才知道特洛伊的陷落是在公元前十三世纪,老早的事了。罗马人好象并没有对这段空白有任何烦恼,随手编出一串传说,把那空白给填补了。反正传说这事荒唐一点的更受欢迎。经过了一堆搞不清谁是谁的王的统治,出现了一个什麽王的公主。<\/p>

公主的叔父在篡夺了王位後,为了防止公主结婚生子威胁自己的王位,便任命未婚的公主为巫女。这是主管祭神的职位,象修女一样不得结婚。<\/p>

不巧一日这美丽的公主在祭事的空余,来到小河边午睡。也是合当有事,被过往的战神玛尔斯(Mars)一见钟情。这玛尔斯本是靠挑起战争混饭吃的,但也常勾引 良家妇女。这天战神也没错过机会,立刻由天而降,与公主一试云雨。据说战神的技术特神,公主还没来得及醒便完事升天去了。後来公主生了一双胞胎,起名罗莫路和勒莫。<\/p>

叔父闻知此事大怒,将公主投入大牢,又把那双胞胎放在篮子里抛入台伯河,指望那篮子漂入大海将那双胞胎淹死。类似的故事在旧约圣经里也有,那是关於摩西的事,好象这类传说在当地十分流行。<\/p>

再说那兄弟俩的篮子被河口附近茂密的灌木丛钩住而停了下来,俩人哭声引来的一只过路的母狼。意大利的狼都带点慈悲心,不但没吃了俩人当点心,还用自己的奶去喂他们,这才救了俩小命。<\/p>

不过,总是由狼养活也没法交 待,於是又一日一放羊的在这地盘上溜哒,发现了兄弟俩,将他们抱了回去扶养成人 。据说现在这一带仍有许多放羊的。<\/p>

兄弟俩长大後成了这一带放羊人的头,在与别的放羊人的圈子的打斗中不断地扩展自己的势力范围。圈子大了,情报也就多了,终于有一天,罗莫路和勒莫知道了自己身事。<\/p>

兄弟俩就带着手下的放羊人呼啸着去打破了亚尔巴龙迦城,杀了那国王,将王位又交 还给了自己祖父。他们的母亲似乎已经死在了大牢里。但兄弟俩也没在亚尔巴龙迦城多住,他们认为亚尔巴龙迦城位於山地,虽然易守难攻,却不利发展。加上兄弟俩是在台伯河的下游长大的,所以便回到原地,建了个新城。除了手下的放羊人又加上了附近的放羊人和农民。<\/p>

消灭了共同的敌人後,兄弟俩的关系开始恶化。有人说是为了新城的命名,有人说是为了新城的城址,也有人说是为了争夺王位。兄弟俩於是分割统治,各占一小山包。但纷争又开始了,勒莫跳过了罗莫路为表示势力范围而挖的沟。对於这种侵犯他人权力的行为,罗莫路大义灭亲地在自己兄弟的後脑上重重地来了一锄头,勒莫便被灭了。<\/p>

<\/p>

於是这城便以罗莫路的名字命名为罗马,这就是公元前731年4月21日的事了,到现在这天仍是意大利的节日,罗马人会欢天喜地的庆祝罗莫路杀了自己的…不,是庆祝罗马建城。王位当然也得由罗莫路来坐,一切问题都没了。这时四年一度的奥林匹克运动会在希腊已经开了六回,罗马也从传说的时代走出,近入了历史时代。<\/p>


<\/p>", + "tdDetail": "标题", + "tdSectendDetail": null, + "tdIsDelete": "0", + "tdRead": 8, + "tdCommend": 0, + "tdGood": 0, + "tdCreatetime": "\/Date(1546272000000+0800)\/", + "tdUpdatetime": "\/Date(1546272000000+0800)\/", + "tdTop": 0, + "tdAuthor": null, + "Id": 1 + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/UserRole.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/UserRole.tsv new file mode 100644 index 0000000..a15e04a --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/UserRole.tsv @@ -0,0 +1,134 @@ +[ + { + "IsDeleted": "0", + "UserId": 4, + "RoleId": 1, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 1 + }, + { + "IsDeleted": "0", + "UserId": 3, + "RoleId": 2, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 2 + }, + { + "IsDeleted": "0", + "UserId": 7, + "RoleId": 3, + "CreateId": null, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 3 + }, + { + "IsDeleted": "0", + "UserId": 12, + "RoleId": 4, + "CreateId": 23, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 4 + }, + { + "IsDeleted": "0", + "UserId": 1, + "RoleId": 2, + "CreateId": 1, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 5 + }, + { + "IsDeleted": "0", + "UserId": 1, + "RoleId": 1, + "CreateId": 1, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 6 + }, + { + "IsDeleted": "0", + "UserId": 2, + "RoleId": 1, + "CreateId": 13, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 7 + }, + { + "IsDeleted": "0", + "UserId": 8, + "RoleId": 6, + "CreateId": 19, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 8 + }, + { + "IsDeleted": "0", + "UserId": 13, + "RoleId": 7, + "CreateId": 24, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": "\/Date(1546272000000+0800)\/", + "Id": 9 + }, + { + "IsDeleted": "0", + "UserId": 0, + "RoleId": 0, + "CreateId": 0, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": null, + "Id": 10 + }, + { + "IsDeleted": "0", + "UserId": 39, + "RoleId": 28, + "CreateId": 39, + "CreateBy": null, + "CreateTime": "\/Date(1546272000000+0800)\/", + "ModifyId": null, + "ModifyBy": null, + "ModifyTime": null, + "Id": 11 + } +] diff --git a/New_College.Api/wwwroot/BlogCore.Data.json/sysUserInfo.tsv b/New_College.Api/wwwroot/BlogCore.Data.json/sysUserInfo.tsv new file mode 100644 index 0000000..c752a1e --- /dev/null +++ b/New_College.Api/wwwroot/BlogCore.Data.json/sysUserInfo.tsv @@ -0,0 +1,704 @@ +[ + { + "uID": 1, + "uLoginName": "laozhang", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "老张", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": "老张的哲学", + "sex": 1, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "0" + }, + { + "uID": 2, + "uLoginName": "laoli", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "laoli", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 1, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "0" + }, + { + "uID": 3, + "uLoginName": "user", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "userli", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": "广告", + "sex": 1, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "0" + }, + { + "uID": 4, + "uLoginName": "admins", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "0" + }, + { + "uID": 5, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 6, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 7, + "uLoginName": "tibug", + "uLoginPWD": "BB1C0516F0F4469549CD4A95833A78E5", + "uRealName": "提bug账号", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 1, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "0" + }, + { + "uID": 8, + "uLoginName": "test", + "uLoginPWD": "098F6BCD4621D373CADE4E832627B4F6", + "uRealName": "后台测试1号", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": "测试是", + "sex": 1, + "age": 3, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "0" + }, + { + "uID": 9, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 10, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 11, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 12, + "uLoginName": "blogadmin", + "uLoginPWD": "3FACF26687DAB7254848976256EDB56F", + "uRealName": "后台总管理员", + "uStatus": 0, + "uRemark": "t15", + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 1, + "age": 10, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "0" + }, + { + "uID": 13, + "uLoginName": "test2", + "uLoginPWD": "AD0234829205B9033196BA818F7A872B", + "uRealName": "后台测试2号", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 12, + "birth": "\/Date(1546272000000+0800)\/", + "addr": "北京市", + "tdIsDelete": "0" + }, + { + "uID": 14, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 15, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 16, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 17, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 18, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 19, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 20, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 21, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 22, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 23, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 24, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 25, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 26, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 27, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 28, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 29, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 30, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 31, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 32, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 33, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 34, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 35, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 36, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 37, + "uLoginName": "xx", + "uLoginPWD": "2AEFC34200A294A3CC7DB81B43A81873", + "uRealName": "admins", + "uStatus": 0, + "uRemark": null, + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 0, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 38, + "uLoginName": "99", + "uLoginPWD": "AC627AB1CCBDB62EC96E702F7F6425B", + "uRealName": "99", + "uStatus": 0, + "uRemark": "blogadmin", + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": -1, + "age": 0, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "1" + }, + { + "uID": 39, + "uLoginName": "Kawhi", + "uLoginPWD": "96FEE3FD714358658BFB881A4E1642BE", + "uRealName": "Kawhi 测试员", + "uStatus": 0, + "uRemark": "blogadmin", + "uCreateTime": "\/Date(1546272000000+0800)\/", + "uUpdateTime": "\/Date(1546272000000+0800)\/", + "uLastErrTime": "\/Date(1546272000000+0800)\/", + "uErrorCount": 0, + "name": null, + "sex": 1, + "age": 18, + "birth": "\/Date(1546272000000+0800)\/", + "addr": null, + "tdIsDelete": "0" + } +] diff --git a/New_College.Api/wwwroot/CorsPost.html b/New_College.Api/wwwroot/CorsPost.html new file mode 100644 index 0000000..422061b --- /dev/null +++ b/New_College.Api/wwwroot/CorsPost.html @@ -0,0 +1,100 @@ + + + + + New_College + + + + + + +

通过JsonP实现跨域请求

+ + +
+
+
+ +

添加请求头实现跨域

+ 无 +
+ + +

通过CORS实现跨域请求,另需要在服务器段配置CORE

+ + +
+
+
+ + +
+
+
+ + \ No newline at end of file diff --git a/New_College.Api/wwwroot/JMeterTest.png b/New_College.Api/wwwroot/JMeterTest.png new file mode 100644 index 0000000000000000000000000000000000000000..78f42c7d33afaba37546b44027d21716f3e9be58 GIT binary patch literal 46381 zcmd422T+q+_dXis2r4R8iilAWkuD%zKoCVhK*0n;i$|Jt=@JOBBZ43;5fGwCktBeG zCN&m%=nxPBM5PmoKtf3fxi6OUo$q(=%)R&jpSg2q$T06t-d)yS`&rK_JMyZT;qIM> zcY;8m-A0!UEI^>Gc;FMiofl|fddDXM|F-yB80v%a+m1{D4}ZDpnd*T+g|YnWe{Tbx zcig@V^9O!vm;TgE_pr*H*dR=Rx%8u6XyK;Dkp|Z zSS6M1vpN@66fa%AvTgs?+H*Gg^0Kmu4<4T6L3<4l<9fF5x>JkW3fulb`1;ntpziv5 z(@9^P9>HEjF1Akp#&O`V8YJD{&Qql`%Bg7~TlR>wEH zQyLVx2ICy9zU_HRPFCKBRqPPa6BGAQb&bhK!l-PV)wZoNBS-msUoL$yPFD(>D6xPp zDK-|??YOM?bAm_{E2omZ+q3r-*&q`s^K-A@bR;S$)&WzedCCm7uM^tYWE}{ey?mn~ zSJ{7UXy)bi&Vbn1*I~OJoe^v>De#YlKl%RtFbpYE{kE^T*GQ3>cVTmBPJ5^B6Do=z zrtd$hnM08ych(+ATJ=We1kUiu;PXc8Rbsvhs8-Cou1q4OAC?AcA8Lq-P0080QV4N5 z^h=l){&u zPZ{xOwU#8iOaIyikpOqH`*G)FyMxN`eaTJaBW|aSQVgZ5PFUq*$noO%M^}~e&${^1 z%=R?LNJ5CL>@q>e;@ak7EmawTCU+;hEEw#WMARWRBwEoHYvNcQlcY(+4U~?WdsTk% zE+N<)YO62aS62JAPOU$_WB>l5H1x^J?+f}yP-l{NDpXhQ zb*`X-%nstfevcLPg)g<%QI2TMe5iIP!EH8cQeqbWoO1J2>3;V5TVLl{ih^y)ar~(| z6|4Q@iN!G{hnGu#D)$u1y%A?l4BJZH7iiyf+Mo@sEt5ZUh-VpE>Mw zYoTxbv97~8C+)yL2ieHE0NdU8$_xfI;6$T)N}R|&UQPIdJO|0Ty8UwP%6Px9N3|iW z!ewy}ZuYwm)$1R{5S}&2R!f2cD~X+QEte}Tx;XFrSGwWTp?B|$BmZ=-O$0(6fRpV1y zsuI&1UicSlTg`iy;_F^#*l$^LX2t2ZQ0q^%vi7t51<| zv-1;FxnOJyVc(24A|8&{jWLG~saseVhsadlsGo}dEQ9aW@F_8kqx1$!tb7y`GJJW! zhxTh&nKbTwi0wW#?ny=c6hVy#Zk#i5_t)=Tz@oY%;wCc8kIz^@kz+@& v~-KUdK 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 yr_4} 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 Ef?kR382|tP literal 0 HcmV?d00001 diff --git a/New_College.Api/wwwroot/NoInterAutofacIOC.rar b/New_College.Api/wwwroot/NoInterAutofacIOC.rar new file mode 100644 index 0000000000000000000000000000000000000000..261036dd86616ed7e92c3ae9e4ea555f722bcf14 GIT binary patch literal 42175 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�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

{;o1m>6(W(^q7|-=!q{Y`viRMAt-6@^e zVP$5xLYdxY(~TwLdZeOB)F0}hr!zJ}+1EHePN+VOTrr}RxL_cO zt)&-Nf*-*glQHXHQPj0ZT$&}WjVuNL13&~o9>@)pf1k?wPnJ+3YjW$vODz~#6HAia zxd&IJ|K^13pX**1=DXB=jbHdu@~SS&ue&FyuD}JccKEq46Y1`aOd{mM9dySZNB*h` z=dV@%z@=Of6L)||T!_JL;*0)AV*j_w6X~qF6mpp#H^!QP%vERXzjpTfWbw~AT9dlO zT-dU8ch3L!mHzC>QRt8^Mo8><}Pm5<`*(6=Q@`%a+*5uzb|vO`AC^_ zsNSVafkJ-GegJ`Dco@v?-`Du*gYd@B zCNuOCl?q<IR v#rVHWtUf8a9+iXwI4(wsLHQrr0Bia@dej8a!DaB@{K7%)sjY#Afe!cwMwTmQ literal 0 HcmV?d00001 diff --git a/New_College.Api/wwwroot/QQGroup.png b/New_College.Api/wwwroot/QQGroup.png new file mode 100644 index 0000000000000000000000000000000000000000..413d7996760985b0212766c091599a0961880e2e GIT binary patch literal 20699 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 literal 0 HcmV?d00001 diff --git a/New_College.Api/wwwroot/index.html b/New_College.Api/wwwroot/index.html new file mode 100644 index 0000000..cf47942 --- /dev/null +++ b/New_College.Api/wwwroot/index.html @@ -0,0 +1,42 @@ + + + + + 默认首页 + + + + + +

+
+ + +
+ + \ No newline at end of file diff --git a/New_College.Api/wwwroot/laozhangisphigood.jpg b/New_College.Api/wwwroot/laozhangisphigood.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d007244b560686d188a3bfc047dfa26c9ee8b81e GIT binary patch literal 16218 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

^vv{i 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 literal 0 HcmV?d00001 diff --git a/New_College.Api/wwwroot/logo.png.png b/New_College.Api/wwwroot/logo.png.png new file mode 100644 index 0000000000000000000000000000000000000000..19eea5800eeae0167e34c82fd40d02f62dff1ca9 GIT binary patch literal 2014 zcmV<42O;>0P)gRrBC?&6BHN%;bdg158dzhd=-Ruale>uN?LzP>htM!oU0BkM7S9NVV(IvO34i z14T&bOF~lDL_m^|93OxBtx8NtOQ1L@eR7iYv2PP-wJCC1rAtDEoo(K;CJ0&Go<3vyd(}A6nk{q0bV~~0TrY9v0 zUxjONOS}PKE2Q)t9?F%2lmJKxfRr)y4N?L-Cnbf2?8j8scmu%Xr2OoQ9|y+}N#T71 zJ0+!Gpz-VP|Dak3NCQ>skhCgAN-ibo-^l0yX3!EWWYcMq&q_)jG$&_At42rp8sMqy z>fG8_V<9E|zwdEdq$Dj^fHwh{)O89eNfJ`XhlA=XwewYPhQ z=iKN`WL1MV0zzgHGNp0M74}-X8X+ZtlT?+RLrSeo4WS?)*{LCWQEHP-m6S@b{N*6; zA8+Rf(Jz3i5`-2L2<56>OD!K#7o(GymNr}J(LqQEYFq3?^h<^7CsF7@qi%t8OkObxD?|%KdDQb`7-J9yrKxNU3IeA-DpE?tyZcSb@eATF(b=v0OiI?GVt%HBQQxs;py_88#Of#0NV&24 zuH#bY&cnBm(rqp6hDB8pLHuLfwcOC`K<=bU@mqfH((ll{TCU6QHRaioY}yn@C*~0o z*({}M)*$*89G$3C@nfMHDc9!}o9bGL1bv%{Bn;}5XXHtb)cNRlkE=tmU`{0e8QHP5 z|7;-}S2|}_NGQc4<|)Gz)y=P^dHOkOC}LCA?B%rn`D3KCI2pV(*t!F-MoM66FT3jO`HlI=d0s61uGeX^H36YSPTQ0tSEl7ARn>oD!vhOQ^5_a@|s`p23U zm54bzJTGn7#UX3>Ss?8ix!ae7Y)WU8b4N$>zS%@CVx)0DH`ui)q+I3fo}t;uw&xwc z1AEVvA#$SaOv_cWWizHt^4^*>&J6-u)e4k0lCBLK=>BDkyOB(J2+?15ky%i;; zR+Pc*JbIppnuN?ipTht*ZHTlw;Z) zQWj}l(Yz+^S=$y7&*gZr^$sHuR zH_28{&F-|RlFgCH+P_Wbkao4TtS7W-ac_$EZ7s;q8}7!^E3`&aEF@&lMAirMZ`-NU1txzJ%{#c^M+mI{VUnsC*t)vLx)(diOgqXEWuTMQlr_%42(Yr@-0~ zc}QK1A%bi1!=r_k;fYn5r-0P8Rpm=6@P3nWm`%B}0S5vByY{BqC_IBh-nm9l`Z@ic zos8r3-C@kHYKLB9r8$|HmpNWFsdmYx%nKVG9wB`ju%F|R4G6V80Wr&r!zCoJWmR5? zkPQe4sH#SbVU`;AuJaDqxq-g0Y+I5!YDh;Q3w^o!yp-gO1$O};86??+_?qg#^s%`a w)HJZIFvr}l-*bbK^9XeS0000002~Bf0Bh!}UG!IXO8@`>07*qoM6N<$f|72_5&!@I literal 0 HcmV?d00001 diff --git a/New_College.Api/wwwroot/logo/favicon-32x32.png b/New_College.Api/wwwroot/logo/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..68062fe0577bebf8065cfc59d83f29f40a8bd7f1 GIT binary patch literal 1556 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 z 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

YC2a!6d!kh|wT2=12K3;)2cS%p22%e2fKf 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 $uo4>C(2P9-p?J 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¬`g4Pp6JfMvqShpvOI@oAuE7??`l4 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 VcWHEJAX8&$Cs> literal 0 HcmV?d00001 diff --git a/New_College.Api/wwwroot/web.config b/New_College.Api/wwwroot/web.config new file mode 100644 index 0000000..29cf4ac --- /dev/null +++ b/New_College.Api/wwwroot/web.config @@ -0,0 +1,3 @@ + + + diff --git a/New_College.Build.bat b/New_College.Build.bat new file mode 100644 index 0000000..ed06825 --- /dev/null +++ b/New_College.Build.bat @@ -0,0 +1,21 @@ +git pull + + +@echo off +for /f "tokens=5" %%i in ('netstat -aon ^| findstr ":8081"') do ( + set n=%%i +) +taskkill /f /pid %n% + + + + +dotnet build + +cd New_College.Api + + + +dotnet run + +cmd \ No newline at end of file diff --git a/New_College.Common/Attribute/CachingAttribute.cs b/New_College.Common/Attribute/CachingAttribute.cs new file mode 100644 index 0000000..c34f15d --- /dev/null +++ b/New_College.Common/Attribute/CachingAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace New_College.Common +{ + ///

+ /// 这个Attribute就是使用时候的验证,把它添加到要缓存数据的方法中,即可完成缓存的操作。 + /// + [AttributeUsage(AttributeTargets.Method, Inherited = true)] + public class CachingAttribute : Attribute + { + /// + /// 缓存绝对过期时间(分钟) + /// + public int AbsoluteExpiration { get; set; } = 30; + + } +} diff --git a/New_College.Common/Attribute/UseTranAttribute.cs b/New_College.Common/Attribute/UseTranAttribute.cs new file mode 100644 index 0000000..b523026 --- /dev/null +++ b/New_College.Common/Attribute/UseTranAttribute.cs @@ -0,0 +1,13 @@ +using System; + +namespace New_College.Common +{ + /// + /// 这个Attribute就是使用时候的验证,把它添加到需要执行事务的方法中,即可完成事务的操作。 + /// + [AttributeUsage(AttributeTargets.Method, Inherited = true)] + public class UseTranAttribute : Attribute + { + + } +} diff --git a/New_College.Common/DB/AppSecretConfig.cs b/New_College.Common/DB/AppSecretConfig.cs new file mode 100644 index 0000000..a68da87 --- /dev/null +++ b/New_College.Common/DB/AppSecretConfig.cs @@ -0,0 +1,47 @@ +using System.IO; + +namespace New_College.Common.AppConfig +{ + public class AppSecretConfig + { + private static string Audience_Secret = Appsettings.app(new string[] { "Audience", "Secret" }); + private static string Audience_Secret_File = Appsettings.app(new string[] { "Audience", "SecretFile" }); + + + public static string Audience_Secret_String => InitAudience_Secret(); + + + private static string InitAudience_Secret() + { + var securityString = DifDBConnOfSecurity(Audience_Secret_File); + if (!string.IsNullOrEmpty(Audience_Secret_File)&& !string.IsNullOrEmpty(securityString)) + { + return securityString; + } + else + { + return Audience_Secret; + } + + } + + private static string DifDBConnOfSecurity(params string[] conn) + { + foreach (var item in conn) + { + try + { + if (File.Exists(item)) + { + return File.ReadAllText(item).Trim(); + } + } + catch (System.Exception) { } + } + + return ""; + } + + } + +} diff --git a/New_College.Common/DB/BaseDBConfig.cs b/New_College.Common/DB/BaseDBConfig.cs new file mode 100644 index 0000000..3a6baa8 --- /dev/null +++ b/New_College.Common/DB/BaseDBConfig.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace New_College.Common.DB +{ + public class BaseDBConfig + { + /* 之前的单库操作已经删除,如果想要之前的代码,可以查看我的GitHub的历史记录 + * 目前是多库操作,默认加载的是appsettings.json设置为true的第一个db连接。 + */ + public static (List, List) MutiConnectionString => MutiInitConn(); + private static string DifDBConnOfSecurity(params string[] conn) + { + foreach (var item in conn) + { + try + { + if (File.Exists(item)) + { + return File.ReadAllText(item).Trim(); + } + } + catch (System.Exception) { } + } + + return conn[conn.Length - 1]; + } + + + public static (List, List) MutiInitConn() + { + List listdatabase = Appsettings.app("DBS") + .Where(i => i.Enabled).ToList(); + foreach (var i in listdatabase) + { + SpecialDbString(i); + } + List listdatabaseSimpleDB = new List();//单库 + List listdatabaseSlaveDB = new List();//从库 + + // 单库,且不开启读写分离,只保留一个 + if (!Appsettings.app(new string[] { "CQRSEnabled" }).ObjToBool() && !Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool()) + { + if (listdatabase.Count == 1) + { + return (listdatabase, listdatabaseSlaveDB); + } + else + { + var dbFirst = listdatabase.FirstOrDefault(d => d.ConnId == Appsettings.app(new string[] { "MainDB" }).ObjToString()); + if (dbFirst == null) + { + dbFirst = listdatabase.FirstOrDefault(); + } + listdatabaseSimpleDB.Add(dbFirst); + return (listdatabaseSimpleDB, listdatabaseSlaveDB); + } + } + + + // 读写分离,且必须是单库模式,获取从库 + if (Appsettings.app(new string[] { "CQRSEnabled" }).ObjToBool() && !Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool()) + { + if (listdatabase.Count > 1) + { + listdatabaseSlaveDB = listdatabase.Where(d => d.ConnId != Appsettings.app(new string[] { "MainDB" }).ObjToString()).ToList(); + } + } + + + + return (listdatabase, listdatabaseSlaveDB); + //} + } + + private static MutiDBOperate SpecialDbString(MutiDBOperate mutiDBOperate) + { + if (mutiDBOperate.DbType == DataBaseType.Sqlite) + { + mutiDBOperate.Connection = $"DataSource=" + Path.Combine(Environment.CurrentDirectory, mutiDBOperate.Connection); + } + //else if (mutiDBOperate.DbType == DataBaseType.SqlServer) + //{ + // mutiDBOperate.Conn = DifDBConnOfSecurity(@"D:\my-file\dbCountPsw1.txt", @"c:\my-file\dbCountPsw1.txt", mutiDBOperate.Conn); + //} + else if (mutiDBOperate.DbType == DataBaseType.MySql) + { + mutiDBOperate.Connection = DifDBConnOfSecurity(@"D:\my-file\dbCountPsw1_MySqlConn.txt", @"c:\my-file\dbCountPsw1_MySqlConn.txt", mutiDBOperate.Connection); + } + else if (mutiDBOperate.DbType == DataBaseType.Oracle) + { + mutiDBOperate.Connection = DifDBConnOfSecurity(@"D:\my-file\dbCountPsw1_OracleConn.txt", @"c:\my-file\dbCountPsw1_OracleConn.txt", mutiDBOperate.Connection); + } + + return mutiDBOperate; + } + } + + + public enum DataBaseType + { + MySql = 0, + SqlServer = 1, + Sqlite = 2, + Oracle = 3, + PostgreSQL = 4 + } + public class MutiDBOperate + { + /// + /// 连接启用开关 + /// + public bool Enabled { get; set; } + /// + /// 连接ID + /// + public string ConnId { get; set; } + /// + /// 从库执行级别,越大越先执行 + /// + public int HitRate { get; set; } + /// + /// 连接字符串 + /// + public string Connection { get; set; } + /// + /// 数据库类型 + /// + public DataBaseType DbType { get; set; } + } +} \ No newline at end of file diff --git a/New_College.Common/DB/MainDb.cs b/New_College.Common/DB/MainDb.cs new file mode 100644 index 0000000..5fff1fe --- /dev/null +++ b/New_College.Common/DB/MainDb.cs @@ -0,0 +1,7 @@ +namespace New_College.Common.DB +{ + public static class MainDb + { + public static string CurrentDbConnId = "1"; + } +} diff --git a/New_College.Common/Enum/EnumHelper.cs b/New_College.Common/Enum/EnumHelper.cs new file mode 100644 index 0000000..b07e645 --- /dev/null +++ b/New_College.Common/Enum/EnumHelper.cs @@ -0,0 +1,210 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; + +namespace New_College.Common +{ + public enum CustomerTypeEnum + { + /// + /// 普通用户 + /// + [Description("普通用户")] + General = 0, + /// + /// 个人代理 + /// + [Description("个人代理")] + PersonalAgency = 1, + /// + /// 机构代理 + /// + [Description("机构代理")] + Agency = 2 + + } + + /// + /// 卡类型 + /// + public enum CardTypeEnum + { + /// + /// 志愿填报卡 + /// + [Description("志愿填报卡")] + volunteerCard=0, + /// + /// 选科指导卡 + /// + [Description("选科指导卡")] + selectSubjectGuideCard=1, + /// + /// 生涯发展卡 + /// + [Description("生涯发展卡")] + development=2 + } + + + /// + /// 办学层次 + /// + public enum EnumSchoolLevel + { + /// + /// 本科 + /// + RegularCollegeCourse = 1, + /// + /// 专科 + /// + Specialist = 2 + } + /// + /// 办学类别 + /// + public enum EnumUniversityType + { + /// + /// 综合 + /// + [Description("综合")] + Comprehensive = 0, + /// + /// 理工 + /// + [Description("理工")] + Engineering = 1, + /// + /// 财经 + /// + [Description("财经")] + Finance = 2, + /// + /// 农林 + /// + [Description("农林")] + Farming = 3, + /// + /// 医药 + /// + [Description("医药")] + Medical = 4, + /// + /// 师范 + /// + [Description("师范")] + Normal = 5, + /// + /// 体育 + /// + [Description("体育")] + Sports = 6, + /// + /// 省属 + /// + [Description("省属")] + Provincial = 7, + /// + /// 政法 + /// + [Description("政法")] + Politics = 8, + /// + /// 艺术 + /// + [Description("艺术")] + Art = 9, + /// + /// 民族 + /// + [Description("民族")] + Nation = 10, + /// + /// 军事 + /// + [Description("军事")] + Military = 11, + /// + /// 语言 + /// + [Description("语言")] + Language = 12, + /// + /// 其它 + /// + [Description("其它")] + Other = 13, + } + + /// + /// 订单类型 + /// + public enum EnumOrderType + { + /// + ///取消订单 + /// + [Description("取消")] + Cancel = -1, + /// + /// 待支付 + /// + [Description("待支付")] + payment = 0, + /// + /// 支付完成 + /// + [Description("支付完成")] + payoff = 1, + /// + /// 已发货 + /// + [Description("已发货")] + Delivered = 2, + /// + /// 已收货 + /// + [Description("已收货")] + Received = 3 + } + + + + /// + /// 支付方式 + /// + public enum EnumPayType + { + /// + /// 微信 + /// + [Description("微信")] + WeiPay = 0, + /// + /// 支付宝 + /// + [Description("支付宝")] + AliPay = 1, + /// + /// IOS支付 + /// + [Description("IOS支付")] + IOSPay = 2 + } + + public enum EnumTagColor + { + + [Description("深蓝")] + a = 0, + [Description("中等蓝")] + b = 1, + [Description("浅蓝")] + c = 2, + [Description("淡蓝")] + d = 3 + } +} diff --git a/New_College.Common/Excel/ExcelUtil.cs b/New_College.Common/Excel/ExcelUtil.cs new file mode 100644 index 0000000..d220b5f --- /dev/null +++ b/New_College.Common/Excel/ExcelUtil.cs @@ -0,0 +1,143 @@ +using NPOI.SS.UserModel; +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Text; + +namespace New_College.Common.Excel +{ + public class ExcelUtil + { + /// + /// 读取Excel多Sheet数据 + /// + /// 文件路径 + /// Sheet名 + /// + public static DataSet ReadExcelToDataSet(string filePath, string sheetName = null) + { + if (!File.Exists(filePath)) + { + // LogUtil.Debug($"未找到文件{filePath}"); + return null; + } + //获取文件信息 + FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); + IWorkbook workbook = WorkbookFactory.Create(fs); + //获取sheet信息 + ISheet sheet = null; + DataSet ds = new DataSet(); + if (!string.IsNullOrEmpty(sheetName)) + { + sheet = workbook.GetSheet(sheetName); + if (sheet == null) + { + // LogUtil.Debug($"{filePath}未找到sheet:{sheetName}"); + return null; + } + DataTable dt = ReadExcelFunc(workbook, sheet); + ds.Tables.Add(dt); + } + else + { + //遍历获取所有数据 + int sheetCount = workbook.NumberOfSheets; + for (int i = 0; i < sheetCount; i++) + { + sheet = workbook.GetSheetAt(i); + if (sheet != null) + { + DataTable dt = ReadExcelFunc(workbook, sheet); + ds.Tables.Add(dt); + } + } + } + fs.Close(); + fs.Dispose(); + return ds; + } + + /// + /// 读取Excel信息 + /// + /// 工作区 + /// sheet + /// + private static DataTable ReadExcelFunc(IWorkbook workbook, ISheet sheet) + { + DataTable dt = new DataTable(); + //获取列信息 + IRow cells = sheet.GetRow(sheet.FirstRowNum); + int cellsCount = cells.PhysicalNumberOfCells; + int emptyCount = 0; + int cellIndex = sheet.FirstRowNum; + List listColumns = new List(); + bool isFindColumn = false; + while (!isFindColumn) + { + emptyCount = 0; + listColumns.Clear(); + for (int i = 0; i < cellsCount; i++) + { + if (string.IsNullOrEmpty(cells.GetCell(i).StringCellValue)) + { + emptyCount++; + } + listColumns.Add(cells.GetCell(i).StringCellValue); + } + //这里根据逻辑需要,空列超过多少判断 + if (emptyCount == 0) + { + isFindColumn = true; + } + //cellIndex++; + cells = sheet.GetRow(cellIndex); + } + + foreach (string columnName in listColumns) + { + if (dt.Columns.Contains(columnName)) + { + //如果允许有重复列名,自己做处理 + continue; + } + dt.Columns.Add(columnName, typeof(string)); + } + //开始获取数据 + int rowsCount = sheet.PhysicalNumberOfRows; + cellIndex += 1; + DataRow dr = null; + for (int i = cellIndex; i < rowsCount; i++) + { + cells = sheet.GetRow(i); + dr = dt.NewRow(); + for (int j = 0; j < dt.Columns.Count; j++) + { + var zz = cells.GetCell(j); + if (zz == null) + { + dr[j] = ""; + continue; + } + var cc = zz.CellType; + //这里可以判断数据类型 + switch (cc) + { + case CellType.String: + dr[j] = cells.GetCell(j).StringCellValue; + break; + case CellType.Numeric: + dr[j] = cells.GetCell(j).NumericCellValue.ToString(); + break; + case CellType.Unknown: + dr[j] = cells.GetCell(j).StringCellValue; + break; + } + } + dt.Rows.Add(dr); + } + return dt; + } + } +} diff --git a/New_College.Common/GlobalVar/AliYunOssConfig.cs b/New_College.Common/GlobalVar/AliYunOssConfig.cs new file mode 100644 index 0000000..8f37601 --- /dev/null +++ b/New_College.Common/GlobalVar/AliYunOssConfig.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College +{ + public static class AliYunOssConfig + { + public static string wendpoint { get; set; } + + public static string bucket { get; set; } + + public static string accessKeyId { get; set; } + + public static string accessKeySecret { get; set; } + + public static string endpoint { get; set; } + } +} diff --git a/New_College.Common/GlobalVar/GlobalVars.cs b/New_College.Common/GlobalVar/GlobalVars.cs new file mode 100644 index 0000000..38c0086 --- /dev/null +++ b/New_College.Common/GlobalVar/GlobalVars.cs @@ -0,0 +1,29 @@ +namespace New_College +{ + /// + /// 权限变量配置 + /// + public static class Permissions + { + public const string Name = "Permission"; + + /// + /// 当前项目是否启用IDS4权限方案 + /// true:表示启动IDS4 + /// false:表示使用JWT + public static bool IsUseIds4 = false; + } + + /// + /// 路由变量前缀配置 + /// + public static class RoutePrefix + { + /// + /// 前缀名 + /// 如果不需要,尽量留空,不要修改 + /// 除非一定要在所有的 api 前统一加上特定前缀 + /// + public const string Name = ""; + } +} diff --git a/New_College.Common/GlobalVar/WeiXinConfig.cs b/New_College.Common/GlobalVar/WeiXinConfig.cs new file mode 100644 index 0000000..8af3a8f --- /dev/null +++ b/New_College.Common/GlobalVar/WeiXinConfig.cs @@ -0,0 +1,35 @@ +namespace New_College +{ + + public static class WeixinConfig + { + /// + /// 微信appid + /// + public static string Appid { get; set; } + + /// + /// 微信安全码 + /// + public static string Secret { get; set; } + + /// + /// 商户ID + /// + public static string MCHID { get; set; } + + /// + /// 商户key + /// + public static string KEY { get; set; } + + /// + /// 支付回调URL + /// + public static string NotifyUrl { get; set; } + + } + + + +} \ No newline at end of file diff --git a/New_College.Common/Helper/AliYunOssHelper.cs b/New_College.Common/Helper/AliYunOssHelper.cs new file mode 100644 index 0000000..c13f233 --- /dev/null +++ b/New_College.Common/Helper/AliYunOssHelper.cs @@ -0,0 +1,44 @@ +using Aliyun.OSS; +using Aliyun.OSS.Common; +using System; +using System.Collections.Generic; +using System.Text; + + +namespace New_College.Common +{ + public class AliYunOssHelper + { + // private readonly static AliYunOssConfig ossConfig = GlobalData.AliYunOss; + + + public static string UploadFile(string key, string filepath) + { + try + { + var conf = new ClientConfiguration(); + //conf.ConnectionLimit = 512; + conf.MaxErrorRetry = 3; + conf.ConnectionTimeout = 10000*30; + conf.EnalbeMD5Check = true; + var client = new OssClient(AliYunOssConfig.endpoint, AliYunOssConfig.accessKeyId, AliYunOssConfig.accessKeySecret, conf); + try + { + // 上传文件。 + var cc = client.PutObject(AliYunOssConfig.bucket, key, filepath); + var newurl = string.Format("{0}{1}", AliYunOssConfig.wendpoint, key); + return newurl; + } + catch (ClientException ex) + { + Console.WriteLine("Put object failed, {0}", ex.Message); + } + } + catch (Exception ex) + { + throw ex; + } + return ""; + } + } +} diff --git a/New_College.Common/Helper/AliyunSmsSender.cs b/New_College.Common/Helper/AliyunSmsSender.cs new file mode 100644 index 0000000..5fd3ea7 --- /dev/null +++ b/New_College.Common/Helper/AliyunSmsSender.cs @@ -0,0 +1,230 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Net; +using System.Net.Http; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace New_College.Common +{ + public class AliyunSmsSender + { + private string RegionId = "cn-hangzhou"; + private string Version = "2017-05-25"; + private string Action = "SendSms"; + private string Format = "JSON"; + private string Domain = "dysmsapi.aliyuncs.com"; + + private int MaxRetryNumber = 3; + private bool AutoRetry = true; + private const string SEPARATOR = "&"; + private int TimeoutInMilliSeconds = 100000; + + private string AccessKeyId; + private string AccessKeySecret; + + public AliyunSmsSender(string accessKeyId, string accessKeySecret) + { + this.AccessKeyId = accessKeyId; + this.AccessKeySecret = accessKeySecret; + } + + /// + /// 发送短信 + /// + public async Task<(bool success, string response)> Send(SmsObject sms) + { + var paramers = new Dictionary(); + paramers.Add("PhoneNumbers", sms.Mobile); + paramers.Add("SignName", sms.Signature); + paramers.Add("TemplateCode", sms.TempletKey); + paramers.Add("TemplateParam", JsonConvert.SerializeObject(sms.Data)); + paramers.Add("OutId", sms.OutId); + paramers.Add("AccessKeyId", AccessKeyId); + + try + { + string url = GetSignUrl(paramers, AccessKeySecret); + + int retryTimes = 1; + var reply = await HttpGetAsync(url); + while (500 <= reply.StatusCode && AutoRetry && retryTimes < MaxRetryNumber) + { + url = GetSignUrl(paramers, AccessKeySecret); + reply = await HttpGetAsync(url); + retryTimes++; + } + + if (!string.IsNullOrEmpty(reply.response)) + { + var res = JsonConvert.DeserializeObject>(reply.response); + if (res != null && res.ContainsKey("Code") && "OK".Equals(res["Code"])) + { + return (true, response: reply.response); + } + } + + return (false, response: reply.response); + } + catch (Exception ex) + { + return (false, response: ex.Message); + } + } + + private string GetSignUrl(Dictionary parameters, string accessSecret) + { + var imutableMap = new Dictionary(parameters); + imutableMap.Add("Timestamp", FormatIso8601Date(DateTime.Now)); + imutableMap.Add("SignatureMethod", "HMAC-SHA1"); + imutableMap.Add("SignatureVersion", "1.0"); + imutableMap.Add("SignatureNonce", Guid.NewGuid().ToString()); + imutableMap.Add("Action", Action); + imutableMap.Add("Version", Version); + imutableMap.Add("Format", Format); + imutableMap.Add("RegionId", RegionId); + + IDictionary sortedDictionary = new SortedDictionary(imutableMap, StringComparer.Ordinal); + StringBuilder canonicalizedQueryString = new StringBuilder(); + foreach (var p in sortedDictionary) + { + canonicalizedQueryString.Append("&").Append(PercentEncode(p.Key)).Append("=").Append(PercentEncode(p.Value)); + } + + StringBuilder stringToSign = new StringBuilder(); + stringToSign.Append("GET"); + stringToSign.Append(SEPARATOR); + stringToSign.Append(PercentEncode("/")); + stringToSign.Append(SEPARATOR); + stringToSign.Append(PercentEncode(canonicalizedQueryString.ToString().Substring(1))); + + string signature = SignString(stringToSign.ToString(), accessSecret + "&"); + + imutableMap.Add("Signature", signature); + + return ComposeUrl(Domain, imutableMap); + } + + private static string FormatIso8601Date(DateTime date) + { + return date.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss'Z'", CultureInfo.CreateSpecificCulture("en-US")); + } + + /// + /// 签名 + /// + public static string SignString(string source, string accessSecret) + { + using (var algorithm = new HMACSHA1(Encoding.UTF8.GetBytes(accessSecret.ToCharArray()))) + { + return Convert.ToBase64String(algorithm.ComputeHash(Encoding.UTF8.GetBytes(source.ToCharArray()))); + } + } + + private static string ComposeUrl(string endpoint, Dictionary parameters) + { + StringBuilder urlBuilder = new StringBuilder(""); + urlBuilder.Append("http://").Append(endpoint); + if (-1 == urlBuilder.ToString().IndexOf("?")) + { + urlBuilder.Append("/?"); + } + string query = ConcatQueryString(parameters); + return urlBuilder.Append(query).ToString(); + } + + private static string ConcatQueryString(Dictionary parameters) + { + if (null == parameters) + { + return null; + } + StringBuilder sb = new StringBuilder(); + + foreach (var entry in parameters) + { + String key = entry.Key; + String val = entry.Value; + + sb.Append(HttpUtility.UrlEncode(key, Encoding.UTF8)); + if (val != null) + { + sb.Append("=").Append(HttpUtility.UrlEncode(val, Encoding.UTF8)); + } + sb.Append("&"); + } + + int strIndex = sb.Length; + if (parameters.Count > 0) + sb.Remove(strIndex - 1, 1); + + return sb.ToString(); + } + + public static string PercentEncode(string value) + { + StringBuilder stringBuilder = new StringBuilder(); + string text = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~"; + byte[] bytes = Encoding.GetEncoding("UTF-8").GetBytes(value); + foreach (char c in bytes) + { + if (text.IndexOf(c) >= 0) + { + stringBuilder.Append(c); + } + else + { + stringBuilder.Append("%").Append( + string.Format(CultureInfo.InvariantCulture, "{0:X2}", (int)c)); + } + } + return stringBuilder.ToString(); + } + + private async Task<(int StatusCode, string response)> HttpGetAsync(string url) + { + HttpClientHandler handler = new HttpClientHandler(); + handler.Proxy = null; + handler.AutomaticDecompression = DecompressionMethods.GZip; + + using (var http = new HttpClient(handler)) + { + http.Timeout = new TimeSpan(TimeSpan.TicksPerMillisecond * TimeoutInMilliSeconds); + HttpResponseMessage response = await http.GetAsync(url); + return ((int)response.StatusCode, await response.Content.ReadAsStringAsync()); + } + } + + public class SmsObject + { + /// + /// 手机号 + /// + public string Mobile { set; get; } + + /// + /// 签名 + /// + public string Signature { get; set; } + + /// + /// 模板Key + /// + public string TempletKey { set; get; } + + /// + /// 短信数据 + /// + public IDictionary Data { set; get; } + + /// + /// 业务ID + /// + public string OutId { set; get; } + } + } +} diff --git a/New_College.Common/Helper/Appsettings.cs b/New_College.Common/Helper/Appsettings.cs new file mode 100644 index 0000000..6ae5ad1 --- /dev/null +++ b/New_College.Common/Helper/Appsettings.cs @@ -0,0 +1,69 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration.Json; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace New_College.Common +{ + /// + /// appsettings.json操作类 + /// + public class Appsettings + { + static IConfiguration Configuration { get; set; } + static string contentPath { get; set; } + + public Appsettings(string contentPath) + { + string Path = "appsettings.json"; + + //如果你把配置文件 是 根据环境变量来分开了,可以这样写 + //Path = $"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json"; + + Configuration = new ConfigurationBuilder() + .SetBasePath(contentPath) + .Add(new JsonConfigurationSource { Path = Path, Optional = false, ReloadOnChange = true })//这样的话,可以直接读目录里的json文件,而不是 bin 文件夹下的,所以不用修改复制属性 + .Build(); + } + + public Appsettings(IConfiguration configuration) + { + Configuration = configuration; + } + + /// + /// 封装要操作的字符 + /// + /// 节点配置 + /// + public static string app(params string[] sections) + { + try + { + + if (sections.Any()) + { + return Configuration[string.Join(":", sections)]; + } + } + catch (Exception) { } + + return ""; + } + + /// + /// 递归获取配置信息数组 + /// + /// + /// + /// + public static List app(params string[] sections) + { + List list = new List(); + // 引用 Microsoft.Extensions.Configuration.Binder 包 + Configuration.Bind(string.Join(":", sections), list); + return list; + } + } +} diff --git a/New_College.Common/Helper/Base32Helper.cs b/New_College.Common/Helper/Base32Helper.cs new file mode 100644 index 0000000..68e592b --- /dev/null +++ b/New_College.Common/Helper/Base32Helper.cs @@ -0,0 +1,101 @@ +using System; +using System.Text; + +namespace DPE.Core.Common.Helper +{ + public sealed class Base32Helper + { + + // the valid chars for the encoding + private static string ValidChars = "QAZ2WSX3" + "EDC4RFV5" + "TGB6YHN7" + "UJM8K9LP"; + + /// + /// Converts an array of bytes to a Base32-k string. + /// + public static string ToString(byte[] bytes) + { + StringBuilder sb = new StringBuilder(); // holds the base32 chars + byte index; + int hi = 5; + int currentByte = 0; + + while (currentByte < bytes.Length) + { + // do we need to use the next byte? + if (hi > 8) + { + // get the last piece from the current byte, shift it to the right + // and increment the byte counter + index = (byte)(bytes[currentByte++] >> (hi - 5)); + if (currentByte != bytes.Length) + { + // if we are not at the end, get the first piece from + // the next byte, clear it and shift it to the left + index = (byte)(((byte)(bytes[currentByte] << (16 - hi)) >> 3) | index); + } + + hi -= 3; + } + else if (hi == 8) + { + index = (byte)(bytes[currentByte++] >> 3); + hi -= 3; + } + else + { + + // simply get the stuff from the current byte + index = (byte)((byte)(bytes[currentByte] << (8 - hi)) >> 3); + hi += 5; + } + + sb.Append(ValidChars[index]); + } + + return sb.ToString(); + } + + + /// + /// Converts a Base32-k string into an array of bytes. + /// + /// + /// Input string s contains invalid Base32-k characters. + /// + public static byte[] FromBase32String(string str) + { + int numBytes = str.Length * 5 / 8; + byte[] bytes = new Byte[numBytes]; + + // all UPPERCASE chars + str = str.ToUpper(); + + int bit_buffer; + int currentCharIndex; + int bits_in_buffer; + + if (str.Length < 3) + { + bytes[0] = (byte)(ValidChars.IndexOf(str[0]) | ValidChars.IndexOf(str[1]) << 5); + return bytes; + } + + bit_buffer = (ValidChars.IndexOf(str[0]) | ValidChars.IndexOf(str[1]) << 5); + bits_in_buffer = 10; + currentCharIndex = 2; + for (int i = 0; i < bytes.Length; i++) + { + bytes[i] = (byte)bit_buffer; + bit_buffer >>= 8; + bits_in_buffer -= 8; + while (bits_in_buffer < 8 && currentCharIndex < str.Length) + { + bit_buffer |= ValidChars.IndexOf(str[currentCharIndex++]) << bits_in_buffer; + bits_in_buffer += 5; + } + } + + return bytes; + } + } +} diff --git a/New_College.Common/Helper/ClearHtmlHelper.cs b/New_College.Common/Helper/ClearHtmlHelper.cs new file mode 100644 index 0000000..194cbad --- /dev/null +++ b/New_College.Common/Helper/ClearHtmlHelper.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Common.Helper +{ + public static class ClearHtmlHelper + { + + public static string SHTML(string html) + { + if (!string.IsNullOrWhiteSpace(html)) + { + html = html.Trim(); + html = html.Replace(@"/]*?>(.*?)<\/script>/si", ""); + //html = html.Replace(@"/]*?>(.*?)<\/style>/si", ""); + html = html.Replace("\t", ""); + html = html.Replace("\r\n", ""); + html = html.Replace("\r", ""); + html = html.Replace("\n", ""); + html = html.Replace(" ", ""); + html = html.Replace(" ", ""); + } + + //html=html.Replace("",""); + return html; + } + } +} diff --git a/New_College.Common/Helper/CommonTools.cs b/New_College.Common/Helper/CommonTools.cs new file mode 100644 index 0000000..1e242c0 --- /dev/null +++ b/New_College.Common/Helper/CommonTools.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Reflection; +using System.Text; + +namespace New_College.Common.Helper +{ + /// + /// 常用的基础方法 + /// + public static class CommonTools + { + /// + /// 获取美剧类型的Description + /// + /// + /// + public static string GetDescription(this Enum value) + { + return value.GetType() + .GetMember(value.ToString()) + .FirstOrDefault()? + .GetCustomAttribute()? + .Description; + } + } +} diff --git a/New_College.Common/Helper/ConsoleHelper.cs b/New_College.Common/Helper/ConsoleHelper.cs new file mode 100644 index 0000000..dc831ab --- /dev/null +++ b/New_College.Common/Helper/ConsoleHelper.cs @@ -0,0 +1,54 @@ +using System; + +namespace New_College.Common.Helper +{ + public static class ConsoleHelper + { + static void WriteColorLine(string str, ConsoleColor color) + { + ConsoleColor currentForeColor = Console.ForegroundColor; + Console.ForegroundColor = color; + Console.WriteLine(str); + Console.ForegroundColor = currentForeColor; + } + + /// + /// 打印错误信息 + /// + /// 待打印的字符串 + /// 想要打印的颜色 + public static void WriteErrorLine(this string str, ConsoleColor color = ConsoleColor.Red) + { + WriteColorLine(str, color); + } + + /// + /// 打印警告信息 + /// + /// 待打印的字符串 + /// 想要打印的颜色 + public static void WriteWarningLine(this string str, ConsoleColor color = ConsoleColor.Yellow) + { + WriteColorLine(str, color); + } + /// + /// 打印正常信息 + /// + /// 待打印的字符串 + /// 想要打印的颜色 + public static void WriteInfoLine(this string str, ConsoleColor color = ConsoleColor.White) + { + WriteColorLine(str, color); + } + /// + /// 打印成功的信息 + /// + /// 待打印的字符串 + /// 想要打印的颜色 + public static void WriteSuccessLine(this string str, ConsoleColor color = ConsoleColor.Green) + { + WriteColorLine(str, color); + } + + } +} diff --git a/New_College.Common/Helper/DataHelper.cs b/New_College.Common/Helper/DataHelper.cs new file mode 100644 index 0000000..b477d97 --- /dev/null +++ b/New_College.Common/Helper/DataHelper.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Common.Helper +{ + public static class DataHelper + { + public static void AddInfo() + { + + } + } + + public static class ShowPsychological + { + public static List Psyintellectags { get; set; } = new List() { + new Psyintellectag() { name = "人际关系智能", title = "人际关系智能(interpersonal intelligence)", content = "是指能够有效的理解别人和与人交往的能力,辨识与了解他人的感觉、信念与意向的能力,其核心成份包括了注意并区辨他人的心情、性情、动机与意向,并做出适当反应的能力。成功的教师、社会工作者、演员或政治家就是最好的例证。" }, + new Psyintellectag() { name = "自然环境智能", title = "自然环境智能(naturalist intelligence)", content = "是指对周遭环境的动物、植物、人工制品、及其它事物进行有效辨识及分类的能力。详而言之,自然观察智能不只包括了对动植物的辨识能力,也包括了从引擎声辨识汽车,在科学实验室中辨识新奇样式,以及艺术风格与生活模式的察觉等能力。学有专长的自然观察者包括农民、植物学家、猎人、生态学家和庭园设计师。" }, + new Psyintellectag() { name = "音乐智能", title = ">音乐智能(musical intelligence)", content = "是指人敏锐地感知音调、旋律、节奏和音色的能力,以及察觉、辨别、改变和表达音乐的能力,它允许人们能对声音的意义加以创造、沟通与理解,主要包括了对节奏、音调或旋律、音色的敏感性。具有这种智能的人包括作曲家、指挥家、乐师、音乐评论家、制造乐器者和善于领悟音乐的听众。" }, + new Psyintellectag() { name = "运动智能", title = "运动智能(bodily-kinesthetic intelligence)", content = "是指人能够巧妙地操纵物体和调整身体的技能,即运用身体来表达想法与感觉、以及运用双手生产或改造事物的能力,其核心成份包括了巧妙地处理(包括粗略与精致的身体动作)物体的能力,巧妙地使用不同的身体动作来运作或表达的能力,以及自身感受的、触觉的和由触觉引起的能力。运动员、舞蹈家、外科医生和手艺人都是这方面的例证。" }, + new Psyintellectag() { name = "空间视觉智能", title = "空间视觉智能(spatial intellignece)", content = "是指人对视觉性或空间性的讯息之知觉能力,以及把所知觉到的加以表现出来的能力。其核心成份包括了精确知觉物体或形状的能力,对知觉到的物体或形状进行操作或在心中进行空间旋转的能力,在脑中形成心像以及转换心像的能力,对图像艺术所感受的视觉与空间之张力、平衡与组成等关系的敏感性,如航海家、飞行员、雕塑家、画家和建筑师所表现的能力。" }, + new Psyintellectag() { name = "逻辑数学智能", title = "逻辑数学智能(logical-mathematical intelligence)", content = "是指人能够计算、量化、思考命题和假设,并进行复杂数学运算的能力,即运用数字和推理的能力,它涉及了对抽象关系的使用与了解,其核心成份包括了觉察逻辑或数字之样式(pattern)的能力,以及进行广泛的推理,或巧妙地处理抽象分析的能力。科学家、数学家、会计师、工程师和电脑程序设计师都显示出很强的逻辑-数学智能。" }, + new Psyintellectag() { name = "语言智能", title = "语言智能(linguistic intelligence)", content = "是指用语言表达和欣赏语言深层内涵的能力,即口语及书写文字的运用能力,它包括了对语言文字之意义(语意能力)、规则(语法能力),以及声音、节奏、音调、诗韵(音韵学能力)、不同功能(语言的实用能力)的敏感性。作家、诗人、记者、演说家、新闻播音员都显示出高度的语言智能。" }, + new Psyintellectag() { name = "自我内省智能", title = "自我内省智能(intarpersonal intelligence)", content = "是指能对自我进行省察、区辨自我的感觉、建构正确自我知觉、产生适当行动的能力,并善于用这种知识计划和引导自己的人生。此种智能也扮演着「智能中枢的角色」(central intelligences agency),使得个体能知道自己的能力,并了解如何有效发挥这些能力。其核心成份为发展可靠的自我运作模式,以了解自已之欲求、目标、焦虑与优缺点,并藉以引导自己的行为之能力。心理学家、哲学家就是拥有高度自我认识智能的典型代表。" } + }; + public static List Psysuggesttypes { get; set; } = new List() { + new Psysuggesttype (){ name="人际关系智能",suggest="强化建议:经常参加聚会,掌握倾听技巧,增强同理心"}, + new Psysuggesttype (){ name="自然环境智能",suggest="强化建议:尝试郊游或参观博物馆,尝试种植花草或抚养宠物"}, + new Psysuggesttype (){ name="音乐智能",suggest="强化建议:学习乐器,经常听音乐,尝试唱歌"}, + new Psysuggesttype (){ name="运动智能",suggest="强化建议:经常运动,尝试表演或舞蹈"}, + new Psysuggesttype (){ name="空间视觉智能",suggest="强化建议:学习绘画,经常装配物件(如玩具、积木等)"}, + new Psysuggesttype (){ name="逻辑数学智能",suggest="强化建议:学习心算,多玩一些推理游戏"}, + new Psysuggesttype (){ name="语言智能",suggest="强化建议:阅读文学作品,学讲故事,学习外语"}, + new Psysuggesttype (){ name="自我内省智能",suggest="强化建议:尝试写日记(以心得体会为主),制定自我发展计划,偶尔做一些白日梦"}, + }; + } + + public class Psyintellectag + { + public string name { get; set; } + + public string title { get; set; } + + public string content { get; set; } + } + + public class Psysuggesttype + { + public string name { get; set; } + + public string suggest { get; set; } + } + + + + public static class ShowMultiDimension + { + public static List showsuggesttaggests { get; set; } = new List() { + new Showsuggesttaggest (){ name="学习方法",suggest="建议:强化视觉感元,整合多种感元,以利于对学习信息的有效加工。(见学习类型)利用自己的强势心略,比方说书法好,可以誊写知识要点;如果英语好,可以象学外语一样学数学",score=6,truetaggest="结果:你不重视学习方法,需要更新学习方法,明确自己的学习类型",falsetaggest="你很重视学习方法,学习方法得当"}, + new Showsuggesttaggest (){name="信息处理",suggest="建议:强化知识的视觉影像,遵循记忆的遗忘规律,以利于对学习内容的记忆复习。牢记知识记忆的十二原则:重点、联系、视觉、注意、复述、动力、精力、兴趣、纲目、反馈、重组、时间",score=8,truetaggest="结果:你的信息处理能力不够强,需要掌握更多知识处理的技巧、知识记忆的方法以及培养良好的复习习惯",falsetaggest="你的信息处理能力强,较好地运用科学的记忆和复习方法" }, + new Showsuggesttaggest (){name="时间管理",suggest="建议:调整自己生物钟,保证学习时间处于兴奋状态。利用时间线技术,提高时间效率。制定学习时间表:主课遵循2:1的法则排定时间,尽量不跑“马拉松”,适当安排休闲时间。时间表必须留有弹性",score=7,truetaggest="结果:不会合理安排学习时间,学习计划性较差",falsetaggest="合理安排学习时间,珍惜学习时间" }, + new Showsuggesttaggest (){name="学习目标",suggest="建议:积极的心态:“你期望的效果是什么?”,“当你达到你期望的效果时,你是怎么知道的?”,“怎样才能达到你期望的效果?”,“谁能帮你?”“哪些资源可以利用?”合理缩放目标:目标事件过小,赋予较大意义,“如果你完成,将有什么积极意义?”;目标任务过大,分解任务,“什么阻止你实现?你想做什么?” ",score=7,truetaggest="结果:学习目标不明确,不擅长设定学习目标,没有掌握学习目标设定和管理的方法",falsetaggest="学习目标明确,善于设定自己学习目标,学习有较好的计划" }, + new Showsuggesttaggest (){name="注意力集中",suggest="建议:注意力集中步骤:物质环境准备、良好身心状态(积极放松,把思考交给潜意识)、积极学习(动用多感官)",score=7,truetaggest="结果:的学习时注意力不够集中,不善于调整自己学习的身心状态,没有掌握注意力集中的技巧",falsetaggest="学习时注意力集中,善于调整自己学习的身心状态" }, + new Showsuggesttaggest (){name="阅读技巧",suggest="建议:SQ4R阅读法:快速浏览多遍(Survey)、设问(Question)、阅读(Reading)、笔记(Record)、复述(Recite)、复习(Review)",score=6,truetaggest="结果:阅读教科书效果不佳,没有养成阅读教科书的良好习惯",falsetaggest="基本掌握教科书的阅读方法,很善于利用教科书学习" }, + new Showsuggesttaggest (){name="阅读标注技巧",suggest="",score=6,truetaggest="结果:不善于在教科书上作标注,不大会利用标注学习",falsetaggest="基本掌握教科书的标注方法,很善于利用教科书标注来学习" }, + new Showsuggesttaggest (){name="听讲笔记技巧",suggest="建议:学习书写听讲笔记(比如采用Cornell笔记法),掌握课堂积极放松法",score=6,truetaggest="结果:不擅长做听讲笔记,课堂效率低",falsetaggest="你的听讲笔记比较好,善于利用听讲笔记学习,课堂效率高" }, + new Showsuggesttaggest (){name="应试策略",suggest="建议:明确考试目标内容,制定复习计划,书写复习小结,(a)考前做一些有代表性的例题和习题,从这一些题目中回想重点,回想时若发现忘了重点,翻开笔记看一看那一部份重点就可。(b)将笔记上的重点(或整理出的重点)重复多次地看,虽然不耐烦了还要再看,过度50%",score=6,truetaggest="结果:不擅长复习,没有良好的应试策略",falsetaggest="善于复习,应试策略科学有效" }, + }; + } + + public class Showsuggesttaggest + { + public string name { get; set; } + + public string suggest { get; set; } + + public string truetaggest { get; set; } + public string falsetaggest { get; set; } + + /// + /// 分数点 小于最小 大于最大 + /// + public int score { get; set; } + } + /// + /// sas + /// + public static class ShowSelfofAnxiety + { + public static List anxietyInfos { get; set; } = new List() { + new SelfofAnxietyInfo (){ title="焦虑情况:焦虑程度异常(重度)",suggess="测试表明,被试存在重度的焦虑。被试常常会为某些事情感到非常紧张、担忧,会无缘无故地感到害怕或惊恐、认为将要发生什么不好的事情,有时会有要发疯的感觉。在焦虑的时候可能会出现许多与自主神经系统有关的不良症状,例如脸红、出汗、心跳加快等;精力可能非常差,身体的各项功能会受到重度的负面影响。被试的具体表现请参看对各个分量表的解释。建议被试要全面地看待焦虑,适度的焦虑会提高工作效率和操作水平,是具有一定的积极意义的。如果要降低焦虑,就要学会调节自己的情绪,可以进行一下放松训练,让心情和身体慢慢松弛下来;也可以做一些感兴趣的事情以转移注意力;还可以找朋友聊聊天,倾诉内心的烦恼。被试要提高自信,积极地面对生活,对于引起焦虑的问题不要逃避,而是要想办法努力解决,只有这样才能比较彻底地减轻焦虑。如果问题比较严重,自我调节没有什么效果,则建议被试做做心理咨询,接受专业的心理辅导。",score=1}, + new SelfofAnxietyInfo (){ title="焦虑情况:中度焦虑",suggess="测试表明,被试存在中度的焦虑。被试常常会为某些事情感到紧张、担忧,会无缘无故地感到害怕、认为将要发生什么不好的事情。在焦虑的时候可能会出现较多与自主神经系统有关的不良症状,例如脸红、出汗、心跳加快等;精力比较差,身体的各项功能会受到中度的负面影响。被试的具体表现请参看对各个分量表的解释。建议被试要全面地看待焦虑,适度的焦虑会提高工作效率和操作水平,是具有一定的积极意义的。如果要降低焦虑,就要学会调节自己的情绪,可以进行一下放松训练,让心情和身体慢慢松弛下来;也可以做一些感兴趣的事情以转移注意力;还可以找朋友聊聊天,倾诉内心的烦恼。被试要提高自信,积极地面对生活,对于引起焦虑的问题不要逃避,而是要想办法努力解决,只有这样才能比较彻底地减轻焦虑。",score=2}, + new SelfofAnxietyInfo (){ title="焦虑情况:轻度焦虑",suggess="测试表明,被试存在轻度的焦虑。被试有时会为某些事情感到紧张、担忧,有时会无缘无故地感到害怕、认为将要发生什么不好的事情。在焦虑的时候可能会出现一些与自主神经系统有关的不良症状,例如脸红、出汗、心跳加快等;精力会所有下降,身体的各项功能会受到轻度的负面影响。被试的具体表现请参看对各个分量表的解释。建议被试要全面地看待焦虑,适度的焦虑会提高工作效率和操作水平,是具有一定的积极意义的。如果要降低焦虑,就要学会调节自己的情绪,可以进行一下放松训练,让心情和身体慢慢松弛下来;也可以做一些感兴趣的事情以转移注意力;还可以找朋友聊聊天,倾诉内心的感受。",score=3}, + new SelfofAnxietyInfo (){ title="焦虑情况:不存在焦虑",suggess="测试表明,被试不存在焦虑。被试没有或很少为某些事情感到紧张、担忧,对未来比较乐观,不会无缘无故地感到害怕、认为将要发生什么不好的事情。由于被试心情比较平静、放松,所以也很少出现与焦虑有关的自主神经系统的不良症状,例如脸红、出汗、心跳加快等,精力比较充沛,身体的各项功能比较正常。希望被试继续保持这种良好的状态。",score=4}, + + }; + } + + public class SelfofAnxietyInfo + { + public string title { get; set; } + + public string suggess { get; set; } + + public int score { get; set; } + } + + /// + /// mht + /// + public static class ShowMentalHealth + { + public static List mentalHealthInfos { get; set; } = new List() { + new MentalHealthInfo (){ title="学习焦虑",maxsuggest="可能对考试怀有恐惧心理,无法安心学习,十分关心考试分数。",minsuggest="可能学习焦虑低,学习不会受到困扰,能正确对待考试成绩。"}, + new MentalHealthInfo (){ title="对人焦虑",maxsuggest="可能过分注重自己的形象,害怕与人交往,退缩。",minsuggest="可能热情,大方,容易结交朋友。"}, + new MentalHealthInfo (){ title="孤独倾向",maxsuggest="可能孤独.抑郁,不善于与人交往,自我封闭。",minsuggest="可能爱好社交,喜欢寻求刺激,喜欢与他人在一起。"}, + new MentalHealthInfo (){ title="自责倾向",maxsuggest="可能自卑,常怀疑自己的能力,常将失败.过失归咎于自己。",minsuggest="可能自信,能正确看待失败。"}, + new MentalHealthInfo (){ title="过敏倾向",maxsuggest="可能过于敏感,容易为一些小事而烦恼。",minsuggest="可能敏感性较低,能较好地处理日常事物。"}, + new MentalHealthInfo (){ title="身体症状",maxsuggest="可能在极度焦虑的时候,会出现呕吐失眠、小便失禁等明显症状。",minsuggest="可能基本没有身体异常表现。"}, + new MentalHealthInfo (){ title="恐怖倾向",maxsuggest="可能对某些日常事物,如黑暗等,有较严重的恐怖感。",minsuggest="可能基本没有恐怖感。"}, + new MentalHealthInfo (){ title="冲动倾向",maxsuggest="可能十分冲动,自制力较差。",minsuggest="可能基本没有冲动。"}, + }; + } + + public class MentalHealthInfo + { + public string title { get; set; } + public string maxsuggest { get; set; } + public string minsuggest { get; set; } + } + + public class ShowSelfofDepression + { + public static List selfofDepressionInfos { get; set; } = new List() + { + new SelfofDepressionInfo (){title="抑郁程度:正常(没有抑郁、轻度抑郁)",result="抑郁症是一种常见的心理状态,主要表现为悲观、绝望、烦躁,饮食习惯改变,失眠,兴趣减少或注意力分散,有自杀念头,对履行社会职责有抵触感,极度疲劳感,反应迟钝或敏感等。被试情绪正常,没有抑郁。被试心情很好,情绪稳定,大脑和身体的各项功能也很正常,精力很充沛,生活充实,对未来充满了希望。希望被试继续保持这种好状态。",score=1}, + new SelfofDepressionInfo (){title="抑郁程度:轻度抑郁",result="抑郁症是一种常见的心理状态,主要表现为悲观、绝望、烦躁,饮食习惯改变,失眠,兴趣减少或注意力分散,有自杀念头,对履行社会职责有抵触感,极度疲劳感,反应迟钝或敏感等。对于每个人来说,存在抑郁心理是很普遍的事情,关键在于我们怎样去调节自己。被试有轻微或轻度抑郁。最近一周里,被试有时会感到情绪低落,夜里睡不好,身体不太舒服,或觉得自己没用,生活没有意义。但是大部分时间心情很好,精力比较充沛,大脑和身体的各项功能也比较正常,觉得自己有用,生活有意义。建议被试多找知心朋友、亲人倾诉不愉快的事;扩大人际交往,多交朋友,多和精力充沛、充满活力的人相处;加强身体锻炼,多沐浴阳光;多吃维生素B含量丰富的食物,像粗粮、鱼等。",score=2}, + new SelfofDepressionInfo (){title="抑郁程度:中度抑郁",result="抑郁症是一种常见的心理状态,主要表现为悲观、绝望、烦躁,饮食习惯改变,失眠,兴趣减少或注意力分散,有自杀念头,对履行社会职责有抵触感,极度疲劳感,反应迟钝或敏感等。对于每个人来说,存在抑郁心理是很普遍的事情,关键在于我们怎样去调节自己。被试有中度或重度抑郁。最近一周内,被试经常感到情绪沮丧郁闷,心情比较差,或者夜里睡不好,身体功能有些不正常,容易无故疲劳,头脑不清楚,做事不像以前那么顺利,经常怀疑自己的价值和生活的意义,对未来感到悲观失望,或想到死。建议被试客观地评价自己和他人;积极面对生活中遇到的挫折和困难,看到事情的光明面;多跟亲朋好友聊天、倾诉;出去逛街或旅游,给自己换个环境;加强身体锻炼,多沐浴阳光;多吃维生素B含量丰富的食物,像粗粮、鱼等。如果抑郁症状仍不能缓解,可找心理咨询师或者精神科医生咨询一下,让专业人士提供解决办法。",suggess="

心理建议:
    (1)千万不要给自己制订一些难以达到的目标,正确认识自己的现状,正视自己的实际情况;不要再担任一大堆职务;不要对很多事情大包大揽。

    (2)可以将一件大的繁杂的任务分成若干小部分,根据事情轻重缓急,做些力所能及的事;切莫“逞能”,以免完不成任务而心灰意冷。

    (3)尝试多与人们接触和交住,不要自己独来独往。

    (4)尽量参加一些活动,尝试着做一些轻微的体育锻炼,看看电影、电视或听听音乐等。可以参加不同形式和内容的社会活动,如讲演、参观、访问等,但不要太多。

    (5)不要急躁,对自己的状况不要着急,和心理辅导中心联系,他们肯定能帮助你的。

    (6)不妨把自己的感受写出来,然后分析、认识它,哪些是消极的,属于抑郁症的表现,然后想办法摆脱它。

",score=3}, + new SelfofDepressionInfo (){title="抑郁程度:抑郁程度异常(中度或重度)",result="抑郁症是一种常见的心理状态,主要表现为悲观、绝望、烦躁,饮食习惯改变,失眠,兴趣减少或注意力分散,有自杀念头,对履行社会职责有抵触感,极度疲劳感,反应迟钝或敏感等。对于每个人来说,存在抑郁心理是很普遍的事情,关键在于我们怎样去调节自己。被试有中度或重度抑郁。最近一周内,被试经常感到情绪沮丧郁闷,心情比较差,或者夜里睡不好,身体功能有些不正常,容易无故疲劳,头脑不清楚,做事不像以前那么顺利,经常怀疑自己的价值和生活的意义,对未来感到悲观失望,或想到死。建议被试客观地评价自己和他人;积极面对生活中遇到的挫折和困难,看到事情的光明面;多跟亲朋好友聊天、倾诉;出去逛街或旅游,给自己换个环境;加强身体锻炼,多沐浴阳光;多吃维生素B含量丰富的食物,像粗粮、鱼等。如果抑郁症状仍不能缓解,可找心理咨询师或者精神科医生咨询一下,让专业人士提供解决办法。",suggess="

心理建议:
    (1)千万不要给自己制订一些难以达到的目标,正确认识自己的现状,正视自己的实际情况;不要再担任一大堆职务;不要对很多事情大包大揽。

    (2)可以将一件大的繁杂的任务分成若干小部分,根据事情轻重缓急,做些力所能及的事;切莫“逞能”,以免完不成任务而心灰意冷。

    (3)尝试多与人们接触和交住,不要自己独来独往。

    (4)尽量参加一些活动,尝试着做一些轻微的体育锻炼,看看电影、电视或听听音乐等。可以参加不同形式和内容的社会活动,如讲演、参观、访问等,但不要太多。

    (5)不要急躁,对自己的状况不要着急,和心理辅导中心联系,他们肯定能帮助你的。

    (6)不妨把自己的感受写出来,然后分析、认识它,哪些是消极的,属于抑郁症的表现,然后想办法摆脱它。

",score=4}, + }; + } + + public class SelfofDepressionInfo + { + public string title { get; set; } + + public string result { get; set; } + + public string suggess { get; set; } + + public int score { get; set; } + } +} diff --git a/New_College.Common/Helper/DateHelper.cs b/New_College.Common/Helper/DateHelper.cs new file mode 100644 index 0000000..6e2ec10 --- /dev/null +++ b/New_College.Common/Helper/DateHelper.cs @@ -0,0 +1,22 @@ +using System; + +namespace New_College.Common.Helper +{ + public class DateHelper + { + public static DateTime StampToDateTime(string time) + { + time = time.Substring(0, 10); + double timestamp = Convert.ToInt64(time); + System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); + dateTime = dateTime.AddSeconds(timestamp).ToLocalTime(); + return dateTime; + } + + public static string TimeSubTract(DateTime time1,DateTime time2) + { + TimeSpan subTract = time1.Subtract(time2); + return $"{subTract.Days} 天 {subTract.Hours} 时 {subTract.Minutes} 分 "; + } + } +} diff --git a/New_College.Common/Helper/FileHelper.cs b/New_College.Common/Helper/FileHelper.cs new file mode 100644 index 0000000..0709b3c --- /dev/null +++ b/New_College.Common/Helper/FileHelper.cs @@ -0,0 +1,377 @@ +using System; +using System.IO; +using System.Linq; +using System.Text; + +namespace New_College.Common.Helper +{ + public class FileHelper : IDisposable + { + + private bool _alreadyDispose = false; + + #region 构造函数 + public FileHelper() + { + // + // TODO: 在此处添加构造函数逻辑 + // + } + ~FileHelper() + { + Dispose(); ; + } + + protected virtual void Dispose(bool isDisposing) + { + if (_alreadyDispose) return; + _alreadyDispose = true; + } + #endregion + + #region IDisposable 成员 + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #endregion + + #region 取得文件后缀名 + /**************************************** + * 函数名称:GetPostfixStr + * 功能说明:取得文件后缀名 + * 参 数:filename:文件名称 + * 调用示列: + * string filename = "aaa.aspx"; + * string s = EC.FileObj.GetPostfixStr(filename); + *****************************************/ + /// + /// 取后缀名 + /// + /// 文件名 + /// .gif|.html格式 + public static string GetPostfixStr(string filename) + { + int start = filename.LastIndexOf("."); + int length = filename.Length; + string postfix = filename.Substring(start, length - start); + return postfix; + } + #endregion + + #region 根据文件大小获取指定前缀的可用文件名 + /// + /// 根据文件大小获取指定前缀的可用文件名 + /// + /// 文件夹 + /// 文件前缀 + /// 文件大小(1m) + /// 文件后缀(.log) + /// 可用文件名 + public static string GetAvailableFileWithPrefixOrderSize(string folderPath, string prefix, int size = 1 * 1024 * 1024, string ext = ".log") + { + var allFiles = new DirectoryInfo(folderPath); + var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(prefix.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size).ToList(); + + if (selectFiles.Count > 0) + { + return selectFiles.FirstOrDefault().FullName; + } + + return Path.Combine(folderPath, $@"{prefix}_{DateTime.Now.DateToTimeStamp()}.log"); + } + #endregion + + #region 写文件 + /**************************************** + * 函数名称:WriteFile + * 功能说明:写文件,会覆盖掉以前的内容 + * 参 数:Path:文件路径,Strings:文本内容 + * 调用示列: + * string Path = Server.MapPath("Default2.aspx"); + * string Strings = "这是我写的内容啊"; + * EC.FileObj.WriteFile(Path,Strings); + *****************************************/ + /// + /// 写文件 + /// + /// 文件路径 + /// 文件内容 + public static void WriteFile(string Path, string Strings) + { + if (!File.Exists(Path)) + { + FileStream f = File.Create(Path); + f.Close(); + } + StreamWriter f2 = new StreamWriter(Path, false, System.Text.Encoding.GetEncoding("gb2312")); + f2.Write(Strings); + f2.Close(); + f2.Dispose(); + } + + /// + /// 写文件 + /// + /// 文件路径 + /// 文件内容 + /// 编码格式 + public static void WriteFile(string Path, string Strings, Encoding encode) + { + if (!File.Exists(Path)) + { + FileStream f = File.Create(Path); + f.Close(); + } + StreamWriter f2 = new StreamWriter(Path, false, encode); + f2.Write(Strings); + f2.Close(); + f2.Dispose(); + } + #endregion + + #region 读文件 + /**************************************** + * 函数名称:ReadFile + * 功能说明:读取文本内容 + * 参 数:Path:文件路径 + * 调用示列: + * string Path = Server.MapPath("Default2.aspx"); + * string s = EC.FileObj.ReadFile(Path); + *****************************************/ + /// + /// 读文件 + /// + /// 文件路径 + /// + public static string ReadFile(string Path) + { + string s = ""; + if (!File.Exists(Path)) + s = "不存在相应的目录"; + else + { + StreamReader f2 = new StreamReader(Path, System.Text.Encoding.GetEncoding("gb2312")); + s = f2.ReadToEnd(); + f2.Close(); + f2.Dispose(); + } + + return s; + } + + /// + /// 读文件 + /// + /// 文件路径 + /// 编码格式 + /// + public static string ReadFile(string Path, Encoding encode) + { + string s = ""; + if (!File.Exists(Path)) + s = "不存在相应的目录"; + else + { + StreamReader f2 = new StreamReader(Path, encode); + s = f2.ReadToEnd(); + f2.Close(); + f2.Dispose(); + } + + return s; + } + #endregion + + #region 追加文件 + /**************************************** + * 函数名称:FileAdd + * 功能说明:追加文件内容 + * 参 数:Path:文件路径,strings:内容 + * 调用示列: + * string Path = Server.MapPath("Default2.aspx"); + * string Strings = "新追加内容"; + * EC.FileObj.FileAdd(Path, Strings); + *****************************************/ + /// + /// 追加文件 + /// + /// 文件路径 + /// 内容 + public static void FileAdd(string Path, string strings) + { + StreamWriter sw = File.AppendText(Path); + sw.Write(strings); + sw.Flush(); + sw.Close(); + } + #endregion + + #region 拷贝文件 + /**************************************** + * 函数名称:FileCoppy + * 功能说明:拷贝文件 + * 参 数:OrignFile:原始文件,NewFile:新文件路径 + * 调用示列: + * string orignFile = Server.MapPath("Default2.aspx"); + * string NewFile = Server.MapPath("Default3.aspx"); + * EC.FileObj.FileCoppy(OrignFile, NewFile); + *****************************************/ + /// + /// 拷贝文件 + /// + /// 原始文件 + /// 新文件路径 + public static void FileCoppy(string orignFile, string NewFile) + { + File.Copy(orignFile, NewFile, true); + } + + #endregion + + #region 删除文件 + /**************************************** + * 函数名称:FileDel + * 功能说明:删除文件 + * 参 数:Path:文件路径 + * 调用示列: + * string Path = Server.MapPath("Default3.aspx"); + * EC.FileObj.FileDel(Path); + *****************************************/ + /// + /// 删除文件 + /// + /// 路径 + public static void FileDel(string Path) + { + File.Delete(Path); + } + #endregion + + #region 移动文件 + /**************************************** + * 函数名称:FileMove + * 功能说明:移动文件 + * 参 数:OrignFile:原始路径,NewFile:新文件路径 + * 调用示列: + * string orignFile = Server.MapPath("../说明.txt"); + * string NewFile = Server.MapPath("http://www.cnblogs.com/说明.txt"); + * EC.FileObj.FileMove(OrignFile, NewFile); + *****************************************/ + /// + /// 移动文件 + /// + /// 原始路径 + /// 新路径 + public static void FileMove(string orignFile, string NewFile) + { + File.Move(orignFile, NewFile); + } + #endregion + + #region 在当前目录下创建目录 + /**************************************** + * 函数名称:FolderCreate + * 功能说明:在当前目录下创建目录 + * 参 数:OrignFolder:当前目录,NewFloder:新目录 + * 调用示列: + * string orignFolder = Server.MapPath("test/"); + * string NewFloder = "new"; + * EC.FileObj.FolderCreate(OrignFolder, NewFloder); + *****************************************/ + /// + /// 在当前目录下创建目录 + /// + /// 当前目录 + /// 新目录 + public static void FolderCreate(string orignFolder, string NewFloder) + { + Directory.SetCurrentDirectory(orignFolder); + Directory.CreateDirectory(NewFloder); + } + #endregion + + #region 递归删除文件夹目录及文件 + /**************************************** + * 函数名称:DeleteFolder + * 功能说明:递归删除文件夹目录及文件 + * 参 数:dir:文件夹路径 + * 调用示列: + * string dir = Server.MapPath("test/"); + * EC.FileObj.DeleteFolder(dir); + *****************************************/ + /// + /// 递归删除文件夹目录及文件 + /// + /// + /// + public static void DeleteFolder(string dir) + { + if (Directory.Exists(dir)) //如果存在这个文件夹删除之 + { + foreach (string d in Directory.GetFileSystemEntries(dir)) + { + if (File.Exists(d)) + File.Delete(d); //直接删除其中的文件 + else + DeleteFolder(d); //递归删除子文件夹 + } + Directory.Delete(dir); //删除已空文件夹 + } + + } + #endregion + + #region 将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。 + /**************************************** + * 函数名称:CopyDir + * 功能说明:将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。 + * 参 数:srcPath:原始路径,aimPath:目标文件夹 + * 调用示列: + * string srcPath = Server.MapPath("test/"); + * string aimPath = Server.MapPath("test1/"); + * EC.FileObj.CopyDir(srcPath,aimPath); + *****************************************/ + /// + /// 指定文件夹下面的所有内容copy到目标文件夹下面 + /// + /// 原始路径 + /// 目标文件夹 + public static void CopyDir(string srcPath, string aimPath) + { + try + { + // 检查目标目录是否以目录分割字符结束如果不是则添加之 + if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar) + aimPath += Path.DirectorySeparatorChar; + // 判断目标目录是否存在如果不存在则新建之 + if (!Directory.Exists(aimPath)) + Directory.CreateDirectory(aimPath); + // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组 + //如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法 + //string[] fileList = Directory.GetFiles(srcPath); + string[] fileList = Directory.GetFileSystemEntries(srcPath); + //遍历所有的文件和目录 + foreach (string file in fileList) + { + //先当作目录处理如果存在这个目录就递归Copy该目录下面的文件 + + if (Directory.Exists(file)) + CopyDir(file, aimPath + Path.GetFileName(file)); + //否则直接Copy文件 + else + File.Copy(file, aimPath + Path.GetFileName(file), true); + } + + } + catch (Exception ee) + { + throw new Exception(ee.ToString()); + } + } + #endregion + } +} diff --git a/New_College.Common/Helper/GenerateCardNumberHelper.cs b/New_College.Common/Helper/GenerateCardNumberHelper.cs new file mode 100644 index 0000000..7f0d558 --- /dev/null +++ b/New_College.Common/Helper/GenerateCardNumberHelper.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace New_College.Common +{ + public static class GenerateCardNumberHelper + { + public static string GenerateCardNumber(string bin, int length) + { + Random r = new Random() { }; + int[] digits = new int[length]; + var prefixDigits = bin.Select(p => p - '0').ToArray(); + for (var i = 0; i < prefixDigits.Length; i++) + { + digits[i] = prefixDigits[i]; + } + for (var i = bin.Length; i < length - 1; i++) + { + var digit = r.Next(0, 10); + digits[i] = digit; + } + digits[length - 1] = GenerateCheckDigit(digits[..(length - 1)]); + return string.Join(null, digits); + } + + public static bool IsLuhnValid(int[] digits) + { + var sum = CalculateSum(digits, 1); + return sum % 10 == 0; + } + + private static int CalculateSum(int[] digits, int bitShift = 0) + { + var sum = digits.Reverse() + .Select((digit, i) => + (i + bitShift) % 2 == 0 + ? digit * 2 > 9 ? digit * 2 - 9 : digit * 2 + : digit) + .Sum(); + return sum; + } + + public static int GenerateCheckDigit(int[] digits) + { + var sum = CalculateSum(digits); + var lastDigit = sum * 9 % 10; + return lastDigit; + } + } + +} diff --git a/New_College.Common/Helper/GenerateChineseWords.cs b/New_College.Common/Helper/GenerateChineseWords.cs new file mode 100644 index 0000000..5578a3c --- /dev/null +++ b/New_College.Common/Helper/GenerateChineseWords.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Common.Helper +{ + public static class GenerateChineseWords + { + /// + /// 随机产生常用汉字 + /// + /// 要产生汉字的个数 + /// 常用汉字 + public static string GenerateChineseWord(int count) + { + string chineseWords = ""; + System.Random rm = new System.Random(); + Encoding gb = Encoding.GetEncoding("gb2312"); + + for (int i = 0; i < count; i++) + { + // 获取区码(常用汉字的区码范围为16-55) + int regionCode = rm.Next(16, 56); + + // 获取位码(位码范围为1-94 由于55区的90,91,92,93,94为空,故将其排除) + int positionCode; + if (regionCode == 55) + { + // 55区排除90,91,92,93,94 + positionCode = rm.Next(1, 90); + } + else + { + positionCode = rm.Next(1, 95); + } + + // 转换区位码为机内码 + int regionCode_Machine = regionCode + 160;// 160即为十六进制的20H+80H=A0H + int positionCode_Machine = positionCode + 160;// 160即为十六进制的20H+80H=A0H + + // 转换为汉字 + byte[] bytes = new byte[] { (byte)regionCode_Machine, (byte)positionCode_Machine }; + chineseWords += gb.GetString(bytes); + } + return chineseWords; + } + } +} diff --git a/New_College.Common/Helper/GetNetData.cs b/New_College.Common/Helper/GetNetData.cs new file mode 100644 index 0000000..71c731b --- /dev/null +++ b/New_College.Common/Helper/GetNetData.cs @@ -0,0 +1,57 @@ +using System.IO; +using System.Net; +using System.Text; + +namespace New_College.Common.Helper +{ + public class GetNetData + { + public static string Get(string serviceAddress) + { + + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress); + request.Method = "GET"; + request.ContentType = "text/html;charset=UTF-8"; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream myResponseStream = response.GetResponseStream(); + StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8); + string retString = myStreamReader.ReadToEnd(); + myStreamReader.Close(); + myResponseStream.Close(); + + return retString; + } + + public static string Post(string serviceAddress) + { + + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceAddress); + + request.Method = "POST"; + request.ContentType = "application/json"; + string strContent = @"{ ""mmmm"": ""89e"",""nnnnnn"": ""0101943"",""kkkkkkk"": ""e8sodijf9""}"; + using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream())) + { + dataStream.Write(strContent); + dataStream.Close(); + } + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + string encoding = response.ContentEncoding; + if (encoding == null || encoding.Length < 1) + { + encoding = "UTF-8"; //默认编码 + } + StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding)); + string retString = reader.ReadToEnd(); + + return retString; + + //解析josn + //JObject jo = JObject.Parse(retString); + //Response.Write(jo["message"]["mmmm"].ToString()); + + } + } + + +} diff --git a/New_College.Common/Helper/HtmlHelper.cs b/New_College.Common/Helper/HtmlHelper.cs new file mode 100644 index 0000000..5d02c33 --- /dev/null +++ b/New_College.Common/Helper/HtmlHelper.cs @@ -0,0 +1,24 @@ +namespace New_College.Common.Helper +{ + public static class HtmlHelper + { + #region 去除富文本中的HTML标签 + /// + /// 去除富文本中的HTML标签 + /// + /// + /// + /// + public static string ReplaceHtmlTag(string html, int length = 0) + { + string strText = System.Text.RegularExpressions.Regex.Replace(html, "<[^>]+>", ""); + strText = System.Text.RegularExpressions.Regex.Replace(strText, "&[^;]+;", ""); + + if (length > 0 && strText.Length > length) + return strText.Substring(0, length); + + return strText; + } + #endregion + } +} diff --git a/New_College.Common/Helper/JsonHelper.cs b/New_College.Common/Helper/JsonHelper.cs new file mode 100644 index 0000000..d35b566 --- /dev/null +++ b/New_College.Common/Helper/JsonHelper.cs @@ -0,0 +1,155 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Serialization; +using System; +using System.Collections.Generic; + +namespace New_College.Common.Helper +{ + public class JsonHelper + { + /// + /// Json 序列化配置 + /// + public static readonly JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings + { + Converters = new List() + { + new IsoDateTimeConverter{ DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss" } + }, + NullValueHandling = NullValueHandling.Include, + ContractResolver = new CamelCasePropertyNamesContractResolver(), + ReferenceLoopHandling = ReferenceLoopHandling.Serialize, + PreserveReferencesHandling = PreserveReferencesHandling.None, + }; + + /// + /// 转换对象为json格式字符串 + /// + /// + /// 加载设置 + /// + public static string ToJson(object obj, bool loadSetting = true) + { + return loadSetting + // 设置参数为Formatting.Indented可输出格式化后的json + ? JsonConvert.SerializeObject(obj, Formatting.None, JsonSerializerSettings) + : JsonConvert.SerializeObject(obj, Formatting.None); + } + /// + /// 转换json格式字符串为指定类型对象 + /// + /// + /// + /// + public static T ParseJson(string json) + { + try + { + return JsonConvert.DeserializeObject(json); + } + catch (Exception ex) + { + return default(T); + } + } + + + + /// + /// 转换对象为JSON格式数据 + /// + /// + /// 对象 + /// 字符格式的JSON数据 + public static string GetJSON(object obj) + { + string result = String.Empty; + try + { + System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = + new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T)); + using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) + { + serializer.WriteObject(ms, obj); + result = System.Text.Encoding.UTF8.GetString(ms.ToArray()); + } + } + catch (Exception ex) + { + throw ex; + } + return result; + } + /// + /// 转换List的数据为JSON格式 + /// + /// + /// 列表值 + /// JSON格式数据 + public string JSON(List vals) + { + System.Text.StringBuilder st = new System.Text.StringBuilder(); + try + { + System.Runtime.Serialization.Json.DataContractJsonSerializer s = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T)); + + foreach (T city in vals) + { + using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) + { + s.WriteObject(ms, city); + st.Append(System.Text.Encoding.UTF8.GetString(ms.ToArray())); + } + } + } + catch (Exception ex) + { + throw ex; + } + + return st.ToString(); + } + /// + /// JSON格式字符转换为T类型的对象 + /// + /// + /// + /// + public static T ParseFormByJson(string jsonStr) + { + T obj = Activator.CreateInstance(); + using (System.IO.MemoryStream ms = + new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonStr))) + { + System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = + new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T)); + return (T)serializer.ReadObject(ms); + } + } + + public string JSON1(List vals) + { + System.Text.StringBuilder st = new System.Text.StringBuilder(); + try + { + System.Runtime.Serialization.Json.DataContractJsonSerializer s = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(SendData)); + + foreach (SendData city in vals) + { + using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) + { + s.WriteObject(ms, city); + st.Append(System.Text.Encoding.UTF8.GetString(ms.ToArray())); + } + } + } + catch (Exception ex) + { + throw ex; + } + + return st.ToString(); + } + } +} diff --git a/New_College.Common/Helper/MD5Hepler.cs b/New_College.Common/Helper/MD5Hepler.cs new file mode 100644 index 0000000..cd68105 --- /dev/null +++ b/New_College.Common/Helper/MD5Hepler.cs @@ -0,0 +1,67 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace New_College.Common.Helper +{ + public class MD5Helper + { + /// + /// 16位MD5加密 + /// + /// + /// + public static string MD5Encrypt16(string password) + { + var md5 = new MD5CryptoServiceProvider(); + string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password)), 4, 8); + t2 = t2.Replace("-", string.Empty); + return t2; + } + + /// + /// 32位MD5加密 + /// + /// + /// + public static string MD5Encrypt32(string password = "") + { + string pwd = string.Empty; + try + { + if (!string.IsNullOrEmpty(password) && !string.IsNullOrWhiteSpace(password)) + { + MD5 md5 = MD5.Create(); //实例化一个md5对像 + // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择  + byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(password)); + // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 + foreach (var item in s) + { + // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 + pwd = string.Concat(pwd, item.ToString("X2")); + } + } + } + catch + { + throw new Exception($"错误的 password 字符串:【{password}】"); + } + return pwd; + } + + /// + /// 64位MD5加密 + /// + /// + /// + public static string MD5Encrypt64(string password) + { + // 实例化一个md5对像 + // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择  + MD5 md5 = MD5.Create(); + byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(password)); + return Convert.ToBase64String(s); + } + + } +} diff --git a/New_College.Common/Helper/ObjectExtension.cs b/New_College.Common/Helper/ObjectExtension.cs new file mode 100644 index 0000000..0d12328 --- /dev/null +++ b/New_College.Common/Helper/ObjectExtension.cs @@ -0,0 +1,862 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.Linq; + +namespace New_College.Common.Helper +{ + public static class ObjectExtension + { + /// + /// 转成友好字符串 + /// + /// 当前时间 + /// 友好的时间展示 + public static string ToFriendlyString(this DateTime current) + { + var now = DateTime.Now; + var ts = now - current; + if (ts.Days >= 365) + return (ts.Days / 365) + "年前"; + else if (ts.Days >= 30) + return (ts.Days / 30) + "个月前"; + else if (ts.Days > 0) + return ts.Days + "天前"; + else if (ts.Hours > 0) + return ts.Hours + "小时前"; + else if (ts.Minutes > 0) + return ts.Minutes + "分钟前"; + else + return "刚刚"; + } + + /// + /// 当年之初 + /// + /// + /// + public static DateTime Year(this DateTime current) + { + return new DateTime(current.Year, 1, 1); + } + + /// + /// 当月之初 + /// + /// + /// + public static DateTime Month(this DateTime current) + { + return new DateTime(current.Year, current.Month, 1); + } + + /// + /// 将对象转换为指定格式的字符串 + /// + /// + /// + public static string ToJson(this Object obj) + { + return JsonHelper.ToJson(obj); + } + + /// + /// 将手机号转换为打码格式*******5006格式 + /// + /// 手机号 + /// + public static string ToMaskPhone(this string str) + { + #region 打码格式152******** + //var phone = str + ""; + //if (phone.Length > 3) + //{ + // var starts = phone.Substring(0, 3); + // var ends = string.Empty; + // for (var i = 0; i < phone.Length - 3; i++) + // ends += "*"; + // return starts + ends; + //} + //return phone; + #endregion + + //打码格式*******5006 + var phone = str + ""; + var phoneLength = phone.Length; + if (phoneLength > 4) + { + var ends = phone.Substring(phoneLength - 4); + var starts = string.Empty; + for (var i = 0; i < phoneLength - 4; i++) + starts += "*"; + return starts + ends; + } + return phone; + } + + /// + /// 将银行号转换为打码格式6224********5006格式 + /// + /// 卡号 + /// + public static string ToMaskBankCardNo(this string str) + { + var bankCardNo = str + ""; + var bankCardNoLength = bankCardNo.Length; + if (bankCardNoLength > 8) + { + var starts = bankCardNo.Substring(0, 4); + var num = bankCardNo.Substring(4, bankCardNoLength - 4).Length; + var ends = bankCardNo.Substring(num, 4); + var middle = string.Empty; + for (var i = 0; i < num - 4; i++) + middle += "*"; + return starts + middle + ends; + } + return bankCardNo; + } + + /// + /// 去除html标签 + /// + /// 当前字符串 + /// 去除html的字符串 + public static string ClearHtml(this string str) + { + return Regex.Replace(str ?? "", @"<[^>]*>", String.Empty); + } + + /// + /// 截取字符串 + /// + /// 当前字符串 + /// + /// 符号 + /// + public static string Cut(this string str, int len, string symbol = "..") + { + if (str != null) + { + if (str.Length <= len) + return str; + else + return str.Substring(0, len) + symbol; + } + return string.Empty; + } + + /// + /// 将对象属性转换为key-value对 + /// + /// + /// + public static Dictionary ToMap(this Object o) + { + var map = new Dictionary(); + try + { + var t = o.GetType(); + var pi = t.GetProperties(BindingFlags.Public | BindingFlags.Instance); + + foreach (PropertyInfo p in pi) + { + MethodInfo mi = p.GetGetMethod(); + if (mi != null && mi.IsPublic) + { + map.Add(p.Name, mi.Invoke(o, new Object[] { })); + } + } + } + catch + { } + return map; + } + + /// + /// 将对象转换为指定格式的字符串 + /// + /// + /// + public static string ToFormatString(this Object obj) + { + //定义一个List集合,将各个实体类型存起来 + var models = obj.GetType(); + //得到公共属性集合 + var productFields = models.GetProperties(); + + StringBuilder str = new StringBuilder(); + + //得到属性上的标记属性信息即列名 + foreach (PropertyInfo pi in productFields) + { + if (pi.GetValue(obj, null) != null) + { + DescriptionAttribute desc = (DescriptionAttribute)Attribute.GetCustomAttribute(pi, typeof(Attribute)); + if (desc != null) + { + str.AppendFormat("|{0}:{1}", desc.Description ?? string.Empty, pi.GetValue(obj, null)); + } + } + } + //移除第一个竖杠 + if (str.Length > 0) + { str.Remove(0, 1); } + return str.ToString(); + } + + /// + /// 转换为short,默认值:short.MinValue + /// + /// + /// + public static short TryShort(this string strText) + { + return TryShort(strText, short.MinValue); + } + + /// + /// 转换为short + /// + /// + /// + /// + public static short TryShort(this string strText, short defValue) + { + return short.TryParse(strText + "", out short result) ? result : defValue; + } + + /// + /// 转换为short + /// + /// + /// + /// + public static short? TryShort(this string strText, short? defValue) + { + return short.TryParse(strText + "", out short result) ? result : defValue; + } + + /// + /// 转换为Int,默认值:int.MinValue + /// + public static int TryInt(this string strText) + { + return TryInt(strText, int.MinValue); + } + + /// + /// 转换为Int + /// + /// + /// 默认值 + /// + public static int TryInt(this string strText, int defValue) + { + return int.TryParse(strText + "", out int temp) ? temp : defValue; + } + + /// + /// 转换为Int + /// + /// + /// 默认值 + /// + public static int? TryInt(this string strText, int? defValue) + { + return int.TryParse(strText + "", out int temp) ? temp : defValue; + } + + /// + /// 转换为Double,默认值:double.MinValue + /// + public static double TryDouble(this string strText) + { + return TryDouble(strText, double.MinValue); + } + + /// + /// 转换为Double + /// + /// + /// 默认值 + /// + public static double TryDouble(this string strText, double defValue) + { + return double.TryParse(strText + "", out double temp) ? temp : defValue; + } + + /// + /// 转换为Double + /// + /// + /// 默认值 + /// + public static double? TryDouble(this string strText, double? defValue) + { + return double.TryParse(strText + "", out double temp) ? temp : defValue; + } + + /// + /// 转换为Decimal,默认值:decimal.MinValue + /// + public static decimal TryDecimal(this string strText) + { + return TryDecimal(strText, decimal.MinValue); + } + + /// + /// 转换为Decimal + /// + /// + /// 默认值 + /// + public static decimal TryDecimal(this string strText, decimal defValue) + { + return decimal.TryParse(strText + "", out decimal temp) ? temp : defValue; + } + + /// + /// 转换为Decimal + /// + /// + /// 默认值 + /// + public static decimal? TryDecimal(this string strText, decimal? defValue) + { + return decimal.TryParse(strText + "", out decimal temp) ? temp : defValue; + } + + /// + /// 转换为long,默认值:long.MinValue + /// + public static long TryLong(this string strText) + { + return TryLong(strText, long.MinValue); + } + + /// + /// 转换为long + /// + /// + /// 默认值 + /// + public static long TryLong(this string strText, long defValue) + { + return long.TryParse(strText + "", out long temp) ? temp : defValue; + } + + /// + /// 转换为long + /// + /// + /// 默认值 + /// + public static long? TryLong(this string strText, long? defValue) + { + return long.TryParse(strText + "", out long temp) ? temp : defValue; + } + + /// + /// 转换为Boolean,默认值:false + /// + public static Boolean TryBool(this string strText) + { + return TryBool(strText, false); + } + + /// + /// 转换为Boolean + /// + /// + /// 默认值 + /// + public static Boolean TryBool(this string strText, bool defValue) + { + if (strText.TryInt(0) == 1 || strText.TryString().ToUpper() == "TRUE") + return true; + return bool.TryParse(strText + "", out bool temp) ? temp : defValue; + } + + /// + /// 转换为Boolean + /// + /// + /// 默认值 + /// + public static Boolean? TryBool(this string strText, bool? defValue) + { + var i = strText.TryInt(null); + if (i.HasValue) + return i == 1; + return bool.TryParse(strText + "", out bool temp) ? temp : defValue; + } + + /// + /// 转换为DateTime,默认值:DateTimeExtension.DBNull + /// + public static DateTime TryDateTime(this string strText) + { + return TryDateTime(strText, new DateTime(1970, 1, 1)); + } + + /// + /// 转换为DateTime + /// + /// + /// 默认值 + /// + public static DateTime TryDateTime(this string strText, DateTime defValue) + { + //yyyy-MM-dd HH:mm + //yyyy-M-d HH:mm + //\d{4}\-\d{1,2}\-\d{1,2}( \d{1,2}:\d{2})? + var timeText = strText.ToString().Trim(); + Regex re = new Regex(@"^\d{4}\-\d{1,2}\-\d{1,2}[ \+]\d{1,2}:\d{2}?$"); + if (re.IsMatch(timeText)) + { + timeText = string.Format("{0}:00", timeText).Replace("+", " "); + } + + if (DateTime.TryParse(timeText, out var temp)) + return temp; + return defValue; + } + + /// + /// 转换为DateTime + /// + /// + /// 默认值 + /// + public static DateTime? TryDateTime(this string strText, DateTime? defValue) + { + return DateTime.TryParse(strText + "", out var temp) ? temp : defValue; + } + + /// + /// 将对象转换为指定格式的字符串 + /// + /// + /// + public static string ToString(this Object obj) + { + //定义一个List集合,将各个实体类型存起来 + var models = obj.GetType(); + //得到公共属性集合 + var productFields = models.GetProperties(); + + StringBuilder str = new StringBuilder(); + + //得到属性上的标记属性信息即列名 + foreach (PropertyInfo pi in productFields) + { + if (pi.GetValue(obj, null) != null) + { + DescriptionAttribute desc = (DescriptionAttribute)Attribute.GetCustomAttribute(pi, typeof(Attribute)); + if (desc != null) + { + str.AppendFormat("|{0}:{1}", desc.Description ?? string.Empty, pi.GetValue(obj, null)); + } + } + } + //移除第一个竖杠 + if (str.Length > 0) + { str.Remove(0, 1); } + return str.ToString(); + } + + /// + /// 转换为short,默认值:short.MinValue + /// + /// + /// + public static short TryShort(this Object strText) + { + return TryShort(strText, short.MinValue); + } + + /// + /// 转换为short + /// + /// + /// + /// + public static short TryShort(this Object strText, short defValue) + { + short result; + return short.TryParse(strText + "", out result) ? result : defValue; + } + + /// + /// 转换为short + /// + /// + /// + /// + public static short? TryShort(this Object strText, short? defValue) + { + short result; + return short.TryParse(strText + "", out result) ? result : defValue; + } + + /// + /// 转换为Int,默认值:int.MinValue + /// + public static int TryInt(this Object strText) + { + return TryInt(strText, int.MinValue); + } + + /// + /// 转换为Int + /// + /// + /// 默认值 + /// + public static int TryInt(this Object strText, int defValue) + { + int temp; + return int.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为Int + /// + /// + /// 默认值 + /// + public static int? TryInt(this Object strText, int? defValue) + { + int temp; + return int.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为Double,默认值:double.MinValue + /// + public static double TryDouble(this Object strText) + { + return TryDouble(strText, double.MinValue); + } + + /// + /// 转换为Double + /// + /// + /// 默认值 + /// + public static double TryDouble(this Object strText, double defValue) + { + double temp; + return double.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为Double + /// + /// + /// 默认值 + /// + public static double? TryDouble(this Object strText, double? defValue) + { + double temp; + return double.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为Decimal,默认值:decimal.MinValue + /// + public static decimal TryDecimal(this Object strText) + { + return TryDecimal(strText, decimal.MinValue); + } + + /// + /// 转换为Decimal + /// + /// + /// 默认值 + /// + public static decimal TryDecimal(this Object strText, decimal defValue) + { + decimal temp; + return decimal.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为Decimal + /// + /// + /// 默认值 + /// + public static decimal? TryDecimal(this Object strText, decimal? defValue) + { + decimal temp; + return decimal.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为long,默认值:long.MinValue + /// + public static long TryLong(this Object strText) + { + return TryLong(strText, long.MinValue); + } + + /// + /// 转换为long + /// + /// + /// 默认值 + /// + public static long TryLong(this Object strText, long defValue) + { + long temp; + return long.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为long + /// + /// + /// 默认值 + /// + public static long? TryLong(this Object strText, long? defValue) + { + long temp; + return long.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为Boolean,默认值:false + /// + public static Boolean TryBool(this Object strText) + { + return TryBool(strText, false); + } + + /// + /// 转换为Boolean + /// + /// + /// 默认值 + /// + public static Boolean TryBool(this Object strText, bool defValue) + { + if (strText.TryInt(0) == 1) + return true; + bool temp; + return bool.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为Boolean + /// + /// + /// 默认值 + /// + public static Boolean? TryBool(this Object strText, bool? defValue) + { + var i = strText.TryInt(null); + if (i.HasValue) + return i == 1; + bool temp; + return bool.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 转换为DateTime,默认值:DateTimeExtension.DBNull + /// + public static DateTime TryDateTime(this Object strText) + { + return TryDateTime(strText, new DateTime(1970, 1, 1)); + } + + /// + /// 转换为DateTime + /// + /// + /// 默认值 + /// + public static DateTime TryDateTime(this Object strText, DateTime defValue) + { + //yyyy-MM-dd HH:mm + //yyyy-M-d HH:mm + //\d{4}\-\d{1,2}\-\d{1,2}( \d{1,2}:\d{2})? + var timeText = strText.ToString().Trim(); + Regex re = new Regex(@"^\d{4}\-\d{1,2}\-\d{1,2}[ \+]\d{1,2}:\d{2}?$"); + if (re.IsMatch(timeText)) + { + timeText = string.Format("{0}:00", timeText).Replace("+", " "); + } + DateTime temp; + if (DateTime.TryParse(timeText, out temp)) + return temp; + return defValue; + } + + /// + /// 转换为DateTime + /// + /// + /// 默认值 + /// + public static DateTime? TryDateTime(this Object strText, DateTime? defValue) + { + DateTime temp; + return DateTime.TryParse(strText + "", out temp) ? temp : defValue; + } + + /// + /// 为NULL 和 DBNull的返回String.Empty + /// + /// + /// + public static string TryString(this Object str) + { + return TryString(str, ""); + } + + /// + /// 转换为"" + /// + /// + /// + /// + public static string TryString(this Object str, string defvalue = "") + { + return str?.ToString() ?? defvalue; + } + + /// + /// 转化字符串编码 + /// + /// 字符串 + /// 源编码名称 + /// 目标编码名称 + /// + //public static string Encode(this string str, string srcEncodeName, string dstEncodeName) + //{ + // Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + // var srcEncoding = Encoding.GetEncoding(srcEncodeName); + // var dstEncoding = Encoding.GetEncoding(dstEncodeName); + // byte[] srcBytes = srcEncoding.GetBytes(str); + // byte[] bytes = Encoding.Convert(srcEncoding, dstEncoding, srcBytes); + // return dstEncoding.GetString(bytes); + //} + + /// + /// 转换十六进制 + /// + /// + /// + public static string ConvertX8(this int i) + { + return Convert.ToString(i, 16); + } + + /// + /// Pascal 命名方法的字符串 + /// + /// 字符串 + /// + public static string ToPascal(this string str) + { + if (string.IsNullOrEmpty(str)) + { + return ""; + } + else + { + return str.Substring(0, 1).ToUpper() + + str.Substring(1, str.Length - 1); + } + } + + /// + /// Camel 命名方法的字符串 + /// + /// 字符串 + /// + public static string ToCamel(this string str) + { + if (string.IsNullOrEmpty(str)) + { + return ""; + } + else + { + return str.Substring(0, 1).ToLower() + + str.Substring(1, str.Length - 1); + } + } + + /// + /// 当前索引 + /// + /// 数组 + /// 对象 + /// 返回当前索引 + public static int IndexOf(this string[] arr, string obj) + { + var index = -1; + for (int i = 0; i < arr.Length; i++) + { + if (arr[i] == obj) + { + index = -1; + } + } + return index; + } + + /// + /// 获取异常的根异常 + /// + /// + /// + public static Exception GetRootException(this Exception ex) + { + if (ex == null) + return null; + if (ex.InnerException == null) + return ex; + else + { + return GetRootException(ex.InnerException); + } + } + + /// + /// 把转换成字节 + /// + /// + /// + public static byte[] ToBytes(this Stream stream) + { + var bytes = new byte[stream.Length]; + stream.Read(bytes, 0, bytes.Length); + // 设置当前流的位置为流的开始 + stream.Seek(0, SeekOrigin.Begin); + return bytes; + } + + public static XDocument ToXDocument(this XmlDocument document) + { + return document.ToXDocument(LoadOptions.None); + } + + public static XDocument ToXDocument(this XmlDocument document, LoadOptions options) + { + using (XmlNodeReader reader = new XmlNodeReader(document)) + { + return XDocument.Load(reader, options); + } + } + } +} diff --git a/New_College.Common/Helper/OrderGenerateHelper.cs b/New_College.Common/Helper/OrderGenerateHelper.cs new file mode 100644 index 0000000..07bd9a6 --- /dev/null +++ b/New_College.Common/Helper/OrderGenerateHelper.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Common +{ + /** + * 根据当前系统时间加随机序列来生成订单号 + * @return 订单号 + */ + public static class OrderGenerateHelper + { + /// + /// 生成订单号 + /// + /// + /// + public static string GenerateOrderNo(string RT) + { + Random ran = new Random(); + return string.Format("{0}{1}{2}", RT, DateTime.Now.ToString("yyyyMMddHHmmss"), ran.Next(999)); + } + } +} diff --git a/New_College.Common/Helper/RadomHelper.cs b/New_College.Common/Helper/RadomHelper.cs new file mode 100644 index 0000000..46b2205 --- /dev/null +++ b/New_College.Common/Helper/RadomHelper.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Common +{ + public class RadomHelper + { + + + #region 数字随机数 + /// + /// 数字随机数 + /// + /// 生成长度 + /// + public static string RandNum(int n) + { + char[] arrChar = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; + StringBuilder num = new StringBuilder(); + + Random rnd = new Random(DateTime.Now.Millisecond); + + for (int i = 0; i < n; i++) + { + num.Append(arrChar[rnd.Next(0, 9)].ToString()); + + } + + return num.ToString(); + } + + /// + /// 数字随机数 + /// + /// 生成长度 + /// + public static string RandNumdayu0(int n) + { + char[] arrChar = new char[] { '6', '7', '8' }; + StringBuilder num = new StringBuilder(); + + Random rnd = new Random(DateTime.Now.Millisecond); + + for (int i = 0; i < n; i++) + { + num.Append(arrChar[rnd.Next(6, 8)].ToString()); + + } + + return num.ToString(); + } + #endregion + + #region 数字随机数 + /// + /// 数字随机数 + /// + /// 生成长度 + /// + public static string RandNumZF(int n) + { + string[] arrChar = new string[] { "1", "2", "3", "4", "5", "-1", "-2", "-3", "-4", "-5" }; + StringBuilder num = new StringBuilder(); + Random rnd = new Random(DateTime.Now.Millisecond); + for (int i = 0; i < n; i++) + { + num.Append(arrChar[rnd.Next(0, 9)].ToString()); + } + return num.ToString(); + } + #endregion + + #region 数字和字母随机数 + /// + /// 数字和字母随机数 + /// + /// 生成长度 + /// + public static string RandCode(int n) + { + char[] arrChar = new char[]{ + 'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x', + '0','1','2','3','4','5','6','7','8','9', + 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z' + }; + + StringBuilder num = new StringBuilder(); + + Random rnd = new Random(DateTime.Now.Millisecond); + for (int i = 0; i < n; i++) + { + num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString()); + + } + + return num.ToString(); + } + #endregion + + #region 字母随机数 + /// + /// 字母随机数 + /// + /// 生成长度 + /// + public static string RandLetter(int n) + { + char[] arrChar = new char[]{ + 'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x', + '_', + 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z' + }; + + StringBuilder num = new StringBuilder(); + + Random rnd = new Random(DateTime.Now.Millisecond); + for (int i = 0; i < n; i++) + { + num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString()); + + } + + return num.ToString(); + } + #endregion + + #region 日期随机函数 + /// + /// 日期随机函数 + /// + /// 长度 + /// + public static string DateRndName(Random ra) + { + DateTime d = DateTime.Now; + string s = null, y, m, dd, h, mm, ss; + y = d.Year.ToString(); + m = d.Month.ToString(); + if (m.Length < 2) m = "0" + m; + dd = d.Day.ToString(); + if (dd.Length < 2) dd = "0" + dd; + h = d.Hour.ToString(); + if (h.Length < 2) h = "0" + h; + mm = d.Minute.ToString(); + if (mm.Length < 2) mm = "0" + mm; + ss = d.Second.ToString(); + if (ss.Length < 2) ss = "0" + ss; + s += y + m + dd + h + mm + ss; + s += ra.Next(100, 999).ToString(); + return s; + } + #endregion + + #region 生成GUID + /// + /// 生成GUID + /// + /// + public static string GetGuid() + { + System.Guid g = System.Guid.NewGuid(); + return g.ToString(); + } + #endregion + } +} diff --git a/New_College.Common/Helper/RecursionHelper.cs b/New_College.Common/Helper/RecursionHelper.cs new file mode 100644 index 0000000..3a70d7b --- /dev/null +++ b/New_College.Common/Helper/RecursionHelper.cs @@ -0,0 +1,129 @@ +using System.Collections.Generic; +using System.Linq; + +namespace New_College.Common.Helper +{ + /// + /// 泛型递归求树形结构 + /// + public static class RecursionHelper + { + public static void LoopToAppendChildren(List all, PermissionTree curItem, int pid, bool needbtn) + { + + var subItems = all.Where(ee => ee.Pid == curItem.value).ToList(); + + var btnItems = subItems.Where(ss => ss.isbtn == true).ToList(); + if (subItems.Count > 0) + { + curItem.btns = new List(); + curItem.btns.AddRange(btnItems); + } + else + { + curItem.btns = null; + } + + if (!needbtn) + { + subItems = subItems.Where(ss => ss.isbtn == false).ToList(); + } + if (subItems.Count > 0) + { + curItem.children = new List(); + curItem.children.AddRange(subItems); + } + else + { + curItem.children = null; + } + + if (curItem.isbtn) + { + //curItem.label += "按钮"; + } + + foreach (var subItem in subItems) + { + if (subItem.value == pid && pid > 0) + { + //subItem.disabled = true;//禁用当前节点 + } + LoopToAppendChildren(all, subItem, pid, needbtn); + } + } + + + + public static void LoopNaviBarAppendChildren(List all, NavigationBar curItem) + { + + var subItems = all.Where(ee => ee.pid == curItem.id).ToList(); + + if (subItems.Count > 0) + { + curItem.children = new List(); + curItem.children.AddRange(subItems); + } + else + { + curItem.children = null; + } + + + foreach (var subItem in subItems) + { + LoopNaviBarAppendChildren(all, subItem); + } + } + + + + public static void LoopToAppendChildrenT(List all, T curItem, string parentIdName = "Pid", string idName = "value", string childrenName = "children") + { + var subItems = all.Where(ee => ee.GetType().GetProperty(parentIdName).GetValue(ee, null).ToString() == curItem.GetType().GetProperty(idName).GetValue(curItem, null).ToString()).ToList(); + + if (subItems.Count > 0) curItem.GetType().GetField(childrenName).SetValue(curItem, subItems); + foreach (var subItem in subItems) + { + LoopToAppendChildrenT(all, subItem); + } + } + } + + public class PermissionTree + { + public int value { get; set; } + public int Pid { get; set; } + public string label { get; set; } + public int order { get; set; } + public bool isbtn { get; set; } + public bool disabled { get; set; } + public List children { get; set; } + public List btns { get; set; } + } + public class NavigationBar + { + public int id { get; set; } + public int pid { get; set; } + public int order { get; set; } + public string name { get; set; } + public bool IsHide { get; set; } = false; + public bool IsButton { get; set; } = false; + public string path { get; set; } + public string Func { get; set; } + public string iconCls { get; set; } + public NavigationBarMeta meta { get; set; } + public List children { get; set; } + } + + public class NavigationBarMeta + { + public string title { get; set; } + public bool requireAuth { get; set; } = true; + public bool NoTabPage { get; set; } = false; + public bool keepAlive { get; set; } = false; + + + } +} diff --git a/New_College.Common/Helper/SerializeHelper.cs b/New_College.Common/Helper/SerializeHelper.cs new file mode 100644 index 0000000..e500705 --- /dev/null +++ b/New_College.Common/Helper/SerializeHelper.cs @@ -0,0 +1,35 @@ +using Newtonsoft.Json; +using System.Text; + +namespace New_College.Common +{ + public class SerializeHelper + { + /// + /// 序列化 + /// + /// + /// + public static byte[] Serialize(object item) + { + var jsonString = JsonConvert.SerializeObject(item); + + return Encoding.UTF8.GetBytes(jsonString); + } + /// + /// 反序列化 + /// + /// + /// + /// + public static TEntity Deserialize(byte[] value) + { + if (value == null) + { + return default(TEntity); + } + var jsonString = Encoding.UTF8.GetString(value); + return JsonConvert.DeserializeObject(jsonString); + } + } +} diff --git a/New_College.Common/Helper/StringHelper.cs b/New_College.Common/Helper/StringHelper.cs new file mode 100644 index 0000000..d125ef0 --- /dev/null +++ b/New_College.Common/Helper/StringHelper.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace New_College.Common.Helper +{ + public class StringHelper + { + /// + /// 根据分隔符返回前n条数据 + /// + /// 数据内容 + /// 分隔符 + /// 前n条 + /// 是否倒序(默认false) + /// + public static List GetTopDataBySeparator(string content, string separator, int top, bool isDesc = false) + { + if (string.IsNullOrEmpty(content)) + { + return new List() { }; + } + + if (string.IsNullOrEmpty(separator)) + { + throw new ArgumentException("message", nameof(separator)); + } + + var dataArray = content.Split(separator).Where(d => !string.IsNullOrEmpty(d)).ToArray(); + if (isDesc) + { + Array.Reverse(dataArray); + } + + if (top > 0) + { + dataArray = dataArray.Take(top).ToArray(); + } + + return dataArray.ToList(); + } + } +} diff --git a/New_College.Common/Helper/TimeUtil.cs b/New_College.Common/Helper/TimeUtil.cs new file mode 100644 index 0000000..833a77d --- /dev/null +++ b/New_College.Common/Helper/TimeUtil.cs @@ -0,0 +1,23 @@ +using System; +using NodaTime; + +namespace YIJIYI.Core.Common.Helper +{ + public class TimeUtil + { + public static DateTime GetCstDateTime() + { + Instant now = SystemClock.Instance.GetCurrentInstant(); + var shanghaiZone = DateTimeZoneProviders.Tzdb["Asia/Shanghai"]; + return now.InZone(shanghaiZone).ToDateTimeUnspecified(); + } + + } + public static class DateTimeExtentions + { + public static DateTime ToCstTime(this DateTime time) + { + return TimeUtil.GetCstDateTime(); + } + } +} diff --git a/New_College.Common/Helper/UnicodeHelper.cs b/New_College.Common/Helper/UnicodeHelper.cs new file mode 100644 index 0000000..9dc4f98 --- /dev/null +++ b/New_College.Common/Helper/UnicodeHelper.cs @@ -0,0 +1,47 @@ +using System; +using System.Text; +using System.Text.RegularExpressions; + +namespace New_College.Common.Helper +{ + public static class UnicodeHelper + { + /// + /// 字符串转Unicode码 + /// + /// The to unicode. + /// Value. + public static string StringToUnicode(string value) + { + byte[] bytes = Encoding.Unicode.GetBytes(value); + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < bytes.Length; i += 2) + { + // 取两个字符,每个字符都是右对齐。 + stringBuilder.AppendFormat("u{0}{1}", bytes[i + 1].ToString("x").PadLeft(2, '0'), bytes[i].ToString("x").PadLeft(2, '0')); + } + return stringBuilder.ToString(); + } + + /// + /// Unicode转字符串 + /// + /// The to string. + /// Unicode. + public static string UnicodeToString(string unicode) + { + unicode = unicode.Replace("%", "\\"); + + return new Regex(@"\\u([0-9A-F]{4})", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace( + unicode, x => string.Empty + Convert.ToChar(Convert.ToUInt16(x.Result("$1"), 16))); + + //string resultStr = ""; + //string[] strList = unicode.Split('u'); + //for (int i = 1; i < strList.Length; i++) + //{ + // resultStr += (char)int.Parse(strList[i], System.Globalization.NumberStyles.HexNumber); + //} + //return resultStr; + } + } +} diff --git a/New_College.Common/Helper/UtilConvert.cs b/New_College.Common/Helper/UtilConvert.cs new file mode 100644 index 0000000..c5b3f71 --- /dev/null +++ b/New_College.Common/Helper/UtilConvert.cs @@ -0,0 +1,183 @@ +using System; +namespace New_College +{ + /// + /// + /// + public static class UtilConvert + { + /// + /// + /// + /// + /// + public static int ObjToInt(this object thisValue) + { + int reval = 0; + if (thisValue == null) return 0; + if (thisValue != null && thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return reval; + } + /// + /// + /// + /// + /// + /// + public static int ObjToInt(this object thisValue, int errorValue) + { + int reval = 0; + if (thisValue != null && thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return errorValue; + } + /// + /// + /// + /// + /// + public static double ObjToMoney(this object thisValue) + { + double reval = 0; + if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return 0; + } + /// + /// + /// + /// + /// + /// + public static double ObjToMoney(this object thisValue, double errorValue) + { + double reval = 0; + if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return errorValue; + } + /// + /// + /// + /// + /// + public static string ObjToString(this object thisValue) + { + if (thisValue != null) return thisValue.ToString().Trim(); + return ""; + } + /// + /// + /// + /// + /// + public static bool IsNotEmptyOrNull(this object thisValue) + { + return ObjToString(thisValue) != ""; + } + /// + /// + /// + /// + /// + /// + public static string ObjToString(this object thisValue, string errorValue) + { + if (thisValue != null) return thisValue.ToString().Trim(); + return errorValue; + } + /// + /// + /// + /// + /// + public static Decimal ObjToDecimal(this object thisValue) + { + Decimal reval = 0; + if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return 0; + } + /// + /// + /// + /// + /// + /// + public static Decimal ObjToDecimal(this object thisValue, decimal errorValue) + { + Decimal reval = 0; + if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return errorValue; + } + /// + /// + /// + /// + /// + public static DateTime ObjToDate(this object thisValue) + { + DateTime reval = DateTime.MinValue; + if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval)) + { + reval = Convert.ToDateTime(thisValue); + } + return reval; + } + /// + /// + /// + /// + /// + /// + public static DateTime ObjToDate(this object thisValue, DateTime errorValue) + { + DateTime reval = DateTime.MinValue; + if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return errorValue; + } + /// + /// + /// + /// + /// + public static bool ObjToBool(this object thisValue) + { + bool reval = false; + if (thisValue != null && thisValue != DBNull.Value && bool.TryParse(thisValue.ToString(), out reval)) + { + return reval; + } + return reval; + } + + + /// + /// 获取当前时间的时间戳 + /// + /// + /// + public static string DateToTimeStamp(this DateTime thisValue) + { + TimeSpan ts = thisValue - new DateTime(1970, 1, 1, 0, 0, 0, 0); + return Convert.ToInt64(ts.TotalSeconds).ToString(); + } + } +} diff --git a/New_College.Common/Helper/WeChatPayHelper.cs b/New_College.Common/Helper/WeChatPayHelper.cs new file mode 100644 index 0000000..44b3420 --- /dev/null +++ b/New_College.Common/Helper/WeChatPayHelper.cs @@ -0,0 +1,77 @@ +using Essensoft.AspNetCore.Payment.WeChatPay; +using Essensoft.AspNetCore.Payment.WeChatPay.Request; +using Essensoft.AspNetCore.Payment.WeChatPay.Response; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; + + +namespace New_College.Common.Helper +{ + public class WeChatPay + { + /// + /// 订单查询 + /// + /// + /// + /// + /// + public async Task OrderQuery(IWeChatPayClient _client, + IOptions _optionsAccessor, WeChatPayOrderQuery viewModel) + { + var request = new WeChatPayOrderQueryRequest + { + TransactionId = viewModel.TransactionId, + OutTradeNo = viewModel.OutTradeNo + }; + return await _client.ExecuteAsync(request, _optionsAccessor.Value); + } + + /// + /// 返回微信支付链接 + /// + /// + /// + public static async Task GetMwebUrl(IWeChatPayClient _client, IOptions _optionsAccessor, + WeChatPayPayRequest viewModel) + { + var request = new WeChatPayUnifiedOrderRequest + { + Body = viewModel.Body, + OutTradeNo = viewModel.OutTradeNo, + TotalFee = viewModel.TotalFee, + SpBillCreateIp = viewModel.SpBillCreateIp, + NotifyUrl = viewModel.NotifyUrl, + TradeType = viewModel.TradeType + }; + return await _client.ExecuteAsync(request, _optionsAccessor.Value); + } + /// + /// 退款 + /// + /// + /// + /// + /// + public static async Task Refund(IWeChatPayClient _client, IOptions _optionsAccessor, + WeChatPayRefundQuery query) + { + var request = new WeChatPayRefundRequest + { + OutRefundNo = query.OutRefundNo, + TransactionId = query.TransactionId, + OutTradeNo = query.OutTradeNo, + TotalFee = query.TotalFee, + RefundFee = query.RefundFee, + RefundDesc = query.RefundDesc, + NotifyUrl = query.NotifyUrl + }; + var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); + return response; + } + } +} diff --git a/New_College.Common/Helper/WeChatPayOrderQuery.cs b/New_College.Common/Helper/WeChatPayOrderQuery.cs new file mode 100644 index 0000000..f85c5f7 --- /dev/null +++ b/New_College.Common/Helper/WeChatPayOrderQuery.cs @@ -0,0 +1,69 @@ +using System.ComponentModel.DataAnnotations; + +namespace New_College.Common.Helper +{ + public class WeChatPayOrderQuery + { + [Display(Name = "transaction_id")] + public string TransactionId { get; set; } + + [Display(Name = "out_trade_no")] + public string OutTradeNo { get; set; } + } + public class WeChatPayRefundQuery + { + [Required] + [Display(Name = "out_refund_no")] + public string OutRefundNo { get; set; } + + [Display(Name = "transaction_id")] + public string TransactionId { get; set; } + + [Display(Name = "out_trade_no")] + public string OutTradeNo { get; set; } + + [Required] + [Display(Name = "total_fee")] + public int TotalFee { get; set; } + + [Required] + [Display(Name = "refund_fee")] + public int RefundFee { get; set; } + + [Display(Name = "refund_desc")] + public string RefundDesc { get; set; } + + [Display(Name = "notify_url")] + public string NotifyUrl { get; set; } + } + + + public class ProductPayRequest + { + /// + /// 1商品2评测3陪考通考试 + /// + public int ProductType { get; set; } = 0; + } + public class WeChatPayPayRequest : ProductPayRequest + { + + public string OutTradeNo { get; set; } = ""; + + public string Body { get; set; } = ""; + + public int TotalFee { get; set; } = 0; + + public string SpBillCreateIp { get; set; } + + + public string NotifyUrl { get; set; } + + public string TradeType { get; set; } = "MWEB"; + + public int MemberId { get; set; } + public string OpenId { get; set; } + public string PaymentChannel { get; set; } = "微信支付"; + public string PaymentType { get; set; } = "WeChat"; + } +} \ No newline at end of file diff --git a/New_College.Common/Helper/WeixinHelper.cs b/New_College.Common/Helper/WeixinHelper.cs new file mode 100644 index 0000000..e33dd8a --- /dev/null +++ b/New_College.Common/Helper/WeixinHelper.cs @@ -0,0 +1,202 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Security.Cryptography; +using System.Text; +using Newtonsoft.Json; + +namespace New_College.Common +{ + public class WeixinHelper + { + /// + /// 获取AuthCodeSession + /// + /// + /// + /// + /// + public static T AuthCode2Session(string appid, string secret, string code) where T :new() + { + var authinfo = new T(); + try + { + + string requestUri = string.Format("https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code", appid, secret, code); ; + var httpClientHandler = new HttpClientHandler + { + ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true + }; + + using (HttpClient httpClient = new HttpClient(httpClientHandler)) + { + var responseStr = httpClient.GetAsync(requestUri).Result.Content.ReadAsStringAsync().Result; + var obj = JsonConvert.DeserializeObject(responseStr); + return obj; + } + } + catch (Exception ex) + { + throw ex; + } + } + + + /** + * + * 统一下单 + * @param WxPaydata inputObj 提交给统一下单API的参数 + * @param int timeOut 超时时间 + * @throws WePayException + * @return 成功时返回,其他抛异常 + */ + public static WxPayData UnifiedOrder(WxPayData inputObj, int timeOut = 60) + { + string url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; + //检测必填参数 + if (!inputObj.IsSet("out_trade_no")) + { + throw new Exception("缺少统一支付接口必填参数out_trade_no!"); + } + else if (!inputObj.IsSet("body")) + { + throw new Exception("缺少统一支付接口必填参数body!"); + } + else if (!inputObj.IsSet("total_fee")) + { + throw new Exception("缺少统一支付接口必填参数total_fee!"); + } + else if (!inputObj.IsSet("trade_type")) + { + throw new Exception("缺少统一支付接口必填参数trade_type!"); + } + + //关联参数 + if (inputObj.GetValue("trade_type").ToString() == "JSAPI" && !inputObj.IsSet("openid")) + { + throw new Exception("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"); + } + if (inputObj.GetValue("trade_type").ToString() == "NATIVE" && !inputObj.IsSet("product_id")) + { + throw new Exception("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!"); + } + + //异步通知url未设置,则使用配置文件中的url + if (!inputObj.IsSet("notify_url")) + { + inputObj.SetValue("notify_url", WeixinConfig.NotifyUrl);//异步通知url + } + + inputObj.SetValue("appid", WeixinConfig.Appid);//公众账号ID + inputObj.SetValue("mch_id", WeixinConfig.MCHID);//商户号 + inputObj.SetValue("spbill_create_ip", "8.8.8.8");//终端ip + inputObj.SetValue("nonce_str", GenerateNonceStr());//随机字符串 + + //签名 + inputObj.SetValue("sign", inputObj.MakeSign()); + string xml = inputObj.ToXml(); + + var start = DateTime.Now; + + // Log.Info("XcxPayApi", "UnfiedOrder request : " + xml); + string response = HttpPost(xml, url, "application/xml", timeOut); + //Log.Info("XcxPayApi", "UnfiedOrder response : " + response); + // WebHookHelper.WebHookmarkdownSend(response); + + var end = DateTime.Now; + int timeCost = (int)((end - start).TotalMilliseconds); + + WxPayData result = new WxPayData(); + result.FromXml(response); + // ReportCostTime(url, timeCost, result);//测速上报网络不好时使用 + return result; + } + + + /// + /// 生成随机数 + /// + /// + public static string GenerateNonceStr() + { + return Guid.NewGuid().ToString().Replace("-", ""); + } + + + /// + /// POST请求 + /// + /// + /// + /// application/xml、application/json、application/text、application/x-www-form-urlencoded + /// + /// + /// + public static string HttpPost(string postData, string url, string contentType = null, int timeOut = 30, Dictionary headers = null) + { + postData = postData ?? ""; + + var httpClientHandler = new HttpClientHandler + { + ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true + }; + using (HttpClient httpClient = new HttpClient(httpClientHandler)) + { + if (headers != null) + { + foreach (var header in headers) + httpClient.DefaultRequestHeaders.Add(header.Key, header.Value); + } + using (HttpContent client = new StringContent(postData, Encoding.UTF8)) + { + if (contentType != null) + client.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType); + + HttpResponseMessage response = httpClient.PostAsync(url, client).Result; + return response.Content.ReadAsStringAsync().Result; + } + } + } + + + + + /// + /// 后台解密手机号 + /// + /// + /// + /// + /// + public static string getPhoneNumber(string encryptedData, string IV, string Session_key) + { + try + { + + byte[] encryData = Convert.FromBase64String(encryptedData); // strToToHexByte(text); + RijndaelManaged rijndaelCipher = new RijndaelManaged(); + rijndaelCipher.Key = Convert.FromBase64String(Session_key); // Encoding.UTF8.GetBytes(AesKey); + rijndaelCipher.IV = Convert.FromBase64String(IV);// Encoding.UTF8.GetBytes(AesIV); + rijndaelCipher.Mode = CipherMode.CBC; + rijndaelCipher.Padding = PaddingMode.PKCS7; + ICryptoTransform transform = rijndaelCipher.CreateDecryptor(); + byte[] plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length); + string result = Encoding.Default.GetString(plainText); + //动态解析result 成对象 + dynamic model = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic; + return model.phoneNumber; + + } + catch (Exception ex) + { + //MessageBox.Show(ex.Message); + return ""; + + } + } + + } + + + +} diff --git a/New_College.Common/Helper/WxPayData.cs b/New_College.Common/Helper/WxPayData.cs new file mode 100644 index 0000000..09fdcc9 --- /dev/null +++ b/New_College.Common/Helper/WxPayData.cs @@ -0,0 +1,269 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace New_College.Common +{ + /// + /// 微信支付协议接口数据类,所有的API接口通信都依赖这个数据结构, + /// 在调用接口之前先填充各个字段的值,然后进行接口通信, + /// 这样设计的好处是可扩展性强,用户可随意对协议进行更改而不用重新设计数据结构, + /// 还可以随意组合出不同的协议数据包,不用为每个协议设计一个数据包结构 + /// + public class WxPayData + { + + public WxPayData() + { + } + + //采用排序的Dictionary的好处是方便对数据包进行签名,不用再签名之前再做一次排序 + private SortedDictionary m_values = new SortedDictionary(); + + /** + * 设置某个字段的值 + * @param key 字段名 + * @param value 字段值 + */ + public void SetValue(string key, object value) + { + m_values[key] = value; + } + + /** + * 根据字段名获取某个字段的值 + * @param key 字段名 + * @return key对应的字段值 + */ + public object GetValue(string key) + { + object o = null; + m_values.TryGetValue(key, out o); + return o; + } + + /** + * 判断某个字段是否已设置 + * @param key 字段名 + * @return 若字段key已被设置,则返回true,否则返回false + */ + public bool IsSet(string key) + { + object o = null; + m_values.TryGetValue(key, out o); + if (null != o) + return true; + else + return false; + } + + /** + * @将Dictionary转成xml + * @return 经转换得到的xml串 + * @throws WePayException + **/ + public string ToXml() + { + //数据为空时不能转化为xml格式 + if (0 == m_values.Count) + { + + //NLogHelper.WriteError("WxPayData数据为空!",DevAuthorNameEnum.Michael,false); + throw new Exception("WxPayData数据为空!"); + } + + string xml = ""; + foreach (KeyValuePair pair in m_values) + { + //字段值不能为null,会影响后续流程 + if (pair.Value == null) + { + //NLogHelper.WriteError("WxPayData内部含有值为null的字段!", DevAuthorNameEnum.Michael, false); + throw new Exception("WxPayData内部含有值为null的字段!"); + } + + if (pair.Value.GetType() == typeof(int)) + { + xml += "<" + pair.Key + ">" + pair.Value + ""; + } + else if (pair.Value.GetType() == typeof(string)) + { + xml += "<" + pair.Key + ">" + ""; + } + else//除了string和int类型不能含有其他数据类型 + { + //NLogHelper.WriteError("WxPayData字段数据类型错误!", DevAuthorNameEnum.Michael, false); + throw new Exception("WxPayData字段数据类型错误!"); + } + } + xml += ""; + return xml; + } + + /** + * @将xml转为WxPayData对象并返回对象内部的数据 + * @param string 待转换的xml串 + * @return 经转换得到的Dictionary + * @throws WePayException + */ + public SortedDictionary FromXml(string xml) + { + if (string.IsNullOrEmpty(xml)) + { + //NLogHelper.WriteError("将空的xml串转换为WxPayData不合法!", DevAuthorNameEnum.Michael, false); + throw new Exception("将空的xml串转换为WxPayData不合法!"); + } + + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.LoadXml(xml); + XmlNode xmlNode = xmlDoc.FirstChild;//获取到根节点 + XmlNodeList nodes = xmlNode.ChildNodes; + foreach (XmlNode xn in nodes) + { + XmlElement xe = (XmlElement)xn; + m_values[xe.Name] = xe.InnerText;//获取xml的键值对到WxPayData内部的数据中 + } + + try + { + //2015-06-29 错误是没有签名 + if (m_values["return_code"] != "SUCCESS") + { + return m_values; + } + CheckSign();//验证签名,不通过会抛异常 + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + + return m_values; + } + + /** + * @Dictionary格式转化成url参数格式 + * @ return url格式串, 该串不包含sign字段值 + */ + public string ToUrl() + { + string buff = ""; + foreach (KeyValuePair pair in m_values) + { + if (pair.Value == null) + { + //NLogHelper.WriteError("WxPayData内部含有值为null的字段!", DevAuthorNameEnum.Michael, false); + throw new Exception("WxPayData内部含有值为null的字段!"); + } + + if (pair.Key != "sign" && pair.Value.ToString() != "") + { + buff += pair.Key + "=" + pair.Value + "&"; + } + } + buff = buff.Trim('&'); + return buff; + } + + + /** + * @Dictionary格式化成Json + * @return json串数据 + */ + public string ToJson() + { + string jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(m_values); + return jsonStr; + } + + /** + * @values格式化成能在Web页面上显示的结果(因为web页面上不能直接输出xml格式的字符串) + */ + public string ToPrintStr() + { + string str = ""; + foreach (KeyValuePair pair in m_values) + { + if (pair.Value == null) + { + //NLogHelper.WriteError("WxPayData内部含有值为null的字段!", DevAuthorNameEnum.Michael, false); + throw new Exception("WxPayData内部含有值为null的字段!"); + } + + str += string.Format("{0}={1}
", pair.Key, pair.Value.ToString()); + } + //NLogHelper.WriteInfo("Print in Web Page : " + str, DevAuthorNameEnum.Michael, false); + return str; + } + + /** + * @生成签名,详见签名生成算法 + * @return 签名, sign字段不参加签名 + */ + public string MakeSign() + { + //转url格式 + string str = ToUrl(); + //在string后加入API KEY + str += "&key=" + WeixinConfig.KEY; + //NLogHelper.WriteInfo("Signurl" + str,DevAuthorNameEnum.Michael,false); + //MD5加密 + var md5 = MD5.Create(); + var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); + var sb = new StringBuilder(); + foreach (byte b in bs) + { + sb.Append(b.ToString("x2")); + } + //所有字符转为大写 + return sb.ToString().ToUpper(); + } + + /** + * + * 检测签名是否正确 + * 正确返回true,错误抛异常 + */ + public bool CheckSign() + { + //如果没有设置签名,则跳过检测 + if (!IsSet("sign")) + { + // Log.Error(this.GetType().ToString(), "WxPayData签名存在但不合法!"); + throw new Exception("WxPayData签名存在但不合法!"); + } + //如果设置了签名但是签名为空,则抛异常 + else if (GetValue("sign") == null || GetValue("sign").ToString() == "") + { + //Log.Error(this.GetType().ToString(), "WxPayData签名存在但不合法!"); + throw new Exception("WxPayData签名存在但不合法!"); + } + + //获取接收到的签名 + string return_sign = GetValue("sign").ToString(); + + //在本地计算新的签名 + string cal_sign = MakeSign(); + + if (cal_sign == return_sign) + { + return true; + } + + //Log.Error(this.GetType().ToString(), "WxPayData签名验证错误!"); + throw new Exception("WxPayData签名验证错误!"); + } + + /** + * @获取Dictionary + */ + public SortedDictionary GetValues() + { + return m_values; + } + } +} \ No newline at end of file diff --git a/New_College.Common/Helper/XmlSerializeHelper.cs b/New_College.Common/Helper/XmlSerializeHelper.cs new file mode 100644 index 0000000..fc2835d --- /dev/null +++ b/New_College.Common/Helper/XmlSerializeHelper.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Xml; +using System.Xml.Serialization; + +namespace New_College.Common +{ + public class XmlSerializeHelper + { + /// + /// XML转换为对象 + /// + /// + /// + /// + public static T XMLToObject(string xml) where T : new() + { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(xml); + XmlNode root = doc.FirstChild; + + Dictionary table = new Dictionary(); + foreach (XmlNode v in root.ChildNodes) + { + if (v.Name == "#text") + continue; + table.Add(v.Name, GetValue(v)); + } + + return DicToObject(table); //new RequestText(table); + } + + /// + /// 字典类型转化为对象 + /// + /// + /// + private static T DicToObject(Dictionary dic) where T : new() + { + var md = new T(); + DicToObject(md, dic); + return md; + } + + /// + /// Dictionary填充对象 + /// + /// + /// + private static void DicToObject(object md, System.Collections.IDictionary dic) + { + foreach (var filed in dic.Keys) + { + BindingFlags flag = BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance; + + try + { + var value = dic[filed]; + + if (value is System.Collections.IDictionary) + { + Type ct = md.GetType().GetProperty(filed + "", flag).PropertyType; + object o = Activator.CreateInstance(ct); + DicToObject(o, value as System.Collections.IDictionary); + md.GetType().GetProperty(filed + "", flag).SetValue(md, o, null); + } + else + { + Type type = md.GetType(); + if (type != null) + { + var pro = type.GetProperty(filed + "", flag); + if (pro != null) + pro.SetValue(md, value, null); + } + + } + + } + catch (Exception e) + { + + } + } + // return md; + } + + /// + /// 获得节点值 + /// + /// + /// + private static object GetValue(XmlNode node) + { + if (node.HasChildNodes) + { + // 这种结构 node.ChildNodes.Count==1 + if (node.ChildNodes.Count == 1 && node.ChildNodes[0].NodeType != XmlNodeType.Element) + { + return node.InnerText; + } + else + { + Dictionary table = new Dictionary(); + foreach (XmlNode n in node.ChildNodes) + { + table.Add(n.Name, GetValue(n)); + } + return table; + } + } + return node.InnerText; + } + + } +} diff --git a/New_College.Common/HttpContextUser/AspNetUser.cs b/New_College.Common/HttpContextUser/AspNetUser.cs new file mode 100644 index 0000000..abdf65f --- /dev/null +++ b/New_College.Common/HttpContextUser/AspNetUser.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using System.IdentityModel.Tokens.Jwt; +using System.Linq; +using System.Security.Claims; +using Microsoft.AspNetCore.Http; + +namespace New_College.Common.HttpContextUser +{ + public class AspNetUser : IUser + { + private readonly IHttpContextAccessor _accessor; + + public AspNetUser(IHttpContextAccessor accessor) + { + _accessor = accessor; + } + + public string Name => GetName(); + + private string GetName() + { + if (IsAuthenticated()) + { + return _accessor.HttpContext.User.Identity.Name; + } + else { + if (!string.IsNullOrEmpty(GetToken())) + { + return GetUserInfoFromToken("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name").FirstOrDefault().ObjToString(); + } + } + + return ""; + } + + public int ID => GetClaimValueByType("jti").FirstOrDefault().ObjToInt(); + + public bool IsAuthenticated() + { + return _accessor.HttpContext.User.Identity.IsAuthenticated; + } + + + public string GetToken() + { + return _accessor.HttpContext.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); + } + + public List GetUserInfoFromToken(string ClaimType) + { + + var jwtHandler = new JwtSecurityTokenHandler(); + if (!string.IsNullOrEmpty(GetToken())) + { + JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(GetToken()); + + return (from item in jwtToken.Claims + where item.Type == ClaimType + select item.Value).ToList(); + } + else + { + return new List() { }; + } + } + + public IEnumerable GetClaimsIdentity() + { + return _accessor.HttpContext.User.Claims; + } + + public List GetClaimValueByType(string ClaimType) + { + + return (from item in GetClaimsIdentity() + where item.Type == ClaimType + select item.Value).ToList(); + + } + } +} diff --git a/New_College.Common/HttpContextUser/IUser.cs b/New_College.Common/HttpContextUser/IUser.cs new file mode 100644 index 0000000..ec37c3b --- /dev/null +++ b/New_College.Common/HttpContextUser/IUser.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Security.Claims; + +namespace New_College.Common.HttpContextUser +{ + public interface IUser + { + string Name { get; } + int ID { get; } + bool IsAuthenticated(); + IEnumerable GetClaimsIdentity(); + List GetClaimValueByType(string ClaimType); + + string GetToken(); + List GetUserInfoFromToken(string ClaimType); + } +} diff --git a/New_College.Common/HttpRestSharp/HttpHelper.cs b/New_College.Common/HttpRestSharp/HttpHelper.cs new file mode 100644 index 0000000..8d768cb --- /dev/null +++ b/New_College.Common/HttpRestSharp/HttpHelper.cs @@ -0,0 +1,73 @@ +using RestSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; + +namespace New_College.Common.HttpRestSharp +{ + /// + /// 基于 RestSharp 封装HttpHelper + /// + public static class HttpHelper + { + /// + /// Get 请求 + /// + /// 泛型 + /// 根域名:http://apk.neters.club/ + /// 接口:api/xx/yy + /// 参数:id=2&name=老张 + /// + public static T GetApi(string baseUrl, string url, string pragm = "") + { + var client = new RestSharpClient(baseUrl); + + var request = client.Execute(string.IsNullOrEmpty(pragm) + ? new RestRequest(url, Method.GET) + : new RestRequest($"{url}?{pragm}", Method.GET)); + + if (request.StatusCode != HttpStatusCode.OK) + { + return (T)Convert.ChangeType(request.ErrorMessage, typeof(T)); + } + + dynamic temp = Newtonsoft.Json.JsonConvert.DeserializeObject(request.Content, typeof(T)); + + //T result = (T)Convert.ChangeType(request.Content, typeof(T)); + + return (T)temp; + } + + /// + /// Post 请求 + /// + /// 泛型 + /// 完整的url + /// post body,可以匿名或者反序列化 + /// + public static T PostApi(string url, object body = null) + { + var client = new RestClient($"{url}"); + IRestRequest queest = new RestRequest(); + queest.Method = Method.POST; + queest.AddHeader("Accept", "application/json"); + queest.RequestFormat = DataFormat.Json; + queest.AddBody(body); // 可以使用 JsonSerializer + var result = client.Execute(queest); + if (result.StatusCode != HttpStatusCode.OK) + { + return (T)Convert.ChangeType(result.ErrorMessage, typeof(T)); + } + + dynamic temp = Newtonsoft.Json.JsonConvert.DeserializeObject(result.Content, typeof(T)); + + //T result = (T)Convert.ChangeType(request.Content, typeof(T)); + + return (T)temp; + } + + + } +} diff --git a/New_College.Common/HttpRestSharp/IRestSharp.cs b/New_College.Common/HttpRestSharp/IRestSharp.cs new file mode 100644 index 0000000..2376d86 --- /dev/null +++ b/New_College.Common/HttpRestSharp/IRestSharp.cs @@ -0,0 +1,43 @@ +using RestSharp; +using System; + +namespace New_College.Common.HttpRestSharp +{ + /// + /// API请求执行者接口 + /// + public interface IRestSharp + { + /// + /// 同步执行方法 + /// + /// + /// + IRestResponse Execute(IRestRequest request); + + /// + /// 同步执行方法 + /// + /// 返回值 + /// 请求参数 + /// + T Execute(IRestRequest request) where T : new(); + + /// + /// 异步执行方法 + /// + /// 请求参数 + /// + /// + RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action callback); + + /// + /// 异步执行方法 + /// + /// + /// + /// + /// + RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action> callback) where T : new(); + } +} diff --git a/New_College.Common/HttpRestSharp/RestSharpClient.cs b/New_College.Common/HttpRestSharp/RestSharpClient.cs new file mode 100644 index 0000000..9415793 --- /dev/null +++ b/New_College.Common/HttpRestSharp/RestSharpClient.cs @@ -0,0 +1,135 @@ +using RestSharp; +using RestSharp.Authenticators; +using System; + +namespace New_College.Common.HttpRestSharp +{ + /// + /// Rest接口执行者 + /// + public class RestSharpClient : IRestSharp + { + /// + /// 请求客户端 + /// + private RestClient client; + + /// + /// 接口基地址 格式:http://apk.neters.club/ + /// + private string BaseUrl { get; set; } + + /// + /// 默认的时间参数格式 + /// + private string DefaultDateParameterFormat { get; set; } + + /// + /// 默认验证器 + /// + private IAuthenticator DefaultAuthenticator { get; set; } + + /// + /// 构造函数 + /// + /// + /// + public RestSharpClient(string baseUrl, IAuthenticator authenticator = null) + { + BaseUrl = baseUrl; + client = new RestClient(BaseUrl); + DefaultAuthenticator = authenticator; + + //默认时间显示格式 + DefaultDateParameterFormat = "yyyy-MM-dd HH:mm:ss"; + + //默认校验器 + if (DefaultAuthenticator != null) + { + client.Authenticator = DefaultAuthenticator; + } + } + + /// + /// 通用执行方法 + /// + /// 请求参数 + /// + /// 调用实例: + /// var client = new RestSharpClient("http://apk.neters.club/"); + /// var result = client.Execute(new RestRequest("v2/movie/in_theaters", Method.GET)); + /// var content = result.Content;//返回的字符串数据 + /// + /// + public IRestResponse Execute(IRestRequest request) + { + request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; + var response = client.Execute(request); + return response; + } + + /// + /// 同步执行方法 + /// + /// 返回的泛型对象 + /// 请求参数 + /// + /// var client = new RestSharpClient("http://apk.neters.club/"); + /// var result = client.Execute>(new RestRequest("v2/movie/in_theaters", Method.GET)); + /// + /// + public T Execute(IRestRequest request) where T : new() + { + request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; + var response = client.Execute(request); + return response.Data; + } + + /// + /// 异步执行方法 + /// + /// 请求参数 + /// 回调函数 + /// + /// 调用实例: + /// var client = new RestSharpClient("http://apk.neters.club/"); + /// client.ExecuteAsync>(new RestRequest("v2/movie/in_theaters", Method.GET), result => + /// { + /// var content = result.Content;//返回的字符串数据 + /// }); + /// + /// + [Obsolete] + public RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action callback) + { + request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; + return client.ExecuteAsync(request, callback); + } + + /// + /// 异步执行方法 + /// + /// 返回的泛型对象 + /// 请求参数 + /// 回调函数 + /// + /// 调用实例: + /// var client = new RestSharpClient("http://apk.neters.club/"); + /// client.ExecuteAsync>(new RestRequest("v2/movie/in_theaters", Method.GET), result => + /// { + /// if (result.StatusCode != HttpStatusCode.OK) + /// { + /// return; + /// } + /// var data = result.Data;//返回数据 + /// }); + /// + /// + [Obsolete] + public RestRequestAsyncHandle ExecuteAsync(IRestRequest request, Action> callback) where T : new() + { + request.DateFormat = string.IsNullOrEmpty(request.DateFormat) ? DefaultDateParameterFormat : request.DateFormat; + return client.ExecuteAsync(request, callback); + } + } +} diff --git a/New_College.Common/Hubs/ChatHub.cs b/New_College.Common/Hubs/ChatHub.cs new file mode 100644 index 0000000..a9c284b --- /dev/null +++ b/New_College.Common/Hubs/ChatHub.cs @@ -0,0 +1,89 @@ +using System.Threading.Tasks; +using New_College.Common.LogHelper; +using Microsoft.AspNetCore.SignalR; + +namespace New_College.Hubs +{ + public class ChatHub : Hub + { + /// + /// 向指定群组发送信息 + /// + /// 组名 + /// 信息内容 + /// + public async Task SendMessageToGroupAsync(string groupName, string message) + { + await Clients.Group(groupName).ReceiveMessage(message); + } + + /// + /// 加入指定组 + /// + /// 组名 + /// + public async Task AddToGroup(string groupName) + { + await Groups.AddToGroupAsync(Context.ConnectionId, groupName); + } + + /// + /// 退出指定组 + /// + /// 组名 + /// + public async Task RemoveFromGroup(string groupName) + { + await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName); + } + + /// + /// 向指定成员发送信息 + /// + /// 成员名 + /// 信息内容 + /// + public async Task SendPrivateMessage(string user, string message) + { + await Clients.User(user).ReceiveMessage(message); + } + + /// + /// 当连接建立时运行 + /// + /// + public override Task OnConnectedAsync() + { + //TODO.. + return base.OnConnectedAsync(); + } + + /// + /// 当链接断开时运行 + /// + /// + /// + public override Task OnDisconnectedAsync(System.Exception ex) + { + //TODO.. + return base.OnDisconnectedAsync(ex); + } + + + public async Task SendMessage(string user, string message) + { + await Clients.All.ReceiveMessage( user, message); + } + + //定于一个通讯管道,用来管理我们和客户端的连接 + //1、客户端调用 GetLatestCount,就像订阅 + public async Task GetLatestCount(string random) + { + //2、服务端主动向客户端发送数据,名字千万不能错 + await Clients.All.ReceiveUpdate(LogLock.GetLogData()); + + //3、客户端再通过 ReceiveUpdate ,来接收 + + } + } +} diff --git a/New_College.Common/Hubs/IChatClient.cs b/New_College.Common/Hubs/IChatClient.cs new file mode 100644 index 0000000..2639434 --- /dev/null +++ b/New_College.Common/Hubs/IChatClient.cs @@ -0,0 +1,24 @@ +using System.Threading.Tasks; + +namespace New_College.Hubs +{ + public interface IChatClient + { + /// + /// SignalR接收信息 + /// + /// 信息内容 + /// + Task ReceiveMessage(object message); + + /// + /// SignalR接收信息 + /// + /// 指定接收客户端 + /// 信息内容 + /// + Task ReceiveMessage(string user, string message); + + Task ReceiveUpdate(object message); + } +} diff --git a/New_College.Common/LogHelper/LogInfo.cs b/New_College.Common/LogHelper/LogInfo.cs new file mode 100644 index 0000000..f4adabb --- /dev/null +++ b/New_College.Common/LogHelper/LogInfo.cs @@ -0,0 +1,13 @@ +using System; + +namespace New_College.Common.LogHelper +{ + public class LogInfo + { + public DateTime Datetime { get; set; } + public string Content { get; set; } + public string IP { get; set; } + public string LogColor { get; set; } + public int Import { get; set; } = 0; + } +} diff --git a/New_College.Common/LogHelper/LogLock.cs b/New_College.Common/LogHelper/LogLock.cs new file mode 100644 index 0000000..e04c1fc --- /dev/null +++ b/New_College.Common/LogHelper/LogLock.cs @@ -0,0 +1,391 @@ +using New_College.Common.Helper; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; + +namespace New_College.Common.LogHelper +{ + public class LogLock + { + + static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim(); + static int WritedCount = 0; + static int FailedCount = 0; + static string _contentRoot = string.Empty; + + public LogLock(string contentPath) + { + _contentRoot = contentPath; + } + + public static void OutSql2Log(string prefix, string[] dataParas, bool IsHeader = true) + { + try + { + //设置读写锁为写入模式独占资源,其他写入请求需要等待本次写入结束之后才能继续写入 + //注意:长时间持有读线程锁或写线程锁会使其他线程发生饥饿 (starve)。 为了得到最好的性能,需要考虑重新构造应用程序以将写访问的持续时间减少到最小。 + // 从性能方面考虑,请求进入写入模式应该紧跟文件操作之前,在此处进入写入模式仅是为了降低代码复杂度 + // 因进入与退出写入模式应在同一个try finally语句块内,所以在请求进入写入模式之前不能触发异常,否则释放次数大于请求次数将会触发异常 + LogWriteLock.EnterWriteLock(); + + var folderPath = Path.Combine(_contentRoot, "Log"); + if (!Directory.Exists(folderPath)) + { + Directory.CreateDirectory(folderPath); + } + //string logFilePath = Path.Combine(path, $@"{filename}.log"); + var logFilePath = FileHelper.GetAvailableFileWithPrefixOrderSize(folderPath, prefix); + + var now = DateTime.Now; + string logContent = String.Join("\r\n", dataParas); + if (IsHeader) + { + logContent = ( + "--------------------------------\r\n" + + DateTime.Now + "|\r\n" + + String.Join("\r\n", dataParas) + "\r\n" + ); + } + + //if (logContent.IsNotEmptyOrNull() && logContent.Length > 500) + //{ + // logContent = logContent.Substring(0, 500) + "\r\n"; + //} + + File.AppendAllText(logFilePath, logContent); + WritedCount++; + } + catch (Exception e) + { + Console.Write(e.Message); + FailedCount++; + } + finally + { + //退出写入模式,释放资源占用 + //注意:一次请求对应一次释放 + // 若释放次数大于请求次数将会触发异常[写入锁定未经保持即被释放] + // 若请求处理完成后未释放将会触发异常[此模式不下允许以递归方式获取写入锁定] + LogWriteLock.ExitWriteLock(); + } + } + + /// + /// 读取文件内容 + /// + /// 文件夹路径 + /// 文件名 + /// 编码 + /// 读取类型(0:精准,1:前缀模糊) + /// + public static string ReadLog(string folderPath, string fileName, Encoding encode, ReadType readType = ReadType.Accurate) + { + string s = ""; + try + { + LogWriteLock.EnterReadLock(); + + // 根据文件名读取当前文件内容 + if (readType == ReadType.Accurate) + { + var filePath = Path.Combine(folderPath, fileName); + if (!File.Exists(filePath)) + { + s = null; + } + else + { + StreamReader f2 = new StreamReader(filePath, encode); + s = f2.ReadToEnd(); + f2.Close(); + f2.Dispose(); + } + } + + // 根据前缀读取所有文件内容 + if (readType == ReadType.Prefix) + { + var allFiles = new DirectoryInfo(folderPath); + var selectFiles = allFiles.GetFiles().Where(fi => fi.Name.ToLower().Contains(fileName.ToLower())).ToList(); + + foreach (var item in selectFiles) + { + if (File.Exists(item.FullName)) + { + StreamReader f2 = new StreamReader(item.FullName, encode); + s += f2.ReadToEnd(); + f2.Close(); + f2.Dispose(); + } + } + } + } + catch (Exception) + { + FailedCount++; + } + finally + { + LogWriteLock.ExitReadLock(); + } + return s; + } + + + public static List GetLogData() + { + List aopLogs = new List(); + List excLogs = new List(); + List sqlLogs = new List(); + List reqresLogs = new List(); + + try + { + var aoplogContent = ReadLog(Path.Combine(_contentRoot, "Log"), "AOPLog_", Encoding.UTF8, ReadType.Prefix); + + if (!string.IsNullOrEmpty(aoplogContent)) + { + aopLogs = aoplogContent.Split("--------------------------------") + .Where(d => !string.IsNullOrEmpty(d) && d != "\n" && d != "\r\n") + .Select(d => new LogInfo + { + Datetime = d.Split("|")[0].ObjToDate(), + Content = d.Split("|")[1]?.Replace("\r\n", "
"), + LogColor = "AOP", + }).ToList(); + } + } + catch (Exception) { } + + try + { + var exclogContent = ReadLog(Path.Combine(_contentRoot, "Log"), $"GlobalExceptionLogs_{DateTime.Now.ToString("yyyMMdd")}.log", Encoding.UTF8); + + if (!string.IsNullOrEmpty(exclogContent)) + { + excLogs = exclogContent.Split("--------------------------------") + .Where(d => !string.IsNullOrEmpty(d) && d != "\n" && d != "\r\n") + .Select(d => new LogInfo + { + Datetime = (d.Split("|")[0]).Split(',')[0].ObjToDate(), + Content = d.Split("|")[1]?.Replace("\r\n", "
"), + LogColor = "EXC", + Import = 9, + }).ToList(); + } + } + catch (Exception) { } + + + try + { + var sqllogContent = ReadLog(Path.Combine(_contentRoot, "Log"), "SqlLog_", Encoding.UTF8, ReadType.Prefix); + + if (!string.IsNullOrEmpty(sqllogContent)) + { + sqlLogs = sqllogContent.Split("--------------------------------") + .Where(d => !string.IsNullOrEmpty(d) && d != "\n" && d != "\r\n") + .Select(d => new LogInfo + { + Datetime = d.Split("|")[0].ObjToDate(), + Content = d.Split("|")[1]?.Replace("\r\n", "
"), + LogColor = "SQL", + }).ToList(); + } + } + catch (Exception) { } + + //try + //{ + // reqresLogs = ReadLog(Path.Combine(_contentRoot, "Log", "RequestResponseLog.log"), Encoding.UTF8)? + // .Split("--------------------------------") + // .Where(d => !string.IsNullOrEmpty(d) && d != "\n" && d != "\r\n") + // .Select(d => new LogInfo + // { + // Datetime = d.Split("|")[0].ObjToDate(), + // Content = d.Split("|")[1]?.Replace("\r\n", "
"), + // LogColor = "ReqRes", + // }).ToList(); + //} + //catch (Exception) + //{ + //} + + try + { + var Logs = JsonConvert.DeserializeObject>("[" + ReadLog(Path.Combine(_contentRoot, "Log"), "RequestIpInfoLog_", Encoding.UTF8, ReadType.Prefix) + "]"); + + Logs = Logs.Where(d => d.Datetime.ObjToDate() >= DateTime.Today).ToList(); + + reqresLogs = Logs.Select(d => new LogInfo + { + Datetime = d.Datetime.ObjToDate(), + Content = $"IP:{d.Ip}
{d.Url}", + LogColor = "ReqRes", + }).ToList(); + } + catch (Exception) + { + } + + if (excLogs != null) + { + aopLogs.AddRange(excLogs); + } + if (sqlLogs != null) + { + aopLogs.AddRange(sqlLogs); + } + if (reqresLogs != null) + { + aopLogs.AddRange(reqresLogs); + } + aopLogs = aopLogs.OrderByDescending(d => d.Import).ThenByDescending(d => d.Datetime).Take(100).ToList(); + + return aopLogs; + } + + + public static RequestApiWeekView RequestApiinfoByWeek() + { + List Logs = new List(); + List apiWeeks = new List(); + string apiWeeksJson = string.Empty; + List columns = new List(); + columns.Add("日期"); + + + try + { + Logs = JsonConvert.DeserializeObject>("[" + ReadLog(Path.Combine(_contentRoot, "Log"), "RequestIpInfoLog_", Encoding.UTF8, ReadType.Prefix) + "]"); + + var ddd = Logs.Where(d => d.Week == "周日").ToList(); + + apiWeeks = (from n in Logs + group n by new { n.Week, n.Url } into g + select new ApiWeek + { + week = g.Key.Week, + url = g.Key.Url, + count = g.Count(), + }).ToList(); + + //apiWeeks = apiWeeks.OrderByDescending(d => d.count).Take(8).ToList(); + + } + catch (Exception) + { + } + + StringBuilder jsonBuilder = new StringBuilder(); + jsonBuilder.Append("["); + + var weeks = apiWeeks.GroupBy(x => new { x.week }).Select(s => s.First()).ToList(); + foreach (var week in weeks) + { + var apiweeksCurrentWeek = apiWeeks.Where(d => d.week == week.week).OrderByDescending(d => d.count).Take(8).ToList(); + jsonBuilder.Append("{"); + + jsonBuilder.Append("\""); + jsonBuilder.Append("日期"); + jsonBuilder.Append("\":\""); + jsonBuilder.Append(week.week); + jsonBuilder.Append("\","); + + foreach (var item in apiweeksCurrentWeek) + { + jsonBuilder.Append("\""); + jsonBuilder.Append(item.url); + jsonBuilder.Append("\":\""); + jsonBuilder.Append(item.count); + jsonBuilder.Append("\","); + } + jsonBuilder.Remove(jsonBuilder.Length - 1, 1); + jsonBuilder.Append("},"); + } + + jsonBuilder.Remove(jsonBuilder.Length - 1, 1); + jsonBuilder.Append("]"); + + columns.AddRange(apiWeeks.OrderByDescending(d => d.count).Take(8).Select(d => d.url).ToList()); + + return new RequestApiWeekView() + { + columns = columns, + rows = jsonBuilder.ToString(), + }; + } + + public static AccessApiDateView AccessApiByDate() + { + List Logs = new List(); + List apiDates = new List(); + try + { + Logs = JsonConvert.DeserializeObject>("[" + ReadLog(Path.Combine(_contentRoot, "Log"), "RequestIpInfoLog_", Encoding.UTF8, ReadType.Prefix) + "]"); + + apiDates = (from n in Logs + group n by new { n.Date } into g + select new ApiDate + { + date = g.Key.Date, + count = g.Count(), + }).ToList(); + + apiDates = apiDates.OrderByDescending(d => d.date).Take(7).ToList(); + + } + catch (Exception) + { + } + + return new AccessApiDateView() + { + columns = new string[] { "date", "count" }, + rows = apiDates.OrderBy(d => d.date).ToList(), + }; + } + + public static AccessApiDateView AccessApiByHour() + { + List Logs = new List(); + List apiDates = new List(); + try + { + Logs = JsonConvert.DeserializeObject>("[" + ReadLog(Path.Combine(_contentRoot, "Log"), "RequestIpInfoLog_", Encoding.UTF8, ReadType.Prefix) + "]"); + + apiDates = (from n in Logs + where n.Datetime.ObjToDate() >= DateTime.Today + group n by new { hour = n.Datetime.ObjToDate().Hour } into g + select new ApiDate + { + date = g.Key.hour.ToString("00"), + count = g.Count(), + }).ToList(); + + apiDates = apiDates.OrderBy(d => d.date).Take(24).ToList(); + + } + catch (Exception) + { + } + + return new AccessApiDateView() + { + columns = new string[] { "date", "count" }, + rows = apiDates, + }; + } + } + + public enum ReadType + { + Accurate, + Prefix + } + +} diff --git a/New_College.Common/LogHelper/RequestInfo.cs b/New_College.Common/LogHelper/RequestInfo.cs new file mode 100644 index 0000000..88cad20 --- /dev/null +++ b/New_College.Common/LogHelper/RequestInfo.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; + +namespace New_College.Common.LogHelper +{ + public class ApiWeek + { + public string week { get; set; } + public string url { get; set; } + public int count { get; set; } + } + public class ApiDate + { + public string date { get; set; } + public int count { get; set; } + } + + public class RequestApiWeekView + { + public List columns { get; set; } + public string rows { get; set; } + } + public class AccessApiDateView + { + public string[] columns { get; set; } + public List rows { get; set; } + } + public class RequestInfo + { + public string Ip { get; set; } + public string Url { get; set; } + public string Datetime { get; set; } + public string Date { get; set; } + public string Week { get; set; } + + } +} diff --git a/New_College.Common/LogHelper/Seri/SerilogServer.cs b/New_College.Common/LogHelper/Seri/SerilogServer.cs new file mode 100644 index 0000000..37e53de --- /dev/null +++ b/New_College.Common/LogHelper/Seri/SerilogServer.cs @@ -0,0 +1,56 @@ +using Serilog; +using Serilog.Events; +using System; +using System.IO; + +namespace New_College.Common.LogHelper +{ + public class SerilogServer + { + /// + /// 记录日常日志 + /// + /// + /// + /// + public static void WriteLog(string filename, string[] dataParas, bool IsHeader = true) + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Error) + //.WriteTo.File(Path.Combine($"log/Serilog/{filename}/", ".log"), rollingInterval: RollingInterval.Day, outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level}] {Message}{NewLine}{Exception}") + .WriteTo.File(Path.Combine($"log/Serilog/", $"{filename}.log"), rollingInterval: RollingInterval.Infinite, outputTemplate: "{Message}{NewLine}{Exception}") + .CreateLogger(); + + var now = DateTime.Now; + string logContent = String.Join("\r\n", dataParas); + if (IsHeader) + { + logContent = ( + "--------------------------------\r\n" + + DateTime.Now + "|\r\n" + + String.Join("\r\n", dataParas) + "\r\n" + ); + } + + Log.Information(logContent); + Log.CloseAndFlush(); + } + /// + /// 记录异常日志 + /// + /// + /// + /// + public static void WriteErrorLog(string filename, string message, Exception ex) + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Error) + .WriteTo.File(Path.Combine($"log/Error/{filename}/", ".txt"), rollingInterval: RollingInterval.Day) + .CreateLogger(); + Log.Error(ex, message); + Log.CloseAndFlush(); + } + } +} \ No newline at end of file diff --git a/New_College.Common/MemoryCache/ICachingProvider.cs b/New_College.Common/MemoryCache/ICachingProvider.cs new file mode 100644 index 0000000..0aef069 --- /dev/null +++ b/New_College.Common/MemoryCache/ICachingProvider.cs @@ -0,0 +1,12 @@ +namespace New_College.Common.MemoryCache +{ + /// + /// 简单的缓存接口,只有查询和添加,以后会进行扩展 + /// + public interface ICaching + { + object Get(string cacheKey); + + void Set(string cacheKey, object cacheValue); + } +} diff --git a/New_College.Common/MemoryCache/MemoryCaching.cs b/New_College.Common/MemoryCache/MemoryCaching.cs new file mode 100644 index 0000000..1571fff --- /dev/null +++ b/New_College.Common/MemoryCache/MemoryCaching.cs @@ -0,0 +1,30 @@ +using Microsoft.Extensions.Caching.Memory; +using System; + +namespace New_College.Common.MemoryCache +{ + /// + /// 实例化缓存接口ICaching + /// + public class MemoryCaching : ICaching + { + //引用Microsoft.Extensions.Caching.Memory;这个和.net 还是不一样,没有了Httpruntime了 + private readonly IMemoryCache _cache; + //还是通过构造函数的方法,获取 + public MemoryCaching(IMemoryCache cache) + { + _cache = cache; + } + + public object Get(string cacheKey) + { + return _cache.Get(cacheKey); + } + + public void Set(string cacheKey, object cacheValue) + { + _cache.Set(cacheKey, cacheValue, TimeSpan.FromSeconds(7200)); + } + } + +} diff --git a/New_College.Common/New_College.Common.csproj b/New_College.Common/New_College.Common.csproj new file mode 100644 index 0000000..11f3140 --- /dev/null +++ b/New_College.Common/New_College.Common.csproj @@ -0,0 +1,34 @@ + + + + netcoreapp3.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/New_College.Common/Redis/IRedisCacheManager.cs b/New_College.Common/Redis/IRedisCacheManager.cs new file mode 100644 index 0000000..11d955e --- /dev/null +++ b/New_College.Common/Redis/IRedisCacheManager.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Common +{ + /// + /// Redis缓存接口 + /// + public interface IRedisCacheManager + { + + //获取 Reids 缓存值 + string GetValue(string key); + + //获取值,并序列化 + TEntity Get(string key); + + //保存 + void Set(string key, object value, TimeSpan cacheTime); + + //判断是否存在 + bool Get(string key); + + //移除某一个缓存值 + void Remove(string key); + + //全部清除 + void Clear(); + } +} diff --git a/New_College.Common/Redis/RedisCacheManager.cs b/New_College.Common/Redis/RedisCacheManager.cs new file mode 100644 index 0000000..8c734f1 --- /dev/null +++ b/New_College.Common/Redis/RedisCacheManager.cs @@ -0,0 +1,158 @@ +using StackExchange.Redis; +using System; + +namespace New_College.Common +{ + public class RedisCacheManager : IRedisCacheManager + { + + private readonly string redisConnenctionString; + private readonly string Password; + + public volatile ConnectionMultiplexer redisConnection; + + private readonly object redisConnectionLock = new object(); + + public RedisCacheManager() + { + string redisConfiguration = Appsettings.app(new string[] { "AppSettings", "RedisCachingAOP", "ConnectionString" });//获取连接字符串 + + if (string.IsNullOrWhiteSpace(redisConfiguration)) + { + throw new ArgumentException("redis config is empty", nameof(redisConfiguration)); + } + this.redisConnenctionString = redisConfiguration; + this.Password = Appsettings.app(new string[] { "AppSettings", "RedisCachingAOP", "Password" }); ; + this.redisConnection = GetRedisConnection(); + } + + /// + /// 核心代码,获取连接实例 + /// 通过双if 夹lock的方式,实现单例模式 + /// + /// + private ConnectionMultiplexer GetRedisConnection() + { + //如果已经连接实例,直接返回 + if (this.redisConnection != null && this.redisConnection.IsConnected) + { + return this.redisConnection; + } + //加锁,防止异步编程中,出现单例无效的问题 + lock (redisConnectionLock) + { + if (this.redisConnection != null) + { + //释放redis连接 + this.redisConnection.Dispose(); + } + try + { + var config = new ConfigurationOptions + { + AbortOnConnectFail = false, + AllowAdmin = true, + ConnectTimeout = 15000,//改成15s + SyncTimeout = 5000, + Password = Password ,//Redis数据库密码 + EndPoints = { redisConnenctionString }// connectionString 为IP:Port 如”192.168.2.110:6379” + }; + this.redisConnection = ConnectionMultiplexer.Connect(config); + } + catch (Exception) + { + throw new Exception("Redis服务未启用,请开启该服务,并且请注意端口号,本项目使用的的6319,而且我的是没有设置密码。"); + } + } + return this.redisConnection; + } + /// + /// 清除 + /// + public void Clear() + { + foreach (var endPoint in this.GetRedisConnection().GetEndPoints()) + { + var server = this.GetRedisConnection().GetServer(endPoint); + foreach (var key in server.Keys()) + { + redisConnection.GetDatabase().KeyDelete(key); + } + } + } + /// + /// 判断是否存在 + /// + /// + /// + public bool Get(string key) + { + return redisConnection.GetDatabase().KeyExists(key); + } + + /// + /// 查询 + /// + /// + /// + public string GetValue(string key) + { + return redisConnection.GetDatabase().StringGet(key); + } + + /// + /// 获取 + /// + /// + /// + /// + public TEntity Get(string key) + { + var value = redisConnection.GetDatabase().StringGet(key); + if (value.HasValue) + { + //需要用的反序列化,将Redis存储的Byte[],进行反序列化 + return SerializeHelper.Deserialize(value); + } + else + { + return default(TEntity); + } + } + + /// + /// 移除 + /// + /// + public void Remove(string key) + { + redisConnection.GetDatabase().KeyDelete(key); + } + /// + /// 设置 + /// + /// + /// + /// + public void Set(string key, object value, TimeSpan cacheTime) + { + if (value != null) + { + //序列化,将object值生成RedisValue + redisConnection.GetDatabase().StringSet(key, SerializeHelper.Serialize(value), cacheTime); + } + } + + /// + /// 增加/修改 + /// + /// + /// + /// + public bool SetValue(string key, byte[] value) + { + return redisConnection.GetDatabase().StringSet(key, value, TimeSpan.FromSeconds(120)); + } + + } +} diff --git a/New_College.ConsoleApp/New_College.ConsoleApp.csproj b/New_College.ConsoleApp/New_College.ConsoleApp.csproj new file mode 100644 index 0000000..c73e0d1 --- /dev/null +++ b/New_College.ConsoleApp/New_College.ConsoleApp.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp3.1 + + + diff --git a/New_College.ConsoleApp/Program.cs b/New_College.ConsoleApp/Program.cs new file mode 100644 index 0000000..3dbc7a2 --- /dev/null +++ b/New_College.ConsoleApp/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace New_College.ConsoleApp +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} diff --git a/New_College.Extensions/AOP/BlogCacheAOP.cs b/New_College.Extensions/AOP/BlogCacheAOP.cs new file mode 100644 index 0000000..56233c4 --- /dev/null +++ b/New_College.Extensions/AOP/BlogCacheAOP.cs @@ -0,0 +1,53 @@ +using New_College.Common; +using New_College.Common.MemoryCache; +using Castle.DynamicProxy; +using System.Linq; + +namespace New_College.AOP +{ + /// + /// 面向切面的缓存使用 + /// + public class BlogCacheAOP : CacheAOPbase + { + //通过注入的方式,把缓存操作接口通过构造函数注入 + private readonly ICaching _cache; + public BlogCacheAOP(ICaching cache) + { + _cache = cache; + } + + //Intercept方法是拦截的关键所在,也是IInterceptor接口中的唯一定义 + public override void Intercept(IInvocation invocation) + { + var method = invocation.MethodInvocationTarget ?? invocation.Method; + //对当前方法的特性验证 + //如果需要验证 + if (method.GetCustomAttributes(true).FirstOrDefault(x => x.GetType() == typeof(CachingAttribute)) is CachingAttribute qCachingAttribute) + { + //获取自定义缓存键 + var cacheKey = CustomCacheKey(invocation); + //根据key获取相应的缓存值 + var cacheValue = _cache.Get(cacheKey); + if (cacheValue != null) + { + //将当前获取到的缓存值,赋值给当前执行方法 + invocation.ReturnValue = cacheValue; + return; + } + //去执行当前的方法 + invocation.Proceed(); + //存入缓存 + if (!string.IsNullOrWhiteSpace(cacheKey)) + { + _cache.Set(cacheKey, invocation.ReturnValue); + } + } + else + { + invocation.Proceed();//直接执行被拦截方法 + } + } + } + +} diff --git a/New_College.Extensions/AOP/BlogLogAOP.cs b/New_College.Extensions/AOP/BlogLogAOP.cs new file mode 100644 index 0000000..bb50515 --- /dev/null +++ b/New_College.Extensions/AOP/BlogLogAOP.cs @@ -0,0 +1,222 @@ +using New_College.Common.LogHelper; +using New_College.Hubs; +using Castle.DynamicProxy; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.SignalR; +using Newtonsoft.Json; +using StackExchange.Profiling; +using System; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; + +namespace New_College.AOP +{ + /// + /// 拦截器BlogLogAOP 继承IInterceptor接口 + /// + public class BlogLogAOP : IInterceptor + { + private readonly IHubContext _hubContext; + private readonly IHttpContextAccessor _accessor; + + public BlogLogAOP(IHubContext hubContext, IHttpContextAccessor accessor) + { + _hubContext = hubContext; + _accessor = accessor; + } + + + /// + /// 实例化IInterceptor唯一方法 + /// + /// 包含被拦截方法的信息 + public void Intercept(IInvocation invocation) + { + string NickName = _accessor.HttpContext?.User?.Identity?.Name; + + //记录被拦截方法信息的日志信息 + var dataIntercept = "" + + $"【当前操作用户】:{ NickName} \r\n" + + $"【当前执行方法】:{ invocation.Method.Name} \r\n" + + $"【携带的参数有】: {string.Join(", ", invocation.Arguments.Select(a => (a ?? "").ToString()).ToArray())} \r\n"; + + try + { + MiniProfiler.Current.Step($"执行Service方法:{invocation.Method.Name}() -> "); + //在被拦截的方法执行完毕后 继续执行当前方法,注意是被拦截的是异步的 + invocation.Proceed(); + + + // 异步获取异常,先执行 + if (IsAsyncMethod(invocation.Method)) + { + + #region 方案一 + //Wait task execution and modify return value + if (invocation.Method.ReturnType == typeof(Task)) + { + invocation.ReturnValue = InternalAsyncHelper.AwaitTaskWithPostActionAndFinally( + (Task)invocation.ReturnValue, + async () => await SuccessAction(invocation, dataIntercept),/*成功时执行*/ + ex => + { + LogEx(ex, dataIntercept); + }); + } + //Task + else + { + invocation.ReturnValue = InternalAsyncHelper.CallAwaitTaskWithPostActionAndFinallyAndGetResult( + invocation.Method.ReturnType.GenericTypeArguments[0], + invocation.ReturnValue, + //async () => await SuccessAction(invocation, dataIntercept),/*成功时执行*/ + async (o) => await SuccessAction(invocation, dataIntercept, o),/*成功时执行*/ + ex => + { + LogEx(ex, dataIntercept); + }); + } + #endregion + + + // 如果方案一不行,试试这个方案 + #region 方案二 + + //var type = invocation.Method.ReturnType; + //var resultProperty = type.GetProperty("Result"); + //dataIntercept += ($"【执行完成结果】:{JsonConvert.SerializeObject(resultProperty.GetValue(invocation.ReturnValue))}"); + + //Parallel.For(0, 1, e => + //{ + // LogLock.OutSql2Log("AOPLog", new string[] { dataIntercept }); + //}); + + #endregion + } + else + {// 同步1 + + dataIntercept += ($"【执行完成结果】:{invocation.ReturnValue}"); + Parallel.For(0, 1, e => + { + LogLock.OutSql2Log("AOPLog", new string[] { dataIntercept }); + }); + } + } + catch (Exception ex)// 同步2 + { + LogEx(ex, dataIntercept); + + } + + _hubContext.Clients.All.SendAsync("ReceiveUpdate", LogLock.GetLogData()).Wait(); + } + + private async Task SuccessAction(IInvocation invocation, string dataIntercept, object o = null) + { + //invocation.ReturnValue = o; + //var type = invocation.Method.ReturnType; + //if (typeof(Task).IsAssignableFrom(type)) + //{ + // //var resultProperty = type.GetProperty("Result"); + // //类型错误 都可以不要invocation参数,直接将o系列化保存到日记中 + // dataIntercept += ($"【执行完成结果】:{JsonConvert.SerializeObject(invocation.ReturnValue)}"); + //} + //else + //{ + // dataIntercept += ($"【执行完成结果】:{invocation.ReturnValue}"); + //} + + dataIntercept += ($"【执行完成结果】:{JsonConvert.SerializeObject(o)}"); + + + await Task.Run(() => + { + Parallel.For(0, 1, e => + { + LogLock.OutSql2Log("AOPLog", new string[] { dataIntercept }); + }); + }); + } + + private void LogEx(Exception ex, string dataIntercept) + { + if (ex != null) + { + //执行的 service 中,收录异常 + MiniProfiler.Current.CustomTiming("Errors:", ex.Message); + //执行的 service 中,捕获异常 + dataIntercept += ($"【执行完成结果】:方法中出现异常:{ex.Message + ex.InnerException}\r\n"); + + // 异常日志里有详细的堆栈信息 + Parallel.For(0, 1, e => + { + LogLock.OutSql2Log("AOPLog", new string[] { dataIntercept }); + }); + } + } + + + public static bool IsAsyncMethod(MethodInfo method) + { + return ( + method.ReturnType == typeof(Task) || + (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)) + ); + } + + } + + + internal static class InternalAsyncHelper + { + public static async Task AwaitTaskWithPostActionAndFinally(Task actualReturnValue, Func postAction, Action finalAction) + { + Exception exception = null; + + try + { + await actualReturnValue; + await postAction(); + } + catch (Exception ex) + { + exception = ex; + } + finally + { + finalAction(exception); + } + } + + public static async Task AwaitTaskWithPostActionAndFinallyAndGetResult(Task actualReturnValue, Func postAction, Action finalAction) + { + Exception exception = null; + try + { + var result = await actualReturnValue; + await postAction(result); + return result; + } + catch (Exception ex) + { + exception = ex; + throw; + } + finally + { + finalAction(exception); + } + } + + public static object CallAwaitTaskWithPostActionAndFinallyAndGetResult(Type taskReturnType, object actualReturnValue, Func action, Action finalAction) + { + return typeof(InternalAsyncHelper) + .GetMethod("AwaitTaskWithPostActionAndFinallyAndGetResult", BindingFlags.Public | BindingFlags.Static) + .MakeGenericMethod(taskReturnType) + .Invoke(null, new object[] { actualReturnValue, action, finalAction }); + } + } + +} diff --git a/New_College.Extensions/AOP/BlogRedisCacheAOP.cs b/New_College.Extensions/AOP/BlogRedisCacheAOP.cs new file mode 100644 index 0000000..8409d5f --- /dev/null +++ b/New_College.Extensions/AOP/BlogRedisCacheAOP.cs @@ -0,0 +1,88 @@ +using New_College.Common; +using Castle.DynamicProxy; +using System; +using System.Linq; +using System.Threading.Tasks; + +namespace New_College.AOP +{ + /// + /// 面向切面的缓存使用 + /// + public class BlogRedisCacheAOP : CacheAOPbase + { + //通过注入的方式,把缓存操作接口通过构造函数注入 + private readonly IRedisCacheManager _cache; + public BlogRedisCacheAOP(IRedisCacheManager cache) + { + _cache = cache; + } + + //Intercept方法是拦截的关键所在,也是IInterceptor接口中的唯一定义 + //代码已经合并 ,学习pr流程 + public override void Intercept(IInvocation invocation) + { + var method = invocation.MethodInvocationTarget ?? invocation.Method; + if (method.ReturnType == typeof(void) || method.ReturnType == typeof(Task)) + { + invocation.Proceed(); + return; + } + //对当前方法的特性验证 + var qCachingAttribute = method.GetCustomAttributes(true).FirstOrDefault(x => x.GetType() == typeof(CachingAttribute)) as CachingAttribute; + + if (qCachingAttribute != null) + { + //获取自定义缓存键 + var cacheKey = CustomCacheKey(invocation); + //注意是 string 类型,方法GetValue + var cacheValue = _cache.GetValue(cacheKey); + if (cacheValue != null) + { + //将当前获取到的缓存值,赋值给当前执行方法 + Type returnType; + if (typeof(Task).IsAssignableFrom(method.ReturnType)) + { + returnType = method.ReturnType.GenericTypeArguments.FirstOrDefault(); + } + else + { + returnType = method.ReturnType; + } + + dynamic _result = Newtonsoft.Json.JsonConvert.DeserializeObject(cacheValue, returnType); + invocation.ReturnValue = (typeof(Task).IsAssignableFrom(method.ReturnType)) ? Task.FromResult(_result) : _result; + return; + } + //去执行当前的方法 + invocation.Proceed(); + + //存入缓存 + if (!string.IsNullOrWhiteSpace(cacheKey)) + { + object response; + + //Type type = invocation.ReturnValue?.GetType(); + var type = invocation.Method.ReturnType; + if (typeof(Task).IsAssignableFrom(type)) + { + var resultProperty = type.GetProperty("Result"); + response = resultProperty.GetValue(invocation.ReturnValue); + } + else + { + response = invocation.ReturnValue; + } + if (response == null) response = string.Empty; + + _cache.Set(cacheKey, response, TimeSpan.FromMinutes(qCachingAttribute.AbsoluteExpiration)); + } + } + else + { + invocation.Proceed();//直接执行被拦截方法 + } + } + } + +} diff --git a/New_College.Extensions/AOP/BlogTranAOP.cs b/New_College.Extensions/AOP/BlogTranAOP.cs new file mode 100644 index 0000000..0a865a1 --- /dev/null +++ b/New_College.Extensions/AOP/BlogTranAOP.cs @@ -0,0 +1,91 @@ +using New_College.Common; +using New_College.IRepository.UnitOfWork; +using Castle.DynamicProxy; +using System; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; + +namespace New_College.AOP +{ + /// + /// 事务拦截器BlogTranAOP 继承IInterceptor接口 + /// + public class BlogTranAOP : IInterceptor + { + private readonly IUnitOfWork _unitOfWork; + public BlogTranAOP(IUnitOfWork unitOfWork) + { + _unitOfWork = unitOfWork; + } + + /// + /// 实例化IInterceptor唯一方法 + /// + /// 包含被拦截方法的信息 + public void Intercept(IInvocation invocation) + { + var method = invocation.MethodInvocationTarget ?? invocation.Method; + //对当前方法的特性验证 + //如果需要验证 + if (method.GetCustomAttributes(true).FirstOrDefault(x => x.GetType() == typeof(UseTranAttribute)) is UseTranAttribute) + { + try + { + Console.WriteLine($"Begin Transaction"); + + _unitOfWork.BeginTran(); + + invocation.Proceed(); + + + // 异步获取异常,先执行 + if (IsAsyncMethod(invocation.Method)) + { + var result = invocation.ReturnValue; + if (result is Task) + { + Task.WaitAll(result as Task); + } + } + _unitOfWork.CommitTran(); + + } + catch (Exception) + { + Console.WriteLine($"Rollback Transaction"); + _unitOfWork.RollbackTran(); + } + } + else + { + invocation.Proceed();//直接执行被拦截方法 + } + + } + + private async Task SuccessAction(IInvocation invocation) + { + await Task.Run(() => + { + //... + }); + } + + public static bool IsAsyncMethod(MethodInfo method) + { + return ( + method.ReturnType == typeof(Task) || + (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)) + ); + } + private async Task TestActionAsync(IInvocation invocation) + { + await Task.Run(null); + } + + } + + + +} diff --git a/New_College.Extensions/AOP/BlogUserAuditAOP.cs b/New_College.Extensions/AOP/BlogUserAuditAOP.cs new file mode 100644 index 0000000..97d916d --- /dev/null +++ b/New_College.Extensions/AOP/BlogUserAuditAOP.cs @@ -0,0 +1,69 @@ +using Castle.DynamicProxy; +using Microsoft.AspNetCore.Http; +using System; + +namespace New_College.AOP +{ + /// + /// 面向切面的缓存使用 + /// + public class BlogUserAuditAOP : CacheAOPbase + { + private readonly IHttpContextAccessor _accessor; + + public BlogUserAuditAOP(IHttpContextAccessor accessor) + { + _accessor = accessor; + } + + public override void Intercept(IInvocation invocation) + { + string NickName = _accessor.HttpContext?.User?.Identity?.Name; + + //对当前方法的特性验证 + if (invocation.Method.Name?.ToLower() == "add" || invocation.Method.Name?.ToLower() == "update") + { + + if (invocation.Arguments.Length == 1) + { + if (invocation.Arguments[0].GetType().IsClass) + { + dynamic argModel = invocation.Arguments[0]; + var getType = argModel.GetType(); + if (invocation.Method.Name?.ToLower() == "add") + { + if (getType.GetProperty("CreateBy") != null) + { + argModel.CreateBy = NickName; + } + if (getType.GetProperty("bCreateTime") != null) + { + argModel.bCreateTime = DateTime.Now; + } + } + if (getType.GetProperty("bUpdateTime") != null) + { + argModel.bUpdateTime = DateTime.Now; + } + if (getType.GetProperty("ModifyBy") != null) + { + argModel.ModifyBy = NickName; + } + if (getType.GetProperty("bsubmitter") != null) + { + argModel.bsubmitter = NickName; + } + + invocation.Arguments[0] = argModel; + } + } + invocation.Proceed(); + } + else + { + invocation.Proceed(); + } + } + } + +} diff --git a/New_College.Extensions/AOP/CacheAOPbase.cs b/New_College.Extensions/AOP/CacheAOPbase.cs new file mode 100644 index 0000000..a800782 --- /dev/null +++ b/New_College.Extensions/AOP/CacheAOPbase.cs @@ -0,0 +1,224 @@ +using Castle.DynamicProxy; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; + +namespace New_College.AOP +{ + public abstract class CacheAOPbase : IInterceptor + { + /// + /// AOP的拦截方法 + /// + /// + public abstract void Intercept(IInvocation invocation); + + /// + /// 自定义缓存的key + /// + /// + /// + protected string CustomCacheKey(IInvocation invocation) + { + var typeName = invocation.TargetType.Name; + var methodName = invocation.Method.Name; + var methodArguments = invocation.Arguments.Select(GetArgumentValue).Take(3).ToList();//获取参数列表,最多三个 + + string key = $"{typeName}:{methodName}:"; + foreach (var param in methodArguments) + { + key = $"{key}{param}:"; + } + + return key.TrimEnd(':'); + } + + /// + /// object 转 string + /// + /// + /// + protected static string GetArgumentValue(object arg) + { + if (arg is DateTime || arg is DateTime?) + return ((DateTime)arg).ToString("yyyyMMddHHmmss"); + + if (arg is string || arg is ValueType || arg is Nullable) + return arg.ToString(); + + if (arg != null) + { + if (arg is Expression) + { + var obj = arg as Expression; + var result = Resolve(obj); + return Common.Helper.MD5Helper.MD5Encrypt16(result); + } + else if (arg.GetType().IsClass) + { + return Common.Helper.MD5Helper.MD5Encrypt16(Newtonsoft.Json.JsonConvert.SerializeObject(arg)); + } + } + return string.Empty; + } + + private static string Resolve(Expression expression) + { + if (expression is LambdaExpression) + { + LambdaExpression lambda = expression as LambdaExpression; + expression = lambda.Body; + return Resolve(expression); + } + if (expression is BinaryExpression) + { + BinaryExpression binary = expression as BinaryExpression; + if (binary.Left is MemberExpression && binary.Right is ConstantExpression)//解析x=>x.Name=="123" x.Age==123这类 + return ResolveFunc(binary.Left, binary.Right, binary.NodeType); + if (binary.Left is MethodCallExpression && binary.Right is ConstantExpression)//解析x=>x.Name.Contains("xxx")==false这类的 + { + object value = (binary.Right as ConstantExpression).Value; + return ResolveLinqToObject(binary.Left, value, binary.NodeType); + } + if ((binary.Left is MemberExpression && binary.Right is MemberExpression) + || (binary.Left is MemberExpression && binary.Right is UnaryExpression))//解析x=>x.Date==DateTime.Now这种 + { + LambdaExpression lambda = Expression.Lambda(binary.Right); + Delegate fn = lambda.Compile(); + ConstantExpression value = Expression.Constant(fn.DynamicInvoke(null), binary.Right.Type); + return ResolveFunc(binary.Left, value, binary.NodeType); + } + } + if (expression is UnaryExpression) + { + UnaryExpression unary = expression as UnaryExpression; + if (unary.Operand is MethodCallExpression)//解析!x=>x.Name.Contains("xxx")或!array.Contains(x.Name)这类 + return ResolveLinqToObject(unary.Operand, false); + if (unary.Operand is MemberExpression && unary.NodeType == ExpressionType.Not)//解析x=>!x.isDeletion这样的 + { + ConstantExpression constant = Expression.Constant(false); + return ResolveFunc(unary.Operand, constant, ExpressionType.Equal); + } + } + if (expression is MemberExpression && expression.NodeType == ExpressionType.MemberAccess)//解析x=>x.isDeletion这样的 + { + MemberExpression member = expression as MemberExpression; + ConstantExpression constant = Expression.Constant(true); + return ResolveFunc(member, constant, ExpressionType.Equal); + } + if (expression is MethodCallExpression)//x=>x.Name.Contains("xxx")或array.Contains(x.Name)这类 + { + MethodCallExpression methodcall = expression as MethodCallExpression; + return ResolveLinqToObject(methodcall, true); + } + var body = expression as BinaryExpression; + //已经修改过代码body应该不会是null值了 + if (body == null) + return string.Empty; + var Operator = GetOperator(body.NodeType); + var Left = Resolve(body.Left); + var Right = Resolve(body.Right); + string Result = string.Format("({0} {1} {2})", Left, Operator, Right); + return Result; + } + + private static string GetOperator(ExpressionType expressiontype) + { + switch (expressiontype) + { + case ExpressionType.And: + return "and"; + case ExpressionType.AndAlso: + return "and"; + case ExpressionType.Or: + return "or"; + case ExpressionType.OrElse: + return "or"; + case ExpressionType.Equal: + return "="; + case ExpressionType.NotEqual: + return "<>"; + case ExpressionType.LessThan: + return "<"; + case ExpressionType.LessThanOrEqual: + return "<="; + case ExpressionType.GreaterThan: + return ">"; + case ExpressionType.GreaterThanOrEqual: + return ">="; + default: + throw new Exception(string.Format("不支持{0}此种运算符查找!" + expressiontype)); + } + } + + private static string ResolveFunc(Expression left, Expression right, ExpressionType expressiontype) + { + var Name = (left as MemberExpression).Member.Name; + var Value = (right as ConstantExpression).Value; + var Operator = GetOperator(expressiontype); + return Name + Operator + Value ?? "null"; + } + + private static string ResolveLinqToObject(Expression expression, object value, ExpressionType? expressiontype = null) + { + var MethodCall = expression as MethodCallExpression; + var MethodName = MethodCall.Method.Name; + switch (MethodName) + { + case "Contains": + if (MethodCall.Object != null) + return Like(MethodCall); + return In(MethodCall, value); + case "Count": + return Len(MethodCall, value, expressiontype.Value); + case "LongCount": + return Len(MethodCall, value, expressiontype.Value); + default: + throw new Exception(string.Format("不支持{0}方法的查找!", MethodName)); + } + } + + private static string In(MethodCallExpression expression, object isTrue) + { + var Argument1 = (expression.Arguments[0] as MemberExpression).Expression as ConstantExpression; + var Argument2 = expression.Arguments[1] as MemberExpression; + var Field_Array = Argument1.Value.GetType().GetFields().First(); + object[] Array = Field_Array.GetValue(Argument1.Value) as object[]; + List SetInPara = new List(); + for (int i = 0; i < Array.Length; i++) + { + string Name_para = "InParameter" + i; + string Value = Array[i].ToString(); + SetInPara.Add(Value); + } + string Name = Argument2.Member.Name; + string Operator = Convert.ToBoolean(isTrue) ? "in" : " not in"; + string CompName = string.Join(",", SetInPara); + string Result = string.Format("{0} {1} ({2})", Name, Operator, CompName); + return Result; + } + private static string Like(MethodCallExpression expression) + { + + var Temp = expression.Arguments[0]; + LambdaExpression lambda = Expression.Lambda(Temp); + Delegate fn = lambda.Compile(); + var tempValue = Expression.Constant(fn.DynamicInvoke(null), Temp.Type); + string Value = string.Format("%{0}%", tempValue); + string Name = (expression.Object as MemberExpression).Member.Name; + string Result = string.Format("{0} like {1}", Name, Value); + return Result; + } + + + private static string Len(MethodCallExpression expression, object value, ExpressionType expressiontype) + { + object Name = (expression.Arguments[0] as MemberExpression).Member.Name; + string Operator = GetOperator(expressiontype); + string Result = string.Format("len({0}){1}{2}", Name, Operator, value.ToString()); + return Result; + } + + } +} diff --git a/New_College.Extensions/Authorizations/OverWrite/JwtHelper.cs b/New_College.Extensions/Authorizations/OverWrite/JwtHelper.cs new file mode 100644 index 0000000..35f1544 --- /dev/null +++ b/New_College.Extensions/Authorizations/OverWrite/JwtHelper.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections.Generic; +using System.IdentityModel.Tokens.Jwt; +using System.Linq; +using System.Security.Claims; +using System.Text; +using New_College.Common; +using New_College.Common.AppConfig; +using Microsoft.IdentityModel.Tokens; + +namespace New_College.AuthHelper.OverWrite +{ + public class JwtHelper + { + + /// + /// 颁发JWT字符串 + /// + /// + /// + public static string IssueJwt(TokenModelJwt tokenModel) + { + string iss = Appsettings.app(new string[] { "Audience", "Issuer" }); + string aud = Appsettings.app(new string[] { "Audience", "Audience" }); + string secret = AppSecretConfig.Audience_Secret_String; + + //var claims = new Claim[] //old + var claims = new List + { + /* + * 特别重要: + 1、这里将用户的部分信息,比如 uid 存到了Claim 中,如果你想知道如何在其他地方将这个 uid从 Token 中取出来,请看下边的SerializeJwt() 方法,或者在整个解决方案,搜索这个方法,看哪里使用了! + 2、你也可以研究下 HttpContext.User.Claims ,具体的你可以看看 Policys/PermissionHandler.cs 类中是如何使用的。 + */ + + + + new Claim(JwtRegisteredClaimNames.Jti, tokenModel.Uid.ToString()), + new Claim(JwtRegisteredClaimNames.Iat, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}"), + new Claim(JwtRegisteredClaimNames.Nbf,$"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") , + //这个就是过期时间,目前是过期1000秒,可自定义,注意JWT有自己的缓冲过期时间 + new Claim (JwtRegisteredClaimNames.Exp,$"{new DateTimeOffset(DateTime.Now.AddDays(7)).ToUnixTimeSeconds()}"), + new Claim(ClaimTypes.Expiration, DateTime.Now.AddDays(1000).ToString()), + new Claim(JwtRegisteredClaimNames.Iss,iss), + new Claim(JwtRegisteredClaimNames.Aud,aud), + + //new Claim(ClaimTypes.Role,tokenModel.Role),//为了解决一个用户多个角色(比如:Admin,System),用下边的方法 + }; + + // 可以将一个用户的多个角色全部赋予; + // 作者:DX 提供技术支持; + claims.AddRange(tokenModel.Role.Split(',').Select(s => new Claim(ClaimTypes.Role, s))); + + + + //秘钥 (SymmetricSecurityKey 对安全性的要求,密钥的长度太短会报出异常) + var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)); + var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); + + var jwt = new JwtSecurityToken( + issuer: iss, + claims: claims, + signingCredentials: creds); + + var jwtHandler = new JwtSecurityTokenHandler(); + var encodedJwt = jwtHandler.WriteToken(jwt); + + return encodedJwt; + } + + /// + /// 解析 + /// + /// + /// + public static TokenModelJwt SerializeJwt(string jwtStr) + { + var jwtHandler = new JwtSecurityTokenHandler(); + JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr); + object role; + try + { + jwtToken.Payload.TryGetValue(ClaimTypes.Role, out role); + } + catch (Exception e) + { + Console.WriteLine(e); + throw; + } + var tm = new TokenModelJwt + { + Uid = (jwtToken.Id).ObjToInt(), + Role = role != null ? role.ObjToString() : "", + }; + return tm; + } + } + + /// + /// 令牌 + /// + public class TokenModelJwt + { + /// + /// Id + /// + public long Uid { get; set; } + /// + /// 角色 + /// + public string Role { get; set; } + /// + /// 职能 + /// + public string Work { get; set; } + + } +} diff --git a/New_College.Extensions/Authorizations/OverWrite/JwtTokenAuth.cs b/New_College.Extensions/Authorizations/OverWrite/JwtTokenAuth.cs new file mode 100644 index 0000000..9d5d398 --- /dev/null +++ b/New_College.Extensions/Authorizations/OverWrite/JwtTokenAuth.cs @@ -0,0 +1,92 @@ +using Microsoft.AspNetCore.Http; +using System; +using System.Threading.Tasks; +using New_College.AuthHelper.OverWrite; + +namespace New_College.AuthHelper +{ + /// + /// 中间件 + /// 原做为自定义授权中间件 + /// 先做检查 header token的使用 + /// + public class JwtTokenAuth + { + /// + /// + /// + private readonly RequestDelegate _next; + /// + /// + /// + /// + public JwtTokenAuth(RequestDelegate next) + { + _next = next; + } + + + private void PreProceed(HttpContext next) + { + //Console.WriteLine($"{DateTime.Now} middleware invoke preproceed"); + //... + } + private void PostProceed(HttpContext next) + { + //Console.WriteLine($"{DateTime.Now} middleware invoke postproceed"); + //.... + } + + /// + /// + /// + /// + /// + public Task Invoke(HttpContext httpContext) + { + PreProceed(httpContext); + + + //检测是否包含'Authorization'请求头 + if (!httpContext.Request.Headers.ContainsKey("Authorization")) + { + PostProceed(httpContext); + + return _next(httpContext); + } + //var tokenHeader = httpContext.Request.Headers["Authorization"].ToString(); + var tokenHeader = httpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", ""); + + try + { + if (tokenHeader.Length >= 128) + { + //Console.WriteLine($"{DateTime.Now} token :{tokenHeader}"); + TokenModelJwt tm = JwtHelper.SerializeJwt(tokenHeader); + + //授权 + //var claimList = new List(); + //var claim = new Claim(ClaimTypes.Role, tm.Role); + //claimList.Add(claim); + //var identity = new ClaimsIdentity(claimList); + //var principal = new ClaimsPrincipal(identity); + //httpContext.User = principal; + } + + } + catch (Exception e) + { + Console.WriteLine($"{DateTime.Now} middleware wrong:{e.Message}"); + } + + + PostProceed(httpContext); + + + return _next(httpContext); + } + + } + +} + diff --git a/New_College.Extensions/Authorizations/Policys/ApiResponse.cs b/New_College.Extensions/Authorizations/Policys/ApiResponse.cs new file mode 100644 index 0000000..960be61 --- /dev/null +++ b/New_College.Extensions/Authorizations/Policys/ApiResponse.cs @@ -0,0 +1,52 @@ +using New_College.Model; + +namespace New_College.AuthHelper.Policys +{ + public class ApiResponse + { + public int Status { get; set; } = 404; + public string Value { get; set; } = "No Found"; + public MessageModel MessageModel = new MessageModel() { }; + + public ApiResponse(StatusCode apiCode, string msg = null) + { + switch (apiCode) + { + case StatusCode.CODE401: + { + Status = 401; + Value = "很抱歉,您无权访问该接口,请确保已经登录!"; + } + break; + case StatusCode.CODE403: + { + Status = 403; + Value = "很抱歉,您的访问权限等级不够,联系管理员!"; + } + break; + case StatusCode.CODE500: + { + Status = 500; + Value = msg; + } + break; + } + + MessageModel = new MessageModel() + { + status = Status, + msg = Value, + success = false + }; + } + } + + public enum StatusCode + { + CODE401, + CODE403, + CODE404, + CODE500 + } + +} diff --git a/New_College.Extensions/Authorizations/Policys/ApiResponseHandler.cs b/New_College.Extensions/Authorizations/Policys/ApiResponseHandler.cs new file mode 100644 index 0000000..57a3dac --- /dev/null +++ b/New_College.Extensions/Authorizations/Policys/ApiResponseHandler.cs @@ -0,0 +1,38 @@ +using New_College.AuthHelper.Policys; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Newtonsoft.Json; +using System; +using System.Text.Encodings.Web; +using System.Threading.Tasks; + +namespace New_College.AuthHelper +{ + public class ApiResponseHandler : AuthenticationHandler + { + public ApiResponseHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) + { + } + + protected override Task HandleAuthenticateAsync() + { + throw new NotImplementedException(); + } + protected override async Task HandleChallengeAsync(AuthenticationProperties properties) + { + Response.ContentType = "application/json"; + Response.StatusCode = StatusCodes.Status401Unauthorized; + await Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE401)).MessageModel)); + } + + protected override async Task HandleForbiddenAsync(AuthenticationProperties properties) + { + Response.ContentType = "application/json"; + Response.StatusCode = StatusCodes.Status403Forbidden; + await Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE403)).MessageModel)); + } + + } +} diff --git a/New_College.Extensions/Authorizations/Policys/JwtToken.cs b/New_College.Extensions/Authorizations/Policys/JwtToken.cs new file mode 100644 index 0000000..65d0fc1 --- /dev/null +++ b/New_College.Extensions/Authorizations/Policys/JwtToken.cs @@ -0,0 +1,45 @@ +using New_College.Model.ViewModels; +using System; +using System.IdentityModel.Tokens.Jwt; +using System.Security.Claims; + +namespace New_College.AuthHelper +{ + /// + /// JWTToken生成类 + /// + public class JwtToken + { + /// + /// 获取基于JWT的Token + /// + /// 需要在登陆的时候配置 + /// 在startup中定义的参数 + /// + public static TokenInfoViewModel BuildJwtToken(Claim[] claims, PermissionRequirement permissionRequirement) + { + var now = DateTime.Now; + // 实例化JwtSecurityToken + var jwt = new JwtSecurityToken( + issuer: permissionRequirement.Issuer, + audience: permissionRequirement.Audience, + claims: claims, + notBefore: now, + expires: now.Add(permissionRequirement.Expiration), + signingCredentials: permissionRequirement.SigningCredentials + ); + // 生成 Token + var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt); + + //打包返回前台 + var responseJson = new TokenInfoViewModel + { + success = true, + token = encodedJwt, + expires_in = permissionRequirement.Expiration.TotalSeconds, + token_type = "Bearer" + }; + return responseJson; + } + } +} diff --git a/New_College.Extensions/Authorizations/Policys/PermissionHandler.cs b/New_College.Extensions/Authorizations/Policys/PermissionHandler.cs new file mode 100644 index 0000000..c84fbeb --- /dev/null +++ b/New_College.Extensions/Authorizations/Policys/PermissionHandler.cs @@ -0,0 +1,193 @@ +using New_College.Common.Helper; +using New_College.IServices; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace New_College.AuthHelper +{ + /// + /// 权限授权处理器 + /// + public class PermissionHandler : AuthorizationHandler + { + /// + /// 验证方案提供对象 + /// + public IAuthenticationSchemeProvider Schemes { get; set; } + private readonly IRoleModulePermissionServices _roleModulePermissionServices; + private readonly IHttpContextAccessor _accessor; + + /// + /// 构造函数注入 + /// + /// + /// + /// + public PermissionHandler(IAuthenticationSchemeProvider schemes, IRoleModulePermissionServices roleModulePermissionServices, IHttpContextAccessor accessor) + { + _accessor = accessor; + Schemes = schemes; + _roleModulePermissionServices = roleModulePermissionServices; + } + + // 重写异步处理程序 + protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) + { + var httpContext = _accessor.HttpContext; + + // 获取系统中所有的角色和菜单的关系集合 + if (!requirement.Permissions.Any()) + { + var data = await _roleModulePermissionServices.RoleModuleMaps(); + var list = new List(); + // ids4和jwt切换 + // ids4 + if (Permissions.IsUseIds4) + { + list = (from item in data + where item.IsDeleted == false + orderby item.Id + select new PermissionItem + { + Url = item.Module?.LinkUrl, + Role = item.Role?.Id.ObjToString(), + }).ToList(); + } + // jwt + else + { + list = (from item in data + where item.IsDeleted == false + orderby item.Id + select new PermissionItem + { + Url = item.Module?.LinkUrl, + Role = item.Role?.Name.ObjToString(), + }).ToList(); + } + requirement.Permissions = list; + } + + if (httpContext != null) + { + var questUrl = httpContext.Request.Path.Value.ToLower(); + + // 整体结构类似认证中间件UseAuthentication的逻辑,具体查看开源地址 + // https://github.com/dotnet/aspnetcore/blob/master/src/Security/Authentication/Core/src/AuthenticationMiddleware.cs + httpContext.Features.Set(new AuthenticationFeature + { + OriginalPath = httpContext.Request.Path, + OriginalPathBase = httpContext.Request.PathBase + }); + + // Give any IAuthenticationRequestHandler schemes a chance to handle the request + // 主要作用是: 判断当前是否需要进行远程验证,如果是就进行远程验证 + var handlers = httpContext.RequestServices.GetRequiredService(); + foreach (var scheme in await Schemes.GetRequestHandlerSchemesAsync()) + { + if (await handlers.GetHandlerAsync(httpContext, scheme.Name) is IAuthenticationRequestHandler handler && await handler.HandleRequestAsync()) + { + context.Fail(); + return; + } + } + + + //判断请求是否拥有凭据,即有没有登录 + var defaultAuthenticate = await Schemes.GetDefaultAuthenticateSchemeAsync(); + if (defaultAuthenticate != null) + { + var result = await httpContext.AuthenticateAsync(defaultAuthenticate.Name); + //result?.Principal不为空即登录成功 + if (result?.Principal != null) + { + + httpContext.User = result.Principal; + + // 获取当前用户的角色信息 + var currentUserRoles = new List(); + // ids4和jwt切换 + // ids4 + if (Permissions.IsUseIds4) + { + currentUserRoles = (from item in httpContext.User.Claims + where item.Type == "role" + select item.Value).ToList(); + } + else + { + // jwt + currentUserRoles = (from item in httpContext.User.Claims + where item.Type == requirement.ClaimType + select item.Value).ToList(); + } + + var isMatchRole = false; + var permisssionRoles = requirement.Permissions.Where(w => currentUserRoles.Contains(w.Role)); + foreach (var item in permisssionRoles) + { + try + { + if (Regex.Match(questUrl, item.Url?.ObjToString().ToLower())?.Value == questUrl) + { + isMatchRole = true; + break; + } + } + catch (Exception) + { + // ignored + } + } + + //验证权限 + if (currentUserRoles.Count <= 0 || !isMatchRole) + { + context.Fail(); + return; + } + + var isExp = false; + // ids4和jwt切换 + // ids4 + if (Permissions.IsUseIds4) + { + isExp = (httpContext.User.Claims.SingleOrDefault(s => s.Type == "exp")?.Value) != null && DateHelper.StampToDateTime(httpContext.User.Claims.SingleOrDefault(s => s.Type == "exp")?.Value) >= DateTime.Now; + } + else + { + // jwt + isExp = (httpContext.User.Claims.SingleOrDefault(s => s.Type == ClaimTypes.Expiration)?.Value) != null && DateTime.Parse(httpContext.User.Claims.SingleOrDefault(s => s.Type == ClaimTypes.Expiration)?.Value) >= DateTime.Now; + } + if (isExp) + { + context.Succeed(requirement); + } + else + { + context.Fail(); + return; + } + return; + } + } + //判断没有登录时,是否访问登录的url,并且是Post请求,并且是form表单提交类型,否则为失败 + if (!(questUrl.Equals(requirement.LoginPath.ToLower(), StringComparison.Ordinal) && (!httpContext.Request.Method.Equals("POST") || !httpContext.Request.HasFormContentType))) + { + context.Fail(); + return; + } + } + + //context.Succeed(requirement); + } + } +} diff --git a/New_College.Extensions/Authorizations/Policys/PermissionItem.cs b/New_College.Extensions/Authorizations/Policys/PermissionItem.cs new file mode 100644 index 0000000..80d75fa --- /dev/null +++ b/New_College.Extensions/Authorizations/Policys/PermissionItem.cs @@ -0,0 +1,19 @@ + +namespace New_College.AuthHelper +{ + /// + /// 用户或角色或其他凭据实体,就像是订单详情一样 + /// 之前的名字是 Permission + /// + public class PermissionItem + { + /// + /// 用户或角色或其他凭据名称 + /// + public virtual string Role { get; set; } + /// + /// 请求Url + /// + public virtual string Url { get; set; } + } +} diff --git a/New_College.Extensions/Authorizations/Policys/PermissionRequirement.cs b/New_College.Extensions/Authorizations/Policys/PermissionRequirement.cs new file mode 100644 index 0000000..eb73c30 --- /dev/null +++ b/New_College.Extensions/Authorizations/Policys/PermissionRequirement.cs @@ -0,0 +1,72 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.IdentityModel.Tokens; +using System; +using System.Collections.Generic; + +namespace New_College.AuthHelper +{ + /// + /// 必要参数类,类似一个订单信息 + /// 继承 IAuthorizationRequirement,用于设计自定义权限处理器PermissionHandler + /// 因为AuthorizationHandler 中的泛型参数 TRequirement 必须继承 IAuthorizationRequirement + /// + public class PermissionRequirement : IAuthorizationRequirement + { + /// + /// 用户权限集合,一个订单包含了很多详情, + /// 同理,一个网站的认证发行中,也有很多权限详情(这里是Role和URL的关系) + /// + public List Permissions { get; set; } + /// + /// 无权限action + /// + public string DeniedAction { get; set; } + + /// + /// 认证授权类型 + /// + public string ClaimType { internal get; set; } + /// + /// 请求路径 + /// + public string LoginPath { get; set; } = "/Api/Login"; + /// + /// 发行人 + /// + public string Issuer { get; set; } + /// + /// 订阅人 + /// + public string Audience { get; set; } + /// + /// 过期时间 + /// + public TimeSpan Expiration { get; set; } + /// + /// 签名验证 + /// + public SigningCredentials SigningCredentials { get; set; } + + + /// + /// 构造 + /// + /// 拒约请求的url + /// 权限集合 + /// 声明类型 + /// 发行人 + /// 订阅人 + /// 签名验证实体 + /// 过期时间 + public PermissionRequirement(string deniedAction, List permissions, string claimType, string issuer, string audience, SigningCredentials signingCredentials, TimeSpan expiration) + { + ClaimType = claimType; + DeniedAction = deniedAction; + Permissions = permissions; + Issuer = issuer; + Audience = audience; + Expiration = expiration; + SigningCredentials = signingCredentials; + } + } +} diff --git a/New_College.Extensions/AutoMapper/AutoMapperConfig.cs b/New_College.Extensions/AutoMapper/AutoMapperConfig.cs new file mode 100644 index 0000000..3f2f437 --- /dev/null +++ b/New_College.Extensions/AutoMapper/AutoMapperConfig.cs @@ -0,0 +1,18 @@ +using AutoMapper; + +namespace New_College.AutoMapper +{ + /// + /// 静态全局 AutoMapper 配置文件 + /// + public class AutoMapperConfig + { + public static MapperConfiguration RegisterMappings() + { + return new MapperConfiguration(cfg => + { + cfg.AddProfile(new CustomProfile()); + }); + } + } +} diff --git a/New_College.Extensions/AutoMapper/CustomProfile.cs b/New_College.Extensions/AutoMapper/CustomProfile.cs new file mode 100644 index 0000000..3d4daac --- /dev/null +++ b/New_College.Extensions/AutoMapper/CustomProfile.cs @@ -0,0 +1,18 @@ +using AutoMapper; +using New_College.Model.Models; +using New_College.Model.ViewModels; + +namespace New_College.AutoMapper +{ + public class CustomProfile : Profile + { + /// + /// 配置构造函数,用来创建关系映射 + /// + public CustomProfile() + { + CreateMap(); + CreateMap(); + } + } +} diff --git a/New_College.Extensions/Middlewares/AllServicesMildd.cs b/New_College.Extensions/Middlewares/AllServicesMildd.cs new file mode 100644 index 0000000..60e7819 --- /dev/null +++ b/New_College.Extensions/Middlewares/AllServicesMildd.cs @@ -0,0 +1,56 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; + +namespace New_College.Extensions +{ + /// + /// 查看所有注入的服务 + /// + public static class AllServicesMildd + { + public static void UseAllServicesMildd(this IApplicationBuilder app, IServiceCollection _services) + { + if (app == null) throw new ArgumentNullException(nameof(app)); + + List tsDIAutofac = new List(); + tsDIAutofac.AddRange(Assembly.LoadFrom(Path.Combine(AppContext.BaseDirectory, "New_College.Services.dll")).GetTypes().ToList()); + tsDIAutofac.AddRange(Assembly.LoadFrom(Path.Combine(AppContext.BaseDirectory, "New_College.Repository.dll")).GetTypes().ToList()); + + app.Map("/allservices", builder => builder.Run(async context => + { + context.Response.ContentType = "text/html; charset=utf-8"; + await context.Response.WriteAsync(""); + + await context.Response.WriteAsync($"

所有服务{_services.Count}个

"); + + foreach (var svc in _services) + { + await context.Response.WriteAsync(""); + await context.Response.WriteAsync($""); + await context.Response.WriteAsync($""); + await context.Response.WriteAsync($""); + await context.Response.WriteAsync(""); + } + foreach (var item in tsDIAutofac.Where(s => !s.IsInterface)) + { + var interfaceType = item.GetInterfaces(); + foreach (var typeArray in interfaceType) + { + await context.Response.WriteAsync(""); + await context.Response.WriteAsync($""); + await context.Response.WriteAsync($""); + await context.Response.WriteAsync($""); + await context.Response.WriteAsync(""); + } + } + await context.Response.WriteAsync("
类型生命周期Instance
{svc.ServiceType.FullName}{svc.Lifetime}{svc.ImplementationType?.Name}
{typeArray?.FullName}Scoped{item?.Name}
"); + })); + } + } +} diff --git a/New_College.Extensions/Middlewares/ConsulMildd.cs b/New_College.Extensions/Middlewares/ConsulMildd.cs new file mode 100644 index 0000000..c78d8a0 --- /dev/null +++ b/New_College.Extensions/Middlewares/ConsulMildd.cs @@ -0,0 +1,52 @@ +using Consul; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using System; + +namespace New_College.Extensions +{ + /// + /// Consul 注册服务 + /// + public static class ConsulMildd + { + public static IApplicationBuilder UseConsulMildd(this IApplicationBuilder app, IConfiguration configuration, IHostApplicationLifetime lifetime) + { + if (configuration["Middleware:Consul:Enabled"].ObjToBool()) + { + var consulClient = new ConsulClient(c => + { + //consul地址 + c.Address = new Uri(configuration["ConsulSetting:ConsulAddress"]); + }); + + var registration = new AgentServiceRegistration() + { + ID = Guid.NewGuid().ToString(),//服务实例唯一标识 + Name = configuration["ConsulSetting:ServiceName"],//服务名 + Address = configuration["ConsulSetting:ServiceIP"], //服务IP + Port = int.Parse(configuration["ConsulSetting:ServicePort"]),//服务端口 + Check = new AgentServiceCheck() + { + DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册 + Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔 + HTTP = $"http://{configuration["ConsulSetting:ServiceIP"]}:{configuration["ConsulSetting:ServicePort"]}{configuration["ConsulSetting:ServiceHealthCheck"]}",//健康检查地址 + Timeout = TimeSpan.FromSeconds(5)//超时时间 + } + }; + + //服务注册 + consulClient.Agent.ServiceRegister(registration).Wait(); + + //应用程序终止时,取消注册 + lifetime.ApplicationStopping.Register(() => + { + consulClient.Agent.ServiceDeregister(registration.ID).Wait(); + }); + + } + return app; + } + } +} diff --git a/New_College.Extensions/Middlewares/ExceptionHandlerMidd.cs b/New_College.Extensions/Middlewares/ExceptionHandlerMidd.cs new file mode 100644 index 0000000..e0f0905 --- /dev/null +++ b/New_College.Extensions/Middlewares/ExceptionHandlerMidd.cs @@ -0,0 +1,54 @@ +using New_College.AuthHelper.Policys; +using Microsoft.AspNetCore.Http; +using Newtonsoft.Json; +using System; +using System.Net; +using System.Threading.Tasks; + +namespace New_College.Middlewares +{ + public class ExceptionHandlerMidd + { + private readonly RequestDelegate _next; + private static readonly log4net.ILog log = + log4net.LogManager.GetLogger(typeof(ExceptionHandlerMidd)); + + public ExceptionHandlerMidd(RequestDelegate next) + { + _next = next; + } + + public async Task Invoke(HttpContext context) + { + try + { + await _next(context); + } + catch (Exception ex) + { + await HandleExceptionAsync(context, ex); + } + } + + private async Task HandleExceptionAsync(HttpContext context, Exception e) + { + if (e == null) return; + + log.Error(e.GetBaseException().ToString()); + + await WriteExceptionAsync(context, e).ConfigureAwait(false); + } + + private static async Task WriteExceptionAsync(HttpContext context, Exception e) + { + if (e is UnauthorizedAccessException) + context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; + else if (e is Exception) + context.Response.StatusCode = (int)HttpStatusCode.BadRequest; + + context.Response.ContentType = "application/json"; + + await context.Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE500, e.Message)).MessageModel)).ConfigureAwait(false); + } + } +} diff --git a/New_College.Extensions/Middlewares/IPLogMildd.cs b/New_College.Extensions/Middlewares/IPLogMildd.cs new file mode 100644 index 0000000..92c65cc --- /dev/null +++ b/New_College.Extensions/Middlewares/IPLogMildd.cs @@ -0,0 +1,127 @@ +using New_College.Common; +using New_College.Common.LogHelper; +using Microsoft.AspNetCore.Http; +using Newtonsoft.Json; +using System; +using System.Threading.Tasks; + +namespace New_College.Middlewares +{ + /// + /// 中间件 + /// 记录IP请求数据 + /// + public class IPLogMildd + { + /// + /// + /// + private readonly RequestDelegate _next; + /// + /// + /// + /// + public IPLogMildd(RequestDelegate next) + { + _next = next; + } + + public async Task InvokeAsync(HttpContext context) + { + if (Appsettings.app("Middleware", "IPLog", "Enabled").ObjToBool()) + { + // 过滤,只有接口 + if (context.Request.Path.Value.Contains("api")) + { + context.Request.EnableBuffering(); + + try + { + // 存储请求数据 + var request = context.Request; + var requestInfo = JsonConvert.SerializeObject(new RequestInfo() + { + Ip = GetClientIP(context), + Url = request.Path.ObjToString().TrimEnd('/').ToLower(), + Datetime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Date = DateTime.Now.ToString("yyyy-MM-dd"), + Week = GetWeek(), + }); + + if (!string.IsNullOrEmpty(requestInfo)) + { + // 自定义log输出 + Parallel.For(0, 1, e => + { + LogLock.OutSql2Log("RequestIpInfoLog", new string[] { requestInfo + "," }, false); + }); + + // 这种方案也行,用的是Serilog + //SerilogServer.WriteLog("RequestIpInfoLog", new string[] { requestInfo + "," }, false); + + request.Body.Position = 0; + } + + await _next(context); + } + catch (Exception) + { + } + } + else + { + await _next(context); + } + } + else + { + await _next(context); + } + } + + private string GetWeek() + { + string week = string.Empty; + switch (DateTime.Now.DayOfWeek) + { + case DayOfWeek.Monday: + week = "周一"; + break; + case DayOfWeek.Tuesday: + week = "周二"; + break; + case DayOfWeek.Wednesday: + week = "周三"; + break; + case DayOfWeek.Thursday: + week = "周四"; + break; + case DayOfWeek.Friday: + week = "周五"; + break; + case DayOfWeek.Saturday: + week = "周六"; + break; + case DayOfWeek.Sunday: + week = "周日"; + break; + default: + week = "N/A"; + break; + } + return week; + } + + public static string GetClientIP(HttpContext context) + { + var ip = context.Request.Headers["X-Forwarded-For"].ObjToString(); + if (string.IsNullOrEmpty(ip)) + { + ip = context.Connection.RemoteIpAddress.ObjToString(); + } + return ip; + } + + } +} + diff --git a/New_College.Extensions/Middlewares/IpLimitMildd.cs b/New_College.Extensions/Middlewares/IpLimitMildd.cs new file mode 100644 index 0000000..b1e60b4 --- /dev/null +++ b/New_College.Extensions/Middlewares/IpLimitMildd.cs @@ -0,0 +1,33 @@ +using AspNetCoreRateLimit; +using New_College.Common; +using log4net; +using Microsoft.AspNetCore.Builder; +using System; + +namespace New_College.Extensions +{ + /// + /// ip 限流 + /// + public static class IpLimitMildd + { + private static readonly ILog log = LogManager.GetLogger(typeof(IpLimitMildd)); + public static void UseIpLimitMildd(this IApplicationBuilder app) + { + if (app == null) throw new ArgumentNullException(nameof(app)); + + try + { + if (Appsettings.app("Middleware", "IpRateLimit", "Enabled").ObjToBool()) + { + app.UseIpRateLimiting(); + } + } + catch (Exception e) + { + log.Error($"Error occured limiting ip rate.\n{e.Message}"); + throw; + } + } + } +} diff --git a/New_College.Extensions/Middlewares/MiddlewareHelpers.cs b/New_College.Extensions/Middlewares/MiddlewareHelpers.cs new file mode 100644 index 0000000..24bfb5b --- /dev/null +++ b/New_College.Extensions/Middlewares/MiddlewareHelpers.cs @@ -0,0 +1,68 @@ +using New_College.AuthHelper; +using Microsoft.AspNetCore.Builder; + +namespace New_College.Middlewares +{ + public static class MiddlewareHelpers + { + /// + /// 自定义授权中间件 + /// + /// + /// + public static IApplicationBuilder UseJwtTokenAuth(this IApplicationBuilder app) + { + return app.UseMiddleware(); + } + + /// + /// 请求响应中间件 + /// + /// + /// + public static IApplicationBuilder UseReuestResponseLog(this IApplicationBuilder app) + { + return app.UseMiddleware(); + } + + /// + /// SignalR中间件 + /// + /// + /// + public static IApplicationBuilder UseSignalRSendMildd(this IApplicationBuilder app) + { + return app.UseMiddleware(); + } + + /// + /// 异常处理中间件 + /// + /// + /// + public static IApplicationBuilder UseExceptionHandlerMidd(this IApplicationBuilder app) + { + return app.UseMiddleware(); + } + + /// + /// IP请求中间件 + /// + /// + /// + public static IApplicationBuilder UseIPLogMildd(this IApplicationBuilder app) + { + return app.UseMiddleware(); + } + + /// + /// 用户访问中间件 + /// + /// + /// + public static IApplicationBuilder UseRecordAccessLogsMildd(this IApplicationBuilder app) + { + return app.UseMiddleware(); + } + } +} diff --git a/New_College.Extensions/Middlewares/QuartzJobMildd.cs b/New_College.Extensions/Middlewares/QuartzJobMildd.cs new file mode 100644 index 0000000..6889a0b --- /dev/null +++ b/New_College.Extensions/Middlewares/QuartzJobMildd.cs @@ -0,0 +1,51 @@ +using New_College.Common; +using New_College.IServices; +using New_College.Tasks; +using log4net; +using Microsoft.AspNetCore.Builder; +using System; + +namespace New_College.Extensions +{ + /// + /// Quartz 启动服务 + /// + public static class QuartzJobMildd + { + private static readonly ILog log = LogManager.GetLogger(typeof(QuartzJobMildd)); + public static void UseQuartzJobMildd(this IApplicationBuilder app, ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter) + { + if (app == null) throw new ArgumentNullException(nameof(app)); + + try + { + if (Appsettings.app("Middleware", "QuartzNetJob", "Enabled").ObjToBool()) + { + + var allQzServices = tasksQzServices.Query().Result; + foreach (var item in allQzServices) + { + if (item.IsStart) + { + var ResuleModel = schedulerCenter.AddScheduleJobAsync(item).Result; + if (ResuleModel.success) + { + Console.WriteLine($"QuartzNetJob{item.Name}启动成功!"); + } + else + { + Console.WriteLine($"QuartzNetJob{item.Name}启动失败!错误信息:{ResuleModel.msg}"); + } + } + } + + } + } + catch (Exception e) + { + log.Error($"An error was reported when starting the job service.\n{e.Message}"); + throw; + } + } + } +} diff --git a/New_College.Extensions/Middlewares/RecordAccessLogsMildd.cs b/New_College.Extensions/Middlewares/RecordAccessLogsMildd.cs new file mode 100644 index 0000000..2b3e724 --- /dev/null +++ b/New_College.Extensions/Middlewares/RecordAccessLogsMildd.cs @@ -0,0 +1,144 @@ +using New_College.Common; +using New_College.Common.HttpContextUser; +using New_College.Common.LogHelper; +using Microsoft.AspNetCore.Http; +using Newtonsoft.Json; +using System; +using System.Diagnostics; +using System.IO; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace New_College.Middlewares +{ + /// + /// 中间件 + /// 记录用户方访问数据 + /// + public class RecordAccessLogsMildd + { + /// + /// + /// + private readonly RequestDelegate _next; + private readonly IUser _user; + + /// + /// + /// + /// + public RecordAccessLogsMildd(RequestDelegate next, IUser user) + { + _next = next; + _user = user; + } + + public async Task InvokeAsync(HttpContext context) + { + if (Appsettings.app("Middleware", "RecordAccessLogs", "Enabled").ObjToBool()) + { + // 过滤,只有接口 + if (context.Request.Path.Value.Contains("api")) + { + + //记录Job时间 + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + + context.Request.EnableBuffering(); + Stream originalBody = context.Response.Body; + + try + { + + using (var ms = new MemoryStream()) + { + context.Response.Body = ms; + + + await _next(context); + + + ms.Position = 0; + await ms.CopyToAsync(originalBody); + + + stopwatch.Stop(); + var opTime = stopwatch.Elapsed.TotalMilliseconds.ToString("00") + "ms"; + // 存储请求数据 + await RequestDataLog(context, opTime); + } + } + catch (Exception) + { + // 记录异常 + //ErrorLogData(context.Response, ex); + } + finally + { + context.Response.Body = originalBody; + } + } + else + { + await _next(context); + } + } + else + { + await _next(context); + } + } + + private async Task RequestDataLog(HttpContext context, string opTime) + { + var request = context.Request; + var sr = new StreamReader(request.Body); + + var requestData = request.Method == "GET" || request.Method == "DELETE" ? HttpUtility.UrlDecode(request.QueryString.ObjToString(), Encoding.UTF8) : (await sr.ReadToEndAsync()).ObjToString(); + if (requestData.IsNotEmptyOrNull() && requestData.Length > 30) + { + requestData = requestData.Substring(0, 30); + } + + var requestInfo = JsonConvert.SerializeObject(new UserAccessModel() + { + User = _user.Name, + IP = IPLogMildd.GetClientIP(context), + API = request.Path.ObjToString().TrimEnd('/').ToLower(), + BeginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + OPTime = opTime, + RequestMethod = request.Method, + RequestData = requestData, + Agent = request.Headers["User-Agent"].ObjToString() + }); + + if (!string.IsNullOrEmpty(requestInfo)) + { + // 自定义log输出 + Parallel.For(0, 1, e => + { + LogLock.OutSql2Log("RecordAccessLogs", new string[] { requestInfo + "," }, false); + }); + + request.Body.Position = 0; + } + } + } + + public class UserAccessModel + { + public string User { get; set; } + public string IP { get; set; } + public string API { get; set; } + public string BeginTime { get; set; } + public string OPTime { get; set; } + public string RequestMethod { get; set; } + public string RequestData { get; set; } + public string Agent { get; set; } + + } + +} + diff --git a/New_College.Extensions/Middlewares/RequRespLogMildd.cs b/New_College.Extensions/Middlewares/RequRespLogMildd.cs new file mode 100644 index 0000000..43bcdaa --- /dev/null +++ b/New_College.Extensions/Middlewares/RequRespLogMildd.cs @@ -0,0 +1,120 @@ +using New_College.Common; +using New_College.Common.LogHelper; +using Microsoft.AspNetCore.Http; +using System; +using System.IO; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace New_College.Middlewares +{ + /// + /// 中间件 + /// 记录请求和响应数据 + /// + public class RequRespLogMildd + { + /// + /// + /// + private readonly RequestDelegate _next; + /// + /// + /// + /// + public RequRespLogMildd(RequestDelegate next) + { + _next = next; + } + + + + public async Task InvokeAsync(HttpContext context) + { + if (Appsettings.app("Middleware", "RequestResponseLog", "Enabled").ObjToBool()) + { + // 过滤,只有接口 + if (context.Request.Path.Value.Contains("api")) + { + context.Request.EnableBuffering(); + Stream originalBody = context.Response.Body; + + try + { + // 存储请求数据 + await RequestDataLog(context); + + using (var ms = new MemoryStream()) + { + context.Response.Body = ms; + + await _next(context); + + // 存储响应数据 + ResponseDataLog(context.Response, ms); + + ms.Position = 0; + await ms.CopyToAsync(originalBody); + } + } + catch (Exception) + { + // 记录异常 + //ErrorLogData(context.Response, ex); + } + finally + { + context.Response.Body = originalBody; + } + } + else + { + await _next(context); + } + } + else + { + await _next(context); + } + } + + private async Task RequestDataLog(HttpContext context) + { + var request = context.Request; + var sr = new StreamReader(request.Body); + + var content = $" QueryData:{request.Path + request.QueryString}\r\n BodyData:{await sr.ReadToEndAsync()}"; + + if (!string.IsNullOrEmpty(content)) + { + Parallel.For(0, 1, e => + { + LogLock.OutSql2Log("RequestResponseLog", new string[] { "Request Data:", content }); + + }); + + request.Body.Position = 0; + } + } + + private void ResponseDataLog(HttpResponse response, MemoryStream ms) + { + ms.Position = 0; + var ResponseBody = new StreamReader(ms).ReadToEnd(); + + // 去除 Html + var reg = "<[^>]+>"; + var isHtml = Regex.IsMatch(ResponseBody, reg); + + if (!string.IsNullOrEmpty(ResponseBody)) + { + Parallel.For(0, 1, e => + { + LogLock.OutSql2Log("RequestResponseLog", new string[] { "Response Data:", ResponseBody }); + + }); + } + } + } +} + diff --git a/New_College.Extensions/Middlewares/SeedDataMildd.cs b/New_College.Extensions/Middlewares/SeedDataMildd.cs new file mode 100644 index 0000000..f592bf0 --- /dev/null +++ b/New_College.Extensions/Middlewares/SeedDataMildd.cs @@ -0,0 +1,33 @@ +using New_College.Common; +using New_College.Model.Seed; +using log4net; +using Microsoft.AspNetCore.Builder; +using System; + +namespace New_College.Extensions +{ + /// + /// 生成种子数据中间件服务 + /// + public static class SeedDataMildd + { + private static readonly ILog log = LogManager.GetLogger(typeof(SeedDataMildd)); + public static void UseSeedDataMildd(this IApplicationBuilder app, MyContext myContext, string webRootPath) + { + if (app == null) throw new ArgumentNullException(nameof(app)); + + try + { + if (Appsettings.app("AppSettings", "SeedDBEnabled").ObjToBool() || Appsettings.app("AppSettings", "SeedDBDataEnabled").ObjToBool()) + { + // DBSeed.SeedAsync(myContext, webRootPath).Wait(); + } + } + catch (Exception e) + { + log.Error($"Error occured seeding the Database.\n{e.Message}"); + throw; + } + } + } +} diff --git a/New_College.Extensions/Middlewares/SignalRSendMildd.cs b/New_College.Extensions/Middlewares/SignalRSendMildd.cs new file mode 100644 index 0000000..5388a3d --- /dev/null +++ b/New_College.Extensions/Middlewares/SignalRSendMildd.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Http; +using System.Threading.Tasks; +using New_College.Common.LogHelper; +using New_College.Hubs; +using Microsoft.AspNetCore.SignalR; +using New_College.Common; + +namespace New_College.Middlewares +{ + /// + /// 中间件 + /// SignalR发送数据 + /// + public class SignalRSendMildd + { + /// + /// + /// + private readonly RequestDelegate _next; + private readonly IHubContext _hubContext; + + /// + /// + /// + /// + /// + public SignalRSendMildd(RequestDelegate next, IHubContext hubContext) + { + _next = next; + _hubContext = hubContext; + } + + + + public async Task InvokeAsync(HttpContext context) + { + if (Appsettings.app("Middleware", "SignalR", "Enabled").ObjToBool()) + { + await _hubContext.Clients.All.SendAsync("ReceiveUpdate", LogLock.GetLogData()); + } + await _next(context); + } + + } +} + diff --git a/New_College.Extensions/Middlewares/SwaggerMildd.cs b/New_College.Extensions/Middlewares/SwaggerMildd.cs new file mode 100644 index 0000000..15ff81f --- /dev/null +++ b/New_College.Extensions/Middlewares/SwaggerMildd.cs @@ -0,0 +1,48 @@ +using New_College.Common; +using log4net; +using Microsoft.AspNetCore.Builder; +using System; +using System.IO; +using System.Linq; +using static New_College.Extensions.CustomApiVersion; + +namespace New_College.Extensions +{ + /// + /// Swagger中间件 + /// + public static class SwaggerMildd + { + private static readonly ILog log = LogManager.GetLogger(typeof(SwaggerMildd)); + public static void UseSwaggerMildd(this IApplicationBuilder app, Func streamHtml) + { + if (app == null) throw new ArgumentNullException(nameof(app)); + + app.UseSwagger(); + app.UseSwaggerUI(c => + { + //根据版本名称倒序 遍历展示 + var ApiName = Appsettings.app(new string[] { "Startup", "ApiName" }); + typeof(ApiVersions).GetEnumNames().OrderByDescending(e => e).ToList().ForEach(version => + { + c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"{ApiName} {version}"); + }); + + c.SwaggerEndpoint($"https://petstore.swagger.io/v2/swagger.json", $"{ApiName} pet"); + + // 将swagger首页,设置成我们自定义的页面,记得这个字符串的写法:{项目名.index.html} + if (streamHtml.Invoke() == null) + { + var msg = "index.html的属性,必须设置为嵌入的资源"; + log.Error(msg); + throw new Exception(msg); + } + c.IndexStream = streamHtml; + + + // 路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件,注意localhost:8001/swagger是访问不到的,去launchSettings.json把launchUrl去掉,如果你想换一个路径,直接写名字即可,比如直接写c.RoutePrefix = "doc"; + c.RoutePrefix = ""; + }); + } + } +} diff --git a/New_College.Extensions/New_College.Extensions.csproj b/New_College.Extensions/New_College.Extensions.csproj new file mode 100644 index 0000000..aac1783 --- /dev/null +++ b/New_College.Extensions/New_College.Extensions.csproj @@ -0,0 +1,29 @@ + + + + netcoreapp3.1 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/New_College.Extensions/ServiceExtensions/AppConfigSetup.cs b/New_College.Extensions/ServiceExtensions/AppConfigSetup.cs new file mode 100644 index 0000000..0ce5549 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/AppConfigSetup.cs @@ -0,0 +1,129 @@ +using New_College.Common; +using New_College.Common.Helper; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Text; + +namespace New_College.Extensions +{ + /// + /// 项目 启动服务 + /// + public static class AppConfigSetup + { + public static void AddAppConfigSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + if (Appsettings.app(new string[] { "Startup", "AppConfigAlert", "Enabled" }).ObjToBool()) + { + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + Console.OutputEncoding = Encoding.GetEncoding("GB2312"); + + Console.WriteLine("************ New_College Config Set *****************"); + // 授权策略方案 + if (Permissions.IsUseIds4) + { + ConsoleHelper.WriteSuccessLine($"Current authorization scheme: " + (Permissions.IsUseIds4 ? "Ids4" : "JWT")); + } + else + { + Console.WriteLine($"Current authorization scheme: " + (Permissions.IsUseIds4 ? "Ids4" : "JWT")); + } + + // Redis缓存AOP + if (!Appsettings.app(new string[] { "AppSettings", "RedisCachingAOP", "Enabled" }).ObjToBool()) + { + Console.WriteLine($"Redis Caching AOP: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"Redis Caching AOP: True"); + } + + // 内存缓存AOP + if (!Appsettings.app(new string[] { "AppSettings", "MemoryCachingAOP", "Enabled" }).ObjToBool()) + { + Console.WriteLine($"Memory Caching AOP: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"Memory Caching AOP: True"); + } + + // 服务日志AOP + if (!Appsettings.app(new string[] { "AppSettings", "LogAOP", "Enabled" }).ObjToBool()) + { + Console.WriteLine($"Service Log AOP: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"Service Log AOP: True"); + } + + // 事务AOP + if (!Appsettings.app(new string[] { "AppSettings", "TranAOP", "Enabled" }).ObjToBool()) + { + Console.WriteLine($"Transaction AOP: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"Transaction AOP: True"); + } + + // 数据库Sql执行AOP + if (!Appsettings.app(new string[] { "AppSettings", "SqlAOP", "Enabled" }).ObjToBool()) + { + Console.WriteLine($"DB Sql AOP: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"DB Sql AOP: True"); + } + + // SingnalR发送数据 + if (!Appsettings.app(new string[] { "Middleware", "SignalR", "Enabled" }).ObjToBool()) + { + Console.WriteLine($"SignalR send data: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"SignalR send data: True"); + } + + // IP限流 + if (!Appsettings.app("Middleware", "IpRateLimit", "Enabled").ObjToBool()) + { + Console.WriteLine($"IpRateLimiting: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"IpRateLimiting: True"); + } + + // 多库 + if (!Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool()) + { + Console.WriteLine($"Is multi-DataBase: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"Is multi-DataBase: True"); + } + + // 读写分离 + if (!Appsettings.app(new string[] { "CQRSEnabled" }).ObjToBool()) + { + Console.WriteLine($"Is CQRS: False"); + } + else + { + ConsoleHelper.WriteSuccessLine($"Is CQRS: True"); + } + + Console.WriteLine(); + } + + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/Authentication_Ids4Setup.cs b/New_College.Extensions/ServiceExtensions/Authentication_Ids4Setup.cs new file mode 100644 index 0000000..a8e3a52 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/Authentication_Ids4Setup.cs @@ -0,0 +1,40 @@ +using New_College.AuthHelper; +using New_College.Common; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace New_College.Extensions +{ + /// + /// Ids4权限 认证服务 + /// + public static class Authentication_Ids4Setup + { + public static void AddAuthentication_Ids4Setup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + + // 添加Identityserver4认证 + services.AddAuthentication(o => + { + o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; + o.DefaultChallengeScheme = nameof(ApiResponseHandler); + o.DefaultForbidScheme = nameof(ApiResponseHandler); + }) + .AddIdentityServerAuthentication(options => + { + options.Authority = Appsettings.app(new string[] { "Startup", "IdentityServer4", "AuthorizationUrl" }); + options.RequireHttpsMetadata = false; + options.ApiName = Appsettings.app(new string[] { "Startup", "IdentityServer4", "ApiName" }); + options.SupportedTokens = IdentityServer4.AccessTokenValidation.SupportedTokens.Jwt; + options.ApiSecret = "api_secret"; + + }) + .AddScheme(nameof(ApiResponseHandler), o => { }); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/Authentication_JWTSetup.cs b/New_College.Extensions/ServiceExtensions/Authentication_JWTSetup.cs new file mode 100644 index 0000000..b3d5659 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/Authentication_JWTSetup.cs @@ -0,0 +1,94 @@ +using New_College.AuthHelper; +using New_College.Common; +using New_College.Common.AppConfig; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.IdentityModel.Tokens; +using System; +using System.IdentityModel.Tokens.Jwt; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Extensions +{ + /// + /// JWT权限 认证服务 + /// + public static class Authentication_JWTSetup + { + public static void AddAuthentication_JWTSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + + var symmetricKeyAsBase64 = AppSecretConfig.Audience_Secret_String; + var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64); + var signingKey = new SymmetricSecurityKey(keyByteArray); + var Issuer = Appsettings.app(new string[] { "Audience", "Issuer" }); + var Audience = Appsettings.app(new string[] { "Audience", "Audience" }); + + var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); + + // 令牌验证参数 + var tokenValidationParameters = new TokenValidationParameters + { + ValidateIssuerSigningKey = true, + IssuerSigningKey = signingKey, + ValidateIssuer = true, + ValidIssuer = Issuer,//发行人 + ValidateAudience = true, + ValidAudience = Audience,//订阅人 + ValidateLifetime = true, + ClockSkew = TimeSpan.FromSeconds(30), + RequireExpirationTime = true, + }; + + // 开启Bearer认证 + services.AddAuthentication(o=> { + o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; + o.DefaultChallengeScheme = nameof(ApiResponseHandler); + o.DefaultForbidScheme = nameof(ApiResponseHandler); + }) + // 添加JwtBearer服务 + .AddJwtBearer(o => + { + o.TokenValidationParameters = tokenValidationParameters; + o.Events = new JwtBearerEvents + { + OnChallenge = context => + { + context.Response.Headers.Add("Token-Error", context.ErrorDescription); + return Task.CompletedTask; + }, + OnAuthenticationFailed = context => + { + var token= context.Request.Headers["Authorization"].ObjToString().Replace("Bearer ", ""); + var jwtToken = (new JwtSecurityTokenHandler()).ReadJwtToken(token); + + if (jwtToken.Issuer != Issuer) + { + context.Response.Headers.Add("Token-Error-Iss", "issuer is wrong!"); + } + + if (jwtToken.Audiences.FirstOrDefault() != Audience) + { + context.Response.Headers.Add("Token-Error-Aud", "Audience is wrong!"); + } + + + // 如果过期,则把<是否过期>添加到,返回头信息中 + if (context.Exception.GetType() == typeof(SecurityTokenExpiredException)) + { + context.Response.Headers.Add("Token-Expired", "true"); + } + return Task.CompletedTask; + } + }; + }) + .AddScheme(nameof(ApiResponseHandler), o => { }); + + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/AuthorizationSetup.cs b/New_College.Extensions/ServiceExtensions/AuthorizationSetup.cs new file mode 100644 index 0000000..6ee0b63 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/AuthorizationSetup.cs @@ -0,0 +1,96 @@ +using New_College.AuthHelper; +using New_College.Common; +using New_College.Common.AppConfig; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.IdentityModel.Tokens; +using System; +using System.Collections.Generic; +using System.Security.Claims; +using System.Text; + +namespace New_College.Extensions +{ + /// + /// 系统 授权服务 配置 + /// + public static class AuthorizationSetup + { + public static void AddAuthorizationSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + // 以下四种常见的授权方式。 + + // 1、这个很简单,其他什么都不用做, 只需要在API层的controller上边,增加特性即可 + // [Authorize(Roles = "Admin,System")] + + + // 2、这个和上边的异曲同工,好处就是不用在controller中,写多个 roles 。 + // 然后这么写 [Authorize(Policy = "Admin")] + services.AddAuthorization(options => + { + options.AddPolicy("Client", policy => policy.RequireRole("Client").Build()); + options.AddPolicy("Admin", policy => policy.RequireRole("Admin").Build()); + options.AddPolicy("SystemOrAdmin", policy => policy.RequireRole("Admin", "System")); + options.AddPolicy("A_S_O", policy => policy.RequireRole("Admin", "System", "Others")); + }); + + + + + #region 参数 + //读取配置文件 + var symmetricKeyAsBase64 = AppSecretConfig.Audience_Secret_String; + var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64); + var signingKey = new SymmetricSecurityKey(keyByteArray); + var Issuer = Appsettings.app(new string[] { "Audience", "Issuer" }); + var Audience = Appsettings.app(new string[] { "Audience", "Audience" }); + + var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); + + // 如果要数据库动态绑定,这里先留个空,后边处理器里动态赋值 + var permission = new List(); + + // 角色与接口的权限要求参数 + var permissionRequirement = new PermissionRequirement( + "/api/denied",// 拒绝授权的跳转地址(目前无用) + permission, + ClaimTypes.Role,//基于角色的授权 + Issuer,//发行人 + Audience,//听众 + signingCredentials,//签名凭据 + expiration: TimeSpan.FromSeconds(60 * 60)//接口的过期时间 + ); + #endregion + // 3、自定义复杂的策略授权 + services.AddAuthorization(options => + { + options.AddPolicy(Permissions.Name, + policy => policy.Requirements.Add(permissionRequirement)); + }); + + + // 4、基于Scope策略授权 + services.AddAuthorization(options => + { + options.AddPolicy("Scope_BlogModule_Policy", builder => + { + //客户端Scope中包含new_college.api.BlogModule才能访问 + builder.RequireScope("new_college.api.BlogModule"); + }); + + // 其他 Scope 策略 + // ... + + }); + + // 这里冗余写了一次,因为很多人看不到 + services.AddSingleton(); + // 注入权限处理器 + services.AddScoped(); + services.AddSingleton(permissionRequirement); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/AutoMapperSetup.cs b/New_College.Extensions/ServiceExtensions/AutoMapperSetup.cs new file mode 100644 index 0000000..325f108 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/AutoMapperSetup.cs @@ -0,0 +1,21 @@ +using AutoMapper; +using New_College.AutoMapper; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace New_College.Extensions +{ + /// + /// Automapper 启动服务 + /// + public static class AutoMapperSetup + { + public static void AddAutoMapperSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + services.AddAutoMapper(typeof(AutoMapperConfig)); + AutoMapperConfig.RegisterMappings(); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/AutofacModuleRegister.cs b/New_College.Extensions/ServiceExtensions/AutofacModuleRegister.cs new file mode 100644 index 0000000..894fc4b --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/AutofacModuleRegister.cs @@ -0,0 +1,116 @@ +using Autofac; +using Autofac.Extras.DynamicProxy; +using New_College.AOP; +using New_College.Common; +using New_College.IRepository.Base; +using New_College.Model; +using New_College.Repository.Base; +using log4net; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace New_College.Extensions +{ + public class AutofacModuleRegister : Autofac.Module + { + private static readonly ILog log = LogManager.GetLogger(typeof(AutofacModuleRegister)); + protected override void Load(ContainerBuilder builder) + { + var basePath = AppContext.BaseDirectory; + //builder.RegisterType().As(); + + + #region 带有接口层的服务注入 + + var servicesDllFile = Path.Combine(basePath, "New_College.Services.dll"); + var repositoryDllFile = Path.Combine(basePath, "New_College.Repository.dll"); + //var pay = Path.Combine(basePath, "Essensoft.AspNetCore.Payment.WeChatPay.dll"); + //var pay2 = Path.Combine(basePath, "Microsoft.Extensions.Options.dll"); + + if (!(File.Exists(servicesDllFile) && File.Exists(repositoryDllFile))) + { + var msg = "Repository.dll和service.dll 丢失,因为项目解耦了,所以需要先F6编译,再F5运行,请检查 bin 文件夹,并拷贝。"; + log.Error(msg); + throw new Exception(msg); + } + + + + // AOP 开关,如果想要打开指定的功能,只需要在 appsettigns.json 对应对应 true 就行。 + var cacheType = new List(); + if (Appsettings.app(new string[] { "AppSettings", "RedisCachingAOP", "Enabled" }).ObjToBool()) + { + builder.RegisterType(); + cacheType.Add(typeof(BlogRedisCacheAOP)); + } + if (Appsettings.app(new string[] { "AppSettings", "MemoryCachingAOP", "Enabled" }).ObjToBool()) + { + builder.RegisterType(); + cacheType.Add(typeof(BlogCacheAOP)); + } + if (Appsettings.app(new string[] { "AppSettings", "TranAOP", "Enabled" }).ObjToBool()) + { + builder.RegisterType(); + cacheType.Add(typeof(BlogTranAOP)); + } + if (Appsettings.app(new string[] { "AppSettings", "LogAOP", "Enabled" }).ObjToBool()) + { + builder.RegisterType(); + cacheType.Add(typeof(BlogLogAOP)); + } + + builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IBaseRepository<>)).InstancePerDependency();//注册仓储 + + // 获取 Service.dll 程序集服务,并注册 + var assemblysServices = Assembly.LoadFrom(servicesDllFile); + builder.RegisterAssemblyTypes(assemblysServices) + .AsImplementedInterfaces() + .InstancePerDependency() + .EnableInterfaceInterceptors()//引用Autofac.Extras.DynamicProxy; + .InterceptedBy(cacheType.ToArray());//允许将拦截器服务的列表分配给注册。 + + // 获取 Repository.dll 程序集服务,并注册 + var assemblysRepository = Assembly.LoadFrom(repositoryDllFile); + builder.RegisterAssemblyTypes(assemblysRepository) + .AsImplementedInterfaces() + .InstancePerDependency(); + + //var pay22 = Assembly.LoadFrom(pay); + //builder.RegisterAssemblyTypes(pay22) + // .AsImplementedInterfaces() + // .InstancePerDependency(); + + #endregion + + #region 没有接口层的服务层注入 + + //因为没有接口层,所以不能实现解耦,只能用 Load 方法。 + //注意如果使用没有接口的服务,并想对其使用 AOP 拦截,就必须设置为虚方法 + //var assemblysServicesNoInterfaces = Assembly.Load("New_College.Services"); + //builder.RegisterAssemblyTypes(assemblysServicesNoInterfaces); + + #endregion + + #region 没有接口的单独类,启用class代理拦截 + + //只能注入该类中的虚方法,且必须是public + //这里仅仅是一个单独类无接口测试,不用过多追问 + builder.RegisterAssemblyTypes(Assembly.GetAssembly(typeof(Love))) + .EnableClassInterceptors() + .InterceptedBy(cacheType.ToArray()); + #endregion + + #region 单独注册一个含有接口的类,启用interface代理拦截 + + //不用虚方法 + //builder.RegisterType().As() + // .AsImplementedInterfaces() + // .EnableInterfaceInterceptors() + // .InterceptedBy(typeof(BlogCacheAOP)); + #endregion + + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/CorsSetup.cs b/New_College.Extensions/ServiceExtensions/CorsSetup.cs new file mode 100644 index 0000000..c81438f --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/CorsSetup.cs @@ -0,0 +1,47 @@ +using New_College.Common; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace New_College.Extensions +{ + /// + /// Cors 启动服务 + /// + public static class CorsSetup + { + public static void AddCorsSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + services.AddCors(c => + { + if (!Appsettings.app(new string[] { "Startup", "Cors", "EnableAllIPs" }).ObjToBool()) + { + c.AddPolicy(Appsettings.app(new string[] { "Startup", "Cors", "PolicyName" }), + + policy => + { + + policy + .WithOrigins(Appsettings.app(new string[] { "Startup", "Cors", "IPs" }).Split(',')) + .AllowAnyHeader()//Ensures that the policy allows any header. + .AllowAnyMethod(); + }); + } + else + { + //允许任意跨域请求 + c.AddPolicy(Appsettings.app(new string[] { "Startup", "Cors", "PolicyName" }), + policy => + { + policy + .AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader(); + }); + } + + }); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/DbSetup.cs b/New_College.Extensions/ServiceExtensions/DbSetup.cs new file mode 100644 index 0000000..26d6c63 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/DbSetup.cs @@ -0,0 +1,20 @@ +using New_College.Model.Seed; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace New_College.Extensions +{ + /// + /// Db 启动服务 + /// + public static class DbSetup + { + public static void AddDbSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + services.AddScoped(); + services.AddScoped(); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/HttpContextSetup.cs b/New_College.Extensions/ServiceExtensions/HttpContextSetup.cs new file mode 100644 index 0000000..65ed387 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/HttpContextSetup.cs @@ -0,0 +1,21 @@ +using New_College.Common.HttpContextUser; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace New_College.Extensions +{ + /// + /// HttpContext 相关服务 + /// + public static class HttpContextSetup + { + public static void AddHttpContextSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + services.AddSingleton(); + services.AddScoped(); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/IpPolicyRateLimitSetup.cs b/New_College.Extensions/ServiceExtensions/IpPolicyRateLimitSetup.cs new file mode 100644 index 0000000..911f55f --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/IpPolicyRateLimitSetup.cs @@ -0,0 +1,36 @@ +using AspNetCoreRateLimit; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace New_College.Extensions +{ + /// + /// IPLimit限流 启动服务 + /// + public static class IpPolicyRateLimitSetup + { + public static void AddIpPolicyRateLimitSetup(this IServiceCollection services, IConfiguration Configuration) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + // needed to store rate limit counters and ip rules + services.AddMemoryCache(); + //load general configuration from appsettings.json + services.Configure(Configuration.GetSection("IpRateLimiting")); + // inject counter and rules stores + services.AddSingleton(); + services.AddSingleton(); + + // inject counter and rules distributed cache stores + //services.AddSingleton(); + //services.AddSingleton(); + + // the clientId/clientIp resolvers use it. + services.AddSingleton(); + // configuration (resolvers, counter key builders) + services.AddSingleton(); + } + } +} \ No newline at end of file diff --git a/New_College.Extensions/ServiceExtensions/JobSetup.cs b/New_College.Extensions/ServiceExtensions/JobSetup.cs new file mode 100644 index 0000000..8658990 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/JobSetup.cs @@ -0,0 +1,25 @@ +using New_College.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Quartz.Spi; +using System; + +namespace New_College.Extensions +{ + /// + /// 任务调度 启动服务 + /// + public static class JobSetup + { + public static void AddJobSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + //services.AddHostedService(); + //services.AddHostedService(); + + services.AddSingleton(); + services.AddTransient();//Job使用瞬时依赖注入 + services.AddSingleton(); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/MemoryCacheSetup.cs b/New_College.Extensions/ServiceExtensions/MemoryCacheSetup.cs new file mode 100644 index 0000000..abc0f3a --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/MemoryCacheSetup.cs @@ -0,0 +1,25 @@ +using New_College.Common.MemoryCache; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace New_College.Extensions +{ + /// + /// Memory缓存 启动服务 + /// + public static class MemoryCacheSetup + { + public static void AddMemoryCacheSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + services.AddScoped(); + services.AddSingleton(factory => + { + var cache = new MemoryCache(new MemoryCacheOptions()); + return cache; + }); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/MiniProfilerSetup.cs b/New_College.Extensions/ServiceExtensions/MiniProfilerSetup.cs new file mode 100644 index 0000000..ec13788 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/MiniProfilerSetup.cs @@ -0,0 +1,30 @@ +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace New_College.Extensions +{ + /// + /// MiniProfiler 启动服务 + /// + public static class MiniProfilerSetup + { + public static void AddMiniProfilerSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + // 3.x使用MiniProfiler,必须要注册MemoryCache服务 + services.AddMiniProfiler(options => + { + options.RouteBasePath = "/profiler"; + //(options.Storage as MemoryCacheStorage).CacheDuration = TimeSpan.FromMinutes(10); + options.PopupRenderPosition = StackExchange.Profiling.RenderPosition.Left; + options.PopupShowTimeWithChildren = true; + + // 可以增加权限 + //options.ResultsAuthorize = request => request.HttpContext.User.IsInRole("Admin"); + //options.UserIdProvider = request => request.HttpContext.User.Identity.Name; + } + ); + } + } +} diff --git a/New_College.Extensions/ServiceExtensions/SqlsugarSetup.cs b/New_College.Extensions/ServiceExtensions/SqlsugarSetup.cs new file mode 100644 index 0000000..736f1ba --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/SqlsugarSetup.cs @@ -0,0 +1,90 @@ +using New_College.Common; +using New_College.Common.DB; +using New_College.Common.LogHelper; +using Microsoft.Extensions.DependencyInjection; +using SqlSugar; +using StackExchange.Profiling; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.Extensions +{ + /// + /// SqlSugar 启动服务 + /// + public static class SqlsugarSetup + { + public static void AddSqlsugarSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + // 默认添加主数据库连接 + MainDb.CurrentDbConnId = Appsettings.app(new string[] { "MainDB" }); + + // 把多个连接对象注入服务,这里必须采用Scope,因为有事务操作 + services.AddScoped(o => + { + // 连接字符串 + var listConfig = new List(); + // 从库 + var listConfig_Slave = new List(); + BaseDBConfig.MutiConnectionString.Item2.ForEach(s => + { + listConfig_Slave.Add(new SlaveConnectionConfig() + { + HitRate = s.HitRate, + ConnectionString = s.Connection + }); + }); + + BaseDBConfig.MutiConnectionString.Item1.ForEach(m => + { + listConfig.Add(new ConnectionConfig() + { + ConfigId = m.ConnId.ObjToString().ToLower(), + ConnectionString = m.Connection, + DbType = (DbType)m.DbType, + IsAutoCloseConnection = true, + IsShardSameThread = false, + AopEvents = new AopEvents + { + OnLogExecuting = (sql, p) => + { + if (Appsettings.app(new string[] { "AppSettings", "SqlAOP", "Enabled" }).ObjToBool()) + { + Parallel.For(0, 1, e => + { + MiniProfiler.Current.CustomTiming("SQL:", GetParas(p) + "【SQL语句】:" + sql); + LogLock.OutSql2Log("SqlLog", new string[] { GetParas(p), "【SQL语句】:" + sql }); + + }); + } + } + }, + MoreSettings = new ConnMoreSettings() + { + IsAutoRemoveDataCache = true + }, + // 从库 + SlaveConnectionConfigs = listConfig_Slave, + //InitKeyType = InitKeyType.SystemTable + } + ); + }); + return new SqlSugarClient(listConfig); + }); + } + + private static string GetParas(SugarParameter[] pars) + { + string key = "【SQL参数】:"; + foreach (var param in pars) + { + key += $"{param.ParameterName}:{param.Value}\n"; + } + + return key; + } + } +} \ No newline at end of file diff --git a/New_College.Extensions/ServiceExtensions/SwaggerSetup.cs b/New_College.Extensions/ServiceExtensions/SwaggerSetup.cs new file mode 100644 index 0000000..a8a8139 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/SwaggerSetup.cs @@ -0,0 +1,133 @@ +using New_College.Common; +using log4net; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.Filters; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using static New_College.Extensions.CustomApiVersion; + +namespace New_College.Extensions +{ + /// + /// Swagger 启动服务 + /// + public static class SwaggerSetup + { + + private static readonly ILog log = + LogManager.GetLogger(typeof(SwaggerSetup)); + + public static void AddSwaggerSetup(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + var basePath = AppContext.BaseDirectory; + //var basePath2 = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath; + var ApiName = Appsettings.app(new string[] { "Startup", "ApiName" }); + + services.AddSwaggerGen(c => + { + //遍历出全部的版本,做文档信息展示 + typeof(ApiVersions).GetEnumNames().ToList().ForEach(version => + { + c.SwaggerDoc(version, new OpenApiInfo + { + Version = version, + Title = $"{ApiName} 接口文档——{RuntimeInformation.FrameworkDescription}", + Description = $"{ApiName} HTTP API " + version, + //Contact = new OpenApiContact { Name = ApiName, Email = "New_College@xxx.com", Url = new Uri("#") }, + //License = new OpenApiLicense { Name = ApiName + " 官方文档", Url = new Uri("#") } + }); + c.OrderActionsBy(o => o.RelativePath); + }); + + + try + { + //这个就是刚刚配置的xml文件名 + var xmlPath = Path.Combine(basePath, "New_College.xml"); + //默认的第二个参数是false,这个是controller的注释,记得修改 + c.IncludeXmlComments(xmlPath, true); + + //这个就是Model层的xml文件名 + var xmlModelPath = Path.Combine(basePath, "New_College.Model.xml"); + c.IncludeXmlComments(xmlModelPath); + } + catch (Exception ex) + { + log.Error("New_College.xml和New_College.Model.xml 丢失,请检查并拷贝。\n" + ex.Message); + } + + // 开启加权小锁 + c.OperationFilter(); + c.OperationFilter(); + + // 在header中添加token,传递到后台 + c.OperationFilter(); + + + // ids4和jwt切换 + if (Permissions.IsUseIds4) + { + //接入identityserver4 + c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme + { + Type = SecuritySchemeType.OAuth2, + Flows = new OpenApiOAuthFlows + { + Implicit = new OpenApiOAuthFlow + { + AuthorizationUrl = new Uri($"{Appsettings.app(new string[] { "Startup", "IdentityServer4", "AuthorizationUrl" })}/connect/authorize"), + Scopes = new Dictionary { + { + "new_college.api","ApiResource id" + } + } + } + } + }); + } + else + { + // Jwt Bearer 认证,必须是 oauth2 + c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme + { + Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)\"", + Name = "Authorization",//jwt默认的参数名称 + In = ParameterLocation.Header,//jwt默认存放Authorization信息的位置(请求头中) + Type = SecuritySchemeType.ApiKey + }); + } + + + + }); + } + } + + /// + /// 自定义版本 + /// + public class CustomApiVersion + { + /// + /// Api接口版本 自定义 + /// + public enum ApiVersions + { + /// + /// V1 版本 + /// + V1 = 1, + /// + /// V2 版本 + /// + V2 = 2, + } + } + +} diff --git a/New_College.Extensions/ServiceExtensions/WebApiClientSetup.cs b/New_College.Extensions/ServiceExtensions/WebApiClientSetup.cs new file mode 100644 index 0000000..9cedfd7 --- /dev/null +++ b/New_College.Extensions/ServiceExtensions/WebApiClientSetup.cs @@ -0,0 +1,33 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using WebApiClient.Extensions.DependencyInjection; +using New_College.Common.WebApiClients.HttpApis; + +namespace New_College.Extensions +{ + /// + /// WebApiClientSetup 启动服务 + /// + public static class WebApiClientSetup + { + /// + /// 注册WebApiClient接口 + /// + /// + public static void AddHttpApi(this IServiceCollection services) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + services.AddHttpApi().ConfigureHttpApiConfig(c => + { + c.HttpHost = new Uri("http://apk.neters.club/"); + c.FormatOptions.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff"; + }); + services.AddHttpApi().ConfigureHttpApiConfig(c => + { + c.HttpHost = new Uri("http://api.xiaomafeixiang.com/"); + c.FormatOptions.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff"; + }); + } + } +} diff --git a/New_College.FrameWork/DbHelper.ttinclude b/New_College.FrameWork/DbHelper.ttinclude new file mode 100644 index 0000000..ad450e9 --- /dev/null +++ b/New_College.FrameWork/DbHelper.ttinclude @@ -0,0 +1,322 @@ +<#+ + public class config + { + public static readonly string ConnectionString = File.Exists(@"C:\my-file\dbCountPswSolsticeALDDD.txt") ? File.ReadAllText(@"C:\my-file\dbCountPswSolsticeALDDD.txt").Trim(): "server=.;uid=sa;pwd=sa;database=WMBlogDB"; + public static readonly string DbDatabase = ""; + public static readonly string TableName = ""; + } +#> +<#+ + public class DbHelper + { + #region GetDbTables + + public static List GetDbTablesNew(string connectionString, string database,string tables = null) + { + if (!string.IsNullOrEmpty(tables)) + { + tables = string.Format(" and obj.name in ('{0}')", tables.Replace(",", "','")); + } + string sql = string.Format(@"SELECT + obj.name tablename + from {0}.sys.objects obj + inner join {0}.dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1 + INNER JOIN {0}.sys.schemas schem ON obj.schema_id=schem.schema_id + left join {0}.sys.extended_properties g ON (obj.object_id = g.major_id AND g.minor_id = 0 AND g.name= 'MS_Description') + where type='U' {1} + order by obj.name", database,tables); + DataTable dt = GetDataTable(connectionString, sql); + return dt.Rows.Cast().Select(row =>row.Field("tablename")).ToList(); + } + + public static List GetDbTables(string connectionString, string database, string tables = null) + { + + if (!string.IsNullOrEmpty(tables)) + { + tables = string.Format(" and obj.name in ('{0}')", tables.Replace(",", "','")); + } + #region SQL + string sql = string.Format(@"SELECT + obj.name tablename, + schem.name schemname, + idx.rows, + CAST + ( + CASE + WHEN (SELECT COUNT(1) FROM sys.indexes WHERE object_id= obj.OBJECT_ID AND is_primary_key=1) >=1 THEN 1 + ELSE 0 + END + AS BIT) HasPrimaryKey + from {0}.sys.objects obj + inner join {0}.dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1 + INNER JOIN {0}.sys.schemas schem ON obj.schema_id=schem.schema_id + where type='U' {1} + order by obj.name", database, tables); + #endregion + DataTable dt = GetDataTable(connectionString, sql); + return dt.Rows.Cast().Select(row => new DbTable + { + TableName = row.Field("tablename"), + SchemaName = row.Field("schemname"), + Rows = row.Field("rows"), + HasPrimaryKey = row.Field("HasPrimaryKey") + }).ToList(); + } + #endregion + + #region GetDbColumns + + public static List GetDbColumns(string connectionString, string database, string tableName, string schema = "dbo") + { + #region SQL + string sql = string.Format(@" + WITH indexCTE AS + ( + SELECT + ic.column_id, + ic.index_column_id, + ic.object_id + FROM {0}.sys.indexes idx + INNER JOIN {0}.sys.index_columns ic ON idx.index_id = ic.index_id AND idx.object_id = ic.object_id + WHERE idx.object_id =OBJECT_ID(@tableName) AND idx.is_primary_key=1 + ) + select + colm.column_id ColumnID, + CAST(CASE WHEN indexCTE.column_id IS NULL THEN 0 ELSE 1 END AS BIT) IsPrimaryKey, + colm.name ColumnName, + systype.name ColumnType, + colm.is_identity IsIdentity, + colm.is_nullable IsNullable, + cast(colm.max_length as int) ByteLength, + ( + case + when systype.name='nvarchar' and colm.max_length>0 then colm.max_length/2 + when systype.name='nchar' and colm.max_length>0 then colm.max_length/2 + when systype.name='ntext' and colm.max_length>0 then colm.max_length/2 + else colm.max_length + end + ) CharLength, + cast(colm.precision as int) Precision, + cast(colm.scale as int) Scale, + prop.value Remark + from {0}.sys.columns colm + inner join {0}.sys.types systype on colm.system_type_id=systype.system_type_id and colm.user_type_id=systype.user_type_id + left join {0}.sys.extended_properties prop on colm.object_id=prop.major_id and colm.column_id=prop.minor_id + LEFT JOIN indexCTE ON colm.column_id=indexCTE.column_id AND colm.object_id=indexCTE.object_id + where colm.object_id=OBJECT_ID(@tableName) + order by colm.column_id", database); + #endregion + SqlParameter param = new SqlParameter("@tableName", SqlDbType.NVarChar, 100) { Value = string.Format("{0}.{1}.{2}", database, schema, tableName) }; + DataTable dt = GetDataTable(connectionString, sql, param); + return dt.Rows.Cast().Select(row => new DbColumn() + { + ColumnID = row.Field("ColumnID"), + IsPrimaryKey = row.Field("IsPrimaryKey"), + ColumnName = row.Field("ColumnName"), + ColumnType = row.Field("ColumnType"), + IsIdentity = row.Field("IsIdentity"), + IsNullable = row.Field("IsNullable"), + ByteLength = row.Field("ByteLength"), + CharLength = row.Field("CharLength"), + Precision=row.Field("Precision"), + Scale = row.Field("Scale"), + Remark = row["Remark"].ToString() + }).ToList(); + } + + #endregion + + #region GetDataTable + + public static DataTable GetDataTable(string connectionString, string commandText, params SqlParameter[] parms) + { + using (SqlConnection connection = new SqlConnection(connectionString)) + { + SqlCommand command = connection.CreateCommand(); + command.CommandText = commandText; + command.Parameters.AddRange(parms); + SqlDataAdapter adapter = new SqlDataAdapter(command); + + DataTable dt = new DataTable(); + adapter.Fill(dt); + + return dt; + } + } + + #endregion + + #region GetPrimaryKey + public static string GetPrimaryKey(List dbColumns) + { + string primaryKey = string.Empty; + if (dbColumns!=null&&dbColumns.Count>0) + { + foreach (var item in dbColumns) + { + if (item.IsPrimaryKey==true) + { + primaryKey = item.ColumnName; + } + } + } + return primaryKey; + } + #endregion + } + + #region DbTable + public sealed class DbTable + { + public string TableName { get; set; } + public string SchemaName { get; set; } + public int Rows { get; set; } + + public bool HasPrimaryKey { get; set; } + } + #endregion + + #region DbColumn + + public sealed class DbColumn + { + + public int ColumnID { get; set; } + + + public bool IsPrimaryKey { get; set; } + + + public string ColumnName { get; set; } + + + public string ColumnType { get; set; } + + + public string CSharpType + { + get + { + return SqlServerDbTypeMap.MapCsharpType(ColumnType); + } + } + + /// + /// + /// + public Type CommonType + { + get + { + return SqlServerDbTypeMap.MapCommonType(ColumnType); + } + } + + public int ByteLength { get; set; } + + public int CharLength { get; set; } + + public int Precision{get;set;} + public int Scale { get; set; } + + public bool IsIdentity { get; set; } + + public bool IsNullable { get; set; } + + public string Remark { get; set; } + } + #endregion + + #region SqlServerDbTypeMap + + public class SqlServerDbTypeMap + { + public static string MapCsharpType(string dbtype) + { + if (string.IsNullOrEmpty(dbtype)) return dbtype; + dbtype = dbtype.ToLower(); + string csharpType = "object"; + switch (dbtype) + { + case "bigint": csharpType = "long"; break; + case "binary": csharpType = "byte[]"; break; + case "bit": csharpType = "bool"; break; + case "char": csharpType = "string"; break; + case "date": csharpType = "DateTime"; break; + case "datetime": csharpType = "DateTime"; break; + case "datetime2": csharpType = "DateTime"; break; + case "datetimeoffset": csharpType = "DateTimeOffset"; break; + case "decimal": csharpType = "decimal"; break; + case "float": csharpType = "double"; break; + case "image": csharpType = "byte[]"; break; + case "int": csharpType = "int"; break; + case "money": csharpType = "decimal"; break; + case "nchar": csharpType = "string"; break; + case "ntext": csharpType = "string"; break; + case "numeric": csharpType = "decimal"; break; + case "nvarchar": csharpType = "string"; break; + case "real": csharpType = "Single"; break; + case "smalldatetime": csharpType = "DateTime"; break; + case "smallint": csharpType = "short"; break; + case "smallmoney": csharpType = "decimal"; break; + case "sql_variant": csharpType = "object"; break; + case "sysname": csharpType = "object"; break; + case "text": csharpType = "string"; break; + case "time": csharpType = "TimeSpan"; break; + case "timestamp": csharpType = "byte[]"; break; + case "tinyint": csharpType = "byte"; break; + case "uniqueidentifier": csharpType = "Guid"; break; + case "varbinary": csharpType = "byte[]"; break; + case "varchar": csharpType = "string"; break; + case "xml": csharpType = "string"; break; + default: csharpType = "object"; break; + } + return csharpType; + } + + public static Type MapCommonType(string dbtype) + { + if (string.IsNullOrEmpty(dbtype)) return Type.Missing.GetType(); + dbtype = dbtype.ToLower(); + Type commonType = typeof(object); + switch (dbtype) + { + case "bigint": commonType = typeof(long); break; + case "binary": commonType = typeof(byte[]); break; + case "bit": commonType = typeof(bool); break; + case "char": commonType = typeof(string); break; + case "date": commonType = typeof(DateTime); break; + case "datetime": commonType = typeof(DateTime); break; + case "datetime2": commonType = typeof(DateTime); break; + case "datetimeoffset": commonType = typeof(DateTimeOffset); break; + case "decimal": commonType = typeof(decimal); break; + case "float": commonType = typeof(double); break; + case "image": commonType = typeof(byte[]); break; + case "int": commonType = typeof(int); break; + case "money": commonType = typeof(decimal); break; + case "nchar": commonType = typeof(string); break; + case "ntext": commonType = typeof(string); break; + case "numeric": commonType = typeof(decimal); break; + case "nvarchar": commonType = typeof(string); break; + case "real": commonType = typeof(Single); break; + case "smalldatetime": commonType = typeof(DateTime); break; + case "smallint": commonType = typeof(short); break; + case "smallmoney": commonType = typeof(decimal); break; + case "sql_variant": commonType = typeof(object); break; + case "sysname": commonType = typeof(object); break; + case "text": commonType = typeof(string); break; + case "time": commonType = typeof(TimeSpan); break; + case "timestamp": commonType = typeof(byte[]); break; + case "tinyint": commonType = typeof(byte); break; + case "uniqueidentifier": commonType = typeof(Guid); break; + case "varbinary": commonType = typeof(byte[]); break; + case "varchar": commonType = typeof(string); break; + case "xml": commonType = typeof(string); break; + default: commonType = typeof(object); break; + } + return commonType; + } + } + #endregion + #> \ No newline at end of file diff --git a/New_College.FrameWork/ModelAuto.ttinclude b/New_College.FrameWork/ModelAuto.ttinclude new file mode 100644 index 0000000..5933972 --- /dev/null +++ b/New_College.FrameWork/ModelAuto.ttinclude @@ -0,0 +1,115 @@ +<#@ assembly name="System.Core"#> +<#@ assembly name="EnvDTE"#> +<#@ import namespace="System.Collections.Generic"#> +<#@ import namespace="System.IO"#> +<#@ import namespace="System.Text"#> +<#@ import namespace="Microsoft.VisualStudio.TextTemplating"#> +<#+ +class Manager +{ + public struct Block { + public int Start, Length; + public String Name,OutputPath; + } + + public List blocks = new List(); + public Block currentBlock; + public Block footerBlock = new Block(); + public Block headerBlock = new Block(); + public ITextTemplatingEngineHost host; + public ManagementStrategy strategy; + public StringBuilder template; + public Manager(ITextTemplatingEngineHost host, StringBuilder template, bool commonHeader) { + this.host = host; + this.template = template; + strategy = ManagementStrategy.Create(host); + } + public void StartBlock(String name,String outputPath) { + currentBlock = new Block { Name = name, Start = template.Length ,OutputPath=outputPath}; + } + + public void StartFooter() { + footerBlock.Start = template.Length; + } + + public void EndFooter() { + footerBlock.Length = template.Length - footerBlock.Start; + } + + public void StartHeader() { + headerBlock.Start = template.Length; + } + + public void EndHeader() { + headerBlock.Length = template.Length - headerBlock.Start; + } + + public void EndBlock() { + currentBlock.Length = template.Length - currentBlock.Start; + blocks.Add(currentBlock); + } + public void Process(bool split) { + String header = template.ToString(headerBlock.Start, headerBlock.Length); + String footer = template.ToString(footerBlock.Start, footerBlock.Length); + blocks.Reverse(); + foreach(Block block in blocks) { + String fileName = Path.Combine(block.OutputPath, block.Name); + if (split) { + String content = header + template.ToString(block.Start, block.Length) + footer; + strategy.CreateFile(fileName, content); + template.Remove(block.Start, block.Length); + } else { + strategy.DeleteFile(fileName); + } + } + } +} +class ManagementStrategy +{ + internal static ManagementStrategy Create(ITextTemplatingEngineHost host) { + return (host is IServiceProvider) ? new VSManagementStrategy(host) : new ManagementStrategy(host); + } + + internal ManagementStrategy(ITextTemplatingEngineHost host) { } + + internal virtual void CreateFile(String fileName, String content) { + File.WriteAllText(fileName, content); + } + + internal virtual void DeleteFile(String fileName) { + if (File.Exists(fileName)) + File.Delete(fileName); + } +} + +class VSManagementStrategy : ManagementStrategy +{ + private EnvDTE.ProjectItem templateProjectItem; + + internal VSManagementStrategy(ITextTemplatingEngineHost host) : base(host) { + IServiceProvider hostServiceProvider = (IServiceProvider)host; + if (hostServiceProvider == null) + throw new ArgumentNullException("Could not obtain hostServiceProvider"); + + EnvDTE.DTE dte = (EnvDTE.DTE)hostServiceProvider.GetService(typeof(EnvDTE.DTE)); + if (dte == null) + throw new ArgumentNullException("Could not obtain DTE from host"); + + templateProjectItem = dte.Solution.FindProjectItem(host.TemplateFile); + } + internal override void CreateFile(String fileName, String content) { + base.CreateFile(fileName, content); + //((EventHandler)delegate { templateProjectItem.ProjectItems.AddFromFile(fileName); }).BeginInvoke(null, null, null, null); + } + internal override void DeleteFile(String fileName) { + ((EventHandler)delegate { FindAndDeleteFile(fileName); }).BeginInvoke(null, null, null, null); + } + private void FindAndDeleteFile(String fileName) { + foreach(EnvDTE.ProjectItem projectItem in templateProjectItem.ProjectItems) { + if (projectItem.get_FileNames(0) == fileName) { + projectItem.Delete(); + return; + } + } + } +}#> \ No newline at end of file diff --git a/New_College.FrameWork/New_College.FrameWork.Entity/New_College.FrameWork.tt b/New_College.FrameWork/New_College.FrameWork.Entity/New_College.FrameWork.tt new file mode 100644 index 0000000..9c8f21a --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.Entity/New_College.FrameWork.tt @@ -0,0 +1,60 @@ +<#@ template debug="false" hostspecific="true" language="C#" #> +<#@ output extension="/" #> +<#@ assembly name="System.Core.dll" #> +<#@ assembly name="System.Data.dll" #> +<#@ assembly name="System.Data.DataSetExtensions.dll" #> +<#@ assembly name="System.Xml.dll" #> +<#@ import namespace="System" #> +<#@ import namespace="System.Xml" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Data" #> +<#@ import namespace="System.Data.SqlClient" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="System.IO" #> +<#@ include file="$(ProjectDir)DbHelper.ttinclude" #> +<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #> +<# var manager = new Manager(Host, GenerationEnvironment, true); #> +<# + var OutputPath1 =Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(Host.TemplateFile+"..")+"..")+".."); + OutputPath1=Path.Combine(OutputPath1,"New_College.Model","Models_New"); + if (!Directory.Exists(OutputPath1)) + { + Directory.CreateDirectory(OutputPath1); + } +#> +<# foreach (var item in DbHelper.GetDbTablesNew(config.ConnectionString, config.DbDatabase,config.TableName)) + { + var tableName=item.ToString(); + manager.StartBlock(tableName+".cs",OutputPath1);//文件名 + #> +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +namespace New_College.Model.Models +{ + /// + ///<#=tableName#> + /// + [Table("<#=tableName#>")] + public class <#=tableName#> + { + <# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, tableName)){#> + + /// + /// <#= column.Remark == "" ? column.ColumnName : column.Remark.Replace("\r\n"," ") #> + /// + <# + if(column.IsPrimaryKey) + {#>[Key] + <#}#><# if(!column.IsNullable) {#>[Required] + <# }#>public <#= column.CSharpType#><# if(column.CommonType.IsValueType && column.IsNullable){#>?<#}#> <#=column.ColumnName#> { get; set; } + <# + } + #> + } +} +<# + manager.EndBlock(); + } + manager.Process(true); + #> \ No newline at end of file diff --git a/New_College.FrameWork/New_College.FrameWork.IRepository/New_College.FrameWork.IRepository.cs b/New_College.FrameWork/New_College.FrameWork.IRepository/New_College.FrameWork.IRepository.cs new file mode 100644 index 0000000..5283a86 --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.IRepository/New_College.FrameWork.IRepository.cs @@ -0,0 +1,18 @@ + + + + + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 +// 生成时间 2019-12-10 12:14:04 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- + + + + + + + + diff --git a/New_College.FrameWork/New_College.FrameWork.IRepository/New_College.FrameWork.IRepository.tt b/New_College.FrameWork/New_College.FrameWork.IRepository/New_College.FrameWork.IRepository.tt new file mode 100644 index 0000000..b7dfc1c --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.IRepository/New_College.FrameWork.IRepository.tt @@ -0,0 +1,123 @@ +<#@ template debug="false" hostspecific="true" language="C#" #> +<#@ output extension=".cs" #> +<#@ assembly name="System.Core.dll" #> +<#@ assembly name="System.Data.dll" #> +<#@ assembly name="System.Data.DataSetExtensions.dll" #> +<#@ assembly name="System.Xml.dll" #> +<#@ import namespace="System" #> +<#@ import namespace="System.Xml" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Data" #> +<#@ import namespace="System.Data.SqlClient" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="System.IO" #> +<#@ include file="$(ProjectDir)DbHelper.ttinclude" #> +<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #> +<# var manager = new Manager(Host, GenerationEnvironment, true); #> + + +<# + var OutputPath1 =Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(Host.TemplateFile+"..")+"..")+".."); + OutputPath1=Path.Combine(OutputPath1,"New_College.IRepository","IRepositories_New"); + if (!Directory.Exists(OutputPath1)) + { + Directory.CreateDirectory(OutputPath1); + } +#> + + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 +// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#> +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- +<# + var tableName=config.TableName; + #> +<# +if(tableName!=""){ + #> +using New_College.IRepository.Base; +using New_College.Model.Models; +namespace New_College.IRepository +{ + /// + /// I<#=tableName#>Repository + /// + public interface I<#=tableName#>Repository : IBaseRepository<<#=tableName#>> + { + + + } +} + +<# + } else{ + + #> + +<# + SqlConnection conn = new SqlConnection(config.ConnectionString); + conn.Open(); + System.Data.DataTable schema = conn.GetSchema("TABLES"); + #> + +<# + foreach(System.Data.DataRow row in schema.Rows) + { + manager.StartBlock("I"+row["TABLE_NAME"].ToString()+"Repository"+".cs",OutputPath1);//文件名 + #> + //----------<#=row["TABLE_NAME"].ToString()#>开始---------- + + +using New_College.IRepository.Base; +using New_College.Model.Models; +namespace New_College.IRepository +{ + /// + /// I<#=row["TABLE_NAME"].ToString()#>Repository + /// + public interface I<#=row["TABLE_NAME"].ToString()#>Repository : IBaseRepository<<#=row["TABLE_NAME"].ToString()#>>//类名 + { + + + } +} + + //----------<#=row["TABLE_NAME"].ToString()#>结束---------- + <# + manager.EndBlock(); + } + + { + manager.StartBlock("IBaseRepository.cs",OutputPath1);//文件名 + #> + + //----------开始---------- + +using New_College.IRepository.Base; +using New_College.Model.Models; +namespace New_College.IRepository +{ + /// + /// IBaseRepository + /// + public interface IBaseRepository where TEntity : class + { + + + } +} + + //----------结束---------- + <# + manager.EndBlock(); + } + manager.Process(true); + } + #> + + + + + diff --git a/New_College.FrameWork/New_College.FrameWork.IServices/New_College.FrameWork.IServices.cs b/New_College.FrameWork/New_College.FrameWork.IServices/New_College.FrameWork.IServices.cs new file mode 100644 index 0000000..fe84bf4 --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.IServices/New_College.FrameWork.IServices.cs @@ -0,0 +1,15 @@ + + + + + + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 +// 生成时间 2019-12-10 12:14:01 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- + + + + diff --git a/New_College.FrameWork/New_College.FrameWork.IServices/New_College.FrameWork.IServices.tt b/New_College.FrameWork/New_College.FrameWork.IServices/New_College.FrameWork.IServices.tt new file mode 100644 index 0000000..17971bc --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.IServices/New_College.FrameWork.IServices.tt @@ -0,0 +1,126 @@ +<#@ template debug="false" hostspecific="true" language="C#" #> +<#@ output extension=".cs" #> +<#@ assembly name="System.Core.dll" #> +<#@ assembly name="System.Data.dll" #> +<#@ assembly name="System.Data.DataSetExtensions.dll" #> +<#@ assembly name="System.Xml.dll" #> +<#@ import namespace="System" #> +<#@ import namespace="System.Xml" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Data" #> +<#@ import namespace="System.Data.SqlClient" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="System.IO" #> +<#@ include file="$(ProjectDir)DbHelper.ttinclude" #> +<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #> +<# var manager = new Manager(Host, GenerationEnvironment, true); #> + + +<# + var OutputPath1 =Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(Host.TemplateFile+"..")+"..")+".."); + OutputPath1=Path.Combine(OutputPath1,"New_College.IServices","IServices_New"); + if (!Directory.Exists(OutputPath1)) + { + Directory.CreateDirectory(OutputPath1); + } +#> + + + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 +// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#> +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- +<# + var tableName=config.TableName; + #> +<# +if(tableName!=""){ + #> + + +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// I<#=tableName#>Services + /// + public interface I<#=tableName#>Services :IBaseServices<<#=tableName#>> + { + + + } +} + +<# + } else{ + + #> + +<# + SqlConnection conn = new SqlConnection(config.ConnectionString); + conn.Open(); + System.Data.DataTable schema = conn.GetSchema("TABLES"); + #> + +<# + foreach(System.Data.DataRow row in schema.Rows) + { + manager.StartBlock("I"+row["TABLE_NAME"].ToString()+"Services"+".cs",OutputPath1); + #> + //----------<#=row["TABLE_NAME"].ToString()#>开始---------- + + +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// <#=row["TABLE_NAME"].ToString()#>Services + /// + public interface I<#=row["TABLE_NAME"].ToString()#>Services :IBaseServices<<#=row["TABLE_NAME"].ToString()#>> + { + + + } +} + + //----------<#=row["TABLE_NAME"].ToString()#>结束---------- + <# + manager.EndBlock(); + } + + { + manager.StartBlock("IBaseServices.cs",OutputPath1);//文件名 + #> + + //----------开始---------- + +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IBaseRepository + /// + public interface IBaseServices where TEntity : class + { + + + } +} + + //----------结束---------- + <# + manager.EndBlock(); + } + + manager.Process(true); + } + #> + diff --git a/New_College.FrameWork/New_College.FrameWork.Repository/New_College.FrameWork.Repository.cs b/New_College.FrameWork/New_College.FrameWork.Repository/New_College.FrameWork.Repository.cs new file mode 100644 index 0000000..bfe45a2 --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.Repository/New_College.FrameWork.Repository.cs @@ -0,0 +1,14 @@ + + + + + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 +// 生成时间 2019-12-10 12:14:21 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- + + + + diff --git a/New_College.FrameWork/New_College.FrameWork.Repository/New_College.FrameWork.Repository.tt b/New_College.FrameWork/New_College.FrameWork.Repository/New_College.FrameWork.Repository.tt new file mode 100644 index 0000000..4f41872 --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.Repository/New_College.FrameWork.Repository.tt @@ -0,0 +1,133 @@ +<#@ template debug="false" hostspecific="true" language="C#" #> +<#@ output extension=".cs" #> +<#@ assembly name="System.Core.dll" #> +<#@ assembly name="System.Data.dll" #> +<#@ assembly name="System.Data.DataSetExtensions.dll" #> +<#@ assembly name="System.Xml.dll" #> +<#@ import namespace="System" #> +<#@ import namespace="System.Xml" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Data" #> +<#@ import namespace="System.Data.SqlClient" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="System.IO" #> +<#@ include file="$(ProjectDir)DbHelper.ttinclude" #> +<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #> +<# var manager = new Manager(Host, GenerationEnvironment, true); #> + + +<# + var OutputPath1 =Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(Host.TemplateFile+"..")+"..")+".."); + OutputPath1=Path.Combine(OutputPath1,"New_College.Repository","Repositories_New"); + if (!Directory.Exists(OutputPath1)) + { + Directory.CreateDirectory(OutputPath1); + } +#> + + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 +// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#> +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- +<# + var tableName=config.TableName; + #> +<# +if(tableName!=""){ + #> + + +using New_College.Repository.Base; +using New_College.Model.Models; +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +namespace New_College.Repository +{ + /// + /// <#=tableName#>Repository + /// + public class <#=tableName#>Repository : BaseRepository<<#=tableName#>>, I<#=tableName#>Repository + { + public <#=tableName#>Repository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + + } +} + +<# + } else{ + + #> + +<# + SqlConnection conn = new SqlConnection(config.ConnectionString); + conn.Open(); + System.Data.DataTable schema = conn.GetSchema("TABLES"); + #> + +<# + foreach(System.Data.DataRow row in schema.Rows) + { + manager.StartBlock(row["TABLE_NAME"].ToString()+"Repository"+".cs",OutputPath1); + #> + //----------<#=row["TABLE_NAME"].ToString()#>开始---------- + + +using New_College.Repository.Base; +using New_College.Model.Models; +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +namespace New_College.Repository +{ + /// + /// <#=row["TABLE_NAME"].ToString()#>Repository + /// + public class <#=row["TABLE_NAME"].ToString()#>Repository : BaseRepository<<#=row["TABLE_NAME"].ToString()#>>, I<#=row["TABLE_NAME"].ToString() #>Repository + { + public <#=row["TABLE_NAME"].ToString()#>Repository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + + } +} + + //----------<#=row["TABLE_NAME"].ToString()#>结束---------- + <# + manager.EndBlock(); + } + + { + manager.StartBlock("BaseRepository.cs",OutputPath1);//文件名 + #> + + //----------开始---------- + +using New_College.Repository.Base; +using New_College.Model.Models; +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +namespace New_College.Repository +{ + /// + /// IBaseRepository + /// + public class BaseRepository : IBaseRepository where TEntity : class, new() + { + + + } +} + + //----------结束---------- + <# + manager.EndBlock(); + } + + + manager.Process(true); + } + #> + diff --git a/New_College.FrameWork/New_College.FrameWork.Services/New_College.FrameWork.Services.cs b/New_College.FrameWork/New_College.FrameWork.Services/New_College.FrameWork.Services.cs new file mode 100644 index 0000000..61b806b --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.Services/New_College.FrameWork.Services.cs @@ -0,0 +1,15 @@ + + + + + + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 +// 生成时间 2019-12-10 12:14:44 +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- + + + + diff --git a/New_College.FrameWork/New_College.FrameWork.Services/New_College.FrameWork.Services.tt b/New_College.FrameWork/New_College.FrameWork.Services/New_College.FrameWork.Services.tt new file mode 100644 index 0000000..91ca805 --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.Services/New_College.FrameWork.Services.tt @@ -0,0 +1,158 @@ +<#@ template debug="false" hostspecific="true" language="C#" #> +<#@ output extension=".cs" #> +<#@ assembly name="System.Core.dll" #> +<#@ assembly name="System.Data.dll" #> +<#@ assembly name="System.Data.DataSetExtensions.dll" #> +<#@ assembly name="System.Xml.dll" #> +<#@ import namespace="System" #> +<#@ import namespace="System.Xml" #> +<#@ import namespace="System.Linq" #> +<#@ import namespace="System.Data" #> +<#@ import namespace="System.Data.SqlClient" #> +<#@ import namespace="System.Collections.Generic" #> +<#@ import namespace="System.IO" #> +<#@ include file="$(ProjectDir)DbHelper.ttinclude" #> +<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #> +<# var manager = new Manager(Host, GenerationEnvironment, true); #> + + +<# + var OutputPath1 =Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(Host.TemplateFile+"..")+"..")+".."); + OutputPath1=Path.Combine(OutputPath1,"New_College.Services","Services_New"); + if (!Directory.Exists(OutputPath1)) + { + Directory.CreateDirectory(OutputPath1); + } +#> + + + +//-------------------------------------------------------------------- +// 此代码由T4模板自动生成 +// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#> +// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。 +//-------------------------------------------------------------------- +<# + var tableName=config.TableName; + #> +<# +if(tableName!=""){ + #> + + +using System; +using System.Threading.Tasks; +using New_College.Common; +using New_College.IRepository; +using New_College.IRepository.Base; +using New_College.IRepository.UnitOfWork; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +namespace New_College.Services +{ + /// + /// <#=tableName#>Services + /// + public class <#=tableName#>Services : BaseServices<<#=tableName#>>, I<#=tableName#>Services + { + + IBaseRepository<<#=tableName#>> dal; + public <#=tableName#>Services(IBaseRepository<<#=tableName#>> dal) + { + this.dal = dal; + base.baseDal = dal; + } + + } +} + +<# + } else{ + + #> + +<# + SqlConnection conn = new SqlConnection(config.ConnectionString); + conn.Open(); + System.Data.DataTable schema = conn.GetSchema("TABLES"); + #> + +<# + foreach(System.Data.DataRow row in schema.Rows) + { + manager.StartBlock(row["TABLE_NAME"].ToString()+"Services"+".cs",OutputPath1); + #> + //----------<#=row["TABLE_NAME"].ToString()#>开始---------- + + + +using System; +using System.Threading.Tasks; +using New_College.Common; +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +namespace New_College.Services +{ + /// + /// <#=row["TABLE_NAME"].ToString()#>Services + /// + public class <#=row["TABLE_NAME"].ToString()#>Services : BaseServices<<#=row["TABLE_NAME"].ToString()#>>, I<#=row["TABLE_NAME"].ToString() #>Services + { + + IBaseRepository<<#=row["TABLE_NAME"].ToString() #>> dal; + public <#=row["TABLE_NAME"].ToString() #>Services(IBaseRepository<<#=row["TABLE_NAME"].ToString() #>> dal) + { + this.dal = dal; + base.baseDal = dal; + } + + } +} + + //----------<#=row["TABLE_NAME"].ToString()#>结束---------- + <# + manager.EndBlock(); + } + + { + manager.StartBlock("BaseServices.cs",OutputPath1);//文件名 + #> + + //----------开始---------- + + +using System; +using System.Threading.Tasks; +using New_College.Common; +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +namespace New_College.Services +{ + /// + /// IBaseRepository + /// + public class BaseServices : IBaseServices where TEntity : class, new() + { + public IBaseRepository baseDal; + + } +} + + //----------结束---------- + <# + manager.EndBlock(); + } + + manager.Process(true); + } + #> + diff --git a/New_College.FrameWork/New_College.FrameWork.csproj b/New_College.FrameWork/New_College.FrameWork.csproj new file mode 100644 index 0000000..1f44dc1 --- /dev/null +++ b/New_College.FrameWork/New_College.FrameWork.csproj @@ -0,0 +1,57 @@ + + + + netcoreapp3.1 + + + + + TextTemplatingFileGenerator + New_College.FrameWork.cs + + + TextTemplatingFileGenerator + New_College.FrameWork.IRepository.cs + + + TextTemplatingFileGenerator + New_College.FrameWork.IServices.cs + + + TextTemplatingFileGenerator + New_College.FrameWork.Repository.cs + + + TextTemplatingFileGenerator + New_College.FrameWork.Services.cs + + + + + + + + + + True + True + New_College.FrameWork.IRepository.tt + + + True + True + New_College.FrameWork.IServices.tt + + + True + True + New_College.FrameWork.Repository.tt + + + True + True + New_College.FrameWork.Services.tt + + + + diff --git a/New_College.IServices/BASE/IBaseServices.cs b/New_College.IServices/BASE/IBaseServices.cs new file mode 100644 index 0000000..3cbd244 --- /dev/null +++ b/New_College.IServices/BASE/IBaseServices.cs @@ -0,0 +1,60 @@ +using New_College.Model; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq.Expressions; +using System.Threading.Tasks; + +namespace New_College.IServices.BASE +{ + public interface IBaseServices where TEntity : class + { + + Task QueryById(object objId); + Task QueryById(object objId, bool blnUseCache = false); + Task> QueryByIDs(object[] lstIds); + + Task Add(TEntity model); + + Task Add(List listEntity); + + Task DeleteById(object id); + + Task Delete(TEntity model); + + Task DeleteByIds(object[] ids); + + Task Update(TEntity model); + Task Update(TEntity entity, string strWhere); + + Task Update(object operateAnonymousObjects); + + Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string strWhere = ""); + + Task> Query(); + Task> Query(string strWhere); + Task> Query(Expression> whereExpression); + Task> Query(Expression> whereExpression, string strOrderByFileds); + Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true); + Task> Query(string strWhere, string strOrderByFileds); + Task> QuerySql(string strSql, SugarParameter[] parameters = null); + Task QueryTable(string strSql, SugarParameter[] parameters = null); + + Task> Query(Expression> whereExpression, int intTop, string strOrderByFileds); + Task> Query(string strWhere, int intTop, string strOrderByFileds); + + Task> Query( + Expression> whereExpression, int intPageIndex, int intPageSize, string strOrderByFileds); + Task> Query(string strWhere, int intPageIndex, int intPageSize, string strOrderByFileds); + + + Task> QueryPage(Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null); + + Task> QueryMuch( + Expression> joinExpression, + Expression> selectExpression, + Expression> whereLambda = null) where T : class, new(); + } + +} diff --git a/New_College.IServices/IAdvertisementServices.cs b/New_College.IServices/IAdvertisementServices.cs new file mode 100644 index 0000000..368fb4b --- /dev/null +++ b/New_College.IServices/IAdvertisementServices.cs @@ -0,0 +1,16 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + public interface IAdvertisementServices :IBaseServices + { + //int Sum(int i, int j); + //int Add(Advertisement model); + //bool Delete(Advertisement model); + //bool Update(Advertisement model); + //List Query(Expression> whereExpression); + + void ReturnExp(); + } +} diff --git a/New_College.IServices/IBlogArticleServices.cs b/New_College.IServices/IBlogArticleServices.cs new file mode 100644 index 0000000..097d71a --- /dev/null +++ b/New_College.IServices/IBlogArticleServices.cs @@ -0,0 +1,16 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + public interface IBlogArticleServices :IBaseServices + { + Task> GetBlogs(); + Task GetBlogDetails(int id); + + } + +} diff --git a/New_College.IServices/ID_EnrollmentinproductionServices.cs b/New_College.IServices/ID_EnrollmentinproductionServices.cs new file mode 100644 index 0000000..680d0da --- /dev/null +++ b/New_College.IServices/ID_EnrollmentinproductionServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_EnrollmentinproductionServices + /// + public interface ID_EnrollmentinproductionServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_GraduateFlowServices.cs b/New_College.IServices/ID_GraduateFlowServices.cs new file mode 100644 index 0000000..94040f7 --- /dev/null +++ b/New_College.IServices/ID_GraduateFlowServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_GraduateFlowServices + /// + public interface ID_GraduateFlowServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_LongIdMapServices.cs b/New_College.IServices/ID_LongIdMapServices.cs new file mode 100644 index 0000000..69a66da --- /dev/null +++ b/New_College.IServices/ID_LongIdMapServices.cs @@ -0,0 +1,90 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ID_LongIdMapServices + /// + public interface ID_LongIdMapServices : IBaseServices + { + Task Import(); + + Task> GetUniversitys(UniversityQuery query); + + Task> uniGetMajorInfo(MajorcategoryQuery query); + + Task> GetRecommendOccupation(); + + Task> uniGetOccupationInfo(); + + Task GetUniversityDetails(IdQuery query); + + Task GetMajorDetail(MajorQuery query); + + Task> GetRelevantSchool(MajorSchoolQuery query); + + Task GetCareerProspects(MajorCareerQuery query); + + Task>> uniGetMajorThree(ManageMajorQuery query); + + /// + /// 根据标签推荐专业 + /// + /// + /// + Task>> GetMajorThreeByTag(MajorThreeByTagQuery query); + + + Task GetRecommendIntroduce(IdQuery query); + + Task> GetUniversityMajor(IdQuery query); + + /// + /// 获取职业第三级 + /// + /// + /// + Task>> GetOccupationThree(IdQuery query); + + + Task GetBatchYearBySchoolId(PlanYearQuery query); + + Task> GetPlanBySchollId(PlanQuery query); + + /// + /// 获取院校排名 + /// + /// + /// + Task> GetUniversityRank(UniversityRankQuery query); + + + /// + /// 专业搜索 + /// + /// + /// + Task>> uniGetSearchMajor(NameBaseQuery query); + + + /// + /// 获取招生简章列表 + /// + /// + /// + Task>> GetRequestEnrollmentinproductionResult(UniversityIdQuery query); + + /// + /// 获取招生简介详情 + /// + /// + /// + Task> GetRequestEnrollmentinproductionDetailResult(StringIdQuery query); + + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorCategoryServices.cs b/New_College.IServices/ID_MajorCategoryServices.cs new file mode 100644 index 0000000..c528ed6 --- /dev/null +++ b/New_College.IServices/ID_MajorCategoryServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_MajorCategoryServices + /// + public interface ID_MajorCategoryServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorClassServices.cs b/New_College.IServices/ID_MajorClassServices.cs new file mode 100644 index 0000000..2ae9118 --- /dev/null +++ b/New_College.IServices/ID_MajorClassServices.cs @@ -0,0 +1,17 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ID_MajorClassServices + /// + public interface ID_MajorClassServices :IBaseServices + { + Task> GetMajorClassListByType(IdQuery query); + + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorInformationServices.cs b/New_College.IServices/ID_MajorInformationServices.cs new file mode 100644 index 0000000..5e3a28d --- /dev/null +++ b/New_College.IServices/ID_MajorInformationServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_MajorInformationServices + /// + public interface ID_MajorInformationServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorMapOccouptionServices.cs b/New_College.IServices/ID_MajorMapOccouptionServices.cs new file mode 100644 index 0000000..d32df79 --- /dev/null +++ b/New_College.IServices/ID_MajorMapOccouptionServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_MajorMapOccouptionServices + /// + public interface ID_MajorMapOccouptionServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorMapTagServices.cs b/New_College.IServices/ID_MajorMapTagServices.cs new file mode 100644 index 0000000..220e10f --- /dev/null +++ b/New_College.IServices/ID_MajorMapTagServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_MajorMapTagServices + /// + public interface ID_MajorMapTagServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorMapUniversityServices.cs b/New_College.IServices/ID_MajorMapUniversityServices.cs new file mode 100644 index 0000000..68e15a6 --- /dev/null +++ b/New_College.IServices/ID_MajorMapUniversityServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_MajorMapUniversityServices + /// + public interface ID_MajorMapUniversityServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorObtainServices.cs b/New_College.IServices/ID_MajorObtainServices.cs new file mode 100644 index 0000000..6e26c6f --- /dev/null +++ b/New_College.IServices/ID_MajorObtainServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_MajorObtainServices + /// + public interface ID_MajorObtainServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorSalaryServices.cs b/New_College.IServices/ID_MajorSalaryServices.cs new file mode 100644 index 0000000..b0b857a --- /dev/null +++ b/New_College.IServices/ID_MajorSalaryServices.cs @@ -0,0 +1,24 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ID_MajorSalaryServices + /// + public interface ID_MajorSalaryServices : IBaseServices + { + Task Import(); + + + /// + /// 获取高薪推荐 + /// + /// + Task>> GetMajorSalaryResult(MajorSalaryQuery query); + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_MajorServices.cs b/New_College.IServices/ID_MajorServices.cs new file mode 100644 index 0000000..c727d01 --- /dev/null +++ b/New_College.IServices/ID_MajorServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_MajorServices + /// + public interface ID_MajorServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_OccMapTagServices.cs b/New_College.IServices/ID_OccMapTagServices.cs new file mode 100644 index 0000000..f9e5312 --- /dev/null +++ b/New_College.IServices/ID_OccMapTagServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_OccMapTagServices + /// + public interface ID_OccMapTagServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_OccupationCategoryServices.cs b/New_College.IServices/ID_OccupationCategoryServices.cs new file mode 100644 index 0000000..2baa23d --- /dev/null +++ b/New_College.IServices/ID_OccupationCategoryServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_OccupationCategoryServices + /// + public interface ID_OccupationCategoryServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_OccupationServices.cs b/New_College.IServices/ID_OccupationServices.cs new file mode 100644 index 0000000..abfc7de --- /dev/null +++ b/New_College.IServices/ID_OccupationServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_OccupationServices + /// + public interface ID_OccupationServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_UniversityCollectionServices.cs b/New_College.IServices/ID_UniversityCollectionServices.cs new file mode 100644 index 0000000..e8ddf0b --- /dev/null +++ b/New_College.IServices/ID_UniversityCollectionServices.cs @@ -0,0 +1,35 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ID_UniversityCollectionServices + /// + public interface ID_UniversityCollectionServices : IBaseServices + { + Task>> GetUniversityCollection(UniversityCollectionQuery query); + + Task> DeleteCollection(UniversityCollectionAddQuery query); + + Task> AddCollection(UniversityCollectionAddQuery query); + + /// + /// 获取院校对比结果 + /// + /// + Task>> GetUniversityContrasts(IdQuery query); + + /// + /// 报告 获取我喜欢的院校 + /// + /// + /// + Task>> GetUniversityMap(IdQuery query); + + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_UniversityRankServices.cs b/New_College.IServices/ID_UniversityRankServices.cs new file mode 100644 index 0000000..df341f0 --- /dev/null +++ b/New_College.IServices/ID_UniversityRankServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_UniversityRankServices + /// + public interface ID_UniversityRankServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_UniversityServices.cs b/New_College.IServices/ID_UniversityServices.cs new file mode 100644 index 0000000..a1bf94a --- /dev/null +++ b/New_College.IServices/ID_UniversityServices.cs @@ -0,0 +1,24 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ID_UniversityServices + /// + public interface ID_UniversityServices : IBaseServices + { + Task SaveImg(); + + /// + /// 获取搜索学校 + /// + /// + /// + Task>> GetUniversitList(NameQuery query); + } +} \ No newline at end of file diff --git a/New_College.IServices/ID_UniversityimgServices.cs b/New_College.IServices/ID_UniversityimgServices.cs new file mode 100644 index 0000000..bc3bf1b --- /dev/null +++ b/New_College.IServices/ID_UniversityimgServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ID_UniversityimgServices + /// + public interface ID_UniversityimgServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IGuestbookServices.cs b/New_College.IServices/IGuestbookServices.cs new file mode 100644 index 0000000..04d8a43 --- /dev/null +++ b/New_College.IServices/IGuestbookServices.cs @@ -0,0 +1,13 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + public partial interface IGuestbookServices : IBaseServices + { + Task> TestTranInRepository(); + Task TestTranInRepositoryAOP(); + } +} diff --git a/New_College.IServices/IModulePermissionServices.cs b/New_College.IServices/IModulePermissionServices.cs new file mode 100644 index 0000000..28dd5a7 --- /dev/null +++ b/New_College.IServices/IModulePermissionServices.cs @@ -0,0 +1,9 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + public partial interface IModulePermissionServices : IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IModuleServices.cs b/New_College.IServices/IModuleServices.cs new file mode 100644 index 0000000..73993f8 --- /dev/null +++ b/New_College.IServices/IModuleServices.cs @@ -0,0 +1,14 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ModuleServices + /// + public interface IModuleServices :IBaseServices + { + + + } +} diff --git a/New_College.IServices/IPasswordLibServices.cs b/New_College.IServices/IPasswordLibServices.cs new file mode 100644 index 0000000..d47c6c5 --- /dev/null +++ b/New_College.IServices/IPasswordLibServices.cs @@ -0,0 +1,9 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + public partial interface IPasswordLibServices :IBaseServices + { + } +} diff --git a/New_College.IServices/IPermissionServices.cs b/New_College.IServices/IPermissionServices.cs new file mode 100644 index 0000000..df662a8 --- /dev/null +++ b/New_College.IServices/IPermissionServices.cs @@ -0,0 +1,8 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +namespace New_College.IServices +{ + public partial interface IPermissionServices : IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IRoleModulePermissionServices.cs b/New_College.IServices/IRoleModulePermissionServices.cs new file mode 100644 index 0000000..dbadcd4 --- /dev/null +++ b/New_College.IServices/IRoleModulePermissionServices.cs @@ -0,0 +1,19 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// RoleModulePermissionServices + /// + public interface IRoleModulePermissionServices :IBaseServices + { + + Task> GetRoleModule(); + Task> QueryMuchTable(); + Task> RoleModuleMaps(); + Task> GetRMPMaps(); + } +} diff --git a/New_College.IServices/IRoleServices.cs b/New_College.IServices/IRoleServices.cs new file mode 100644 index 0000000..69cb7ab --- /dev/null +++ b/New_College.IServices/IRoleServices.cs @@ -0,0 +1,16 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// RoleServices + /// + public interface IRoleServices :IBaseServices + { + Task SaveRole(string roleName); + Task GetRoleNameByRid(int rid); + + } +} diff --git a/New_College.IServices/ISysRegionServices.cs b/New_College.IServices/ISysRegionServices.cs new file mode 100644 index 0000000..a873cd9 --- /dev/null +++ b/New_College.IServices/ISysRegionServices.cs @@ -0,0 +1,18 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ISysRegionServices + /// + public interface ISysRegionServices :IBaseServices + { + Task> GetListByParentId(string id); + + Task> GetRegionList(SysRegionQuery query); + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_BatchTypeInfoServices.cs b/New_College.IServices/IT_BatchTypeInfoServices.cs new file mode 100644 index 0000000..06c3aaa --- /dev/null +++ b/New_College.IServices/IT_BatchTypeInfoServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IT_BatchTypeInfoServices + /// + public interface IT_BatchTypeInfoServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_BatchlineServices.cs b/New_College.IServices/IT_BatchlineServices.cs new file mode 100644 index 0000000..ddfa959 --- /dev/null +++ b/New_College.IServices/IT_BatchlineServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IT_BatchlineServices + /// + public interface IT_BatchlineServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_EnrollmentBatchServices.cs b/New_College.IServices/IT_EnrollmentBatchServices.cs new file mode 100644 index 0000000..89b3858 --- /dev/null +++ b/New_College.IServices/IT_EnrollmentBatchServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IT_EnrollmentBatchServices + /// + public interface IT_EnrollmentBatchServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_EnrollmentPlaneServices.cs b/New_College.IServices/IT_EnrollmentPlaneServices.cs new file mode 100644 index 0000000..a2ac542 --- /dev/null +++ b/New_College.IServices/IT_EnrollmentPlaneServices.cs @@ -0,0 +1,14 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IT_EnrollmentPlaneServices + /// + public interface IT_EnrollmentPlaneServices :IBaseServices + { + Task Import(); + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_EnrollmentPlanedescServices.cs b/New_College.IServices/IT_EnrollmentPlanedescServices.cs new file mode 100644 index 0000000..c11f349 --- /dev/null +++ b/New_College.IServices/IT_EnrollmentPlanedescServices.cs @@ -0,0 +1,131 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IT_EnrollmentPlanedescServices + /// + public interface IT_EnrollmentPlanedescServices : IBaseServices + { + Task> GetRecommendUniversity(RecommendUniversityQuery query); + + Task>> GetEnrollmentLazyByPage(LazyEnrollmentPlaneQuery query); + + Task>> GetPlanByUniversity(PlanDetailQuery query); + + Task>> GetBatchByAreaAndYear(BatchQuery query); + + Task>> GetEnrollmentCWBByPage(CWBEnrollmentPlaneQuery query); + + + /// + /// 冲稳保详情 + /// + /// + /// + Task>> GetCWBUniversityDetail(CWBUniversityDetailQuery query); + + + Task>> GetEnrollmentTagByPage(TagEnrollmentPlaneQuery query); + + /// + /// 获取分析结果录取概率 获取之后保存一下 + /// + /// + /// + Task> GetUniversityProbability(UniversityProbabilityQuery query); + + /// + /// 获取概率历史记录列表 + /// + /// + Task>> GetProbabilityResult(ProbabilityQuery query); + + + /// + /// 保存志愿表 + /// + /// + /// + Task> SaveVolunteerTable(VolunteerTableQuery query); + + /// + /// 获取个人志愿列表 传Id + /// + /// + /// + Task>> GetVolunteerTableList(IdQuery query); + + /// + /// 获取志愿表详情 传Id + /// + /// + /// + Task>> GetVolunteerTableDetail(IdQuery query); + + /// + /// 删除志愿表 + /// + /// + /// + Task> DeleteVolunteerTable(IdQuery query); + + /// + /// 保存志愿表 霍兰德专用 + /// + /// + /// + Task> SaveHollandVolunteer(HollandVolunteerTableQuery query); + + /// + /// 获取一键生成的志愿表 + /// + /// + /// + Task>> GetAutoVolunteerTableDetail(VolunteerTableQuery query); + + /// + /// 获取霍兰德一键生成的志愿表 + /// + /// + /// + Task>> GetHollandVolunteerTableDetail(HollandVolunteerTableQuery query); + + + /// + /// 根据标签推荐选科 + /// + /// + /// + Task> GetSubjectSelectByTag(ByTagSubjectSelectQuery query); + + + /// + /// 获取喜欢的院校 + /// + /// + /// + Task>> GetLikeSchoolMajor(IdQuery query); + + + /// + /// 专业规划 + /// + /// + Task>> GetMajorPlanClaim(CustomerQuery query); + + + /// + /// 获取批次 + /// + /// + /// + Task>> GetBatchByYearArea(YearAreaQuery query); + + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_GearInfoServices.cs b/New_College.IServices/IT_GearInfoServices.cs new file mode 100644 index 0000000..df29f42 --- /dev/null +++ b/New_College.IServices/IT_GearInfoServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IT_GearInfoServices + /// + public interface IT_GearInfoServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_LongIdMapServices.cs b/New_College.IServices/IT_LongIdMapServices.cs new file mode 100644 index 0000000..966cb63 --- /dev/null +++ b/New_College.IServices/IT_LongIdMapServices.cs @@ -0,0 +1,18 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IT_LongIdMapServices + /// + public interface IT_LongIdMapServices :IBaseServices + { + Task ImportEnrollmentBatch(); + Task ImportEnrollmentPlane(); + Task ImportEnrollmentPlanedesc(); + Task ImportBatchline(); + Task ImportBatchTypeInfo(); + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_PlanMapTagServices.cs b/New_College.IServices/IT_PlanMapTagServices.cs new file mode 100644 index 0000000..9fd0f54 --- /dev/null +++ b/New_College.IServices/IT_PlanMapTagServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IT_PlanMapTagServices + /// + public interface IT_PlanMapTagServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IT_RegionScoreServices.cs b/New_College.IServices/IT_RegionScoreServices.cs new file mode 100644 index 0000000..ee52a5f --- /dev/null +++ b/New_College.IServices/IT_RegionScoreServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IT_RegionScoreServices + /// + public interface IT_RegionScoreServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ITasksQzServices.cs b/New_College.IServices/ITasksQzServices.cs new file mode 100644 index 0000000..6ae2cf8 --- /dev/null +++ b/New_College.IServices/ITasksQzServices.cs @@ -0,0 +1,16 @@ + +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ITasksQzServices + /// + public interface ITasksQzServices :IBaseServices + { + + + } +} + \ No newline at end of file diff --git a/New_College.IServices/ITest_CategoryInfoServices.cs b/New_College.IServices/ITest_CategoryInfoServices.cs new file mode 100644 index 0000000..074e094 --- /dev/null +++ b/New_College.IServices/ITest_CategoryInfoServices.cs @@ -0,0 +1,18 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ITest_CategoryInfoServices + /// + public interface ITest_CategoryInfoServices :IBaseServices + { + Task> GetCateSelectByType(CategoryInfoQuery query); + + Task GetTestStatus(CategoryStatusQuery query); + } +} \ No newline at end of file diff --git a/New_College.IServices/ITest_CycleTimeInfoServices.cs b/New_College.IServices/ITest_CycleTimeInfoServices.cs new file mode 100644 index 0000000..414595d --- /dev/null +++ b/New_College.IServices/ITest_CycleTimeInfoServices.cs @@ -0,0 +1,15 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ITest_CycleTimeInfoServices + /// + public interface ITest_CycleTimeInfoServices :IBaseServices + { + Task AutoCycleTime(); + + } +} \ No newline at end of file diff --git a/New_College.IServices/ITest_HollandResultInfoServices.cs b/New_College.IServices/ITest_HollandResultInfoServices.cs new file mode 100644 index 0000000..b1d744c --- /dev/null +++ b/New_College.IServices/ITest_HollandResultInfoServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ITest_HollandResultInfoServices + /// + public interface ITest_HollandResultInfoServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ITest_MBTIMapResultServices.cs b/New_College.IServices/ITest_MBTIMapResultServices.cs new file mode 100644 index 0000000..c327613 --- /dev/null +++ b/New_College.IServices/ITest_MBTIMapResultServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ITest_MBTIMapResultServices + /// + public interface ITest_MBTIMapResultServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ITest_PsychMeasurementInfoServices.cs b/New_College.IServices/ITest_PsychMeasurementInfoServices.cs new file mode 100644 index 0000000..242fd06 --- /dev/null +++ b/New_College.IServices/ITest_PsychMeasurementInfoServices.cs @@ -0,0 +1,66 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ITest_PsychMeasurementInfoServices + /// + public interface ITest_PsychMeasurementInfoServices : IBaseServices + { + Task> GetPsychListByCateAndCustomerId(PsychMeasurementQuery query); + + Task SavePsych(SavePsychQuery query); + + Task GetPsychDetail(ResultLookQuery query); + + Task SaveHolland(SaveHollandQuery query); + + + Task GetHollandResult(ResultLookQuery query); + + Task GetMBTIResult(ResultLookQuery query); + + Task> SubjectChartRadar(ResultLookQuery query); + + /// + /// 传入用户Id 获取霍兰德测评状态 + /// + /// + /// + Task> GetHollandStatus(IdQuery query); + + /// + /// 传入用户Id 获取学科探索测评状态 + /// + /// + /// + Task> GetSubjectSelectStatus(IdQuery query); + + /// + /// 获取测评最新周期Id + /// + /// + /// + Task> GetReportCycleInfo(IdQuery query); + + /// + /// 获取三种推荐选科 + /// + /// + /// + Task>> GetSubjectSelectResult(NewSubjectQuery query); + + /// + /// 根绝霍兰德获取推荐选科 + /// + /// + /// + Task> GetHollandSubject(HollandSubjectQuery query); + + } +} \ No newline at end of file diff --git a/New_College.IServices/ITest_QuestionInfoServices.cs b/New_College.IServices/ITest_QuestionInfoServices.cs new file mode 100644 index 0000000..52b6dab --- /dev/null +++ b/New_College.IServices/ITest_QuestionInfoServices.cs @@ -0,0 +1,18 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// ITest_QuestionInfoServices + /// + public interface ITest_QuestionInfoServices : IBaseServices + { + Task> GetQuestion(appQuestionQuery query); + + Task> GetQuestionMBTI(); + } +} \ No newline at end of file diff --git a/New_College.IServices/ITest_QuestionTypeInfoServices.cs b/New_College.IServices/ITest_QuestionTypeInfoServices.cs new file mode 100644 index 0000000..2f9b612 --- /dev/null +++ b/New_College.IServices/ITest_QuestionTypeInfoServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// ITest_QuestionTypeInfoServices + /// + public interface ITest_QuestionTypeInfoServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/ITopicDetailServices.cs b/New_College.IServices/ITopicDetailServices.cs new file mode 100644 index 0000000..465e3d1 --- /dev/null +++ b/New_College.IServices/ITopicDetailServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + public interface ITopicDetailServices : IBaseServices + { + Task> GetTopicDetails(); + } +} diff --git a/New_College.IServices/ITopicServices.cs b/New_College.IServices/ITopicServices.cs new file mode 100644 index 0000000..e43f9df --- /dev/null +++ b/New_College.IServices/ITopicServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + public interface ITopicServices : IBaseServices + { + Task> GetTopics(); + } +} diff --git a/New_College.IServices/IU_ProbabilityHistoryServices.cs b/New_College.IServices/IU_ProbabilityHistoryServices.cs new file mode 100644 index 0000000..92368dc --- /dev/null +++ b/New_College.IServices/IU_ProbabilityHistoryServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IU_ProbabilityHistoryServices + /// + public interface IU_ProbabilityHistoryServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IU_VolunteerTableDetailServices.cs b/New_College.IServices/IU_VolunteerTableDetailServices.cs new file mode 100644 index 0000000..552d4b0 --- /dev/null +++ b/New_College.IServices/IU_VolunteerTableDetailServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IU_VolunteerTableDetailServices + /// + public interface IU_VolunteerTableDetailServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IU_VolunteerTableServices.cs b/New_College.IServices/IU_VolunteerTableServices.cs new file mode 100644 index 0000000..9497bc0 --- /dev/null +++ b/New_College.IServices/IU_VolunteerTableServices.cs @@ -0,0 +1,12 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; + +namespace New_College.IServices +{ + /// + /// IU_VolunteerTableServices + /// + public interface IU_VolunteerTableServices :IBaseServices + { + } +} \ No newline at end of file diff --git a/New_College.IServices/IUserRoleServices.cs b/New_College.IServices/IUserRoleServices.cs new file mode 100644 index 0000000..a82407f --- /dev/null +++ b/New_College.IServices/IUserRoleServices.cs @@ -0,0 +1,17 @@ +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// UserRoleServices + /// + public interface IUserRoleServices :IBaseServices + { + + Task SaveUserRole(int uid, int rid); + Task GetRoleIdByUid(int uid); + } +} + diff --git a/New_College.IServices/IV_CustomerInfoServices.cs b/New_College.IServices/IV_CustomerInfoServices.cs new file mode 100644 index 0000000..4e98412 --- /dev/null +++ b/New_College.IServices/IV_CustomerInfoServices.cs @@ -0,0 +1,69 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.Request; +using New_College.Model.ViewModels; +using System; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IV_CustomerInfoServices + /// + public interface IV_CustomerInfoServices : IBaseServices + { + Task Login(CustomerInfoQuery query); + + Task SendLogin(PhoneQuery query); + + Task UpdateCustomerInfo(UpdateCustomerQuery query); + + Task ResetPwd(ResetPwdQuery query); + + Task SendReset(PhoneQuery query); + + Task UpdateScore(UpdateScoreQuery query); + + Task UpdateCustomer(CustomerUpdateQuery query); + + /// + /// 根绝Id获取用户信息 + /// + /// + /// + Task> GetCustomerInfoById(IdQuery query); + + + Task>> GetCustomerInfoListByPage(CustomerSeachQuery query); + + + + Weixinauthinfo AuthCode2Session(string Code); + string GetWeixinPhone(GetPhoneInfo phoneInfo); + + Task> Logined(LoginQuery query); + Task> GetUserInfo(LoginQuery query); + /// + /// 通过openid获取用户id + /// + /// + /// + Task GetCustomerId(string OpenId); + /// + /// 通过用户id获取openid + /// + /// + /// + Task GetOpenId(int CustomerId); + + + /// + /// + /// + /// + /// + Task CustomerSave(DecryptUserInfoRequest register); + + } +} \ No newline at end of file diff --git a/New_College.IServices/IV_ExaminationPolicyServices.cs b/New_College.IServices/IV_ExaminationPolicyServices.cs new file mode 100644 index 0000000..489a44c --- /dev/null +++ b/New_College.IServices/IV_ExaminationPolicyServices.cs @@ -0,0 +1,27 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IV_ExaminationPolicyServices + /// + public interface IV_ExaminationPolicyServices :IBaseServices + { + Task>> GetExaminationPolicyByPage(ExaminationPolicySearchQuery query); + + Task> GetExaminationPolicyOne(IdQuery query); + + Task> AddExaminationPolicy(ExaminationPolicyQuery query); + + Task> UpdateExaminationPolicy(ExaminationPolicyQuery query); + + Task> DeleteExaminationPolicy(IdQuery query); + + + Task> GetExaminationPolicyDetail(ExaminationPolicyAreaQuery query); + } +} \ No newline at end of file diff --git a/New_College.IServices/IV_OrderInfoServices.cs b/New_College.IServices/IV_OrderInfoServices.cs new file mode 100644 index 0000000..2d48ca4 --- /dev/null +++ b/New_College.IServices/IV_OrderInfoServices.cs @@ -0,0 +1,64 @@ +using New_College.Common; +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IV_OrderInfoServices + /// + public interface IV_OrderInfoServices : IBaseServices + { + + Task CreateOrder(UniOrderQuery query); + + Task UpdateOrderStatus(string orderNo, EnumPayType payType, string trade_no); + + + /// + /// 唤醒微信H5支付 + /// + /// + /// + Task> WechatPubPay(WeChatPayQuery query); + + /// + /// 微信订单查询确认 传用户Id + /// + /// + /// + Task> WeChatPayStatus(IdQuery query); + + /// + /// 支付宝 订单确认 + /// + /// + /// + Task> AliPayStatus(IdQuery query); + + /// + /// 获取vip信息(分页) + /// + /// + /// + Task>> GetOrderInfoByPage(SearchOrderQuery query); + + /// + /// 支付成功后操作 + /// + /// + /// + Task> PaySuccess(V_OrderInfo query); + + /// + /// 支付宝H5支付 + /// + /// + /// + Task> AliH5Pay(WeChatPayQuery query); + + } +} \ No newline at end of file diff --git a/New_College.IServices/IV_SubjectSelectServices.cs b/New_College.IServices/IV_SubjectSelectServices.cs new file mode 100644 index 0000000..47fa162 --- /dev/null +++ b/New_College.IServices/IV_SubjectSelectServices.cs @@ -0,0 +1,28 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IV_SubjectSelectServices + /// + public interface IV_SubjectSelectServices : IBaseServices + { + /// + /// 获取我的自选科目 + /// + /// + /// + Task> GetSubjectSelect(IdQuery query); + + /// + /// 保存我的选科 + /// + /// + /// + Task> SaveSubjectSelect(SubjectSelectQuery query); + } +} \ No newline at end of file diff --git a/New_College.IServices/IV_VipCardInfoServices.cs b/New_College.IServices/IV_VipCardInfoServices.cs new file mode 100644 index 0000000..b51187f --- /dev/null +++ b/New_College.IServices/IV_VipCardInfoServices.cs @@ -0,0 +1,72 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using New_College.Model.ViewModels.Query; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IV_VipCardInfoServices + /// + public interface IV_VipCardInfoServices : IBaseServices + { + + Task> BindCardInfo(VipCardQuery query); + + + /// + /// 获取vip信息 + /// + /// + /// + Task> GetVipInfo(IdQuery query); + + + /// + /// 生成卡信息 + /// + /// + /// + Task>> AutoVipCardInfo(AutoVipInfoQuery query); + + /// + /// 获取vip信息(分页) + /// + /// + /// + Task>> GetVipCardInfoByPage(VipCardInfoSearchQuery query); + + /// + /// 获取单个vip信息 + /// + /// + /// + Task> GetVipCardInfoOne(IdQuery query); + /// + /// 添加vip + /// + /// + /// + Task> AddVipCardInfo(VipCardInfoQuery query); + + + /// + /// 更新vip + /// + /// + /// + Task> UpdateVipCardInfo(VipCardInfoQuery query); + + /// + /// 删除vip + /// + /// + /// + Task> DeleteVipCardInfo(IdQuery query); + + + } +} \ No newline at end of file diff --git a/New_College.IServices/IV_VipCardTypeServices.cs b/New_College.IServices/IV_VipCardTypeServices.cs new file mode 100644 index 0000000..d17be34 --- /dev/null +++ b/New_College.IServices/IV_VipCardTypeServices.cs @@ -0,0 +1,22 @@ +using New_College.IServices.BASE; +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using New_College.Model.ViewModels.Query; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// IV_VipCardTypeServices + /// + public interface IV_VipCardTypeServices :IBaseServices + { + Task> GetVipCardTypeList(); + + + Task> GetVipCardType(); + + } +} \ No newline at end of file diff --git a/New_College.IServices/IsysUserInfoServices.cs b/New_College.IServices/IsysUserInfoServices.cs new file mode 100644 index 0000000..29cec98 --- /dev/null +++ b/New_College.IServices/IsysUserInfoServices.cs @@ -0,0 +1,17 @@ + + +using New_College.IServices.BASE; +using New_College.Model.Models; +using System.Threading.Tasks; + +namespace New_College.IServices +{ + /// + /// sysUserInfoServices + /// + public interface ISysUserInfoServices :IBaseServices + { + Task SaveUserInfo(string loginName, string loginPwd); + Task GetUserRoleNameStr(string loginName, string loginPwd); + } +} diff --git a/New_College.IServices/New_College.IServices.csproj b/New_College.IServices/New_College.IServices.csproj new file mode 100644 index 0000000..fdf3dd7 --- /dev/null +++ b/New_College.IServices/New_College.IServices.csproj @@ -0,0 +1,11 @@ + + + + netcoreapp3.1 + + + + + + + diff --git a/New_College.IServices/WebApiClients/DoubanApis/DoubanViewModel.cs b/New_College.IServices/WebApiClients/DoubanApis/DoubanViewModel.cs new file mode 100644 index 0000000..28fac89 --- /dev/null +++ b/New_College.IServices/WebApiClients/DoubanApis/DoubanViewModel.cs @@ -0,0 +1,96 @@ +namespace New_College.Common.WebApiClients.HttpApis +{ + public class Data + { + /// + /// + /// + public string isbn { get; set; } + /// + /// 解忧杂货店 + /// + public string title { get; set; } + /// + /// ナミヤ雑貨店の奇蹟 + /// + public string origintitle { get; set; } + /// + /// + /// + public string subtitle { get; set; } + /// + /// + /// + public string image { get; set; } + /// + /// [日]东野圭吾 + /// + public string author { get; set; } + /// + /// 李盈春 + /// + public string translator { get; set; } + /// + /// 南海出版公司 + /// + public string publisher { get; set; } + /// + /// + /// + public string pubdate { get; set; } + /// + /// <东野圭吾><治愈><温暖><小说><日本><日本文学><東野圭吾><推理> + /// + public string tags { get; set; } + /// + /// + /// + public string kaiben { get; set; } + /// + /// + /// + public string zhizhang { get; set; } + /// + /// 精装 + /// + public string binding { get; set; } + /// + /// + /// + public string taozhuang { get; set; } + /// + /// 新经典文库·东野圭吾作品 + /// + public string series { get; set; } + /// + /// + /// + public string pages { get; set; } + /// + /// 39.50元 + /// + public string price { get; set; } + + public string author_intro { get; set; } + + public string summary { get; set; } + + public string catalog { get; set; } + } + + public class DoubanViewModel + { + /// + /// + /// + public string status { get; set; } + /// + /// + /// + public Data data { get; set; } + /// + /// 获取图书数据成功 + /// + public string msg { get; set; } + } +} diff --git a/New_College.IServices/WebApiClients/DoubanApis/IDoubanApi.cs b/New_College.IServices/WebApiClients/DoubanApis/IDoubanApi.cs new file mode 100644 index 0000000..4d14497 --- /dev/null +++ b/New_College.IServices/WebApiClients/DoubanApis/IDoubanApi.cs @@ -0,0 +1,22 @@ +using WebApiClient; +using WebApiClient.Attributes; + +namespace New_College.Common.WebApiClients.HttpApis +{ + /// + /// 豆瓣视频管理 + /// + [TraceFilter] + public interface IDoubanApi : IHttpApi + { + /// + /// 获取电影详情 + /// + /// + [HttpGet("api/bookinfo")] + ITask VideoDetailAsync(string isbn); + + } + + +} diff --git a/New_College.IServices/WebApiClients/HttpApis/IBlogApi.cs b/New_College.IServices/WebApiClients/HttpApis/IBlogApi.cs new file mode 100644 index 0000000..7d617db --- /dev/null +++ b/New_College.IServices/WebApiClients/HttpApis/IBlogApi.cs @@ -0,0 +1,84 @@ +using New_College.Model; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using WebApiClient; +using WebApiClient.Attributes; + +namespace New_College.Common.WebApiClients.HttpApis +{ + /// + /// 博客管理 + /// + [TraceFilter] + public interface IBlogApi : IHttpApi + { + /// + /// 获取博客列表【无权限】 + /// + /// + /// + /// + /// + /// Success + [HttpGet("api/Blog")] + Task>> BlogAsync(int? id, int page, string bcategory, string key); + + /// + /// 添加博客【无权限】 + /// + /// + /// Success + [HttpPost("api/Blog")] + Task> Blog2Async([JsonContent] BlogArticle body); + + /// + /// 获取博客详情 (Auth) + /// + /// + /// Success + [HttpGet("api/Blog/{id}")] + Task> Blog3Async([Required] int id); + + /// + /// apache jemeter 压力测试 + /// 更新接口 + /// + /// Success + [HttpGet("api/Blog/ApacheTestUpdate")] + Task> ApacheTestUpdateAsync(); + + /// + /// 删除博客 (Auth policies: Permission) + /// + /// + /// Success + [HttpDelete("api/Blog/Delete")] + Task> DeleteAsync(int? id); + + /// + /// 获取详情【无权限】 + /// + /// + /// Success + [HttpGet("api/Blog/DetailNuxtNoPer")] + Task> DetailNuxtNoPerAsync(int? id); + + /// + /// 更新博客信息 (Auth) + /// + /// + /// Success + [HttpPut("api/Blog/Update")] + Task> UpdateAsync([JsonContent] BlogArticle body); + + /// + /// 获取博客测试信息 v2版本 + /// + /// Success + [HttpGet("api/V2/Blog/Blogtest")] + Task> BlogtestAsync(); + + } +} diff --git a/New_College.Model/Love.cs b/New_College.Model/Love.cs new file mode 100644 index 0000000..b266d2b --- /dev/null +++ b/New_College.Model/Love.cs @@ -0,0 +1,25 @@ +namespace New_College.Model +{ + /// + /// 这是爱 + /// + public class Love + { + public virtual string SayLoveU() + { + return "I ♥ U"; + } + /// + /// id + /// + public int Id { get; set; } + /// + /// 姓名 + /// + public string Name { get; set; } + /// + /// 年龄 + /// + public int Age { get; set; } + } +} diff --git a/New_College.Model/MessageModel.cs b/New_College.Model/MessageModel.cs new file mode 100644 index 0000000..742165b --- /dev/null +++ b/New_College.Model/MessageModel.cs @@ -0,0 +1,26 @@ +namespace New_College.Model +{ + /// + /// 通用返回信息类 + /// + public class MessageModel + { + /// + /// 状态码 + /// + public int status { get; set; } = 200; + /// + /// 操作是否成功 + /// + public bool success { get; set; } = false; + /// + /// 返回信息 + /// + public string msg { get; set; } = "服务器异常"; + /// + /// 返回数据集合 + /// + public T response { get; set; } + + } +} diff --git a/New_College.Model/Models/Advertisement.cs b/New_College.Model/Models/Advertisement.cs new file mode 100644 index 0000000..db78578 --- /dev/null +++ b/New_College.Model/Models/Advertisement.cs @@ -0,0 +1,35 @@ +using SqlSugar; +using System; + +namespace New_College.Model.Models +{ + public class Advertisement : RootEntity + { + + /// + /// 广告图片 + /// + [SugarColumn(Length = 512, IsNullable = true, ColumnDataType = "nvarchar")] + public string ImgUrl { get; set; } + + /// + /// 广告标题 + /// + [SugarColumn(Length = 64, IsNullable = true, ColumnDataType = "nvarchar")] + public string Title { get; set; } + + /// + /// 广告链接 + /// + [SugarColumn(Length = 256, IsNullable = true, ColumnDataType = "nvarchar")] + public string Url { get; set; } + + /// + /// 备注 + /// + [SugarColumn(Length = int.MaxValue, IsNullable = true, ColumnDataType = "nvarchar")] + public string Remark { get; set; } + + + } +} diff --git a/New_College.Model/Models/BannerInfo.cs b/New_College.Model/Models/BannerInfo.cs new file mode 100644 index 0000000..3d78ca3 --- /dev/null +++ b/New_College.Model/Models/BannerInfo.cs @@ -0,0 +1,43 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + + /// + /// 海报管理 + /// + public class BannerInfo : RootEntity + { + /// + /// banner name + /// + [SugarColumn(IsNullable = true)] + public string bannerName { get; set; } + + /// + /// 图片地址 + /// + [SugarColumn(IsNullable = true)] + public string bannerUrl { get; set; } + + /// + /// 要去的地址 + /// + [SugarColumn(IsNullable = true)] + public string goUrl { get; set; } + + /// + /// banner 0,不展示,1展示是否展示 + /// + public int status { get; set; } + + /// + /// 海报位置:0 首页banner + /// + public int type { get; set; } + + } +} diff --git a/New_College.Model/Models/BlogArticle.cs b/New_College.Model/Models/BlogArticle.cs new file mode 100644 index 0000000..adc08be --- /dev/null +++ b/New_College.Model/Models/BlogArticle.cs @@ -0,0 +1,73 @@ +using SqlSugar; +using System; + +namespace New_College.Model.Models +{ + /// + /// 博客文章 + /// + public class BlogArticle + { + /// + /// 主键 + /// + /// 这里之所以没用RootEntity,是想保持和之前的数据库一致,主键是bID,不是Id + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int bID { get; set; } + /// + /// 创建人 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 60, IsNullable = true)] + public string bsubmitter { get; set; } + + /// + /// 标题blog + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 256, IsNullable = true)] + public string btitle { get; set; } + + /// + /// 类别 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string bcategory { get; set; } + + /// + /// 内容 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string bcontent { get; set; } + + /// + /// 访问量 + /// + public int btraffic { get; set; } + + /// + /// 评论数量 + /// + public int bcommentNum { get; set; } + + /// + /// 修改时间 + /// + public DateTime bUpdateTime { get; set; } + + /// + /// 创建时间 + /// + public System.DateTime bCreateTime { get; set; } + /// + /// 备注 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string bRemark { get; set; } + + /// + /// 逻辑删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + + } +} diff --git a/New_College.Model/Models/D_Enrollmentinproduction.cs b/New_College.Model/Models/D_Enrollmentinproduction.cs new file mode 100644 index 0000000..cc6cba4 --- /dev/null +++ b/New_College.Model/Models/D_Enrollmentinproduction.cs @@ -0,0 +1,38 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; +using YIJIYI.Core.Common.Helper; + +namespace New_College.Model.Models +{ + /// + /// 招生简章 + /// + public class D_Enrollmentinproduction : EntityModel + { + /// + /// 院校Id + /// + [SugarColumn(IsNullable = true)] + public int Universityid { get; set; } + + /// + /// 发布时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime Pushdate { get; set; } = TimeUtil.GetCstDateTime(); + + /// + /// 标题 + /// + [SugarColumn(IsNullable = true)] + public string Title { get; set; } + + /// + /// 文章内容 + /// + [SugarColumn(IsNullable = true)] + public string Content { get; set; } + } +} diff --git a/New_College.Model/Models/D_GraduateFlow.cs b/New_College.Model/Models/D_GraduateFlow.cs new file mode 100644 index 0000000..91b6c58 --- /dev/null +++ b/New_College.Model/Models/D_GraduateFlow.cs @@ -0,0 +1,19 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_GraduateFlow : EntityModel + { + [SugarColumn(IsNullable = true)] + public int UniversityId { get; set; } + + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Provinces { get; set; } + + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Attrs { get; set; } + } +} diff --git a/New_College.Model/Models/D_LongIdMap.cs b/New_College.Model/Models/D_LongIdMap.cs new file mode 100644 index 0000000..fb64402 --- /dev/null +++ b/New_College.Model/Models/D_LongIdMap.cs @@ -0,0 +1,18 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_LongIdMap : EntityModel + { + [SugarColumn(IsNullable = true)] + public string longid { get; set; } + [SugarColumn(IsNullable = true)] + public int newid { get; set; } + + [SugarColumn(IsNullable = true)] + public string table { get; set; } + } +} diff --git a/New_College.Model/Models/D_Major.cs b/New_College.Model/Models/D_Major.cs new file mode 100644 index 0000000..21584a4 --- /dev/null +++ b/New_College.Model/Models/D_Major.cs @@ -0,0 +1,44 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_Major : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + + /// + /// 专业二级分类id + /// + [SugarColumn(IsNullable = true)] + public int CategoryClass_Id { get; set; } + /// + /// 专业名称 + /// + [SugarColumn(IsNullable = true)] + public string MajorName { get; set; } + + /// + /// 教育部专业编号 + /// + [SugarColumn(IsNullable = true)] + public string MajorCode { get; set; } + + /// + /// 热度 + /// + [SugarColumn(IsNullable = true)] + public int Hot { get; set; } + + /// + /// 专业分类 1文科 2理科 3不区分 + /// + [SugarColumn(IsNullable = true)] + public int Type { get; set; } + + + } +} diff --git a/New_College.Model/Models/D_MajorCategory.cs b/New_College.Model/Models/D_MajorCategory.cs new file mode 100644 index 0000000..9d3024c --- /dev/null +++ b/New_College.Model/Models/D_MajorCategory.cs @@ -0,0 +1,30 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_MajorCategory : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + /// + /// + /// + [SugarColumn(IsNullable = true)] + public string TradeNumber { get; set; } + /// + /// + /// + [SugarColumn(IsNullable = true)] + public string TradeName { get; set; } + + /// + /// 本科/专科大类 1本科 2 专科 + /// + [SugarColumn(IsNullable = true)] + public int Type { get; set; } + + } +} diff --git a/New_College.Model/Models/D_MajorClass.cs b/New_College.Model/Models/D_MajorClass.cs new file mode 100644 index 0000000..a9b5766 --- /dev/null +++ b/New_College.Model/Models/D_MajorClass.cs @@ -0,0 +1,25 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_MajorClass : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + + /// + /// 专业类型名称 + /// + [SugarColumn(IsNullable = true)] + public string Categoryname { get; set; } + /// + /// 专业一级分类id + /// + [SugarColumn(IsNullable = true)] + public int TradeId { get; set; } + + } +} diff --git a/New_College.Model/Models/D_MajorInformation.cs b/New_College.Model/Models/D_MajorInformation.cs new file mode 100644 index 0000000..55030dd --- /dev/null +++ b/New_College.Model/Models/D_MajorInformation.cs @@ -0,0 +1,48 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_MajorInformation : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + /// + /// 院校id + /// + [SugarColumn(IsNullable = true)] + public int UniversityId { get; set; } + /// + /// 专业id + /// + [SugarColumn(IsNullable = true)] + public int MajorId { get; set; } + /// + /// 专业主修课程 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Majorcourse { get; set; } + /// + /// 专业前景 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Majorintent { get; set; } + /// + /// 专业介绍 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Majordescription { get; set; } + /// + /// 相关技能 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Skill { get; set; } + /// + /// 考研方向 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Postgraduate { get; set; } + } +} diff --git a/New_College.Model/Models/D_MajorMapOccouption.cs b/New_College.Model/Models/D_MajorMapOccouption.cs new file mode 100644 index 0000000..c843b0d --- /dev/null +++ b/New_College.Model/Models/D_MajorMapOccouption.cs @@ -0,0 +1,23 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_MajorMapOccouption : EntityModel + { + /// + /// 专业ID + /// + [SugarColumn(IsNullable = true)] + public long MajorId { get; set; } + + /// + /// 职业ID + /// + [SugarColumn(IsNullable = true)] + public long OccouptionId { get; set; } + + } +} diff --git a/New_College.Model/Models/D_MajorMapTag.cs b/New_College.Model/Models/D_MajorMapTag.cs new file mode 100644 index 0000000..6d16282 --- /dev/null +++ b/New_College.Model/Models/D_MajorMapTag.cs @@ -0,0 +1,25 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_MajorMapTag : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + + /// + /// 职业id + /// + [SugarColumn(IsNullable = true)] + public int MajorId { get; set; } + + /// + /// 标签 + /// + [SugarColumn(IsNullable = true)] + public string Tag { get; set; } + } +} diff --git a/New_College.Model/Models/D_MajorMapUniversity.cs b/New_College.Model/Models/D_MajorMapUniversity.cs new file mode 100644 index 0000000..4764adc --- /dev/null +++ b/New_College.Model/Models/D_MajorMapUniversity.cs @@ -0,0 +1,28 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_MajorMapUniversity : EntityModel + { + /// + /// 院校id + /// + [SugarColumn(IsNullable = true)] + public int Universityid { get; set; } + + /// + /// 专业id + /// + [SugarColumn(IsNullable = true)] + public int MajorId { get; set; } + + /// + /// 是否为特殊专业,0为不是,1为是 + /// + [SugarColumn(IsNullable = true)] + public int sp { get; set; } + } +} diff --git a/New_College.Model/Models/D_MajorObtain.cs b/New_College.Model/Models/D_MajorObtain.cs new file mode 100644 index 0000000..5f32b74 --- /dev/null +++ b/New_College.Model/Models/D_MajorObtain.cs @@ -0,0 +1,131 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_MajorObtain:EntityModel + { + public int MajorId { get; set; } + /// + /// 专业名称 + /// + [SugarColumn(IsNullable = true)] + public string MajorName { get; set; } + + /// + /// 就业概况-名次 + /// + [SugarColumn(IsNullable = true)] + public string ObtainRank { get; set; } + + /// + /// 就业概况-名次描述 + /// + [SugarColumn(IsNullable = true)] + public string ObtainRankDetail { get; set; } + + /// + /// 就业最多地区 + /// + [SugarColumn(IsNullable = true)] + public string ObtainMoreArea { get; set; } + + /// + /// 就业最多行业 + /// + [SugarColumn(IsNullable = true)] + public string ObtainMostIndustries { get; set; } + + /// + /// 就业行业分布 + /// + [SugarColumn(IsNullable = true)] + public string ObtainIndustryDis { get; set; } + + /// + /// 就业行业分布比例 + /// + [SugarColumn(IsNullable = true)] + public string ObtainIndustryDisProportion { get; set; } + + /// + /// 就业地区分布 + /// + [SugarColumn(IsNullable = true)] + public string ObtainRegionalDis { get; set; } + + /// + /// 就业地区分布比例 + /// + [SugarColumn(IsNullable = true)] + public string ObtainRegionalDisProportion { get; set; } + + /// + /// 工资情况 + /// + [SugarColumn(IsNullable = true)] + public string WageSituation { get; set; } + + /// + /// 工资比例 + /// + [SugarColumn(IsNullable = true)] + public string WageProportion { get; set; } + + /// + /// 经验情况 + /// + [SugarColumn(IsNullable = true)] + public string Experience { get; set; } + + /// + /// 经验比例 + /// + [SugarColumn(IsNullable = true)] + public string ExperienceRatio { get; set; } + + /// + /// 学历要求 + /// + [SugarColumn(IsNullable = true)] + public string EducationRequirements { get; set; } + + /// + /// 学历要求 + /// + [SugarColumn(IsNullable = true)] + public string EducationalBackgroundRatio { get; set; } + + /// + /// 就业方向 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 1000, IsNullable = true)] + public string EmploymentDirection { get; set; } + + /// + /// 从事岗位 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 1000, IsNullable = true)] + public string Position { get; set; } + + /// + /// 平均工资 + /// + [SugarColumn(IsNullable = true)] + public string AverageWage { get; set; } + + /// + /// 工作年限 + /// + [SugarColumn(IsNullable = true)] + public string WorkingYears { get; set; } + + /// + /// 工作年限工资 + /// + [SugarColumn(IsNullable = true)] + public string WorkingYearsWage { get; set; } + } +} diff --git a/New_College.Model/Models/D_MajorSalary.cs b/New_College.Model/Models/D_MajorSalary.cs new file mode 100644 index 0000000..06446e1 --- /dev/null +++ b/New_College.Model/Models/D_MajorSalary.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_MajorSalary : EntityModel + { + /// + /// 专业Id + /// + public int MajorId { get; set; } + + /// + /// 专业名称 + /// + public string MajorName { get; set; } + + /// + /// 薪资 + /// + public float Salary { get; set; } + } +} diff --git a/New_College.Model/Models/D_OccMapTag.cs b/New_College.Model/Models/D_OccMapTag.cs new file mode 100644 index 0000000..c48a685 --- /dev/null +++ b/New_College.Model/Models/D_OccMapTag.cs @@ -0,0 +1,25 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_OccMapTag : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + + /// + /// 职业id + /// + [SugarColumn(IsNullable = true)] + public int OccId { get; set; } + + /// + /// 标签 + /// + [SugarColumn(IsNullable = true)] + public string Tag { get; set; } + } +} diff --git a/New_College.Model/Models/D_Occupation.cs b/New_College.Model/Models/D_Occupation.cs new file mode 100644 index 0000000..f5eb708 --- /dev/null +++ b/New_College.Model/Models/D_Occupation.cs @@ -0,0 +1,37 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_Occupation : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + + /// + /// 职业分类id + /// + [SugarColumn(IsNullable = true)] + public int CategoryId { get; set; } + + /// + /// 职业名称 + /// + [SugarColumn(IsNullable = true)] + public string OccupationName { get; set; } + + /// + /// 职业介绍 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string OccupationIntraduce { get; set; } + + /// + /// 是否推荐,0为不推荐,1为推荐 + /// + [SugarColumn(IsNullable = true)] + public int Recommend { get; set; } + } +} diff --git a/New_College.Model/Models/D_OccupationCategory.cs b/New_College.Model/Models/D_OccupationCategory.cs new file mode 100644 index 0000000..8598e84 --- /dev/null +++ b/New_College.Model/Models/D_OccupationCategory.cs @@ -0,0 +1,27 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_OccupationCategory : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + + /// + /// 分类名称 + /// + [SugarColumn(IsNullable = true)] + public string OccupationName { get; set; } + /// + /// 分类等级 + /// + [SugarColumn(IsNullable = true)] + public int Level { get; set; } + + [SugarColumn(IsNullable = true)] + public int ParentId { get; set; } + } +} diff --git a/New_College.Model/Models/D_University.cs b/New_College.Model/Models/D_University.cs new file mode 100644 index 0000000..154f6ca --- /dev/null +++ b/New_College.Model/Models/D_University.cs @@ -0,0 +1,121 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_University : EntityModel + { + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + + /// + /// 省id + /// + [SugarColumn(IsNullable = true)] + public int Area_Id { get; set; } + + /// + /// 省name + /// + [SugarColumn(IsNullable = true)] + public string Area_Name { get; set; } + + /// + /// 排名 + /// + [SugarColumn(IsNullable = true)] + public int Rank { get; set; } + + /// + /// 创办时间 + /// + [SugarColumn(IsNullable = true)] + public string Build_Date { get; set; } + + /// + /// 办学性质 1、公立,2、私立 + /// + [SugarColumn(IsNullable = true)] + public int Nature { get; set; } + + /// + /// 隶属于 1、教育部,2、省政府, 3 其他部委,4 军校 + /// + [SugarColumn(IsNullable = true)] + public int Ascription { get; set; } + + /// + ///教育行政主管部门名称 + /// + [SugarColumn(IsNullable = true)] + public string AscriptionName { get; set; } + + /// + /// 学科层次 1、本科,2、专科 + /// + [SugarColumn(IsNullable = true)] + public int Subject_Level { get; set; } + + /// + /// 是否985 0、否,1、是 + /// + [SugarColumn(IsNullable = true)] + public int Nhef { get; set; } + + /// + /// 是否211 0、否,1、是 + /// + [SugarColumn(IsNullable = true)] + public int Sff { get; set; } + + /// + /// 是否双一流 0、否,1、是 + /// + [SugarColumn(IsNullable = true)] + public int Syl { get; set; } + + /// + /// 院士数 + /// + [SugarColumn(IsNullable = true)] + public int Academician_Count { get; set; } + + /// + /// 博士数 + /// + [SugarColumn(IsNullable = true)] + public int Doctorate_Count { get; set; } + + /// + /// 硕士数 + /// + [SugarColumn(IsNullable = true)] + public int Master_Count { get; set; } + + /// + /// 大学类型 0综合,1理工类,2医学类... + /// + [SugarColumn(IsNullable = true)] + public int Type { get; set; } + + /// + /// logo + /// + [SugarColumn(IsNullable = true)] + public string Logo { get; set; } + + /// + /// 院校官网 + /// + [SugarColumn(IsNullable = true)] + public string Web { get; set; } + + /// + /// 院校简介 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Description { get; set; } + } +} diff --git a/New_College.Model/Models/D_UniversityCollection.cs b/New_College.Model/Models/D_UniversityCollection.cs new file mode 100644 index 0000000..97c98d0 --- /dev/null +++ b/New_College.Model/Models/D_UniversityCollection.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 院校收藏和对比 + /// + public class D_UniversityCollection : EntityModel + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 院校Id + /// + public int UniversityId { get; set; } + + /// + /// 1收藏 2对比 + /// + public int Type { get; set; } + } +} diff --git a/New_College.Model/Models/D_UniversityRank.cs b/New_College.Model/Models/D_UniversityRank.cs new file mode 100644 index 0000000..e32a9c5 --- /dev/null +++ b/New_College.Model/Models/D_UniversityRank.cs @@ -0,0 +1,33 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_UniversityRank : EntityModel + { + /// + /// 院校名称 + /// + [SugarColumn(IsNullable = true)] + public string UniversityName { get; set; } + /// + /// 类型(0,校友会 1,武书连 2,软科 3,QS 4,U.S.News) + /// + [SugarColumn(IsNullable = true)] + public int UniversityType { get; set; } + + /// + /// 年份 + /// + [SugarColumn(IsNullable = true)] + public string Year { get; set; } + + /// + /// 排名 + /// + [SugarColumn(IsNullable = true)] + public int Rank { get; set; } + } +} diff --git a/New_College.Model/Models/D_Universityimg.cs b/New_College.Model/Models/D_Universityimg.cs new file mode 100644 index 0000000..1c41ed8 --- /dev/null +++ b/New_College.Model/Models/D_Universityimg.cs @@ -0,0 +1,21 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class D_Universityimg : EntityModel + { + /// + /// 院校Id + /// + [SugarColumn(IsNullable = true)] + public int UniversityId { get; set; } + /// + /// 院校图片列表地址 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string ImgList { get; set; } + } +} diff --git a/New_College.Model/Models/Guestbook.cs b/New_College.Model/Models/Guestbook.cs new file mode 100644 index 0000000..95917e2 --- /dev/null +++ b/New_College.Model/Models/Guestbook.cs @@ -0,0 +1,57 @@ +using SqlSugar; +using System; + +namespace New_College.Model.Models +{ + public class Guestbook + { + + /// + /// 留言表 + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int id { get; set; } + + /// 博客ID + /// + /// + public int? blogId { get; set; } + /// 创建时间 + /// + /// + public DateTime createdate { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string username { get; set; } + + /// 手机 + /// + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string phone { get; set; } + /// qq + /// + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string QQ { get; set; } + + /// 留言内容 + /// + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string body { get; set; } + /// ip地址 + /// + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string ip { get; set; } + + /// 是否显示在前台,0否1是 + /// + /// + public bool isshow { get; set; } + + [SugarColumn(IsIgnore = true)] + public BlogArticle blogarticle { get; set; } + } +} diff --git a/New_College.Model/Models/Module.cs b/New_College.Model/Models/Module.cs new file mode 100644 index 0000000..1b1c91b --- /dev/null +++ b/New_College.Model/Models/Module.cs @@ -0,0 +1,95 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// 接口API地址信息表 + /// + public class Module + { + public Module() + { + //this.ChildModule = new List(); + //this.ModulePermission = new List(); + //this.RoleModulePermission = new List(); + } + /// + /// ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + /// + ///获取或设置是否禁用,逻辑上的删除,非物理删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + /// + /// 父ID + /// + [SugarColumn(IsNullable = true)] + public int? ParentId { get; set; } + /// + /// 名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string Name { get; set; } + /// + /// 菜单链接地址 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string LinkUrl { get; set; } + /// + /// 区域名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string Area { get; set; } + /// + /// 控制器名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string Controller { get; set; } + /// + /// Action名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string Action { get; set; } + /// + /// 图标 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string Icon { get; set; } + /// + /// 菜单编号 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)] + public string Code { get; set; } + /// + /// 排序 + /// + public int OrderSort { get; set; } + /// + /// /描述 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string Description { get; set; } + /// + /// 是否是右侧菜单 + /// + public bool IsMenu { get; set; } + /// + /// 是否激活 + /// + public bool Enabled { get; set; } + + //public virtual Module ParentModule { get; set; } + //public virtual ICollection ChildModule { get; set; } + //public virtual ICollection ModulePermission { get; set; } + //public virtual ICollection RoleModulePermission { get; set; } + } +} diff --git a/New_College.Model/Models/ModulePermission.cs b/New_College.Model/Models/ModulePermission.cs new file mode 100644 index 0000000..b9024ff --- /dev/null +++ b/New_College.Model/Models/ModulePermission.cs @@ -0,0 +1,34 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// 菜单与按钮关系表 + /// + public class ModulePermission : RootEntity + { + + /// + ///获取或设置是否禁用,逻辑上的删除,非物理删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + /// + /// 菜单ID + /// + public int ModuleId { get; set; } + /// + /// 按钮ID + /// + public int PermissionId { get; set; } + + + //public virtual Module Module { get; set; } + //public virtual Permission Permission { get; set; } + } +} diff --git a/New_College.Model/Models/Modules.cs b/New_College.Model/Models/Modules.cs new file mode 100644 index 0000000..f75c213 --- /dev/null +++ b/New_College.Model/Models/Modules.cs @@ -0,0 +1,121 @@ +using SqlSugar; +using System; + +namespace New_College.Model.Models +{ + /// + /// 接口API地址信息表 + /// + public class Modules + { + public Modules() + { + //this.ChildModule = new List(); + //this.ModulePermission = new List(); + //this.RoleModulePermission = new List(); + } + /// + /// ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + /// + ///获取或设置是否禁用,逻辑上的删除,非物理删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + /// + /// 父ID + /// + [SugarColumn(IsNullable = true)] + public int? ParentId { get; set; } + /// + /// 名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string Name { get; set; } + /// + /// 菜单链接地址 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string LinkUrl { get; set; } + /// + /// 区域名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 2000, IsNullable = true)] + public string Area { get; set; } + /// + /// 控制器名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 2000, IsNullable = true)] + public string Controller { get; set; } + /// + /// Action名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 2000, IsNullable = true)] + public string Action { get; set; } + /// + /// 图标 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string Icon { get; set; } + /// + /// 菜单编号 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)] + public string Code { get; set; } + /// + /// 排序 + /// + public int OrderSort { get; set; } + /// + /// /描述 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string Description { get; set; } + /// + /// 是否是右侧菜单 + /// + public bool IsMenu { get; set; } + /// + /// 是否激活 + /// + public bool Enabled { get; set; } + /// + /// 创建ID + /// + [SugarColumn(IsNullable = true)] + public int? CreateId { get; set; } + /// + /// 创建者 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string CreateBy { get; set; } + /// + /// 创建时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime CreateTime { get; set; } + /// + /// 修改ID + /// + [SugarColumn(IsNullable = true)] + public int? ModifyId { get; set; } + /// + /// 修改者 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string ModifyBy { get; set; } + /// + /// 修改时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? ModifyTime { get; set; } = DateTime.Now; + + //public virtual Module ParentModule { get; set; } + //public virtual ICollection ChildModule { get; set; } + //public virtual ICollection ModulePermission { get; set; } + //public virtual ICollection RoleModulePermission { get; set; } + } +} diff --git a/New_College.Model/Models/N_AgentCourse.cs b/New_College.Model/Models/N_AgentCourse.cs new file mode 100644 index 0000000..3963bca --- /dev/null +++ b/New_College.Model/Models/N_AgentCourse.cs @@ -0,0 +1,24 @@ +using New_College.Common; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class N_AgentCourse : RootEntity + { + public string Title { get; set; } + + public CardTypeEnum cardType { get; set; } + + /// + /// 产品教程,赚钱攻略,操作指南 + /// + public int Type { get; set; } + + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Content { get; set; } + + } +} diff --git a/New_College.Model/Models/N_MaterialLibrary.cs b/New_College.Model/Models/N_MaterialLibrary.cs new file mode 100644 index 0000000..9571c75 --- /dev/null +++ b/New_College.Model/Models/N_MaterialLibrary.cs @@ -0,0 +1,29 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 素材库 + /// + public class N_MaterialLibrary : RootEntity + { + + public string Title { get; set; } + + /// + /// 素材封面 + /// + public string Src { get; set; } + + /// + /// 素材内容 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Content { get; set; } + + + } +} diff --git a/New_College.Model/Models/OperateLog.cs b/New_College.Model/Models/OperateLog.cs new file mode 100644 index 0000000..5878ee5 --- /dev/null +++ b/New_College.Model/Models/OperateLog.cs @@ -0,0 +1,60 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// 日志记录 + /// + public class OperateLog : RootEntity + { + + + /// + /// 区域名 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string Area { get; set; } + /// + /// 区域控制器名 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string Controller { get; set; } + /// + /// Action名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string Action { get; set; } + /// + /// IP地址 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string IPAddress { get; set; } + /// + /// 描述 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string Description { get; set; } + /// + /// 登录时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? LogTime { get; set; } + /// + /// 登录名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = int.MaxValue, IsNullable = true)] + public string LoginName { get; set; } + /// + /// 用户ID + /// + public int UserId { get; set; } + + [SugarColumn(IsIgnore = true)] + public virtual sysUserInfo User { get; set; } + } +} diff --git a/New_College.Model/Models/PasswordLib.cs b/New_College.Model/Models/PasswordLib.cs new file mode 100644 index 0000000..df1cb74 --- /dev/null +++ b/New_College.Model/Models/PasswordLib.cs @@ -0,0 +1,60 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// 密码库表 + /// + [SugarTable("PasswordLib", "WMBLOG_MSSQL_2")] + public class PasswordLib + { + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int PLID { get; set; } + + /// + ///获取或设置是否禁用,逻辑上的删除,非物理删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string plURL { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string plPWD { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string plAccountName { get; set; } + + [SugarColumn(IsNullable = true)] + public int? plStatus { get; set; } + + [SugarColumn(IsNullable = true)] + public int? plErrorCount { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string plHintPwd { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string plHintquestion { get; set; } + + [SugarColumn(IsNullable = true)] + public DateTime? plCreateTime { get; set; } + + [SugarColumn(IsNullable = true)] + public DateTime? plUpdateTime { get; set; } + + [SugarColumn(IsNullable = true)] + public DateTime? plLastErrTime { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string test { get; set; } + + + } +} diff --git a/New_College.Model/Models/Permission.cs b/New_College.Model/Models/Permission.cs new file mode 100644 index 0000000..1a9bbf2 --- /dev/null +++ b/New_College.Model/Models/Permission.cs @@ -0,0 +1,150 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// 路由菜单表 + /// + public class Permission + { + public Permission() + { + //this.ModulePermission = new List(); + //this.RoleModulePermission = new List(); + } + + /// + /// ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + /// + /// 菜单执行Action名 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string Code { get; set; } + /// + /// 菜单显示名(如用户页、编辑(按钮)、删除(按钮)) + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string Name { get; set; } + /// + /// 是否是按钮 + /// + public bool IsButton { get; set; } = false; + + /// + /// 组件类型(0,为button或菜单,1为下拉框,2...) + /// + public int ModuleType { get; set; } = 0; + /// + /// 是否是隐藏菜单 + /// + [SugarColumn(IsNullable = true)] + public bool? IsHide { get; set; } = false; + /// + /// 是否keepAlive + /// + [SugarColumn(IsNullable = true)] + public bool? IskeepAlive { get; set; } = false; + + + /// + /// 按钮事件 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string Func { get; set; } + + + + /// + /// 上一级菜单(0表示上一级无菜单) + /// + public int Pid { get; set; } + + + /// + /// 接口api + /// + public int Mid { get; set; } + + /// + /// 排序 + /// + public int OrderSort { get; set; } + /// + /// 菜单图标 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string Icon { get; set; } + /// + /// 菜单描述 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string Description { get; set; } + /// + /// 激活状态 + /// + public bool Enabled { get; set; } + /// + /// 创建ID + /// + [SugarColumn(IsNullable = true)] + public int? CreateId { get; set; } + /// + /// 创建者 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string CreateBy { get; set; } + /// + /// 创建时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? CreateTime { get; set; } = DateTime.Now; + /// + /// 修改ID + /// + [SugarColumn(IsNullable = true)] + public int? ModifyId { get; set; } + /// + /// 修改者 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string ModifyBy { get; set; } + /// + /// 修改时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? ModifyTime { get; set; } = DateTime.Now; + + /// + ///获取或设置是否禁用,逻辑上的删除,非物理删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + + + + + [SugarColumn(IsIgnore = true)] + public List PidArr { get; set; } + [SugarColumn(IsIgnore = true)] + public List PnameArr { get; set; } = new List(); + [SugarColumn(IsIgnore = true)] + public List PCodeArr { get; set; } = new List(); + [SugarColumn(IsIgnore = true)] + public string MName { get; set; } + + [SugarColumn(IsIgnore = true)] + public bool hasChildren { get; set; } = true; + + //public virtual ICollection ModulePermission { get; set; } + //public virtual ICollection RoleModulePermission { get; set; } + } +} diff --git a/New_College.Model/Models/Role.cs b/New_College.Model/Models/Role.cs new file mode 100644 index 0000000..ff29a56 --- /dev/null +++ b/New_College.Model/Models/Role.cs @@ -0,0 +1,92 @@ +using SqlSugar; +using System; + +namespace New_College.Model.Models +{ + /// + /// 角色表 + /// + public class Role + { + public Role() + { + OrderSort = 1; + CreateTime = DateTime.Now; + ModifyTime = DateTime.Now; + IsDeleted = false; + } + public Role(string name) + { + Name = name; + Description = ""; + OrderSort = 1; + Enabled = true; + CreateTime = DateTime.Now; + ModifyTime = DateTime.Now; + + } + + /// + /// ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + + /// + ///获取或设置是否禁用,逻辑上的删除,非物理删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + /// + /// 角色名 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string Name { get; set; } + /// + ///描述 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string Description { get; set; } + /// + ///排序 + /// + public int OrderSort { get; set; } + /// + /// 是否激活 + /// + public bool Enabled { get; set; } + /// + /// 创建ID + /// + [SugarColumn(IsNullable = true)] + public int? CreateId { get; set; } + /// + /// 创建者 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string CreateBy { get; set; } + /// + /// 创建时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? CreateTime { get; set; } = DateTime.Now; + /// + /// 修改ID + /// + [SugarColumn(IsNullable = true)] + public int? ModifyId { get; set; } + /// + /// 修改者 + /// + [SugarColumn(IsNullable = true)] + public string ModifyBy { get; set; } + /// + /// 修改时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? ModifyTime { get; set; } = DateTime.Now; + + + } +} diff --git a/New_College.Model/Models/RoleModulePermission.cs b/New_College.Model/Models/RoleModulePermission.cs new file mode 100644 index 0000000..3819328 --- /dev/null +++ b/New_College.Model/Models/RoleModulePermission.cs @@ -0,0 +1,82 @@ +using SqlSugar; +using System; + +namespace New_College.Model.Models +{ + /// + /// 按钮跟权限关联表 + /// + public class RoleModulePermission + { + public RoleModulePermission() + { + //this.Role = new Role(); + //this.Module = new Module(); + //this.Permission = new Permission(); + + } + + /// + /// ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + /// + ///获取或设置是否禁用,逻辑上的删除,非物理删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + /// + /// 角色ID + /// + public int RoleId { get; set; } + /// + /// 菜单ID + /// + public int ModuleId { get; set; } + /// + /// api ID + /// + [SugarColumn(IsNullable = true)] + public int? PermissionId { get; set; } + /// + /// 创建ID + /// + [SugarColumn(IsNullable = true)] + public int? CreateId { get; set; } + /// + /// 创建者 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string CreateBy { get; set; } + /// + /// 创建时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? CreateTime { get; set; } = DateTime.Now; + /// + /// 修改ID + /// + [SugarColumn(IsNullable = true)] + public int? ModifyId { get; set; } + /// + /// 修改者 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string ModifyBy { get; set; } + /// + /// 修改时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? ModifyTime { get; set; } = DateTime.Now; + + // 下边三个实体参数,只是做传参作用,所以忽略下 + [SugarColumn(IsIgnore = true)] + public Role Role { get; set; } + [SugarColumn(IsIgnore = true)] + public Modules Module { get; set; } + [SugarColumn(IsIgnore = true)] + public Permission Permission { get; set; } + } +} diff --git a/New_College.Model/Models/RootEntity.cs b/New_College.Model/Models/RootEntity.cs new file mode 100644 index 0000000..2df5b49 --- /dev/null +++ b/New_College.Model/Models/RootEntity.cs @@ -0,0 +1,100 @@ +using SqlSugar; +using System; +using YIJIYI.Core.Common.Helper; + +namespace New_College.Model.Models +{ + /// + /// 带创建人BaseModel + /// + public partial class RootEntity + { + /// + /// ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + + /// + ///排序 + /// + public int OrderSort { get; set; } + + /// + /// 创建ID + /// + [SugarColumn(IsNullable = true)] + public int? CreateId { get; set; } + /// + /// 创建者 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)] + public string CreateBy { get; set; } + /// + /// 创建时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? CreateTime { get; set; } =TimeUtil.GetCstDateTime(); + /// + /// 修改ID + /// + [SugarColumn(IsNullable = true)] + public int? ModifyId { get; set; } + /// + /// 修改者 + /// + [SugarColumn(IsNullable = true)] + public string ModifyBy { get; set; } + /// + /// 修改时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? ModifyTime { get; set; } = TimeUtil.GetCstDateTime(); + + /// + /// 是否删除 + /// + public bool IsDelete { get; set; } + + } + + /// + /// 不带创建人BaseModel + /// + public partial class EntityModel + { + + /// + /// ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + + + /// + ///排序 + /// + public int OrderSort { get; set; } + + + /// + /// 创建时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? CreateTime { get; set; } = TimeUtil.GetCstDateTime(); + /// + /// + /// 修改时间 + /// + [SugarColumn(IsNullable = true)] + public DateTime? ModifyTime { get; set; } = TimeUtil.GetCstDateTime(); + + /// + /// 是否删除 + /// + public bool IsDelete { get; set; } + + } + +} \ No newline at end of file diff --git a/New_College.Model/Models/SysRegion.cs b/New_College.Model/Models/SysRegion.cs new file mode 100644 index 0000000..8a84d45 --- /dev/null +++ b/New_College.Model/Models/SysRegion.cs @@ -0,0 +1,52 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 省市区 + /// + public class SysRegion + { + /// + /// 主键ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int KeyId { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 40, IsNullable = true)] + public string RegionCode { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 40, IsNullable = true)] + public string RegionName { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 40, IsNullable = true)] + public string ParentCode { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 40, IsNullable = true)] + public string SimpleName { get; set; } + + public int Level { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 40, IsNullable = true)] + public string CityCode { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 40, IsNullable = true)] + public string ZipCode { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)] + public string MerName { get; set; } + + public double Lng { get; set; } + + public double Lat { get; set; } + + [SugarColumn(ColumnDataType = "nvarchar", Length = 40, IsNullable = true)] + public string PinYin { get; set; } + + [SugarColumn(IsNullable = true)] + public int IsOpen { get; set; } + } +} diff --git a/New_College.Model/Models/T_BatchTypeInfo.cs b/New_College.Model/Models/T_BatchTypeInfo.cs new file mode 100644 index 0000000..88be959 --- /dev/null +++ b/New_College.Model/Models/T_BatchTypeInfo.cs @@ -0,0 +1,37 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 批次表 + /// + public class T_BatchTypeInfo : EntityModel + { + /// + /// 省份ID + /// + [SugarColumn(IsNullable = true)] + public int AreaId { get; set; } + + /// + /// 省份名称 + /// + [SugarColumn(IsNullable = true)] + public string AreaName { get; set; } + + /// + /// 批次名称 + /// + [SugarColumn(IsNullable = true)] + public string BatchName { get; set; } + + /// + /// 年份 + /// + [SugarColumn(IsNullable = true)] + public int Year { get; set; } + } +} diff --git a/New_College.Model/Models/T_Batchline.cs b/New_College.Model/Models/T_Batchline.cs new file mode 100644 index 0000000..e472076 --- /dev/null +++ b/New_College.Model/Models/T_Batchline.cs @@ -0,0 +1,47 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class T_Batchline : EntityModel + { + + /// + /// 省份id + /// + [SugarColumn(IsNullable = true)] + public int AreaId { get; set; } + + /// + /// 省份名称 + /// + [SugarColumn(IsNullable = true)] + public string AreaName { get; set; } + + /// + /// 学界 + /// + [SugarColumn(IsNullable = true)] + public int Year { get; set; } + + /// + /// 分数 + /// + [SugarColumn(IsNullable = true)] + public int Average { get; set; } + + /// + /// 类型 + /// + [SugarColumn(IsNullable = true)] + public string Type_name { get; set; } + + /// + /// 批次名称 + /// + [SugarColumn(IsNullable = true)] + public string Batch_name { get; set; } + } +} diff --git a/New_College.Model/Models/T_EnrollmentBatch.cs b/New_College.Model/Models/T_EnrollmentBatch.cs new file mode 100644 index 0000000..f14807e --- /dev/null +++ b/New_College.Model/Models/T_EnrollmentBatch.cs @@ -0,0 +1,41 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + + public class T_EnrollmentBatch : EntityModel + { + /// + /// 省份id + /// + [SugarColumn(IsNullable = true)] + public int AreaId { get; set; } + /// + /// 省份名称 + /// + [SugarColumn(IsNullable = true)] + public string AreaName { get; set; } + /// + /// 年份 + /// + [SugarColumn(IsNullable = true)] + public int Year { get; set; } + + [SugarColumn(IsNullable = true)] + public string Batch_name { get; set; } + + /// + /// 本科1,专科0,其他-1 + /// + [SugarColumn(IsNullable = true)] + public int Subjectlevel { get; set; } + /// + /// 文理 不分文理 + /// + [SugarColumn(IsNullable = true)] + public string Type { get; set; } + } +} diff --git a/New_College.Model/Models/T_EnrollmentPlane.cs b/New_College.Model/Models/T_EnrollmentPlane.cs new file mode 100644 index 0000000..35f8cd4 --- /dev/null +++ b/New_College.Model/Models/T_EnrollmentPlane.cs @@ -0,0 +1,28 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class T_EnrollmentPlane : EntityModel + { + /// + /// 计划名称 + /// + [SugarColumn(IsNullable = true)] + public string EnrollmentName { get; set; } + + /// + /// 省份Id + /// + [SugarColumn(IsNullable = true)] + public int Area_Id { get; set; } + + /// + /// 年份 + /// + [SugarColumn(IsNullable = true)] + public int Years { get; set; } + } +} diff --git a/New_College.Model/Models/T_EnrollmentPlanedesc.cs b/New_College.Model/Models/T_EnrollmentPlanedesc.cs new file mode 100644 index 0000000..9e24f4f --- /dev/null +++ b/New_College.Model/Models/T_EnrollmentPlanedesc.cs @@ -0,0 +1,117 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class T_EnrollmentPlanedesc : EntityModel + { + + /// + /// 招生计划id + /// + [SugarColumn(IsNullable = true)] + public int PlanId { get; set; } + /// + /// 招生计划批次id + /// + [SugarColumn(IsNullable = true)] + public int BatchtypeId { get; set; } + /// + /// 招生院校id + /// + [SugarColumn(IsNullable = true)] + public int UniversityId { get; set; } + ///// + ///// 招生专业分组id + ///// + //public int MajorgroupId { get; set; } + + //[SugarColumn(IsNullable = true)]-------------------------------------- + //public string Majorgroup { get; set; } + /// + /// 选科限制:新高考(物理,化学,生物),老高考(无);新高考省份:江苏 湖北 福建 辽宁 广东 重庆 河北 湖南 + /// + [SugarColumn(IsNullable = true)] + public string Subjectclaim { get; set; } + /// + /// 计划招生数 + /// + [SugarColumn(IsNullable = true)] + public int Plancount { get; set; } + /// + /// 专业学费 + /// + [SugarColumn(IsNullable = true)] + public string Tuitionfee { get; set; } + /// + /// 语言限制-------------------------------------- + /// + [SugarColumn(IsNullable = true)] + public string Languageclaim { get; set; } + /// + /// 标签匹配 + /// + [SugarColumn(IsNullable = true)] + public string Tags { get; set; } + /// + /// 分数线 + /// + [SugarColumn(IsNullable = true)] + public float Scoreline { get; set; } + /// + /// 备注 + /// + [SugarColumn(ColumnDataType = "longtext", Length = int.MaxValue, IsNullable = true)] + public string Remark { get; set; } + + /// + /// 专业学年制(4年,3年) + /// + [SugarColumn(IsNullable = true)] + public string Studyyears { get; set; } + + /// + /// 专业ID -------------------------------------- + /// + [SugarColumn(IsNullable = true)] + public int MajorId { get; set; } + + /// + /// 专业名称-》招生计划名称 + /// + [SugarColumn(IsNullable = true)] + public string MajorName { get; set; } + + ///// + ///// 学校最低分-------------------------------------- + ///// + //[SugarColumn(IsNullable = true)] + //public float? schoollowscore { get; set; } + + ///// + ///// 学校省控线-------------------------------------- + ///// + //[SugarColumn(IsNullable = true)] + //public float? schoolprovinline { get; set; } + + /// + /// 专业平均分 + /// + [SugarColumn(IsNullable = true)] + public float? majoraverage { get; set; } + + ///// + ///// 最高分-------------------------------------- + ///// + //[SugarColumn(IsNullable = true)] + //public float? heightscore { get; set; } + + /// + /// 位次 + /// + [SugarColumn(IsNullable = true)] + public float? scorepostion { get; set; } + } +} diff --git a/New_College.Model/Models/T_GearInfo.cs b/New_College.Model/Models/T_GearInfo.cs new file mode 100644 index 0000000..a9d4f71 --- /dev/null +++ b/New_College.Model/Models/T_GearInfo.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class T_GearInfo : EntityModel + { + /// + /// 招生计划Id + /// + public int PlanId { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 类型 不分文理(0),理工类(1),文史类(2),default(1) + /// + public int GearType { get; set; } + + /// + /// 档位名称 + /// + public string GearName { get; set; } + + /// + /// 最高分 + /// + public decimal GearMaxScore { get; set; } + + /// + /// 最低分 + /// + public decimal GearMinScore { get; set; } + } +} diff --git a/New_College.Model/Models/T_LongIdMap.cs b/New_College.Model/Models/T_LongIdMap.cs new file mode 100644 index 0000000..858d5fb --- /dev/null +++ b/New_College.Model/Models/T_LongIdMap.cs @@ -0,0 +1,18 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class T_LongIdMap : EntityModel + { + [SugarColumn(IsNullable = true)] + public string longid { get; set; } + [SugarColumn(IsNullable = true)] + public int newid { get; set; } + + [SugarColumn(IsNullable = true)] + public string tablename { get; set; } + } +} diff --git a/New_College.Model/Models/T_PlanMapTag.cs b/New_College.Model/Models/T_PlanMapTag.cs new file mode 100644 index 0000000..03caa9a --- /dev/null +++ b/New_College.Model/Models/T_PlanMapTag.cs @@ -0,0 +1,22 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class T_PlanMapTag : EntityModel + { + /// + /// 计划名称 + /// + [SugarColumn(IsNullable = true)] + public string Name { get; set; } + + /// + /// 标签 + /// + [SugarColumn(IsNullable = true)] + public string Tag { get; set; } + } +} diff --git a/New_College.Model/Models/T_RegionScore.cs b/New_College.Model/Models/T_RegionScore.cs new file mode 100644 index 0000000..aa4a7a4 --- /dev/null +++ b/New_College.Model/Models/T_RegionScore.cs @@ -0,0 +1,33 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class T_RegionScore : EntityModel + { + /// + /// 省份Id + /// + [SugarColumn(IsNullable = true)] + public int AreaId { get; set; } + + /// + /// 省份名称 + /// + public string AreaName { get; set; } + + /// + /// 年份 + /// + [SugarColumn(IsNullable = true)] + public int Year { get; set; } + + /// + /// 满分 + /// + [SugarColumn(IsNullable = true)] + public float Score { get; set; } + } +} diff --git a/New_College.Model/Models/TasksQz.cs b/New_College.Model/Models/TasksQz.cs new file mode 100644 index 0000000..6f33a78 --- /dev/null +++ b/New_College.Model/Models/TasksQz.cs @@ -0,0 +1,74 @@ +using SqlSugar; +using System; + +namespace New_College.Model.Models +{ + /// + /// 任务计划表 + /// + public class TasksQz : RootEntity + { + /// + /// 任务名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string Name { get; set; } + /// + /// 任务分组 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string JobGroup { get; set; } + /// + /// 任务运行时间表达式 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string Cron { get; set; } + /// + /// 任务所在DLL对应的程序集名称 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string AssemblyName { get; set; } + /// + /// 任务所在类 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)] + public string ClassName { get; set; } + /// + /// 任务描述 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 1000, IsNullable = true)] + public string Remark { get; set; } + /// + /// 执行次数 + /// + public int RunTimes { get; set; } + /// + /// 开始时间 + /// + public DateTime? BeginTime { get; set; } + /// + /// 结束时间 + /// + public DateTime? EndTime { get; set; } + /// + /// 触发器类型(0、simple 1、cron) + /// + public int TriggerType { get; set; } + /// + /// 执行间隔时间, 秒为单位 + /// + public int IntervalSecond { get; set; } + /// + /// 是否启动 + /// + public bool IsStart { get; set; } = false; + /// + /// 执行传参 + /// + public string JobParams { get; set; } + + + + + } +} diff --git a/New_College.Model/Models/TestModels.cs b/New_College.Model/Models/TestModels.cs new file mode 100644 index 0000000..ff4254e --- /dev/null +++ b/New_College.Model/Models/TestModels.cs @@ -0,0 +1,13 @@ +namespace New_College.Model.Models +{ + + public class TestMuchTableResult + { + public string moduleName { get; set; } + public string permName { get; set; } + public int rid { get; set; } + public int mid { get; set; } + public int? pid { get; set; } + + } +} diff --git a/New_College.Model/Models/Test_CategoryInfo.cs b/New_College.Model/Models/Test_CategoryInfo.cs new file mode 100644 index 0000000..d7306d6 --- /dev/null +++ b/New_College.Model/Models/Test_CategoryInfo.cs @@ -0,0 +1,32 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 测评分类表 + /// + public class Test_CategoryInfo : RootEntity + { + /// + /// 分类名称 + /// + public string Name { get; set; } + + /// + /// 解释 + /// + [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true, Length = 1000)] + public string Desc { get; set; } + + + /// + /// 解释详情 + /// + [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true, Length = 1000)] + public string Detail { get; set; } + } + +} diff --git a/New_College.Model/Models/Test_CycleTimeInfo.cs b/New_College.Model/Models/Test_CycleTimeInfo.cs new file mode 100644 index 0000000..956da29 --- /dev/null +++ b/New_College.Model/Models/Test_CycleTimeInfo.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class Test_CycleTimeInfo : EntityModel + { + /// + /// Vip卡类型 + /// + public int VipCardTypeId { get; set; } + + /// + /// 测评分类Id + /// + public int CategoryId { get; set; } + + /// + /// 周期名称 + /// + public string CycleName { get; set; } + + public int IsOpen { get; set; } = 1; + + + } +} diff --git a/New_College.Model/Models/Test_HollandResultInfo.cs b/New_College.Model/Models/Test_HollandResultInfo.cs new file mode 100644 index 0000000..a394fe2 --- /dev/null +++ b/New_College.Model/Models/Test_HollandResultInfo.cs @@ -0,0 +1,74 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 个性倾向结果表 + /// + public class Test_HollandResultInfo : RootEntity + { + /// + /// 学生Id + /// + public int StudentId { get; set; } + + /// + /// 周期Id + /// + public int CycleTimeId { get; set; } + + /// + /// 年级名称 + /// + public string GradeName { get; set; } + + /// + /// 班级名称 + /// + public string ClassName { get; set; } + + public string Interest { get; set; } + + public string Specialty { get; set; } + + /// + /// 喜欢的学科 + /// + public string LikeSubject { get; set; } + + /// + /// + /// + public string LikeCareer { get; set; } + + public string TargeUniversity { get; set; } + + public string AfterCareer { get; set; } + + /// + /// 是否出国留学 + /// + public int IsForeign { get; set; } + + /// + /// 结果 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 1000, IsNullable = true)] + public string Result { get; set; } + + /// + /// Tag标签 + /// + public string TagResult { get; set; } + + /// + /// 自选标签 + /// + public string SelectResult { get; set; } + + + } +} diff --git a/New_College.Model/Models/Test_MBTIMapResult.cs b/New_College.Model/Models/Test_MBTIMapResult.cs new file mode 100644 index 0000000..ec0a806 --- /dev/null +++ b/New_College.Model/Models/Test_MBTIMapResult.cs @@ -0,0 +1,51 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class Test_MBTIMapResult : EntityModel + { + /// + /// 标签 + /// + public string Tag { get; set; } + + /// + /// 适合的领域 + /// + public string Domain { get; set; } + + /// + /// 性格特征解读 + /// + public string Interpretation { get; set; } + + /// + /// 优势 + /// + public string Advantage { get; set; } + + /// + /// 劣势 + /// + public string Disadvantage { get; set; } + + /// + /// 偏好的活动特质 + /// + public string Feature { get; set; } + + /// + /// 可能存在的盲点 + /// + [SugarColumn(Length = 1000, IsNullable = true, ColumnDataType = "nvarchar")] + public string BlindSpot { get; set; } + + /// + /// 建议 + /// + public string Recommend { get; set; } + } +} diff --git a/New_College.Model/Models/Test_PsychMeasurementInfo.cs b/New_College.Model/Models/Test_PsychMeasurementInfo.cs new file mode 100644 index 0000000..2d236e1 --- /dev/null +++ b/New_College.Model/Models/Test_PsychMeasurementInfo.cs @@ -0,0 +1,51 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 测评结果表 生涯能力和心理测量 + /// + public class Test_PsychMeasurementInfo : RootEntity + { + /// + /// 学生Id + /// + public int StudentId { get; set; } + + /// + /// 周期Id + /// + public int CycleTimeId { get; set; } + + /// + /// 年级名称 + /// + [SugarColumn(IsNullable = true)] + public string GradeName { get; set; } + + /// + /// 班级名称 + /// + [SugarColumn(IsNullable = true)] + public string ClassName { get; set; } + + /// + /// 分类Id + /// + public int CategoryId { get; set; } + + /// + /// 结果 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 1000, IsNullable = true)] + public string Result { get; set; } + + /// + /// 是否打开 + /// + public int IsOpen { get; set; } = 1; + } +} diff --git a/New_College.Model/Models/Test_QuestionInfo.cs b/New_College.Model/Models/Test_QuestionInfo.cs new file mode 100644 index 0000000..1454aeb --- /dev/null +++ b/New_College.Model/Models/Test_QuestionInfo.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 问题表 + /// + public class Test_QuestionInfo : EntityModel + { + /// + /// 问题分类Id + /// + public int CategoryId { get; set; } + + /// + /// 问题类型Id + /// + public int QuestionTypeId { get; set; } + + /// + /// 问题 + /// + public string QuestionTitle { get; set; } + + /// + /// 问题类型 + /// + public string QuestionType { get; set; } + + /// + /// 问题Tag + /// + public string QuestionTag { get; set; } + + /// + /// 版本 + /// + public string Version { get; set; } + + /// + /// 正反记分 1是正向记分 0是反向记分 + /// + public int IsAddScore { get; set; } + } +} diff --git a/New_College.Model/Models/Test_QuestionTypeInfo.cs b/New_College.Model/Models/Test_QuestionTypeInfo.cs new file mode 100644 index 0000000..8c03001 --- /dev/null +++ b/New_College.Model/Models/Test_QuestionTypeInfo.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 问题类型表 + /// + public class Test_QuestionTypeInfo : RootEntity + { + /// + /// 问题类型 + /// + public string Name { get; set; } + + /// + /// 分类Id + /// + public int CategoryId { get; set; } + } +} diff --git a/New_College.Model/Models/Topic.cs b/New_College.Model/Models/Topic.cs new file mode 100644 index 0000000..40659a7 --- /dev/null +++ b/New_College.Model/Models/Topic.cs @@ -0,0 +1,45 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// Tibug 类别 + /// + public class Topic:RootEntity + { + public Topic() + { + this.TopicDetail = new List(); + this.tUpdatetime = DateTime.Now; + } + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string tLogo { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string tName { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 400, IsNullable = true)] + public string tDetail { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string tAuthor { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string tSectendDetail { get; set; } + + public bool tIsDelete { get; set; } + public int tRead { get; set; } + public int tCommend { get; set; } + public int tGood { get; set; } + public DateTime tCreatetime { get; set; } + public DateTime tUpdatetime { get; set; } + + [SugarColumn(IsIgnore = true)] + public virtual ICollection TopicDetail { get; set; } + } +} diff --git a/New_College.Model/Models/TopicDetail.cs b/New_College.Model/Models/TopicDetail.cs new file mode 100644 index 0000000..9c62238 --- /dev/null +++ b/New_College.Model/Models/TopicDetail.cs @@ -0,0 +1,53 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// Tibug 博文 + /// + public class TopicDetail : RootEntity + { + public TopicDetail() + { + this.tdUpdatetime = DateTime.Now; + } + + public int TopicId { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string tdLogo { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string tdName { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = int.MaxValue , IsNullable = true)] + public string tdContent { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 400, IsNullable = true)] + public string tdDetail { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string tdSectendDetail { get; set; } + + public bool tdIsDelete { get; set; } = false; + public int tdRead { get; set; } + public int tdCommend { get; set; } + public int tdGood { get; set; } + public DateTime tdCreatetime { get; set; } + public DateTime tdUpdatetime { get; set; } + public int tdTop { get; set; } + + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string tdAuthor { get; set; } + + + [SugarColumn(IsIgnore = true)] + public virtual Topic Topic { get; set; } + + } +} diff --git a/New_College.Model/Models/U_ProbabilityHistory.cs b/New_College.Model/Models/U_ProbabilityHistory.cs new file mode 100644 index 0000000..e247385 --- /dev/null +++ b/New_College.Model/Models/U_ProbabilityHistory.cs @@ -0,0 +1,47 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 概率历史 + /// + public class U_ProbabilityHistory : EntityModel + { + /// + ///用户Id + /// + public int CustomerId { get; set; } + + /// + /// 院校Id + /// + public int UniversityId { get; set; } + + /// + /// 概率 + /// + [SugarColumn(IsNullable = true)] + public int Probability { get; set; } + + /// + /// 预估分数 + /// + [SugarColumn(IsNullable = true)] + public float EstimateScore { get; set; } + + /// + /// 区域Id + /// + [SugarColumn(IsNullable = true)] + public int AreaId { get; set; } + + /// + /// 年份 + /// + [SugarColumn(IsNullable = true)] + public int Year { get; set; } + } +} diff --git a/New_College.Model/Models/U_VolunteerTable.cs b/New_College.Model/Models/U_VolunteerTable.cs new file mode 100644 index 0000000..0fea94c --- /dev/null +++ b/New_College.Model/Models/U_VolunteerTable.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 志愿Table + /// + public class U_VolunteerTable : EntityModel + { + /// + /// 用户ID + /// + public int CustomerId { get; set; } + + /// + /// 志愿表名称 + /// + public string VolunteerTableName { get; set; } + } +} diff --git a/New_College.Model/Models/U_VolunteerTableDetail.cs b/New_College.Model/Models/U_VolunteerTableDetail.cs new file mode 100644 index 0000000..d8ed9ef --- /dev/null +++ b/New_College.Model/Models/U_VolunteerTableDetail.cs @@ -0,0 +1,39 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 志愿表详情 + /// + public class U_VolunteerTableDetail : EntityModel + { + /// + /// 志愿表Id + /// + public int VolunteerTableId { get; set; } + + /// + /// 院校Id + /// + public int UniversityId { get; set; } + + /// + /// 院校名称 + /// + public string UniversityName { get; set; } + + /// + /// 院校编码 + /// + [SugarColumn(IsNullable = true)] + public string UniversityCode { get; set; } + + /// + /// 招生计划Id列表逗号隔开 + /// + public string PlanMajorIds { get; set; } + } +} diff --git a/New_College.Model/Models/UserRole.cs b/New_College.Model/Models/UserRole.cs new file mode 100644 index 0000000..621959f --- /dev/null +++ b/New_College.Model/Models/UserRole.cs @@ -0,0 +1,45 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// 用户跟角色关联表 + /// + public class UserRole : RootEntity + { + public UserRole() { } + + public UserRole(int uid, int rid) + { + UserId = uid; + RoleId = rid; + CreateTime = DateTime.Now; + IsDeleted = false; + CreateId = uid; + CreateTime = DateTime.Now; + } + + + + /// + ///获取或设置是否禁用,逻辑上的删除,非物理删除 + /// + [SugarColumn(IsNullable = true)] + public bool? IsDeleted { get; set; } + /// + /// 用户ID + /// + public int UserId { get; set; } + /// + /// 角色ID + /// + public int RoleId { get; set; } + + + } +} diff --git a/New_College.Model/Models/V_CustomerInfo.cs b/New_College.Model/Models/V_CustomerInfo.cs new file mode 100644 index 0000000..a2a8f7a --- /dev/null +++ b/New_College.Model/Models/V_CustomerInfo.cs @@ -0,0 +1,134 @@ +using New_College.Common; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class V_CustomerInfo : EntityModel + { + /// + /// 用户头像 + /// + [SugarColumn(IsNullable = true)] + public string AvatarUrl { get; set; } + + /// + /// 用户code + /// + [SugarColumn(IsNullable = true)] + public string UserCode { get; set; } + + /// + /// 小程序openid + /// + [SugarColumn(IsNullable = true)] + public string OpenId { get; set; } + + /// + /// 用户名 + /// + [SugarColumn(IsNullable = true)] + public string NickName { get; set; } + + /// + /// 性别 1男 2女 + /// + [SugarColumn(IsNullable = true)] + public int Gender { get; set; } + + /// + /// 电话 + /// + [SugarColumn(IsNullable = true)] + public string Phone { get; set; } + + /// + /// 用户密码 + /// + [SugarColumn(IsNullable = true)] + public string UserPwd { get; set; } + + /// + /// 密码混合验证字段 + /// + [SugarColumn(IsNullable = true)] + public string Salt { get; set; } + + + /// + ///学生所在学校 + /// + [SugarColumn(IsNullable = true)] + public string SchoolName { get; set; } + + /// + /// 学生所在班级 + /// + [SugarColumn(IsNullable = true)] + public string ClassName { get; set; } + /// + /// 用户类型 + /// + [SugarColumn(IsNullable = true)] + public CustomerTypeEnum CustomerType { get; set; } = CustomerTypeEnum.General; + /// + /// 省市区id + /// + [SugarColumn(IsNullable = true)] + public int AreaId { get; set; } = 0; + /// + /// 省市区名称 + /// + [SugarColumn(IsNullable = true)] + public string AreaName { get; set; } + + /// + /// 状态:0、未启用,1、启用,2、禁用 + /// + public int? Status { get; set; } = 1; + + /// + ///学生数据是否初始化(省份,选科等) + /// + public bool? Datainit { get; set; } = false; + + /// + /// 0(新高考),1(文科,理科) + /// + public int? Subject { get; set; } = 0; + + /// + /// 选科文字展示 + /// + [SugarColumn(IsNullable = true)] + public string Subjectgroup { get; set; } + + /// + /// 考生预计分数 + /// + public double? Expectedscore { get; set; } = 0; + + /// + /// 是否为VIP + /// + public bool IsVIP { get; set; } = false; + + [SugarColumn(IsNullable = true)] + public string VipCode { get; set; } + + /// + /// 是否更新分数 + /// + [SugarColumn(IsNullable = true)] + public int IsUpdateScore { get; set; } = 0; + + /// + /// 年份 + /// + [SugarColumn(IsNullable = true)] + public int Year { get; set; } + + } +} diff --git a/New_College.Model/Models/V_ExaminationPolicy.cs b/New_College.Model/Models/V_ExaminationPolicy.cs new file mode 100644 index 0000000..30a60b3 --- /dev/null +++ b/New_College.Model/Models/V_ExaminationPolicy.cs @@ -0,0 +1,35 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class V_ExaminationPolicy : EntityModel + { + /// + /// 省份id + /// + public int AreaId { get; set; } + + public string AreaName { get; set; } + + /// + /// 标题 + /// + [SugarColumn(IsNullable = true)] + public string Title { get; set; } + + /// + /// 图片 + /// + [SugarColumn(IsNullable = true)] + public string Img { get; set; } + + /// + /// 政策内容 + /// + [SugarColumn(ColumnDataType = "nvarchar", Length = 4000, IsNullable = true)] + public string Content { get; set; } + } +} diff --git a/New_College.Model/Models/V_OrderInfo.cs b/New_College.Model/Models/V_OrderInfo.cs new file mode 100644 index 0000000..05a82c6 --- /dev/null +++ b/New_College.Model/Models/V_OrderInfo.cs @@ -0,0 +1,74 @@ +using New_College.Common; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + /// + /// 此表用户绑定后添加和直接购买 + /// + public class V_OrderInfo : RootEntity + { + /// + /// 1支付宝支付 0微信支付 + /// + [SugarColumn(IsNullable = true)] + public EnumPayType PayType { get; set; } + + /// + /// 状态 + /// + public EnumOrderType Status { get; set; } + + /// + /// 价格 + /// + public decimal Price { get; set; } + + /// + /// 实付款 + /// + public decimal PayPrice { get; set; } + + /// + /// 卡Id + /// + [SugarColumn(IsNullable = true)] + public int CardId { get; set; } + + /// + /// 卡号 + /// + [SugarColumn(IsNullable = true)] + public string CardNo { get; set; } + + /// + /// 卡类型Id + /// + public int CardTypeId { get; set; } + + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// + /// + public string Name { get; set; } + + /// + /// + /// + [SugarColumn(IsNullable = true)] + public string out_trade_no { get; set; } + + /// + /// 订单号 + /// + [SugarColumn(IsNullable = true)] + public string OrderId { get; set; } + } +} diff --git a/New_College.Model/Models/V_SubjectSelect.cs b/New_College.Model/Models/V_SubjectSelect.cs new file mode 100644 index 0000000..f54b51f --- /dev/null +++ b/New_College.Model/Models/V_SubjectSelect.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class V_SubjectSelect : EntityModel + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 逗号隔开 + /// + public string SubjectSelect { get; set; } + + /// + /// 状态1初选 + /// 状态2是结束 + /// 重新选择的时候修改为1 + /// + public int Status { get; set; } + } +} diff --git a/New_College.Model/Models/V_VipCardInfo.cs b/New_College.Model/Models/V_VipCardInfo.cs new file mode 100644 index 0000000..9d921a6 --- /dev/null +++ b/New_College.Model/Models/V_VipCardInfo.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class V_VipCardInfo : RootEntity + { + /// + /// 账号 key + /// + public string Code { get; set; } + + /// + /// 是否一绑定 + /// + public int IsBind { get; set; } + + /// + /// 天数 + /// + public int Day { get; set; } + + public DateTime EndTime { get; set; } + + /// + /// 金额 + /// + public decimal Money { get; set; } + + /// + /// 卡类型Id + /// + public int CardTypeId { get; set; } + + /// + /// 卡类型 + /// + public string CardTypeName { get; set; } + } +} diff --git a/New_College.Model/Models/V_VipCardType.cs b/New_College.Model/Models/V_VipCardType.cs new file mode 100644 index 0000000..e45fb17 --- /dev/null +++ b/New_College.Model/Models/V_VipCardType.cs @@ -0,0 +1,37 @@ +using New_College.Common; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Models +{ + public class V_VipCardType : EntityModel + { + /// + /// 卡类型名称 + /// + public string Name { get; set; } + + /// + /// 金额 + /// + public decimal Money { get; set; } + + /// + /// + /// + public CustomerTypeEnum Type { get; set; } = CustomerTypeEnum.General; + + /// + /// 天数 + /// + public int Day { get; set; } + + /// + /// 介绍 + /// + [SugarColumn(IsNullable = true)] + public string Desc { get; set; } + } +} diff --git a/New_College.Model/Models/sysUserInfo.cs b/New_College.Model/Models/sysUserInfo.cs new file mode 100644 index 0000000..6d4582b --- /dev/null +++ b/New_College.Model/Models/sysUserInfo.cs @@ -0,0 +1,109 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Models +{ + /// + /// 用户信息表 + /// + public class sysUserInfo + { + public sysUserInfo() { } + + public sysUserInfo(string loginName, string loginPWD) + { + uLoginName = loginName; + uLoginPWD = loginPWD; + uRealName = uLoginName; + uStatus = 0; + uCreateTime = DateTime.Now; + uUpdateTime = DateTime.Now; + uLastErrTime = DateTime.Now; + uErrorCount = 0; + name = ""; + + } + /// + /// 用户ID + /// + [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] + public int uID { get; set; } + /// + /// 登录账号 + /// + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string uLoginName { get; set; } + /// + /// 登录密码 + /// + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string uLoginPWD { get; set; } + /// + /// 真实姓名 + /// + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string uRealName { get; set; } + /// + /// 状态 + /// + public int uStatus { get; set; } + /// + /// 备注 + /// + [SugarColumn(ColumnDataType ="nvarchar",Length = int.MaxValue, IsNullable = true)] + public string uRemark { get; set; } + /// + /// 创建时间 + /// + public System.DateTime uCreateTime { get; set; } = DateTime.Now; + /// + /// 更新时间 + /// + public System.DateTime uUpdateTime { get; set; } = DateTime.Now; + + /// + ///最后登录时间 + /// + public DateTime uLastErrTime { get; set; }= DateTime.Now; + + /// + ///错误次数 + /// + public int uErrorCount { get; set; } + + + + /// + /// 登录账号 + /// + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string name { get; set; } + + // 性别 + [SugarColumn(IsNullable = true)] + public int sex { get; set; } = 0; + // 年龄 + [SugarColumn(IsNullable = true)] + public int age { get; set; } + // 生日 + [SugarColumn(IsNullable = true)] + public DateTime birth { get; set; } = DateTime.Now; + // 地址 + [SugarColumn(ColumnDataType ="nvarchar",Length = 200, IsNullable = true)] + public string addr { get; set; } + + [SugarColumn(IsNullable = true)] + public bool tdIsDelete { get; set; } + + + [SugarColumn(IsIgnore = true)] + public List RIDs { get; set; } + [SugarColumn(IsIgnore = true)] + public List RoleNames { get; set; } + + } +} diff --git a/New_College.Model/New_College.Model.csproj b/New_College.Model/New_College.Model.csproj new file mode 100644 index 0000000..bf70a47 --- /dev/null +++ b/New_College.Model/New_College.Model.csproj @@ -0,0 +1,25 @@ + + + + netcoreapp3.1 + + + + ..\New_College.Api\New_College.Model.xml + 1701;1702;1591 + + + + ..\New_College\New_College.Model.xml + 1701;1702;1591 + + + + + + + + + + + diff --git a/New_College.Model/PageModel.cs b/New_College.Model/PageModel.cs new file mode 100644 index 0000000..9d769e3 --- /dev/null +++ b/New_College.Model/PageModel.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; + +namespace New_College.Model +{ + /// + /// 通用分页信息类 + /// + public class PageModel + { + /// + /// 当前页标 + /// + public int page { get; set; } = 1; + /// + /// 总页数 + /// + public int pageCount { get; set; } = 6; + /// + /// 数据总数 + /// + public int dataCount { get; set; } = 0; + /// + /// 每页大小 + /// + public int PageSize { set; get; } + /// + /// 返回数据 + /// + public List data { get; set; } + + } + +} diff --git a/New_College.Model/Request/DecryptUserInfoRequest.cs b/New_College.Model/Request/DecryptUserInfoRequest.cs new file mode 100644 index 0000000..abf9dca --- /dev/null +++ b/New_College.Model/Request/DecryptUserInfoRequest.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Request +{ + public class DecryptUserInfoRequest : GetPhoneInfo + { + + /// + /// 用户头像 + /// + public string avatarUrl { get; set; } + + + public string nickName { get; set; } + + public int gender { get; set; } + + public string phone { get; set; } + + + public string AreaName { get; set; } + } +} diff --git a/New_College.Model/Request/LoginQuery.cs b/New_College.Model/Request/LoginQuery.cs new file mode 100644 index 0000000..c1ec3ce --- /dev/null +++ b/New_College.Model/Request/LoginQuery.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.Request +{ + public class LoginQuery + { + /// + /// 首次注册时传此值 + /// + public string openId { get; set; } + + /// + /// 退出重新登录时传此值 + /// + public string code { get; set; } + } +} diff --git a/New_College.Model/Request/WeixinLogin.cs b/New_College.Model/Request/WeixinLogin.cs new file mode 100644 index 0000000..baba64e --- /dev/null +++ b/New_College.Model/Request/WeixinLogin.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model +{ + public class WeixinLogin + { + public string code { get; set; } + } +} diff --git a/New_College.Model/ResponseEnum.cs b/New_College.Model/ResponseEnum.cs new file mode 100644 index 0000000..70a02ae --- /dev/null +++ b/New_College.Model/ResponseEnum.cs @@ -0,0 +1,23 @@ +using System.ComponentModel; + +namespace New_College.Model +{ + public enum ResponseEnum + { + /// + /// 无权限 + /// + [Description("无权限")] + NoPermissions = 401, + /// + /// 找不到指定资源 + /// + [Description("找不到指定资源")] + NoFound = 404, + /// + /// 找不到指定资源 + /// + [Description("服务器错误")] + ServerError = 500 + } +} diff --git a/New_College.Model/Seed/DBSeed.cs b/New_College.Model/Seed/DBSeed.cs new file mode 100644 index 0000000..6dd2ef4 --- /dev/null +++ b/New_College.Model/Seed/DBSeed.cs @@ -0,0 +1,246 @@ +using New_College.Common; +using New_College.Common.DB; +using New_College.Common.Helper; +using New_College.Model.Models; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace New_College.Model.Seed +{ + public class DBSeed + { + private static string SeedDataFolder = "BlogCore.Data.json/{0}.tsv"; + + + /// + /// 异步添加种子数据 + /// + /// + /// + /// + public static async Task SeedAsync(MyContext myContext, string WebRootPath) + { + try + { + if (string.IsNullOrEmpty(WebRootPath)) + { + throw new Exception("获取wwwroot路径时,异常!"); + } + + SeedDataFolder = Path.Combine(WebRootPath, SeedDataFolder); + + Console.WriteLine("************ New_College DataBase Set *****************"); + Console.WriteLine($"Is multi-DataBase: {Appsettings.app(new string[] { "MutiDBEnabled" })}"); + Console.WriteLine($"Is CQRS: {Appsettings.app(new string[] { "CQRSEnabled" })}"); + Console.WriteLine(); + Console.WriteLine($"Master DB ConId: {MyContext.ConnId}"); + Console.WriteLine($"Master DB Type: {MyContext.DbType}"); + Console.WriteLine($"Master DB ConnectString: {MyContext.ConnectionString}"); + Console.WriteLine(); + if (Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool()) + { + var slaveIndex = 0; + BaseDBConfig.MutiConnectionString.Item1.Where(x => x.ConnId != MainDb.CurrentDbConnId).ToList().ForEach(m => + { + slaveIndex++; + Console.WriteLine($"Slave{slaveIndex} DB ID: {m.ConnId}"); + Console.WriteLine($"Slave{slaveIndex} DB Type: {m.DbType}"); + Console.WriteLine($"Slave{slaveIndex} DB ConnectString: {m.Connection}"); + Console.WriteLine($"--------------------------------------"); + }); + } + else if (Appsettings.app(new string[] { "CQRSEnabled" }).ObjToBool()) + { + var slaveIndex = 0; + BaseDBConfig.MutiConnectionString.Item2.Where(x => x.ConnId != MainDb.CurrentDbConnId).ToList().ForEach(m => + { + slaveIndex++; + Console.WriteLine($"Slave{slaveIndex} DB ID: {m.ConnId}"); + Console.WriteLine($"Slave{slaveIndex} DB Type: {m.DbType}"); + Console.WriteLine($"Slave{slaveIndex} DB ConnectString: {m.Connection}"); + Console.WriteLine($"--------------------------------------"); + }); + } + else + { + } + + Console.WriteLine(); + + + // 创建数据库 + Console.WriteLine($"Create Database(The Db Id:{MyContext.ConnId})..."); + myContext.Db.DbMaintenance.CreateDatabase(); + ConsoleHelper.WriteSuccessLine($"Database created successfully!"); + + + // 创建数据库表,遍历指定命名空间下的class, + // 注意不要把其他命名空间下的也添加进来。 + Console.WriteLine("Create Tables..."); + var modelTypes = from t in Assembly.GetExecutingAssembly().GetTypes() + where t.IsClass && t.Namespace == "New_College.Model.Models" + select t; + modelTypes.ToList().ForEach(t => + { + if (!myContext.Db.DbMaintenance.IsAnyTable(t.Name)) + { + Console.WriteLine(t.Name); + myContext.Db.CodeFirst.InitTables(t); + } + }); + ConsoleHelper.WriteSuccessLine($"Tables created successfully!"); + Console.WriteLine(); + + + + if (Appsettings.app(new string[] { "AppSettings", "SeedDBDataEnabled" }).ObjToBool()) + { + Console.WriteLine($"Seeding database data (The Db Id:{MyContext.ConnId})..."); + + #region BlogArticle + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "BlogArticle"), Encoding.UTF8))); + Console.WriteLine("Table:BlogArticle created success!"); + } + else + { + Console.WriteLine("Table:BlogArticle already exists..."); + } + #endregion + + + #region Modules + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "Modules"), Encoding.UTF8))); + Console.WriteLine("Table:Modules created success!"); + } + else + { + Console.WriteLine("Table:Modules already exists..."); + } + #endregion + + + #region Permission + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "Permission"), Encoding.UTF8))); + Console.WriteLine("Table:Permission created success!"); + } + else + { + Console.WriteLine("Table:Permission already exists..."); + } + #endregion + + + #region Role + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "Role"), Encoding.UTF8))); + Console.WriteLine("Table:Role created success!"); + } + else + { + Console.WriteLine("Table:Role already exists..."); + } + #endregion + + + #region RoleModulePermission + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "RoleModulePermission"), Encoding.UTF8))); + Console.WriteLine("Table:RoleModulePermission created success!"); + } + else + { + Console.WriteLine("Table:RoleModulePermission already exists..."); + } + #endregion + + + #region Topic + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "Topic"), Encoding.UTF8))); + Console.WriteLine("Table:Topic created success!"); + } + else + { + Console.WriteLine("Table:Topic already exists..."); + } + #endregion + + + #region TopicDetail + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "TopicDetail"), Encoding.UTF8))); + Console.WriteLine("Table:TopicDetail created success!"); + } + else + { + Console.WriteLine("Table:TopicDetail already exists..."); + } + #endregion + + + #region UserRole + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "UserRole"), Encoding.UTF8))); + Console.WriteLine("Table:UserRole created success!"); + } + else + { + Console.WriteLine("Table:UserRole already exists..."); + } + #endregion + + + #region sysUserInfo + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "sysUserInfo"), Encoding.UTF8))); + Console.WriteLine("Table:sysUserInfo created success!"); + } + else + { + Console.WriteLine("Table:sysUserInfo already exists..."); + } + #endregion + + + #region TasksQz + if (!await myContext.Db.Queryable().AnyAsync()) + { + myContext.GetEntityDB().InsertRange(JsonHelper.ParseFormByJson>(FileHelper.ReadFile(string.Format(SeedDataFolder, "TasksQz"), Encoding.UTF8))); + Console.WriteLine("Table:TasksQz created success!"); + } + else + { + Console.WriteLine("Table:TasksQz already exists..."); + } + #endregion + + ConsoleHelper.WriteSuccessLine($"Done seeding database!"); + } + + Console.WriteLine(); + + } + catch (Exception ex) + { + throw new Exception("1、如果使用的是Mysql,生成的数据库字段字符集可能不是utf8的,手动修改下,或者尝试方案:删掉数据库,在连接字符串后加上CharSet=UTF8mb4,重新生成数据库. \n 2、其他错误:" + ex.Message); + } + } + } +} \ No newline at end of file diff --git a/New_College.Model/Seed/FrameSeed.cs b/New_College.Model/Seed/FrameSeed.cs new file mode 100644 index 0000000..0ffa538 --- /dev/null +++ b/New_College.Model/Seed/FrameSeed.cs @@ -0,0 +1,648 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace New_College.Model.Seed +{ + public class FrameSeed + { + + /// + /// 生成Controller层 + /// + /// sqlsugar实例 + /// 数据库链接ID + /// 数据库表名数组,默认空,生成所有表 + /// + /// + public static bool CreateControllers(SqlSugarClient sqlSugarClient, string ConnId = null, bool isMuti = false, string[] tableNames = null) + { + + try + { + Create_Controller_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\New_College.Api.Controllers", "New_College.Api.Controllers", tableNames, "", isMuti); + return true; + } + catch (Exception) + { + return false; + } + + } + + /// + /// 生成Model层 + /// + /// sqlsugar实例 + /// 数据库链接ID + /// 数据库表名数组,默认空,生成所有表 + /// + /// + public static bool CreateModels(SqlSugarClient sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null) + { + + try + { + Create_Model_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\New_College.Model", "New_College.Model.Models", tableNames, "", isMuti); + return true; + } + catch (Exception) + { + return false; + } + + } + + /// + /// 生成IRepository层 + /// + /// sqlsugar实例 + /// 数据库链接ID + /// + /// 数据库表名数组,默认空,生成所有表 + /// + public static bool CreateIRepositorys(SqlSugarClient sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null) + { + + try + { + Create_IRepository_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\New_College.IRepository", "New_College.IRepository", tableNames, "", isMuti); + return true; + } + catch (Exception) + { + return false; + } + + } + + + + /// + /// 生成 IService 层 + /// + /// sqlsugar实例 + /// 数据库链接ID + /// + /// 数据库表名数组,默认空,生成所有表 + /// + public static bool CreateIServices(SqlSugarClient sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null) + { + + try + { + Create_IServices_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\New_College.IServices", "New_College.IServices", tableNames, "", isMuti); + return true; + } + catch (Exception) + { + return false; + } + + } + + + + /// + /// 生成 Repository 层 + /// + /// sqlsugar实例 + /// 数据库链接ID + /// + /// 数据库表名数组,默认空,生成所有表 + /// + public static bool CreateRepository(SqlSugarClient sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null) + { + + try + { + Create_Repository_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\New_College.Repository", "New_College.Repository", tableNames, "", isMuti); + return true; + } + catch (Exception) + { + return false; + } + + } + + + + /// + /// 生成 Service 层 + /// + /// sqlsugar实例 + /// 数据库链接ID + /// + /// 数据库表名数组,默认空,生成所有表 + /// + public static bool CreateServices(SqlSugarClient sqlSugarClient, string ConnId, bool isMuti = false, string[] tableNames = null) + { + + try + { + Create_Services_ClassFileByDBTalbe(sqlSugarClient, ConnId, $@"C:\my-file\New_College.Services", "New_College.Services", tableNames, "", isMuti); + return true; + } + catch (Exception) + { + return false; + } + + } + + + #region 根据数据库表生产Controller层 + + /// + /// 功能描述:根据数据库表生产Controller层 + /// 作  者:New_College + /// + /// + /// 数据库链接ID + /// 实体类存放路径 + /// 命名空间 + /// 生产指定的表 + /// 实现接口 + /// + /// 是否序列化 + private static void Create_Controller_ClassFileByDBTalbe( + SqlSugarClient sqlSugarClient, + string ConnId, + string strPath, + string strNameSpace, + string[] lstTableNames, + string strInterface, + bool isMuti = false, + bool blnSerializable = false) + { + var IDbFirst = sqlSugarClient.DbFirst; + if (lstTableNames != null && lstTableNames.Length > 0) + { + IDbFirst = IDbFirst.Where(lstTableNames); + } + var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute() + + .SettingClassTemplate(p => p = +@"using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Linq.Expressions; +using System.Threading.Tasks; + +namespace " + strNameSpace + @" +{ + [Route(""api/[controller]/[action]"")] + [ApiController] + [Authorize(Permissions.Name)] + public class {ClassName}Controller : ControllerBase + { + /// + /// 服务器接口,因为是模板生成,所以首字母是大写的,自己可以重构下 + /// + private readonly I{ClassName}Services _{ClassName}Services; + + public {ClassName}Controller(I{ClassName}Services {ClassName}Services) + { + _{ClassName}Services = {ClassName}Services; + } + + [HttpGet] + public async Task>> Get(int page = 1, string key = """",int intPageSize = 50) + { + if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key)) + { + key = """"; + } + + Expression> whereExpression = a => a.id > 0; + + return new MessageModel>() + { + msg = ""获取成功"", + success = true, + response = await _{ClassName}Services.QueryPage(whereExpression, page, intPageSize) + }; + + } + + [HttpGet(""{id}"")] + public async Task> Get(int id = 0) + { + return new MessageModel<{ClassName}>() + { + msg = ""获取成功"", + success = true, + response = await _{ClassName}Services.QueryById(id) + }; + } + + [HttpPost] + public async Task> Post([FromBody] {ClassName} request) + { + var data = new MessageModel(); + + var id = await _{ClassName}Services.Add(request); + data.success = id > 0; + + if (data.success) + { + data.response = id.ObjToString(); + data.msg = ""添加成功""; + } + + return data; + } + + [HttpPut] + public async Task> Put([FromBody] {ClassName} request) + { + var data = new MessageModel(); + if (request.id > 0) + { + data.success = await _{ClassName}Services.Update(request); + if (data.success) + { + data.msg = ""更新成功""; + data.response = request?.id.ObjToString(); + } + } + + return data; + } + + [HttpDelete(""{id}"")] + public async Task> Delete(int id = 0) + { + var data = new MessageModel(); + if (id > 0) + { + var detail = await _{ClassName}Services.QueryById(id); + + detail.IsDeleted = true; + + if (detail != null) + { + data.success = await _{ClassName}Services.Update(detail); + if (data.success) + { + data.msg = ""删除成功""; + data.response = detail?.id.ObjToString(); + } + } + } + + return data; + } +} +}") + + .ToClassStringList(strNameSpace); + + Dictionary newdic = new Dictionary(); + //循环处理 首字母小写 并插入新的 Dictionary + foreach (KeyValuePair item in ls) + { + string newkey = "_" + item.Key.First().ToString().ToLower() + item.Key.Substring(1); + string newvalue = item.Value.Replace("_" + item.Key, newkey); + newdic.Add(item.Key, newvalue); + } + CreateFilesByClassStringList(newdic, strPath, "{0}Controller"); + } + #endregion + + + #region 根据数据库表生产Model层 + + /// + /// 功能描述:根据数据库表生产Model层 + /// 作  者:New_College + /// + /// + /// 数据库链接ID + /// 实体类存放路径 + /// 命名空间 + /// 生产指定的表 + /// 实现接口 + /// + /// 是否序列化 + private static void Create_Model_ClassFileByDBTalbe( + SqlSugarClient sqlSugarClient, + string ConnId, + string strPath, + string strNameSpace, + string[] lstTableNames, + string strInterface, + bool isMuti = false, + bool blnSerializable = false) + { + //多库文件分离 + if (isMuti) + { + strPath = strPath + @"\Models\" + ConnId; + strNameSpace = strNameSpace + "." + ConnId; + } + + var IDbFirst = sqlSugarClient.DbFirst; + if (lstTableNames != null && lstTableNames.Length > 0) + { + IDbFirst = IDbFirst.Where(lstTableNames); + } + var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute() + + .SettingClassTemplate(p => p = +@"{using} + +namespace " + strNameSpace + @" +{ +{ClassDescription} + [SugarTable( ""{ClassName}"", """ + ConnId + @""")]" + (blnSerializable ? "\n [Serializable]" : "") + @" + public class {ClassName}" + (string.IsNullOrEmpty(strInterface) ? "" : (" : " + strInterface)) + @" + { + public {ClassName}() + { + } + {PropertyName} + } +}") + .SettingPropertyDescriptionTemplate(p => p = string.Empty) + .SettingPropertyTemplate(p => p = +@"{SugarColumn} + public {PropertyType} {PropertyName} { get; set; }") + + //.SettingConstructorTemplate(p => p = " this._{PropertyName} ={DefaultValue};") + + .ToClassStringList(strNameSpace); + CreateFilesByClassStringList(ls, strPath, "{0}"); + } + #endregion + + + #region 根据数据库表生产IRepository层 + + /// + /// 功能描述:根据数据库表生产IRepository层 + /// 作  者:New_College + /// + /// + /// 数据库链接ID + /// 实体类存放路径 + /// 命名空间 + /// 生产指定的表 + /// 实现接口 + /// + private static void Create_IRepository_ClassFileByDBTalbe( + SqlSugarClient sqlSugarClient, + string ConnId, + string strPath, + string strNameSpace, + string[] lstTableNames, + string strInterface, + bool isMuti = false + ) + { + //多库文件分离 + if (isMuti) + { + strPath = strPath + @"\" + ConnId; + strNameSpace = strNameSpace + "." + ConnId; + } + + var IDbFirst = sqlSugarClient.DbFirst; + if (lstTableNames != null && lstTableNames.Length > 0) + { + IDbFirst = IDbFirst.Where(lstTableNames); + } + var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute() + + .SettingClassTemplate(p => p = +@"using New_College.IRepository.Base; +using New_College.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @"; + +namespace " + strNameSpace + @" +{ + /// + /// I{ClassName}Repository + /// + public interface I{ClassName}Repository : IBaseRepository<{ClassName}>" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @" + { + } +}") + + .ToClassStringList(strNameSpace); + CreateFilesByClassStringList(ls, strPath, "I{0}Repository"); + } + #endregion + + + #region 根据数据库表生产IServices层 + + /// + /// 功能描述:根据数据库表生产IServices层 + /// 作  者:New_College + /// + /// + /// 数据库链接ID + /// 实体类存放路径 + /// 命名空间 + /// 生产指定的表 + /// 实现接口 + /// + private static void Create_IServices_ClassFileByDBTalbe( + SqlSugarClient sqlSugarClient, + string ConnId, + string strPath, + string strNameSpace, + string[] lstTableNames, + string strInterface, + bool isMuti = false) + { + //多库文件分离 + if (isMuti) + { + strPath = strPath + @"\" + ConnId; + strNameSpace = strNameSpace + "." + ConnId; + } + + var IDbFirst = sqlSugarClient.DbFirst; + if (lstTableNames != null && lstTableNames.Length > 0) + { + IDbFirst = IDbFirst.Where(lstTableNames); + } + var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute() + + .SettingClassTemplate(p => p = +@"using New_College.IServices.BASE; +using New_College.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @"; + +namespace " + strNameSpace + @" +{ + /// + /// I{ClassName}Services + /// + public interface I{ClassName}Services :IBaseServices<{ClassName}>" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @" + { + } +}") + + .ToClassStringList(strNameSpace); + CreateFilesByClassStringList(ls, strPath, "I{0}Services"); + } + #endregion + + + + #region 根据数据库表生产 Repository 层 + + /// + /// 功能描述:根据数据库表生产 Repository 层 + /// 作  者:New_College + /// + /// + /// 数据库链接ID + /// 实体类存放路径 + /// 命名空间 + /// 生产指定的表 + /// 实现接口 + /// + private static void Create_Repository_ClassFileByDBTalbe( + SqlSugarClient sqlSugarClient, + string ConnId, + string strPath, + string strNameSpace, + string[] lstTableNames, + string strInterface, + bool isMuti = false) + { + //多库文件分离 + if (isMuti) + { + strPath = strPath + @"\" + ConnId; + strNameSpace = strNameSpace + "." + ConnId; + } + + var IDbFirst = sqlSugarClient.DbFirst; + if (lstTableNames != null && lstTableNames.Length > 0) + { + IDbFirst = IDbFirst.Where(lstTableNames); + } + var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute() + + .SettingClassTemplate(p => p = +@"using New_College.IRepository" + (isMuti ? "." + ConnId + "" : "") + @"; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @"; +using New_College.Repository.Base; + +namespace " + strNameSpace + @" +{ + /// + /// {ClassName}Repository + /// + public class {ClassName}Repository : BaseRepository<{ClassName}>, I{ClassName}Repository" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @" + { + public {ClassName}Repository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +}") + .ToClassStringList(strNameSpace); + + + CreateFilesByClassStringList(ls, strPath, "{0}Repository"); + } + #endregion + + + #region 根据数据库表生产 Services 层 + + /// + /// 功能描述:根据数据库表生产 Services 层 + /// 作  者:New_College + /// + /// + /// 数据库链接ID + /// 实体类存放路径 + /// 命名空间 + /// 生产指定的表 + /// 实现接口 + /// + private static void Create_Services_ClassFileByDBTalbe( + SqlSugarClient sqlSugarClient, + string ConnId, + string strPath, + string strNameSpace, + string[] lstTableNames, + string strInterface, + bool isMuti = false) + { + //多库文件分离 + if (isMuti) + { + strPath = strPath + @"\" + ConnId; + strNameSpace = strNameSpace + "." + ConnId; + } + + var IDbFirst = sqlSugarClient.DbFirst; + if (lstTableNames != null && lstTableNames.Length > 0) + { + IDbFirst = IDbFirst.Where(lstTableNames); + } + var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute() + + .SettingClassTemplate(p => p = +@" +using New_College.IServices" + (isMuti ? "." + ConnId + "" : "") + @"; +using New_College.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @"; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace " + strNameSpace + @" +{ + public class {ClassName}Services : BaseServices<{ClassName}>, I{ClassName}Services" + (string.IsNullOrEmpty(strInterface) ? "" : (" , " + strInterface)) + @" + { + private readonly IBaseRepository<{ClassName}> _dal; + public {ClassName}Services(IBaseRepository<{ClassName}> dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +}") + .ToClassStringList(strNameSpace); + + CreateFilesByClassStringList(ls, strPath, "{0}Services"); + } + #endregion + + + #region 根据模板内容批量生成文件 + /// + /// 根据模板内容批量生成文件 + /// + /// 类文件字符串list + /// 生成路径 + /// 文件名格式模板 + private static void CreateFilesByClassStringList(Dictionary ls, string strPath, string fileNameTp) + { + + foreach (var item in ls) + { + var fileName = $"{string.Format(fileNameTp, item.Key)}.cs"; + var fileFullPath = Path.Combine(strPath, fileName); + if (!Directory.Exists(strPath)) + { + Directory.CreateDirectory(strPath); + } + File.WriteAllText(fileFullPath, item.Value, Encoding.UTF8); + } + } + #endregion + } +} diff --git a/New_College.Model/Seed/MyContext.cs b/New_College.Model/Seed/MyContext.cs new file mode 100644 index 0000000..9cd57b7 --- /dev/null +++ b/New_College.Model/Seed/MyContext.cs @@ -0,0 +1,254 @@ +using New_College.Common.DB; +using SqlSugar; +using System; + +namespace New_College.Model.Seed +{ + public class MyContext + { + + private static MutiDBOperate connectObject => GetMainConnectionDb(); + private static string _connectionString = connectObject.Connection; + private static DbType _dbType = (DbType)connectObject.DbType; + public static string ConnId = connectObject.ConnId; + private SqlSugarClient _db; + + /// + /// 连接字符串 + /// New_College + /// + public static MutiDBOperate GetMainConnectionDb() + { + var mainConnetctDb = BaseDBConfig.MutiConnectionString.Item1.Find(x => x.ConnId == MainDb.CurrentDbConnId); + if (BaseDBConfig.MutiConnectionString.Item1.Count > 0) + { + if (mainConnetctDb == null) + { + mainConnetctDb = BaseDBConfig.MutiConnectionString.Item1[0]; + } + } + else + { + throw new Exception("请确保appsettigns.json中配置连接字符串,并设置Enabled为true;"); + } + + return mainConnetctDb; + } + /// + /// 连接字符串 + /// New_College + /// + public static string ConnectionString + { + get { return _connectionString; } + set { _connectionString = value; } + } + /// + /// 数据库类型 + /// New_College + /// + public static DbType DbType + { + get { return _dbType; } + set { _dbType = value; } + } + /// + /// 数据连接对象 + /// New_College + /// + public SqlSugarClient Db + { + get { return _db; } + private set { _db = value; } + } + + /// + /// 数据库上下文实例(自动关闭连接) + /// New_College + /// + public static MyContext Context + { + get + { + return new MyContext(); + } + + } + + + /// + /// 功能描述:构造函数 + /// 作  者:New_College + /// + public MyContext() + { + if (string.IsNullOrEmpty(_connectionString)) + throw new ArgumentNullException("数据库连接字符串为空"); + _db = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = _connectionString, + DbType = _dbType, + IsAutoCloseConnection = true, + InitKeyType = InitKeyType.Attribute,//mark + ConfigureExternalServices = new ConfigureExternalServices() + { + //DataInfoCacheService = new HttpRuntimeCache() + }, + MoreSettings = new ConnMoreSettings() + { + //IsWithNoLockQuery = true, + IsAutoRemoveDataCache = true + } + }); + } + + + #region 实例方法 + /// + /// 功能描述:获取数据库处理对象 + /// 作  者:New_College + /// + /// 返回值 + public SimpleClient GetEntityDB() where T : class, new() + { + return new SimpleClient(_db); + } + /// + /// 功能描述:获取数据库处理对象 + /// 作  者:New_College + /// + /// db + /// 返回值 + public SimpleClient GetEntityDB(SqlSugarClient db) where T : class, new() + { + return new SimpleClient(db); + } + + + + #endregion + + + #region 根据实体类生成数据库表 + /// + /// 功能描述:根据实体类生成数据库表 + /// 作  者:New_College + /// + /// 是否备份表 + /// 指定的实体 + public void CreateTableByEntity(bool blnBackupTable, params T[] lstEntitys) where T : class, new() + { + Type[] lstTypes = null; + if (lstEntitys != null) + { + lstTypes = new Type[lstEntitys.Length]; + for (int i = 0; i < lstEntitys.Length; i++) + { + T t = lstEntitys[i]; + lstTypes[i] = typeof(T); + } + } + CreateTableByEntity(blnBackupTable, lstTypes); + } + + /// + /// 功能描述:根据实体类生成数据库表 + /// 作  者:New_College + /// + /// 是否备份表 + /// 指定的实体 + public void CreateTableByEntity(bool blnBackupTable, params Type[] lstEntitys) + { + if (blnBackupTable) + { + _db.CodeFirst.BackupTable().InitTables(lstEntitys); //change entity backupTable + } + else + { + _db.CodeFirst.InitTables(lstEntitys); + } + } + #endregion + + + #region 静态方法 + + /// + /// 功能描述:获得一个DbContext + /// 作  者:New_College + /// + /// + public static MyContext GetDbContext() + { + return new MyContext(); + } + + /// + /// 功能描述:设置初始化参数 + /// 作  者:New_College + /// + /// 连接字符串 + /// 数据库类型 + public static void Init(string strConnectionString, DbType enmDbType = SqlSugar.DbType.SqlServer) + { + _connectionString = strConnectionString; + _dbType = enmDbType; + } + + /// + /// 功能描述:创建一个链接配置 + /// 作  者:New_College + /// + /// 是否自动关闭连接 + /// 是否夸类事务 + /// ConnectionConfig + public static ConnectionConfig GetConnectionConfig(bool blnIsAutoCloseConnection = true, bool blnIsShardSameThread = false) + { + ConnectionConfig config = new ConnectionConfig() + { + ConnectionString = _connectionString, + DbType = _dbType, + IsAutoCloseConnection = blnIsAutoCloseConnection, + ConfigureExternalServices = new ConfigureExternalServices() + { + //DataInfoCacheService = new HttpRuntimeCache() + }, + IsShardSameThread = blnIsShardSameThread + }; + return config; + } + + /// + /// 功能描述:获取一个自定义的DB + /// 作  者:New_College + /// + /// config + /// 返回值 + public static SqlSugarClient GetCustomDB(ConnectionConfig config) + { + return new SqlSugarClient(config); + } + /// + /// 功能描述:获取一个自定义的数据库处理对象 + /// 作  者:New_College + /// + /// sugarClient + /// 返回值 + public static SimpleClient GetCustomEntityDB(SqlSugarClient sugarClient) where T : class, new() + { + return new SimpleClient(sugarClient); + } + /// + /// 功能描述:获取一个自定义的数据库处理对象 + /// 作  者:New_College + /// + /// config + /// 返回值 + public static SimpleClient GetCustomEntityDB(ConnectionConfig config) where T : class, new() + { + SqlSugarClient sugarClient = GetCustomDB(config); + return GetCustomEntityDB(sugarClient); + } + #endregion + } +} diff --git a/New_College.Model/TableModel.cs b/New_College.Model/TableModel.cs new file mode 100644 index 0000000..951f5bb --- /dev/null +++ b/New_College.Model/TableModel.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +namespace New_College.Model +{ + /// + /// 表格数据,支持分页 + /// + public class TableModel + { + /// + /// 返回编码 + /// + public int Code { get; set; } + /// + /// 返回信息 + /// + public string Msg { get; set; } + /// + /// 记录总数 + /// + public int Count { get; set; } + /// + /// 返回数据集 + /// + public List Data { get; set; } + } +} diff --git a/New_College.Model/ViewModels/AdvertisementViewModels.cs b/New_College.Model/ViewModels/AdvertisementViewModels.cs new file mode 100644 index 0000000..39f3dd9 --- /dev/null +++ b/New_College.Model/ViewModels/AdvertisementViewModels.cs @@ -0,0 +1,39 @@ +using System; + +namespace New_College.Model.ViewModels +{ + /// + /// 广告类 + /// + public class AdvertisementViewModels + { + /// + /// 分类ID + /// + public int Id { get; set; } + /// + /// 创建时间 + /// + public DateTime Createdate { get; set; } + + /// + /// 广告图片 + /// + public string ImgUrl { get; set; } + + /// + /// 广告标题 + /// + public string Title { get; set; } + + /// + /// 广告链接 + /// + public string Url { get; set; } + + /// + /// 备注 + /// + public string Remark { get; set; } + } +} diff --git a/New_College.Model/ViewModels/AliyunSmsSenderConfig.cs b/New_College.Model/ViewModels/AliyunSmsSenderConfig.cs new file mode 100644 index 0000000..7627d5a --- /dev/null +++ b/New_College.Model/ViewModels/AliyunSmsSenderConfig.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class AliyunSmsSenderConfig + { + public static string accessKeyId { get; set; } + public static string accessKeySecret { get; set; } + } + + /// + /// 微信小程序配置 + /// + public class WeixinConfig + { + /// + /// 绑定支付的APPID(必须配置) + /// + public static string Appid { get; set; } + + /// + /// 公众账号secert + /// + public static string Secret { get; set; } + /// + /// 商户号(必填) + /// + public static string MCHID { get; set; } + + /// + /// 商户支付密钥 + /// + public static string KEY { get; set; } + + /// + /// 支付结果回调URL + /// + public static string NotifyUrl { get; set; } + } + + /// + /// + /// + public class WePayConfig + { + //=======【商户系统后台机器IP】===================================== + /* 此参数可手动配置也可在程序中自动获取 + */ + public const string IP = "8.8.8.8"; + + + //=======【代理服务器设置】=================================== + /* 默认IP和端口号分别为0.0.0.0和0,此时不开启代理(如有需要才设置) + */ + public const string PROXY_URL = ""; + + //=======【上报信息配置】=================================== + /* 测速上报等级,0.关闭上报; 1.仅错误时上报; 2.全量上报 + */ + public const int REPORT_LEVENL = 1; + + //=======【日志级别】=================================== + /* 日志等级,0.不输出日志;1.只输出错误信息; 2.输出错误和正常信息; 3.输出错误信息、正常信息和调试信息 + */ + public const int LOG_LEVENL = 3; + } +} diff --git a/New_College.Model/ViewModels/BaseQuery.cs b/New_College.Model/ViewModels/BaseQuery.cs new file mode 100644 index 0000000..8857106 --- /dev/null +++ b/New_College.Model/ViewModels/BaseQuery.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class BasePageRequest + { + public int PageIndex { get; set; } = 1; + + public int PageSize { get; set; } = 10; + } + + public class NameQuery + { + public string Name { get; set; } + } + + public class NameBaseQuery : BasePageRequest + { + public string Name { get; set; } + + /// + /// 本科/专科大类 1本科 2 专科 + /// + public int Type { get; set; } + } + + public class XmlQuery + { + public string xml { get; set; } + } +} diff --git a/New_College.Model/ViewModels/BaseResult.cs b/New_College.Model/ViewModels/BaseResult.cs new file mode 100644 index 0000000..18a58a1 --- /dev/null +++ b/New_College.Model/ViewModels/BaseResult.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class IdNameResult + { + public int Id { get; set; } + + public string Name { get; set; } + } + + public class IdQuery + { + public int Id { get; set; } + + public List Ids { get; set; } + } + + public class BaseResponse + { + public string msg { get; set; } + + public bool success { get; set; } = true; + } +} diff --git a/New_College.Model/ViewModels/BlogViewModels.cs b/New_College.Model/ViewModels/BlogViewModels.cs new file mode 100644 index 0000000..e4f347f --- /dev/null +++ b/New_College.Model/ViewModels/BlogViewModels.cs @@ -0,0 +1,83 @@ +using System; + +namespace New_College.Model.ViewModels +{ + /// + /// 博客信息展示类 + /// + public class BlogViewModels + { + /// + /// + /// + public int bID { get; set; } + /// 创建人 + /// + /// + public string bsubmitter { get; set; } + + /// 博客标题 + /// + /// + public string btitle { get; set; } + + /// 摘要 + /// + /// + public string digest { get; set; } + + /// + /// 上一篇 + /// + public string previous { get; set; } + + /// + /// 上一篇id + /// + public int previousID { get; set; } + + /// + /// 下一篇 + /// + public string next { get; set; } + + /// + /// 下一篇id + /// + public int nextID { get; set; } + + /// 类别 + /// + /// + public string bcategory { get; set; } + + /// 内容 + /// + /// + public string bcontent { get; set; } + + /// + /// 访问量 + /// + public int btraffic { get; set; } + + /// + /// 评论数量 + /// + public int bcommentNum { get; set; } + + /// 修改时间 + /// + /// + public DateTime bUpdateTime { get; set; } + + /// + /// 创建时间 + /// + public System.DateTime bCreateTime { get; set; } + /// 备注 + /// + /// + public string bRemark { get; set; } + } +} diff --git a/New_College.Model/ViewModels/GuestbookViewModels.cs b/New_College.Model/ViewModels/GuestbookViewModels.cs new file mode 100644 index 0000000..0ba12de --- /dev/null +++ b/New_College.Model/ViewModels/GuestbookViewModels.cs @@ -0,0 +1,51 @@ +using System; +using New_College.Model.Models; + +namespace New_College.Model.ViewModels +{ + /// + /// 留言信息展示类 + /// + public class GuestbookViewModels + { + /// 留言表 + /// + /// + public int id { get; set; } + + /// 博客ID + /// + /// + public int? blogId { get; set; } + /// 创建时间 + /// + /// + public DateTime createdate { get; set; } + public string username { get; set; } + + /// 手机 + /// + /// + public string phone { get; set; } + /// qq + /// + /// + public string QQ { get; set; } + + /// 留言内容 + /// + /// + public string body { get; set; } + /// ip地址 + /// + /// + public string ip { get; set; } + + /// 是否显示在前台,0否1是 + /// + /// + public bool isshow { get; set; } + + public BlogArticle blogarticle { get; set; } + } +} diff --git a/New_College.Model/ViewModels/LoginInfoViewModels.cs b/New_College.Model/ViewModels/LoginInfoViewModels.cs new file mode 100644 index 0000000..37aebf6 --- /dev/null +++ b/New_College.Model/ViewModels/LoginInfoViewModels.cs @@ -0,0 +1,13 @@ +namespace New_College.Model.ViewModels +{ + public class LoginInfoViewModels + { + public string uLoginName { get; set; } + + public string uLoginPwd { get; set; } + + public string VCode { get; set; } + + public bool IsMember { get; set; } + } +} diff --git a/New_College.Model/ViewModels/ModuleViewModels.cs b/New_College.Model/ViewModels/ModuleViewModels.cs new file mode 100644 index 0000000..d9137f3 --- /dev/null +++ b/New_College.Model/ViewModels/ModuleViewModels.cs @@ -0,0 +1,6 @@ +namespace New_College.Model.ViewModels +{ + public class ModuleViewModels + { + } +} diff --git a/New_College.Model/ViewModels/Query/AliPayQuery.cs b/New_College.Model/ViewModels/Query/AliPayQuery.cs new file mode 100644 index 0000000..6fb03a8 --- /dev/null +++ b/New_College.Model/ViewModels/Query/AliPayQuery.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class AliPayQuery + { + } + public class AlipayTradeWapPayQuery + { + public string OutTradeNo { get; set; } = ""; + + public string Body { get; set; } = "壹志愿VIP"; + + public decimal TotalAmount { get; set; } = 0; + + public string NotifyUrl { get; set; } = ""; + + public string ReturnUrl { get; set; } = ""; + + public string PaymentChannel { get; set; } = "支付宝支付"; + + public string PaymentType { get; set; } = "ZFB"; + + public int CustomerId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/BatchQuery.cs b/New_College.Model/ViewModels/Query/BatchQuery.cs new file mode 100644 index 0000000..2b01bed --- /dev/null +++ b/New_College.Model/ViewModels/Query/BatchQuery.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class BatchQuery + { + public string AreaName { get; set; } + + public int Year { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/CategoryInfoQuery.cs b/New_College.Model/ViewModels/Query/CategoryInfoQuery.cs new file mode 100644 index 0000000..879481d --- /dev/null +++ b/New_College.Model/ViewModels/Query/CategoryInfoQuery.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class CategoryInfoQuery + { + /// + /// 测评类型 + /// + public int Type { get; set; } + } + + /// + /// + /// + public class CategoryStatusQuery + { + /// + /// 纬度Id + /// + public int CategoryId { get; set; } + + /// + /// 用户Id + /// + public int CustomerId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/CustomerInfoQuery.cs b/New_College.Model/ViewModels/Query/CustomerInfoQuery.cs new file mode 100644 index 0000000..211177f --- /dev/null +++ b/New_College.Model/ViewModels/Query/CustomerInfoQuery.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class CustomerInfoQuery + { + public string OpenId { get; set; } + + public string Name { get; set; } + + public string Phone { get; set; } + + public string UserPwd { get; set; } + + public string Code { get; set; } + } + + public class PhoneQuery + { + public string Phone { get; set; } + } + + public class UpdateCustomerQuery + { + public int Id { get; set; } + + public string Phone { get; set; } + + /// + /// 不传就不修改密码 + /// + public string UserPwd { get; set; } + + /// + /// 用户头像 + /// + public string AvatarUrl { get; set; } + + /// + /// 用户名 + /// + public string NickName { get; set; } + + /// + /// 性别 1男 2女 + /// + public int Gender { get; set; } + + } + + public class ResetPwdQuery + { + public string Phone { get; set; } + + public string UserPwd { get; set; } + + public string Code { get; set; } + } + + public class UpdateScoreQuery + { + public int StudentId { get; set; } + + public int Score { get; set; } + + /// + /// 0(新高考),1,文科,2 理科 + /// + public int? Subject { get; set; } + + /// + /// 选科文字展示 + /// + public string Subjectgroup { get; set; } + } + + /// + /// 更新信息query + /// + public class CustomerUpdateQuery + { + public int StudentId { get; set; } + + /// + /// 省市区id + /// + public int AreaId { get; set; } + + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + + /// + /// 0(新高考),1,文科,2 理科 + /// + public int? Subject { get; set; } + + /// + /// 选科文字展示 + /// + public string Subjectgroup { get; set; } + + /// + /// 考生预计分数 + /// + public float Expectedscore { get; set; } + + public int Year { get; set; } + + public string SchoolName { get; set; } + + public string ClassName { get; set; } + } + + /// + /// + /// + public class CustomerQuery + { + public int StudentId { get; set; } + + /// + /// 省市区id + /// + public int AreaId { get; set; } + + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + + /// + /// 年份 + /// + public int Year { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/ExaminationPolicyQuery.cs b/New_College.Model/ViewModels/Query/ExaminationPolicyQuery.cs new file mode 100644 index 0000000..49e39f7 --- /dev/null +++ b/New_College.Model/ViewModels/Query/ExaminationPolicyQuery.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class ExaminationPolicySearchQuery : BasePageRequest + { + public int AreaId { get; set; } + } + + public class ExaminationPolicyQuery + { + public int Id { get; set; } + + /// + /// + /// + public int AreaId { get; set; } + + public string AreaName { get; set; } + + /// + /// + /// + public string Title { get; set; } + + /// + /// + /// + public string Content { get; set; } + + /// + /// 图片 + /// + public string Img { get; set; } + } + + public class ExaminationPolicyAreaQuery + { + public int AreaId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/MajorQuery.cs b/New_College.Model/ViewModels/Query/MajorQuery.cs new file mode 100644 index 0000000..5bcab93 --- /dev/null +++ b/New_College.Model/ViewModels/Query/MajorQuery.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + /// + /// 专业基础查询 + /// + public class MajorQuery + { + public int UniversityId { get; set; } + public int MajorId { get; set; } + } + + public class MajorSchoolQuery : BasePageRequest + { + public int MajorId { get; set; } + + /// + /// 学科层次 + /// + public int SubjectLevel { get; set; } + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 办学性质 + /// + public int Nature { get; set; } + + /// + /// 学校类型 + /// + public int Type { get; set; } = -1; + + /// + /// 是否985 0、否,1、是 + /// + public int Nhef { get; set; } + + /// + /// 是否211 0、否,1、是 + /// + public int Sff { get; set; } + + /// + /// 是否双一流 0、否,1、是 + /// + public int Syl { get; set; } + } + + public class MajorCareerQuery + { + public int MajorId { get; set; } + } + + + + public class ManageMajorQuery + { + /// + /// 选科 物化生 中文逗号(,)隔开 + /// + public string SubjectClaim { get; set; } + + + + /// + /// 高考年份 + /// + public int Year { get; set; } + + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 分数 + /// + public float Score { get; set; } + + public List Names { get; set; } + public string Tags { get; set; } + + public int universityId { get; set; } + + public int categoryclassid { get; set; } + /// + /// 专业分类 1文科 2理科 3不区分 + /// + public int type { get; set; } + /// + /// 教育部专业编号 + /// + public string majorcode { get; set; } + /// + /// 专业名称 + /// + public string majorname { get; set; } + /// + /// 是否前10个 1是2不是 + /// + public int IsTop { get; set; } = 2; + } + + public class MajorThreeByTagQuery + { + /// + /// 霍兰德标签 + /// + public string Tags { get; set; } + /// + /// 选科 物化生 中文逗号(,)隔开 + /// + public string SubjectClaim { get; set; } + + + + /// + /// 高考年份 + /// + public int Year { get; set; } + + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 分数 + /// + public float Score { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/MajorSalaryQuery.cs b/New_College.Model/ViewModels/Query/MajorSalaryQuery.cs new file mode 100644 index 0000000..21d6775 --- /dev/null +++ b/New_College.Model/ViewModels/Query/MajorSalaryQuery.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class MajorSalaryQuery : BasePageRequest + { + /// + /// 类型 1本科 2专科 + /// + public int Type { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/MajorcategoryQuery.cs b/New_College.Model/ViewModels/Query/MajorcategoryQuery.cs new file mode 100644 index 0000000..182054b --- /dev/null +++ b/New_College.Model/ViewModels/Query/MajorcategoryQuery.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class MajorcategoryQuery + { + /// + /// 办学层次 本科/专科大类 1本科 2 专科 + /// + public int SchoolLevel { get; set; } = 1; + } +} diff --git a/New_College.Model/ViewModels/Query/OccupationQuery.cs b/New_College.Model/ViewModels/Query/OccupationQuery.cs new file mode 100644 index 0000000..79c5d21 --- /dev/null +++ b/New_College.Model/ViewModels/Query/OccupationQuery.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class OccupationQuery + { + + } +} diff --git a/New_College.Model/ViewModels/Query/OrderInfoQuery.cs b/New_College.Model/ViewModels/Query/OrderInfoQuery.cs new file mode 100644 index 0000000..4b2930b --- /dev/null +++ b/New_College.Model/ViewModels/Query/OrderInfoQuery.cs @@ -0,0 +1,133 @@ +using New_College.Common; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class OrderInfoQuery : BasePageRequest + { + /// + /// 1支付宝支付 2微信支付 + /// + [SugarColumn(IsNullable = true)] + public EnumPayType PayType { get; set; } + + /// + /// 1支付宝支付 2微信支付 + /// + public string PayTypeName { get; set; } + + /// + /// 状态 1待支付 2已支付 + /// + public EnumOrderType Status { get; set; } + + /// + /// 状态 1待支付 2已支付 + /// + public string StatusName { get; set; } + + /// + /// 价格 + /// + public decimal Price { get; set; } + + /// + /// 实付款 + /// + public decimal PayPrice { get; set; } + + /// + /// 卡Id + /// + [SugarColumn(IsNullable = true)] + public int CardId { get; set; } + + /// + /// 卡号 + /// + [SugarColumn(IsNullable = true)] + public string CardNo { get; set; } + + /// + /// 卡类型Id + /// + public int CardTypeId { get; set; } + + /// + /// 卡类型名字 + /// + public string CardTypeName { get; set; } + + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 用户名 + /// + public string CustomerName { get; set; } + + /// + /// 名字 + /// + public string Name { get; set; } + + /// + /// out_trade_no + /// + [SugarColumn(IsNullable = true)] + public string out_trade_no { get; set; } + + /// + /// 订单号 + /// + [SugarColumn(IsNullable = true)] + public string OrderId { get; set; } + + /// + /// 电话 + /// + public string Phone { get; set; } + + } + + public class SearchOrderQuery : BasePageRequest + { + /// + /// 根据卡号查询 + /// + public string CardNo { get; set; } + + /// + /// 根据VIP类别查询 + /// + public int CardTypeId { get; set; } = 0; + + /// + /// 根据支付方式查询 + /// + public int PayType { get; set; } = -1; + + /// + /// 根据支付状态查询 + /// + public int Status { get; set; } = -2; + + /// + /// 根据手机号查询 + /// + public string Phone { get; set; } + + /// + /// 根据out_trade_no号查询 + /// + public string out_trade_no { get; set; } + + + } + +} diff --git a/New_College.Model/ViewModels/Query/OrderQuery.cs b/New_College.Model/ViewModels/Query/OrderQuery.cs new file mode 100644 index 0000000..3cb5783 --- /dev/null +++ b/New_College.Model/ViewModels/Query/OrderQuery.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class UniOrderQuery + { + /// + /// 微信浏览器(标价金额) + /// + public decimal total_fee { get; set; } + + /// + /// trade_type=JSAPI时(即JSAPI支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识。openid如何获取,可参考【获取openid】。企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换 + /// + public string openid { get; set; } + + public int CardTypeId { get; set; } + + /// + /// 系统生成订单号 + /// + public string OrderId { get; set; } + + public int StudentId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/PlanDetailQuery.cs b/New_College.Model/ViewModels/Query/PlanDetailQuery.cs new file mode 100644 index 0000000..bdc4d30 --- /dev/null +++ b/New_College.Model/ViewModels/Query/PlanDetailQuery.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class PlanDetailQuery : BasePageRequest + { + ///// + ///// + ///// + //public float Score { get; set; } + + ///// + ///// 院校Id + ///// + //public int UniversityId { get; set; } + + /// + /// 招生计划Ids + /// + public List PlanIds { get; set; } + } + + public class CWBUniversityDetailQuery : BasePageRequest + { + public string Type { get; set; } + + public List UniversityIds { get; set; } + + public int BatchId { get; set; } + + /// + /// 高考年份 + /// + public int Year { get; set; } + + /// + /// 专业Ids + /// + public List MajorIds { get; set; } + + /// + /// + /// + public float Score { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/PlanQuery.cs b/New_College.Model/ViewModels/Query/PlanQuery.cs new file mode 100644 index 0000000..d1d25b3 --- /dev/null +++ b/New_College.Model/ViewModels/Query/PlanQuery.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class PlanQuery + { + public int UnviersityId { get; set; } + + public int Year { get; set; } + + public string Type { get; set; } + + public string BatchName { get; set; } + + public string AreaName { get; set; } + } + + public class PlanYearQuery + { + public int UnviersityId { get; set; } + + public string AreaName { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/ProbabilityQuery.cs b/New_College.Model/ViewModels/Query/ProbabilityQuery.cs new file mode 100644 index 0000000..63136ed --- /dev/null +++ b/New_College.Model/ViewModels/Query/ProbabilityQuery.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class ProbabilityQuery:BasePageRequest + { + public int CustomerId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/PsychMeasurementQuery.cs b/New_College.Model/ViewModels/Query/PsychMeasurementQuery.cs new file mode 100644 index 0000000..ac5b514 --- /dev/null +++ b/New_College.Model/ViewModels/Query/PsychMeasurementQuery.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class PsychMeasurementQuery + { + public int CategoryId { get; set; } + + public int StudentId { get; set; } + } + + + + public class SaveHollandQuery + { + public int CategoryId { get; set; } + + public int StudentId { get; set; } + + public int CycleTimeId { get; set; } + + public string Tags { get; set; } + } + + /// + /// 生涯能力提交 + /// + public class SavePsychQuery + { + public int Type { get; set; } + + public int CategoryId { get; set; } + + public int StudentId { get; set; } + + public int CycleTimeId { get; set; } + + //public string ClassName { get; set; } + + //public string GradeName { get; set; } + + ///// + ///// 生涯能力传入 + ///// + //public List CareerResult { get; set; } + + /// + /// 学科探索传入 + /// + public List Result { get; set; } + /// + /// 学生发展 + /// + public List second { get; set; } + } + /// + /// 学科探索query + /// + public class SubjectSelectJson + { + public string name { get; set; } + + public List value { get; set; } + } + + /// + /// 生涯能力json + /// + public class EvalJson + { + public int Id { get; set; } + + public int Value { get; set; } + + public int CycleId { get; set; } + } + /// + /// 学生发展 + /// + public class SecondModels + { + public int Id { get; set; } + + public int Status { get; set; } + + public string Tag { get; set; } + + } + + + + public class ResultLookQuery + { + public int StudentId { get; set; } + + public int CategoryId { get; set; } + + /// + /// 霍兰德如果不传周期Id的话就获取最新的 + /// + public int CycleTimeId { get; set; } + } + +} diff --git a/New_College.Model/ViewModels/Query/RecommendUniversityQuery.cs b/New_College.Model/ViewModels/Query/RecommendUniversityQuery.cs new file mode 100644 index 0000000..376d680 --- /dev/null +++ b/New_College.Model/ViewModels/Query/RecommendUniversityQuery.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class RecommendUniversityQuery : BasePageRequest + { + public int CustomerId { get; set; } + + public float Score { get; set; } + + /// + /// 学科层次 + /// + public int SubjectLevel { get; set; } + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 办学性质 + /// + public int Nature { get; set; } + + /// + /// 学校类型 + /// + public int Type { get; set; } = -1; + + /// + /// 是否985 0、否,1、是 + /// + public int Nhef { get; set; } + + /// + /// 是否211 0、否,1、是 + /// + public int Sff { get; set; } + + /// + /// 是否双一流 0、否,1、是 + /// + public int Syl { get; set; } + } + + /// + /// 录取概率传入 + /// + public class UniversityProbabilityQuery + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 分数 + /// + public float Score { get; set; } + + /// + /// 院校Id + /// + public int UniversityId { get; set; } + + /// + /// 省份名称 + /// + public string AreaName { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 年份 + /// + public int Year { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/SubjectSelectQuery.cs b/New_College.Model/ViewModels/Query/SubjectSelectQuery.cs new file mode 100644 index 0000000..e07dd36 --- /dev/null +++ b/New_College.Model/ViewModels/Query/SubjectSelectQuery.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class SubjectSelectQuery + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 逗号隔开 + /// + public string SubjectSelect { get; set; } + + /// + /// 第三部传1 第五步选择传2 + /// + public int Status { get; set; } + } + + public class ByTagSubjectSelectQuery + { + public string Tag { get; set; } + + public int Year { get; set; } + + public int AreaId { get; set; } + } + + public class HollandSubjectQuery + { + /// + /// 年份 + /// + public int Year { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 标签 + /// + public string Tag { get; set; } + } + + public class NewSubjectQuery + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 第四步选的专业名称 + /// + public string MajorName { get; set; } + + /// + /// 第四步选科 + /// + public string Claim { get; set; } + + /// + /// 年份 + /// + public int Year { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 标签 + /// + public string Tag { get; set; } + } + + public class YearAreaQuery + { + /// + /// 年份 + /// + public int Year { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 省份名称 + /// + public string AreaName { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/SysRegionQuery.cs b/New_College.Model/ViewModels/Query/SysRegionQuery.cs new file mode 100644 index 0000000..b5c1f52 --- /dev/null +++ b/New_College.Model/ViewModels/Query/SysRegionQuery.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class SysRegionQuery + { + /// + /// 传0位获取省 传其他Code为获取下级数据 + /// + public string Code { get; set; } = "0"; + } +} diff --git a/New_College.Model/ViewModels/Query/TagEnrollmentPlaneQuery.cs b/New_College.Model/ViewModels/Query/TagEnrollmentPlaneQuery.cs new file mode 100644 index 0000000..5ffbf30 --- /dev/null +++ b/New_College.Model/ViewModels/Query/TagEnrollmentPlaneQuery.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class TagEnrollmentPlaneQuery + { + /// + /// 检索省份 + /// + public string SearchAreaName { get; set; } + /// + /// 科目 物化生政史地 传的话都好隔开 中文逗号 + /// + public string SubjectClaim { get; set; } + + /// + /// 高考年份 + /// + public int Year { get; set; } + ///// + ///// 学科层次 1、本科,2、专科 + ///// + //public int SubjectLevel { get; set; } + /// + /// 学生预估分数 + /// + public float Score { get; set; } + ///// + ///// CustomerId + ///// + //public int CustomerId { get; set; } + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 省份Id + /// + public int AreaId { get; set; } + /// + /// 霍兰德标签 + /// + public string Tag { get; set; } + ///// + ///// 办学性质 + ///// + //public int Nature { get; set; } + + ///// + ///// 学校类型:大学类型 0综合,1理工类,2医学类... + ///// + //public int Type { get; set; } + + /// + /// 1专业到学校 2学校到专业 + /// + public int SearchType { get; set; } + + /// + /// 批次Id + /// + public int BatchId { get; set; } + } + + /// + /// 懒人模式Query + /// + public class LazyEnrollmentPlaneQuery + { + //地区 学科 成绩 办学性质 高校级别 + /// + /// 高考年份 + /// + public int Year { get; set; } + + /// + /// 学生预估分数 + /// + public float Score { get; set; } + + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 办学性质1、公立,2、私立 + /// + public List Nature { get; set; } + + /// + /// 省份 名称 + /// + public List AreaNames { get; set; } + + ///// + ///// 高校级别 985传1 211传2 双一流传3 其他传0或者不传 + ///// + //public List SchoolLevel { get; set; } + + /// + /// 专业Ids最多三个 + /// + public List MajorIds { get; set; } + } + + /// + /// 冲稳保Query + /// + public class CWBEnrollmentPlaneQuery : BasePageRequest + { + /// + /// 高考年份 + /// + public int Year { get; set; } + + /// + /// 批次Id + /// + public int BatchId { get; set; } + + /// + /// 学生预估分数 + /// + public float Score { get; set; } + + /// + /// 学校省份 + /// + //public string UniversityAreaName { get; set; } + public List UniversityAreaName { get; set; } + + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 办学性质1、公立,2、私立 + /// + //public int Nature { get; set; } + public List Nature { get; set; } + + /// + /// 高校级别 985传1 211传2 双一流传3 其他传0或者不传 + /// + public List SchoolLevel { get; set; } + + /// + /// 专业Ids + /// + public List MajorIds { get; set; } + } + + /// + /// dto query + /// + public class DTOByTagQuery + { + public decimal OnMaxScore { get; set; } + public decimal OnMinScore { get; set; } + public decimal MaxScore { get; set; } + public decimal MinScore { get; set; } + public decimal DownMaxScore { get; set; } + public decimal DownMinScore { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/TestQuery.cs b/New_College.Model/ViewModels/Query/TestQuery.cs new file mode 100644 index 0000000..c44ca9b --- /dev/null +++ b/New_College.Model/ViewModels/Query/TestQuery.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class TestQuery + { + + } + + public class IntellectJson + { + public string name { get; set; } + + public int value { get; set; } + + } +} diff --git a/New_College.Model/ViewModels/Query/UniOrderQuery.cs b/New_College.Model/ViewModels/Query/UniOrderQuery.cs new file mode 100644 index 0000000..bc00175 --- /dev/null +++ b/New_College.Model/ViewModels/Query/UniOrderQuery.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class UnifiedOrderQuery + { + public int CardTypeId { get; set; } + + public decimal total_fee { get; set; } + + public string Phone { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/UniversityCollectionQuery.cs b/New_College.Model/ViewModels/Query/UniversityCollectionQuery.cs new file mode 100644 index 0000000..aebae3d --- /dev/null +++ b/New_College.Model/ViewModels/Query/UniversityCollectionQuery.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class UniversityCollectionQuery : BasePageRequest + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 1收藏 2对比 + /// + public int Type { get; set; } + } + + /// + /// 添加Query + /// + public class UniversityCollectionAddQuery + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 1收藏 2对比 + /// + public int Type { get; set; } + + /// + /// 院校Id + /// + public int UniversityId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/UniversityQuery.cs b/New_College.Model/ViewModels/Query/UniversityQuery.cs new file mode 100644 index 0000000..038e771 --- /dev/null +++ b/New_College.Model/ViewModels/Query/UniversityQuery.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class UniversityQuery : BasePageRequest + { + + + public string Name { get; set; } + /// + /// 学科层次 + /// + public int SubjectLevel { get; set; } + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 办学性质 + /// + public int Nature { get; set; } + /// + /// 用户id + /// + public int CustomerId { get; set; } + + /// + /// 学校类型 + /// + public int Type { get; set; } = -1; + + /// + /// 是否985 0、否,1、是 + /// + public int Nhef { get; set; } = -1; + + /// + /// 是否211 0、否,1、是 + /// + public int Sff { get; set; } = -1; + + /// + /// 是否双一流 0、否,1、是 + /// + public int Syl { get; set; } = -1; + } + + public class UniversityRankQuery + { + /// + /// 院校类型 (0,校友会 1,武书连 2,软科 3,QS 4,U.S.News) + /// + public int Type { get; set; } + } + + public class UniversityIdQuery : BasePageRequest + { + public int Id { get; set; } + } + + public class StringIdQuery + { + public string Id { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/VipCardInfoQuery.cs b/New_College.Model/ViewModels/Query/VipCardInfoQuery.cs new file mode 100644 index 0000000..bf7d048 --- /dev/null +++ b/New_College.Model/ViewModels/Query/VipCardInfoQuery.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels.Query +{ + public class VipCardInfoQuery: BasePageRequest + { + /// + /// 编号id + /// + public int Id { get; set; } + + /// + /// 账号 key + /// + public string Code { get; set; } + + + /// + /// vip 卡类别id + /// + public int CardTypeId { get; set; } + + + + + + } + public class VipCardInfoSearchQuery : BasePageRequest + { + /// + /// 编号id + /// + public int Id { get; set; } + + /// + /// 账号 key + /// + public string Code { get; set; } + + /// + /// 卡片类别 + /// + public string CardTypeId { get; set; } + + + /// + /// 是否绑定 + /// + public string IsBind { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/VipCardQuery.cs b/New_College.Model/ViewModels/Query/VipCardQuery.cs new file mode 100644 index 0000000..8e8ca98 --- /dev/null +++ b/New_College.Model/ViewModels/Query/VipCardQuery.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class VipCardQuery: BasePageRequest + { + public int CustomerId { get; set; } + + public string CardCode { get; set; } + } + + public class AutoVipInfoQuery + { + /// + /// vip卡类型id + /// + public int VipCardTypeId { get; set; } + + /// + /// 头部 + /// + public string Head { get; set; } + + /// + /// 长度 + /// + public int Length { get; set; } + + /// + /// 数量 + /// + public int Num { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/VipCardTypeQuery.cs b/New_College.Model/ViewModels/Query/VipCardTypeQuery.cs new file mode 100644 index 0000000..a65b20d --- /dev/null +++ b/New_College.Model/ViewModels/Query/VipCardTypeQuery.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels.Query +{ + public class VipCardTypeQuery:BasePageRequest + { + public int Id { get; set; } + + /// + /// 卡类型名称 + /// + public string Name { get; set; } + + /// + /// 金额 + /// + public decimal Money { get; set; } + + public string Desc { get; set; } + + /// + /// 天数 + /// + public int Day { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/VolunteerTableQuery.cs b/New_College.Model/ViewModels/Query/VolunteerTableQuery.cs new file mode 100644 index 0000000..e889e1f --- /dev/null +++ b/New_College.Model/ViewModels/Query/VolunteerTableQuery.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class VolunteerTableQuery + { + public int CustomerId { get; set; } + + public List details { get; set; } + } + + public class VolunteerDetail + { + public int UniversityId { get; set; } + + public string UniversityName { get; set; } + + public List PlanMagorIds { get; set; } + } + + public class HollandVolunteerTableQuery + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + + /// + /// 省份Name + /// + public string AreaName { get; set; } + + /// + /// 年份 + /// + public int Year { get; set; } + + /// + /// 分数 + /// + public float Score { set; get; } + + /// + /// 霍兰德推荐专业学校信息 + /// + public List infos { get; set; } + } + + /// + /// 霍兰德推荐专业学校信息 + /// + public class HollandPlanInfo + { + /// + /// 计划名称 + /// + public string MajorName { get; set; } + + /// + /// 院校信息 + /// + public List universitys { get; set; } + } + + /// + /// 院校信息 + /// + public class UniversityS + { + /// + /// 院校Id + /// + public int UniversityId { get; set; } + + /// + /// 院校名称 + /// + public string UniversityName { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/WeChatPayQuery.cs b/New_College.Model/ViewModels/Query/WeChatPayQuery.cs new file mode 100644 index 0000000..7747ed8 --- /dev/null +++ b/New_College.Model/ViewModels/Query/WeChatPayQuery.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public static class PayInfoQuery + { + /// + /// 创建者Ip + /// + public static string CreateIp { get; set; } + + /// + /// 后端域名 + /// + public static string ApiUrl { get; set; } + } + + public class WeChatPayQuery + { + /// + /// 用户Id + /// + public int CustomerId { get; set; } + + /// + /// 卡类型Id + /// + public int CardTypeId { get; set; } + + /// + /// 金额 + /// + public decimal Money { get; set; } + } + + public class ViewModelQuery + { + /// + /// 回调地址 + /// + public string NotifyUrl { get; set; } + + public string TradeType { get; set; } = "JSAPI"; + + /// + /// 订单号 + /// + public string OutTradeNo { get; set; } + + /// + /// 金额 + /// + public decimal TotalFee { get; set; } + + /// + /// 后端IP + /// + public string SpBillCreateIp { get; set; } + + /// + /// 项目编号 + /// + public string Body { get; set; } = "壹志愿VIP"; + } + + + + public class UniQuery + { + public int CustomerId { get; set; } + + public string out_trade_no { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Query/appQuestionQuery.cs b/New_College.Model/ViewModels/Query/appQuestionQuery.cs new file mode 100644 index 0000000..a36b1af --- /dev/null +++ b/New_College.Model/ViewModels/Query/appQuestionQuery.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class appQuestionQuery + { + public int CategoryId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/AliPayOrderResponse.cs b/New_College.Model/ViewModels/Result/AliPayOrderResponse.cs new file mode 100644 index 0000000..3dfa1d6 --- /dev/null +++ b/New_College.Model/ViewModels/Result/AliPayOrderResponse.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class AliPayOrderResponse + { + /// + /// 通知时间 + /// + public string notify_time { get; set; } + /// + /// 通知的类型 + /// + public string notify_type { get; set; } + /// + /// 通知校验ID + /// + public string notify_id { get; set; } + /// + /// 开发者的app_id + /// + public string app_id { get; set; } + /// + /// 编码格式 + /// + public string charset { get; set; } + /// + /// 接口版本 + /// + public string version { get; set; } + /// + /// 签名类型 + /// + public string sign_type { get; set; } + /// + /// 签名 + /// + public string sign { get; set; } + /// + /// 支付宝交易号 + /// + public string trade_no { get; set; } + /// + /// 商户订单号 + /// + public string out_trade_no { get; set; } + + + + /// + /// 商户业务号 + /// + public string out_biz_no { get; set; } + /// + /// 买家支付宝用户号 + /// + public string buyer_id { get; set; } + /// + /// 买家支付宝账号 + /// + public string buyer_logon_id { get; set; } + /// + /// 卖家支付宝用户号 + /// + public string seller_id { get; set; } + /// + /// 卖家支付宝账号 + /// + public string seller_email { get; set; } + /// + /// 交易状态 + /// + public string trade_status { get; set; } + /// + /// 订单金额 + /// + public decimal total_amount { get; set; } + /// + /// 实收金额 + /// + public decimal receipt_amount { get; set; } + /// + /// 付款金额 + /// + public decimal buyer_pay_amount { get; set; } + /// + /// 标题 + /// + public string subject { get; set; } + /// + /// 描述 + /// + public string body { get; set; } + /// + /// 交易创建时间 + /// + public string gmt_create { get; set; } + /// + /// 交易付款时间 + /// + public string gmt_payment { get; set; } + + /// + /// 交易结束时间 + /// + public string gmt_close { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/AliPayResult.cs b/New_College.Model/ViewModels/Result/AliPayResult.cs new file mode 100644 index 0000000..9bbae72 --- /dev/null +++ b/New_College.Model/ViewModels/Result/AliPayResult.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class AliOrderResult + { + public string Body { get; set; } + + public int CustomerId { get; set; } + + public string PayType { get; set; } + + public bool Success { get; set; } + + public string out_trade_no { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/CategoryInfoResult.cs b/New_College.Model/ViewModels/Result/CategoryInfoResult.cs new file mode 100644 index 0000000..c2ab1e9 --- /dev/null +++ b/New_College.Model/ViewModels/Result/CategoryInfoResult.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class CategoryInfoResult + { + public int Id { get; set; } + + public string Name { get; set; } + public string Desc { get; set; } + public string Detail { get; set; } + + public int JoinCount { get; set; } + } + + public class CategoryStatusResult + { + /// + /// 测试次数 + /// + public int TestNum { get; set; } = 0; + + /// + /// 周期Id + /// + public int CycleTimeId { get; set; } = 0; + + /// + /// 上次测试时间 + /// + public DateTime? TopTime { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/CreateOrderModel.cs b/New_College.Model/ViewModels/Result/CreateOrderModel.cs new file mode 100644 index 0000000..97da301 --- /dev/null +++ b/New_College.Model/ViewModels/Result/CreateOrderModel.cs @@ -0,0 +1,29 @@ +using New_College.Common; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class CreateOrderModel : BaseResponse + { + /// + /// 订单ID + /// + public string OrderId { get; set; } + + /// + /// 交易号 + /// + public string PayNo { get; set; } + /// + /// 订单状态 + /// + public EnumOrderType Status { get; set; } + + /// + /// 创建时间 + /// + public string CreateTime { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/CustomerInfoResult.cs b/New_College.Model/ViewModels/Result/CustomerInfoResult.cs new file mode 100644 index 0000000..b797c14 --- /dev/null +++ b/New_College.Model/ViewModels/Result/CustomerInfoResult.cs @@ -0,0 +1,151 @@ +using New_College.Common; +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class CustomerInfoResult + { + public string Token { get; set; } + /// + /// 返回状态1成功 2验证码错误 3失败 + /// + public int Status { get; set; } + + public int Id { get; set; } + + /// + /// 小程序openid + /// + public string OpenId { get; set; } + + /// + /// 用户头像 + /// + public string AvatarUrl { get; set; } + + /// + /// 用户名 + /// + public string NickName { get; set; } + + /// + /// 性别 1男 2女 + /// + public int Gender { get; set; } + + /// + /// 省市区id + /// + public int AreaId { get; set; } = 0; + + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + + /// + ///学生数据是否初始化(省份,选科等) + /// + public bool? Datainit { get; set; } = false; + + /// + /// 0(新高考),1(文科,理科) + /// + public int? Subject { get; set; } = 0; + + /// + /// 选科文字展示 + /// + public string Subjectgroup { get; set; } + + /// + /// 考生预计分数 + /// + public double? Expectedscore { get; set; } = 0; + + /// + /// 是否为VIP + /// + public bool IsVIP { get; set; } = false; + + public string VipCode { get; set; } + + + public string Phone { get; set; } + + public int IsUpdateScore { get; set; } + + public CustomerTypeEnum CustomerType { get; set; } + + /// + /// 学届 + /// + public int Year { get; set; } + + public string SchoolName { get; set; } + + public string ClassName { get; set; } + } + public class CustomerInfoListResult : BasePageRequest + { + /// + /// 编号id + /// + public int Id { get; set; } + + /// + /// 用户名 + /// + public string NickName { get; set; } + + /// + /// 电话 + /// + public string Phone { get; set; } + + /// + /// 住址 + /// + public string AreaName { get; set; } + + /// + /// Vip账号 + /// + public string VipCode { get; set; } + + /// + /// 0(新高考),1(文科,理科) + /// + public int? Subject { get; set; } = 0; + + /// + /// 选科文字展示 + /// + public string Subjectgroup { get; set; } + + /// + /// 考生预计分数 + /// + public double? Expectedscore { get; set; } = 0; + } + + public class CustomerSeachQuery : BasePageRequest + { + /// + /// 根据用户名查询 + /// + public string VipCode { get; set; } + + /// + /// 根据选科查询 + /// + public int Subject { get; set; } = 2; + + /// + /// 根据电话查询 + /// + public string Phone { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/CycleInfoResult.cs b/New_College.Model/ViewModels/Result/CycleInfoResult.cs new file mode 100644 index 0000000..28a157e --- /dev/null +++ b/New_College.Model/ViewModels/Result/CycleInfoResult.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class CycleInfoResult + { + public int nengliCycleId { get; set; } = 0; + public int duoweiCycleId { get; set; } = 0; + public int jiaolvCycleId { get; set; } = 0; + public int jinengCycleId { get; set; } = 0; + public int fenggeCycleId { get; set; } = 0; + } +} diff --git a/New_College.Model/ViewModels/Result/EnrollmentinproductionResult.cs b/New_College.Model/ViewModels/Result/EnrollmentinproductionResult.cs new file mode 100644 index 0000000..1aadfd6 --- /dev/null +++ b/New_College.Model/ViewModels/Result/EnrollmentinproductionResult.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class RequestEnrollmentinproductionResult + { + /// + /// 主键 + /// + public string Id { get; set; } + /// + /// 招生标题 + /// + public string Title { get; set; } + } + + public class RequestBaseResponse + { + public string Code { get; set; } = "0"; + + public string Msg { get; set; } + public bool Success { get; set; } = true; + + public List Data { get; set; } + } + + public class RequestQuery : BasePageRequest + { + public string Id { get; set; } + } + + public class RequestEnrollmentinproductionDetailResult + { + /// + /// 主键 + /// + public string Id { get; set; } + /// + /// 招生标题 + /// + public string Title { get; set; } + /// + /// 发布时间 + /// + public string Pushdate { get; set; } + /// + /// 文章内容 + /// + public string Content { get; set; } + } + + public class RequestDetailBaseResponse + { + public string Code { get; set; } = "0"; + + public string Msg { get; set; } + public bool Success { get; set; } = true; + + public RequestEnrollmentinproductionDetailResult Data { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/ExaminationPolicyResult.cs b/New_College.Model/ViewModels/Result/ExaminationPolicyResult.cs new file mode 100644 index 0000000..95d775f --- /dev/null +++ b/New_College.Model/ViewModels/Result/ExaminationPolicyResult.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class ExaminationPolicyResult + { + public int Id { get; set; } + + /// + /// 省份名称 + /// + public string AreaName { get; set; } + + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 修改时间 + /// + public DateTime? ModifyTime { get; set; } + } + + public class ExaminationPolicyOneResult + { + public int Id { get; set; } + + /// + /// 省份id + /// + public int AreaId { get; set; } + + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 图片 + /// + public string Img { get; set; } + + /// + /// 政策内容 + /// + public string Content { get; set; } + } + + /// + /// + /// + public class ExaminationPolicyOneDetail + { + public int Id { get; set; } + + /// + /// 标题 + /// + public string Title { get; set; } + + /// + /// 图片 + /// + public string Img { get; set; } + + /// + /// 政策内容 + /// + public string Content { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/MBTICalcModel.cs b/New_College.Model/ViewModels/Result/MBTICalcModel.cs new file mode 100644 index 0000000..ccb375a --- /dev/null +++ b/New_College.Model/ViewModels/Result/MBTICalcModel.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class MBTICalcModel + { + public int E { get; set; } + public int I { get; set; } + public int S { get; set; } + public int N { get; set; } + public int T { get; set; } + public int F { get; set; } + public int J { get; set; } + public int P { get; set; } + } + + + public class HollandModel + { + public int R { get; set; } + public int I { get; set; } + public int A { get; set; } + public int S { get; set; } + public int E { get; set; } + public int C { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/MajorPlanResult.cs b/New_College.Model/ViewModels/Result/MajorPlanResult.cs new file mode 100644 index 0000000..325bfab --- /dev/null +++ b/New_College.Model/ViewModels/Result/MajorPlanResult.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class MajorPlanResult + { + /// + /// 大类名称 + /// + public string Name { get; set; } + + /// + /// 专业科目信息 + /// + public List Majors { get; set; } + + } + + /// + /// 专业科目信息 + /// + public class MajorClaim + { + /// + /// 专业名称 + /// + public string MajorName { get; set; } + + /// + /// 科目要求 + /// + public string Claim { get; set; } + } + +} diff --git a/New_College.Model/ViewModels/Result/MajorResult.cs b/New_College.Model/ViewModels/Result/MajorResult.cs new file mode 100644 index 0000000..e4d6a70 --- /dev/null +++ b/New_College.Model/ViewModels/Result/MajorResult.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + /// + /// 专业介绍 + /// + public class MajorDetail + { + public string Name { get; set; } + public int id { get; set; } + /// + /// 专业简介 + /// + public string abstracts { get; set; } + /// + /// 主要课程 + /// + public string maincourse { get; set; } + /// + /// 考研方向 + /// + public string studydirection { get; set; } + /// + /// 就业方向 + /// + public string workdirection { get; set; } + } + + public class MajorSchool + { + /// + /// 专业ID + /// + public string majorid { get; set; } + /// + /// 学校ID + /// + public string id { get; set; } + /// + /// 学校名称 + /// + public string name { get; set; } + /// + /// 学校类型/公立/私立 + /// + public string type { get; set; } + /// + /// 985/211 + /// + public string nhefSff { get; set; } + + + //学校性质 + public string nature { get; set; } + //性质 详细 + public string naturedetail { get; set; } + //所属地区 + public string address { get; set; } + //学校图标 + public string logo { get; set; } + /// + /// 双一流 + /// + public string syl { get; set; } + } + + /// + /// 就业前景 + /// + public class CareerProspects + { + /// + /// 职业分布 + /// + public List JobDistribute { get; set; } + /// + /// 行业分布 + /// + public List TradeDistribute { get; set; } + /// + /// 地区分布 + /// + public List RegionDistribute { get; set; } + /// + /// 工资分布 + /// + public List MoneyDistribute { get; set; } + public WorkingYear WorkingYear { get; set; } + } + + public class WorkingYear + { + public string WorkingYears { get; set; } + public string WorkingYearsWage { get; set; } + } + + public class distribution + { + /// + /// 名称 + /// + public string name { get; set; } + /// + /// 分布比例 + /// + public double data { get; set; } + /// + /// 备注 + /// + public string detail { get; set; } + } + + public class uniMajorInfo + { + public int Id { get; set; } + public string Name { get; set; } + //public string Detail { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/MajorSalaryResult.cs b/New_College.Model/ViewModels/Result/MajorSalaryResult.cs new file mode 100644 index 0000000..3c49904 --- /dev/null +++ b/New_College.Model/ViewModels/Result/MajorSalaryResult.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class MajorSalaryResult + { + public int MajorId { get; set; } + + /// + /// 专业名称 + /// + public string MajorName { get; set; } + + /// + /// 薪资 + /// + public float Money { get; set; } + + /// + /// 上级名称 + /// + public string ParentName { get; set; } + + /// + /// 本科还是专科 + /// + public string Type { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/OccupationResult.cs b/New_College.Model/ViewModels/Result/OccupationResult.cs new file mode 100644 index 0000000..fe47e7f --- /dev/null +++ b/New_College.Model/ViewModels/Result/OccupationResult.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class OccupationResult + { + /// + /// 主键id + /// + public int Id { get; set; } + /// + /// 职业名称 + /// + public string Name { get; set; } + } + + public class uniOccSelect + { + public int ParentId { get; set; } + public int Level { get; set; } + public int Id { get; set; } + public string Name { get; set; } + public string OccupationName { get; set; } + } + + /// + /// 职业 + /// + public class OccupationDetailResult + { + public int Status { get; set; } + /// + /// 主键id + /// + public string Id { get; set; } + /// + /// 职业名称 + /// + public string Name { get; set; } + /// + /// 排序 + /// + public int Sort { get; set; } + /// + /// 职业介绍 + /// + public string OccupationIntraduce { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/OrderResult.cs b/New_College.Model/ViewModels/Result/OrderResult.cs new file mode 100644 index 0000000..49434e0 --- /dev/null +++ b/New_College.Model/ViewModels/Result/OrderResult.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class OrderResult + { + public string OrderId { get; set; } + + public string EndTime { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/ProbabilityResult.cs b/New_College.Model/ViewModels/Result/ProbabilityResult.cs new file mode 100644 index 0000000..c5c9ac4 --- /dev/null +++ b/New_College.Model/ViewModels/Result/ProbabilityResult.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class ProbabilityResult + { + public int Id { get; set; } + + /// + /// 院校名称 + /// + public string UniversityName { get; set; } + + /// + /// 院校Id + /// + public int UniversityId { get; set; } + + /// + /// 概率 + /// + public int Probability { get; set; } + + /// + /// 预估分数 + /// + public float EstimateScore { get; set; } + + /// + /// 年份 + /// + public int Year { get; set; } + + /// + /// 省份Id + /// + public int AreaId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/PsychMeasurementListResult.cs b/New_College.Model/ViewModels/Result/PsychMeasurementListResult.cs new file mode 100644 index 0000000..fb4d89a --- /dev/null +++ b/New_College.Model/ViewModels/Result/PsychMeasurementListResult.cs @@ -0,0 +1,195 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class PsychMeasurementListResult + { + /// + /// Id + /// + public int Id { get; set; } + + /// + /// 周期Id + /// + public int CycleTimeId { get; set; } + + /// + /// 周期名称 + /// + public string CycleName { get; set; } + + /// + /// 测评时间 + /// + public DateTime? CreateTime { get; set; } + + public int IsOpen { get; set; } + } + + + /// + /// 生涯能力反回结果 + /// + public class CareerResult + { + /// + /// 能力评估 + /// + public string TopicEval { get; set; } + + /// + /// 变化反馈 + /// + public string TopicGrow { get; set; } + + /// + /// 分数 + /// + public List Score { get; set; } + + public List List { get; set; } + } + + /// + /// namevalue + /// + public class NameValue + { + public string Name { get; set; } + + public int Value { get; set; } + } + + + public class ShowPsychologicalResult + { + public string Name { get; set; } + public List BillDatas { get; set; } + public List Billcators { get; set; } + public List Result { get; set; } + public List List { get; set; } + } + + public class PsyTagDetail + { + public string Name { get; set; } + + public string Title { get; set; } + + public string Content { get; set; } + + public int Score { get; set; } + + public int MaxScore { get; set; } + + public string Suggess { get; set; } + } + + public class EvBillDTO + { + public string Name { get; set; } + public List BillDatas { get; set; } + public List Billcators { get; set; } + } + + public class EvBillcator + { + public string text { get; set; } + public int max { get; set; } + } + + public class SubjectEvBillDTO + { + /// + /// 推荐选科 + /// + public string Name { get; set; } + + /// + /// 学科兴趣 + /// + public EvBillDTO subjectinterest { get; set; } + + /// + /// 学科能力 + /// + public EvBillDTO subjectability { get; set; } + } + + + + + /// + /// + /// + public class TagtestingHollandResult + { + public Radar radar { get; set; } + + public string TagName { get; set; } + } + + + public class Radar + { + public List categories { get; set; } + public List series { get; set; } + } + + public class serie + { + public string name { get; set; } + public List data { get; set; } + } + + + /// + /// 测评结果 + /// + public class UserResult + { + + /// + /// 标签 + /// + public string Tag { get; set; } + + /// + /// 适合的领域 + /// + public string Domain { get; set; } + + /// + /// 性格特征解读 + /// + public string Interpretation { get; set; } + + /// + /// 优势 + /// + public string Advantage { get; set; } + + /// + /// 劣势 + /// + public string Disadvantage { get; set; } + + /// + /// 偏好的活动特质 + /// + public string Feature { get; set; } + + /// + /// 可能存在的盲点 + /// + public string BlindSpot { get; set; } + + /// + /// 建议 + /// + public string Recommend { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/SubjectSelectResult.cs b/New_College.Model/ViewModels/Result/SubjectSelectResult.cs new file mode 100644 index 0000000..ce0e3e5 --- /dev/null +++ b/New_College.Model/ViewModels/Result/SubjectSelectResult.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class SubjectSelectResult + { + /// + /// 推荐选科 + /// + public string Select { get; set; } + + /// + /// 霍兰德 + /// + public float HollResult { get; set; } + + /// + /// 学科探索 + /// + public float SubjectResult { get; set; } + + /// + /// 自选结果 + /// + public float OptionalResult { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/SysRegionResult.cs b/New_College.Model/ViewModels/Result/SysRegionResult.cs new file mode 100644 index 0000000..3a443e5 --- /dev/null +++ b/New_College.Model/ViewModels/Result/SysRegionResult.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class SysRegionResult + { + public int Id { get; set; } + + public string Code { get; set; } + + public string Name { get; set; } + } + + public class SysRegionView + { + public int KeyId { get; set; } + + public int ParentCode { get; set; } + + public int Level { get; set; } + + public string RegionCode { get; set; } + + public string RegionName { get; set; } + + //public bool selected { get; set; } = false; + + } +} diff --git a/New_College.Model/ViewModels/Result/UniversityCollectionResult.cs b/New_College.Model/ViewModels/Result/UniversityCollectionResult.cs new file mode 100644 index 0000000..b328f33 --- /dev/null +++ b/New_College.Model/ViewModels/Result/UniversityCollectionResult.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class UniversityCollectionResult + { + public int Id { get; set; } + + /// + /// 院校Id + /// + public int UniversityId { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 是否985 + /// + public bool? Nhef { get; set; } + /// + /// 是否211 + /// + public bool? Sff { get; set; } + /// + /// 是否双一流 + /// + public bool? Syl { get; set; } + /// + /// 学校logo + /// + public string Logo { get; set; } + + /// + /// 是否加入对比 0就是没有 + /// + public bool IsContrast { get; set; } + + /// + /// 是否收藏 + /// + public bool IsCollection { get; set; } + } + + + public class UniversitycontrastResult + { + public int Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + /// + /// 排名 + /// + public int? Rank { get; set; } + /// + /// 是否985 + /// + public string Nhef { get; set; } + /// + /// 是否211 + /// + public string Sff { get; set; } + /// + /// 是否双一流 + /// + public string Syl { get; set; } + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 办学性质 + /// + public string Nature { get; set; } + /// + /// 隶属于 + /// + public string AscriptionName { get; set; } + /// + /// 学科层次 + /// + public string SubjectLevel { get; set; } + /// + /// 学校类型 + /// + public string UniversityType { get; set; } + /// + /// 创办时间 + /// + public string BuildDate { get; set; } + /// + /// 院士数 + /// + public string AcademicianCount { get; set; } + /// + /// 博士数 + /// + public string DoctorateCount { get; set; } + /// + /// 硕士数 + /// + public string MasterCount { get; set; } + + public string MajorNum { get; set; } + } + + + public class UniversityCollectionByMapResult + { + + public double Lng { get; set; } + + public double Lat { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/UniversityResult.cs b/New_College.Model/ViewModels/Result/UniversityResult.cs new file mode 100644 index 0000000..468233a --- /dev/null +++ b/New_College.Model/ViewModels/Result/UniversityResult.cs @@ -0,0 +1,278 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class UniversityResult + { + /// + /// 主键id + /// + public int Id { get; set; } + /// + /// 名称 + /// + public string Name { get; set; } + /// + /// 排名 + /// + public int? Rank { get; set; } + /// + /// 是否985 + /// + public bool? Nhef { get; set; } + /// + /// 是否211 + /// + public bool? Sff { get; set; } + /// + /// 是否双一流 + /// + public bool? Syl { get; set; } + /// + /// 学校logo + /// + public string Logo { get; set; } + /// + /// 学校简介 + /// + public string Description { get; set; } + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + /// + /// 办学性质 + /// + public int Nature { get; set; } + /// + /// 隶属于 + /// + public string AscriptionName { get; set; } + /// + /// 学科层次 + /// + public int? SubjectLevel { get; set; } + /// + /// 学校类型 + /// + public int? UniversityType { get; set; } + /// + /// 创办时间 + /// + public string BuildDate { get; set; } + /// + /// 院士数 + /// + public int? AcademicianCount { get; set; } + /// + /// 博士数 + /// + public int DoctorateCount { get; set; } + /// + /// 硕士数 + /// + public int MasterCount { get; set; } + + /// + /// 是否收藏 + /// + public bool? IsCollection { get; set; } = false; + + /// + /// 是否对比 + /// + public bool IsContrast { get; set; } = false; + + /// + /// 是否分数接近 + /// + public bool IsNearScore { get; set; } = false; + + /// + /// 院校图片json + /// + public string Imglist { get; set; } + + public string naturedetail { get; set; } + + /// + /// 长学校id + /// + public string LongSchoolId { get; set; } + } + + /// + /// + /// + public class UniversityDetailResponse + { + /// + /// -1代表 id为空 -2代表院校为空 + /// + public int Status { get; set; } + public UniversityResult universityResult { get; set; } + + public List relatedMajors { get; set; } + /// + /// 特色专业 + /// + public List relatespMajors { get; set; } + + /// + /// 毕业生省份流向 + /// + public graduateModel graduateModels { get; set; } + } + + + + /// + /// 相关专业 + /// + public class RelatedMajorModel + { + public int mid { get; set; } + + public string majorName { get; set; } + + } + + + + + /// + /// 毕业生省份流向 + /// + public class graduateModel + { + + public object provinces { get; set; } + + public object attrs { get; set; } + + } + + /// + /// 院校招生计划 + /// + public class NewPlanDescList + { + public string Name { get; set; } + public int PlanNum { get; set; } + public string Money { get; set; } + public string Scoreline { get; set; } + } + + public class BatchYear + { + public List Batch { get; set; } + public List Year { get; set; } + public List Type { get; set; } + } + + public class UniversityRankList + { + /// + /// 院校名称 + /// + public string Name { get; set; } + + /// + /// 排名 最新 + /// + public int Sort { get; set; } + + } + + /// + /// 录取概率分析结果 + /// + public class UniversityProbabilityResult + { + /// + /// 是否985 + /// + public bool? Nhef { get; set; } + /// + /// 是否211 + /// + public bool? Sff { get; set; } + /// + /// 是否双一流 + /// + public bool? Syl { get; set; } + /// + /// 学校logo + /// + public string Logo { get; set; } + /// + /// 名称 + /// + public string Name { get; set; } + /// + /// 省市区名称 + /// + public string AreaName { get; set; } + + /// + /// 学科层次 + /// + public int? SubjectLevel { get; set; } + /// + /// 办学性质 + /// + public int Nature { get; set; } + /// + /// 隶属于 + /// + public string AscriptionName { get; set; } + + /// + /// 排行 + /// + public int Rank { get; set; } + + /// + /// 概率 + /// + public float Probability { get; set; } + + /// + /// 预估分数 + /// + public float EstimateScore { get; set; } + + /// + /// 历年最低分 + /// + public List YearBatchScores { get; set; } + + /// + /// 建议 + /// + public string Proposal { get; set; } + } + + /// + /// 历年最低分 + /// + public class YearBatchScore + { + /// + /// 年份 + /// + public int Year { get; set; } + + /// + /// 批次名称 + /// + public string BatchName { get; set; } + + /// + /// 最低分 + /// + public float Score { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/VipCardInfoResult.cs b/New_College.Model/ViewModels/Result/VipCardInfoResult.cs new file mode 100644 index 0000000..6fa4ee8 --- /dev/null +++ b/New_College.Model/ViewModels/Result/VipCardInfoResult.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class VipCardInfoResult + { + /// + /// 编号id + /// + public int Id { get; set; } + + /// + /// 账号 key + /// + public string Code { get; set; } + /// + /// 是否一绑定 + /// + public int IsBind { get; set; } = 2; + + /// + /// 是否一绑定 + /// + public string IsBindName { get; set; } + + /// + /// vip 天数 + /// + public int Day { get; set; } + + /// + /// vip 金额 + /// + public decimal Money { get; set; } + + /// + /// vip 卡类别名字 + /// + public string CardTypeName { get; set; } + } + public class VipCardInfoResultOne: VipCardInfoResult + { + + public DateTime EndTime { get; set; } + + + /// + /// 卡类型Id + /// + public int CardTypeId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/VipCardTypeResult.cs b/New_College.Model/ViewModels/Result/VipCardTypeResult.cs new file mode 100644 index 0000000..0a2c6ed --- /dev/null +++ b/New_College.Model/ViewModels/Result/VipCardTypeResult.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class VipCardTypeResult + { + public int Id { get; set; } + + /// + /// 卡类型名称 + /// + public string Name { get; set; } + + /// + /// 金额 + /// + public decimal Money { get; set; } + + public string Desc { get; set; } + + /// + /// 天数 + /// + public int Day { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/VipInfoResult.cs b/New_College.Model/ViewModels/Result/VipInfoResult.cs new file mode 100644 index 0000000..e7ac74f --- /dev/null +++ b/New_College.Model/ViewModels/Result/VipInfoResult.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class VipInfoResult + { + /// + /// 是否是Vip + /// + public bool IsVip { get; set; } + + /// + /// 卡类型Id + /// + public int VipCardTypeId { get; set; } + + /// + /// 卡类型名称 + /// + public string VipCardTypeName { get; set; } + + /// + /// 卡号 + /// + public string VipCode { get; set; } + + /// + /// 到期时间 + /// + public DateTime VipEndTime { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/VolunteerResult.cs b/New_College.Model/ViewModels/Result/VolunteerResult.cs new file mode 100644 index 0000000..848da7e --- /dev/null +++ b/New_College.Model/ViewModels/Result/VolunteerResult.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + + /// + /// 志愿填报推荐一级懒人专用 + /// + public class UniversityEnrollmentPlanLazyResult + { + + /// + /// 排名 + /// + public string Rank { get; set; } + + public int UniversityId { get; set; } + + public string UniversityName { get; set; } + + public string Logo { get; set; } + + public int? Nhef { get; set; } + /// + /// 是否211 + /// + public int? Sff { get; set; } + /// + /// 是否双一流 + /// + public int? Syl { get; set; } + + public List Infos { get; set; } + + /// + /// 行政名称 + /// + public string AscriptionName { get; set; } + } + + /// + /// 志愿填报推荐一级 + /// + public class UniversityEnrollmentPlanResult + { + /// + /// 冲稳保 类型 + /// + public string Type { get; set; } + /// + /// 排名 + /// + public string Rank { get; set; } + + public int UniversityId { get; set; } + + public string UniversityName { get; set; } + + public string Logo { get; set; } + + public string AreaName { get; set; } + + public int? Nhef { get; set; } + /// + /// 是否211 + /// + public int? Sff { get; set; } + /// + /// 是否双一流 + /// + public int? Syl { get; set; } + + + + ///// + ///// 院校最低分 + ///// + //public double? Score { get; set; } + + ///// + ///// 位次 + ///// + //public string RankLine { get; set; } + + public int planCount { get; set; } + + /// + /// 对应的Ids + /// + public List PlanIds { get; set; } + + /// + /// 对应专业数 + /// + public int MjaorPlan { get; set; } + + ///// + /////01冲-02稳-03保 + ///// + //public int DatasType { get; set; } + + ///// + ///// 批次Id + ///// + //public string BatchtypeId { get; set; } + + public string AscriptionName { get; set; } + } + + /// + /// 点开学校 展示专业 + /// + public class PlanDescList + { + public string Name { get; set; } + public int PlanNum { get; set; } + public string Year { get; set; } + public string Money { get; set; } + public int MajorId { get; set; } + public float Scoreline { get; set; } + } + + /// + /// 冲稳保返回 + /// + public class CWBEnrollmentPlanResult + { + public string Name { get; set; } + public int Count { get; set; } + public List UniversityIds { get; set; } + //public PageModel result { get; set; } + } + + /// + /// 霍兰德获取推荐专业 + /// + public class TagEnrollmentPlanResult + { + /// + /// Id + /// + public int Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 颜色 + /// + public string Color { get; set; } + + /// + /// 对应信息 + /// + public List Info { get; set; } + } + + /// + /// 专用 + /// + public class OtherInfo + { + /// + /// Id + /// + public int Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 颜色 + /// + public string Color { get; set; } + } + + public class majorlists + { + public string MajorName { get; set; } + + public string TagColor { get; set; } + } + + /// + /// 学校信息 + /// + public class SchoolInfo + { + /// + /// 院校Id + /// + public int UniversityId { get; set; } + + /// + /// 院校名称 + /// + public string UniversityName { get; set; } + + public string AscriptionName { get; set; } + + public string Logo { get; set; } + + public int? Nhef { get; set; } + /// + /// 是否211 + /// + public int? Sff { get; set; } + /// + /// 是否双一流 + /// + public int? Syl { get; set; } + + } + + + public class LikeSchoolMajor + { + public string SchoolName { get; set; } + + public string MajorName { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/VolunteerTableResult.cs b/New_College.Model/ViewModels/Result/VolunteerTableResult.cs new file mode 100644 index 0000000..3e30a55 --- /dev/null +++ b/New_College.Model/ViewModels/Result/VolunteerTableResult.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + /// + /// 志愿表详情 + /// + public class VolunteerTableResult + { + public int UniversityId { get; set; } + + public string UniversityName { get; set; } + + public List Infos { get; set; } + } + + public class PlanInfo + { + public int MajorId { get; set; } + + public string PlanName { get; set; } + + public int PlanNum { get; set; } + + public string Year { get; set; } + + public string Money { get; set; } + + public float Scoreline { get; set; } + } + + /// + /// 志愿列表 + /// + public class VolunteerTableListResult + { + public int Id { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + public string CreateTime { get; set; } + } + + + + public class SimuVolunteerTableResult + { + /// + /// 排名 + /// + public int? Rank { get; set; } + /// + /// 是否985 + /// + public bool? Nhef { get; set; } + /// + /// 是否211 + /// + public bool? Sff { get; set; } + /// + /// 是否双一流 + /// + public bool? Syl { get; set; } + /// + /// 学校logo + /// + public string Logo { get; set; } + + public int UniversityId { get; set; } + + public string UniversityName { get; set; } + + public List Infos { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/WeChatPayResult.cs b/New_College.Model/ViewModels/Result/WeChatPayResult.cs new file mode 100644 index 0000000..db1948f --- /dev/null +++ b/New_College.Model/ViewModels/Result/WeChatPayResult.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class WeChatPayResult + { + + } + + /// + /// + /// + public class WeChatPubResult + { + public string appId { get; set; } + public string nonceStr { get; set; } + public string package { get; set; } + public string paySign { get; set; } + public string signType { get; set; } + public string timeStamp { get; set; } + public string parameter { get; set; } + public string response { get; set; } + public int MemberId { get; set; } + public int orderStatus { get; set; } + + public int cateId { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/WeixinPayRespose.cs b/New_College.Model/ViewModels/Result/WeixinPayRespose.cs new file mode 100644 index 0000000..fd1ce78 --- /dev/null +++ b/New_College.Model/ViewModels/Result/WeixinPayRespose.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class WeChatPayOrderResponse + { + public string return_code { get; set; } + public string return_msg { get; set; } + public string appid { get; set; } + public string mch_id { get; set; } + public string device_info { get; set; } + public string nonce_str { get; set; } + public string sign { get; set; } + public string sign_type { get; set; } + public string result_code { get; set; } + public string err_code { get; set; } + public string err_code_des { get; set; } + public int openid { get; set; } + public string is_subscribe { get; set; } + public string trade_type { get; set; } + public string bank_type { get; set; } + public int total_fee { get; set; } + public int settlement_total_fee { get; set; } + public string fee_type { get; set; } + public int cash_fee { get; set; } + public string cash_fee_type { get; set; } + public string transaction_id { get; set; } + public string out_trade_no { get; set; } + public string attach { get; set; } + public string time_end { get; set; } + + + + } +} diff --git a/New_College.Model/ViewModels/Result/WeixinPayResult.cs b/New_College.Model/ViewModels/Result/WeixinPayResult.cs new file mode 100644 index 0000000..137b51c --- /dev/null +++ b/New_College.Model/ViewModels/Result/WeixinPayResult.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class WeixinPayResult + { + public string appid { get; set; } + public string mchi_id { get; set; } + public string device_info { get; set; } + public string nonce_str { get; set; } + public string sign { get; set; } + public string result_code { get; set; } + public string err_code { get; set; } + public string err_code_des { get; set; } + public string trade_type { get; set; } + public string prepay_id { get; set; } + public string code_url { get; set; } + public string timeStamp { get; set; } + public string orderid { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/appQuestionResult.cs b/New_College.Model/ViewModels/Result/appQuestionResult.cs new file mode 100644 index 0000000..aa41a39 --- /dev/null +++ b/New_College.Model/ViewModels/Result/appQuestionResult.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class appQuestionResult + { + public int Id { get; set; } + + /// + /// 试题编号 + /// + public int QuestionSort { get; set; } + + /// + /// 问题typeid + /// + public int QuestionTypeId { get; set; } + + /// + /// 问题 + /// + public string QuestionTitle { get; set; } + + /// + /// 标签 + /// + public string QuestionTag { get; set; } + + /// + /// 问题类型 + /// + public string QuestionType { get; set; } + + /// + /// 是否正反记分 + /// + public int IsAddScore { get; set; } + } + + public class QuestionMBTI + { + /// + /// 试题编号 + /// + public int? QuestionSort { get; set; } + /// + /// 试题 + /// + public string QuestionTitle { get; set; } + + /// + /// 选项 + /// + public List Answers { get; set; } + } + + public class MBTIProperty + { + /// + /// A或者B + /// + public string key { get; set; } + + /// + /// 选项内容 + /// + public string value { get; set; } + + /// + /// 选项标签 + /// + public string type { get; set; } + } +} diff --git a/New_College.Model/ViewModels/Result/uniMajorSecond.cs b/New_College.Model/ViewModels/Result/uniMajorSecond.cs new file mode 100644 index 0000000..5b76787 --- /dev/null +++ b/New_College.Model/ViewModels/Result/uniMajorSecond.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + + + public class uniMajorSelect + { + public int Id { get; set; } + public string Name { get; set; } + } + + public class uniMajorClassSelect + { + public int TradeId { get; set; } + public int Id { get; set; } + public string Name { get; set; } + } + + /// + /// uni 专业列表 + /// + public class uniMajorInfoResult + { + public string FirstName { get; set; } + public List SecondInfo { get; set; } + public int MajorNum { get; set; } + } + /// + /// uni二级专业列表 + /// + public class uniMajorSecond + { + public int SecondId { get; set; } + public string MajorName { get; set; } + public int MajorNum { get; set; } + } +} diff --git a/New_College.Model/ViewModels/ServerViewModel.cs b/New_College.Model/ViewModels/ServerViewModel.cs new file mode 100644 index 0000000..4d7bd91 --- /dev/null +++ b/New_College.Model/ViewModels/ServerViewModel.cs @@ -0,0 +1,39 @@ +namespace New_College.Model.ViewModels +{ + /// + /// 服务器VM + /// + public class ServerViewModel + { + /// + /// 环境变量 + /// + public string EnvironmentName { get; set; } + /// + /// 系统架构 + /// + public string OSArchitecture { get; set; } + /// + /// ContentRootPath + /// + public string ContentRootPath { get; set; } + /// + /// WebRootPath + /// + public string WebRootPath { get; set; } + /// + /// .NET Core版本 + /// + public string FrameworkDescription { get; set; } + /// + /// 内存占用 + /// + public string MemoryFootprint { get; set; } + /// + /// 启动时间 + /// + public string WorkingTime { get; set; } + + + } +} diff --git a/New_College.Model/ViewModels/SidebarMenuViewModel.cs b/New_College.Model/ViewModels/SidebarMenuViewModel.cs new file mode 100644 index 0000000..2ae20a9 --- /dev/null +++ b/New_College.Model/ViewModels/SidebarMenuViewModel.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +namespace New_College.Model.ViewModels +{ + /// + /// 菜单展示model + /// + public class SidebarMenuViewModel + { + public SidebarMenuViewModel() + { + this.ChildMenuList = new List(); + } + + public int Id { get; set; } + public int? ParentId { get; set; } + public string Name { get; set; } + public string Icon { get; set; } + public string Code { get; set; } + public string LinkUrl { get; set; } + public string Area { get; set; } + public string Controller { get; set; } + public string Action { get; set; } + + public List ChildMenuList { get; set; } + } +} diff --git a/New_College.Model/ViewModels/TestRestSharpGetDto.cs b/New_College.Model/ViewModels/TestRestSharpGetDto.cs new file mode 100644 index 0000000..dfc3809 --- /dev/null +++ b/New_College.Model/ViewModels/TestRestSharpGetDto.cs @@ -0,0 +1,19 @@ +using New_College.Model.Models; + +namespace New_College.Model.ViewModels +{ + /// + /// 用来测试 RestSharp Get 请求 + /// + public class TestRestSharpGetDto + { + /// + /// + /// + public string success { get; set; } + /// + /// + /// + public BlogArticle data { get; set; } + } +} diff --git a/New_College.Model/ViewModels/TestRestSharpPostDto.cs b/New_College.Model/ViewModels/TestRestSharpPostDto.cs new file mode 100644 index 0000000..0b12aab --- /dev/null +++ b/New_College.Model/ViewModels/TestRestSharpPostDto.cs @@ -0,0 +1,11 @@ +namespace New_College.Model.ViewModels +{ + /// + /// 用来测试 RestSharp Post 请求 + /// + public class TestRestSharpPostDto + { + public bool success { get; set; } + public string name { get; set; } + } +} diff --git a/New_College.Model/ViewModels/TokenInfoViewModel.cs b/New_College.Model/ViewModels/TokenInfoViewModel.cs new file mode 100644 index 0000000..003e4b7 --- /dev/null +++ b/New_College.Model/ViewModels/TokenInfoViewModel.cs @@ -0,0 +1,10 @@ +namespace New_College.Model.ViewModels +{ + public class TokenInfoViewModel + { + public bool success { get; set; } + public string token { get; set; } + public double expires_in { get; set; } + public string token_type { get; set; } + } +} diff --git a/New_College.Model/ViewModels/TopgbViewModels.cs b/New_College.Model/ViewModels/TopgbViewModels.cs new file mode 100644 index 0000000..17bf477 --- /dev/null +++ b/New_College.Model/ViewModels/TopgbViewModels.cs @@ -0,0 +1,23 @@ +namespace New_College.Model.ViewModels +{ + /// + /// 留言排名展示类 + /// + public class TopgbViewModels + { + /// 博客ID + /// + /// + public int? blogId { get; set; } + + /// + /// 评论数量 + /// + public int counts { get; set; } + + /// 博客标题 + /// + /// + public string btitle { get; set; } + } +} diff --git a/New_College.Model/WeixinAuthInfo.cs b/New_College.Model/WeixinAuthInfo.cs new file mode 100644 index 0000000..5142ea9 --- /dev/null +++ b/New_College.Model/WeixinAuthInfo.cs @@ -0,0 +1,53 @@ +using System; +using System.Text.Json.Serialization; +using Newtonsoft.Json.Converters; + +namespace New_College.Model +{ + public class Weixinauthinfo + { + public string openid { get; set; } + public string session_key { get; set; } + public string unionid { get; set; } + public string errcode { get; set; } + public string errmsg { get; set; } + + } + + public class GetPhoneInfo + { + public string encryptedData { get; set; } + + public string iv { get; set; } + + public string openid { get; set; } + + public string session_key { get; set; } + } + + public class WeixinModel + { + public string appId { get; set; } + public string nonceStr { get; set; } + public string package { get; set; } + public string signType { get; set; } + public string timeStamp { get; set; } + } + + public class WeixinPayRespose + { + public string appid { get; set; } + public string mchi_id { get; set; } + public string device_info { get; set; } + public string nonce_str { get; set; } + public string sign { get; set; } + public string result_code { get; set; } + public string err_code { get; set; } + public string err_code_des { get; set; } + public string trade_type { get; set; } + public string prepay_id { get; set; } + public string code_url { get; set; } + public string timeStamp { get; set; } + public string orderid { get; set; } + } +} diff --git a/New_College.Model/WeixinResult.cs b/New_College.Model/WeixinResult.cs new file mode 100644 index 0000000..642e2d7 --- /dev/null +++ b/New_College.Model/WeixinResult.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace New_College.Model.ViewModels +{ + public class WeixinResult + { + public string openId { get; set; } + + public string token { get; set; } + + public string session_key { get; set; } + + } +} diff --git a/New_College.Publish.Docker.sh b/New_College.Publish.Docker.sh new file mode 100644 index 0000000..a35f585 --- /dev/null +++ b/New_College.Publish.Docker.sh @@ -0,0 +1,18 @@ +# 停止容器 +docker stop apkcontainer +# 删除容器 +docker rm apkcontainer +# 删除镜像 +docker rmi laozhangisphi/apkimg +# 切换目录 +cd /home/New_College +# 发布项目 +./New_College.Publish.Linux.sh +# 进入目录 +cd /home/New_College/.PublishFiles +# 编译镜像 +docker build -t laozhangisphi/apkimg . +# 生成容器 +docker run --name=apkcontainer -v /etc/localtime:/etc/localtime -it -p 8081:8081 laozhangisphi/apkimg +# 启动容器 +docker start apkcontainer diff --git a/New_College.Publish.Linux.sh b/New_College.Publish.Linux.sh new file mode 100644 index 0000000..cdc01f8 --- /dev/null +++ b/New_College.Publish.Linux.sh @@ -0,0 +1,6 @@ +git pull; +rm -rf .PublishFiles; +dotnet build; +dotnet publish -o /home/New_College/New_College.Api/bin/Debug/netcoreapp3.1; +cp -r /home/New_College/New_College.Api/bin/Debug/netcoreapp3.1 .PublishFiles; +echo "Successfully!!!! ^ please see the file .PublishFiles"; \ No newline at end of file diff --git a/New_College.Publish.bat b/New_College.Publish.bat new file mode 100644 index 0000000..c8e292d --- /dev/null +++ b/New_College.Publish.bat @@ -0,0 +1,19 @@ +color B + +del .PublishFiles\*.* /s /q + +dotnet restore + +dotnet build + +cd New_College.Api + +dotnet publish -o ..\New_College.Api\bin\Debug\netcoreapp3.1\ + +md ..\.PublishFiles + +xcopy ..\New_College.Api\bin\Debug\netcoreapp3.1\*.* ..\.PublishFiles\ /s /e + +echo "Successfully!!!! ^ please see the file .PublishFiles" + +cmd \ No newline at end of file diff --git a/New_College.Repository/BASE/BaseRepository.cs b/New_College.Repository/BASE/BaseRepository.cs new file mode 100644 index 0000000..094fe51 --- /dev/null +++ b/New_College.Repository/BASE/BaseRepository.cs @@ -0,0 +1,458 @@ +using New_College.Common; +using New_College.Common.DB; +using New_College.IRepository.Base; +using New_College.IRepository.UnitOfWork; +using New_College.Model; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; + +namespace New_College.Repository.Base +{ + public class BaseRepository : IBaseRepository where TEntity : class, new() + { + private readonly IUnitOfWork _unitOfWork; + private SqlSugarClient _dbBase; + + private ISqlSugarClient _db + { + get + { + /* 如果要开启多库支持, + * 1、在appsettings.json 中开启MutiDBEnabled节点为true,必填 + * 2、设置一个主连接的数据库ID,节点MainDB,对应的连接字符串的Enabled也必须true,必填 + */ + if (Appsettings.app(new string[] { "MutiDBEnabled" }).ObjToBool()) + { + if (typeof(TEntity).GetTypeInfo().GetCustomAttributes(typeof(SugarTable), true).FirstOrDefault((x => x.GetType() == typeof(SugarTable))) is SugarTable sugarTable && !string.IsNullOrEmpty(sugarTable.TableDescription)) + { + _dbBase.ChangeDatabase(sugarTable.TableDescription.ToLower()); + } + else + { + _dbBase.ChangeDatabase(MainDb.CurrentDbConnId.ToLower()); + } + } + + return _dbBase; + } + } + + internal ISqlSugarClient Db + { + get { return _db; } + } + + public BaseRepository(IUnitOfWork unitOfWork) + { + _unitOfWork = unitOfWork; + _dbBase = unitOfWork.GetDbClient(); + } + + + + public async Task QueryById(object objId) + { + //return await Task.Run(() => _db.Queryable().InSingle(objId)); + return await _db.Queryable().In(objId).SingleAsync(); + } + /// + /// 功能描述:根据ID查询一条数据 + /// 作  者:New_College + /// + /// id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 + /// 是否使用缓存 + /// 数据实体 + public async Task QueryById(object objId, bool blnUseCache = false) + { + //return await Task.Run(() => _db.Queryable().WithCacheIF(blnUseCache).InSingle(objId)); + return await _db.Queryable().WithCacheIF(blnUseCache).In(objId).SingleAsync(); + } + + /// + /// 功能描述:根据ID查询数据 + /// 作  者:New_College + /// + /// id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 + /// 数据实体列表 + public async Task> QueryByIDs(object[] lstIds) + { + //return await Task.Run(() => _db.Queryable().In(lstIds).ToList()); + return await _db.Queryable().In(lstIds).ToListAsync(); + } + + /// + /// 写入实体数据 + /// + /// 博文实体类 + /// + public async Task Add(TEntity entity) + { + //var i = await Task.Run(() => _db.Insertable(entity).ExecuteReturnBigIdentity()); + ////返回的i是long类型,这里你可以根据你的业务需要进行处理 + //return (int)i; + + var insert = _db.Insertable(entity); + return await insert.ExecuteReturnIdentityAsync(); + } + + + /// + /// 写入实体数据 + /// + /// 实体类 + /// 指定只插入列 + /// 返回自增量列 + public async Task Add(TEntity entity, Expression> insertColumns = null) + { + var insert = _db.Insertable(entity); + if (insertColumns == null) + { + return await insert.ExecuteReturnIdentityAsync(); + } + else + { + return await insert.InsertColumns(insertColumns).ExecuteReturnIdentityAsync(); + } + } + + /// + /// 批量插入实体(速度快) + /// + /// 实体集合 + /// 影响行数 + public async Task Add(List listEntity) + { + return await _db.Insertable(listEntity.ToArray()).ExecuteCommandAsync(); + } + + /// + /// 更新实体数据 + /// + /// 博文实体类 + /// + public async Task Update(TEntity entity) + { + ////这种方式会以主键为条件 + //var i = await Task.Run(() => _db.Updateable(entity).ExecuteCommand()); + //return i > 0; + //这种方式会以主键为条件 + return await _db.Updateable(entity).ExecuteCommandHasChangeAsync(); + } + + public async Task Update(TEntity entity, string strWhere) + { + //return await Task.Run(() => _db.Updateable(entity).Where(strWhere).ExecuteCommand() > 0); + return await _db.Updateable(entity).Where(strWhere).ExecuteCommandHasChangeAsync(); + } + + public async Task Update(string strSql, SugarParameter[] parameters = null) + { + //return await Task.Run(() => _db.Ado.ExecuteCommand(strSql, parameters) > 0); + return await _db.Ado.ExecuteCommandAsync(strSql, parameters) > 0; + } + + public async Task Update(object operateAnonymousObjects) + { + return await _db.Updateable(operateAnonymousObjects).ExecuteCommandAsync() > 0; + } + + public async Task Update( + TEntity entity, + List lstColumns = null, + List lstIgnoreColumns = null, + string strWhere = "" + ) + { + //IUpdateable up = await Task.Run(() => _db.Updateable(entity)); + //if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0) + //{ + // up = await Task.Run(() => up.IgnoreColumns(it => lstIgnoreColumns.Contains(it))); + //} + //if (lstColumns != null && lstColumns.Count > 0) + //{ + // up = await Task.Run(() => up.UpdateColumns(it => lstColumns.Contains(it))); + //} + //if (!string.IsNullOrEmpty(strWhere)) + //{ + // up = await Task.Run(() => up.Where(strWhere)); + //} + //return await Task.Run(() => up.ExecuteCommand()) > 0; + + IUpdateable up = _db.Updateable(entity); + if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0) + { + up = up.IgnoreColumns(lstIgnoreColumns.ToArray()); + } + if (lstColumns != null && lstColumns.Count > 0) + { + up = up.UpdateColumns(lstColumns.ToArray()); + } + if (!string.IsNullOrEmpty(strWhere)) + { + up = up.Where(strWhere); + } + return await up.ExecuteCommandHasChangeAsync(); + } + + /// + /// 根据实体删除一条数据 + /// + /// 博文实体类 + /// + public async Task Delete(TEntity entity) + { + //var i = await Task.Run(() => _db.Deleteable(entity).ExecuteCommand()); + //return i > 0; + return await _db.Deleteable(entity).ExecuteCommandHasChangeAsync(); + } + + /// + /// 删除指定ID的数据 + /// + /// 主键ID + /// + public async Task DeleteById(object id) + { + //var i = await Task.Run(() => _db.Deleteable(id).ExecuteCommand()); + //return i > 0; + return await _db.Deleteable(id).ExecuteCommandHasChangeAsync(); + } + + /// + /// 删除指定ID集合的数据(批量删除) + /// + /// 主键ID集合 + /// + public async Task DeleteByIds(object[] ids) + { + //var i = await Task.Run(() => _db.Deleteable().In(ids).ExecuteCommand()); + //return i > 0; + return await _db.Deleteable().In(ids).ExecuteCommandHasChangeAsync(); + } + + + + /// + /// 功能描述:查询所有数据 + /// 作  者:New_College + /// + /// 数据列表 + public async Task> Query() + { + return await _db.Queryable().ToListAsync(); + } + + /// + /// 功能描述:查询数据列表 + /// 作  者:New_College + /// + /// 条件 + /// 数据列表 + public async Task> Query(string strWhere) + { + //return await Task.Run(() => _db.Queryable().WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList()); + return await _db.Queryable().WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToListAsync(); + } + + /// + /// 功能描述:查询数据列表 + /// 作  者:New_College + /// + /// whereExpression + /// 数据列表 + public async Task> Query(Expression> whereExpression) + { + return await _db.Queryable().WhereIF(whereExpression != null, whereExpression).ToListAsync(); + } + + /// + /// 功能描述:查询一个列表 + /// 作  者:New_College + /// + /// 条件表达式 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(Expression> whereExpression, string strOrderByFileds) + { + //return await Task.Run(() => _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToList()); + return await _db.Queryable().WhereIF(whereExpression != null, whereExpression).OrderByIF(strOrderByFileds != null, strOrderByFileds).ToListAsync(); + } + /// + /// 功能描述:查询一个列表 + /// + /// + /// + /// + /// + public async Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) + { + //return await Task.Run(() => _db.Queryable().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToList()); + return await _db.Queryable().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToListAsync(); + } + + /// + /// 功能描述:查询一个列表 + /// 作  者:New_College + /// + /// 条件 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(string strWhere, string strOrderByFileds) + { + //return await Task.Run(() => _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToList()); + return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToListAsync(); + } + + + /// + /// 功能描述:查询前N条数据 + /// 作  者:New_College + /// + /// 条件表达式 + /// 前N条 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query( + Expression> whereExpression, + int intTop, + string strOrderByFileds) + { + //return await Task.Run(() => _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).Take(intTop).ToList()); + return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).Take(intTop).ToListAsync(); + } + + /// + /// 功能描述:查询前N条数据 + /// 作  者:New_College + /// + /// 条件 + /// 前N条 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query( + string strWhere, + int intTop, + string strOrderByFileds) + { + //return await Task.Run(() => _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).Take(intTop).ToList()); + return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).Take(intTop).ToListAsync(); + } + + /// + /// 根据sql语句查询 + /// + /// 完整的sql语句 + /// 参数 + /// 泛型集合 + public async Task> QuerySql(string strSql, SugarParameter[] parameters = null) + { + return await _db.Ado.SqlQueryAsync(strSql, parameters); + } + + /// + /// 根据sql语句查询 + /// + /// 完整的sql语句 + /// 参数 + /// DataTable + public async Task QueryTable(string strSql, SugarParameter[] parameters = null) + { + return await _db.Ado.GetDataTableAsync(strSql, parameters); + } + + /// + /// 功能描述:分页查询 + /// 作  者:New_College + /// + /// 条件表达式 + /// 页码(下标0) + /// 页大小 + /// 数据总量 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query( + Expression> whereExpression, + int intPageIndex, + int intPageSize, + string strOrderByFileds) + { + //return await Task.Run(() => _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToPageList(intPageIndex, intPageSize)); + return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(whereExpression != null, whereExpression).ToPageListAsync(intPageIndex, intPageSize); + } + + /// + /// 功能描述:分页查询 + /// 作  者:New_College + /// + /// 条件 + /// 页码(下标0) + /// 页大小 + /// 数据总量 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query( + string strWhere, + int intPageIndex, + int intPageSize, + + string strOrderByFileds) + { + //return await Task.Run(() => _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToPageList(intPageIndex, intPageSize)); + return await _db.Queryable().OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds).WhereIF(!string.IsNullOrEmpty(strWhere), strWhere).ToPageListAsync(intPageIndex, intPageSize); + } + + + + /// + /// 分页查询[使用版本,其他分页未测试] + /// + /// 条件表达式 + /// 页码(下标0) + /// 页大小 + /// 排序字段,如name asc,age desc + /// + public async Task> QueryPage(Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) + { + + RefAsync totalCount = 0; + var list = await _db.Queryable() + .WhereIF(whereExpression != null, whereExpression) + .OrderByIF(!string.IsNullOrEmpty(strOrderByFileds), strOrderByFileds) + .ToPageListAsync(intPageIndex, intPageSize, totalCount); + + int pageCount = (Math.Ceiling(totalCount.ObjToDecimal() / intPageSize.ObjToDecimal())).ObjToInt(); + return new PageModel() { dataCount = totalCount, pageCount = pageCount, page = intPageIndex, PageSize = intPageSize, data = list }; + } + + + /// + ///查询-多表查询 + /// + /// 实体1 + /// 实体2 + /// 实体3 + /// 返回对象 + /// 关联表达式 (join1,join2) => new object[] {JoinType.Left,join1.UserNo==join2.UserNo} + /// 返回表达式 (s1, s2) => new { Id =s1.UserNo, Id1 = s2.UserNo} + /// 查询表达式 (w1, w2) =>w1.UserNo == "") + /// + public async Task> QueryMuch( + Expression> joinExpression, + Expression> selectExpression, + Expression> whereLambda = null) where T : class, new() + { + if (whereLambda == null) + { + return await _db.Queryable(joinExpression).Select(selectExpression).ToListAsync(); + } + return await _db.Queryable(joinExpression).Where(whereLambda).Select(selectExpression).ToListAsync(); + } + + } + +} diff --git a/New_College.Repository/BASE/D_EnrollmentinproductionRepository.cs b/New_College.Repository/BASE/D_EnrollmentinproductionRepository.cs new file mode 100644 index 0000000..1989a42 --- /dev/null +++ b/New_College.Repository/BASE/D_EnrollmentinproductionRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_EnrollmentinproductionRepository + /// + public class D_EnrollmentinproductionRepository : BaseRepository, ID_EnrollmentinproductionRepository + { + public D_EnrollmentinproductionRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_GraduateFlowRepository.cs b/New_College.Repository/BASE/D_GraduateFlowRepository.cs new file mode 100644 index 0000000..2cbd7a6 --- /dev/null +++ b/New_College.Repository/BASE/D_GraduateFlowRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_GraduateFlowRepository + /// + public class D_GraduateFlowRepository : BaseRepository, ID_GraduateFlowRepository + { + public D_GraduateFlowRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_LongIdMapRepository.cs b/New_College.Repository/BASE/D_LongIdMapRepository.cs new file mode 100644 index 0000000..791048a --- /dev/null +++ b/New_College.Repository/BASE/D_LongIdMapRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_LongIdMapRepository + /// + public class D_LongIdMapRepository : BaseRepository, ID_LongIdMapRepository + { + public D_LongIdMapRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorCategoryRepository.cs b/New_College.Repository/BASE/D_MajorCategoryRepository.cs new file mode 100644 index 0000000..d27dbb0 --- /dev/null +++ b/New_College.Repository/BASE/D_MajorCategoryRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorCategoryRepository + /// + public class D_MajorCategoryRepository : BaseRepository, ID_MajorCategoryRepository + { + public D_MajorCategoryRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorClassRepository.cs b/New_College.Repository/BASE/D_MajorClassRepository.cs new file mode 100644 index 0000000..5640509 --- /dev/null +++ b/New_College.Repository/BASE/D_MajorClassRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorClassRepository + /// + public class D_MajorClassRepository : BaseRepository, ID_MajorClassRepository + { + public D_MajorClassRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorInformationRepository.cs b/New_College.Repository/BASE/D_MajorInformationRepository.cs new file mode 100644 index 0000000..bc2bcc0 --- /dev/null +++ b/New_College.Repository/BASE/D_MajorInformationRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorInformationRepository + /// + public class D_MajorInformationRepository : BaseRepository, ID_MajorInformationRepository + { + public D_MajorInformationRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorMapOccouptionRepository.cs b/New_College.Repository/BASE/D_MajorMapOccouptionRepository.cs new file mode 100644 index 0000000..e35c264 --- /dev/null +++ b/New_College.Repository/BASE/D_MajorMapOccouptionRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorMapOccouptionRepository + /// + public class D_MajorMapOccouptionRepository : BaseRepository, ID_MajorMapOccouptionRepository + { + public D_MajorMapOccouptionRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorMapTagRepository.cs b/New_College.Repository/BASE/D_MajorMapTagRepository.cs new file mode 100644 index 0000000..7d2168a --- /dev/null +++ b/New_College.Repository/BASE/D_MajorMapTagRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorMapTagRepository + /// + public class D_MajorMapTagRepository : BaseRepository, ID_MajorMapTagRepository + { + public D_MajorMapTagRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorMapUniversityRepository.cs b/New_College.Repository/BASE/D_MajorMapUniversityRepository.cs new file mode 100644 index 0000000..0d9dbc7 --- /dev/null +++ b/New_College.Repository/BASE/D_MajorMapUniversityRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorMapUniversityRepository + /// + public class D_MajorMapUniversityRepository : BaseRepository, ID_MajorMapUniversityRepository + { + public D_MajorMapUniversityRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorObtainRepository.cs b/New_College.Repository/BASE/D_MajorObtainRepository.cs new file mode 100644 index 0000000..4704e30 --- /dev/null +++ b/New_College.Repository/BASE/D_MajorObtainRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorObtainRepository + /// + public class D_MajorObtainRepository : BaseRepository, ID_MajorObtainRepository + { + public D_MajorObtainRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorRepository.cs b/New_College.Repository/BASE/D_MajorRepository.cs new file mode 100644 index 0000000..f2c4513 --- /dev/null +++ b/New_College.Repository/BASE/D_MajorRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorRepository + /// + public class D_MajorRepository : BaseRepository, ID_MajorRepository + { + public D_MajorRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_MajorSalaryRepository.cs b/New_College.Repository/BASE/D_MajorSalaryRepository.cs new file mode 100644 index 0000000..3e1b82e --- /dev/null +++ b/New_College.Repository/BASE/D_MajorSalaryRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_MajorSalaryRepository + /// + public class D_MajorSalaryRepository : BaseRepository, ID_MajorSalaryRepository + { + public D_MajorSalaryRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_OccMapTagRepository.cs b/New_College.Repository/BASE/D_OccMapTagRepository.cs new file mode 100644 index 0000000..0746603 --- /dev/null +++ b/New_College.Repository/BASE/D_OccMapTagRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_OccMapTagRepository + /// + public class D_OccMapTagRepository : BaseRepository, ID_OccMapTagRepository + { + public D_OccMapTagRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_OccupationCategoryRepository.cs b/New_College.Repository/BASE/D_OccupationCategoryRepository.cs new file mode 100644 index 0000000..b8c4f5f --- /dev/null +++ b/New_College.Repository/BASE/D_OccupationCategoryRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_OccupationCategoryRepository + /// + public class D_OccupationCategoryRepository : BaseRepository, ID_OccupationCategoryRepository + { + public D_OccupationCategoryRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_OccupationRepository.cs b/New_College.Repository/BASE/D_OccupationRepository.cs new file mode 100644 index 0000000..0c56793 --- /dev/null +++ b/New_College.Repository/BASE/D_OccupationRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_OccupationRepository + /// + public class D_OccupationRepository : BaseRepository, ID_OccupationRepository + { + public D_OccupationRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_UniversityCollectionRepository.cs b/New_College.Repository/BASE/D_UniversityCollectionRepository.cs new file mode 100644 index 0000000..ec0a744 --- /dev/null +++ b/New_College.Repository/BASE/D_UniversityCollectionRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_UniversityCollectionRepository + /// + public class D_UniversityCollectionRepository : BaseRepository, ID_UniversityCollectionRepository + { + public D_UniversityCollectionRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_UniversityRankRepository.cs b/New_College.Repository/BASE/D_UniversityRankRepository.cs new file mode 100644 index 0000000..d50da16 --- /dev/null +++ b/New_College.Repository/BASE/D_UniversityRankRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_UniversityRankRepository + /// + public class D_UniversityRankRepository : BaseRepository, ID_UniversityRankRepository + { + public D_UniversityRankRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_UniversityRepository.cs b/New_College.Repository/BASE/D_UniversityRepository.cs new file mode 100644 index 0000000..f8caa60 --- /dev/null +++ b/New_College.Repository/BASE/D_UniversityRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_UniversityRepository + /// + public class D_UniversityRepository : BaseRepository, ID_UniversityRepository + { + public D_UniversityRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/D_UniversityimgRepository.cs b/New_College.Repository/BASE/D_UniversityimgRepository.cs new file mode 100644 index 0000000..494ca0e --- /dev/null +++ b/New_College.Repository/BASE/D_UniversityimgRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// D_UniversityimgRepository + /// + public class D_UniversityimgRepository : BaseRepository, ID_UniversityimgRepository + { + public D_UniversityimgRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IBaseRepository.cs b/New_College.Repository/BASE/IBaseRepository.cs new file mode 100644 index 0000000..443b738 --- /dev/null +++ b/New_College.Repository/BASE/IBaseRepository.cs @@ -0,0 +1,58 @@ +using New_College.Model; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq.Expressions; +using System.Threading.Tasks; + +namespace New_College.IRepository.Base +{ + public interface IBaseRepository where TEntity : class + { + + Task QueryById(object objId); + Task QueryById(object objId, bool blnUseCache = false); + Task> QueryByIDs(object[] lstIds); + + Task Add(TEntity model); + + Task Add(List listEntity); + + Task DeleteById(object id); + + Task Delete(TEntity model); + + Task DeleteByIds(object[] ids); + + Task Update(TEntity model); + Task Update(TEntity entity, string strWhere); + Task Update(object operateAnonymousObjects); + + Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string strWhere = ""); + + Task> Query(); + Task> Query(string strWhere); + Task> Query(Expression> whereExpression); + Task> Query(Expression> whereExpression, string strOrderByFileds); + Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true); + Task> Query(string strWhere, string strOrderByFileds); + + Task> Query(Expression> whereExpression, int intTop, string strOrderByFileds); + Task> Query(string strWhere, int intTop, string strOrderByFileds); + Task> QuerySql(string strSql, SugarParameter[] parameters = null); + Task QueryTable(string strSql, SugarParameter[] parameters = null); + + Task> Query( + Expression> whereExpression, int intPageIndex, int intPageSize, string strOrderByFileds); + Task> Query(string strWhere, int intPageIndex, int intPageSize, string strOrderByFileds); + + + Task> QueryPage(Expression> whereExpression, int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null); + + Task> QueryMuch( + Expression> joinExpression, + Expression> selectExpression, + Expression> whereLambda = null) where T : class, new(); + } +} diff --git a/New_College.Repository/BASE/ID_EnrollmentinproductionRepository.cs b/New_College.Repository/BASE/ID_EnrollmentinproductionRepository.cs new file mode 100644 index 0000000..5206dbe --- /dev/null +++ b/New_College.Repository/BASE/ID_EnrollmentinproductionRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_EnrollmentinproductionRepository + /// + public interface ID_EnrollmentinproductionRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_GraduateFlowRepository.cs b/New_College.Repository/BASE/ID_GraduateFlowRepository.cs new file mode 100644 index 0000000..1f64c0d --- /dev/null +++ b/New_College.Repository/BASE/ID_GraduateFlowRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_GraduateFlowRepository + /// + public interface ID_GraduateFlowRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_LongIdMapRepository.cs b/New_College.Repository/BASE/ID_LongIdMapRepository.cs new file mode 100644 index 0000000..bf1cb99 --- /dev/null +++ b/New_College.Repository/BASE/ID_LongIdMapRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_LongIdMapRepository + /// + public interface ID_LongIdMapRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorCategoryRepository.cs b/New_College.Repository/BASE/ID_MajorCategoryRepository.cs new file mode 100644 index 0000000..ae44597 --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorCategoryRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorCategoryRepository + /// + public interface ID_MajorCategoryRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorClassRepository.cs b/New_College.Repository/BASE/ID_MajorClassRepository.cs new file mode 100644 index 0000000..5981fcb --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorClassRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorClassRepository + /// + public interface ID_MajorClassRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorInformationRepository.cs b/New_College.Repository/BASE/ID_MajorInformationRepository.cs new file mode 100644 index 0000000..ea8b8b8 --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorInformationRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorInformationRepository + /// + public interface ID_MajorInformationRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorMapOccouptionRepository.cs b/New_College.Repository/BASE/ID_MajorMapOccouptionRepository.cs new file mode 100644 index 0000000..b3aefe2 --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorMapOccouptionRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorMapOccouptionRepository + /// + public interface ID_MajorMapOccouptionRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorMapTagRepository.cs b/New_College.Repository/BASE/ID_MajorMapTagRepository.cs new file mode 100644 index 0000000..0a3ffa2 --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorMapTagRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorMapTagRepository + /// + public interface ID_MajorMapTagRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorMapUniversityRepository.cs b/New_College.Repository/BASE/ID_MajorMapUniversityRepository.cs new file mode 100644 index 0000000..99bd180 --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorMapUniversityRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorMapUniversityRepository + /// + public interface ID_MajorMapUniversityRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorObtainRepository.cs b/New_College.Repository/BASE/ID_MajorObtainRepository.cs new file mode 100644 index 0000000..5a1a31a --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorObtainRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorObtainRepository + /// + public interface ID_MajorObtainRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorRepository.cs b/New_College.Repository/BASE/ID_MajorRepository.cs new file mode 100644 index 0000000..5c105f7 --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorRepository + /// + public interface ID_MajorRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_MajorSalaryRepository.cs b/New_College.Repository/BASE/ID_MajorSalaryRepository.cs new file mode 100644 index 0000000..4da2a0b --- /dev/null +++ b/New_College.Repository/BASE/ID_MajorSalaryRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_MajorSalaryRepository + /// + public interface ID_MajorSalaryRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_OccMapTagRepository.cs b/New_College.Repository/BASE/ID_OccMapTagRepository.cs new file mode 100644 index 0000000..2dfbaac --- /dev/null +++ b/New_College.Repository/BASE/ID_OccMapTagRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_OccMapTagRepository + /// + public interface ID_OccMapTagRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_OccupationCategoryRepository.cs b/New_College.Repository/BASE/ID_OccupationCategoryRepository.cs new file mode 100644 index 0000000..13404c8 --- /dev/null +++ b/New_College.Repository/BASE/ID_OccupationCategoryRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_OccupationCategoryRepository + /// + public interface ID_OccupationCategoryRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_OccupationRepository.cs b/New_College.Repository/BASE/ID_OccupationRepository.cs new file mode 100644 index 0000000..d3bc0e5 --- /dev/null +++ b/New_College.Repository/BASE/ID_OccupationRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_OccupationRepository + /// + public interface ID_OccupationRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_UniversityCollectionRepository.cs b/New_College.Repository/BASE/ID_UniversityCollectionRepository.cs new file mode 100644 index 0000000..9a8e0a6 --- /dev/null +++ b/New_College.Repository/BASE/ID_UniversityCollectionRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_UniversityCollectionRepository + /// + public interface ID_UniversityCollectionRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_UniversityRankRepository.cs b/New_College.Repository/BASE/ID_UniversityRankRepository.cs new file mode 100644 index 0000000..82de41c --- /dev/null +++ b/New_College.Repository/BASE/ID_UniversityRankRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_UniversityRankRepository + /// + public interface ID_UniversityRankRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_UniversityRepository.cs b/New_College.Repository/BASE/ID_UniversityRepository.cs new file mode 100644 index 0000000..c937759 --- /dev/null +++ b/New_College.Repository/BASE/ID_UniversityRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_UniversityRepository + /// + public interface ID_UniversityRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ID_UniversityimgRepository.cs b/New_College.Repository/BASE/ID_UniversityimgRepository.cs new file mode 100644 index 0000000..c948a51 --- /dev/null +++ b/New_College.Repository/BASE/ID_UniversityimgRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ID_UniversityimgRepository + /// + public interface ID_UniversityimgRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ISysRegionRepository.cs b/New_College.Repository/BASE/ISysRegionRepository.cs new file mode 100644 index 0000000..d3e0059 --- /dev/null +++ b/New_College.Repository/BASE/ISysRegionRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ISysRegionRepository + /// + public interface ISysRegionRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_BatchTypeInfoRepository.cs b/New_College.Repository/BASE/IT_BatchTypeInfoRepository.cs new file mode 100644 index 0000000..df512bc --- /dev/null +++ b/New_College.Repository/BASE/IT_BatchTypeInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_BatchTypeInfoRepository + /// + public interface IT_BatchTypeInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_BatchlineRepository.cs b/New_College.Repository/BASE/IT_BatchlineRepository.cs new file mode 100644 index 0000000..2258b07 --- /dev/null +++ b/New_College.Repository/BASE/IT_BatchlineRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_BatchlineRepository + /// + public interface IT_BatchlineRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_EnrollmentBatchRepository.cs b/New_College.Repository/BASE/IT_EnrollmentBatchRepository.cs new file mode 100644 index 0000000..defc301 --- /dev/null +++ b/New_College.Repository/BASE/IT_EnrollmentBatchRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_EnrollmentBatchRepository + /// + public interface IT_EnrollmentBatchRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_EnrollmentPlaneRepository.cs b/New_College.Repository/BASE/IT_EnrollmentPlaneRepository.cs new file mode 100644 index 0000000..cfc90df --- /dev/null +++ b/New_College.Repository/BASE/IT_EnrollmentPlaneRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_EnrollmentPlaneRepository + /// + public interface IT_EnrollmentPlaneRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_EnrollmentPlanedescRepository.cs b/New_College.Repository/BASE/IT_EnrollmentPlanedescRepository.cs new file mode 100644 index 0000000..5f9a296 --- /dev/null +++ b/New_College.Repository/BASE/IT_EnrollmentPlanedescRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_EnrollmentPlanedescRepository + /// + public interface IT_EnrollmentPlanedescRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_GearInfoRepository.cs b/New_College.Repository/BASE/IT_GearInfoRepository.cs new file mode 100644 index 0000000..1fb9fab --- /dev/null +++ b/New_College.Repository/BASE/IT_GearInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_GearInfoRepository + /// + public interface IT_GearInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_LongIdMapRepository.cs b/New_College.Repository/BASE/IT_LongIdMapRepository.cs new file mode 100644 index 0000000..869f897 --- /dev/null +++ b/New_College.Repository/BASE/IT_LongIdMapRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_LongIdMapRepository + /// + public interface IT_LongIdMapRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_PlanMapTagRepository.cs b/New_College.Repository/BASE/IT_PlanMapTagRepository.cs new file mode 100644 index 0000000..5a93b98 --- /dev/null +++ b/New_College.Repository/BASE/IT_PlanMapTagRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_PlanMapTagRepository + /// + public interface IT_PlanMapTagRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IT_RegionScoreRepository.cs b/New_College.Repository/BASE/IT_RegionScoreRepository.cs new file mode 100644 index 0000000..c203403 --- /dev/null +++ b/New_College.Repository/BASE/IT_RegionScoreRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IT_RegionScoreRepository + /// + public interface IT_RegionScoreRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ITest_CategoryInfoRepository.cs b/New_College.Repository/BASE/ITest_CategoryInfoRepository.cs new file mode 100644 index 0000000..2fd7d11 --- /dev/null +++ b/New_College.Repository/BASE/ITest_CategoryInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ITest_CategoryInfoRepository + /// + public interface ITest_CategoryInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ITest_CycleTimeInfoRepository.cs b/New_College.Repository/BASE/ITest_CycleTimeInfoRepository.cs new file mode 100644 index 0000000..4e25574 --- /dev/null +++ b/New_College.Repository/BASE/ITest_CycleTimeInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ITest_CycleTimeInfoRepository + /// + public interface ITest_CycleTimeInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ITest_HollandResultInfoRepository.cs b/New_College.Repository/BASE/ITest_HollandResultInfoRepository.cs new file mode 100644 index 0000000..e91a117 --- /dev/null +++ b/New_College.Repository/BASE/ITest_HollandResultInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ITest_HollandResultInfoRepository + /// + public interface ITest_HollandResultInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ITest_MBTIMapResultRepository.cs b/New_College.Repository/BASE/ITest_MBTIMapResultRepository.cs new file mode 100644 index 0000000..d4d4e02 --- /dev/null +++ b/New_College.Repository/BASE/ITest_MBTIMapResultRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ITest_MBTIMapResultRepository + /// + public interface ITest_MBTIMapResultRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ITest_PsychMeasurementInfoRepository.cs b/New_College.Repository/BASE/ITest_PsychMeasurementInfoRepository.cs new file mode 100644 index 0000000..e634b6e --- /dev/null +++ b/New_College.Repository/BASE/ITest_PsychMeasurementInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ITest_PsychMeasurementInfoRepository + /// + public interface ITest_PsychMeasurementInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ITest_QuestionInfoRepository.cs b/New_College.Repository/BASE/ITest_QuestionInfoRepository.cs new file mode 100644 index 0000000..4ef89ce --- /dev/null +++ b/New_College.Repository/BASE/ITest_QuestionInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ITest_QuestionInfoRepository + /// + public interface ITest_QuestionInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/ITest_QuestionTypeInfoRepository.cs b/New_College.Repository/BASE/ITest_QuestionTypeInfoRepository.cs new file mode 100644 index 0000000..f91fda1 --- /dev/null +++ b/New_College.Repository/BASE/ITest_QuestionTypeInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// ITest_QuestionTypeInfoRepository + /// + public interface ITest_QuestionTypeInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IU_ProbabilityHistoryRepository.cs b/New_College.Repository/BASE/IU_ProbabilityHistoryRepository.cs new file mode 100644 index 0000000..716571b --- /dev/null +++ b/New_College.Repository/BASE/IU_ProbabilityHistoryRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IU_ProbabilityHistoryRepository + /// + public interface IU_ProbabilityHistoryRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IU_VolunteerTableDetailRepository.cs b/New_College.Repository/BASE/IU_VolunteerTableDetailRepository.cs new file mode 100644 index 0000000..2edc1c0 --- /dev/null +++ b/New_College.Repository/BASE/IU_VolunteerTableDetailRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IU_VolunteerTableDetailRepository + /// + public interface IU_VolunteerTableDetailRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IU_VolunteerTableRepository.cs b/New_College.Repository/BASE/IU_VolunteerTableRepository.cs new file mode 100644 index 0000000..5dda855 --- /dev/null +++ b/New_College.Repository/BASE/IU_VolunteerTableRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IU_VolunteerTableRepository + /// + public interface IU_VolunteerTableRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IV_CustomerInfoRepository.cs b/New_College.Repository/BASE/IV_CustomerInfoRepository.cs new file mode 100644 index 0000000..2eb3785 --- /dev/null +++ b/New_College.Repository/BASE/IV_CustomerInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IV_CustomerInfoRepository + /// + public interface IV_CustomerInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IV_ExaminationPolicyRepository.cs b/New_College.Repository/BASE/IV_ExaminationPolicyRepository.cs new file mode 100644 index 0000000..3f1f000 --- /dev/null +++ b/New_College.Repository/BASE/IV_ExaminationPolicyRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IV_ExaminationPolicyRepository + /// + public interface IV_ExaminationPolicyRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IV_OrderInfoRepository.cs b/New_College.Repository/BASE/IV_OrderInfoRepository.cs new file mode 100644 index 0000000..735e47e --- /dev/null +++ b/New_College.Repository/BASE/IV_OrderInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IV_OrderInfoRepository + /// + public interface IV_OrderInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IV_SubjectSelectRepository.cs b/New_College.Repository/BASE/IV_SubjectSelectRepository.cs new file mode 100644 index 0000000..423b0b5 --- /dev/null +++ b/New_College.Repository/BASE/IV_SubjectSelectRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IV_SubjectSelectRepository + /// + public interface IV_SubjectSelectRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IV_VipCardInfoRepository.cs b/New_College.Repository/BASE/IV_VipCardInfoRepository.cs new file mode 100644 index 0000000..0661022 --- /dev/null +++ b/New_College.Repository/BASE/IV_VipCardInfoRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IV_VipCardInfoRepository + /// + public interface IV_VipCardInfoRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/IV_VipCardTypeRepository.cs b/New_College.Repository/BASE/IV_VipCardTypeRepository.cs new file mode 100644 index 0000000..9db583c --- /dev/null +++ b/New_College.Repository/BASE/IV_VipCardTypeRepository.cs @@ -0,0 +1,12 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; + +namespace New_College.IRepository +{ + /// + /// IV_VipCardTypeRepository + /// + public interface IV_VipCardTypeRepository : IBaseRepository + { + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/SysRegionRepository.cs b/New_College.Repository/BASE/SysRegionRepository.cs new file mode 100644 index 0000000..da36da8 --- /dev/null +++ b/New_College.Repository/BASE/SysRegionRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// SysRegionRepository + /// + public class SysRegionRepository : BaseRepository, ISysRegionRepository + { + public SysRegionRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_BatchTypeInfoRepository.cs b/New_College.Repository/BASE/T_BatchTypeInfoRepository.cs new file mode 100644 index 0000000..57ea505 --- /dev/null +++ b/New_College.Repository/BASE/T_BatchTypeInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_BatchTypeInfoRepository + /// + public class T_BatchTypeInfoRepository : BaseRepository, IT_BatchTypeInfoRepository + { + public T_BatchTypeInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_BatchlineRepository.cs b/New_College.Repository/BASE/T_BatchlineRepository.cs new file mode 100644 index 0000000..de84588 --- /dev/null +++ b/New_College.Repository/BASE/T_BatchlineRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_BatchlineRepository + /// + public class T_BatchlineRepository : BaseRepository, IT_BatchlineRepository + { + public T_BatchlineRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_EnrollmentBatchRepository.cs b/New_College.Repository/BASE/T_EnrollmentBatchRepository.cs new file mode 100644 index 0000000..305d1b2 --- /dev/null +++ b/New_College.Repository/BASE/T_EnrollmentBatchRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_EnrollmentBatchRepository + /// + public class T_EnrollmentBatchRepository : BaseRepository, IT_EnrollmentBatchRepository + { + public T_EnrollmentBatchRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_EnrollmentPlaneRepository.cs b/New_College.Repository/BASE/T_EnrollmentPlaneRepository.cs new file mode 100644 index 0000000..ef72622 --- /dev/null +++ b/New_College.Repository/BASE/T_EnrollmentPlaneRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_EnrollmentPlaneRepository + /// + public class T_EnrollmentPlaneRepository : BaseRepository, IT_EnrollmentPlaneRepository + { + public T_EnrollmentPlaneRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_EnrollmentPlanedescRepository.cs b/New_College.Repository/BASE/T_EnrollmentPlanedescRepository.cs new file mode 100644 index 0000000..c579987 --- /dev/null +++ b/New_College.Repository/BASE/T_EnrollmentPlanedescRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_EnrollmentPlanedescRepository + /// + public class T_EnrollmentPlanedescRepository : BaseRepository, IT_EnrollmentPlanedescRepository + { + public T_EnrollmentPlanedescRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_GearInfoRepository.cs b/New_College.Repository/BASE/T_GearInfoRepository.cs new file mode 100644 index 0000000..2dc6f61 --- /dev/null +++ b/New_College.Repository/BASE/T_GearInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_GearInfoRepository + /// + public class T_GearInfoRepository : BaseRepository, IT_GearInfoRepository + { + public T_GearInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_LongIdMapRepository.cs b/New_College.Repository/BASE/T_LongIdMapRepository.cs new file mode 100644 index 0000000..d821b8d --- /dev/null +++ b/New_College.Repository/BASE/T_LongIdMapRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_LongIdMapRepository + /// + public class T_LongIdMapRepository : BaseRepository, IT_LongIdMapRepository + { + public T_LongIdMapRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_PlanMapTagRepository.cs b/New_College.Repository/BASE/T_PlanMapTagRepository.cs new file mode 100644 index 0000000..6e1e4fa --- /dev/null +++ b/New_College.Repository/BASE/T_PlanMapTagRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_PlanMapTagRepository + /// + public class T_PlanMapTagRepository : BaseRepository, IT_PlanMapTagRepository + { + public T_PlanMapTagRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/T_RegionScoreRepository.cs b/New_College.Repository/BASE/T_RegionScoreRepository.cs new file mode 100644 index 0000000..f101599 --- /dev/null +++ b/New_College.Repository/BASE/T_RegionScoreRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// T_RegionScoreRepository + /// + public class T_RegionScoreRepository : BaseRepository, IT_RegionScoreRepository + { + public T_RegionScoreRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/Test_CategoryInfoRepository.cs b/New_College.Repository/BASE/Test_CategoryInfoRepository.cs new file mode 100644 index 0000000..7c62c2b --- /dev/null +++ b/New_College.Repository/BASE/Test_CategoryInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// Test_CategoryInfoRepository + /// + public class Test_CategoryInfoRepository : BaseRepository, ITest_CategoryInfoRepository + { + public Test_CategoryInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/Test_CycleTimeInfoRepository.cs b/New_College.Repository/BASE/Test_CycleTimeInfoRepository.cs new file mode 100644 index 0000000..ad5dd6c --- /dev/null +++ b/New_College.Repository/BASE/Test_CycleTimeInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// Test_CycleTimeInfoRepository + /// + public class Test_CycleTimeInfoRepository : BaseRepository, ITest_CycleTimeInfoRepository + { + public Test_CycleTimeInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/Test_HollandResultInfoRepository.cs b/New_College.Repository/BASE/Test_HollandResultInfoRepository.cs new file mode 100644 index 0000000..f7f8ccd --- /dev/null +++ b/New_College.Repository/BASE/Test_HollandResultInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// Test_HollandResultInfoRepository + /// + public class Test_HollandResultInfoRepository : BaseRepository, ITest_HollandResultInfoRepository + { + public Test_HollandResultInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/Test_MBTIMapResultRepository.cs b/New_College.Repository/BASE/Test_MBTIMapResultRepository.cs new file mode 100644 index 0000000..a288094 --- /dev/null +++ b/New_College.Repository/BASE/Test_MBTIMapResultRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// Test_MBTIMapResultRepository + /// + public class Test_MBTIMapResultRepository : BaseRepository, ITest_MBTIMapResultRepository + { + public Test_MBTIMapResultRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/Test_PsychMeasurementInfoRepository.cs b/New_College.Repository/BASE/Test_PsychMeasurementInfoRepository.cs new file mode 100644 index 0000000..71324b0 --- /dev/null +++ b/New_College.Repository/BASE/Test_PsychMeasurementInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// Test_PsychMeasurementInfoRepository + /// + public class Test_PsychMeasurementInfoRepository : BaseRepository, ITest_PsychMeasurementInfoRepository + { + public Test_PsychMeasurementInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/Test_QuestionInfoRepository.cs b/New_College.Repository/BASE/Test_QuestionInfoRepository.cs new file mode 100644 index 0000000..c4625de --- /dev/null +++ b/New_College.Repository/BASE/Test_QuestionInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// Test_QuestionInfoRepository + /// + public class Test_QuestionInfoRepository : BaseRepository, ITest_QuestionInfoRepository + { + public Test_QuestionInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/Test_QuestionTypeInfoRepository.cs b/New_College.Repository/BASE/Test_QuestionTypeInfoRepository.cs new file mode 100644 index 0000000..be08f1a --- /dev/null +++ b/New_College.Repository/BASE/Test_QuestionTypeInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// Test_QuestionTypeInfoRepository + /// + public class Test_QuestionTypeInfoRepository : BaseRepository, ITest_QuestionTypeInfoRepository + { + public Test_QuestionTypeInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/U_ProbabilityHistoryRepository.cs b/New_College.Repository/BASE/U_ProbabilityHistoryRepository.cs new file mode 100644 index 0000000..160b5c2 --- /dev/null +++ b/New_College.Repository/BASE/U_ProbabilityHistoryRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// U_ProbabilityHistoryRepository + /// + public class U_ProbabilityHistoryRepository : BaseRepository, IU_ProbabilityHistoryRepository + { + public U_ProbabilityHistoryRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/U_VolunteerTableDetailRepository.cs b/New_College.Repository/BASE/U_VolunteerTableDetailRepository.cs new file mode 100644 index 0000000..9094c01 --- /dev/null +++ b/New_College.Repository/BASE/U_VolunteerTableDetailRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// U_VolunteerTableDetailRepository + /// + public class U_VolunteerTableDetailRepository : BaseRepository, IU_VolunteerTableDetailRepository + { + public U_VolunteerTableDetailRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/U_VolunteerTableRepository.cs b/New_College.Repository/BASE/U_VolunteerTableRepository.cs new file mode 100644 index 0000000..03da388 --- /dev/null +++ b/New_College.Repository/BASE/U_VolunteerTableRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// U_VolunteerTableRepository + /// + public class U_VolunteerTableRepository : BaseRepository, IU_VolunteerTableRepository + { + public U_VolunteerTableRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/V_CustomerInfoRepository.cs b/New_College.Repository/BASE/V_CustomerInfoRepository.cs new file mode 100644 index 0000000..f9e0058 --- /dev/null +++ b/New_College.Repository/BASE/V_CustomerInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// V_CustomerInfoRepository + /// + public class V_CustomerInfoRepository : BaseRepository, IV_CustomerInfoRepository + { + public V_CustomerInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/V_ExaminationPolicyRepository.cs b/New_College.Repository/BASE/V_ExaminationPolicyRepository.cs new file mode 100644 index 0000000..9c1de2c --- /dev/null +++ b/New_College.Repository/BASE/V_ExaminationPolicyRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// V_ExaminationPolicyRepository + /// + public class V_ExaminationPolicyRepository : BaseRepository, IV_ExaminationPolicyRepository + { + public V_ExaminationPolicyRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/V_OrderInfoRepository.cs b/New_College.Repository/BASE/V_OrderInfoRepository.cs new file mode 100644 index 0000000..72731cb --- /dev/null +++ b/New_College.Repository/BASE/V_OrderInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// V_OrderInfoRepository + /// + public class V_OrderInfoRepository : BaseRepository, IV_OrderInfoRepository + { + public V_OrderInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/V_SubjectSelectRepository.cs b/New_College.Repository/BASE/V_SubjectSelectRepository.cs new file mode 100644 index 0000000..3680614 --- /dev/null +++ b/New_College.Repository/BASE/V_SubjectSelectRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// V_SubjectSelectRepository + /// + public class V_SubjectSelectRepository : BaseRepository, IV_SubjectSelectRepository + { + public V_SubjectSelectRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/V_VipCardInfoRepository.cs b/New_College.Repository/BASE/V_VipCardInfoRepository.cs new file mode 100644 index 0000000..d6fbe00 --- /dev/null +++ b/New_College.Repository/BASE/V_VipCardInfoRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// V_VipCardInfoRepository + /// + public class V_VipCardInfoRepository : BaseRepository, IV_VipCardInfoRepository + { + public V_VipCardInfoRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/BASE/V_VipCardTypeRepository.cs b/New_College.Repository/BASE/V_VipCardTypeRepository.cs new file mode 100644 index 0000000..2858826 --- /dev/null +++ b/New_College.Repository/BASE/V_VipCardTypeRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository; +using New_College.IRepository.UnitOfWork; +using New_College.Model.Models; +using New_College.Repository.Base; + +namespace New_College.Repository +{ + /// + /// V_VipCardTypeRepository + /// + public class V_VipCardTypeRepository : BaseRepository, IV_VipCardTypeRepository + { + public V_VipCardTypeRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + } +} \ No newline at end of file diff --git a/New_College.Repository/IRoleModulePermissionRepository.cs b/New_College.Repository/IRoleModulePermissionRepository.cs new file mode 100644 index 0000000..ff50923 --- /dev/null +++ b/New_College.Repository/IRoleModulePermissionRepository.cs @@ -0,0 +1,17 @@ +using New_College.IRepository.Base; +using New_College.Model.Models; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.IRepository +{ + /// + /// IRoleModulePermissionRepository + /// + public interface IRoleModulePermissionRepository : IBaseRepository//类名 + { + Task> QueryMuchTable(); + Task> RoleModuleMaps(); + Task> GetRMPMaps(); + } +} diff --git a/New_College.Repository/New_College.Repository.csproj b/New_College.Repository/New_College.Repository.csproj new file mode 100644 index 0000000..4db3a5e --- /dev/null +++ b/New_College.Repository/New_College.Repository.csproj @@ -0,0 +1,23 @@ + + + + netcoreapp3.1 + + + + ..\New_College.Api\bin\Debug\ + + + + ..\New_College\bin\Release\ + + + + + + + + + + + diff --git a/New_College.Repository/RoleModulePermissionRepository.cs b/New_College.Repository/RoleModulePermissionRepository.cs new file mode 100644 index 0000000..6f3098f --- /dev/null +++ b/New_College.Repository/RoleModulePermissionRepository.cs @@ -0,0 +1,97 @@ +using New_College.Repository.Base; +using New_College.Model.Models; +using New_College.IRepository; +using System.Collections.Generic; +using System.Threading.Tasks; +using SqlSugar; +using New_College.IRepository.UnitOfWork; + +namespace New_College.Repository +{ + /// + /// RoleModulePermissionRepository + /// + public class RoleModulePermissionRepository : BaseRepository, IRoleModulePermissionRepository + { + public RoleModulePermissionRepository(IUnitOfWork unitOfWork) : base(unitOfWork) + { + } + + public async Task> QueryMuchTable() + { + return await QueryMuch( + (rmp, m, p) => new object[] { + JoinType.Left, rmp.ModuleId == m.Id, + JoinType.Left, rmp.PermissionId == p.Id + }, + + (rmp, m, p) => new TestMuchTableResult() + { + moduleName = m.Name, + permName = p.Name, + rid = rmp.RoleId, + mid = rmp.ModuleId, + pid = rmp.PermissionId + }, + + (rmp, m, p) => rmp.IsDeleted == false + ); + } + + /// + /// 角色权限Map + /// RoleModulePermission, Module, Role 三表联合 + /// 第四个类型 RoleModulePermission 是返回值 + /// + /// + public async Task> RoleModuleMaps() + { + return await QueryMuch( + (rmp, m, r) => new object[] { + JoinType.Left, rmp.ModuleId == m.Id, + JoinType.Left, rmp.RoleId == r.Id + }, + + (rmp, m, r) => new RoleModulePermission() + { + Role = r, + Module = m, + IsDeleted = rmp.IsDeleted + }, + + (rmp, m, r) => rmp.IsDeleted == false && m.IsDeleted == false && r.IsDeleted == false + ); + } + + + + /// + /// 查询出角色-菜单-接口关系表全部Map属性数据 + /// + /// + public async Task> GetRMPMaps() + { + return await Db.Queryable() + .Mapper(rmp => rmp.Module, rmp => rmp.ModuleId) + .Mapper(rmp => rmp.Permission, rmp => rmp.PermissionId) + .Mapper(rmp => rmp.Role, rmp => rmp.RoleId) + .Where(d => d.IsDeleted == false) + .ToListAsync(); + } + + + /// + /// 查询出角色-菜单-接口关系表全部Map属性数据 + /// + /// + public async Task> GetRMPMapsPage() + { + return await Db.Queryable() + .Mapper(rmp => rmp.Module, rmp => rmp.ModuleId) + .Mapper(rmp => rmp.Permission, rmp => rmp.PermissionId) + .Mapper(rmp => rmp.Role, rmp => rmp.RoleId) + .ToPageListAsync(1, 5, 10); + } + } + +} \ No newline at end of file diff --git a/New_College.Repository/UnitOfWork/IUnitOfWork.cs b/New_College.Repository/UnitOfWork/IUnitOfWork.cs new file mode 100644 index 0000000..135a4e5 --- /dev/null +++ b/New_College.Repository/UnitOfWork/IUnitOfWork.cs @@ -0,0 +1,14 @@ +using SqlSugar; + +namespace New_College.IRepository.UnitOfWork +{ + public interface IUnitOfWork + { + SqlSugarClient GetDbClient(); + + void BeginTran(); + + void CommitTran(); + void RollbackTran(); + } +} diff --git a/New_College.Repository/UnitOfWork/UnitOfWork.cs b/New_College.Repository/UnitOfWork/UnitOfWork.cs new file mode 100644 index 0000000..25fa577 --- /dev/null +++ b/New_College.Repository/UnitOfWork/UnitOfWork.cs @@ -0,0 +1,51 @@ +using New_College.IRepository.UnitOfWork; +using SqlSugar; +using System; + +namespace New_College.Repository.UnitOfWork +{ + public class UnitOfWork : IUnitOfWork + { + private readonly ISqlSugarClient _sqlSugarClient; + + public UnitOfWork(ISqlSugarClient sqlSugarClient) + { + _sqlSugarClient = sqlSugarClient; + } + + /// + /// 获取DB,保证唯一性 + /// + /// + public SqlSugarClient GetDbClient() + { + // 必须要as,后边会用到切换数据库操作 + return _sqlSugarClient as SqlSugarClient; + } + + public void BeginTran() + { + GetDbClient().BeginTran(); + } + + public void CommitTran() + { + try + { + GetDbClient().CommitTran(); // + } + catch (Exception ex) + { + GetDbClient().RollbackTran(); + throw ex; + } + } + + public void RollbackTran() + { + GetDbClient().RollbackTran(); + } + + } + +} diff --git a/New_College.Services/AdvertisementServices.cs b/New_College.Services/AdvertisementServices.cs new file mode 100644 index 0000000..9afe376 --- /dev/null +++ b/New_College.Services/AdvertisementServices.cs @@ -0,0 +1,56 @@ +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; + +namespace New_College.Services +{ + public class AdvertisementServices : BaseServices, IAdvertisementServices + { + IBaseRepository _dal; + public AdvertisementServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + public void ReturnExp() + { + + int a = 1; + int b = 0; + + int c = a / b; + } + + //public IAdvertisementRepository dal = new AdvertisementRepository(); + //public int Sum(int i, int j) + //{ + // return base.Sum(i, j); + + //} + + + //public int Add(Advertisement model) + //{ + // return base.Add(model); + //} + + //public bool Delete(Advertisement model) + //{ + // return base.Delete(model); + //} + + //public List Query(Expression> whereExpression) + //{ + // return base.Query(whereExpression); + + //} + + //public bool Update(Advertisement model) + //{ + // return base.Update(model); + //} + + } +} diff --git a/New_College.Services/BASE/BaseServices.cs b/New_College.Services/BASE/BaseServices.cs new file mode 100644 index 0000000..5689835 --- /dev/null +++ b/New_College.Services/BASE/BaseServices.cs @@ -0,0 +1,297 @@ +using New_College.IRepository.Base; +using New_College.IServices.BASE; +using New_College.Model; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq.Expressions; +using System.Threading.Tasks; + +namespace New_College.Services.BASE +{ + public class BaseServices : IBaseServices where TEntity : class, new() + { + //public IBaseRepository baseDal = new BaseRepository(); + public IBaseRepository BaseDal;//通过在子类的构造函数中注入,这里是基类,不用构造函数 + + public async Task QueryById(object objId) + { + return await BaseDal.QueryById(objId); + } + /// + /// 功能描述:根据ID查询一条数据 + /// 作  者:AZLinli.New_College + /// + /// id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 + /// 是否使用缓存 + /// 数据实体 + public async Task QueryById(object objId, bool blnUseCache = false) + { + return await BaseDal.QueryById(objId, blnUseCache); + } + + /// + /// 功能描述:根据ID查询数据 + /// 作  者:AZLinli.New_College + /// + /// id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 + /// 数据实体列表 + public async Task> QueryByIDs(object[] lstIds) + { + return await BaseDal.QueryByIDs(lstIds); + } + + /// + /// 写入实体数据 + /// + /// 博文实体类 + /// + public async Task Add(TEntity entity) + { + return await BaseDal.Add(entity); + } + + /// + /// 批量插入实体(速度快) + /// + /// 实体集合 + /// 影响行数 + public async Task Add(List listEntity) + { + return await BaseDal.Add(listEntity); + } + + /// + /// 更新实体数据 + /// + /// 博文实体类 + /// + public async Task Update(TEntity entity) + { + return await BaseDal.Update(entity); + } + public async Task Update(TEntity entity, string strWhere) + { + return await BaseDal.Update(entity, strWhere); + } + public async Task Update(object operateAnonymousObjects) + { + return await BaseDal.Update(operateAnonymousObjects); + } + + public async Task Update( + TEntity entity, + List lstColumns = null, + List lstIgnoreColumns = null, + string strWhere = "" + ) + { + return await BaseDal.Update(entity, lstColumns, lstIgnoreColumns, strWhere); + } + + + /// + /// 根据实体删除一条数据 + /// + /// 博文实体类 + /// + public async Task Delete(TEntity entity) + { + return await BaseDal.Delete(entity); + } + + /// + /// 删除指定ID的数据 + /// + /// 主键ID + /// + public async Task DeleteById(object id) + { + return await BaseDal.DeleteById(id); + } + + /// + /// 删除指定ID集合的数据(批量删除) + /// + /// 主键ID集合 + /// + public async Task DeleteByIds(object[] ids) + { + return await BaseDal.DeleteByIds(ids); + } + + + + /// + /// 功能描述:查询所有数据 + /// 作  者:AZLinli.New_College + /// + /// 数据列表 + public async Task> Query() + { + return await BaseDal.Query(); + } + + /// + /// 功能描述:查询数据列表 + /// 作  者:AZLinli.New_College + /// + /// 条件 + /// 数据列表 + public async Task> Query(string strWhere) + { + return await BaseDal.Query(strWhere); + } + + /// + /// 功能描述:查询数据列表 + /// 作  者:AZLinli.New_College + /// + /// whereExpression + /// 数据列表 + public async Task> Query(Expression> whereExpression) + { + return await BaseDal.Query(whereExpression); + } + /// + /// 功能描述:查询一个列表 + /// 作  者:AZLinli.New_College + /// + /// 条件表达式 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) + { + return await BaseDal.Query(whereExpression, orderByExpression, isAsc); + } + + public async Task> Query(Expression> whereExpression, string strOrderByFileds) + { + return await BaseDal.Query(whereExpression, strOrderByFileds); + } + + /// + /// 功能描述:查询一个列表 + /// 作  者:AZLinli.New_College + /// + /// 条件 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(string strWhere, string strOrderByFileds) + { + return await BaseDal.Query(strWhere, strOrderByFileds); + } + + /// + /// 根据sql语句查询 + /// + /// 完整的sql语句 + /// 参数 + /// 泛型集合 + public async Task> QuerySql(string strSql, SugarParameter[] parameters = null) + { + return await BaseDal.QuerySql(strSql, parameters); + + } + + /// + /// 根据sql语句查询 + /// + /// 完整的sql语句 + /// 参数 + /// DataTable + public async Task QueryTable(string strSql, SugarParameter[] parameters = null) + { + return await BaseDal.QueryTable(strSql, parameters); + + } + /// + /// 功能描述:查询前N条数据 + /// 作  者:AZLinli.New_College + /// + /// 条件表达式 + /// 前N条 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query(Expression> whereExpression, int intTop, string strOrderByFileds) + { + return await BaseDal.Query(whereExpression, intTop, strOrderByFileds); + } + + /// + /// 功能描述:查询前N条数据 + /// 作  者:AZLinli.New_College + /// + /// 条件 + /// 前N条 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query( + string strWhere, + int intTop, + string strOrderByFileds) + { + return await BaseDal.Query(strWhere, intTop, strOrderByFileds); + } + + /// + /// 功能描述:分页查询 + /// 作  者:AZLinli.New_College + /// + /// 条件表达式 + /// 页码(下标0) + /// 页大小 + /// 数据总量 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query( + Expression> whereExpression, + int intPageIndex, + int intPageSize, + string strOrderByFileds) + { + return await BaseDal.Query( + whereExpression, + intPageIndex, + intPageSize, + strOrderByFileds); + } + + /// + /// 功能描述:分页查询 + /// 作  者:AZLinli.New_College + /// + /// 条件 + /// 页码(下标0) + /// 页大小 + /// 数据总量 + /// 排序字段,如name asc,age desc + /// 数据列表 + public async Task> Query( + string strWhere, + int intPageIndex, + int intPageSize, + string strOrderByFileds) + { + return await BaseDal.Query( + strWhere, + intPageIndex, + intPageSize, + strOrderByFileds); + } + + public async Task> QueryPage(Expression> whereExpression, + int intPageIndex = 1, int intPageSize = 20, string strOrderByFileds = null) + { + return await BaseDal.QueryPage(whereExpression, + intPageIndex, intPageSize, strOrderByFileds); + } + + public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() + { + return await BaseDal.QueryMuch(joinExpression, selectExpression, whereLambda); + } + } + +} diff --git a/New_College.Services/BlogArticleServices.cs b/New_College.Services/BlogArticleServices.cs new file mode 100644 index 0000000..0958c8b --- /dev/null +++ b/New_College.Services/BlogArticleServices.cs @@ -0,0 +1,113 @@ +using AutoMapper; +using New_College.Common; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Model.ViewModels; +using New_College.Services.BASE; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace New_College.Services +{ + public class BlogArticleServices : BaseServices, IBlogArticleServices + { + IBaseRepository _dal; + IMapper _mapper; + public BlogArticleServices(IBaseRepository dal, IMapper mapper) + { + this._dal = dal; + base.BaseDal = dal; + this._mapper = mapper; + } + /// + /// 获取视图博客详情信息 + /// + /// + /// + public async Task GetBlogDetails(int id) + { + // 此处想获取上一条下一条数据,因此将全部数据list出来,有好的想法请提出 + //var bloglist = await base.Query(a => a.IsDeleted==false, a => a.bID); + var blogArticle = (await base.Query(a => a.bID == id && a.bcategory == "技术博文")).FirstOrDefault(); + + BlogViewModels models = null; + + if (blogArticle != null) + { + models = _mapper.Map(blogArticle); + + //要取下一篇和上一篇,以当前id开始,按id排序后top(2),而不用取出所有记录 + //这样在记录很多的时候也不会有多大影响 + var nextBlogs = await base.Query(a => a.bID >= id && a.IsDeleted == false && a.bcategory == "技术博文", 2, "bID"); + if (nextBlogs.Count == 2) + { + models.next = nextBlogs[1].btitle; + models.nextID = nextBlogs[1].bID; + } + var prevBlogs = await base.Query(a => a.bID <= id && a.IsDeleted == false && a.bcategory == "技术博文", 2, "bID desc"); + if (prevBlogs.Count == 2) + { + models.previous = prevBlogs[1].btitle; + models.previousID = prevBlogs[1].bID; + } + + //BlogArticle prevblog; + //BlogArticle nextblog; + + + //int blogIndex = bloglist.FindIndex(item => item.bID == id); + //if (blogIndex >= 0) + //{ + // try + // { + // prevblog = blogIndex > 0 ? bloglist[blogIndex - 1] : null; + // nextblog = blogIndex + 1 < bloglist.Count() ? bloglist[blogIndex + 1] : null; + + + // // 注意就是这里,mapper + // models = _mapper.Map(blogArticle); + + // if (nextblog != null) + // { + // models.next = nextblog.btitle; + // models.nextID = nextblog.bID; + // } + + // if (prevblog != null) + // { + // models.previous = prevblog.btitle; + // models.previousID = prevblog.bID; + // } + // var entity2Viewmodel = _mapper.Map(models); + + // } + // catch (Exception ex) { throw new Exception(ex.Message); } + //} + + + blogArticle.btraffic += 1; + await base.Update(blogArticle, new List { "btraffic" }); + } + + return models; + + } + + + /// + /// 获取博客列表 + /// + /// + /// + [Caching(AbsoluteExpiration = 10)] + public async Task> GetBlogs() + { + var bloglist = await base.Query(a => a.bID > 0, a => a.bID); + + return bloglist; + + } + } +} diff --git a/New_College.Services/D_EnrollmentinproductionServices.cs b/New_College.Services/D_EnrollmentinproductionServices.cs new file mode 100644 index 0000000..5b048eb --- /dev/null +++ b/New_College.Services/D_EnrollmentinproductionServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_EnrollmentinproductionServices : BaseServices, ID_EnrollmentinproductionServices + { + private readonly IBaseRepository _dal; + public D_EnrollmentinproductionServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_GraduateFlowServices.cs b/New_College.Services/D_GraduateFlowServices.cs new file mode 100644 index 0000000..49d7587 --- /dev/null +++ b/New_College.Services/D_GraduateFlowServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_GraduateFlowServices : BaseServices, ID_GraduateFlowServices + { + private readonly IBaseRepository _dal; + public D_GraduateFlowServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_LongIdMapServices.cs b/New_College.Services/D_LongIdMapServices.cs new file mode 100644 index 0000000..c0ee058 --- /dev/null +++ b/New_College.Services/D_LongIdMapServices.cs @@ -0,0 +1,1568 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.IRepository; +using System.Threading.Tasks; +using New_College.Common.Excel; +using System.Data; +using System; +using System.Linq; +using System.Collections.Generic; +using New_College.Model.ViewModels; +using LinqKit; +using New_College.Model; +using New_College.Common.Helper; +using New_College.Common; +using New_College.Common.HttpRestSharp; +using System.Text; + + +namespace New_College.Services +{ + public class D_LongIdMapServices : BaseServices, ID_LongIdMapServices + { + private readonly IBaseRepository _dal; + private readonly ID_MajorCategoryRepository d_MajorCategoryRepository; + private readonly ID_MajorClassRepository d_MajorClassRepository; + private readonly ID_MajorRepository d_MajorRepository; + private readonly ID_OccupationCategoryRepository d_OccupationCategoryRepository; + private readonly ID_OccupationRepository d_OccupationRepository; + private readonly ID_OccMapTagRepository d_OccMapTagRepository; + private readonly ID_MajorMapOccouptionRepository d_MajorMapOccouptionRepository; + private readonly ID_MajorMapTagRepository d_MajorMapTagRepository; + private readonly ID_MajorObtainRepository d_MajorObtainRepository; + private readonly ID_UniversityRepository d_UniversityRepository; + private readonly ID_UniversityimgRepository d_UniversityimgRepository; + private readonly ID_UniversityRankRepository d_UniversityRankRepository; + private readonly ID_MajorMapUniversityRepository d_MajorMapUniversityRepository; + private readonly ID_MajorInformationRepository d_MajorInformationRepository; + private readonly ID_UniversityCollectionRepository d_UniversityCollectionRepository; + private readonly IT_EnrollmentPlanedescRepository t_EnrollmentPlanedescRepository; + private readonly IT_EnrollmentBatchRepository t_EnrollmentBatchRepository; + private readonly ID_GraduateFlowRepository d_GraduateFlowRepository; + private readonly IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository; + + public D_LongIdMapServices(IBaseRepository dal + , ID_MajorCategoryRepository ID_MajorCategoryRepository + , ID_MajorClassRepository ID_MajorClassRepository + , ID_MajorRepository ID_MajorRepository + , ID_OccupationCategoryRepository ID_OccupationCategoryRepository + , ID_OccupationRepository ID_OccupationRepository + , ID_OccMapTagRepository ID_OccMapTagRepository + , ID_MajorMapOccouptionRepository ID_MajorMapOccouptionRepository + , ID_MajorMapTagRepository ID_MajorMapTagRepository + , ID_MajorObtainRepository ID_MajorObtainRepository + , ID_UniversityRepository ID_UniversityRepository + , ID_UniversityimgRepository ID_UniversityimgRepository + , ID_UniversityRankRepository ID_UniversityRankRepository + , ID_MajorMapUniversityRepository ID_MajorMapUniversityRepository + , ID_MajorInformationRepository ID_MajorInformationRepository + , ID_UniversityCollectionRepository ID_UniversityCollectionRepository + , IT_EnrollmentPlanedescRepository IT_EnrollmentPlanedescRepository + , IT_EnrollmentBatchRepository IT_EnrollmentBatchRepository + , ID_GraduateFlowRepository ID_GraduateFlowRepository + , IT_EnrollmentPlaneRepository IT_EnrollmentPlaneRepository) + { + this._dal = dal; + d_MajorCategoryRepository = ID_MajorCategoryRepository; + d_MajorClassRepository = ID_MajorClassRepository; + d_MajorRepository = ID_MajorRepository; + d_OccupationCategoryRepository = ID_OccupationCategoryRepository; + d_OccupationRepository = ID_OccupationRepository; + d_OccMapTagRepository = ID_OccMapTagRepository; + d_MajorMapOccouptionRepository = ID_MajorMapOccouptionRepository; + d_MajorMapTagRepository = ID_MajorMapTagRepository; + d_MajorObtainRepository = ID_MajorObtainRepository; + d_UniversityRepository = ID_UniversityRepository; + d_UniversityimgRepository = ID_UniversityimgRepository; + d_UniversityRankRepository = ID_UniversityRankRepository; + d_MajorMapUniversityRepository = ID_MajorMapUniversityRepository; + d_MajorInformationRepository = ID_MajorInformationRepository; + d_UniversityCollectionRepository = ID_UniversityCollectionRepository; + t_EnrollmentPlanedescRepository = IT_EnrollmentPlanedescRepository; + t_EnrollmentBatchRepository = IT_EnrollmentBatchRepository; + d_GraduateFlowRepository = ID_GraduateFlowRepository; + t_EnrollmentPlaneRepository = IT_EnrollmentPlaneRepository; + base.BaseDal = dal; + } + + /// + /// 获取院校库 添加个人收藏和对比 的验证 + /// + /// + /// + public async Task> GetUniversitys(UniversityQuery query) + { + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false); + if (!string.IsNullOrEmpty(query.AreaName) && query.AreaName != "全国") + wheres = wheres.And(x => x.Area_Name.Contains(query.AreaName)); + if (query.SubjectLevel < 2) + wheres = wheres.And(x => x.Subject_Level == query.SubjectLevel); + if (query.Type >= 0) + wheres = wheres.And(x => x.Type == query.Type); + if (query.Nhef >= 0) + wheres = wheres.And(x => x.Nhef == query.Nhef); + if (query.Sff >= 0) + wheres = wheres.And(x => x.Sff == query.Sff); + if (query.Syl >= 0) + wheres = wheres.And(x => x.Syl == query.Syl); + if (!string.IsNullOrWhiteSpace(query.Name)) + wheres = wheres.And(u => u.Name.Contains(query.Name)); + if (query.Nature > 0) + wheres = wheres.And(x => x.Nature == query.Nature); + var info = await d_UniversityRepository.QueryPage(wheres, query.PageIndex, query.PageSize, "Rank Asc"); + if (info.data.Count <= 0) + return new PageModel() { }; + + var collectionuniversity = await d_UniversityCollectionRepository.Query(x => x.CustomerId == query.CustomerId && x.IsDelete == false); + List list = new List() { }; + info.data = info.data.OrderBy(s => s.Rank).ToList(); + foreach (var c in info.data) + { + string attribute = ""; + if (c.Nhef == 1) + attribute += "985"; + if (c.Sff == 1) + attribute += "211"; + if (c.Syl == 1) + attribute += "双一流"; + list.Add(new UniversityResult + { + Id = c.Id, + Name = c.Name, + Nature = c.Nature, + AscriptionName = c.AscriptionName, + AreaName = c.Area_Name, + Logo = c.Logo, + Syl = c.Syl == 1, + Nhef = c.Nhef == 1, + Sff = c.Sff == 1, + UniversityType = c.Type, + IsNearScore = false, + SubjectLevel = c.Subject_Level, + Rank = c.Rank, + IsCollection = collectionuniversity.Count(x => x.Type == 1 && x.UniversityId == c.Id) > 0, + IsContrast = collectionuniversity.Count(x => x.Type == 2 && x.UniversityId == c.Id) > 0, + }); + } + return new PageModel() + { + data = list, + dataCount = info.dataCount, + page = info.page, + pageCount = info.pageCount, + PageSize = info.PageSize + }; + } + + /// + /// 专业库 一级二级列表 + /// + /// + /// + public async Task> uniGetMajorInfo(MajorcategoryQuery query) + { + var majorcategories = (await d_MajorCategoryRepository.Query(x => x.Type == query.SchoolLevel && x.IsDelete == false)).Select(x => new uniMajorSelect() { Id = x.Id, Name = x.Name }); ; + var majorclasses = (await d_MajorClassRepository.Query(x => x.IsDelete == false)).Select(x => new uniMajorClassSelect() { Id = x.Id, Name = x.Name, TradeId = x.TradeId }); + var majorinfo = (await d_MajorRepository.Query(x => x.IsDelete == false)).Select(s => new uniMajorSelect() { Id = s.CategoryClass_Id, Name = s.Name }).ToList(); + List list = new List() { }; + foreach (var item in majorcategories) + { + List scond = new List() { }; + var nowmajoclass = majorclasses.Where(x => x.TradeId == item.Id).ToList(); + scond = nowmajoclass.Select(s => new uniMajorSecond() + { + MajorName = s.Name, + SecondId = s.Id, + MajorNum = majorinfo.Count(x => x.Name != s.Name && x.Id == s.Id), + }).ToList(); + + if (scond.Count() == 0) + continue; + list.Add(new uniMajorInfoResult() + { + FirstName = item.Name, + SecondInfo = scond + }); + } + return list; + } + + /// + /// 获取推荐职业 + /// + /// + public async Task> GetRecommendOccupation() + { + var info = await d_OccupationRepository.Query(x => x.Recommend > 0 && x.IsDelete == false); + if (info.Count <= 0) + return new List() { }; + return info.Select(x => new OccupationResult() { Id = x.Id, Name = x.OccupationName }).ToList(); + } + + /// + /// 职业库 一级二级列表 + /// + /// + public async Task> uniGetOccupationInfo() + { + List list = new List() { }; + var occupationCategoryList = (await d_OccupationCategoryRepository.Query(x => x.IsDelete == false)).Select(x => new uniOccSelect() { Id = x.Id, Level = x.Level, Name = x.Name, ParentId = x.ParentId, OccupationName = x.OccupationName }); + var occupations = (await d_OccupationRepository.Query(x => x.IsDelete == false)).Select(s => s.CategoryId).ToList(); + var nowoccupationCategoryList = occupationCategoryList.Where(x => x.Level == 0).ToList(); + foreach (var item in nowoccupationCategoryList) + { + List scond = new List() { }; + var nowmajoclass = occupationCategoryList.Where(x => x.ParentId == item.Id).ToList(); + scond = nowmajoclass.Select(s => new uniMajorSecond() + { + MajorName = s.OccupationName, + MajorNum = occupations.Count(e => e == s.Id), + SecondId = s.Id + + }).ToList(); + list.Add(new uniMajorInfoResult() + { + FirstName = item.Name, + SecondInfo = scond + }); + } + return list; + } + + /// + /// 院校详情 + /// + /// + /// + public async Task GetUniversityDetails(IdQuery query) + { + if (query.Id <= 0) + return new UniversityDetailResponse() { Status = -1 }; + var university = await d_UniversityRepository.QueryById(query.Id); + if (university == null) + return new UniversityDetailResponse() { Status = -2 }; + var result = new UniversityDetailResponse(); + string imgs = ""; + var imglist = (await d_UniversityimgRepository.Query(x => x.UniversityId == query.Id && x.IsDelete == false)).FirstOrDefault(); + if (imglist != null) + { + imgs = imglist.ImgList; + } + result.universityResult = new UniversityResult + { + Id = university.Id, + Name = university.Name, + Nature = university.Nature, + AscriptionName = university.AscriptionName, + Rank = university.Rank, + AreaName = university.Area_Name, + Logo = university.Logo, + Syl = university.Syl == 1 ? true : false, + Nhef = university.Nhef == 1 ? true : false, + Sff = university.Sff == 1 ? true : false, + UniversityType = university.Type, + SubjectLevel = university.Subject_Level, + Imglist = imgs, + DoctorateCount = university.Doctorate_Count, + MasterCount = university.Master_Count, + AcademicianCount = university.Academician_Count, + // IsCollection = false, + //Description = ClearHtmlHelper.SHTML(university.Description), + LongSchoolId = (await _dal.Query(x => x.IsDelete == false && x.table == "D_University" && x.newid == university.Id)).Select(x => x.longid).FirstOrDefault() + }; + var mapuniversity = await d_MajorMapUniversityRepository.Query(x => x.Universityid == query.Id && x.IsDelete == false); + var majorids = mapuniversity.Select(x => x.MajorId).ToList(); + var majorlist = await d_MajorRepository.Query(x => majorids.Contains(x.Id) && x.IsDelete == false); + var majors = new List(); + var spmajors = new List(); + int m = 0; + int sp = 0; + mapuniversity.ForEach(o => + { + if (majorlist.Where(s => s.Id == o.MajorId).Any()) + { + + if (o.sp == 0 && m <= 5) + { + m++; + majors.Add(new RelatedMajorModel() + { + majorName = majorlist.Single(s => s.Id == o.MajorId).MajorName, + mid = o.MajorId + }); + } + else if (o.sp == 1 && sp <= 5) + { + spmajors.Add(new RelatedMajorModel() + { + majorName = majorlist.Single(s => s.Id == o.MajorId).MajorName, + mid = o.MajorId + }); + } + } + }); + var graduateFlowinfo = (await d_GraduateFlowRepository.Query(x => x.UniversityId == query.Id && x.IsDelete == false)).FirstOrDefault(); + if (graduateFlowinfo != null) + { + result.graduateModels = new graduateModel() + { + provinces = graduateFlowinfo.Provinces, + attrs = graduateFlowinfo.Attrs + }; + } + + result.relatedMajors = majors; + result.relatespMajors = spmajors; + result.Status = 1; + + return result; + } + + /// + /// 获取专业介绍 + /// + /// + /// + public async Task GetMajorDetail(MajorQuery query) + { + var info = (await d_MajorInformationRepository.Query(x => x.MajorId == query.MajorId && x.IsDelete == false)).FirstOrDefault(); + if (info == null) + return new MajorDetail() { };//学校专业不匹配 获取专业概况信息为空 + return new MajorDetail() + { + id = info.Id, + abstracts = info.Majordescription.ClearHtml(), + maincourse = info.Majorcourse.ClearHtml(), + studydirection = info.Postgraduate.ClearHtml(), + workdirection = info.Majorintent.ClearHtml(), + Name = info.Name + }; + } + + /// + /// 相关院校 + /// + /// + /// + public async Task> GetRelevantSchool(MajorSchoolQuery query) + { + var majorinfo = await d_MajorMapUniversityRepository.Query(x => x.MajorId == query.MajorId && x.IsDelete == false); + if (majorinfo.Count <= 0) + return new PageModel() { }; + var universityids = majorinfo.Select(x => x.Universityid).ToList(); + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false && universityids.Contains(x.Id)); + if (!string.IsNullOrEmpty(query.AreaName) && query.AreaName != "全国") + wheres = wheres.And(x => x.Area_Name.Contains(query.AreaName)); + if (query.SubjectLevel < 2) + wheres = wheres.And(x => x.Subject_Level == query.SubjectLevel); + if (query.Type >= 0) + wheres = wheres.And(x => x.Type == query.Type); + if (query.Nhef >= 0) + wheres = wheres.And(x => x.Nhef == query.Nhef); + if (query.Sff >= 0) + wheres = wheres.And(x => x.Sff == query.Sff); + if (query.Syl >= 0) + wheres = wheres.And(x => x.Syl == query.Syl); + wheres = wheres.And(x => x.Nature == query.Nature); + + var info = await d_UniversityRepository.QueryPage(wheres, query.PageIndex, query.PageSize, "Rank Asc"); + if (info.data.Count() <= 0) + return new PageModel() { }; + List list = new List() { }; + info.data = info.data.OrderBy(s => s.Rank).ToList(); + foreach (var t in info.data) + { + //string typeStr = GetUniversityTypeName(t.Type); + //string ascription = GetAscriptionName(t.Ascription); + //string syl = t.Syl == 1 ? "双一流" : ""; + //string nhefSff = GetNhefSff(t); + //string nature = t.Nature == 1 ? "公立" : "私立"; + //string naturedetail = string.Format("{0}{1}{2}", typeStr, ascription, syl); + list.Add(new UniversityResult() + { + Id = t.Id, + Logo = t.Logo, + Name = t.Name, + AreaName = t.Area_Name, + Nature = t.Nature, + //naturedetail = naturedetail, + Sff = t.Sff == 1, + Syl = t.Syl == 1, + Nhef = t.Nhef == 1, + UniversityType = t.Type, + Rank = t.Rank, + }); + } + return new PageModel() + { + data = list, + dataCount = info.dataCount, + page = info.page, + pageCount = info.pageCount, + PageSize = info.PageSize + }; + } + + /// + /// 获取专业就业前景 + /// + /// + /// + public async Task GetCareerProspects(MajorCareerQuery query) + { + var info = (await d_MajorObtainRepository.Query(x => x.MajorId == query.MajorId)).FirstOrDefault(); + if (info == null) + return new CareerProspects() { }; + CareerProspects result = new CareerProspects() { }; + List TradeDistribute = new List() { }; + var array = JsonHelper.ParseJson>(info.ObtainIndustryDis); + var arraynum = JsonHelper.ParseJson>(info.ObtainIndustryDisProportion.Replace("%", "")); + for (int i = 0; i < array.Count; i++) + { + TradeDistribute.Add(new distribution() { name = array[i], data = arraynum[i] }); + } + //就业地区 + List RegionDistribute = new List() { }; + var arrayarea = JsonHelper.ParseJson>(info.ObtainRegionalDis); + var arrayareanum = JsonHelper.ParseJson>(info.ObtainRegionalDisProportion.Replace("%", "")); + for (int i = 0; i < arrayarea.Count; i++) + { + RegionDistribute.Add(new distribution() { name = arrayarea[i], data = arrayareanum[i] }); + } + //工资情况 + List MoneyDistribute = new List() { }; + var arraymoney = JsonHelper.ParseJson>(info.WageSituation); + var arraymoneynum = JsonHelper.ParseJson>(info.WageProportion.Replace("%", "")); + for (int i = 0; i < arraymoney.Count; i++) + { + MoneyDistribute.Add(new distribution() { name = arraymoney[i], data = arraymoneynum[i] }); + } + //工作年限工资 WorkingYear + WorkingYear WorkingYear = new WorkingYear() { }; + WorkingYear.WorkingYears = info.WorkingYears; + WorkingYear.WorkingYearsWage = info.WorkingYearsWage; + result.RegionDistribute = RegionDistribute; + result.TradeDistribute = TradeDistribute; + result.MoneyDistribute = MoneyDistribute; + result.WorkingYear = WorkingYear; + return result; + } + + /// + /// 获取第三级 + /// + /// + /// + public async Task>> uniGetMajorThree(ManageMajorQuery query) + { + List info = new List() { }; + if (!string.IsNullOrWhiteSpace(query.Tags)) + { + if (query.Tags.Length != 3) + return new MessageModel>() { success = false, msg = "传入标签长度错误..." }; + //转化标签 + var tags = new List() { }; + string n = query.Tags; + string m = ""; + tags.AddRange(zuhe(n)); + for (int j = 2; j > -1; j--) + { + m = m + n[j]; + } + tags.AddRange(zuhe(m)); + var ids = (await d_MajorMapTagRepository.Query(x => x.Tag.Contains(tags[0]) || x.Tag.Contains(tags[1]) || x.Tag.Contains(tags[2]) || x.Tag.Contains(tags[3]) || x.Tag.Contains(tags[4]) || x.Tag.Contains(tags[5]))).Select(x => x.MajorId).ToList(); + if (ids.Count <= 0) + return new MessageModel>() { success = false, msg = "标签对应专业为空" }; + info = (await d_MajorRepository.Query(x => ids.Contains(x.Id) && x.IsDelete == false)).Select(x => new uniMajorInfo() { Id = x.Id, Name = x.MajorName }).ToList(); + + if (!string.IsNullOrWhiteSpace(query.SubjectClaim)) + { + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + var planid = planinfo.FirstOrDefault().Id; + var wheres = PredicateBuilder.New(); + wheres.And(x => x.IsDelete == false && x.PlanId == planid && x.Scoreline <= query.Score && x.UniversityId > 0); + if (query.SubjectClaim.Contains(",")) + { + var cc = query.SubjectClaim.Split(","); + if (cc.Length == 2) + { + var cc1 = cc[0]; + var cc2 = cc[1]; + wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true); + } + else if (cc.Length == 3) + { + var cc1 = cc[0]; + var cc2 = cc[1]; + var cc3 = cc[2]; + wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(cc3) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true); + } + } + else + { + wheres.And(x => x.Subjectclaim.Contains(query.SubjectClaim) && !x.Subjectclaim.Contains(",")); + } + var descinfo = await t_EnrollmentPlanedescRepository.Query(wheres); + var newmajorlist = descinfo.Select(x => x.MajorName).Distinct().ToList(); + info = info.Where(x => newmajorlist.Contains(x.Name)).ToList(); + } + } + else if (query.universityId > 0) + { + var majormapids = (await d_MajorMapUniversityRepository.Query(x => x.IsDelete == false && x.Universityid == query.universityId && x.MajorId > 0)).Select(x => x.MajorId).ToList(); + info = (await d_MajorRepository.Query(x => majormapids.Contains(x.Id) && x.IsDelete == false)).Select(x => new uniMajorInfo() { Id = x.Id, Name = x.MajorName }).ToList(); + } + else + { + var majorclasses = (await d_MajorClassRepository.Query(x => x.IsDelete == false)).Select(x => new uniMajorClassSelect() { Id = x.Id, Name = x.Name, TradeId = x.TradeId }); + var nowmajorname = majorclasses.Where(x => x.Id == query.categoryclassid).Select(x => x.Name)?.FirstOrDefault(); + var newmajorinfo = await d_MajorRepository.Query(x => x.IsDelete == false && x.CategoryClass_Id == query.categoryclassid); + info = newmajorinfo.Where(x => x.Name != nowmajorname).Select(x => new uniMajorInfo() { Id = x.Id, Name = x.MajorName }).ToList(); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = info + }; + } + + /// + /// 根据标签推荐专业 + /// + /// + /// + public async Task>> GetMajorThreeByTag(MajorThreeByTagQuery query) + { + if (string.IsNullOrWhiteSpace(query.Tags)) + return new MessageModel>() { success = false, msg = "传入标签为空,请先去测试..." }; + if (query.Tags.Length != 3) + return new MessageModel>() { success = false, msg = "传入标签长度错误..." }; + //转化标签 + var tags = new List() { }; + string n = query.Tags; + string m = ""; + tags.AddRange(zuhe(n)); + for (int j = 2; j > -1; j--) + { + m = m + n[j]; + } + tags.AddRange(zuhe(m)); + var ids = (await d_MajorMapTagRepository.Query(x => x.Tag.Contains(tags[0]) || x.Tag.Contains(tags[1]) || x.Tag.Contains(tags[2]) || x.Tag.Contains(tags[3]) || x.Tag.Contains(tags[4]) || x.Tag.Contains(tags[5]))).Select(x => x.MajorId).ToList(); + if (ids.Count <= 0) + return new MessageModel>() { success = false, msg = "标签对应专业为空" }; + var info = (await d_MajorRepository.Query(x => ids.Contains(x.Id) && x.IsDelete == false)).Select(x => new uniMajorInfo() { Id = x.Id, Name = x.MajorName }).ToList(); + + if (!string.IsNullOrWhiteSpace(query.SubjectClaim)) + { + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + var planid = planinfo.FirstOrDefault().Id; + var wheres = PredicateBuilder.New(); + wheres.And(x => x.IsDelete == false && x.PlanId == planid && x.Scoreline <= query.Score && x.UniversityId > 0); + if (query.SubjectClaim.Contains(",")) + { + var cc = query.SubjectClaim.Split(","); + if (cc.Length == 2) + { + var cc1 = cc[0]; + var cc2 = cc[1]; + wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true); + } + else if (cc.Length == 3) + { + var cc1 = cc[0]; + var cc2 = cc[1]; + var cc3 = cc[2]; + wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(cc3) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true); + } + } + else + { + wheres.And(x => x.Subjectclaim.Contains(query.SubjectClaim) && !x.Subjectclaim.Contains(",")); + } + var descinfo = await t_EnrollmentPlanedescRepository.Query(wheres); + var newmajorlist = descinfo.Select(x => x.MajorName).Distinct().ToList(); + info = info.Where(x => newmajorlist.Contains(x.Name)).ToList(); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = info + }; + } + + /// + /// 院校相关专业专用 + /// + /// + /// + public async Task> GetUniversityMajor(IdQuery query) + { + var majormapids = (await d_MajorMapUniversityRepository.Query(x => x.IsDelete == false && x.Universityid == query.Id && x.MajorId > 0)).Select(x => x.MajorId).ToList(); + var majorclass = (await d_MajorRepository.Query(x => x.IsDelete == false && majormapids.Contains(x.Id))); + var majorclassids = majorclass.Select(x => x.CategoryClass_Id).ToList(); + List list = new List() { }; + var majorclassinfo = await d_MajorClassRepository.Query(x => majorclassids.Contains(x.Id)); + foreach (var item in majorclassinfo) + { + List second = new List() { }; + second = majorclass.Where(x => x.CategoryClass_Id == item.Id).Select(x => new uniMajorSecond() + { + SecondId = x.Id, + MajorName = x.Name, + }).ToList(); + if (second.Count > 0) + list.Add(new uniMajorInfoResult() + { + FirstName = item.Name, + SecondInfo = second, + MajorNum = second.Count() + }); + } + return list; + } + + /// + /// 获取职业第三级 + /// + /// + /// + public async Task>> GetOccupationThree(IdQuery query) + { + StringBuilder stringBuilder = new StringBuilder() { }; + stringBuilder.AppendFormat("SELECT Id,Name FROM `D_Occupation` where CategoryId={0} and IsDelete=0", query.Id); + var info = await d_OccupationRepository.QuerySql(stringBuilder.ToString()); + if (info.Count <= 0) + return new MessageModel>() { success = false, msg = "数据为空" }; + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = info.Select(x => new IdNameResult() + { + Id = x.Id, + Name = x.Name + }).ToList() + }; + } + + /// + /// 获取职业详情-职业介绍 + /// + /// + public async Task GetRecommendIntroduce(IdQuery query) + { + if (query.Id <= 0) + return new OccupationDetailResult() { Status = -1 }; + var occupation = await d_OccupationRepository.QueryById(query.Id); + return new OccupationDetailResult() + { + Status = 1, + OccupationIntraduce = occupation.OccupationIntraduce.ClearHtml(), + Id = occupation.Id.ToString() + }; + } + + + /// + /// 查学校省份的 年份批次 + /// + /// + /// + public async Task GetBatchYearBySchoolId(PlanYearQuery query) + { + BatchYear result = new BatchYear() { }; + var info = await t_EnrollmentPlanedescRepository.Query(x => x.UniversityId == query.UnviersityId); + if (info.Count <= 0) + return new BatchYear() { }; + var batchids = info.Select(x => x.BatchtypeId).Distinct().ToList(); + var batchinfo = await t_EnrollmentBatchRepository.Query(x => batchids.Contains(x.Id) && x.AreaName == query.AreaName); + var batchselect = batchinfo.Select(x => x.Batch_name).Distinct().ToList(); + var yearselect = batchinfo.Select(x => x.Year).Distinct().OrderByDescending(x => x).ToList(); + var typeselect = batchinfo.Select(x => x.Type).Distinct().ToList(); + result.Batch = batchselect; + result.Year = yearselect; + result.Type = typeselect; + return result; + } + + /// + /// 获取招生计划 院校详情 + /// + /// + /// + public async Task> GetPlanBySchollId(PlanQuery query) + { + var check = await t_EnrollmentBatchRepository.Query(x => x.Type == query.Type && x.Year == query.Year && x.Batch_name == query.BatchName && x.AreaName == query.AreaName); + if (check.Count <= 0) + return new List() { }; + var batchid = check.Select(x => x.Id)?.FirstOrDefault(); + var info = await t_EnrollmentPlanedescRepository.Query(x => x.UniversityId == query.UnviersityId && x.BatchtypeId == batchid); + List list = new List() { }; + foreach (var item in info) + { + list.Add(new NewPlanDescList() + { + Name = item.MajorName, + Money = string.IsNullOrWhiteSpace(item.Tuitionfee) || item.Tuitionfee == "0" || item.Tuitionfee == "待定" ? "--" : item.Tuitionfee, + PlanNum = item.Plancount, + Scoreline = item.Scoreline == 0 || string.IsNullOrWhiteSpace(item.Scoreline.ToString()) ? "--" : item.Scoreline.ToString() + }); + } + return list; + } + + /// + /// 获取院校排名 + /// + /// + /// + public async Task> GetUniversityRank(UniversityRankQuery query) + { + var info = await d_UniversityRankRepository.Query(x => x.IsDelete == false && x.UniversityType == query.Type); + if (info.Count <= 0) + return new List() { }; + List list = new List() { }; + return info.OrderBy(x => x.OrderSort).Select(x => new UniversityRankList() { Name = x.UniversityName, Sort = x.Rank }).ToList(); + } + + /// + /// 专业搜索 + /// + /// + /// + public async Task>> uniGetSearchMajor(NameBaseQuery query) + { + var majorcategories = (await d_MajorCategoryRepository.Query(x => x.Type == query.Type && x.IsDelete == false)).Select(x => x.Id); ; + var majorclasses = (await d_MajorClassRepository.Query(x => x.IsDelete == false && majorcategories.Contains(x.TradeId))).Select(x => x.Id).ToList(); + + var info = await d_MajorRepository.QueryPage(x => majorclasses.Contains(x.CategoryClass_Id) && x.IsDelete == false && x.Name.Contains(query.Name), query.PageIndex, query.PageSize); + if (info.data.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,数据为空" }; + List list = new List() { }; + foreach (var item in info.data) + { + list.Add(new IdNameResult() + { + Id = item.Id, + Name = item.Name + }); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = new PageModel() + { + data = list, + dataCount = info.dataCount, + page = info.page, + pageCount = info.pageCount, + PageSize = info.PageSize + } + }; + } + + + #region 数据处理 + /// + /// 组合 + /// + /// + public List zuhe(string ssel) + { + var list = new List() { }; + string m1 = ""; + for (int i = 0; i < ssel.Length; i++) + { + m1 = ssel + ssel.Substring(i, 1); + list.Add(m1.Remove(i, 1)); + } + return list; + } + + /// + /// 获取学校类型 + /// + /// + /// + private string GetUniversityTypeName(int? type) + { + if (!Enum.IsDefined(typeof(EnumUniversityType), type)) + return ""; + //数字转为枚举 + EnumUniversityType enumUniversityType = (EnumUniversityType)Enum.ToObject(typeof(EnumUniversityType), type); + return CommonTools.GetDescription(enumUniversityType); + } + /// + /// 获取学校归属 + /// + /// + /// + public string GetAscriptionName(int AscriptionType) + { + if (AscriptionType == 1) + return "教育部"; + if (AscriptionType == 2) + return "省政府"; + return "教育部"; + } + /// + /// 获取学校性质 + /// + /// + /// + private string GetNhefSff(D_University t) + { + List array = new List(); + if (t.Nhef == 1) + array.Add("985"); + if (t.Sff == 1) + array.Add("211"); + string nhefSff = string.Join('、', array); + return nhefSff; + } + #endregion + + /// + /// 获取招生简章列表 + /// + /// + /// + public async Task>> GetRequestEnrollmentinproductionResult(UniversityIdQuery query) + { + var longinfo = (await _dal.Query(x => x.IsDelete == false && x.table == "D_University" && x.newid == query.Id)).FirstOrDefault(); + if (longinfo == null) + return new MessageModel>() { success = false, msg = "未找到数据" }; + RequestQuery request = new RequestQuery() { Id = longinfo.longid, PageIndex = query.PageIndex, PageSize = query.PageSize }; + + var stringBuilder = new StringBuilder(); + stringBuilder.AppendFormat("Id={0}&PageIndex={1}&PageSize={2}", longinfo.longid, query.PageIndex, query.PageSize); + var info = HttpHelper.GetApi("https://hbs.yrtsedu.cn/", "api/University/GetEnrollmentinproductions", stringBuilder.ToString()); + if (info.Success == false) + { + return new MessageModel>() { success = false, msg = "请求失败" }; + } + return new MessageModel>() + { + success = info.Success, + msg = "获取成功", + response = info.Data + }; + } + + /// + /// 获取招生简介详情 + /// + /// + /// + public async Task> GetRequestEnrollmentinproductionDetailResult(StringIdQuery query) + { + if (string.IsNullOrWhiteSpace(query.Id)) + { + return new MessageModel() { success = false, msg = "传入为空" }; + } + var stringBuilder = new StringBuilder(); + stringBuilder.AppendFormat("Id={0}", query.Id); + var info = HttpHelper.GetApi("https://hbs.yrtsedu.cn/", "api/University/GetEnrollmentinproductionDetali", stringBuilder.ToString()); + if (info.Success == false) + { + return new MessageModel() { success = false, msg = "请求失败" }; + } + return new MessageModel() + { + success = info.Success, + msg = "获取成功", + response = info.Data + }; + } + + + #region 数据导入 + + #region Majorcategory + ///// + ///// Majorcategory + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\Majorcategory.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string Name = dr["Name"].ToString(); + // string Sort = dr["Sort"].ToString(); + // string TradeName = dr["TradeName"].ToString(); + // string TradeNumber = dr["TradeNumber"].ToString(); + // string Type = dr["Type"].ToString(); + // var info = await d_MajorCategoryRepository.Add(new D_MajorCategory() + // { + // OrderSort = Convert.ToInt32(Sort), + // Name = Name, + // TradeName = TradeName, + // TradeNumber = TradeNumber, + // Type = Convert.ToInt32(Type) + // }); + // if (info > 0) + // { + // await _dal.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // } + + // return true; + //} + #endregion + + #region Majorclass + ///// + ///// Majorclass + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\Majorclass.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string Categoryname = dr["Categoryname"].ToString(); + // string Sort = dr["Sort"].ToString(); + // string TradeId = dr["TradeId"].ToString(); + // string Name = dr["Name"].ToString(); + + // var nowmapid = (await _dal.Query(x => x.longid == TradeId)).Select(x => x.newid).FirstOrDefault(); + // var info = await d_MajorClassRepository.Add(new D_MajorClass() + // { + // OrderSort = Convert.ToInt32(Sort), + // Name = Name, + // Categoryname = Categoryname, + // TradeId = nowmapid + // }); + // if (info > 0) + // { + // await _dal.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // } + + // return true; + //} + #endregion + + #region Major + ///// + ///// Major + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\Major.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string MajorName = dr["MajorName"].ToString(); + // string MajorCode = dr["MajorCode"].ToString(); + // string Name = dr["Name"].ToString(); + // string Type = dr["Type"].ToString(); + // string CategoryClass_Id = dr["CategoryClass_Id"].ToString(); + + // var nowmapid = mapinfo.Where(x => x.longid == CategoryClass_Id).Select(x => x.newid).FirstOrDefault(); + // var info = await d_MajorRepository.Add(new D_Major() + // { + // Name = Name, + // CategoryClass_Id = nowmapid, + // MajorCode = MajorCode, + // MajorName = MajorName, + // Type = Type == "" ? 0 : Convert.ToInt32(Type), + // }); + // if (info > 0) + // { + // await _dal.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // } + + // return true; + //} + #endregion + + #region OccupationCategory + ///// + ///// OccupationCategory + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\OccupationCategory.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // //var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string Level = dr["Level"].ToString(); + // string Name = dr["Name"].ToString(); + // string OccupationName = dr["OccupationName"].ToString(); + // var ParentId = dr["ParentId"].ToString() == "0" ? 0 : (await _dal.Query(x => x.longid == dr["ParentId"].ToString())).Select(x => x.newid).FirstOrDefault(); + // string Sort = dr["Sort"].ToString(); + // var info = await d_OccupationCategoryRepository.Add(new D_OccupationCategory() + // { + // Level = Convert.ToInt32(Level), + // Name = Name, + // OccupationName = OccupationName, + // ParentId = ParentId, + // OrderSort = Convert.ToInt32(Sort) + // }); + // if (info > 0) + // { + // await _dal.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // } + + // return true; + //} + #endregion + + #region Occupation + ///// + ///// Occupation + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\Occupation.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string CategoryId = dr["CategoryId"].ToString(); + // string Name = dr["Name"].ToString(); + // string OccupationIntraduce = dr["OccupationIntraduce"].ToString(); + // string OccupationName = dr["OccupationName"].ToString(); + // var newid = mapinfo.Where(x => x.longid == CategoryId).Select(x => x.newid).FirstOrDefault(); + + // var info = await d_OccupationRepository.Add(new D_Occupation () + // { + // CategoryId=newid, + // Name=Name, + // OccupationIntraduce=OccupationIntraduce, + // OccupationName=OccupationName, + // Recommend=0, + + // }); + // if (info > 0) + // { + // await _dal.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // } + + // return true; + //} + #endregion + + #region OccMapTag + ///// + ///// OccMapTag + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\OccMapTag.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string OccId = dr["OccId"].ToString(); + // string Name = dr["Name"].ToString(); + // string Tag = dr["Tag"].ToString(); + + // var newid = mapinfo.Where(x => x.longid == OccId).Select(x => x.newid).FirstOrDefault(); + + // var info = await d_OccMapTagRepository.Add(new D_OccMapTag () + // { + // Name=Name, + // OccId=newid, + // Tag=Tag + // }); + // if (info > 0) + // { + // await _dal.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // } + + // return true; + //} + #endregion + + #region MajorMapOccouption + ///// + ///// MajorMapOccouption + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\MajorMapOccouption.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string MajorId = dr["MajorId"].ToString(); + // string OccouptionId = dr["OccouptionId"].ToString(); + + + // var newMajorId = mapinfo.Where(x => x.longid == MajorId).Select(x => x.newid).FirstOrDefault(); + // var newOccouptionId = mapinfo.Where(x => x.longid == OccouptionId).Select(x => x.newid).FirstOrDefault(); + + // var info = await d_MajorMapOccouptionRepository.Add(new D_MajorMapOccouption() + // { + // MajorId = newMajorId, + // OccouptionId = newOccouptionId + // }); + // if (info > 0) + // { + // await _dal.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // } + + // return true; + //} + #endregion + + #region MajorMapTag + ///// + ///// MajorMapTag + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\MajorMapTag.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // List list = new List() { }; + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string MajorId = dr["MajorId"].ToString(); + // string Name = dr["Name"].ToString(); + // string Tag = dr["Tag"].ToString(); + + // var newMajorId = mapinfo.Where(x => x.longid == MajorId).Select(x => x.newid).FirstOrDefault(); + // var info = await d_MajorMapTagRepository.Add(new D_MajorMapTag() + // { + // MajorId = newMajorId, + // Name=Name, + // Tag=Tag, + // }); + // if (info > 0) + // { + // list.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // await _dal.Add(list); + // } + + // return true; + //} + #endregion + + #region MajorObtain + ///// + ///// MajorObtain + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\MajorObtain.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // List list = new List() { }; + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string AverageWage = dr["AverageWage"].ToString(); + // string EducationalBackgroundRatio = dr["EducationalBackgroundRatio"].ToString(); + // string EducationRequirements = dr["EducationRequirements"].ToString(); + // string EmploymentDirection = dr["EmploymentDirection"].ToString(); + // string Experience = dr["Experience"].ToString(); + // string ExperienceRatio = dr["ExperienceRatio"].ToString(); + // string MajorId = dr["MajorId"].ToString(); + // string MajorName = dr["MajorName"].ToString(); + // string ObtainIndustryDis = dr["ObtainIndustryDis"].ToString(); + // string ObtainIndustryDisProportion = dr["ObtainIndustryDisProportion"].ToString(); + // string ObtainMoreArea = dr["ObtainMoreArea"].ToString(); + // string ObtainMostIndustries = dr["ObtainMostIndustries"].ToString(); + // string ObtainRank = dr["ObtainRank"].ToString(); + // string ObtainRankDetail = dr["ObtainRankDetail"].ToString(); + // string ObtainRegionalDis = dr["ObtainRegionalDis"].ToString(); + // string ObtainRegionalDisProportion = dr["ObtainRegionalDisProportion"].ToString(); + // string Position = dr["Position"].ToString(); + // string WageProportion = dr["WageProportion"].ToString(); + // string WageSituation = dr["WageSituation"].ToString(); + // string WorkingYears = dr["WorkingYears"].ToString(); + // string WorkingYearsWage = dr["WorkingYearsWage"].ToString(); + + // var newMajorId = mapinfo.Where(x => x.longid == MajorId).Select(x => x.newid).FirstOrDefault(); + // var info = await d_MajorObtainRepository.Add(new D_MajorObtain() + // { + // MajorId = newMajorId, + // AverageWage = AverageWage, + // ObtainMoreArea = ObtainMoreArea, + // EducationalBackgroundRatio = EducationalBackgroundRatio, + // EducationRequirements = EducationRequirements, + // EmploymentDirection = EmploymentDirection, + // Experience = Experience, + // ExperienceRatio = ExperienceRatio, + // ObtainIndustryDis = ObtainIndustryDis, + // MajorName = MajorName, + // ObtainRank = ObtainRank, + // ObtainIndustryDisProportion = ObtainIndustryDisProportion, + // ObtainMostIndustries = ObtainMostIndustries, + // ObtainRankDetail = ObtainRankDetail, + // ObtainRegionalDis = ObtainRegionalDis, + // Position = Position, + // ObtainRegionalDisProportion = ObtainRegionalDisProportion, + // WageProportion = WageProportion, + // WageSituation = WageSituation, + // WorkingYears = WorkingYears, + // WorkingYearsWage = WorkingYearsWage + // }); + // if (info > 0) + // { + // list.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // await _dal.Add(list); + // } + + // return true; + //} + #endregion + + #region University + ///// + ///// University + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\University.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // List list = new List() { }; + // //var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string Area_Name = dr["Area_Name"].ToString(); + // string Ascription = dr["Ascription"].ToString(); + // string AscriptionName = dr["AscriptionName"].ToString(); + // string Description = dr["Description"].ToString(); + // string Doctorate_Count = dr["Doctorate_Count"].ToString(); + // string Logo = dr["Logo"].ToString(); + // string Master_Count = dr["Master_Count"].ToString(); + // string Name = dr["Name"].ToString(); + // string Nature = dr["Nature"].ToString(); + // string Nhef = dr["Nhef"].ToString(); + // string Rank = dr["Rank"].ToString(); + // string Sff = dr["Sff"].ToString(); + // string Subject_Level = dr["Subject_Level"].ToString(); + // string Syl = dr["Syl"].ToString(); + // string Type = dr["Type"].ToString(); + // string Web = dr["Web"].ToString(); + + // //var newMajorId = mapinfo.Where(x => x.longid == MajorId).Select(x => x.newid).FirstOrDefault(); + // var info = await d_UniversityRepository.Add(new D_University() + // { + // Name = Name, + // Area_Name = Area_Name, + // Ascription = Ascription == "" ? 0 : Convert.ToInt32(Ascription), + // AscriptionName = AscriptionName, + // Description = Description, + // Doctorate_Count = Doctorate_Count == "" ? 0 : Convert.ToInt32(Doctorate_Count), + // Logo = Logo, + // Master_Count = Master_Count == "" ? 0 : Convert.ToInt32(Master_Count), + // Nature = Nature == "" ? 0 : Convert.ToInt32(Nature), + // Nhef = Nhef == "" ? 0 : Convert.ToInt32(Nhef), + // Rank = Rank == "" ? 0 : Convert.ToInt32(Rank), + // Sff = Sff == "" ? 0 : Convert.ToInt32(Sff), + // Web = Web, + // Type = Type == "" ? 0 : Convert.ToInt32(Type), + // Syl = Syl == "" ? 0 : Convert.ToInt32(Syl), + // Subject_Level = Subject_Level == "" ? 0 : Convert.ToInt32(Subject_Level), + + // }); + // if (info > 0) + // { + // list.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // await _dal.Add(list); + // } + // return true; + //} + #endregion + + #region Universityimg + ///// + ///// Universityimg + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\Universityimg.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // List list = new List() { }; + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string ImgList = dr["ImgList"].ToString(); + // string UniversityId = dr["UniversityId"].ToString(); + + // var newuniversityid = mapinfo.Where(x => x.longid == UniversityId).Select(x => x.newid).FirstOrDefault(); + // var info = await d_UniversityimgRepository.Add(new D_Universityimg() + // { + // ImgList=ImgList, + // UniversityId=newuniversityid, + // }); + // if (info > 0) + // { + // list.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // await _dal.Add(list); + // } + // return true; + //} + #endregion + + #region UniversityRank + ///// + ///// UniversityRank + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\UniversityRank.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // List list = new List() { }; + // //var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string Rank = dr["Rank"].ToString(); + // string UniversityName = dr["UniversityName"].ToString(); + // string UniversityType = dr["UniversityType"].ToString(); + // string Year = dr["Year"].ToString(); + + // //var newuniversityid = mapinfo.Where(x => x.longid == UniversityId).Select(x => x.newid).FirstOrDefault(); + // var info = await d_UniversityRankRepository.Add(new D_UniversityRank() + // { + // Rank = Convert.ToInt32(Rank), + // UniversityName = UniversityName, + // UniversityType = Convert.ToInt32(UniversityType), + // Year = Year + // }); + // if (info > 0) + // { + // list.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // await _dal.Add(list); + // } + // return true; + //} + #endregion + + #region MajorMapUniversity + ///// + ///// MajorMapUniversity + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\MajorMapUniversity.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // List list = new List() { }; + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string Universityid = dr["Universityid"].ToString(); + // string majorid = dr["majorid"].ToString(); + + + // var newuniversityid = mapinfo.Where(x => x.longid == Universityid).Select(x => x.newid).FirstOrDefault(); + // var newmajorid = mapinfo.Where(x => x.longid == majorid).Select(x => x.newid).FirstOrDefault(); + // var info = await d_MajorMapUniversityRepository.Add(new D_MajorMapUniversity() + // { + // MajorId = newmajorid, + // Universityid = newuniversityid, + // sp = 0 + // }); + // if (info > 0) + // { + // list.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // await _dal.Add(list); + // } + // return true; + //} + #endregion + + #region Majorinformation + ///// + ///// Majorinformation + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\Majorinformation.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // List list = new List() { }; + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string Name = dr["Name"].ToString(); + // string Universityid = dr["Universityid"].ToString(); + // string MajorId = dr["MajorId"].ToString(); + // string Majorcourse = dr["Majorcourse"].ToString(); + // string Majorintent = dr["Majorintent"].ToString(); + // string Majordescription = dr["Majordescription"].ToString(); + // string Skill = dr["Skill"].ToString(); + // string Postgraduate = dr["Postgraduate"].ToString(); + + // var newuniversityid = mapinfo.Where(x => x.longid == Universityid).Select(x => x.newid).FirstOrDefault(); + // var newmajorid = mapinfo.Where(x => x.longid == MajorId).Select(x => x.newid).FirstOrDefault(); + // var info = await d_MajorInformationRepository.Add(new D_MajorInformation() + // { + // Name = Name, + // UniversityId = newuniversityid <= 0 ? 0 : newuniversityid, + // MajorId = newmajorid <= 0 ? 0 :newmajorid, + // Majorcourse = Majorcourse, + // Majordescription = Majordescription, + // Majorintent = Majorintent, + // Skill = Skill, + // Postgraduate = Postgraduate + // }); + // if (info > 0) + // { + // list.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // await _dal.Add(list); + // } + // return true; + //} + #endregion + + #region GraduateFlow + ///// + ///// GraduateFlow + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\GraduateFlow.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // List list = new List() { }; + // var mapinfo = await _dal.Query(x => x.IsDelete == false); + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string id = dr["_id"].ToString(); + // string universityId = dr["universityId"].ToString(); + // string provinces = dr["provinces"].ToString(); + // string attrs = dr["attrs"].ToString(); + + // var newuniversityid = mapinfo.Where(x => x.longid == universityId).Select(x => x.newid).FirstOrDefault(); + // var info = await d_GraduateFlowRepository.Add(new D_GraduateFlow() + // { + // Attrs = attrs, + // Provinces = provinces, + // UniversityId = newuniversityid, + // OrderSort = 0 + // }); + // if (info > 0) + // { + // list.Add(new D_LongIdMap() { longid = id, newid = info }); + // } + // } + // await _dal.Add(list); + // } + // return true; + //} + #endregion + #endregion + + + #region 院校排序 + /// + /// 院校排序 + /// + /// + public async Task Import() + { + var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\院校专业职业\\院校排名.xlsx"); + if (dataSet.Tables.Count > 0) + { + var stringBuilderinfo = new StringBuilder(); + stringBuilderinfo.AppendFormat("select Id,Name,Logo,Nhef,Sff,Syl,Area_Name,AscriptionName from D_University where IsDelete=0"); + var info = await d_UniversityRepository.QuerySql(stringBuilderinfo.ToString()); + + List list = new List() { }; + foreach (DataRow dr in dataSet.Tables[0].Rows) + { + var rank = Convert.ToInt32(dr["排序"].ToString()); + var name = dr["院校名称"].ToString(); + var nowinfo = info.Where(x => x.Name == name).FirstOrDefault(); + if (nowinfo != null) + { + nowinfo.Rank = rank; + list.Add(nowinfo); + } + } + await d_UniversityRepository.Update(list); + } + + return true; + } + #endregion + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorCategoryServices.cs b/New_College.Services/D_MajorCategoryServices.cs new file mode 100644 index 0000000..7bcf1ce --- /dev/null +++ b/New_College.Services/D_MajorCategoryServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_MajorCategoryServices : BaseServices, ID_MajorCategoryServices + { + private readonly IBaseRepository _dal; + public D_MajorCategoryServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorClassServices.cs b/New_College.Services/D_MajorClassServices.cs new file mode 100644 index 0000000..31247e7 --- /dev/null +++ b/New_College.Services/D_MajorClassServices.cs @@ -0,0 +1,41 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using System.Collections.Generic; +using New_College.Model.ViewModels; +using System.Threading.Tasks; +using New_College.IRepository; +using System.Linq; + +namespace New_College.Services +{ + public class D_MajorClassServices : BaseServices, ID_MajorClassServices + { + private readonly IBaseRepository _dal; + private readonly ID_MajorCategoryRepository d_MajorCategoryRepository; + public D_MajorClassServices(IBaseRepository dal + , ID_MajorCategoryRepository ID_MajorCategoryRepository) + { + this._dal = dal; + d_MajorCategoryRepository = ID_MajorCategoryRepository; + base.BaseDal = dal; + } + + /// + /// 专业分类列表(二级) 传Id 1本科 2 专科 获取一级分类 + /// + /// + /// + public async Task> GetMajorClassListByType(IdQuery query) + { + var majorcate = await d_MajorCategoryRepository.Query(x => x.Type == query.Id && x.IsDelete == false); + if (majorcate.Count <= 0) + return new List() { }; + //var cateids = majorcate.Select(x => x.Id).ToList(); + //var info = await _dal.Query(x => cateids.Contains(x.TradeId) && x.IsDelete == false); + return majorcate.Select(x => new IdNameResult() { Id = x.Id, Name = x.Name }).ToList(); + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorInformationServices.cs b/New_College.Services/D_MajorInformationServices.cs new file mode 100644 index 0000000..a54d9c0 --- /dev/null +++ b/New_College.Services/D_MajorInformationServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_MajorInformationServices : BaseServices, ID_MajorInformationServices + { + private readonly IBaseRepository _dal; + public D_MajorInformationServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorMapOccouptionServices.cs b/New_College.Services/D_MajorMapOccouptionServices.cs new file mode 100644 index 0000000..5053ece --- /dev/null +++ b/New_College.Services/D_MajorMapOccouptionServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_MajorMapOccouptionServices : BaseServices, ID_MajorMapOccouptionServices + { + private readonly IBaseRepository _dal; + public D_MajorMapOccouptionServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorMapTagServices.cs b/New_College.Services/D_MajorMapTagServices.cs new file mode 100644 index 0000000..8a7dbc5 --- /dev/null +++ b/New_College.Services/D_MajorMapTagServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_MajorMapTagServices : BaseServices, ID_MajorMapTagServices + { + private readonly IBaseRepository _dal; + public D_MajorMapTagServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorMapUniversityServices.cs b/New_College.Services/D_MajorMapUniversityServices.cs new file mode 100644 index 0000000..c8f50e7 --- /dev/null +++ b/New_College.Services/D_MajorMapUniversityServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_MajorMapUniversityServices : BaseServices, ID_MajorMapUniversityServices + { + private readonly IBaseRepository _dal; + public D_MajorMapUniversityServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorObtainServices.cs b/New_College.Services/D_MajorObtainServices.cs new file mode 100644 index 0000000..0901056 --- /dev/null +++ b/New_College.Services/D_MajorObtainServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_MajorObtainServices : BaseServices, ID_MajorObtainServices + { + private readonly IBaseRepository _dal; + public D_MajorObtainServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorSalaryServices.cs b/New_College.Services/D_MajorSalaryServices.cs new file mode 100644 index 0000000..dc25ee1 --- /dev/null +++ b/New_College.Services/D_MajorSalaryServices.cs @@ -0,0 +1,128 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.Common.Excel; +using System.Linq; +using System.Collections.Generic; +using System.Data; +using System.Threading.Tasks; +using New_College.IRepository; +using New_College.Model.ViewModels; +using New_College.Model; + +namespace New_College.Services +{ + public class D_MajorSalaryServices : BaseServices, ID_MajorSalaryServices + { + private readonly IBaseRepository _dal; + private readonly ID_MajorRepository d_MajorRepository; + private readonly ID_MajorClassRepository d_MajorClassRepository; + private readonly ID_MajorCategoryRepository d_MajorCategoryRepository; + + public D_MajorSalaryServices(IBaseRepository dal + , ID_MajorRepository ID_MajorRepository + , ID_MajorClassRepository ID_MajorClassRepository + , ID_MajorCategoryRepository ID_MajorCategoryRepository) + { + this._dal = dal; + d_MajorRepository = ID_MajorRepository; + d_MajorClassRepository = ID_MajorClassRepository; + d_MajorCategoryRepository = ID_MajorCategoryRepository; + base.BaseDal = dal; + } + + #region 专业薪酬 + /// + /// 专业薪酬 + /// + /// + public async Task Import() + { + var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\新版志愿好帮手\\专业薪酬.xlsx"); + if (dataSet.Tables.Count > 0) + { + List list = new List() { }; + var majorinfo = await d_MajorRepository.Query(x => x.IsDelete == false); + List nohave = new List() { }; + foreach (DataRow dr in dataSet.Tables[0].Rows) + { + string majorname = dr["专业名称"].ToString(); + string Salary = dr["薪资水平"].ToString(); + + + var majorid = majorinfo.Where(x => x.MajorName == majorname).Select(x => x.Id).FirstOrDefault(); + if (majorid <= 0) + { + nohave.Add(majorname); + continue; + } + var info = await _dal.Add(new D_MajorSalary() + { + Salary = float.Parse(Salary), + MajorName = majorname, + MajorId = majorid + }); + } + var nohavestring = string.Join(",", nohave); + await _dal.Add(list); + } + return true; + } + #endregion + + /// + /// 获取高薪推荐 type传1位本科 传2位专科 + /// + /// + /// + public async Task>> GetMajorSalaryResult(MajorSalaryQuery query) + { + var majorcate = await d_MajorCategoryRepository.Query(x => x.Type == query.Type); + if (majorcate.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,数据为空" }; + var majorcateids = majorcate.Select(x => x.Id).ToList(); + var majorclass = await d_MajorClassRepository.Query(x => majorcateids.Contains(x.TradeId) && x.IsDelete == false); + if (majorclass.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,数据为空" }; + var majorclassids = majorclass.Select(x => x.Id).ToList(); + var major = await d_MajorRepository.Query(x => majorclassids.Contains(x.CategoryClass_Id) && x.IsDelete == false); + if (major.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,数据为空" }; + var majorids = major.Select(x => x.Id).ToList(); + List list = new List() { }; + var info = await _dal.QueryPage(x => x.IsDelete == false && majorids.Contains(x.MajorId), query.PageIndex, query.PageSize, "Salary desc"); + if (info.data.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,数据为空" }; + foreach (var item in info.data) + { + var nowinfo = major.Where(x => x.Id == item.MajorId).FirstOrDefault(); + var majorclassinfo = majorclass.Where(x => x.Id == nowinfo.CategoryClass_Id).FirstOrDefault(); + if (majorclassinfo == null) + continue; + list.Add(new MajorSalaryResult() + { + MajorId=item.MajorId, + MajorName = item.MajorName, + Money = item.Salary, + ParentName = majorclassinfo.Name, + Type = query.Type == 1 ? "本科" : "专科" + }); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = new PageModel() + { + data = list, + dataCount = info.dataCount, + page = info.page, + pageCount = info.pageCount, + PageSize = info.PageSize + } + }; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_MajorServices.cs b/New_College.Services/D_MajorServices.cs new file mode 100644 index 0000000..e05ee6d --- /dev/null +++ b/New_College.Services/D_MajorServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_MajorServices : BaseServices, ID_MajorServices + { + private readonly IBaseRepository _dal; + public D_MajorServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_OccMapTagServices.cs b/New_College.Services/D_OccMapTagServices.cs new file mode 100644 index 0000000..5161f53 --- /dev/null +++ b/New_College.Services/D_OccMapTagServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_OccMapTagServices : BaseServices, ID_OccMapTagServices + { + private readonly IBaseRepository _dal; + public D_OccMapTagServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_OccupationCategoryServices.cs b/New_College.Services/D_OccupationCategoryServices.cs new file mode 100644 index 0000000..c6afdcb --- /dev/null +++ b/New_College.Services/D_OccupationCategoryServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_OccupationCategoryServices : BaseServices, ID_OccupationCategoryServices + { + private readonly IBaseRepository _dal; + public D_OccupationCategoryServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_OccupationServices.cs b/New_College.Services/D_OccupationServices.cs new file mode 100644 index 0000000..4d2393a --- /dev/null +++ b/New_College.Services/D_OccupationServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_OccupationServices : BaseServices, ID_OccupationServices + { + private readonly IBaseRepository _dal; + public D_OccupationServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_UniversityCollectionServices.cs b/New_College.Services/D_UniversityCollectionServices.cs new file mode 100644 index 0000000..43873e8 --- /dev/null +++ b/New_College.Services/D_UniversityCollectionServices.cs @@ -0,0 +1,217 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.Model; +using New_College.Model.ViewModels; +using System.Threading.Tasks; +using System.Collections.Generic; +using New_College.IRepository; +using System.Linq; + +namespace New_College.Services +{ + public class D_UniversityCollectionServices : BaseServices, ID_UniversityCollectionServices + { + private readonly IBaseRepository _dal; + private readonly ID_UniversityRepository d_UniversityRepository; + private readonly ID_MajorMapUniversityRepository d_MajorMapUniversityRepository; + private readonly ISysRegionRepository sysRegionRepository; + + public D_UniversityCollectionServices(IBaseRepository dal + , ID_UniversityRepository ID_UniversityRepository + , ID_MajorMapUniversityRepository ID_MajorMapUniversityRepository + , ISysRegionRepository ISysRegionRepository) + { + this._dal = dal; + d_UniversityRepository = ID_UniversityRepository; + d_MajorMapUniversityRepository = ID_MajorMapUniversityRepository; + sysRegionRepository = ISysRegionRepository; + base.BaseDal = dal; + } + + /// + /// 获取收藏和对比 + /// + /// + /// + public async Task>> GetUniversityCollection(UniversityCollectionQuery query) + { + var info = await _dal.QueryPage(x => x.CustomerId == query.CustomerId && x.IsDelete == false && x.Type == query.Type, query.PageIndex, query.PageSize, "CreateTime desc"); + if (info.data.Count <= 0) + return new MessageModel>() { success = false, msg = "数据为空" }; + var universityids = info.data.Select(x => x.UniversityId).ToList(); + var universityinfo = await d_UniversityRepository.Query(x => x.IsDelete == false && universityids.Contains(x.Id)); + + var HaveContrast = await _dal.Query(x => x.CustomerId == query.CustomerId && x.IsDelete == false && x.Type == 2); + List list = new List() { }; + foreach (var item in info.data) + { + var nowinfo = universityinfo.Where(x => x.Id == item.UniversityId)?.FirstOrDefault(); + if (nowinfo == null) + continue; + List attribute = new List() { }; + //if (nowinfo.Nhef == 1) + // attribute.Add("985"); + //if (nowinfo.Sff == 1) + // attribute.Add("211"); + //if (nowinfo.Syl == 1) + // attribute.Add("双一流"); + list.Add(new UniversityCollectionResult() + { + Id = item.Id, + UniversityId = nowinfo.Id, + Logo = nowinfo.Logo, + Syl = nowinfo.Syl == 1, + Nhef = nowinfo.Nhef == 1, + Sff = nowinfo.Sff == 1, + //Tags = attribute, + Name = nowinfo.Name, + IsContrast = HaveContrast.Count(x => x.UniversityId == item.UniversityId) > 0, + IsCollection = true + }); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = new PageModel() + { + data = list, + dataCount = info.dataCount, + page = info.page, + pageCount = info.pageCount, + PageSize = info.PageSize + } + }; + } + + /// + /// 删除 + /// + /// + /// + public async Task> DeleteCollection(UniversityCollectionAddQuery query) + { + if (query.UniversityId <= 0) + return new MessageModel() { success = false, msg = "请先选择删除项" }; + var info = await _dal.Query(x => x.CustomerId == query.CustomerId && x.UniversityId == query.UniversityId && x.Type == query.Type); + if (info.Count <= 0) + return new MessageModel() { success = false, msg = "所选不存在,或已被删除" }; + foreach (var item in info) + { + item.IsDelete = true; + } + var result = await _dal.Update(info); + if (result) + { + return new MessageModel() { success = true, msg = "删除成功" }; + } + else + { + return new MessageModel() { success = false, msg = "删除失败" }; + } + } + + /// + /// 添加收藏、对比 + /// + /// + /// + public async Task> AddCollection(UniversityCollectionAddQuery query) + { + var info = await _dal.Query(x => x.IsDelete == false && x.CustomerId == query.CustomerId && x.Type == query.Type && x.UniversityId == query.UniversityId); + if (info.Count() > 0) + return new MessageModel() { success = false, msg = "添加失败,所选院校已加入成功" }; + var result = await _dal.Add(new D_UniversityCollection() + { + CustomerId = query.CustomerId, + Type = query.Type, + UniversityId = query.UniversityId + }); + if (result > 0) + { + return new MessageModel() { success = true, msg = "添加成功" }; + } + else + { + return new MessageModel() { success = false, msg = "添加失败" }; + } + } + + /// + /// 获取院校对比结果 + /// + /// + public async Task>> GetUniversityContrasts(IdQuery query) + { + if (query.Ids == null || query.Ids.Count <= 0) + return new MessageModel>() { success = false, msg = "请选择需要对比的院校" }; + var info = await d_UniversityRepository.Query(x => x.IsDelete == false && query.Ids.Contains(x.Id)); + if (info.Count <= 0) + return new MessageModel>() { success = false, msg = "需要对比的院校数据为空" }; + var majormap = await d_MajorMapUniversityRepository.Query(x => query.Ids.Contains(x.Universityid) && x.IsDelete == false); + List list = new List() { }; + foreach (var c in info) + { + list.Add(new UniversitycontrastResult + { + Id = c.Id, + Name = c.Name, + Nature = c.Nature == 1 ? "公立" : "私立", + AscriptionName = string.IsNullOrWhiteSpace(c.AscriptionName) ? "-" : c.AscriptionName, + Rank = c.Rank, + AreaName = c.Area_Name, + Syl = c.Syl == 1 ? "是" : "否", + Nhef = c.Nhef == 1 ? "是" : "否", + Sff = c.Sff == 1 ? "是" : "否", + UniversityType = c.Type == 0 ? "综合" : c.Type == 1 ? "理工" : "医学类", + BuildDate = c.Build_Date, + SubjectLevel = c.Subject_Level == 1 ? "本科" : c.Subject_Level == 2 ? "专科" : "-", + AcademicianCount = c.Academician_Count <= 0 ? "-" : c.Academician_Count.ToString(), + DoctorateCount = c.Doctorate_Count <= 0 ? "-" : c.Doctorate_Count.ToString(), + MasterCount = c.Master_Count.ToString(), + MajorNum = majormap.Count(x => x.Universityid == c.Id).ToString() + }); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = list + }; + } + + + /// + /// 报告 获取我喜欢的院校 + /// + /// + /// + public async Task>> GetUniversityMap(IdQuery query) + { + var info = await _dal.Query(x => x.IsDelete == false && x.CustomerId == query.Id && x.Type == 1); + if (info.Count <= 0) + return new MessageModel>() { success = false, msg = "暂未收藏学校" }; + var universityids = info.Select(x => x.UniversityId).ToList(); + var universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false,"Rank Asc"); + if (universityinfo.Count <= 0) + return new MessageModel>() { success = false, msg = "学校数据为空" }; + var arealist = universityinfo.Select(x => x.Area_Name).Distinct().ToList(); + var regioninfo = await sysRegionRepository.Query(x => arealist.Contains(x.RegionName)); + if (regioninfo.Count <= 0) + return new MessageModel>() { success = false, msg = "省份数据为空" }; + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = regioninfo.Select(x => new UniversityCollectionByMapResult() + { + Lat = x.Lat, + Lng = x.Lng + }).ToList() + }; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_UniversityRankServices.cs b/New_College.Services/D_UniversityRankServices.cs new file mode 100644 index 0000000..37d24e0 --- /dev/null +++ b/New_College.Services/D_UniversityRankServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_UniversityRankServices : BaseServices, ID_UniversityRankServices + { + private readonly IBaseRepository _dal; + public D_UniversityRankServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_UniversityServices.cs b/New_College.Services/D_UniversityServices.cs new file mode 100644 index 0000000..80a34a2 --- /dev/null +++ b/New_College.Services/D_UniversityServices.cs @@ -0,0 +1,77 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using System.Threading.Tasks; +using System.Threading; +using System.Net; +using System.IO; +using System.Collections.Generic; +using New_College.Model.ViewModels; +using New_College.Model; +using System.Linq; + +namespace New_College.Services +{ + public class D_UniversityServices : BaseServices, ID_UniversityServices + { + private readonly IBaseRepository _dal; + public D_UniversityServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + /// + /// 下载图片 + /// + /// + public async Task SaveImg() + { + var info = await _dal.QuerySql("SELECT Logo FROM `D_University`"); + foreach (var item in info) + { + var url = item.Logo; + if (!string.IsNullOrWhiteSpace(url)) + { + var name = item.Logo.Substring(item.Logo.LastIndexOf("/")); + if (!System.IO.File.Exists("D:\\Ashuju\\schoologo\\" + name + "")) + { + WebClient my = new WebClient(); + byte[] mybyte; + mybyte = my.DownloadData(url); + MemoryStream ms = new MemoryStream(mybyte); + System.Drawing.Image img; + img = System.Drawing.Image.FromStream(ms); + img.Save("D:\\Ashuju\\schoologo\\" + name + ""); //保存 + } + } + } + return true; + } + + + /// + /// 获取搜索学校 + /// + /// + /// + public async Task>> GetUniversitList(NameQuery query) + { + var info = await _dal.Query(x => x.Name.Contains(query.Name) && x.IsDelete == false); + if (info.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,数据为空" }; + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = info.Select(x => new IdNameResult() + { + Id = x.Id, + Name = x.Name + }).ToList() + }; + } + } +} \ No newline at end of file diff --git a/New_College.Services/D_UniversityimgServices.cs b/New_College.Services/D_UniversityimgServices.cs new file mode 100644 index 0000000..f8eafe1 --- /dev/null +++ b/New_College.Services/D_UniversityimgServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class D_UniversityimgServices : BaseServices, ID_UniversityimgServices + { + private readonly IBaseRepository _dal; + public D_UniversityimgServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/GuestbookServices.cs b/New_College.Services/GuestbookServices.cs new file mode 100644 index 0000000..e1b4400 --- /dev/null +++ b/New_College.Services/GuestbookServices.cs @@ -0,0 +1,140 @@ +using New_College.Common; +using New_College.IRepository.Base; +using New_College.IRepository.UnitOfWork; +using New_College.IServices; +using New_College.Model; +using New_College.Model.Models; +using New_College.Services.BASE; +using System; +using System.Threading.Tasks; + +namespace New_College.Services +{ + public class GuestbookServices : BaseServices, IGuestbookServices + { + private readonly IBaseRepository _dal; + private readonly IUnitOfWork _unitOfWork; + private readonly IBaseRepository _passwordLibRepository; + public GuestbookServices(IUnitOfWork unitOfWork, IBaseRepository dal, IBaseRepository passwordLibRepository) + { + this._dal = dal; + base.BaseDal = dal; + _unitOfWork = unitOfWork; + _passwordLibRepository = passwordLibRepository; + } + + public async Task> TestTranInRepository() + { + try + { + Console.WriteLine($""); + Console.WriteLine($"事务操作开始"); + _unitOfWork.BeginTran(); + Console.WriteLine($""); + + Console.WriteLine($"insert a data into the table PasswordLib now."); + var insertPassword = await _passwordLibRepository.Add(new PasswordLib() + { + IsDeleted = false, + plAccountName = "aaa", + plCreateTime = DateTime.Now + }); + + + var passwords = await _passwordLibRepository.Query(d => d.IsDeleted == false); + Console.WriteLine($"second time : the count of passwords is :{passwords.Count}"); + + //...... + + Console.WriteLine($""); + var guestbooks = await _dal.Query(); + Console.WriteLine($"first time : the count of guestbooks is :{guestbooks.Count}"); + + int ex = 0; + Console.WriteLine($"\nThere's an exception!!"); + int throwEx = 1 / ex; + + Console.WriteLine($"insert a data into the table Guestbook now."); + var insertGuestbook = await _dal.Add(new Guestbook() + { + username = "bbb", + blogId = 1, + createdate = DateTime.Now, + isshow = true + }); + + guestbooks = await _dal.Query(); + Console.WriteLine($"second time : the count of guestbooks is :{guestbooks.Count}"); + + + _unitOfWork.CommitTran(); + + return new MessageModel() + { + success = true, + msg = "操作完成" + }; + } + catch (Exception) + { + _unitOfWork.RollbackTran(); + var passwords = await _passwordLibRepository.Query(); + Console.WriteLine($"third time : the count of passwords is :{passwords.Count}"); + + var guestbooks = await _dal.Query(); + Console.WriteLine($"third time : the count of guestbooks is :{guestbooks.Count}"); + + return new MessageModel() + { + success = false, + msg = "操作异常" + }; + } + } + + [UseTran] + public async Task TestTranInRepositoryAOP() + { + var passwords = await _passwordLibRepository.Query(); + Console.WriteLine($"first time : the count of passwords is :{passwords.Count}"); + + + Console.WriteLine($"insert a data into the table PasswordLib now."); + var insertPassword = await _passwordLibRepository.Add(new PasswordLib() + { + IsDeleted = false, + plAccountName = "aaa", + plCreateTime = DateTime.Now + }); + + + passwords = await _passwordLibRepository.Query(d => d.IsDeleted == false); + Console.WriteLine($"second time : the count of passwords is :{passwords.Count}"); + + //...... + + Console.WriteLine($""); + var guestbooks = await _dal.Query(); + Console.WriteLine($"first time : the count of guestbooks is :{guestbooks.Count}"); + + int ex = 0; + Console.WriteLine($"\nThere's an exception!!"); + int throwEx = 1 / ex; + + Console.WriteLine($"insert a data into the table Guestbook now."); + var insertGuestbook = await _dal.Add(new Guestbook() + { + username = "bbb", + blogId = 1, + createdate = DateTime.Now, + isshow = true + }); + + guestbooks = await _dal.Query(); + Console.WriteLine($"second time : the count of guestbooks is :{guestbooks.Count}"); + + return true; + } + + } +} diff --git a/New_College.Services/ModulePermissionServices.cs b/New_College.Services/ModulePermissionServices.cs new file mode 100644 index 0000000..c24b35d --- /dev/null +++ b/New_College.Services/ModulePermissionServices.cs @@ -0,0 +1,23 @@ +using New_College.Services.BASE; +using New_College.Model.Models; +using New_College.IRepository; +using New_College.IServices; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + /// + /// ModulePermissionServices + /// + public class ModulePermissionServices : BaseServices, IModulePermissionServices + { + + IBaseRepository _dal; + public ModulePermissionServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + } +} diff --git a/New_College.Services/ModuleServices.cs b/New_College.Services/ModuleServices.cs new file mode 100644 index 0000000..5bc71a9 --- /dev/null +++ b/New_College.Services/ModuleServices.cs @@ -0,0 +1,22 @@ +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; + +namespace New_College.Services +{ + /// + /// ModuleServices + /// + public class ModuleServices : BaseServices, IModuleServices + { + + IBaseRepository _dal; + public ModuleServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + } +} diff --git a/New_College.Services/New_College.Services.csproj b/New_College.Services/New_College.Services.csproj new file mode 100644 index 0000000..3b893ab --- /dev/null +++ b/New_College.Services/New_College.Services.csproj @@ -0,0 +1,27 @@ + + + + netcoreapp3.1 + + + + ..\New_College.Api\bin\Debug\ + + + + ..\New_College\bin\Release\ + + + + + + + + + + + + + + + diff --git a/New_College.Services/PasswordLibServices.cs b/New_College.Services/PasswordLibServices.cs new file mode 100644 index 0000000..1f1cb84 --- /dev/null +++ b/New_College.Services/PasswordLibServices.cs @@ -0,0 +1,18 @@ +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; + +namespace New_College.Services +{ + public partial class PasswordLibServices : BaseServices, IPasswordLibServices + { + IBaseRepository _dal; + public PasswordLibServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + } +} diff --git a/New_College.Services/PermissionServices.cs b/New_College.Services/PermissionServices.cs new file mode 100644 index 0000000..5f9210b --- /dev/null +++ b/New_College.Services/PermissionServices.cs @@ -0,0 +1,22 @@ +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; + +namespace New_College.Services +{ + /// + /// PermissionServices + /// + public class PermissionServices : BaseServices, IPermissionServices + { + + IBaseRepository _dal; + public PermissionServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + } +} diff --git a/New_College.Services/RoleModulePermissionServices.cs b/New_College.Services/RoleModulePermissionServices.cs new file mode 100644 index 0000000..a8fb87d --- /dev/null +++ b/New_College.Services/RoleModulePermissionServices.cs @@ -0,0 +1,81 @@ +using New_College.Common; +using New_College.IRepository; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace New_College.Services +{ + /// + /// RoleModulePermissionServices 应用服务 + /// + public class RoleModulePermissionServices : BaseServices, IRoleModulePermissionServices + { + readonly IRoleModulePermissionRepository _dal; + readonly IBaseRepository _moduleRepository; + readonly IBaseRepository _roleRepository; + + // 将多个仓储接口注入 + public RoleModulePermissionServices( + IRoleModulePermissionRepository dal, + IBaseRepository moduleRepository, + IBaseRepository roleRepository) + { + this._dal = dal; + this._moduleRepository = moduleRepository; + this._roleRepository = roleRepository; + base.BaseDal = dal; + } + + /// + /// 获取全部 角色接口(按钮)关系数据 + /// + /// + [Caching(AbsoluteExpiration = 10)] + public async Task> GetRoleModule() + { + var roleModulePermissions = await base.Query(a => a.IsDeleted == false); + var roles = await _roleRepository.Query(a => a.IsDeleted == false); + var modules = await _moduleRepository.Query(a => a.IsDeleted == false); + + //var roleModulePermissionsAsync = base.Query(a => a.IsDeleted == false); + //var rolesAsync = _roleRepository.Query(a => a.IsDeleted == false); + //var modulesAsync = _moduleRepository.Query(a => a.IsDeleted == false); + + //var roleModulePermissions = await roleModulePermissionsAsync; + //var roles = await rolesAsync; + //var modules = await modulesAsync; + + + if (roleModulePermissions.Count > 0) + { + foreach (var item in roleModulePermissions) + { + item.Role = roles.FirstOrDefault(d => d.Id == item.RoleId); + item.Module = modules.FirstOrDefault(d => d.Id == item.ModuleId); + } + + } + return roleModulePermissions; + } + + public async Task> QueryMuchTable() + { + return await _dal.QueryMuchTable(); + } + + public async Task> RoleModuleMaps() + { + return await _dal.RoleModuleMaps(); + } + + public async Task> GetRMPMaps() + { + return await _dal.GetRMPMaps(); + } + } +} diff --git a/New_College.Services/RoleServices.cs b/New_College.Services/RoleServices.cs new file mode 100644 index 0000000..efab91c --- /dev/null +++ b/New_College.Services/RoleServices.cs @@ -0,0 +1,53 @@ +using New_College.Common; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using System.Linq; +using System.Threading.Tasks; + +namespace New_College.Services +{ + /// + /// RoleServices + /// + public class RoleServices : BaseServices, IRoleServices + { + + IBaseRepository _dal; + public RoleServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + /// + /// + /// + /// + /// + public async Task SaveRole(string roleName) + { + Role role = new Role(roleName); + Role model = new Role(); + var userList = await base.Query(a => a.Name == role.Name && a.Enabled); + if (userList.Count > 0) + { + model = userList.FirstOrDefault(); + } + else + { + var id = await base.Add(role); + model = await base.QueryById(id); + } + + return model; + + } + + [Caching(AbsoluteExpiration = 30)] + public async Task GetRoleNameByRid(int rid) + { + return ((await base.QueryById(rid))?.Name); + } + } +} diff --git a/New_College.Services/SysRegionServices.cs b/New_College.Services/SysRegionServices.cs new file mode 100644 index 0000000..9c9551a --- /dev/null +++ b/New_College.Services/SysRegionServices.cs @@ -0,0 +1,54 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.Model.ViewModels; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Linq; +using New_College.Common; + +namespace New_College.Services +{ + public class SysRegionServices : BaseServices, ISysRegionServices + { + private readonly IBaseRepository _dal; + public SysRegionServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + /// + /// + /// + /// + /// + [Caching(AbsoluteExpiration = 10)] + public async Task> GetListByParentId(string id) + { + return await this.Query(w => w.ParentCode == id); + } + + /// + /// 获取省市区 + /// + /// + /// + public async Task> GetRegionList(SysRegionQuery query) + { + if (query.Code == "0") + query.Code = "100000"; + var info = await _dal.Query(x => x.ParentCode == query.Code); + if (info == null) + return new List() { }; + return info.Select(x => new SysRegionResult() + { + Code = x.RegionCode, + Name = x.RegionName, + Id = x.KeyId + }).ToList(); + } + } +} \ No newline at end of file diff --git a/New_College.Services/T_BatchTypeInfoServices.cs b/New_College.Services/T_BatchTypeInfoServices.cs new file mode 100644 index 0000000..830036c --- /dev/null +++ b/New_College.Services/T_BatchTypeInfoServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class T_BatchTypeInfoServices : BaseServices, IT_BatchTypeInfoServices + { + private readonly IBaseRepository _dal; + public T_BatchTypeInfoServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/T_BatchlineServices.cs b/New_College.Services/T_BatchlineServices.cs new file mode 100644 index 0000000..635d942 --- /dev/null +++ b/New_College.Services/T_BatchlineServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class T_BatchlineServices : BaseServices, IT_BatchlineServices + { + private readonly IBaseRepository _dal; + public T_BatchlineServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/T_EnrollmentBatchServices.cs b/New_College.Services/T_EnrollmentBatchServices.cs new file mode 100644 index 0000000..c163b98 --- /dev/null +++ b/New_College.Services/T_EnrollmentBatchServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class T_EnrollmentBatchServices : BaseServices, IT_EnrollmentBatchServices + { + private readonly IBaseRepository _dal; + public T_EnrollmentBatchServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/T_EnrollmentPlaneServices.cs b/New_College.Services/T_EnrollmentPlaneServices.cs new file mode 100644 index 0000000..138eb67 --- /dev/null +++ b/New_College.Services/T_EnrollmentPlaneServices.cs @@ -0,0 +1,157 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using System.Threading.Tasks; +using New_College.IRepository; +using New_College.Common.Excel; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Data.Entity.ModelConfiguration.Conventions; +using System; + +namespace New_College.Services +{ + public class T_EnrollmentPlaneServices : BaseServices, IT_EnrollmentPlaneServices + { + private readonly IBaseRepository _dal; + private readonly IT_EnrollmentPlanedescServices t_EnrollmentPlanedescServices; + private readonly IT_EnrollmentBatchRepository t_EnrollmentBatchRepository; + private readonly ID_UniversityRepository d_UniversityRepository; + private readonly ID_MajorRepository d_MajorRepository; + + public T_EnrollmentPlaneServices(IBaseRepository dal + , IT_EnrollmentPlanedescServices IT_EnrollmentPlanedescServices + , IT_EnrollmentBatchRepository IT_EnrollmentBatchRepository + , ID_UniversityRepository ID_UniversityRepository + , ID_MajorRepository ID_MajorRepository) + { + this._dal = dal; + t_EnrollmentPlanedescServices = IT_EnrollmentPlanedescServices; + t_EnrollmentBatchRepository = IT_EnrollmentBatchRepository; + d_UniversityRepository = ID_UniversityRepository; + d_MajorRepository = ID_MajorRepository; + base.BaseDal = dal; + } + + #region 2019上海招生分数更新 + ///// + ///// 2019上海招生分数更新 + ///// + ///// + //public async Task Import() + //{ + // var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\数据\\好帮手\\招生计划\\导入步骤\\更新3\\2019上海招生分数更新.xlsx"); + // if (dataSet.Tables.Count > 0) + // { + // var universitylist = await d_UniversityRepository.Query(x => x.IsDelete == false); + // var majorlist = await d_MajorRepository.Query(x => x.IsDelete == false); + // var batchlist = await t_EnrollmentBatchRepository.Query(x => x.IsDelete == false); + + // List list = new List() { }; + // List adduniversity = new List() { }; + // foreach (DataRow dr in dataSet.Tables[0].Rows) + // { + // string schoolname = dr["学校名称"].ToString(); + // string area = dr["省份"].ToString(); + // string major = dr["专业"].ToString(); + // string batch = dr["批次"].ToString(); + // string avgscore = dr["平均分"].ToString(); + // string scoreline = dr["最低分"].ToString(); + // string mustsubject = dr["必修课数"].ToString(); + // string subjectclaim = dr["选科描述"].ToString(); + // string plannum = dr["实际录取人数"].ToString(); + // string type = dr["文理"].ToString(); + + // var universityid = universitylist.Where(x => x.Name == schoolname).Select(x => x.Id).FirstOrDefault(); + // if (universityid <= 0) + // { + // //记录学校 并添加 + // adduniversity.Add(schoolname); + // continue; + // } + // var batchid = batchlist.Where(x => x.Batch_name == batch).Select(x => x.Id).FirstOrDefault(); + + // var remake = ""; + // if (major.Contains("(")) + // { + // int indexs = major.IndexOf("("); + // remake = major.Substring(indexs); + // major = major.Substring(0, indexs); + // } + // var majorid = majorlist.Where(x => x.Name == major).Select(x => x.Id).FirstOrDefault(); + // list.Add(new T_EnrollmentPlanedesc() + // { + // UniversityId = universityid, + // BatchtypeId = batchid, + // Plancount = Convert.ToInt32(plannum), + // PlanId = 1, + // Scoreline = float.Parse(scoreline), + // majoraverage = float.Parse(avgscore), + // MajorName = major, + // Remark = remake, + // MajorId= majorid, + // Subjectclaim= subjectclaim, + // }); + // } + // var cc = adduniversity; + // var count = await t_EnrollmentPlanedescServices.Add(list); + // } + // return true; + //} + #endregion + + /// + /// 2019上海招生分数更新 + /// + /// + public async Task Import() + { + try + { + var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\数据\\好帮手\\招生计划\\导入步骤\\江苏省2019缺失分数线补充.xlsx"); + if (dataSet.Tables.Count > 0) + { + var info = await t_EnrollmentPlanedescServices.Query(x => x.PlanId == 9 && x.IsDelete == false && x.Scoreline <= 0); + var universitylist = await d_UniversityRepository.Query(x => x.IsDelete == false); + List list = new List() { }; + List adduniversity = new List() { }; + foreach (DataRow dr in dataSet.Tables[0].Rows) + { + string Name = dr["Name"].ToString(); + string MajorName = dr["MajorName"].ToString(); + string Scoreline = dr["Scoreline"].ToString(); + if (Scoreline != "0") + { + var universityid = universitylist.Where(x => x.Name == Name).Select(x => x.Id).FirstOrDefault(); + if (universityid > 0) + { + var nowinfo = info.Where(x => x.UniversityId == universityid && x.MajorName == MajorName).FirstOrDefault(); + if (nowinfo != null) + { + + + nowinfo.Scoreline = Convert.ToSingle(Scoreline); + list.Add(nowinfo); + } + } + } + + } + + var count = await t_EnrollmentPlanedescServices.Update(list); + var cc = 0; + } + return true; + } + catch (Exception ex) + { + + throw; + } + + } + } +} \ No newline at end of file diff --git a/New_College.Services/T_EnrollmentPlanedescServices.cs b/New_College.Services/T_EnrollmentPlanedescServices.cs new file mode 100644 index 0000000..18a9b2a --- /dev/null +++ b/New_College.Services/T_EnrollmentPlanedescServices.cs @@ -0,0 +1,2178 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.Model.ViewModels; +using System.Threading.Tasks; +using New_College.Model; +using System.Collections.Generic; +using New_College.IRepository; +using System.Linq; +using LinqKit; +using System; +using System.Text; +using New_College.Repository; +using New_College.Common; + +namespace New_College.Services +{ + public class T_EnrollmentPlanedescServices : BaseServices, IT_EnrollmentPlanedescServices + { + private readonly IBaseRepository _dal; + private readonly ID_UniversityRepository d_UniversityRepository; + private readonly IT_EnrollmentBatchRepository t_EnrollmentBatchRepository; + private readonly IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository; + private readonly ID_MajorRepository d_MajorRepository; + private readonly ID_MajorClassRepository d_MajorClassRepository; + private readonly ID_MajorCategoryRepository d_MajorCategoryRepository; + private readonly ID_MajorMapUniversityRepository d_MajorMapUniversityRepository; + private readonly IT_PlanMapTagRepository t_PlanMapTagRepository; + private readonly IT_RegionScoreRepository t_RegionScoreRepository; + private readonly IU_ProbabilityHistoryRepository u_ProbabilityHistoryRepository; + private readonly IU_VolunteerTableRepository u_VolunteerTableRepository; + private readonly IU_VolunteerTableDetailRepository u_VolunteerTableDetailRepository; + private readonly ID_UniversityCollectionRepository d_UniversityCollectionRepository; + private readonly IT_GearInfoRepository t_GearInfo; + + public T_EnrollmentPlanedescServices(IBaseRepository dal + , ID_UniversityRepository ID_UniversityRepository + , IT_EnrollmentBatchRepository IT_EnrollmentBatchRepository + , IT_EnrollmentPlaneRepository IT_EnrollmentPlaneRepository + , ID_MajorRepository ID_MajorRepository + , ID_MajorClassRepository ID_MajorClassRepository + , ID_MajorCategoryRepository ID_MajorCategoryRepository + , ID_MajorMapUniversityRepository ID_MajorMapUniversityRepository + , IT_PlanMapTagRepository IT_PlanMapTagRepository + , IT_RegionScoreRepository IT_RegionScoreRepository + , IU_ProbabilityHistoryRepository IU_ProbabilityHistoryRepository + , IU_VolunteerTableRepository IU_VolunteerTableRepository + , IU_VolunteerTableDetailRepository IU_VolunteerTableDetailRepository + , ID_UniversityCollectionRepository ID_UniversityCollectionRepository + , IT_GearInfoRepository IT_GearInfoRepository) + { + this._dal = dal; + d_UniversityRepository = ID_UniversityRepository; + t_EnrollmentBatchRepository = IT_EnrollmentBatchRepository; + t_EnrollmentPlaneRepository = IT_EnrollmentPlaneRepository; + d_MajorRepository = ID_MajorRepository; + d_MajorClassRepository = ID_MajorClassRepository; + d_MajorCategoryRepository = ID_MajorCategoryRepository; + d_MajorMapUniversityRepository = ID_MajorMapUniversityRepository; + t_PlanMapTagRepository = IT_PlanMapTagRepository; + t_RegionScoreRepository = IT_RegionScoreRepository; + u_ProbabilityHistoryRepository = IU_ProbabilityHistoryRepository; + u_VolunteerTableRepository = IU_VolunteerTableRepository; + u_VolunteerTableDetailRepository = IU_VolunteerTableDetailRepository; + d_UniversityCollectionRepository = ID_UniversityCollectionRepository; + t_GearInfo = IT_GearInfoRepository; + base.BaseDal = dal; + } + + public List permut = new List(); + + /// + /// 根据分数获取个性推荐学校 + /// + /// + /// + public async Task> GetRecommendUniversity(RecommendUniversityQuery query) + { + var maxscore = query.Score + 10; + var minscore = query.Score - 10; + var descnear = await _dal.QuerySql("select Scoreline,UniversityId from T_EnrollmentPlanedesc where IsDelete=0 and Scoreline<=" + maxscore + " and Scoreline>" + minscore + ""); + var nearids = descnear.Select(x => x.UniversityId).Distinct().ToList(); + + var desc = await _dal.QuerySql("select Scoreline,UniversityId from T_EnrollmentPlanedesc where IsDelete=0 and Scoreline<=" + maxscore + " and Scoreline>180"); + //降序求出所符合院校 + var orderdesc = desc.OrderByDescending(x => x.Scoreline).Select(x => x.UniversityId).Distinct().ToList(); + + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false && orderdesc.Contains(x.Id)); + if (!string.IsNullOrEmpty(query.AreaName) && query.AreaName != "全国") + wheres = wheres.And(x => x.Area_Name.Contains(query.AreaName)); + if (query.SubjectLevel < 2) + wheres = wheres.And(x => x.Subject_Level == query.SubjectLevel); + if (query.Type >= 0) + wheres = wheres.And(x => x.Type == query.Type); + if (query.Nhef < 2) + wheres = wheres.And(x => x.Nhef == query.Nhef); + if (query.Sff < 2) + wheres = wheres.And(x => x.Sff == query.Sff); + if (query.Syl < 2) + wheres = wheres.And(x => x.Syl == query.Syl); + if (query.Nature > 0) + wheres = wheres.And(x => x.Nature == query.Nature); + + var info = await d_UniversityRepository.QueryPage(wheres, query.PageIndex, query.PageSize, "Rank Asc"); + if (info.data.Count <= 0) + return new PageModel() { }; + var collectionuniversity = await d_UniversityCollectionRepository.Query(x => x.CustomerId == query.CustomerId && x.IsDelete == false); + List list = new List() { }; + foreach (var c in info.data) + { + string attribute = ""; + if (c.Nhef == 1) + attribute += "985"; + if (c.Sff == 1) + attribute += "211"; + if (c.Syl == 1) + attribute += "双一流"; + list.Add(new UniversityResult + { + Id = c.Id, + Name = c.Name, + Nature = c.Nature, + AscriptionName = c.AscriptionName, + AreaName = c.Area_Name, + Logo = c.Logo, + Syl = c.Syl == 1 ? true : false, + Nhef = c.Nhef == 1 ? true : false, + Sff = c.Sff == 1 ? true : false, + UniversityType = c.Type, + IsNearScore = nearids.Contains(c.Id), + IsContrast = collectionuniversity.Count(x => x.Type == 2 && x.UniversityId == c.Id) > 0 + }); + } + return new PageModel() + { + data = list, + dataCount = info.dataCount, + page = info.page, + pageCount = info.pageCount, + PageSize = info.PageSize + }; + } + + /// + /// 霍兰德推荐学校专业 + /// + /// + /// + public async Task>> GetEnrollmentTagByPage(TagEnrollmentPlaneQuery query) + { + + //学校到专业 专业到学校 + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + var planid = planinfo.FirstOrDefault().Id; + if (string.IsNullOrWhiteSpace(query.Tag)) + return new MessageModel>() { success = false, msg = "Tag传入为空..." }; + var newTags = GetTag(query.Tag).Distinct().ToList(); + var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); + List majorcolorlists = new List() { }; + List majorlists = new List() { }; + int i = 0; + foreach (var item in newTags) + { + i++; + majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name)); + majorcolorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => new majorlists() + { + MajorName = x.Name, + TagColor = TagcolorName(i).ToString() + })); + } + majorlists = majorlists.Distinct().ToList(); + if (majorlists.Count <= 0) + return new MessageModel>() { success = false, msg = "标签匹配招生计划专业为空..." }; + + var wheres = PredicateBuilder.New(); + + wheres.Start(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.Scoreline <= query.Score && x.UniversityId > 0); + if (query.AreaId != 821 && query.AreaId != 1047 && query.AreaId != 1965) + { + if (query.BatchId > 0) + { + wheres.And(x => x.BatchtypeId == query.BatchId); + } + } + if (query.AreaId == 821) + { + if (query.SubjectClaim == "物") + { + var batch = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && x.IsDelete == false && x.Type == "理科"); + var batchids = batch.Select(x => x.Id).ToList(); + wheres.And(x => batchids.Contains(x.BatchtypeId)); + } + else if (query.SubjectClaim == "史") + { + var batch = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && x.IsDelete == false && x.Type == "文科"); + var batchids = batch.Select(x => x.Id).ToList(); + wheres.And(x => batchids.Contains(x.BatchtypeId)); + } + } + else + { + if (!string.IsNullOrWhiteSpace(query.SubjectClaim)) + { + if (query.SubjectClaim.Contains(",")) + { + var cc = query.SubjectClaim.Split(","); + if (cc.Length == 2) + { + var cc1 = cc[0]; + var cc2 = cc[1]; + wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true || (x.Subjectclaim.Contains(query.SubjectClaim)) == true); + } + else if (cc.Length == 3) + { + var cc1 = cc[0]; + var cc2 = cc[1]; + var cc3 = cc[2]; + wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(cc3) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true || (x.Subjectclaim.Contains(query.SubjectClaim) == true)); + } + } + else + { + wheres.And(x => x.Subjectclaim.Contains(query.SubjectClaim) && !x.Subjectclaim.Contains(",")); + } + } + } + + var descinfo = await _dal.Query(wheres); + if (descinfo.Count <= 0) + return new MessageModel>() { success = false, msg = "该标签的对应招生计划为空..." }; + //档位分数处理 自动锁定一个档位 + DTOByTagQuery dTO = new DTOByTagQuery() { }; + var newscore = Convert.ToDecimal(query.Score); + var gearinfo = await t_GearInfo.Query(x => x.IsDelete == false && x.PlanId == planid && x.AreaId == query.AreaId); + var newtagColor = ""; + if (gearinfo.Count > 0) + { + var nowgearinfo = gearinfo.Where(x => x.GearMinScore <= newscore && x.GearMaxScore >= newscore).FirstOrDefault(); + if (nowgearinfo != null) + { + decimal MaxScore = 0; + decimal MinScore = 0; + int sort = 0; + decimal downMaxScore = 0; + decimal downMinScore = 0; + MaxScore = nowgearinfo.GearMaxScore; + MinScore = nowgearinfo.GearMinScore; + sort = nowgearinfo.OrderSort; + //下个排序的档位分数 + int Downsort = sort + 1; + if (Downsort == 12) + { + downMaxScore = MinScore - 1; + downMinScore = 0; + } + else + { + downMaxScore = gearinfo.Where(m => m.OrderSort == Downsort).Select(m => m.GearMaxScore).FirstOrDefault(); + downMinScore = gearinfo.Where(m => m.OrderSort == Downsort).Select(m => m.GearMinScore).FirstOrDefault(); + } + dTO.OnMaxScore = MaxScore + 5; + dTO.OnMinScore = MaxScore + 1; + dTO.MaxScore = MaxScore; + dTO.MinScore = MinScore; + dTO.DownMaxScore = downMaxScore; + dTO.DownMinScore = downMinScore; + } + else + { + newtagColor = "bao"; + } + } + + var universityids = descinfo.OrderByDescending(x => x.Scoreline).Select(x => x.UniversityId).ToList(); + var universityinfo = new List(); + if (!string.IsNullOrWhiteSpace(query.SearchAreaName) && query.SearchAreaName != "全国") + { + universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false && x.Area_Name == query.SearchAreaName, "Rank Asc"); + if (universityinfo.Count <= 0) + return new MessageModel>() { success = false, msg = "所选省份推荐院校数据为空" }; + } + else + { + universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false, "Rank Asc"); + } + if (query.SearchType == 1) + { + List list = new List() { }; + foreach (var item in majorcolorlists) + { + var newdesc = descinfo.Where(x => x.MajorName == item.MajorName).ToList(); + if (newdesc.Count > 0) + { + var newuniversityids = newdesc.Select(x => x.UniversityId).Distinct().ToList(); + var newuniversityinfo = universityinfo.Where(x => newuniversityids.Contains(x.Id)); + + List nowInfo = new List() { }; + foreach (var s in newuniversityinfo) + { + var tagColor = ""; + if (newtagColor == "bao") + { + tagColor = "bao"; + } + else + { + var nowlowscore = newdesc.Where(x => x.UniversityId == s.Id && x.Scoreline > 0).OrderBy(x => x.Scoreline).Select(x => x.Scoreline).FirstOrDefault(); + var nowScoreLine = Convert.ToDecimal(nowlowscore); + if (dTO.OnMinScore != 0 && dTO.OnMaxScore != 0) + { + if (nowScoreLine >= dTO.OnMinScore && nowScoreLine <= dTO.OnMaxScore) + { + tagColor = "chong"; + } + else if (nowScoreLine >= dTO.MinScore && nowScoreLine <= dTO.MaxScore) + { + tagColor = "wen"; + } + else if (nowScoreLine < dTO.MinScore) + { + tagColor = "bao"; + } + } + } + nowInfo.Add(new OtherInfo() + { + Id = s.Id, + Name = s.Name, + Color = tagColor//此处是学校的颜色 + }); + + } + list.Add(new TagEnrollmentPlanResult() + { + Id = 0, + Name = item.MajorName, + Color = item.TagColor, + Info = nowInfo.OrderByDescending(t => t.Color).ToList() + }); + } + } + var datalist = list.OrderBy(x => x.Color).ToList(); + return new MessageModel>() { success = true, msg = "获取成功", response = datalist }; + } + else + { + List list = new List() { }; + foreach (var item in universityinfo) + { + var newdesc = descinfo.Where(x => x.UniversityId == item.Id).ToList(); + if (newdesc.Count > 0) + { + List otherlist = new List() { }; + foreach (var s in newdesc) + { + var color = majorcolorlists.Where(x => x.MajorName == s.MajorName).Select(x => x.TagColor).FirstOrDefault(); + if (string.IsNullOrWhiteSpace(color)) + color = "d"; + otherlist.Add(new OtherInfo() + { + Id = 0, + Name = s.MajorName, + Color = color + }); + } + var newotherlist = otherlist.OrderBy(x => x.Color).ToList(); + var tagColor = ""; + if (newtagColor == "bao") + { + tagColor = "bao"; + } + else + { + var nowscore = newdesc.Where(x => x.Scoreline > 0).Select(x => x.Scoreline).FirstOrDefault(); + var nowScoreLine = Convert.ToDecimal(nowscore); + if (dTO.OnMinScore != 0 && dTO.OnMaxScore != 0) + { + if (nowScoreLine >= dTO.OnMinScore && nowScoreLine <= dTO.OnMaxScore) + { + tagColor = "chong"; + } + else if (nowScoreLine >= dTO.MinScore && nowScoreLine <= dTO.MaxScore) + { + tagColor = "wen"; + } + else if (nowScoreLine < dTO.MinScore) + { + tagColor = "bao"; + } + } + } + list.Add(new TagEnrollmentPlanResult() + { + Id = item.Id, + Name = item.Name,//院校名称 + Color = tagColor,//院校没有颜色 + Info = newotherlist + }); + } + } + return new MessageModel>() { success = true, msg = "获取成功", response = list.OrderByDescending(x => x.Color).ToList() }; + } + } + + /// + /// 设置标签的背景颜色 + /// + /// + /// + public EnumTagColor TagcolorName(int tag) + { + var tagcolor = new EnumTagColor(); + switch (tag) + { + case 1: + tagcolor = EnumTagColor.a; + break; + case 2: + tagcolor = EnumTagColor.b; + break; + case 3: + tagcolor = EnumTagColor.c; + break; + case 4: + tagcolor = EnumTagColor.c; + break; + case 5: + tagcolor = EnumTagColor.d; + break; + case 6: + tagcolor = EnumTagColor.d; + break; + default: + tagcolor = EnumTagColor.d; + break; + } + return tagcolor; + } + + #region old 霍兰德推荐学校专业 + ///// + ///// 霍兰德推荐学校专业 + ///// + ///// + ///// + //public async Task>> GetEnrollmentTagByPage(TagEnrollmentPlaneQuery query) + //{ + + // //学校到专业 专业到学校 + // var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + // if (planinfo == null) + // return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + // var planid = planinfo.FirstOrDefault().Id; + // if (string.IsNullOrWhiteSpace(query.Tag)) + // return new MessageModel>() { success = false, msg = "Tag传入为空..." }; + // var newTags = GetTag(query.Tag).Distinct().ToList(); + // var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); + // List majorcolorlists = new List() { }; + // List majorlists = new List() { }; + // int i = 0; + // foreach (var item in newTags) + // { + // i++; + // majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name)); + // majorcolorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => new majorlists() + // { + // MajorName = x.Name, + // TagColor = TagcolorName(i).ToString() + // })); + // } + // majorlists = majorlists.Distinct().ToList(); + // if (majorlists.Count <= 0) + // return new MessageModel>() { success = false, msg = "标签匹配招生计划专业为空..." }; + // var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + // if (batchinfo.Count <= 0) + // return new MessageModel>() { success = false, msg = "所属年份数据批次为空..." }; + // var batchids = batchinfo.Select(s => s.Id).ToList(); + // var wheres = PredicateBuilder.New(); + + // wheres.Start(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.Scoreline <= query.Score && x.UniversityId > 0 && batchids.Contains(x.BatchtypeId)); + + // if (!string.IsNullOrWhiteSpace(query.SubjectClaim)) + // { + // if (query.SubjectClaim.Contains(",")) + // { + // var cc = query.SubjectClaim.Split(","); + // if (cc.Length == 2) + // { + // var cc1 = cc[0]; + // var cc2 = cc[1]; + // wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true || (x.Subjectclaim.Contains(query.SubjectClaim)) == true); + // } + // else if (cc.Length == 3) + // { + // var cc1 = cc[0]; + // var cc2 = cc[1]; + // var cc3 = cc[2]; + // wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(cc3) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true || (x.Subjectclaim.Contains(query.SubjectClaim) == true)); + // } + // } + // else + // { + // wheres.And(x => x.Subjectclaim.Contains(query.SubjectClaim) && !x.Subjectclaim.Contains(",")); + // } + // } + // var descinfo = await _dal.Query(wheres); + // if (descinfo.Count <= 0) + // return new MessageModel>() { success = false, msg = "该标签的对应招生计划为空..." }; + // var universityids = descinfo.OrderByDescending(x => x.Scoreline).Select(x => x.UniversityId).ToList(); + // var universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false); + + // if (query.SearchType == 1) + // { + // List list = new List() { }; + // foreach (var item in majorcolorlists) + // { + // var newdesc = descinfo.Where(x => x.MajorName == item.MajorName).ToList(); + // if (newdesc.Count > 0) + // { + // var newuniversityids = newdesc.Select(x => x.UniversityId).Distinct().ToList(); + // var newuniversityinfo = universityinfo.Where(x => newuniversityids.Contains(x.Id)); + // list.Add(new TagEnrollmentPlanResult() + // { + // Id = 0, + // Name = item.MajorName, + // Color = item.TagColor, + // Info = newuniversityinfo.Select(x => new OtherInfo() + // { + // Id = x.Id, + // Name = x.Name, + // Color = "" + // }).ToList() + // }); + // } + // } + // var datalist = list.OrderBy(x => x.Color).ToList(); + // return new MessageModel>() { success = true, msg = "获取成功", response = datalist }; + // } + // else + // { + // List list = new List() { }; + // foreach (var item in universityinfo) + // { + // var newdesc = descinfo.Where(x => x.UniversityId == item.Id).ToList(); + // if (newdesc.Count > 0) + // { + // List otherlist = new List() { }; + // foreach (var s in newdesc) + // { + // var color = majorcolorlists.Where(x => x.MajorName == s.MajorName).Select(x => x.TagColor).FirstOrDefault(); + // if (string.IsNullOrWhiteSpace(color)) + // color = "d_low"; + // otherlist.Add(new OtherInfo() + // { + // Id = 0, + // Name = s.MajorName, + // Color = color + // }); + // } + // var newotherlist = otherlist.OrderBy(x => x.Color); + // list.Add(new TagEnrollmentPlanResult() + // { + // Id = item.Id, + // Name = item.Name,//院校名称 + // Color = "",//院校没有颜色 + // Info = otherlist + // }); + // } + + // } + // return new MessageModel>() { success = true, msg = "获取成功", response = list }; + // } + + + // return new MessageModel>() { success = false, msg = "获取失败" }; + //} + + ///// + ///// 霍兰德推荐学校专业 + ///// + ///// + ///// + //public async Task>> GetEnrollmentTagByPage(TagEnrollmentPlaneQuery query) + //{ + // var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + // if (planinfo == null) + // return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + // var planid = planinfo.FirstOrDefault().Id; + // if (string.IsNullOrWhiteSpace(query.Tag)) + // return new MessageModel>() { success = false, msg = "Tag传入为空..." }; + // var newTags = GetTag(query.Tag); + // var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); + // List majorlists = new List() { }; + // foreach (var item in newTags) + // { + // majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name).ToList()); + // } + // majorlists = majorlists.Distinct().ToList(); + // if (majorlists.Count <= 0) + // return new MessageModel>() { success = false, msg = "标签匹配招生计划专业为空..." }; + // var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + // if (batchinfo.Count <= 0) + // return new MessageModel>() { success = false, msg = "所属年份数据批次为空..." }; + // var batchids = batchinfo.Select(s => s.Id).ToList(); + + // //var descinfoss = await _dal.Query(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.Scoreline <= query.Score && x.UniversityId > 0 && batchids.Contains(x.BatchtypeId)); + // StringBuilder sql = new StringBuilder() { }; + // StringBuilder sqlparams = new StringBuilder() { }; + + // var newmajorlists = ""; + // foreach (var item in majorlists) + // { + // newmajorlists = newmajorlists + "'" + item + "',"; + // } + // newmajorlists = newmajorlists.Substring(0, newmajorlists.Length - 1); + // var newbatchids = string.Join(",", batchids); + // var cc = query.Claim; + // if (!string.IsNullOrWhiteSpace(cc)) + // { + // if (cc.Contains(",")) + // { + // sql.AppendFormat("SELECT Subjectclaim,UniversityId,MajorName,Scoreline FROM `T_EnrollmentPlanedesc` where PlanId={0} and MajorName in ({1}) and Scoreline<={2} and UniversityId>0 and BatchtypeId in ({3}) and Subjectclaim='无限制' or Subjectclaim='无' or Subjectclaim like '%,%' and (", planid, newmajorlists, query.Score, newbatchids); + // var newcc = cc.Split(","); + // foreach (var item in newcc) + // { + // sqlparams.AppendFormat(" Subjectclaim like '%{0}%' or", item); + // } + // sqlparams.AppendFormat(" 1=1)"); + // sql.AppendFormat(sqlparams.ToString()); + // sql.AppendFormat(" union all"); + // sql.AppendFormat(" SELECT Subjectclaim,UniversityId,MajorName,Scoreline FROM `T_EnrollmentPlanedesc` where PlanId={0} and MajorName in ({1}) and Scoreline<={2} and UniversityId>0 and BatchtypeId in ({3}) and Subjectclaim='无限制' or Subjectclaim='无' or Subjectclaim like '%/%' and (", planid, newmajorlists, query.Score, newbatchids); + // sql.AppendFormat(sqlparams.ToString()); + // sql.AppendFormat(" union all"); + // sql.AppendFormat(" SELECT Subjectclaim,UniversityId,MajorName,Scoreline FROM `T_EnrollmentPlanedesc` where PlanId={0} and MajorName in ({1}) and Scoreline<={2} and UniversityId>0 and BatchtypeId in ({3}) and Subjectclaim not like '%,%' and Subjectclaim not like '%/%' and Subjectclaim='无限制' or Subjectclaim='无' and (", planid, newmajorlists, query.Score, newbatchids); + // sql.AppendFormat(sqlparams.ToString()); + // //wheres.And(x => x.Subjectclaim.Contains(cc)); + // } + // else + // { + // sql.AppendFormat("SELECT Subjectclaim,UniversityId,MajorName,Scoreline FROM `T_EnrollmentPlanedesc` where PlanId={0} and MajorName in ({1}) and Scoreline<={2} and UniversityId>0 and BatchtypeId in ({3}) and Subjectclaim='无限制' or Subjectclaim='无' or Subjectclaim like '%{4}%'", planid, newmajorlists, query.Score, newbatchids, cc); + // } + // } + // sql.AppendFormat(" group by Subjectclaim,UniversityId,MajorName,Scoreline"); + // var descinfo = await _dal.QuerySql(sql.ToString()); + // if (descinfo.Count <= 0) + // return new MessageModel>() { success = false, msg = "该标签的对应招生计划为空..." }; + // var universityids = descinfo.OrderByDescending(x => x.Scoreline).Select(x => x.UniversityId).ToList(); + // var universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false); + // List list = new List() { }; + // foreach (var item in majorlists) + // { + // var newdesc = descinfo.Where(x => x.MajorName == item).ToList(); + // if (newdesc.Count > 0) + // { + // var newuniversityids = newdesc.Select(x => x.UniversityId).Distinct().ToList(); + // var newuniversityinfo = universityinfo.Where(x => newuniversityids.Contains(x.Id)); + // list.Add(new TagEnrollmentPlanResult() + // { + // MajorName = item, + // SchoolInfo = newuniversityinfo.Select(x => new SchoolInfo() + // { + // AscriptionName = x.AscriptionName, + // Logo = x.Logo, + // Nhef = x.Nhef, + // Sff = x.Sff, + // Syl = x.Syl, + // UniversityId = x.Id, + // UniversityName = x.Name + // }).ToList() + // }); + // } + // } + + // return new MessageModel>() { success = true, msg = "获取成功", response = list }; + //} + + ///// + ///// 霍兰德推荐学校专业 old2 + ///// + ///// + ///// + //public async Task>> GetEnrollmentTagByPage(TagEnrollmentPlaneQuery query) + //{ + // var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + // if (planinfo == null) + // return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + // var planid = planinfo.FirstOrDefault().Id; + // if (string.IsNullOrWhiteSpace(query.Tag)) + // return new MessageModel>() { success = false, msg = "Tag传入为空..." }; + // var newTags = GetTag(query.Tag); + // var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); + // List majorlists = new List() { }; + // foreach (var item in newTags) + // { + // majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name).ToList()); + // } + // majorlists = majorlists.Distinct().ToList(); + // if (majorlists.Count <= 0) + // return new MessageModel>() { success = false, msg = "标签匹配招生计划专业为空..." }; + // var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + // if (batchinfo.Count <= 0) + // return new MessageModel>() { success = false, msg = "所属年份数据批次为空..." }; + // var batchids = batchinfo.Select(s => s.Id).ToList(); + // var wheres = PredicateBuilder.New(); + + // wheres.Start(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.Scoreline <= query.Score && x.UniversityId > 0 && batchids.Contains(x.BatchtypeId)); + + // if (!string.IsNullOrWhiteSpace(query.SubjectClaim)) + // { + // if (query.SubjectClaim.Contains(",")) + // { + // var cc = query.SubjectClaim.Split(","); + // if (cc.Length == 2) + // { + // var cc1 = cc[0]; + // var cc2 = cc[1]; + // wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true); + // } + // else if (cc.Length == 3) + // { + // var cc1 = cc[0]; + // var cc2 = cc[1]; + // var cc3 = cc[2]; + // wheres.And(x => (x.Subjectclaim.Contains("/") && x.Subjectclaim.Contains(cc1)) == true || (x.Subjectclaim.Contains(cc2) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(cc3) && x.Subjectclaim.Contains("/")) == true || (x.Subjectclaim.Contains(",") && x.Subjectclaim.Contains(query.SubjectClaim)) == true); + // } + // } + // else + // { + // wheres.And(x => x.Subjectclaim.Contains(query.SubjectClaim) && !x.Subjectclaim.Contains(",")); + // } + // } + // var descinfo = await _dal.Query(wheres); + // if (descinfo.Count <= 0) + // return new MessageModel>() { success = false, msg = "该标签的对应招生计划为空..." }; + // var universityids = descinfo.OrderByDescending(x => x.Scoreline).Select(x => x.UniversityId).ToList(); + // var universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false); + // List list = new List() { }; + // foreach (var item in majorlists) + // { + // var newdesc = descinfo.Where(x => x.MajorName == item).ToList(); + // if (newdesc.Count > 0) + // { + // var newuniversityids = newdesc.Select(x => x.UniversityId).Distinct().ToList(); + // var newuniversityinfo = universityinfo.Where(x => newuniversityids.Contains(x.Id)); + // list.Add(new TagEnrollmentPlanResult() + // { + // MajorName = item, + // SchoolInfo = newuniversityinfo.Select(x => new SchoolInfo() + // { + // AscriptionName = x.AscriptionName, + // Logo = x.Logo, + // Nhef = x.Nhef, + // Sff = x.Sff, + // Syl = x.Syl, + // UniversityId = x.Id, + // UniversityName = x.Name + // }).ToList() + // }); + // } + // } + + // return new MessageModel>() { success = true, msg = "获取成功", response = list }; + //} + #endregion + + + #region old懒人模式 + ///// + ///// 懒人模式 + ///// 办学性质 + ///// 高校级别 + ///// 专业ids + ///// + ///// + ///// + //public async Task>> GetEnrollmentLazyByPage(LazyEnrollmentPlaneQuery query) + //{ + // if (query.Score <= 0) + // return new MessageModel>() { success = false, msg = "分数不能为0..." }; + // var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + // if (planinfo == null) + // return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + // //通过传来的专业分类Id 筛选出所选择的专业的ids + // var major = await d_MajorRepository.Query(x => x.IsDelete == false && query.MajorIds.Contains(x.CategoryClass_Id)); + // if (major.Count() <= 0) + // return new MessageModel>() { success = false, msg = "所选专业大类数据完善中..." }; + // var majornames = major.Select(x => x.MajorName).ToList(); + // //通过办学性质和高校级别筛选出学校的ids + // //string sql = ""; + // var stringBuilder = new StringBuilder(); + // stringBuilder.Append("SELECT Id FROM `D_University` where IsDelete=0 "); + // if (query.Nature > 0) + // { + // //sql += " and Nature=" + query.Nature + ""; + // stringBuilder.AppendFormat(" and Nature={0}", query.Nature); + // } + + // if (query.SchoolLevel > 0) + // { + // if (query.SchoolLevel == 1) + // { + // stringBuilder.AppendFormat(" and Nhef=1"); + // //sql += " and Nhef=1"; + // } + // else if (query.SchoolLevel == 2) + // { + // stringBuilder.AppendFormat(" and Sff=1"); + // //sql += " and Sff=1"; + // } + // else + // { + // stringBuilder.AppendFormat(" and Syl=1"); + // //sql += " and Syl=1"; + // } + // } + // var university = await d_UniversityRepository.QuerySql(stringBuilder.ToString()); + // if (university.Count <= 0) + // return new MessageModel>() { success = false, msg = "所选院校数据完善中..." }; + // var universityids = university.Select(x => x.Id).ToList(); + // var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + // if (batchinfo.Count <= 0) + // return new MessageModel>() { success = false, msg = "所属年份数据批次为空..." }; + // var batchids = batchinfo.Select(s => s.Id).ToList(); + // //通过条件筛选出所有的 + // var wheres = PredicateBuilder.New(); + // wheres.And(x => x.Scoreline <= query.Score && majornames.Contains(x.MajorName) && universityids.Contains(x.UniversityId) && x.PlanId == planinfo.FirstOrDefault().Id && batchids.Contains(x.BatchtypeId)); + // //根据上述所有筛选 求出招生计划 + // var plandesc = await _dal.Query(wheres, "Scoreline desc"); + // if (plandesc.Count <= 0) + // return new MessageModel>() { success = false, msg = "符合条件招生条件为空..." }; + // //招生计划内所有的院校Ids + // var planuniversityids = plandesc.Select(x => x.UniversityId).ToList().Distinct(); + // var ids = string.Join(",", planuniversityids); + // //var info = await d_UniversityRepository.QueryPage(x => planuniversityids.Contains(x.Id), query.PageIndex, query.PageSize); + // var start = query.PageSize * (query.PageIndex - 1); + // var end = query.PageIndex * query.PageSize; + // var stringBuilderinfo = new StringBuilder(); + // stringBuilderinfo.AppendFormat("select Id,Name,Logo,Nhef,Sff,Syl,Area_Name,AscriptionName from D_University where IsDelete=0 and Id in ({0}) limit {1},{2}", ids, start, end); + // var info = await d_UniversityRepository.QuerySql(stringBuilderinfo.ToString()); + // List list = new List() { }; + // foreach (var item in info) + // { + // var planids = plandesc.Where(x => x.UniversityId == item.Id).Select(x => x.Id).ToList(); + // list.Add(new UniversityEnrollmentPlanResult() + // { + // UniversityName = item.Name, + // UniversityId = item.Id, + // Logo = item.Logo, + // Nhef = item.Nhef, + // Sff = item.Sff, + // Syl = item.Syl, + // planCount = plandesc.Where(x => x.UniversityId == item.Id).Sum(x => x.Plancount), + // PlanIds = planids, + // AreaName = item.Area_Name, + // AscriptionName = item.AscriptionName, + // MjaorPlan = plandesc.Count(x => x.UniversityId == item.Id), + // Rank = item.Rank <= 0 ? "-" : item.Rank.ToString() + // }); + // } + // return new MessageModel>() + // { + // success = true, + // msg = "获取成功", + // response = new PageModel() + // { + // data = list, + // dataCount = planuniversityids.Count(), + // page = query.PageIndex, + // PageSize = query.PageSize, + // pageCount = (int)Math.Ceiling(ids.Count() / Convert.ToDecimal(query.PageSize)) + // } + // }; + //} + #endregion + + /// + /// 懒人模式 + /// 办学性质 + /// 高校级别 + /// 专业ids + /// + /// + /// + public async Task>> GetEnrollmentLazyByPage(LazyEnrollmentPlaneQuery query) + { + if (query.Score <= 0) + return new MessageModel>() { success = false, msg = "分数不能为0..." }; + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + //通过传来的专业分类Id 筛选出所选择的专业的ids + var majorclassinfo = await d_MajorClassRepository.Query(x => query.MajorIds.Contains(x.TradeId) && x.IsDelete == false); + var CategoryClassids = majorclassinfo.Select(x => x.Id).ToList(); + var major = await d_MajorRepository.Query(x => x.IsDelete == false && CategoryClassids.Contains(x.CategoryClass_Id)); + if (major.Count() <= 0) + return new MessageModel>() { success = false, msg = "请选择专业大类,或所选专业大类数据完善中..." }; + var majornames = major.Select(x => x.MajorName).ToList(); + //通过办学性质和高校级别筛选出学校的ids + //string sql = ""; + var stringBuilder = new StringBuilder(); + stringBuilder.Append("SELECT Id FROM `D_University` where IsDelete=0 "); + if (query.Nature != null && query.Nature.Count > 0) + { + var newnature = string.Join(",", query.Nature); + stringBuilder.AppendFormat(" and Nature in ({0})", newnature); + } + if (query.AreaNames != null && query.AreaNames.Count > 0) + { + string areanames = ""; + foreach (var item in query.AreaNames) + { + areanames += "'" + item + "',"; + } + var newnames = areanames.Substring(0, areanames.Length - 1); + stringBuilder.AppendFormat(" and Area_Name in ({0})", newnames); + } + stringBuilder.AppendFormat(" order by rank asc"); + + var university = await d_UniversityRepository.QuerySql(stringBuilder.ToString()); + if (university.Count <= 0) + return new MessageModel>() { success = false, msg = "所选院校数据完善中..." }; + var universityids = university.Select(x => x.Id).ToList(); + var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + if (batchinfo.Count <= 0) + return new MessageModel>() { success = false, msg = "所属年份数据批次为空..." }; + var batchids = batchinfo.Select(s => s.Id).ToList(); + //通过条件筛选出所有的 + var wheres = PredicateBuilder.New(); + wheres.And(x => x.Scoreline <= query.Score && majornames.Contains(x.MajorName) && universityids.Contains(x.UniversityId) && x.PlanId == planinfo.FirstOrDefault().Id && batchids.Contains(x.BatchtypeId)); + //根据上述所有筛选 求出招生计划 + var plandesc = await _dal.Query(wheres, "Scoreline desc"); + if (plandesc.Count <= 0) + return new MessageModel>() { success = false, msg = "符合条件招生条件为空..." }; + //懒人推荐限制 + //院校数量 + var unum = 0; + //专业数量 + var mnum = 0; + switch (query.AreaId) + { + case 802: + unum = 24; + mnum = 4; + break; + case 821: + unum = 16; + mnum = 6; + break; + case 1047: + unum = 12; + mnum = 6; + break; + case 1376: + unum = 96; + mnum = 1; + break; + case 1965: + unum = 15; + mnum = 6; + break; + } + + //招生计划内所有的院校Ids + var planuniversityids = plandesc.Select(x => x.UniversityId).ToList().Distinct().Take(unum); + var ids = string.Join(",", planuniversityids); + //var info = await d_UniversityRepository.QueryPage(x => planuniversityids.Contains(x.Id), query.PageIndex, query.PageSize); + + var stringBuilderinfo = new StringBuilder(); + stringBuilderinfo.AppendFormat("select Id,Name,Logo,Nhef,Sff,Syl,Area_Name,AscriptionName from D_University where IsDelete=0 and Id in ({0}) order by rank asc", ids); + var info = await d_UniversityRepository.QuerySql(stringBuilderinfo.ToString()); + List list = new List() { }; + foreach (var item in info) + { + var plansinfo = plandesc.Where(x => x.UniversityId == item.Id).ToList().Take(mnum); + list.Add(new UniversityEnrollmentPlanLazyResult() + { + UniversityName = item.Name, + UniversityId = item.Id, + Logo = item.Logo, + Nhef = item.Nhef, + Sff = item.Sff, + Syl = item.Syl, + Infos = plansinfo.Select(x => new PlanInfo() + { + MajorId = x.Id, + Money = x.Tuitionfee, + Year = x.Studyyears, + PlanName = x.MajorName, + PlanNum = x.Plancount, + Scoreline = x.Scoreline + }).ToList(), + AscriptionName = item.AscriptionName, + Rank = item.Rank <= 0 ? "-" : item.Rank.ToString() + }); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = list + }; + //return new MessageModel>() + //{ + // success = true, + // msg = "获取成功", + // response = new PageModel() + // { + // data = list, + // dataCount = planuniversityids.Count(), + // page = query.PageIndex, + // PageSize = query.PageSize, + // pageCount = (int)Math.Ceiling(ids.Count() / Convert.ToDecimal(query.PageSize)) + // } + //}; + } + + /// + /// 根据计划Ids 获取招生计划 + /// + /// + /// + public async Task>> GetPlanByUniversity(PlanDetailQuery query) + { + if (query.PlanIds != null && query.PlanIds.Count <= 0) + return new MessageModel>() { success = false, msg = "传入不能为空" }; + var info = await _dal.QueryPage(x => x.IsDelete == false && query.PlanIds.Contains(x.Id), query.PageIndex, query.PageSize, "Scoreline desc"); + List list = new List() { }; + foreach (var item in info.data) + { + var newname = CheckMajorName(item.MajorName, item.Remark); + var newmoney = string.IsNullOrWhiteSpace(item.Tuitionfee) || item.Tuitionfee == "0" || item.Tuitionfee == "待定" ? "--" : item.Tuitionfee; + var newyear = string.IsNullOrWhiteSpace(item.Studyyears) ? "--" : item.Studyyears; + var count = list.Count(x => x.Name == newname && x.Money == newmoney && x.PlanNum == item.Plancount && x.Scoreline == item.Scoreline); + if (count > 0) + continue; + list.Add(new PlanDescList() + { + Name = newname, + Year = newyear, + Money = newmoney, + PlanNum = item.Plancount, + MajorId = item.Id, + Scoreline = item.Scoreline + //Subject = GetSub(item.Subjectclaim) + }); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = new PageModel() + { + data = list, + dataCount = info.dataCount, + page = info.page, + pageCount = info.pageCount, + PageSize = info.PageSize + } + }; + } + + /// + /// 校验专业名称 + /// + /// + /// + /// + public string CheckMajorName(string name, string remake) + { + return string.IsNullOrWhiteSpace(remake) ? name : remake.Contains("(") || remake.Contains("(") ? name + remake : name + "(" + remake + ")"; + } + + /// + /// 根据年份省份获取批次 + /// + /// + public async Task>> GetBatchByAreaAndYear(BatchQuery query) + { + var info = await t_EnrollmentBatchRepository.Query(x => x.IsDelete == false && x.AreaName == query.AreaName && x.Year == query.Year && !x.Batch_name.Contains("提前") && !x.Batch_name.Contains("零志愿")); + if (info.Count() <= 0) + return new MessageModel>() { success = false, msg = "数据为空" }; + List list = new List() { }; + foreach (var item in info) + { + if (item.Type != "不分文理") + { + list.Add(new IdNameResult() + { + Id = item.Id, + Name = item.Batch_name + "(" + item.Type + ")" + }); + } + else + { + list.Add(new IdNameResult() + { + Id = item.Id, + Name = item.Batch_name + }); + } + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = list + }; + + } + + /// + /// 冲稳保获取推荐学校专业 + /// + /// + /// + public async Task>> GetEnrollmentCWBByPage(CWBEnrollmentPlaneQuery query) + { + //所选科目 分数 + if (query.Score <= 0) + return new MessageModel>() { success = false, msg = "分数不能为0..." }; + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + //筛选符合条件的院校ids + var stringBuilder = new StringBuilder(); + stringBuilder.Append("SELECT Id FROM `D_University` where IsDelete=0 "); + if (query.Nature != null && query.Nature.Count > 0) + { + var newnature = string.Join(",", query.Nature); + stringBuilder.AppendFormat(" and Nature in ({0})", newnature); + } + if (query.UniversityAreaName != null && query.UniversityAreaName.Count > 0) + { + var newname = ""; + foreach (var item in query.UniversityAreaName) + { + newname += "'" + item + "'" + ","; + } + newname = newname.Substring(0, newname.Length - 1); + stringBuilder.AppendFormat(" and Area_Name in ({0})", newname); + } + if (query.SchoolLevel != null && query.SchoolLevel.Count > 0) + { + foreach (var item in query.SchoolLevel) + { + if (item == 1) + { + stringBuilder.AppendFormat(" and Nhef=1"); + } + else if (item == 2) + { + stringBuilder.AppendFormat(" and Sff=1"); + } + else if (item == 3) + { + stringBuilder.AppendFormat(" and Syl=1"); + } + } + } + stringBuilder.AppendFormat(" order by rank asc"); + var university = await d_UniversityRepository.QuerySql(stringBuilder.ToString()); + if (university.Count <= 0) + return new MessageModel>() { success = false, msg = "所选院校数据完善中..." }; + var universityids = university.Select(x => x.Id).ToList(); + //var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + //if (batchinfo.Count <= 0) + // return new MessageModel>() { success = false, msg = "所属年份数据批次为空..." }; + //var batchids = batchinfo.Select(s => s.Id).ToList(); + + //通过条件筛选出所有的 + var wheres = PredicateBuilder.New(); + wheres.And(x => universityids.Contains(x.UniversityId) && x.IsDelete == false && x.PlanId == planinfo.FirstOrDefault().Id && x.BatchtypeId == query.BatchId && x.UniversityId > 0); + //().Id && batchids.Contains(x.BatchtypeId) && x.UniversityId > 0); + if (query.MajorIds != null && query.MajorIds.Count > 0) + { + //所选专业增加majorids筛选 + //query.MajorIds + var majorclassinfo = await d_MajorClassRepository.Query(x => query.MajorIds.Contains(x.TradeId) && x.IsDelete == false); + var CategoryClassids = majorclassinfo.Select(x => x.Id).ToList(); + var major = await d_MajorRepository.Query(x => x.IsDelete == false && CategoryClassids.Contains(x.CategoryClass_Id)); + if (major.Count() <= 0) + return new MessageModel>() { success = false, msg = "所选专业大类数据完善中..." }; + var majornames = major.Select(x => x.MajorName).ToList(); + wheres.And(x => majornames.Contains(x.MajorName)); + } + //根据上述所有筛选 求出招生计划 + var plandesc = await _dal.Query(wheres, "Scoreline desc"); + if (plandesc.Count <= 0) + return new MessageModel>() { success = false, msg = "符合条件招生条件为空..." }; + List c = new List() { }; + List w = new List() { }; + List b = new List() { }; + var start = query.PageSize * (query.PageIndex - 1); + var end = query.PageIndex * query.PageSize; + List list = new List() { }; + var chonguIds = plandesc.Where(k => k.Scoreline > 0 && (query.Score + 20 >= k.Scoreline && query.Score < k.Scoreline)).Select(e => e.UniversityId).Distinct().ToList(); + list.Add(new CWBEnrollmentPlanResult() + { + Name = "冲", + Count = chonguIds.Count(), + UniversityIds = chonguIds + }); + var wenuIds = plandesc.Where(k => k.Scoreline > 0 && (query.Score >= k.Scoreline && query.Score - 25 <= k.Scoreline)).Select(e => e.UniversityId).Distinct().ToList(); + list.Add(new CWBEnrollmentPlanResult() + { + Name = "稳", + Count = wenuIds.Count(), + UniversityIds = wenuIds + }); + var baouIds = plandesc.Where(k => k.Scoreline > 0 && (query.Score - 26 > k.Scoreline)).Select(e => e.UniversityId).Distinct().ToList(); + list.Add(new CWBEnrollmentPlanResult() + { + Name = "保", + Count = baouIds.Count(), + UniversityIds = baouIds + }); + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = list + }; + } + + /// + /// 冲稳保详情 + /// + /// + /// + public async Task>> GetCWBUniversityDetail(CWBUniversityDetailQuery query) + { + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + var wheres = PredicateBuilder.New(); + wheres.And(x => query.UniversityIds.Contains(x.UniversityId) && x.IsDelete == false && x.PlanId == planinfo.FirstOrDefault().Id && x.UniversityId > 0); + //此处需加冲稳保 + if (query.AreaId != 821 && query.AreaId != 1047 && query.AreaId != 1965) + { + if (query.BatchId > 0) + { + wheres.And(x => x.BatchtypeId == query.BatchId); + } + } + //wheres.And(x => x.Scoreline > 0 && (query.Score >= x.Scoreline && query.Score - 25 <= x.Scoreline)); + if (query.Type == "冲") + { + wheres.And(x => x.Scoreline > 0 && (query.Score + 20 >= x.Scoreline && query.Score < x.Scoreline)); + } + else if (query.Type == "稳") + { + wheres.And(x => x.Scoreline > 0 && (query.Score >= x.Scoreline && query.Score - 25 <= x.Scoreline)); + } + else if (query.Type == "保") + { + wheres.And(x => x.Scoreline > 0 && (query.Score - 26 > x.Scoreline)); + } + + //().Id && batchids.Contains(x.BatchtypeId) && x.UniversityId > 0); + if (query.MajorIds != null && query.MajorIds.Count > 0) + { + //所选专业增加majorids筛选 + //query.MajorIds + var major = await d_MajorRepository.Query(x => x.IsDelete == false && query.MajorIds.Contains(x.CategoryClass_Id)); + if (major.Count() <= 0) + return new MessageModel>() { success = false, msg = "所选专业大类数据完善中..." }; + var majornames = major.Select(x => x.MajorName).ToList(); + wheres.And(x => majornames.Contains(x.MajorName)); + } + //根据上述所有筛选 求出招生计划 + var plandesc = await _dal.Query(wheres, "Scoreline desc"); + + var start = query.PageSize * (query.PageIndex - 1); + var end = query.PageIndex * query.PageSize; + string ids = string.Join(",", query.UniversityIds); + var stringBuilderinfo = new StringBuilder(); + stringBuilderinfo.AppendFormat("select Rank,Id,Name,Logo,Nhef,Sff,Syl,Area_Name,AscriptionName from D_University where IsDelete=0 and Id in ({0}) limit {1},{2}", ids, start, end); + var sqldata = await d_UniversityRepository.QuerySql(stringBuilderinfo.ToString()); + if (sqldata.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,数据为空" }; + var Type = query.Type; + var list = sqldata.Select(item => new UniversityEnrollmentPlanResult() + { + UniversityName = item.Name, + UniversityId = item.Id, + Logo = item.Logo, + Nhef = item.Nhef, + Sff = item.Sff, + Syl = item.Syl, + planCount = plandesc.Where(x => x.UniversityId == item.Id).Sum(x => x.Plancount), + PlanIds = plandesc.Where(x => x.UniversityId == item.Id).Select(x => x.Id).ToList(), + AreaName = item.Area_Name, + AscriptionName = item.AscriptionName, + MjaorPlan = plandesc.Count(x => x.UniversityId == item.Id), + Rank = item.Rank <= 0 ? "-" : item.Rank.ToString(), + Type = Type + }).ToList(); + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = new PageModel() + { + data = list, + dataCount = query.UniversityIds.Count(), + page = query.PageIndex, + PageSize = query.PageSize, + pageCount = (int)Math.Ceiling(query.UniversityIds.Count() / Convert.ToDecimal(query.PageSize)) + } + }; + } + + + #region 转化Tag + /// + /// 转化出标签所有可能 + /// + /// + /// + public List GetTag(string tag) + { + var Nums = new List(); + for (int i = 0; i < tag.Length; i++) + { + Nums.Add(tag[i].ToString()); + } + Permutation(Nums.ToArray(), 0, Nums.ToArray().Length); + + //permut = GetTagExtened(tag, permut); + return permut; + } + + /// + /// 递归实现全排序并输出 + /// + /// 待排序的字符数组 + /// 输出字符数组的起始位置 + /// 输出字符数组的长度 + public void Permutation(string[] nums, int m, int n) + { + int i; + string t; + if (m < n - 1) + { + Permutation(nums, m + 1, n); + for (i = m + 1; i < n; i++) + { + t = nums[m]; + nums[m] = nums[i]; + nums[i] = t; + Permutation(nums, m + 1, n); + t = nums[m]; + nums[m] = nums[i]; + nums[i] = t; + } + } + else + { + string kk = string.Empty; + for (int j = 0; j < nums.Length; j++) + { + kk += nums[j]; + } + permut.Add(kk); + } + } + + ///// + ///// 判断是否为不常见标签,若是则匹配相关联标签 + ///// + ///// + ///// + //public List GetTagExtened(string tag, List taglist) + //{ + // var list = new List(); + // var query = yd_tagExInfo.Get(a => a.Enabled == 1 && a.Tags.Equals(tag)).FirstOrDefault(); + // if (query != null) + // { + // list = JsonConvert.DeserializeObject>(query.tagEx); + // } + // if (list.Any() && list.Count() > 0) + // { + // taglist.AddRange(list.Select(s => s.tag).ToList()); + // } + // return taglist; + //} + #endregion + + /// + /// 获取分析结果录取概率 获取之后保存一下 + /// + /// + /// + public async Task> GetUniversityProbability(UniversityProbabilityQuery query) + { + var universityinfo = await d_UniversityRepository.QueryById(query.UniversityId); + if (universityinfo == null) + return new MessageModel() { success = false, msg = "院校信息不存在" }; + UniversityProbabilityResult model = new UniversityProbabilityResult() { }; + #region 院校信息 + model.Logo = universityinfo.Logo; + model.Name = universityinfo.Name; + model.Nature = universityinfo.Nature; + model.Nhef = universityinfo.Nhef > 0; + model.Sff = universityinfo.Sff > 0; + model.Syl = universityinfo.Syl > 0; + model.AscriptionName = universityinfo.AscriptionName; + model.Rank = universityinfo.Rank; + model.AreaName = universityinfo.Area_Name; + model.SubjectLevel = universityinfo.Subject_Level; + #endregion + var planinfobyarea = await t_EnrollmentPlaneRepository.Query(w => w.Area_Id == query.AreaId); + var planinfo = planinfobyarea.Where(w => w.Years == query.Year); + if (planinfo.Count() <= 0) + return new MessageModel() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + var planallids = planinfobyarea.Select(x => x.Id).ToList(); + var planid = planinfo.Select(x => x.Id).FirstOrDefault(); + var descinfobyuniv = await _dal.Query(x => planallids.Contains(x.PlanId) && x.UniversityId == query.UniversityId && x.IsDelete == false); + float universityminimum = 0; + //省份的80%分数 + var regionscore = (await t_RegionScoreRepository.Query(x => x.IsDelete == false && x.AreaId == query.AreaId && x.Year == query.Year)).FirstOrDefault(); + var descinfo = descinfobyuniv.Where(x => x.PlanId == planid).ToList(); + if (descinfo.Count <= 0) + { + return new MessageModel() + { + success = false, + msg = "此学校最新招生分数线暂未估测成功" + }; + //Random random = new Random() { }; + //var randomcc = random.Next(6, 8); + //var newrendom = randomcc / float.Parse(10.ToString()); ; + //universityminimum = random.Next(6, 8); + } + else + { + universityminimum = descinfo.OrderByDescending(x => x.Scoreline).Select(x => x.Scoreline).FirstOrDefault(); + } + //return new MessageModel() { success = false, msg = "招生计划为空,正在完善中..." }; + var isprobab = await u_ProbabilityHistoryRepository.Query(x => x.CustomerId == query.CustomerId && x.UniversityId == query.UniversityId); + if (isprobab.Count <= 0) + { + //没得话测试 + //院校对该省份的招生最低分 + if (regionscore == null) + return new MessageModel() + { + success = false, + msg = "获取失败,当前省份满分数据为空" + }; + var now80score = regionscore.Score * (float)0.8; + if (universityminimum >= now80score) + { + float num = 50; + if (query.Score >= universityminimum) + { + var cha = query.Score - universityminimum; + var add = cha * 2; + if (add >= 46) + { + num = 96; + } + else + { + num += add; + } + } + else + { + var cha = universityminimum - query.Score; + if (cha >= 49) + { + num = 1; + } + else + { + num -= cha; + } + } + model.Probability = num; + //每 + 0.5分,成功率增加1 %,最高96 % + //每 - 1分,成功率减少1 %,最低1 % + } + else + { + float num = 50; + if (query.Score >= universityminimum) + { + var cha = query.Score - universityminimum; + if (cha >= 46) + { + num = 96; + } + else + { + num += cha; + } + } + else + { + var cha = universityminimum - query.Score; + if (cha >= 49) + { + num = 1; + } + else + { + num -= cha; + } + } + model.Probability = num; + //每 + 1分,成功率增加1 %,最高96 % + //每 - 1分,成功率减少1 %,最低1 % + } + var random = RadomHelper.RandNumZF(1); + model.EstimateScore = universityminimum + float.Parse(random); + + var addresult = await u_ProbabilityHistoryRepository.Add(new U_ProbabilityHistory() + { + CustomerId = query.CustomerId, + EstimateScore = model.EstimateScore, + Probability = Convert.ToInt32(model.Probability), + UniversityId = query.UniversityId, + AreaId = query.AreaId, + Year = query.Year + }); + } + else + { + //有的话从历史数据拿 + var oldinfo = isprobab.FirstOrDefault(); + model.EstimateScore = oldinfo.EstimateScore; + model.Probability = oldinfo.Probability; + } + var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.IsDelete == false); + var YearBatchScores = new List() { }; + foreach (var item in planinfobyarea.OrderByDescending(x => x.Years).ToList()) + { + var lowscore = descinfobyuniv.Where(x => x.PlanId == item.Id).OrderBy(x => x.Scoreline).FirstOrDefault(); + if (lowscore != null && lowscore.Scoreline > 0) + { + YearBatchScores.Add(new YearBatchScore() + { + Year = item.Years, + Score = lowscore.Scoreline, + BatchName = batchinfo.Where(x => x.Id == lowscore.BatchtypeId).Select(x => x.Batch_name).FirstOrDefault() + }); + } + } + model.YearBatchScores = YearBatchScores; + model.Proposal = GetProposal(model.Probability); + return new MessageModel() + { + success = true, + msg = "获取成功", + response = model + }; + } + + #region 获取Proposal建议 + public string GetProposal(float Probability) + { + if (Probability >= 85) + { + return "成功几率很高,建议填报"; + } + else if (Probability >= 65) + { + return "成功几率较好,建议可以填报"; + } + else if (Probability >= 50) + { + return "成功几率较低,建议谨慎考虑"; + } + else if (Probability >= 35) + { + return "风险过高,建议谨慎考虑"; + } + else + { + return "风险过高,不建议填报"; + } + } + #endregion + + /// + /// 获取概率历史记录列表 + /// + /// + public async Task>> GetProbabilityResult(ProbabilityQuery query) + { + var info = await u_ProbabilityHistoryRepository.QueryPage(x => x.IsDelete == false && x.CustomerId == query.CustomerId, query.PageIndex, query.PageSize, "CreateTime desc"); + if (info.data.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,暂未测试录取概率" }; + var universityids = info.data.Select(x => x.UniversityId).ToList(); + var universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false, "Rank asc"); + List list = new List() { }; + foreach (var item in info.data) + { + list.Add(new ProbabilityResult() + { + Id = item.Id, + AreaId = item.AreaId, + EstimateScore = item.EstimateScore, + Probability = item.Probability, + UniversityId = item.UniversityId, + UniversityName = universityinfo.Where(x => x.Id == item.UniversityId).Select(x => x.Name).FirstOrDefault(), + Year = item.Year + }); + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = new PageModel() + { + data = list, + dataCount = info.dataCount, + page = info.page, + pageCount = info.pageCount, + PageSize = info.PageSize + } + }; + } + + /// + /// 保存志愿表 + /// + /// + /// + public async Task> SaveVolunteerTable(VolunteerTableQuery query) + { + //if (query.TableId > 0) + //{ + + //} + //u_VolunteerTableRepository u_VolunteerTableDetailRepository + var table = await u_VolunteerTableRepository.Query(x => x.IsDelete == false && x.CustomerId == query.CustomerId); + var num = table.Count() + 1; + var TableName = "我的志愿表" + num; + var addtable = await u_VolunteerTableRepository.Add(new U_VolunteerTable() + { + CustomerId = query.CustomerId, + VolunteerTableName = TableName + }); + if (addtable > 0) + { + List list = new List() { }; + foreach (var item in query.details) + { + list.Add(new U_VolunteerTableDetail() + { + PlanMajorIds = string.Join(",", item.PlanMagorIds), + UniversityId = item.UniversityId, + UniversityName = item.UniversityName, + VolunteerTableId = addtable + }); + } + var adddetail = await u_VolunteerTableDetailRepository.Add(list); + if (adddetail > 0) + { + return new MessageModel() { success = true, msg = "保存成功" }; + } + else + { + return new MessageModel() { success = false, msg = "保存失败" }; + } + } + return new MessageModel() { success = true, msg = "保存成功" }; + } + + /// + /// 获取个人志愿列表 传Id + /// + /// + /// + public async Task>> GetVolunteerTableList(IdQuery query) + { + var info = await u_VolunteerTableRepository.Query(x => x.IsDelete == false && x.CustomerId == query.Id); + if (info.Count <= 0) + return new MessageModel>() { success = false, msg = "获取失败,暂无志愿表" }; + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = info.Select(x => new VolunteerTableListResult() + { + Id = x.Id, + Name = x.VolunteerTableName, + CreateTime = x.CreateTime.Value.ToString("yyyy-MM-dd HH:mm:ss") + }).ToList() + }; + } + + /// + /// 获取志愿表详情 传Id + /// + /// + /// + public async Task>> GetVolunteerTableDetail(IdQuery query) + { + var info = await u_VolunteerTableDetailRepository.Query(x => x.IsDelete == false && x.VolunteerTableId == query.Id); + if (info == null) + return new MessageModel>() { success = false, msg = "获取失败,数据不存在" }; + List list = new List() { }; + var planstringids = info.Select(x => x.PlanMajorIds).ToList(); + List PlanIds = new List() { }; + foreach (var item in planstringids) + { + var newids = item.Split(",").Select(x => int.Parse(x)).ToList(); + PlanIds.AddRange(newids); + } + var descinfo = await _dal.Query(x => x.IsDelete == false && PlanIds.Contains(x.Id)); + foreach (var item in info) + { + var planids = item.PlanMajorIds.Split(",").Select(x => int.Parse(x)).ToList(); + var nowdesc = descinfo.Where(x => planids.Contains(x.Id)).ToList(); + if (nowdesc.Count <= 0) + continue; + //此处处理针对于霍兰德推荐的具有相同学校的案例 + var count = list.Where(x => x.UniversityName == item.UniversityName).ToList(); + if (count.Count > 0) + { + var newinfos = nowdesc.Select(x => new PlanInfo() + { + Money = x.Tuitionfee, + Year = x.Studyyears == null ? "-" : x.Studyyears == "" ? "-" : x.Studyyears, + PlanName = x.MajorName, + PlanNum = x.Plancount, + Scoreline = x.Scoreline + }).ToList(); + count.FirstOrDefault().Infos.AddRange(newinfos); + } + else + { + + list.Add(new VolunteerTableResult() + { + UniversityName = item.UniversityName, + Infos = nowdesc.Select(x => new PlanInfo() + { + Money = x.Tuitionfee, + Year = x.Studyyears == null ? "-" : x.Studyyears == "" ? "-" : x.Studyyears, + PlanName = x.MajorName, + PlanNum = x.Plancount, + Scoreline = x.Scoreline + }).ToList() + }); + } + + } + return new MessageModel>() { success = true, msg = "获取成功", response = list }; + } + + /// + /// 删除志愿表 + /// + /// + /// + public async Task> DeleteVolunteerTable(IdQuery query) + { + var info = await u_VolunteerTableRepository.QueryById(query.Id); + if (info == null) + return new MessageModel() { success = false, msg = "删除失败,数据不存在" }; + info.IsDelete = true; + var result = await u_VolunteerTableRepository.Update(info); + if (result) + { + return new MessageModel() { success = true, msg = "删除成功" }; + } + else + { + return new MessageModel() { success = false, msg = "删除失败" }; + } + } + + /// + /// 保存志愿表 霍兰德专用 + /// + /// + /// + public async Task> SaveHollandVolunteer(HollandVolunteerTableQuery query) + { + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo.Count <= 0) + return new MessageModel() { success = false, msg = "传入年份省份有误" }; + var planid = planinfo.Select(x => x.Id).FirstOrDefault(); + var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + if (batchinfo.Count <= 0) + return new MessageModel() { success = false, msg = "传入年份省份有误" }; + var batchids = batchinfo.Select(s => s.Id).ToList(); + var majorlists = query.infos.Select(x => x.MajorName).ToList(); + var descinfo = await _dal.Query(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.Scoreline <= query.Score && x.UniversityId > 0 && batchids.Contains(x.BatchtypeId)); + //数据处理添加 + List list = new List() { }; + var table = await u_VolunteerTableRepository.Query(x => x.IsDelete == false && x.CustomerId == query.CustomerId); + var num = table.Count() + 1; + var TableName = "我的志愿表" + num; + var addtable = await u_VolunteerTableRepository.Add(new U_VolunteerTable() + { + CustomerId = query.CustomerId, + VolunteerTableName = TableName + }); + if (addtable > 0) + foreach (var item in query.infos) + { + foreach (var s in item.universitys) + { + var plandescid = descinfo.Where(x => x.UniversityId == s.UniversityId && x.MajorName == item.MajorName).Select(x => x.Id).FirstOrDefault(); + list.Add(new U_VolunteerTableDetail() + { + PlanMajorIds = plandescid.ToString(), + UniversityId = s.UniversityId, + UniversityName = s.UniversityName, + VolunteerTableId = addtable + }); + } + } + return new MessageModel() { success = true, msg = "保存成功" }; + } + + /// + /// 获取一键生成的志愿表 + /// + /// + /// + public async Task>> GetAutoVolunteerTableDetail(VolunteerTableQuery query) + { + if (query.details == null) + return new MessageModel>() { success = false, msg = "选择专业院校为空..." }; + List list = new List() { }; + //var planstringids = query.details.Select(x => x.PlanMagorIds).ToList(); + List PlanIds = new List() { }; + foreach (var item in query.details) + { + PlanIds.AddRange(item.PlanMagorIds); + } + var descinfo = await _dal.Query(x => x.IsDelete == false && PlanIds.Contains(x.Id)); + var universityids = query.details.Select(x => x.UniversityId).ToList(); + var universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false, "Rank asc"); + foreach (var item in query.details) + { + var nowdesc = descinfo.Where(x => item.PlanMagorIds.Contains(x.Id)).ToList(); + if (nowdesc.Count <= 0) + continue; + var nowuniversityinfo = universityinfo.Where(x => x.Id == item.UniversityId).FirstOrDefault(); + if (nowuniversityinfo == null) + continue; + //此处处理针对于霍兰德推荐的具有相同学校的案例 + var count = list.Where(x => x.UniversityName == item.UniversityName).ToList(); + if (count.Count > 0) + { + var newinfos = nowdesc.Select(x => new PlanInfo() + { + MajorId = x.Id, + Money = x.Tuitionfee, + Year = x.Studyyears, + PlanName = x.MajorName, + PlanNum = x.Plancount, + Scoreline = x.Scoreline + }).ToList(); + count.FirstOrDefault().Infos.AddRange(newinfos); + } + else + { + list.Add(new SimuVolunteerTableResult() + { + Logo = nowuniversityinfo.Logo, + Nhef = nowuniversityinfo.Nhef > 0, + Rank = nowuniversityinfo.Rank, + Sff = nowuniversityinfo.Sff > 0, + Syl = nowuniversityinfo.Syl > 0, + UniversityId = item.UniversityId, + UniversityName = item.UniversityName, + Infos = nowdesc.Select(x => new PlanInfo() + { + MajorId = x.Id, + Money = x.Tuitionfee, + Year = x.Studyyears, + PlanName = x.MajorName, + PlanNum = x.Plancount, + Scoreline = x.Scoreline + }).ToList() + }); + } + } + return new MessageModel>() { success = true, msg = "获取成功", response = list }; + } + + /// + /// 获取霍兰德一键生成的志愿表 + /// + /// + /// + public async Task>> GetHollandVolunteerTableDetail(HollandVolunteerTableQuery query) + { + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo.Count <= 0) + return new MessageModel>() { success = false, msg = "传入年份省份有误" }; + var planid = planinfo.Select(x => x.Id).FirstOrDefault(); + var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + if (batchinfo.Count <= 0) + return new MessageModel>() { success = false, msg = "传入年份省份有误" }; + var batchids = batchinfo.Select(s => s.Id).ToList(); + var majorlists = query.infos.Select(x => x.MajorName).ToList(); + var descinfo = await _dal.Query(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.Scoreline <= query.Score && x.UniversityId > 0 && batchids.Contains(x.BatchtypeId)); + //数据处理添加 + var universityids = new List() { }; + foreach (var item in query.infos) + { + foreach (var s in item.universitys) + { + universityids.Add(s.UniversityId); + } + } + var universityinfo = await d_UniversityRepository.Query(x => universityids.Contains(x.Id) && x.IsDelete == false, "Rank asc"); + List list = new List() { }; + foreach (var item in query.infos) + { + foreach (var s in item.universitys) + { + var nowuniversityinfo = universityinfo.Where(x => x.Id == s.UniversityId).FirstOrDefault(); + if (nowuniversityinfo == null) + continue; + var plandescid = descinfo.Where(x => x.UniversityId == s.UniversityId && x.MajorName == item.MajorName).Select(x => x.Id).FirstOrDefault(); + var nowdesc = descinfo.Where(x => plandescid == x.Id).ToList(); + var count = list.Where(x => x.UniversityName == s.UniversityName && x.UniversityId == s.UniversityId).ToList(); + if (count.Count > 0) + { + var newinfos = nowdesc.Select(x => new PlanInfo() + { + MajorId = x.Id, + Money = x.Tuitionfee, + Year = x.Studyyears, + PlanName = x.MajorName, + PlanNum = x.Plancount, + Scoreline = x.Scoreline + }).ToList(); + count.FirstOrDefault().Infos.AddRange(newinfos); + } + else + { + list.Add(new SimuVolunteerTableResult() + { + Logo = nowuniversityinfo.Logo, + Nhef = nowuniversityinfo.Nhef > 0, + Rank = nowuniversityinfo.Rank, + Sff = nowuniversityinfo.Sff > 0, + Syl = nowuniversityinfo.Syl > 0, + UniversityId = s.UniversityId, + UniversityName = s.UniversityName, + Infos = nowdesc.Select(x => new PlanInfo() + { + MajorId = x.Id, + Money = x.Tuitionfee, + Year = x.Studyyears, + PlanName = x.MajorName, + PlanNum = x.Plancount, + Scoreline = x.Scoreline + }).ToList() + }); + } + } + } + return new MessageModel>() { success = true, msg = "获取成功", response = list }; + } + + /// + /// 根据标签推荐选科 + /// + /// + /// + public async Task> GetSubjectSelectByTag(ByTagSubjectSelectQuery query) + { + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + var planid = planinfo.FirstOrDefault().Id; + if (string.IsNullOrWhiteSpace(query.Tag)) + return new MessageModel() { success = false, msg = "标签传入为空,请去测试" }; + var newTags = GetTag(query.Tag); + var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); + List majorlists = new List() { }; + foreach (var item in newTags) + { + majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name).ToList()); + } + majorlists = majorlists.Distinct().ToList(); + var descinfo = await _dal.Query(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.UniversityId > 0); + List list = new List() { }; + list.Add(new IdNameResult() { Name = "物", Id = descinfo.Count(x => x.Subjectclaim.Contains("物")) }); + list.Add(new IdNameResult() { Name = "化", Id = descinfo.Count(x => x.Subjectclaim.Contains("化")) }); + list.Add(new IdNameResult() { Name = "生", Id = descinfo.Count(x => x.Subjectclaim.Contains("生")) }); + list.Add(new IdNameResult() { Name = "政", Id = descinfo.Count(x => x.Subjectclaim.Contains("政")) }); + list.Add(new IdNameResult() { Name = "史", Id = descinfo.Count(x => x.Subjectclaim.Contains("史")) }); + list.Add(new IdNameResult() { Name = "地", Id = descinfo.Count(x => x.Subjectclaim.Contains("地")) }); + + var result = list.OrderByDescending(x => x.Id).Select(x => x.Name).Take(3); + + return new MessageModel() + { + success = true, + msg = "获取成功", + response = string.Join("|", result) + }; + } + + /// + /// 获取喜欢的院校 + /// + /// + /// + public async Task>> GetLikeSchoolMajor(IdQuery query) + { + var table = await u_VolunteerTableRepository.Query(x => x.IsDelete == false && x.CustomerId == query.Id); + if (table.Count <= 0) + return new MessageModel>() { success = false, msg = "未生成志愿表" }; + var tableids = table.Select(x => x.Id).ToList(); + var detail = await u_VolunteerTableDetailRepository.Query(x => x.IsDelete == false && tableids.Contains(x.VolunteerTableId)); + if (detail.Count <= 0) + return new MessageModel>() { success = false, msg = "数据为空" }; + List ids = new List() { }; + foreach (var item in detail) + { + var newplaninfo = item.PlanMajorIds.Split(",").ToList(); + foreach (var s in newplaninfo) + { + int id = Convert.ToInt32(s); + ids.Add(id); + } + } + var info = await _dal.Query(x => x.IsDelete == false && ids.Contains(x.Id)); + List list = new List() { }; + foreach (var item in detail) + { + var newplaninfo = item.PlanMajorIds.Split(",").ToList(); + foreach (var s in newplaninfo) + { + int id = Convert.ToInt32(s); + var planname = info.Where(x => x.Id == id).Select(x => x.MajorName).FirstOrDefault(); + if (string.IsNullOrWhiteSpace(planname)) + continue; + list.Add(new LikeSchoolMajor() + { + SchoolName = item.UniversityName, + MajorName = planname + }); + } + } + return new MessageModel>() { success = true, msg = "获取成功", response = list }; + + } + + /// + /// 专业规划 + /// + /// + public async Task>> GetMajorPlanClaim(CustomerQuery query) + { + //查招生计划 + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel>() { success = false, msg = "招生计划为空" }; + var planid = planinfo.Select(x => x.Id).FirstOrDefault(); + //12 大类 + var majorcate = await d_MajorCategoryRepository.Query(x => x.IsDelete == false && x.Type == 1); + //二级类 + var majorcateids = majorcate.Select(x => x.Id).ToList(); + var majorclass = await d_MajorClassRepository.Query(x => x.IsDelete == false && majorcateids.Contains(x.TradeId)); + //三级类 + var majorclassids = majorclass.Select(x => x.Id).ToList(); + var major = await d_MajorRepository.Query(x => x.IsDelete == false && majorclassids.Contains(x.CategoryClass_Id)); + //通过三级类的名称去匹配 subjectclaim 选科信息 + //没有的话就给个无选科要求 + var batchinfo = await t_EnrollmentBatchRepository.Query(x => x.Year == query.Year && x.AreaName == query.AreaName && !x.Batch_name.Contains("提前")); + if (batchinfo.Count <= 0) + return new MessageModel>() { success = false, msg = "所属年份数据批次为空..." }; + var batchids = batchinfo.Select(s => s.Id).ToList(); + var plandesc = await _dal.Query(x => x.IsDelete == false && x.PlanId == planid && batchids.Contains(x.BatchtypeId) && x.UniversityId > 0, "Scoreline desc"); + List list = new List() { }; + foreach (var item in majorcate) + { + List majors = new List() { }; + var newmajorclassids = majorclass.Where(x => x.TradeId == item.Id).Select(x => x.Id).ToList(); + var newmajorinfo = major.Where(x => newmajorclassids.Contains(x.CategoryClass_Id)); + foreach (var s in newmajorinfo) + { + var claim = plandesc.Where(x => x.MajorName == s.MajorName).Select(x => x.Subjectclaim).FirstOrDefault(); + majors.Add(new MajorClaim() + { + MajorName = s.Name, + Claim = GetClaim(claim) + }); + } + list.Add(new MajorPlanResult() + { + Name = item.Name, + Majors = majors + }); + } + return new MessageModel>() { success = true, msg = "获取成功", response = list }; + } + + /// + /// + /// + /// + /// + public string GetClaim(string claim) + { + var returnclaim = claim; + switch (claim) + { + case "不限": + returnclaim = "无限制"; + break; + case "": + returnclaim = "无限制"; + break; + case null: + returnclaim = "无限制"; + break; + case "无限制": + returnclaim = "无限制"; + break; + default: + returnclaim = claim; + break; + } + return returnclaim; + } + + /// + /// 获取批次 + /// + /// + /// + public async Task>> GetBatchByYearArea(YearAreaQuery query) + { + var info = await t_EnrollmentBatchRepository.Query(x => x.IsDelete == false && x.AreaName == query.AreaName && x.Year == query.Year && !x.Batch_name.Contains("提前") && !x.Batch_name.Contains("零志愿")); + if (info.Count <= 0) + return new MessageModel>() { success = false, msg = "数据为空" }; + + List list = new List() { }; + foreach (var item in info) + { + if (item.Type != "不分文理") + { + list.Add(new IdNameResult() + { + Id = item.Id, + Name = item.Batch_name + "(" + item.Type + ")" + }); + } + else + { + list.Add(new IdNameResult() + { + Id = item.Id, + Name = item.Batch_name + }); + } + } + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = list + }; + } + } +} \ No newline at end of file diff --git a/New_College.Services/T_GearInfoServices.cs b/New_College.Services/T_GearInfoServices.cs new file mode 100644 index 0000000..845d438 --- /dev/null +++ b/New_College.Services/T_GearInfoServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class T_GearInfoServices : BaseServices, IT_GearInfoServices + { + private readonly IBaseRepository _dal; + public T_GearInfoServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/T_LongIdMapServices.cs b/New_College.Services/T_LongIdMapServices.cs new file mode 100644 index 0000000..1430952 --- /dev/null +++ b/New_College.Services/T_LongIdMapServices.cs @@ -0,0 +1,271 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.IRepository; +using New_College.Common.Excel; +using System.Data; +using System.Threading.Tasks; +using System; +using System.Linq; +using System.Collections.Generic; + +namespace New_College.Services +{ + public class T_LongIdMapServices : BaseServices, IT_LongIdMapServices + { + private readonly IBaseRepository _dal; + private readonly IT_EnrollmentBatchRepository t_EnrollmentBatchRepository; + private readonly IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository; + private readonly IT_EnrollmentPlanedescRepository t_EnrollmentPlanedescRepository; + private readonly ID_LongIdMapRepository d_LongIdMapRepository; + private readonly IT_BatchlineRepository t_BatchlineRepository; + private readonly IT_BatchTypeInfoRepository t_BatchTypeInfoRepository; + + public T_LongIdMapServices(IBaseRepository dal + , IT_EnrollmentBatchRepository IT_EnrollmentBatchRepository + , IT_EnrollmentPlaneRepository IT_EnrollmentPlaneRepository + , IT_EnrollmentPlanedescRepository IT_EnrollmentPlanedescRepository + , ID_LongIdMapRepository ID_LongIdMapRepository + , IT_BatchlineRepository IT_BatchlineRepository + , IT_BatchTypeInfoRepository IT_BatchTypeInfoRepository) + { + this._dal = dal; + t_EnrollmentBatchRepository = IT_EnrollmentBatchRepository; + t_EnrollmentPlaneRepository = IT_EnrollmentPlaneRepository; + t_EnrollmentPlanedescRepository = IT_EnrollmentPlanedescRepository; + d_LongIdMapRepository = ID_LongIdMapRepository; + t_BatchlineRepository = IT_BatchlineRepository; + t_BatchTypeInfoRepository = IT_BatchTypeInfoRepository; + base.BaseDal = dal; + } + + #region EnrollmentBatch + /// + /// EnrollmentBatch + /// + /// + public async Task ImportEnrollmentBatch() + { + var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\志愿填报\\EnrollmentBatch.xlsx"); + if (dataSet.Tables.Count > 0) + { + foreach (DataRow dr in dataSet.Tables[0].Rows) + { + string id = dr["_id"].ToString(); + string areaName = dr["areaName"].ToString(); + string year = dr["year"].ToString(); + string batch_name = dr["batch_name"].ToString(); + string Type = dr["Type"].ToString(); + string subjectlevel = dr["subjectlevel"].ToString(); + var info = await t_EnrollmentBatchRepository.Add(new T_EnrollmentBatch() + { + AreaName = areaName, + Year = Convert.ToInt32(year), + Batch_name = batch_name, + Subjectlevel = Convert.ToInt32(subjectlevel), + Type = Type, + }); + if (info > 0) + { + await _dal.Add(new T_LongIdMap() { longid = id, newid = info, tablename = "EnrollmentBatch" }); + } + } + } + + return true; + } + #endregion + + #region EnrollmentPlane + /// + /// EnrollmentPlane + /// + /// + public async Task ImportEnrollmentPlane() + { + var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\志愿填报\\EnrollmentPlane.xlsx"); + if (dataSet.Tables.Count > 0) + { + foreach (DataRow dr in dataSet.Tables[0].Rows) + { + string id = dr["_id"].ToString(); + string EnrollmentName = dr["EnrollmentName"].ToString(); + string Area_Id = dr["Area_Id"].ToString(); + string Years = dr["Years"].ToString(); + + var info = await t_EnrollmentPlaneRepository.Add(new T_EnrollmentPlane() + { + Area_Id = Convert.ToInt32(Area_Id), + EnrollmentName = EnrollmentName, + Years = Convert.ToInt32(Years), + }); + if (info > 0) + { + await _dal.Add(new T_LongIdMap() { longid = id, newid = info, tablename = "EnrollmentPlane" }); + } + } + } + + return true; + } + #endregion + + #region EnrollmentPlanedesc + /// + /// EnrollmentPlanedesc + /// + /// + public async Task ImportEnrollmentPlanedesc() + { + var dlongidmap = await d_LongIdMapRepository.Query(x => x.IsDelete == false); + var PlanInfo = await _dal.Query(x => x.IsDelete == false && x.tablename == "EnrollmentPlane"); + var BatchInfo = await _dal.Query(x => x.IsDelete == false && x.tablename == "EnrollmentBatch"); + for (int i = 1; i <= 29; i++) + { + var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\志愿填报\\EnrollmentPlanedesc\\" + i + ".xlsx"); + if (dataSet.Tables.Count > 0) + { + List T_LongIdMaplist = new List() { }; + List T_EnrollmentPlanedesclist = new List() { }; + int num = 1; + foreach (DataRow dr in dataSet.Tables[0].Rows) + { + string id = dr["_id"].ToString(); + string Name = dr["Name"].ToString(); + string PlanId = dr["PlanId"].ToString(); + string BatchtypeId = dr["BatchtypeId"].ToString(); + string UniversityId = dr["UniversityId"].ToString(); + string Majorgroup = dr["Majorgroup"].ToString(); + string Subjectclaim = dr["Subjectclaim"].ToString(); + string Plancount = dr["Plancount"].ToString() == "" ? "0" : dr["Plancount"].ToString() == null ? "0" : dr["Plancount"].ToString(); + string Tuitionfee = dr["Tuitionfee"].ToString(); + string Languageclaim = dr["Languageclaim"].ToString(); + string Tags = dr["Tags"].ToString(); + string Scoreline = dr["Scoreline"].ToString() == "" ? "0" : dr["Scoreline"].ToString() == null ? "0" : dr["Scoreline"].ToString(); + string Remark = dr["Remark"].ToString(); + string Studyyears = dr["Studyyears"].ToString(); + string MajorName = dr["MajorName"].ToString(); + var schoollowscore = dr["schoollowscore"].ToString() == "" ? "0" : dr["schoollowscore"].ToString() == null ? "0" : dr["schoollowscore"].ToString(); + string schoolprovinline = dr["schoolprovinline"].ToString() == "" ? "0" : dr["schoolprovinline"].ToString() == null ? "0" : dr["schoolprovinline"].ToString(); + string majoraverage = dr["majoraverage"].ToString() == "" ? "0" : dr["majoraverage"].ToString() == null ? "0" : dr["majoraverage"].ToString(); + string heightscore = dr["heightscore"].ToString() == "" ? "0" : dr["heightscore"].ToString() == null ? "0" : dr["heightscore"].ToString(); + string scorepostion = dr["scorepostion"].ToString() == "" ? "0" : dr["scorepostion"].ToString() == null ? "0" : dr["scorepostion"].ToString(); + + int newid = (i - 1) * 10000 + num; + T_EnrollmentPlanedesclist.Add(new T_EnrollmentPlanedesc() + { + Id = newid, + //Name = Name, + BatchtypeId = BatchInfo.Where(x => x.longid == BatchtypeId).Select(x => x.newid).FirstOrDefault(), + PlanId = PlanInfo.Where(x => x.longid == PlanId).Select(x => x.newid).FirstOrDefault(), + UniversityId = dlongidmap.Where(x => x.longid == UniversityId).Select(x => x.newid).FirstOrDefault(), + //Majorgroup = Majorgroup, + Subjectclaim = Subjectclaim, + Plancount = Convert.ToInt32(Plancount), + Tuitionfee = Tuitionfee, + //Languageclaim = Languageclaim, + Tags = Tags, + Scoreline = float.Parse(Scoreline), + Remark = Remark, + Studyyears = Studyyears, + MajorName = MajorName, + //schoollowscore = float.Parse(schoollowscore), + //schoolprovinline = float.Parse(schoolprovinline), + majoraverage = float.Parse(majoraverage), + //heightscore = float.Parse(heightscore), + scorepostion = float.Parse(scorepostion) + }); + T_LongIdMaplist.Add(new T_LongIdMap() { longid = id, newid = newid, tablename = "EnrollmentPlanedesc" }); + num++; + } + await t_EnrollmentPlanedescRepository.Add(T_EnrollmentPlanedesclist); + await _dal.Add(T_LongIdMaplist); + } + } + + + return true; + } + #endregion + + + #region Batchline + /// + /// Batchline + /// + /// + public async Task ImportBatchline() + { + var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\志愿填报\\Batchline.xlsx"); + if (dataSet.Tables.Count > 0) + { + List list = new List() { }; + foreach (DataRow dr in dataSet.Tables[0].Rows) + { + string id = dr["_id"].ToString(); + string areaName = dr["areaName"].ToString(); + string year = dr["year"].ToString(); + string average = dr["average"].ToString(); + string type_name = dr["type_name"].ToString(); + string batch_name = dr["batch_name"].ToString(); + + var info = await t_BatchlineRepository.Add(new T_Batchline() + { + AreaName = areaName, + Average = Convert.ToInt32(average), + Batch_name = batch_name, + Type_name = type_name, + Year = Convert.ToInt32(year) + }); + if (info > 0) + { + list.Add(new T_LongIdMap() { longid = id, newid = info, tablename = "Batchline" }); + } + } + await _dal.Add(list); + } + + return true; + } + #endregion + + #region BatchTypeInfo + /// + /// BatchTypeInfo + /// + /// + public async Task ImportBatchTypeInfo() + { + var dataSet = ExcelUtil.ReadExcelToDataSet("D:\\Ashuju\\志愿填报\\BatchTypeInfo.xlsx"); + if (dataSet.Tables.Count > 0) + { + List list = new List() { }; + foreach (DataRow dr in dataSet.Tables[0].Rows) + { + string id = dr["_id"].ToString(); + string AreaName = dr["AreaName"].ToString(); + string BatchName = dr["BatchName"].ToString(); + string Year = dr["Year"].ToString(); + + + var info = await t_BatchTypeInfoRepository.Add(new T_BatchTypeInfo() + { + AreaName = AreaName, + Year = Convert.ToInt32(Year), + BatchName=BatchName, + }); + if (info > 0) + { + list.Add(new T_LongIdMap() { longid = id, newid = info, tablename = "BatchTypeInfo" }); + } + } + await _dal.Add(list); + } + + return true; + } + #endregion + } +} \ No newline at end of file diff --git a/New_College.Services/T_PlanMapTagServices.cs b/New_College.Services/T_PlanMapTagServices.cs new file mode 100644 index 0000000..5de3a8a --- /dev/null +++ b/New_College.Services/T_PlanMapTagServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class T_PlanMapTagServices : BaseServices, IT_PlanMapTagServices + { + private readonly IBaseRepository _dal; + public T_PlanMapTagServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/T_RegionScoreServices.cs b/New_College.Services/T_RegionScoreServices.cs new file mode 100644 index 0000000..b95d6cc --- /dev/null +++ b/New_College.Services/T_RegionScoreServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class T_RegionScoreServices : BaseServices, IT_RegionScoreServices + { + private readonly IBaseRepository _dal; + public T_RegionScoreServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/TasksQzServices.cs b/New_College.Services/TasksQzServices.cs new file mode 100644 index 0000000..513aa02 --- /dev/null +++ b/New_College.Services/TasksQzServices.cs @@ -0,0 +1,19 @@ +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; + +namespace New_College.Services +{ + public partial class TasksQzServices : BaseServices, ITasksQzServices + { + IBaseRepository _dal; + public TasksQzServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + } +} + \ No newline at end of file diff --git a/New_College.Services/Test_CategoryInfoServices.cs b/New_College.Services/Test_CategoryInfoServices.cs new file mode 100644 index 0000000..8e91bad --- /dev/null +++ b/New_College.Services/Test_CategoryInfoServices.cs @@ -0,0 +1,112 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using System.Collections.Generic; +using New_College.Model.ViewModels; +using System.Threading.Tasks; +using System.Linq; +using New_College.IRepository; +using New_College.Common.WebApiClients.HttpApis; +using YIJIYI.Core.Common.Helper; +using System; + +namespace New_College.Services +{ + public class Test_CategoryInfoServices : BaseServices, ITest_CategoryInfoServices + { + private readonly IBaseRepository _dal; + private readonly ITest_PsychMeasurementInfoRepository test_PsychMeasurementInfoRepository; + private readonly ITest_CycleTimeInfoRepository test_CycleTimeInfoRepository; + private readonly IV_OrderInfoRepository v_OrderInfoRepository; + + public Test_CategoryInfoServices(IBaseRepository dal + , ITest_PsychMeasurementInfoRepository ITest_PsychMeasurementInfoRepository + , ITest_CycleTimeInfoRepository ITest_CycleTimeInfoRepository + , IV_OrderInfoRepository IV_OrderInfoRepository) + { + this._dal = dal; + test_PsychMeasurementInfoRepository = ITest_PsychMeasurementInfoRepository; + test_CycleTimeInfoRepository = ITest_CycleTimeInfoRepository; + v_OrderInfoRepository = IV_OrderInfoRepository; + base.BaseDal = dal; + } + + /// + /// 获取分类 根绝type + /// + /// + public async Task> GetCateSelectByType(CategoryInfoQuery query) + { + var info = await _dal.Query(x => x.IsDelete == false && x.OrderSort == query.Type); + if (info.Count <= 0) + return new List() { }; + //var orderinfo = await v_OrderInfoRepository.Query(x => x.IsDelete == false); + var ids = info.Select(x => x.Id).ToList(); + var testinfo = await test_PsychMeasurementInfoRepository.Query(x => x.IsDelete == false && ids.Contains(x.CategoryId)); + //var cycleinfo = await test_CycleTimeInfoRepository.Query(x => x.IsDelete == false); + List list = new List() { }; + foreach (var item in info) + { + list.Add(new CategoryInfoResult() + { + Id = item.Id, + Name = item.Name, + Desc = item.Desc, + Detail = item.Detail, + JoinCount = testinfo.Count(x => x.CategoryId == item.Id) + }); + } + return list; + } + + /// + /// 获取测评状态 + /// + /// + /// + public async Task GetTestStatus(CategoryStatusQuery query) + { + var info = await v_OrderInfoRepository.Query(x => x.CustomerId == query.CustomerId && x.IsDelete == false); + if (info.Count <= 0) + return new CategoryStatusResult() { }; + var viptype = info.OrderByDescending(x => x.CreateTime).FirstOrDefault().CardTypeId; + var cycleinfo = await test_CycleTimeInfoRepository.Query(x => x.VipCardTypeId == viptype && x.IsDelete == false && x.CategoryId == query.CategoryId); + if (cycleinfo.Count <= 0) + return new CategoryStatusResult() { }; + var psych = await test_PsychMeasurementInfoRepository.Query(x => x.CategoryId == query.CategoryId && x.StudentId == query.CustomerId); + if (psych.Count <= 0) + return new CategoryStatusResult() + { + CycleTimeId = cycleinfo.FirstOrDefault().Id, + TestNum = 0 + }; + var CycleTimeId = 0; + var TestNum = 0; + DateTime? TopTime = TimeUtil.GetCstDateTime(); + foreach (var item in cycleinfo) + { + if (CycleTimeId > 0) + continue; + var nowinfo = psych.Where(x => x.CycleTimeId == item.Id).FirstOrDefault(); + if (nowinfo != null) + { + TopTime = nowinfo.CreateTime; + TestNum++; + } + else + { + CycleTimeId = item.Id; + } + + } + return new CategoryStatusResult() + { + CycleTimeId = CycleTimeId, + TestNum = TestNum, + TopTime = TopTime + }; + } + } +} \ No newline at end of file diff --git a/New_College.Services/Test_CycleTimeInfoServices.cs b/New_College.Services/Test_CycleTimeInfoServices.cs new file mode 100644 index 0000000..ed2cd52 --- /dev/null +++ b/New_College.Services/Test_CycleTimeInfoServices.cs @@ -0,0 +1,59 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.IRepository; +using System.Threading.Tasks; +using System.Collections.Generic; + +namespace New_College.Services +{ + public class Test_CycleTimeInfoServices : BaseServices, ITest_CycleTimeInfoServices + { + private readonly IBaseRepository _dal; + private readonly IV_VipCardTypeRepository v_VipCardTypeRepository; + private readonly ITest_CategoryInfoRepository test_CategoryInfoRepository; + public Test_CycleTimeInfoServices(IBaseRepository dal + , IV_VipCardTypeRepository IV_VipCardTypeRepository + , ITest_CategoryInfoRepository ITest_CategoryInfoRepository) + { + this._dal = dal; + v_VipCardTypeRepository = IV_VipCardTypeRepository; + test_CategoryInfoRepository = ITest_CategoryInfoRepository; + base.BaseDal = dal; + } + + /// + /// 生成周期 + /// + /// + public async Task AutoCycleTime() + { + var cardtype = await v_VipCardTypeRepository.Query(x => x.IsDelete == false); + var category = await test_CategoryInfoRepository.Query(x => x.IsDelete == false && x.CreateId == 999); + List list = new List() { }; + foreach (var item in cardtype) + { + var num = item.OrderSort; + foreach (var items in category) + { + for (int i = 1; i <= num; i++) + { + var cyclename = "第" + i + "次"; + list.Add(new Test_CycleTimeInfo() + { + CategoryId = items.Id, + CycleName = cyclename, + IsOpen = 1, + VipCardTypeId = item.Id, + OrderSort = i + }); + } + } + } + var result = await _dal.Add(list); + return result > 0 ? true : false; + } + } +} \ No newline at end of file diff --git a/New_College.Services/Test_HollandResultInfoServices.cs b/New_College.Services/Test_HollandResultInfoServices.cs new file mode 100644 index 0000000..94c81b8 --- /dev/null +++ b/New_College.Services/Test_HollandResultInfoServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class Test_HollandResultInfoServices : BaseServices, ITest_HollandResultInfoServices + { + private readonly IBaseRepository _dal; + public Test_HollandResultInfoServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/Test_MBTIMapResultServices.cs b/New_College.Services/Test_MBTIMapResultServices.cs new file mode 100644 index 0000000..02b09e1 --- /dev/null +++ b/New_College.Services/Test_MBTIMapResultServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class Test_MBTIMapResultServices : BaseServices, ITest_MBTIMapResultServices + { + private readonly IBaseRepository _dal; + public Test_MBTIMapResultServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/Test_PsychMeasurementInfoServices.cs b/New_College.Services/Test_PsychMeasurementInfoServices.cs new file mode 100644 index 0000000..d663274 --- /dev/null +++ b/New_College.Services/Test_PsychMeasurementInfoServices.cs @@ -0,0 +1,1250 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using System.Collections.Generic; +using New_College.Model.ViewModels; +using System.Linq; +using Newtonsoft.Json; +using System.Threading.Tasks; +using New_College.Common.Helper; +using New_College.IRepository; +using System.Reflection; +using System; +using System.Text; +using New_College.Model; + +namespace New_College.Services +{ + public class Test_PsychMeasurementInfoServices : BaseServices, ITest_PsychMeasurementInfoServices + { + private readonly IBaseRepository _dal; + private readonly ITest_QuestionTypeInfoRepository _QuestionTypeInfoRepository; + private readonly ITest_MBTIMapResultRepository test_MBTIMapResultRepository; + private readonly ITest_CycleTimeInfoRepository test_CycleTimeInfoRepository; + private readonly IV_SubjectSelectRepository v_SubjectSelectRepository; + private readonly IT_PlanMapTagRepository t_PlanMapTagRepository; + private readonly IT_EnrollmentPlaneRepository t_EnrollmentPlaneRepository; + private readonly IT_EnrollmentPlanedescRepository t_EnrollmentPlanedescRepository; + + public Test_PsychMeasurementInfoServices(IBaseRepository dal + , ITest_QuestionTypeInfoRepository ITest_QuestionTypeInfoRepository + , ITest_MBTIMapResultRepository ITest_MBTIMapResultRepository + , ITest_CycleTimeInfoRepository ITest_CycleTimeInfoRepository + , IV_SubjectSelectRepository IV_SubjectSelectRepository + , IT_PlanMapTagRepository IT_PlanMapTagRepository + , IT_EnrollmentPlaneRepository IT_EnrollmentPlaneRepository + , IT_EnrollmentPlanedescRepository IT_EnrollmentPlanedescRepository) + { + this._dal = dal; + _QuestionTypeInfoRepository = ITest_QuestionTypeInfoRepository; + test_MBTIMapResultRepository = ITest_MBTIMapResultRepository; + test_CycleTimeInfoRepository = ITest_CycleTimeInfoRepository; + v_SubjectSelectRepository = IV_SubjectSelectRepository; + t_PlanMapTagRepository = IT_PlanMapTagRepository; + t_EnrollmentPlaneRepository = IT_EnrollmentPlaneRepository; + t_EnrollmentPlanedescRepository = IT_EnrollmentPlanedescRepository; + base.BaseDal = dal; + } + public List permut = new List(); + /// + /// 获取个人某个维度测评结果 + /// + /// + /// + public async Task> GetPsychListByCateAndCustomerId(PsychMeasurementQuery query) + { + var info = await _dal.Query(x => x.IsDelete == false && x.CategoryId == query.CategoryId && x.StudentId == query.StudentId); + if (info.Count <= 0) + return new List() { }; + var cycids = info.Select(x => x.CycleTimeId).ToList(); + var cycinfo = await test_CycleTimeInfoRepository.Query(x => x.IsDelete == false && cycids.Contains(x.Id)); + List list = new List() { }; + foreach (var item in info) + { + var cycname = cycinfo.Where(x => x.Id == item.CycleTimeId).Select(x => x.CycleName)?.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(cycname)) + list.Add(new PsychMeasurementListResult() + { + Id = item.Id, + CreateTime = item.CreateTime, + CycleTimeId = item.CycleTimeId, + CycleName = cycname, + IsOpen = item.IsOpen + }); + } + return list; + } + + /// + /// 提交 + /// + /// + public async Task SavePsych(SavePsychQuery query) + { + var IsOpen = 1; + var result = ""; + //if (query.Type == 2) + //{ + // result = JsonConvert.SerializeObject(query.CareerResult); + //} + //else + if (query.Type == 1) + { + if (query.CategoryId == 11) + { + var item = DirectionChangeXXFG(query); + result = JsonConvert.SerializeObject(item); + } + else + { + var ListType = (await _QuestionTypeInfoRepository.Query(x => x.IsDelete == false)).Select(x => x.Name).ToList(); + var item = DirectionChange(query, ListType); + result = JsonConvert.SerializeObject(item); + } + } + else if (query.Type == 3) + { + IsOpen = 0; + if (query.CategoryId == 15) + { + var item = DirectionChangeMENTAL(query); + result = JsonConvert.SerializeObject(item); + } + else + { + var item = PshchDirectionChange(query); + result = JsonConvert.SerializeObject(item); + } + } + else if (query.CategoryId == 20) + { + result = JsonConvert.SerializeObject(query.Result); + } + var info = await _dal.Add(new Test_PsychMeasurementInfo() + { + StudentId = query.StudentId, + CategoryId = query.CategoryId, + CycleTimeId = query.CycleTimeId, + //ClassName = query.ClassName, + //GradeName = query.GradeName, + IsOpen = IsOpen, + Result = result + }); + if (info > 0) + { + ////生涯能力数据处理 + //if (query.Type == 2) + //{ + // #region 能力评估 + // UpdateEval(query.CareerResult, query.CategoryId, query.StudentId); + // #endregion + + // #region 变化反馈 + // UpdateGrow(query.CareerResult, query.CycleTimeId, query.CategoryId, query.StudentId); + // #endregion + //} + return true; + } + else + { + return false; + } + } + + #region 提交 数据处理 + /// + /// 普通 学生发展用 + /// + /// + /// + public List DirectionChange(SavePsychQuery query, List ListType) + { + var Result = new List(); + var QuestionType = query.second.Select(p => p.Tag).Distinct().ToList(); + foreach (var item in QuestionType) + { + if (item != "null" && ListType.Contains(item)) + { + var seconddto = new IntellectJson(); + seconddto.value = query.second.Where(m => m.Tag == item).Sum(p => p.Status); + seconddto.name = item; + Result.Add(seconddto); + } + } + return Result; + } + /// + /// 普通 心理测量用 + /// + /// + /// + public List PshchDirectionChange(SavePsychQuery query) + { + var Result = new List(); + var QuestionType = query.second.Select(p => p.Tag).Distinct().ToList(); + foreach (var item in QuestionType) + { + if (item != "null") + { + var seconddto = new IntellectJson(); + seconddto.value = query.second.Where(m => m.Tag == item).Sum(p => p.Status); + seconddto.name = item; + Result.Add(seconddto); + } + } + return Result; + } + /// + /// 学习风格专用 + /// + /// + /// + /// + private List DirectionChangeXXFG(SavePsychQuery requestDTO) + { + List list = new List() { }; + var json = new IntellectJson(); + var A = 0; + var P = 0; + var R = 0; + var T = 0; + int[] styleA = { 2, 5, 8, 15, 19, 23, 26, 35, 36, 40 }; + int[] styleP = { 4, 7, 9, 14, 20, 24, 27, 31, 34, 37 }; + int[] styleR = { 11, 12, 16, 18, 21, 25, 29, 30, 32, 33 }; + int[] styleT = { 1, 3, 6, 10, 13, 17, 22, 28, 38, 39 }; + foreach (var item in requestDTO.second) + { + if (styleA.Contains(item.Id)) + { + A += item.Status; + } + else if (styleP.Contains(item.Id)) + { + P += item.Status; + } + else if (styleR.Contains(item.Id)) + { + R += item.Status; + } + else if (styleT.Contains(item.Id)) + { + T += item.Status; + } + + } + list.AddRange(new List{new IntellectJson + { + name = "冲动型", + value = A + }, new IntellectJson + { + name = "务实型", + value = P + }, new IntellectJson + { + name = "反思型", + value = R + }, new IntellectJson + { + name = "理论型", + value = T + } }); + + return list;//JsonConvert.SerializeObject(list); + // return "[{\"name\":\"冲动型\",\"value\":" + A + "},{\"name\":\"务实型\",\"value\":" + P + "},{\"name\":\"反思型\",\"value\":" + R + "},{\"name\":\"理论型\",\"value\":" + T + "}]"; + } + /// + /// mht专用 + /// + /// + /// + /// + /// + private List DirectionChangeMENTAL(SavePsychQuery requestDTO) + { + List list = new List() { }; + var xxjl = 0; + var drjl = 0; + var gdqx = 0; + var zzqx = 0; + var gmqx = 0; + var stzz = 0; + var kbqx = 0; + var cdqx = 0; + + int[] xuexijiaolv = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };//学习焦虑 + int[] duirenjiaolv = { 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 };//对人焦虑 + int[] guduqingxiang = { 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 };//孤独倾向 + int[] zizeqingxiang = { 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 };//自责倾向 + int[] guomingqingxiang = { 46, 47, 48, 49, 50, 51, 52, 53, 54, 55 };//过敏倾向 + int[] shentizhengzhuang = { 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70 };//身体症状 + int[] kongbuqingxiang = { 71, 72, 73, 74, 75, 76, 77, 78, 79, 80 };//恐怖倾向 + int[] chongdongqingxiang = { 81, 83, 85, 87, 89, 91, 93, 95, 97, 99 };//冲动倾向 + int[] valids = { 82, 84, 86, 88, 90, 92, 94, 96, 98, 100 }; //测谎题 + + foreach (var item in requestDTO.second) + { + if (xuexijiaolv.Contains(item.Id)) + { + xxjl += item.Status; + } + else if (duirenjiaolv.Contains(item.Id)) + { + drjl += item.Status; + } + else if (guduqingxiang.Contains(item.Id)) + { + gdqx += item.Status; + } + else if (zizeqingxiang.Contains(item.Id)) + { + zzqx += item.Status; + } + else if (guomingqingxiang.Contains(item.Id)) + { + gmqx += item.Status; + } + else if (shentizhengzhuang.Contains(item.Id)) + { + stzz += item.Status; + } + + else if (kongbuqingxiang.Contains(item.Id)) + { + kbqx += item.Status; + } + else if (chongdongqingxiang.Contains(item.Id)) + { + cdqx += item.Status; + } + + } + list.AddRange(new List { + new IntellectJson{ name="学习焦虑" , value=xxjl}, + new IntellectJson{ name="对人焦虑" , value=drjl}, + new IntellectJson{ name="孤独倾向" , value=gdqx }, + new IntellectJson{ name="自责倾向" , value=zzqx}, + new IntellectJson{ name="过敏倾向" , value=gmqx}, + new IntellectJson{ name="身体症状" , value=stzz}, + new IntellectJson{ name="恐怖倾向" , value=kbqx}, + new IntellectJson{ name="冲动倾向" , value=cdqx}, + }); + + return list;//"[{\"name\":\"学习焦虑\",\"value\":" + xxjl + "},{\"name\":\"对人焦虑\",\"value\":" + drjl + "},{\"name\":\"孤独倾向\",\"value\":" + gdqx + "},{\"name\":\"自责倾向\",\"value\":" + zzqx + "},{\"name\":\"过敏倾向\",\"value\":" + gmqx + "},{\"name\":\"身体症状\",\"value\":" + stzz + "},{\"name\":\"恐怖倾向\",\"value\":" + kbqx + "},{\"name\":\"冲动倾向\",\"value\":" + cdqx + "}]"; + } + + /// + /// 根据最大值获取职业标签名称 + /// + /// + /// + /// + public string GetFieldName(HollandModel model, int maxnumb, string first, string second) + { + string FieldName = string.Empty; + Type t = typeof(HollandModel); + foreach (PropertyInfo finfo in t.GetProperties()) + { + if (finfo.Name != "Target" && Convert.ToInt32(finfo.GetValue(model)) == maxnumb) + { + if (finfo.Name != first && finfo.Name != second) + { + FieldName = finfo.Name; + break; + } + } + } + return FieldName; + } + /// + /// 获取标签数量 + /// + /// + /// + public Tuple, List> GetCategoriesByHoolandModel(HollandModel model) + { + + var FieldNames = new List(); + var series = new List(); + var serieint = new List(); + + Type t = typeof(HollandModel); + foreach (PropertyInfo finfo in t.GetProperties()) + { + FieldNames.Add(finfo.Name); + serieint.Add(Convert.ToInt32(finfo.GetValue(model))); + } + series.Add(new serie() { data = serieint, name = "霍兰德" }); + return new Tuple, List>(FieldNames, series); + } + #endregion + + + #region 提交/获取 霍兰德和MBTI + /// + /// 提交 霍兰德和MBTI + /// + /// + /// + public async Task SaveHolland(SaveHollandQuery query) + { + StringBuilder tagname = new StringBuilder(); + if (query.CategoryId == 18) + { + var model = JsonConvert.DeserializeObject(query.Tags); + int[] Num = new int[] { model.A, model.C, model.E, model.I, model.R, model.S }; + List Numbers = Num.ToList(); + int first = Numbers.Max(); + Numbers.Remove(first); + int second = Numbers.Max(); + Numbers.Remove(second); + int third = Numbers.Max(); + string firstname = GetFieldName(model, first, "", ""); + string secondname = GetFieldName(model, second, firstname, ""); + string thirdname = GetFieldName(model, third, firstname, secondname); + var result = new TagtestingHollandResult(); + var radars = new Radar(); + var temp = GetCategoriesByHoolandModel(model); + radars.categories = temp.Item1; + radars.series = temp.Item2; + result.TagName = firstname + secondname + thirdname; + result.radar = radars; + tagname.Append(JsonConvert.SerializeObject(result)); + + var info = await _dal.Add(new Test_PsychMeasurementInfo() + { + StudentId = query.StudentId, + CategoryId = query.CategoryId, + CycleTimeId = query.CycleTimeId, + //ClassName = query.ClassName, + //GradeName = query.GradeName, + IsOpen = 1, + Result = tagname.ToString() + }); + return info > 0 ? true : false; + } + else if (query.CategoryId == 19) + { + var model = JsonConvert.DeserializeObject(query.Tags); + tagname.Append(model.E > model.I ? "E" : "I"); + tagname.Append(model.S > model.N ? "S" : "N"); + tagname.Append(model.T > model.F ? "T" : "F"); + tagname.Append(model.J > model.P ? "J" : "P"); + var info = await _dal.Add(new Test_PsychMeasurementInfo() + { + StudentId = query.StudentId, + CategoryId = query.CategoryId, + CycleTimeId = query.CycleTimeId, + //ClassName = query.ClassName, + //GradeName = query.GradeName, + IsOpen = 1, + Result = tagname.ToString() + }); + return info > 0 ? true : false; + } + return false; + } + + /// + /// 获取霍兰德测评结果 + /// + /// + /// + public async Task GetHollandResult(ResultLookQuery query) + { + Test_PsychMeasurementInfo info = new Test_PsychMeasurementInfo() { }; + if (query.CycleTimeId > 0) + { + info = (await _dal.Query(x => x.CategoryId == query.CategoryId && x.StudentId == query.StudentId && x.CycleTimeId == query.CycleTimeId)).FirstOrDefault(); + } + else + { + info = (await _dal.Query(x => x.CategoryId == query.CategoryId && x.StudentId == query.StudentId)).OrderByDescending(x => x.CreateTime).FirstOrDefault(); + } + if (info == null || string.IsNullOrEmpty(info.Result)) + return new TagtestingHollandResult() { }; + return JsonConvert.DeserializeObject(info.Result); + } + + /// + /// 获取MBTI测评结果 + /// + /// + /// + public async Task GetMBTIResult(ResultLookQuery query) + { + var info = await _dal.Query(x => x.CategoryId == query.CategoryId && x.StudentId == query.StudentId && x.CycleTimeId == query.CycleTimeId); + if (info.Count() <= 0 || string.IsNullOrEmpty(info?.FirstOrDefault()?.Result)) + return new UserResult() { }; + var mbtiresult = (await test_MBTIMapResultRepository.Query(x => x.Tag == info.FirstOrDefault().Result))?.FirstOrDefault(); + if (mbtiresult == null) + return new UserResult() { }; + return new UserResult() + { + Advantage = mbtiresult.Advantage, + BlindSpot = mbtiresult.BlindSpot, + Disadvantage = mbtiresult.Disadvantage, + Domain = mbtiresult.Domain, + Feature = mbtiresult.Feature, + Interpretation = mbtiresult.Interpretation, + Recommend = mbtiresult.Recommend, + Tag = mbtiresult.Tag + }; + } + #endregion + + /// + /// 获取学生发展 + /// + /// + /// + public async Task GetPsychDetail(ResultLookQuery query) + { + ShowPsychologicalResult result = new ShowPsychologicalResult() { }; + List BillDatas = new List() { }; + List Billcators = new List() { }; + List Result = new List() { }; + List List = new List() { }; + Test_PsychMeasurementInfo info = new Test_PsychMeasurementInfo() { }; + if (query.CycleTimeId > 0) + { + info = (await _dal.Query(x => x.IsDelete == false && x.StudentId == query.StudentId && x.CategoryId == query.CategoryId && x.CycleTimeId == query.CycleTimeId)).FirstOrDefault(); + } + else + { + info = (await _dal.Query(x => x.IsDelete == false && x.StudentId == query.StudentId && x.CategoryId == query.CategoryId)).OrderByDescending(x => x.CreateTime).FirstOrDefault(); + } + + var Json = JsonConvert.DeserializeObject>(info.Result).Where(w => w.name != null).ToList(); + if (query.CategoryId == 7) + { + var Psyintellectags = ShowPsychological.Psyintellectags; + var Psysuggesttypes = ShowPsychological.Psysuggesttypes; + Json.ForEach(m => + { + BillDatas.Add(m.value); + Billcators.Add(new EvBillcator() { max = 65, text = m.name }); + List.Add(new NameValue() { Name = m.name, Value = m.value }); + var info = Psyintellectags.Where(x => x.name == m.name)?.FirstOrDefault(); + if (info != null) + { + var Suggess = ""; + if (m.value <= 35) + { + Suggess = Psysuggesttypes.Where(x => x.name == m.name).Select(x => x.suggest)?.FirstOrDefault(); + } + Result.Add(new PsyTagDetail() + { + MaxScore = 65, + Score = m.value, + Name = m.name, + Title = info.title, + Content = info.content, + Suggess = Suggess + }); + } + }); + return new ShowPsychologicalResult() + { + Name = "多元智能", + BillDatas = BillDatas, + Billcators = Billcators, + List = List, + Result = Result + }; + } + else if (query.CategoryId == 8) + { + var showsuggesttaggests = ShowMultiDimension.showsuggesttaggests; + Json.ForEach(m => + { + BillDatas.Add(m.value); + Billcators.Add(new EvBillcator() { max = 12, text = m.name }); + List.Add(new NameValue() { Name = m.name, Value = m.value }); + var info = showsuggesttaggests.Where(x => x.name == m.name)?.FirstOrDefault(); + if (info != null) + { + var Suggess = ""; + var Taggess = ""; + if (info.score == 17) + { + if (m.value > info.score) + { + Suggess = info.suggest; + Taggess = info.truetaggest; + } + Taggess = info.falsetaggest; + } + else + { + if (m.value < info.score) + { + Suggess = info.suggest; + Taggess = info.truetaggest; + } + Taggess = info.falsetaggest; + } + Result.Add(new PsyTagDetail() + { + MaxScore = 12, + Score = m.value, + Name = m.name, + //Title = info.title, + Content = Taggess, + Suggess = Suggess + }); + } + }); + return new ShowPsychologicalResult() + { + Name = "学习多维分析", + BillDatas = BillDatas, + Billcators = Billcators, + List = List, + Result = Result + }; + } + else if (query.CategoryId == 9) + { + Json.ForEach(m => + { + Result.Add(new PsyTagDetail() + { + MaxScore = 37, + Score = m.value, + Content = "得分12分以下考试焦虑属较低水平,13分至20分属中等程度,21以上属较高水平。21分以上者的考试焦虑程度较高,建议掌握一些考试减压技巧和应试技巧", + Name = m.name + }); + }); + return new ShowPsychologicalResult() + { + Name = "考试焦虑测试", + Result = Result + }; + } + else if (query.CategoryId == 10) + { + Json.ForEach(m => + { + Result.Add(new PsyTagDetail() + { + MaxScore = 200, + Score = m.value, + Name = m.name, + Title = "任何一个学习者,都有必要培养和提高自己的学习技能。要想提高自己的学习技能,必须全面掌握各个学习环节的具体方法。对于在校学生来说,也就是要掌握预习、听课、复习、作业和应考方法。分数越高,学习技能越强。", + Content = m.value >= 137 ? "学习技能较好(或优秀),建议再接再厉,全面发展!" : "学习技能水平较差(或一般),注意改进学习方法", + Suggess = m.value >= 137 ? "" : "

(一)预习:用快速略读法事先预习极多次,但不要求完全懂。
(二)上课(a)用专心放轻松的方法听讲,保持灵敏的心去听,不主动要求自己全部听懂。(b)除非特殊状况,一定要作笔记,笔记愈整洁明晰愈好(不要为了省钱将笔记记得密密麻麻的),以利日后快、慢速的复习。(c)在老师停顿或转身抄黑板的时候,迅速回想(最好口中默念出来)老师刚刚讲的重点,此种回想又可以叫潜意识迅速转极多次以消化之。
(三)家中复习:复习功课的第一步骤,也是先快速略读多次,有空的时候作一次详读之后(此时要在课本、笔记上划出重点),再多花一点时间回想上课的重点。若因为晚上补习没有足够时间,虽可以省掉详读,但略读和回想一定要作。记住不论如何忙,最多三、五天一定要将老师教过的部份,作过一次详读(没有时间的话,至少要作快速详读)。
(四)做作业:做作业之前(必要时可以找一本比较完整的参考书来做,其作业题通常比课本多很多),要确定有没有先回想重点。
(五)复习以前的功课:每隔三五天最好翻开笔记本,迅速的略读前一两个星期的功课。有空的话,将笔记本上划重点的部份出声念一遍。
(六)考前复习:和家中复习那一项差不多,但要找出时间,针对笔记上的重点发出声音教给一个假想的人或同学。同时也要找一些例题和具有代表性的习题,教一教这个假想人。
(七)考前猜题:想象自己是老师,出一些与重点有关的题目。不一定要真的去作出来(因为是自己出的题目,若题目合理则本来就会做),但可以将这一些题目和课本互相印证,找出某几课中的真正重点和如何应用这些重点。
(八)考前保持感觉最佳状态有二种方式:(a)考前做一些有代表性的例题和习题,从这一些题目中回想重点,回想时若发现忘了重点,翻开笔记看一看那一部份重点就可。(b)将笔记上的重点(或整理出的重点)重复多次地看,虽然不耐烦了还要再看,过度50%。


" + }); + }); + return new ShowPsychologicalResult() + { + Name = "学习技能测试", + Result = Result + }; + } + else if (query.CategoryId == 11) + { + Json.ForEach(m => + { + BillDatas.Add(m.value); + Billcators.Add(new EvBillcator() { max = 50, text = m.name }); + List.Add(new NameValue() { Name = m.name, Value = m.value }); + }); + return new ShowPsychologicalResult() + { + Name = "学习风格测评", + BillDatas = BillDatas, + Billcators = Billcators, + List = List, + }; + } + else if (query.CategoryId == 13) + { + var anxietyInfos = ShowSelfofAnxiety.anxietyInfos; + Json.ForEach(m => + { + var score = 0; + if (m.value >= 70) + { + score = 1; + } + else if (m.value >= 60) + { + score = 2; + } + else if (m.value >= 50) + { + score = 3; + } + else + { + score = 4; + } + var nowinfo = anxietyInfos.Where(x => x.score == score)?.FirstOrDefault(); + if (nowinfo != null) + { + Result.Add(new PsyTagDetail() + { + Score = m.value, + Title = nowinfo.title, + Suggess = nowinfo.suggess + }); + } + }); + return new ShowPsychologicalResult() + { + Name = "SAS测试", + Result = Result + }; + } + else if (query.CategoryId == 14) + { + //sds + var selfofDepressionInfos = ShowSelfofDepression.selfofDepressionInfos; + Json.ForEach(m => + { + var score = 0; + if (m.value < 53) + { + score = 1; + } + else if (m.value <= 62) + { + score = 2; + } + else if (m.value <= 72) + { + score = 3; + } + else + { + score = 4; + } + var nowinfo = selfofDepressionInfos.Where(x => x.score == score)?.FirstOrDefault(); + if (nowinfo != null) + { + Result.Add(new PsyTagDetail() + { + Score = m.value, + Title = nowinfo.title, + Suggess = nowinfo.suggess, + Content = nowinfo.result + }); + } + }); + return new ShowPsychologicalResult() + { + Name = "SDS测试", + Result = Result + }; + } + else if (query.CategoryId == 15) + { + var mentalHealthInfos = ShowMentalHealth.mentalHealthInfos; + Json.ForEach(m => + { + List.Add(new NameValue() { Name = m.name, Value = m.value }); + var nowinfo = mentalHealthInfos.Where(x => x.title == m.name)?.FirstOrDefault(); + var Suggess = ""; + if (nowinfo != null) + { + if (m.value > 8) + { + Suggess = nowinfo.maxsuggest; + } + else if (m.value < 3) + { + Suggess = nowinfo.minsuggest; + } + Result.Add(new PsyTagDetail() + { + Score = m.value, + Title = nowinfo.title, + Suggess = Suggess + }); + } + }); + return new ShowPsychologicalResult() + { + Name = "MHT测试", + Result = Result, + List = List + }; + } + return new ShowPsychologicalResult() { }; + } + + /// + /// 学科探索 结果 + /// + /// + /// + public async Task> SubjectChartRadar(ResultLookQuery query) + { + SubjectEvBillDTO dTO = new SubjectEvBillDTO() { }; + var info = (await _dal.Query(x => x.IsDelete == false && x.StudentId == query.StudentId && x.CategoryId == query.CategoryId && x.CycleTimeId == query.CycleTimeId)).FirstOrDefault(); + if (info == null) + return new MessageModel() { success = false, msg = "未测试" }; + List newlist = new List() { }; + newlist.Add(new IntellectJson() { name = "物理", value = 0 }); + newlist.Add(new IntellectJson() { name = "化学", value = 0 }); + newlist.Add(new IntellectJson() { name = "生物", value = 0 }); + newlist.Add(new IntellectJson() { name = "政治", value = 0 }); + newlist.Add(new IntellectJson() { name = "历史", value = 0 }); + newlist.Add(new IntellectJson() { name = "地理", value = 0 }); + + EvBillDTO subjectinterest = new EvBillDTO() { }; + var chartsinterestvalue = new List(); + var evbillinterest = new List(); + + EvBillDTO subjectability = new EvBillDTO() { }; + var chartsabilitvalue = new List(); + var evbillabilit = new List(); + var result = JsonConvert.DeserializeObject>(info.Result); + var xq = result.Where(w => w.name == "学科兴趣").FirstOrDefault().value; + foreach (var item in xq) + { + switch (item.name) + { + case "物理": + chartsinterestvalue.Add(item.value); + newlist.Where(x => x.name == "物理").FirstOrDefault().value += item.value; + break; + case "化学": + chartsinterestvalue.Add(item.value); + newlist.Where(x => x.name == "化学").FirstOrDefault().value += item.value; + break; + case "生物": + chartsinterestvalue.Add(item.value); + newlist.Where(x => x.name == "生物").FirstOrDefault().value += item.value; + break; + case "政治": + chartsinterestvalue.Add(item.value); + newlist.Where(x => x.name == "政治").FirstOrDefault().value += item.value; + break; + case "历史": + chartsinterestvalue.Add(item.value); + newlist.Where(x => x.name == "历史").FirstOrDefault().value += item.value; + break; + case "地理": + chartsinterestvalue.Add(item.value); + newlist.Where(x => x.name == "地理").FirstOrDefault().value += item.value; + break; + } + } + subjectinterest.BillDatas = chartsinterestvalue; + + var subjectinterestnewsort = xq.OrderByDescending(x => x.value); + subjectinterest.Name = string.Join("|", subjectinterestnewsort.Take(3).Select(x => x.name).ToList()); + + evbillinterest.Add(new EvBillcator() { max = 32, text = "物理" }); + evbillinterest.Add(new EvBillcator() { max = 32, text = "化学" }); + evbillinterest.Add(new EvBillcator() { max = 32, text = "生物" }); + evbillinterest.Add(new EvBillcator() { max = 32, text = "政治" }); + evbillinterest.Add(new EvBillcator() { max = 32, text = "历史" }); + evbillinterest.Add(new EvBillcator() { max = 32, text = "地理" }); + + var nl = result.Where(w => w.name == "学科能力").FirstOrDefault().value; + foreach (var item in nl) + { + switch (item.name) + { + case "物理": + chartsabilitvalue.Add(item.value); + newlist.Where(x => x.name == "物理").FirstOrDefault().value += item.value; + break; + case "化学": + chartsabilitvalue.Add(item.value); + newlist.Where(x => x.name == "化学").FirstOrDefault().value += item.value; + break; + case "生物": + chartsabilitvalue.Add(item.value); + newlist.Where(x => x.name == "生物").FirstOrDefault().value += item.value; + break; + case "政治": + chartsabilitvalue.Add(item.value); + newlist.Where(x => x.name == "政治").FirstOrDefault().value += item.value; + break; + case "历史": + chartsabilitvalue.Add(item.value); + newlist.Where(x => x.name == "历史").FirstOrDefault().value += item.value; + break; + case "地理": + chartsabilitvalue.Add(item.value); + newlist.Where(x => x.name == "地理").FirstOrDefault().value += item.value; + break; + } + } + subjectability.BillDatas = chartsabilitvalue; + + var subjectabilitynewsort = nl.OrderByDescending(x => x.value); + subjectability.Name = string.Join("|", subjectabilitynewsort.Take(3).Select(x => x.name).ToList()); + + evbillabilit.Add(new EvBillcator() { max = 32, text = "物理" }); + evbillabilit.Add(new EvBillcator() { max = 32, text = "化学" }); + evbillabilit.Add(new EvBillcator() { max = 32, text = "生物" }); + evbillabilit.Add(new EvBillcator() { max = 32, text = "政治" }); + evbillabilit.Add(new EvBillcator() { max = 32, text = "历史" }); + evbillabilit.Add(new EvBillcator() { max = 32, text = "地理" }); + + var namelist = newlist.OrderByDescending(x => x.value).Take(3).Select(x => x.name).ToList(); + var Name = string.Join("|", namelist); + return new MessageModel() + { + success = true, + msg = "获取成功", + response = new SubjectEvBillDTO() + { + Name = Name, + subjectability = subjectability, + subjectinterest = subjectinterest + } + }; + } + + /// + /// 传入用户Id 获取霍兰德测评状态 + /// + /// + /// + public async Task> GetHollandStatus(IdQuery query) + { + var info = await _dal.Query(x => x.StudentId == query.Id && x.CategoryId == 18 && x.IsDelete == false); + if (info.Count <= 0) + return new MessageModel() { success = false, msg = "暂未测试霍兰德" }; + var result = info.OrderByDescending(x => x.CreateTime).Select(x => x.Result)?.FirstOrDefault(); + var tag = JsonConvert.DeserializeObject(result).TagName; + return new MessageModel() + { + success = true, + msg = "获取成功", + response = tag + }; + } + + /// + /// 传入用户Id 获取学科探索测评状态 + /// + /// + /// + public async Task> GetSubjectSelectStatus(IdQuery query) + { + var info = await _dal.Query(x => x.StudentId == query.Id && x.CategoryId == 20 && x.IsDelete == false); + if (info.Count <= 0) + return new MessageModel() { success = false, msg = "暂未测试学科探索" }; + return new MessageModel() { success = true, msg = "已测试学科探索" }; + } + + /// + /// 获取测评最新周期Id + /// + /// + /// + public async Task> GetReportCycleInfo(IdQuery query) + { + var info = await _dal.Query(x => x.IsDelete == false && x.StudentId == query.Id); + if (info.Count <= 0) + return new MessageModel() { success = false, msg = "未测评" }; + var nengli = info.Where(x => x.CategoryId == 7).OrderByDescending(x => x.CreateTime).FirstOrDefault(); + if (nengli == null) + return new MessageModel() { success = false, msg = "未测评完全,请先去测试多元智能" }; + var duowei = info.Where(x => x.CategoryId == 8).OrderByDescending(x => x.CreateTime).FirstOrDefault(); + if (duowei == null) + return new MessageModel() { success = false, msg = "未测评完全,请先去测试多维分析" }; + var jiaolv = info.Where(x => x.CategoryId == 9).OrderByDescending(x => x.CreateTime).FirstOrDefault(); + if (jiaolv == null) + return new MessageModel() { success = false, msg = "未测评完全,请先去测试考试焦虑" }; + var jineng = info.Where(x => x.CategoryId == 10).OrderByDescending(x => x.CreateTime).FirstOrDefault(); + if (jineng == null) + return new MessageModel() { success = false, msg = "未测评完全,请先去测评学习技能" }; + var fengge = info.Where(x => x.CategoryId == 11).OrderByDescending(x => x.CreateTime).FirstOrDefault(); + if (fengge == null) + return new MessageModel() { success = false, msg = "未测评完全,请先去测评学习风格" }; + return new MessageModel() + { + success = true, + msg = "获取成功", + response = new CycleInfoResult() + { + nengliCycleId = nengli.CycleTimeId, + duoweiCycleId = duowei.CycleTimeId, + fenggeCycleId = fengge.CycleTimeId, + jiaolvCycleId = jiaolv.CycleTimeId, + jinengCycleId = jineng.CycleTimeId + } + }; + } + + + + /// + /// 获取三种推荐选科 + /// + /// + /// + public async Task>> GetSubjectSelectResult(NewSubjectQuery query) + { + List list = new List() { }; + #region 学科探索 + var info = (await _dal.Query(x => x.IsDelete == false && x.StudentId == query.CustomerId && x.CategoryId == 20 && x.CycleTimeId == 1)).FirstOrDefault(); + if (info == null) + return new MessageModel>() { success = false, msg = "未测试" }; + List newlist = new List() { }; + newlist.Add(new IntellectJson() { name = "物", value = 0 }); + newlist.Add(new IntellectJson() { name = "化", value = 0 }); + newlist.Add(new IntellectJson() { name = "生", value = 0 }); + newlist.Add(new IntellectJson() { name = "政", value = 0 }); + newlist.Add(new IntellectJson() { name = "史", value = 0 }); + newlist.Add(new IntellectJson() { name = "地", value = 0 }); + var result = JsonConvert.DeserializeObject>(info.Result).FirstOrDefault().value; + foreach (var item in result) + { + switch (item.name) + { + case "物理": + newlist.Where(x => x.name == "物").FirstOrDefault().value += item.value; + break; + case "化学": + newlist.Where(x => x.name == "化").FirstOrDefault().value += item.value; + break; + case "生物": + newlist.Where(x => x.name == "生").FirstOrDefault().value += item.value; + break; + case "政治": + newlist.Where(x => x.name == "政").FirstOrDefault().value += item.value; + break; + case "历史": + newlist.Where(x => x.name == "史").FirstOrDefault().value += item.value; + break; + case "地理": + newlist.Where(x => x.name == "地").FirstOrDefault().value += item.value; + break; + } + } + var namelist = newlist.OrderByDescending(x => x.value).Take(3).Select(x => x.name).ToList(); + var subjectName = string.Join("+", namelist); + #endregion + #region 霍兰德 + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel>() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + var planid = planinfo.FirstOrDefault().Id; + if (string.IsNullOrWhiteSpace(query.Tag)) + return new MessageModel>() { success = false, msg = "标签传入为空,请去测试" }; + var newTags = GetTag(query.Tag); + var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); + List majorlists = new List() { }; + foreach (var item in newTags) + { + majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name).ToList()); + } + majorlists = majorlists.Distinct().ToList(); + var descinfo = await t_EnrollmentPlanedescRepository.Query(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.UniversityId > 0); + List hollandlist = new List() { }; + hollandlist.Add(new IdNameResult() { Name = "物", Id = descinfo.Count(x => x.Subjectclaim.Contains("物")) }); + hollandlist.Add(new IdNameResult() { Name = "化", Id = descinfo.Count(x => x.Subjectclaim.Contains("化")) }); + hollandlist.Add(new IdNameResult() { Name = "生", Id = descinfo.Count(x => x.Subjectclaim.Contains("生")) }); + hollandlist.Add(new IdNameResult() { Name = "政", Id = descinfo.Count(x => x.Subjectclaim.Contains("政")) }); + hollandlist.Add(new IdNameResult() { Name = "史", Id = descinfo.Count(x => x.Subjectclaim.Contains("史")) }); + hollandlist.Add(new IdNameResult() { Name = "地", Id = descinfo.Count(x => x.Subjectclaim.Contains("地")) }); + var hollandresult = hollandlist.OrderByDescending(x => x.Id).Select(x => x.Name).Take(3).ToList(); + var HollandName = string.Join("+", hollandresult); + #endregion + #region 自选 + var Optional = await v_SubjectSelectRepository.Query(x => x.IsDelete == false && x.CustomerId == query.CustomerId && x.Status == 1); + var Optionalresult = Optional.Select(x => x.SubjectSelect).FirstOrDefault().Split(",").ToList(); + var OptionalName = Optional.Select(x => x.SubjectSelect).FirstOrDefault().Replace(",", "+"); + #endregion + // namelist.Contains() hollandresult + #region first + var firstholl = 0; + var firstoptional = 0; + foreach (var item in namelist) + { + if (hollandresult.Count(x => x == item) > 0) + { + firstholl += 33; + } + } + foreach (var item in namelist) + { + if (Optionalresult.Count(x => x == item) > 0) + { + firstoptional += 33; + } + } + list.Add(new SubjectSelectResult() + { + Select = subjectName, + SubjectResult = 100, + HollResult = firstholl == 99 ? 100 : firstholl, + OptionalResult = firstoptional == 99 ? 100 : firstoptional + }); + #endregion + + #region second + var secondsubject = 0; + var secondoptional = 0; + foreach (var item in hollandresult) + { + if (namelist.Count(x => x == item) > 0) + { + secondsubject += 33; + } + } + foreach (var item in hollandresult) + { + if (Optionalresult.Count(x => x == item) > 0) + { + secondoptional += 33; + } + } + list.Add(new SubjectSelectResult() + { + Select = HollandName, + SubjectResult = secondsubject == 99 ? 100 : secondsubject, + HollResult = 100, + OptionalResult = secondoptional == 99 ? 100 : secondoptional + }); + #endregion + + #region three + var threesubject = 0; + var threeholl = 0; + foreach (var item in Optionalresult) + { + if (namelist.Count(x => x == item) > 0) + { + threesubject += 33; + } + } + foreach (var item in Optionalresult) + { + if (hollandresult.Count(x => x == item) > 0) + { + threeholl += 33; + } + } + list.Add(new SubjectSelectResult() + { + Select = OptionalName, + SubjectResult = threesubject == 99 ? 100 : threesubject, + HollResult = threeholl == 99 ? 100 : threeholl, + OptionalResult = 100 + }); + #endregion + return new MessageModel>() { success = true, msg = "获取成功", response = list }; + } + + /// + /// 根绝霍兰德获取推荐选科 + /// + /// + /// + public async Task> GetHollandSubject(HollandSubjectQuery query) + { + var planinfo = await t_EnrollmentPlaneRepository.Query(w => w.Years == query.Year && w.Area_Id == query.AreaId); + if (planinfo == null) + return new MessageModel() { success = false, msg = "所选省份年份的招生计划,正在完善中..." }; + var planid = planinfo.FirstOrDefault().Id; + if (string.IsNullOrWhiteSpace(query.Tag)) + return new MessageModel() { success = false, msg = "标签传入为空,请去测试" }; + var newTags = GetTag(query.Tag); + var planmaptag = await t_PlanMapTagRepository.Query(x => x.IsDelete == false); + List majorlists = new List() { }; + foreach (var item in newTags) + { + majorlists.AddRange(planmaptag.Where(x => x.Tag.Contains(item)).Select(x => x.Name).ToList()); + } + majorlists = majorlists.Distinct().ToList(); + var descinfo = await t_EnrollmentPlanedescRepository.Query(x => x.IsDelete == false && x.PlanId == planid && majorlists.Contains(x.MajorName) && x.UniversityId > 0); + List hollandlist = new List() { }; + hollandlist.Add(new IdNameResult() { Name = "物", Id = descinfo.Count(x => x.Subjectclaim.Contains("物")) }); + hollandlist.Add(new IdNameResult() { Name = "化", Id = descinfo.Count(x => x.Subjectclaim.Contains("化")) }); + hollandlist.Add(new IdNameResult() { Name = "生", Id = descinfo.Count(x => x.Subjectclaim.Contains("生")) }); + hollandlist.Add(new IdNameResult() { Name = "政", Id = descinfo.Count(x => x.Subjectclaim.Contains("政")) }); + hollandlist.Add(new IdNameResult() { Name = "史", Id = descinfo.Count(x => x.Subjectclaim.Contains("史")) }); + hollandlist.Add(new IdNameResult() { Name = "地", Id = descinfo.Count(x => x.Subjectclaim.Contains("地")) }); + var hollandresult = hollandlist.OrderByDescending(x => x.Id).Select(x => x.Name).Take(3).ToList(); + var HollandName = string.Join("+", hollandresult); + return new MessageModel() { success = true, msg = "获取成功", response = HollandName }; + } + + + + /// + /// 转化出标签所有可能 + /// + /// + /// + public List GetTag(string tag) + { + var Nums = new List(); + for (int i = 0; i < tag.Length; i++) + { + Nums.Add(tag[i].ToString()); + } + Permutation(Nums.ToArray(), 0, Nums.ToArray().Length); + + //permut = GetTagExtened(tag, permut); + return permut; + } + + /// + /// 递归实现全排序并输出 + /// + /// 待排序的字符数组 + /// 输出字符数组的起始位置 + /// 输出字符数组的长度 + public void Permutation(string[] nums, int m, int n) + { + int i; + string t; + if (m < n - 1) + { + Permutation(nums, m + 1, n); + for (i = m + 1; i < n; i++) + { + t = nums[m]; + nums[m] = nums[i]; + nums[i] = t; + Permutation(nums, m + 1, n); + t = nums[m]; + nums[m] = nums[i]; + nums[i] = t; + } + } + else + { + string kk = string.Empty; + for (int j = 0; j < nums.Length; j++) + { + kk += nums[j]; + } + permut.Add(kk); + } + } + + ///// + ///// 判断是否为不常见标签,若是则匹配相关联标签 + ///// + ///// + ///// + //public List GetTagExtened(string tag, List taglist) + //{ + // var list = new List(); + // var query = yd_tagExInfo.Get(a => a.YD_Enabled == 1 && a.YD_Tags.Equals(tag)).FirstOrDefault(); + // if (query != null) + // { + // list = JsonConvert.DeserializeObject>(query.YD_tagEx); + // } + // if (list.Any() && list.Count() > 0) + // { + // taglist.AddRange(list.Select(s => s.tag).ToList()); + // } + // return taglist; + //} + } +} \ No newline at end of file diff --git a/New_College.Services/Test_QuestionInfoServices.cs b/New_College.Services/Test_QuestionInfoServices.cs new file mode 100644 index 0000000..09220c6 --- /dev/null +++ b/New_College.Services/Test_QuestionInfoServices.cs @@ -0,0 +1,95 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.Model.ViewModels; +using System.Threading.Tasks; +using System.Collections.Generic; +using Newtonsoft.Json; +using New_College.IRepository; +using System.Linq; + +namespace New_College.Services +{ + public class Test_QuestionInfoServices : BaseServices, ITest_QuestionInfoServices + { + private readonly IBaseRepository _dal; + private readonly ITest_QuestionTypeInfoRepository _QuestionTypeInfoRepository; + public Test_QuestionInfoServices(IBaseRepository dal + , ITest_QuestionTypeInfoRepository ITest_QuestionTypeInfoRepository) + { + this._dal = dal; + _QuestionTypeInfoRepository = ITest_QuestionTypeInfoRepository; + base.BaseDal = dal; + } + + /// + /// 获取问题 + /// + /// + /// + public async Task> GetQuestion(appQuestionQuery query) + { + var info = await _dal.Query(x => x.IsDelete == false && x.CategoryId == query.CategoryId); + if (info == null) + return new List() { }; + List list = new List() { }; + if (query.CategoryId == 20) + { + List subject = new List() { "物理", "化学", "生物", "政治", "历史", "地理" }; + int sort = 1; + foreach (var x in subject) + { + foreach (var item in info) + { + list.Add(new appQuestionResult() + { + Id = item.Id, + IsAddScore = item.IsAddScore, + QuestionSort = sort++,// item.OrderSort, + QuestionTag = x, + QuestionTitle = "对于" + x + "," + item.QuestionTitle, + QuestionType = item.QuestionType, + QuestionTypeId = item.QuestionTypeId + }); + } + } + return list; + } + foreach (var item in info) + { + list.Add(new appQuestionResult() + { + Id = item.Id, + IsAddScore = item.IsAddScore, + QuestionSort = item.OrderSort, + QuestionTag = item.QuestionTag, + QuestionTitle = item.QuestionTitle, + QuestionType = item.QuestionType, + QuestionTypeId = item.QuestionTypeId + }); + } + return list; + } + + /// + /// 获取mbti试题 + /// + /// + public async Task> GetQuestionMBTI() + { + var info = await _dal.Query(x => x.IsDelete == false && x.CategoryId == 19); + if (info == null) + return new List() { }; + return info.Select(s => new QuestionMBTI() + { + Answers = JsonConvert.DeserializeObject>(s.QuestionTag), + QuestionSort = s.OrderSort, + QuestionTitle = s.QuestionTitle + }).ToList(); + } + + + } +} \ No newline at end of file diff --git a/New_College.Services/Test_QuestionTypeInfoServices.cs b/New_College.Services/Test_QuestionTypeInfoServices.cs new file mode 100644 index 0000000..98b5a68 --- /dev/null +++ b/New_College.Services/Test_QuestionTypeInfoServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class Test_QuestionTypeInfoServices : BaseServices, ITest_QuestionTypeInfoServices + { + private readonly IBaseRepository _dal; + public Test_QuestionTypeInfoServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/TopicDetailServices.cs b/New_College.Services/TopicDetailServices.cs new file mode 100644 index 0000000..e8578b2 --- /dev/null +++ b/New_College.Services/TopicDetailServices.cs @@ -0,0 +1,30 @@ +using New_College.Common; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.Services +{ + public class TopicDetailServices : BaseServices, ITopicDetailServices + { + IBaseRepository _dal; + public TopicDetailServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + /// + /// 获取开Bug数据(缓存) + /// + /// + [Caching(AbsoluteExpiration = 10)] + public async Task> GetTopicDetails() + { + return await base.Query(a => !a.tdIsDelete && a.tdSectendDetail == "tbug"); + } + } +} diff --git a/New_College.Services/TopicServices.cs b/New_College.Services/TopicServices.cs new file mode 100644 index 0000000..c047a69 --- /dev/null +++ b/New_College.Services/TopicServices.cs @@ -0,0 +1,32 @@ +using New_College.Common; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace New_College.Services +{ + public class TopicServices: BaseServices, ITopicServices + { + + IBaseRepository _dal; + public TopicServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + /// + /// 获取开Bug专题分类(缓存) + /// + /// + [Caching(AbsoluteExpiration = 60)] + public async Task> GetTopics() + { + return await base.Query(a => !a.tIsDelete && a.tSectendDetail == "tbug"); + } + + } +} diff --git a/New_College.Services/U_ProbabilityHistoryServices.cs b/New_College.Services/U_ProbabilityHistoryServices.cs new file mode 100644 index 0000000..5736021 --- /dev/null +++ b/New_College.Services/U_ProbabilityHistoryServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class U_ProbabilityHistoryServices : BaseServices, IU_ProbabilityHistoryServices + { + private readonly IBaseRepository _dal; + public U_ProbabilityHistoryServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/U_VolunteerTableDetailServices.cs b/New_College.Services/U_VolunteerTableDetailServices.cs new file mode 100644 index 0000000..8aba3c6 --- /dev/null +++ b/New_College.Services/U_VolunteerTableDetailServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class U_VolunteerTableDetailServices : BaseServices, IU_VolunteerTableDetailServices + { + private readonly IBaseRepository _dal; + public U_VolunteerTableDetailServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/U_VolunteerTableServices.cs b/New_College.Services/U_VolunteerTableServices.cs new file mode 100644 index 0000000..699e361 --- /dev/null +++ b/New_College.Services/U_VolunteerTableServices.cs @@ -0,0 +1,18 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; + +namespace New_College.Services +{ + public class U_VolunteerTableServices : BaseServices, IU_VolunteerTableServices + { + private readonly IBaseRepository _dal; + public U_VolunteerTableServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + } +} \ No newline at end of file diff --git a/New_College.Services/UserRoleServices.cs b/New_College.Services/UserRoleServices.cs new file mode 100644 index 0000000..72b5e56 --- /dev/null +++ b/New_College.Services/UserRoleServices.cs @@ -0,0 +1,57 @@ +using New_College.Common; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using System.Linq; +using System.Threading.Tasks; + +namespace New_College.Services +{ + /// + /// UserRoleServices + /// + public class UserRoleServices : BaseServices, IUserRoleServices + { + + IBaseRepository _dal; + public UserRoleServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + /// + /// + /// + /// + /// + /// + public async Task SaveUserRole(int uid, int rid) + { + UserRole userRole = new UserRole(uid, rid); + + UserRole model = new UserRole(); + var userList = await base.Query(a => a.UserId == userRole.UserId && a.RoleId == userRole.RoleId); + if (userList.Count > 0) + { + model = userList.FirstOrDefault(); + } + else + { + var id = await base.Add(userRole); + model = await base.QueryById(id); + } + + return model; + + } + + + + [Caching(AbsoluteExpiration = 30)] + public async Task GetRoleIdByUid(int uid) + { + return ((await base.Query(d => d.UserId == uid)).OrderByDescending(d => d.Id).LastOrDefault()?.RoleId).ObjToInt(); + } + } +} diff --git a/New_College.Services/V_CustomerInfoServices.cs b/New_College.Services/V_CustomerInfoServices.cs new file mode 100644 index 0000000..b3aa5c9 --- /dev/null +++ b/New_College.Services/V_CustomerInfoServices.cs @@ -0,0 +1,385 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.Model.ViewModels; +using System.Threading.Tasks; +using New_College.Common; +using static New_College.Common.AliyunSmsSender; +using System; +using System.Collections.Generic; +using System.Linq; +using New_College.Common.Helper; +using New_College.Model; +using LinqKit; +using New_College.Model.Request; + +namespace New_College.Services +{ + public class V_CustomerInfoServices : BaseServices, IV_CustomerInfoServices + { + private readonly IBaseRepository _dal; + public V_CustomerInfoServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + + + /// + /// 修改用户信息 + /// + /// + /// + public async Task UpdateCustomerInfo(UpdateCustomerQuery query) + { + var info = await _dal.QueryById(query.Id); + if (info == null) + return new CustomerInfoResult() { Status = 3 }; + info.NickName = query.NickName; + //info.Phone = query.Phone; + info.Gender = query.Gender; + info.AvatarUrl = query.AvatarUrl; + if (!string.IsNullOrWhiteSpace(query.UserPwd)) + { + var salt = RadomHelper.RandCode(6); + info.UserPwd = MD5Helper.MD5Encrypt16(query.UserPwd + salt); + } + var result = await _dal.Update(info); + return new CustomerInfoResult() + { + Status = 1, + AvatarUrl = info.AvatarUrl, + Gender = info.Gender, + Id = info.Id, + OpenId = info.OpenId, + NickName = info.NickName, + AreaId = info.AreaId, + AreaName = info.AreaName, + Datainit = info.Datainit, + Expectedscore = info.Expectedscore, + IsVIP = info.IsVIP, + Subject = info.Subject, + Subjectgroup = info.Subjectgroup, + VipCode = info.VipCode, + IsUpdateScore = info.IsUpdateScore, + Year = info.Year + }; + } + + + + + /// + /// 更改分数和学科 + /// + /// + /// + public async Task UpdateScore(UpdateScoreQuery query) + { + var info = await _dal.QueryById(query.StudentId); + if (info == null) + return new CustomerInfoResult() { Status = 3 }; + info.IsUpdateScore += 1; + info.Expectedscore = query.Score; + info.Subject = query.Subject; + info.Subjectgroup = query.Subjectgroup; + var result = await _dal.Update(info); + if (result) + { + return new CustomerInfoResult() + { + Status = 1, + AvatarUrl = info.AvatarUrl, + Gender = info.Gender, + Id = info.Id, + OpenId = info.OpenId, + NickName = info.NickName, + AreaId = info.AreaId, + AreaName = info.AreaName, + Datainit = info.Datainit, + Expectedscore = info.Expectedscore, + IsVIP = info.IsVIP, + Subject = info.Subject, + Subjectgroup = info.Subjectgroup, + VipCode = info.VipCode, + IsUpdateScore = info.IsUpdateScore, + Year = info.Year + }; + } + else + { + return new CustomerInfoResult() { Status = 3 }; + } + } + + /// + /// 完善用户信息 + /// + /// + /// + public async Task UpdateCustomer(CustomerUpdateQuery query) + { + var info = await _dal.QueryById(query.StudentId); + if (info == null) + return new CustomerInfoResult() { Status = 3 }; + info.Datainit = true; + info.AreaId = query.AreaId; + info.AreaName = query.AreaName; + info.Subject = query.Subject; + info.Subjectgroup = query.Subjectgroup; + info.Expectedscore = query.Expectedscore; + info.Year = query.Year; + info.SchoolName = query.SchoolName; + info.ClassName = query.ClassName; + var result = await _dal.Update(info); + if (result) + { + return new CustomerInfoResult() + { + Status = 1, + AvatarUrl = info.AvatarUrl, + Gender = info.Gender, + Id = info.Id, + OpenId = info.OpenId, + NickName = info.NickName, + AreaId = info.AreaId, + AreaName = info.AreaName, + Datainit = info.Datainit, + Expectedscore = info.Expectedscore, + IsVIP = info.IsVIP, + Subject = info.Subject, + Subjectgroup = info.Subjectgroup, + VipCode = info.VipCode, + IsUpdateScore = info.IsUpdateScore, + CustomerType = info.CustomerType, + Phone = info.Phone, + SchoolName = info.SchoolName, + ClassName = info.ClassName, + Year = info.Year + }; + } + else + { + return new CustomerInfoResult() { Status = 3 }; + } + } + + /// + /// 根绝Id获取用户信息 + /// + /// + /// + public async Task> GetCustomerInfoById(IdQuery query) + { + var info = await _dal.QueryById(query.Id); + if (info == null) + return new MessageModel() { success = false, msg = "获取失败,用户信息为空" }; + return new MessageModel() + { + success = true, + msg = "获取成功", + response = new CustomerInfoResult() + { + AvatarUrl = info.AvatarUrl, + Gender = info.Gender, + Id = info.Id, + OpenId = info.OpenId, + NickName = info.NickName, + AreaId = info.AreaId, + AreaName = info.AreaName, + Datainit = info.Datainit, + Expectedscore = info.Expectedscore, + IsVIP = info.IsVIP, + Subject = info.Subject, + Subjectgroup = info.Subjectgroup, + VipCode = info.VipCode, + IsUpdateScore = info.IsUpdateScore, + Year = info.Year + } + }; + } + + /// + /// 查询CustomerInfo表信息 + /// + /// + /// + public async Task>> GetCustomerInfoListByPage(CustomerSeachQuery query) + { + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false); + if (!string.IsNullOrWhiteSpace(query.Phone)) + wheres = wheres.And(x => x.Phone.Contains(query.Phone)); + if (query.Subject != 2) + wheres = wheres.And(x => (int)x.Subject == query.Subject); + if (!string.IsNullOrWhiteSpace(query.VipCode)) + wheres = wheres.And(x => x.VipCode.Contains(query.VipCode)); + var info = await _dal.QueryPage(wheres, query.PageIndex, query.PageSize); + if (info.data.Count <= 0) + return new MessageModel>() + { + success = false, + msg = "获取失败" + }; + //var regioninfo = await sysRegionRepository.Query(x => x.ParentCode == "100000"); + PageModel pageModel = new PageModel() { }; + List list = new List() { }; + foreach (var item in info.data) + { + list.Add(new CustomerInfoListResult() + { + Id = item.Id, + Phone = item.Phone, + Subject = item.Subject, + Subjectgroup = item.Subjectgroup, + AreaName = item.AreaName, + Expectedscore = item.Expectedscore, + VipCode = item.VipCode, + NickName = item.NickName + }); + } + pageModel.data = list; + pageModel.dataCount = info.dataCount; + pageModel.page = info.page; + pageModel.pageCount = info.pageCount; + pageModel.PageSize = info.PageSize; + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = pageModel + }; + } + + public Weixinauthinfo AuthCode2Session(string Code) + { + var result = WeixinHelper.AuthCode2Session(WeixinConfig.Appid, WeixinConfig.Secret, Code); + return result; + + } + + public string GetWeixinPhone(GetPhoneInfo phoneInfo) + { + string phone = string.Empty; + try + { + phone = WeixinHelper.getPhoneNumber(phoneInfo.encryptedData, phoneInfo.iv, phoneInfo.session_key); + } + catch (Exception ex) + { + } + return phone; + } + + public async Task> Logined(LoginQuery query) + { + + var userinfo = (await _dal.Query(w => w.OpenId == query.openId)).ToList().FirstOrDefault(); + if (userinfo != null) + { + return new Tuple(true, new CustomerInfoResult() + { + AreaId = userinfo.AreaId, + AreaName = userinfo.AreaName, + AvatarUrl = userinfo.AvatarUrl, + CustomerType = userinfo.CustomerType, + NickName = userinfo.NickName, + OpenId = userinfo.OpenId, + Phone = userinfo.Phone, + Gender = userinfo.Gender, + Datainit = userinfo.Datainit, + Expectedscore = userinfo.Expectedscore, + IsVIP = userinfo.IsVIP, + Subject = userinfo.Subject, + Subjectgroup = userinfo.Subjectgroup, + ClassName = userinfo.ClassName, + SchoolName = userinfo.SchoolName, + Year = userinfo.Year + }); + } + else + { + return new Tuple(false, null); + } + } + + public async Task> GetUserInfo(LoginQuery query) + { + var userinfo = (await _dal.Query(w => w.OpenId == query.openId)).ToList().First(); + if (userinfo != null) + { + return new Tuple(true, new CustomerInfoResult() + { + + AreaId = userinfo.AreaId, + AreaName = userinfo.AreaName, + AvatarUrl = userinfo.AvatarUrl, + CustomerType = userinfo.CustomerType, + NickName = userinfo.NickName, + OpenId = userinfo.OpenId, + Phone = userinfo.Phone, + Gender = userinfo.Gender, + Datainit = userinfo.Datainit, + Expectedscore = userinfo.Expectedscore, + IsVIP = userinfo.IsVIP, + Subject = userinfo.Subject, + Subjectgroup = userinfo.Subjectgroup, + Year = userinfo.Year + }); + } + else + { + return new Tuple(false, null); + } + } + + public async Task GetCustomerId(string OpenId) + { + var customerinfo = await _dal.Query(x => x.IsDelete == false && x.OpenId == OpenId); + if (customerinfo.Count == 0) + return -1; + return customerinfo.FirstOrDefault().Id; + } + + public async Task GetOpenId(int CustomerId) + { + var customerinfo = await _dal.QueryById(CustomerId); + if (customerinfo == null) + return ""; + return customerinfo.OpenId; + } + + public async Task CustomerSave(DecryptUserInfoRequest register) + { + var i = await _dal.Add(new V_CustomerInfo() + { + OpenId = register.openid, + CustomerType = CustomerTypeEnum.General + }); + return i; + } + + public Task Login(CustomerInfoQuery query) + { + throw new NotImplementedException(); + } + + public Task SendLogin(PhoneQuery query) + { + throw new NotImplementedException(); + } + + public Task ResetPwd(ResetPwdQuery query) + { + throw new NotImplementedException(); + } + + public Task SendReset(PhoneQuery query) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/New_College.Services/V_ExaminationPolicyServices.cs b/New_College.Services/V_ExaminationPolicyServices.cs new file mode 100644 index 0000000..fcf83b6 --- /dev/null +++ b/New_College.Services/V_ExaminationPolicyServices.cs @@ -0,0 +1,202 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using Microsoft.AspNetCore.Mvc.RazorPages; +using New_College.Model.ViewModels; +using New_College.Model; +using System.Threading.Tasks; +using New_College.IRepository; +using LinqKit; +using System.Collections.Generic; +using System.Linq; + +namespace New_College.Services +{ + public class V_ExaminationPolicyServices : BaseServices, IV_ExaminationPolicyServices + { + private readonly IBaseRepository _dal; + private readonly ISysRegionRepository sysRegionRepository; + public V_ExaminationPolicyServices(IBaseRepository dal + , ISysRegionRepository ISysRegionRepository) + { + this._dal = dal; + sysRegionRepository = ISysRegionRepository; + base.BaseDal = dal; + } + + /// + /// 获取分页 + /// + /// + /// + public async Task>> GetExaminationPolicyByPage(ExaminationPolicySearchQuery query) + { + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false); + if (query.AreaId > 0) + wheres = wheres.And(x => x.AreaId == query.AreaId); + var info = await _dal.QueryPage(wheres, query.PageIndex, query.PageSize); + if (info.data.Count <= 0) + return new MessageModel>() + { + success = false, + msg = "获取失败" + }; + var regioninfo = await sysRegionRepository.Query(x => x.ParentCode == "100000"); + PageModel pageModel = new PageModel() { }; + List list = new List() { }; + foreach (var item in info.data) + { + list.Add(new ExaminationPolicyResult() + { + Id = item.Id, + Title = item.Title, + AreaName = regioninfo.Where(x => x.KeyId == item.AreaId).Select(x => x.RegionName)?.FirstOrDefault(), + ModifyTime = item.ModifyTime + }); + } + pageModel.data = list; + pageModel.dataCount = info.dataCount; + pageModel.page = info.page; + pageModel.pageCount = info.pageCount; + pageModel.PageSize = info.PageSize; + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = pageModel + }; + } + + /// + /// 获取单个 + /// + /// + /// + public async Task> GetExaminationPolicyOne(IdQuery query) + { + var info = await _dal.QueryById(query.Id); + if (info == null) + return new MessageModel() { success = false, msg = "获取失败" }; + + return new MessageModel() + { + success = true, + msg = "获取成功", + response = new ExaminationPolicyOneResult() + { + Id = info.Id, + Content = info.Content, + Img = info.Img, + AreaId = info.AreaId, + Title = info.Title + } + }; + + } + + /// + /// 添加 + /// + /// + /// + public async Task> AddExaminationPolicy(ExaminationPolicyQuery query) + { + var result = await _dal.Add(new V_ExaminationPolicy() + { + AreaId = query.AreaId, + Content = query.Content, + Img = query.Img, + Title = query.Title, + AreaName = query.AreaName + }); + if (result > 0) + { + return new MessageModel() { success = true, msg = "添加成功", response = true }; + } + else + { + return new MessageModel() { success = false, msg = "添加失败", response = false }; + } + } + + /// + /// 修改 + /// + /// + /// + public async Task> UpdateExaminationPolicy(ExaminationPolicyQuery query) + { + var info = await _dal.QueryById(query.Id); + if (info == null) + return new MessageModel() { success = false, msg = "修改内容不存在", response = false }; + info.AreaId = query.AreaId; + info.Content = query.Content; + info.Img = query.Img; + info.Title = query.Title; + info.AreaName = query.AreaName; + var result = await _dal.Update(info); + if (result) + { + return new MessageModel() { success = true, msg = "修改成功", response = true }; + } + else + { + return new MessageModel() { success = false, msg = "修改失败", response = false }; + } + } + + /// + /// 删除 + /// + /// + /// + public async Task> DeleteExaminationPolicy(IdQuery query) + { + if (query.Ids == null || query.Ids.Count <= 0) + return new MessageModel() { success = false, msg = "传入为空", response = false }; + var info = await _dal.Query(x => x.IsDelete == false && query.Ids.Contains(x.Id)); + if (info.Count <= 0) + return new MessageModel() { success = false, msg = "没有可被删除项", response = false }; + foreach (var item in info) + { + item.IsDelete = true; + } + var result = await _dal.Update(info); + if (result) + { + return new MessageModel() { success = true, msg = "删除成功", response = true }; + } + else + { + return new MessageModel() { success = false, msg = "删除失败", response = false }; + } + } + + /// + /// 获取考试时间 + /// + /// + /// + public async Task> GetExaminationPolicyDetail(ExaminationPolicyAreaQuery query) + { + var info = (await _dal.Query(x => x.IsDelete == false && x.AreaId == query.AreaId)).FirstOrDefault(); + if (info == null) + return new MessageModel() { success = false, msg = "获取失败" }; + return new MessageModel() + { + success = true, + msg = "获取成功", + response = new ExaminationPolicyOneDetail() + { + Id = info.Id, + Content = info.Content, + Img = info.Img, + Title = info.Title + } + }; + } + } +} \ No newline at end of file diff --git a/New_College.Services/V_OrderInfoServices.cs b/New_College.Services/V_OrderInfoServices.cs new file mode 100644 index 0000000..2bec14c --- /dev/null +++ b/New_College.Services/V_OrderInfoServices.cs @@ -0,0 +1,658 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.IRepository.UnitOfWork; +using New_College.Model.ViewModels; +using System.Threading.Tasks; +using New_College.Common; +using New_College.IRepository; +using System.Linq; +using YIJIYI.Core.Common.Helper; +using System; +using New_College.Model; +using New_College.Common.Helper; +using Microsoft.Extensions.Options; +using Essensoft.AspNetCore.Payment.WeChatPay; +using Essensoft.AspNetCore.Payment.Alipay; +using Essensoft.AspNetCore.Payment.WeChatPay.Notify; +using Microsoft.Extensions.Logging; +using Essensoft.AspNetCore.Payment.Alipay.Domain; +using Essensoft.AspNetCore.Payment.Alipay.Request; +using System.Collections.Generic; +using LinqKit; +using System.Collections.Specialized; +using Org.BouncyCastle.Asn1.Ocsp; +using Essensoft.AspNetCore.Payment.WeChatPay.Response; +using Essensoft.AspNetCore.Payment.WeChatPay.Request; +using Microsoft.AspNetCore.Http; + +namespace New_College.Services +{ + public class V_OrderInfoServices : BaseServices, IV_OrderInfoServices + { + private readonly IWeChatPayClient _client; + private readonly IOptions _optionsAccessor; + private readonly IAlipayClient alipayClient; + private readonly IOptions alipayoptions; + + private readonly IBaseRepository _dal; + private readonly IUnitOfWork _unitOfWork; + private readonly IV_CustomerInfoRepository v_CustomerInfoRepository; + private readonly IV_VipCardInfoRepository v_VipCardInfoRepository; + private readonly IV_VipCardTypeRepository v_VipCardTypeRepository; + + private readonly ILogger logger; + + public int Nums = 10; + public V_OrderInfoServices(IWeChatPayClient client, IOptions optionsAccessor + , IAlipayClient IAlipayClient, IOptions alipayopt + , IBaseRepository dal + , IUnitOfWork IUnitOfWork + , IV_CustomerInfoRepository IV_CustomerInfoRepository + , IV_VipCardInfoRepository IV_VipCardInfoRepository + , IV_VipCardTypeRepository IV_VipCardTypeRepository + , ILogger loggers + ) + { + _client = client; + _optionsAccessor = optionsAccessor; + alipayClient = IAlipayClient; + alipayoptions = alipayopt; + this._dal = dal; + _unitOfWork = IUnitOfWork; + v_CustomerInfoRepository = IV_CustomerInfoRepository; + v_VipCardInfoRepository = IV_VipCardInfoRepository; + v_VipCardTypeRepository = IV_VipCardTypeRepository; + logger = loggers; + base.BaseDal = dal; + } + + /// + /// 下订单 + /// + /// + /// + public async Task CreateOrder(UniOrderQuery query) + { + var response = new CreateOrderModel(); + string OrderNo = OrderGenerateHelper.GenerateOrderNo("ZY"); + try + { + _unitOfWork.BeginTran(); + var customer = await v_CustomerInfoRepository.QueryById(query.StudentId); + var createtime = TimeUtil.GetCstDateTime(); + var baseResult = await _dal.Add(new V_OrderInfo + { + //out_trade_no = payNum, + //PayType = 2, + OrderId = OrderNo, + CardTypeId = query.CardTypeId, + Status = EnumOrderType.payment, + CustomerId = customer.Id, + Price = query.total_fee, + PayPrice = query.total_fee, + Name = "志愿好帮手VIP购买", + //CardNo = code, + //CardId = addcard + CreateTime = createtime + }); + if (baseResult > 0) + { + _unitOfWork.CommitTran(); + response.OrderId = OrderNo; + response.Status = EnumOrderType.payment; + response.CreateTime = createtime.ToString("yyyy-MM-dd HH:mm:ss"); + } + } + catch (System.Exception) + { + _unitOfWork.RollbackTran(); + response.msg = "订单创建失败"; + response.success = false; + return response; + } + return response; + } + + /// + /// 订单查询 + /// + /// + /// + public async Task>> GetOrderInfoByPage(SearchOrderQuery query) + { + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false); + //根据卡号查询 + if (!string.IsNullOrWhiteSpace(query.CardNo)) + wheres = wheres.And(x => x.CardNo.Contains(query.CardNo)); + + //根据支付状态查询 + + // var status = Enum.Parse(typeof(EnumOrderType), query.Status.ToString());// (EnumOrderType)query.Status; + if (query.Status > -2) + { + var status = (EnumOrderType)query.Status; + wheres = wheres.And(x => x.Status == status); + } + + + //根据支付方式查询 + if (query.PayType > -1) + { + var payType = (EnumPayType)query.PayType; + wheres = wheres.And(x => x.PayType == payType); + } + //根据out_trade_no查询 + if (!string.IsNullOrWhiteSpace(query.out_trade_no)) + wheres = wheres.And(x => x.out_trade_no.Contains(query.out_trade_no)); + + + //根据电话查询 + if (!string.IsNullOrWhiteSpace(query.Phone)) + { + var CoustomerId = await v_CustomerInfoRepository.Query(x => x.Phone.Contains(query.Phone)); + var ids = CoustomerId.Select(x => x.Id).ToList(); + if (CoustomerId != null) + wheres = wheres.And(x => ids.Contains(x.CustomerId)); + } + + //根据卡片类别查询 + if (query.CardTypeId > 0) + wheres = wheres.And(x => x.CardTypeId == query.CardTypeId); + + var info = await _dal.QueryPage(wheres, query.PageIndex, query.PageSize); + if (info.data.Count <= 0) + return new MessageModel>() + { + success = false, + msg = "获取失败" + }; + var idsCard = info.data.Select(x => x.CardTypeId).ToList(); + var idsCoustomer = info.data.Select(x => x.CustomerId).ToList(); + var listCard = await v_VipCardTypeRepository.Query(x => idsCard.Contains(x.Id) && x.IsDelete == false); + var listCoustomer = await v_CustomerInfoRepository.Query(x => idsCoustomer.Contains(x.Id) && x.IsDelete == false); + PageModel pageModel = new PageModel() { }; + List list = new List() { }; + foreach (var item in info.data) + { + var CardOne = listCard.Where(x => x.Id == item.CardTypeId).FirstOrDefault(); + if (CardOne == null) + continue; + var CoustomerOne = listCoustomer.Where(x => x.Id == item.CustomerId).FirstOrDefault(); + if (CoustomerOne == null) + continue; + + list.Add(new OrderInfoQuery() + { + CardId = item.Id, + PayPrice = item.PayPrice, + Price = item.Price, + CardNo = item.CardNo, + CardTypeName = CardOne.Name, + OrderId = item.OrderId, + CustomerName = CoustomerOne.NickName, + Name = item.Name, + //支付状态 + StatusName = item.Status.GetDescription(), + out_trade_no = item.out_trade_no, + //支付方式 + PayTypeName = item.PayType.GetDescription(), + + Phone = CoustomerOne.Phone, + }); + } + pageModel.data = list; + pageModel.dataCount = info.dataCount; + pageModel.page = info.page; + pageModel.pageCount = info.pageCount; + pageModel.PageSize = info.PageSize; + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = pageModel + }; + } + + //public async Task> + + /// + /// 支付订单回调修改状态 + /// + /// + /// + /// + public async Task UpdateOrderStatus(string orderNo, EnumPayType payType, string trade_no) + { + bool status = false; + var orderinfo = await _dal.Query(e => e.OrderId == orderNo); + if (orderinfo.Any()) + { + var cardtype = await v_VipCardTypeRepository.QueryById(orderinfo.FirstOrDefault().CardTypeId); + if (cardtype == null) + return false; + var code = RadomHelper.GetGuid(); + try + { + _unitOfWork.BeginTran(); + var addcard = await v_VipCardInfoRepository.Add(new V_VipCardInfo() + { + CardTypeId = cardtype.Id, + CardTypeName = cardtype.Name, + Code = code, + IsBind = 1, + Money = orderinfo.FirstOrDefault().PayPrice, + Day = cardtype.Day, + EndTime = DateTime.Now.AddDays(cardtype.Day) + }); + if (addcard > 0) + { + var model = orderinfo.FirstOrDefault(); + model.PayType = payType; + model.ModifyTime = TimeUtil.GetCstDateTime(); + model.Status = EnumOrderType.payoff; + model.out_trade_no = trade_no; + var cc = await _dal.Update(model); + if (cc) + { + _unitOfWork.CommitTran(); + status = true; + } + } + } + catch (Exception) + { + _unitOfWork.RollbackTran(); + return status; + } + } + return status; + } + + /// + /// 唤醒微信H5支付 + /// + /// + /// + public async Task> WechatPubPay(WeChatPayQuery query) + { + string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmssfff"); + logger.LogInformation(out_trade_no + "唤醒支付"); + WeChatPayPayRequest viewModel = new WeChatPayPayRequest() { }; + //viewModel.NotifyUrl = string.Format("{0}/api/front/WeixinPay/PayNotify", PayInfoQuery.ApiUrl); + viewModel.NotifyUrl = string.Format("{0}/api/front/HFivePay/WeChartOrderConfirm", PayInfoQuery.ApiUrl); + //viewModel.NotifyUrl = string.Format("{0}/api/front/HFivePay/WeChartOrderConfirm?out_trade_no={1}", PayInfoQuery.ApiUrl, out_trade_no); + viewModel.SpBillCreateIp = PayInfoQuery.CreateIp; + viewModel.OutTradeNo = out_trade_no; + viewModel.TotalFee = Convert.ToInt32(query.Money*100); + viewModel.Body = "壹志愿VIP"; + viewModel.TradeType = "MWEB"; + + var response = await WeChatPay.GetMwebUrl(_client, _optionsAccessor, viewModel); + if (response.ReturnCode == "SUCCESS" && response.ReturnMsg == "OK") + { + try + { + //_unitOfWork.BeginTran(); + var order = await _dal.Add(new V_OrderInfo + { + out_trade_no = out_trade_no, + PayType = EnumPayType.WeiPay, + CardTypeId = query.CardTypeId, + Status = EnumOrderType.payment, + CustomerId = query.CustomerId, + Price = query.Money, + PayPrice = query.Money, + Name = "壹志愿好帮手VIP开通", + CardNo = "0", + CardId = 0 + }); + if (order > 0) + { + logger.LogInformation(out_trade_no + "唤醒成功"); + //_unitOfWork.CommitTran(); + return new MessageModel() + { + success = true, + msg = "成功", + response = string.Format("{0}&redirect_url={1}", response.MwebUrl, string.Format("{0}?out_trade_no={1}", string.Format("{0}/api/front/HFivePay/WeChartOrderConfirm", PayInfoQuery.ApiUrl), out_trade_no)) + }; + } + } + catch (Exception ex) + { + //_unitOfWork.RollbackTran(); + return new MessageModel() { success = false, msg = "唤醒微信失败,请重试" }; + } + + + } + return new MessageModel() { success = false, msg = "唤醒微信失败,请重试" }; + } + + /// + /// 微信订单查询确认 传用户Id + /// + /// + /// + public async Task> WeChatPayStatus(IdQuery query) + { + var orderinfo = await _dal.Query(x => x.CustomerId == query.Id && x.IsDelete == false && x.PayType == EnumPayType.WeiPay); + if (orderinfo.Count <= 0) + return new MessageModel() { success = false, msg = "未查询到用户订单" }; + var result = orderinfo.OrderByDescending(x => x.Id).FirstOrDefault(); + if (result.Status == EnumOrderType.payoff) + { + return new MessageModel() { success = true, msg = "已支付成功" }; + } + var request = new WeChatPayOrderQueryRequest + { + OutTradeNo = result.out_trade_no + }; + //如果订单状态是 + var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); + if (response.TradeState == "NOTPAY") + { + return new MessageModel() { success = false, msg = "您还未支付订单,请重新支付" }; + } + if (response.ReturnCode == "SUCCESS" && response.ReturnMsg == "OK") + { + var payresult = await PaySuccess(result); + if (payresult.success == true) + { + logger.LogInformation("SUCCESS:" + result.out_trade_no); + return new MessageModel() { success = true, msg = "支付成功" }; + } + else + { + return new MessageModel() { success = false, msg = "支付成功,业务处理错误,请联系客服" }; + } + } + return new MessageModel() { success = false, msg = "您还未支付订单,请重新支付或联系客服" }; + } + + /// + /// 支付宝 订单确认 + /// + /// + /// + public async Task> AliPayStatus(IdQuery query) + { + logger.LogInformation("订单确认(支付宝)"); + var orderinfo = await _dal.Query(x => x.CustomerId == query.Id && x.IsDelete == false && x.PayType == EnumPayType.AliPay); + if (orderinfo.Count <= 0) + return new MessageModel() { success = false, msg = "未查询到用户订单" }; + var result = orderinfo.OrderByDescending(x => x.CreateTime).FirstOrDefault(); + if (result.Status == EnumOrderType.payoff) + { + return new MessageModel() { success = true, msg = "已支付成功" }; + } + else + { + return new MessageModel() { success = false, msg = "未支付,如有疑问请联系客服" }; + } + + //var model = new AlipayTradeWapPayModel + //{ + // OutTradeNo = query.out_trade_no, + //}; + //var req = new AlipayTradeWapPayRequest(); + //req.SetBizModel(model); + //var response = await alipayClient.PageExecuteAsync(req, alipayoptions.Value); + //logger.LogInformation(query.out_trade_no + "返回参数" + response.Body); + ////response.Body + ////根绝回调的返回 确认是否支付成功 此处还存在问题---------------------------------- + ////if(response.) + //var payresult = await PaySuccess(result); + //if (payresult.success == true) + //{ + // logger.LogInformation("SUCCESS(支付宝订单确认成功):" + result.out_trade_no); + // return new MessageModel() { success = true, msg = "支付成功" }; + //} + //else + //{ + // return new MessageModel() { success = false, msg = "支付成功,业务处理错误,请联系客服" }; + //} + } + + ///// + ///// 微信订单回调确认 + ///// + ///// + ///// + //public async Task> WeChartOrderConfirm(XmlQuery query) + //{ + // string xmlstr = ""; + // try + // { + // var response = XmlSerializeHelper.XMLToObject(query.xml); + // if (response == null) + // return new MessageModel() { success = false, msg = "订单确认失败", response = xmlstr }; + // var result = (await _dal.Query(x => x.out_trade_no == response.out_trade_no && x.PayType == EnumPayType.WeiPay)).FirstOrDefault(); + // if (result != null && result.Status == EnumOrderType.payoff) + // { + // xmlstr = "< return_code >< ![CDATA[SUCCESS]] >< return_msg >< ![CDATA[OK]] >"; + // return new MessageModel() { success = true, msg = "成功", response = xmlstr }; + // } + // if (response.result_code == "SUCCESS") + // { + // //记录流水 + // var payresult = await PaySuccess(result); + // if (payresult.success == true) + // { + // xmlstr = "< return_code >< ![CDATA[SUCCESS]] >< return_msg >< ![CDATA[OK]] >"; + // return new MessageModel() { success = true, msg = "成功", response = xmlstr }; + // } + // else + // { + // payresult.response = xmlstr; + // return payresult; + // } + + // } + // return new MessageModel() { success = false, msg = "失败", response = xmlstr }; + // } + // catch (Exception ex) + // { + // return new MessageModel() { success = false, msg = "失败", response = xmlstr }; + // } + //} + + /// + /// 支付成功后操作 + /// + /// + /// + public async Task> PaySuccess(V_OrderInfo query) + { + //生成一个卡号 + //修改订单状态 + try + { + var cardinfo = (await v_VipCardInfoRepository.QuerySql("SELECT Code FROM `V_VipCardInfo` where IsDelete=0")).Select(x => x.Code).ToList(); + + var code = GetNumbers(cardinfo, Nums); + + if (string.IsNullOrWhiteSpace(code)) + { + logger.LogWarning("用户Id" + query.CustomerId + "的用户,支付成功,卡号生成失败,请联系客服"); + return new MessageModel() { success = false, msg = "支付成功,卡号生成失败,请联系客服" }; + } + + var cardtype = await v_VipCardTypeRepository.QueryById(query.CardTypeId); + if (cardtype == null) + { + logger.LogWarning("用户Id" + query.CustomerId + "的用户,支付成功,卡类型有误,请联系客服"); + return new MessageModel() { success = false, msg = "支付成功,卡类型有误,请联系客服" }; + } + + _unitOfWork.BeginTran(); + var cardadd = await v_VipCardInfoRepository.Add(new V_VipCardInfo() + { + CardTypeId = cardtype.Id, + CardTypeName = cardtype.Name, + Code = code, + IsBind = 1, + Money = query.PayPrice, + Day = cardtype.Day, + EndTime = DateTime.Now.AddDays(cardtype.Day) + }); + if (cardadd > 0) + { + query.Status = EnumOrderType.payoff; + query.CardNo = code; + query.CardId = cardadd; + var updateorder = await _dal.Update(query); + if (updateorder) + { + //修改用户信息 + var customerinfo = await v_CustomerInfoRepository.QueryById(query.CustomerId); + if (customerinfo == null) + { + _unitOfWork.RollbackTran(); + logger.LogWarning("用户Id" + query.CustomerId + "的用户,支付成功,会员卡创建成功,用户信息不存在"); + return new MessageModel() { success = false, msg = "支付成功,会员卡创建成功,用户信息不存在" }; + } + customerinfo.IsVIP = true; + customerinfo.VipCode = code; + var updateinfo = await v_CustomerInfoRepository.Update(customerinfo); + if (updateinfo) + { + _unitOfWork.CommitTran(); + return new MessageModel() { success = true, msg = "成功" }; + } + else + { + logger.LogWarning("用户Id" + query.CustomerId + "的用户,支付成功,会员卡创建成功,用户信息修改失败"); + _unitOfWork.RollbackTran(); + return new MessageModel() { success = false, msg = "支付成功,会员卡创建成功,用户信息修改失败" }; + } + } + logger.LogWarning("用户Id" + query.CustomerId + "的用户,支付成功,订单修改失败,请联系客服"); + return new MessageModel() { success = false, msg = "支付成功,订单修改失败,请联系客服" }; + } + logger.LogWarning("用户Id" + query.CustomerId + "的用户,支付成功,订单修改失败,请联系客服"); + return new MessageModel() { success = false, msg = "支付成功,会员卡创建失败,请联系客服" }; + } + catch (Exception) + { + _unitOfWork.RollbackTran(); + logger.LogWarning("用户Id" + query.CustomerId + "的用户,支付成功,订单修改失败,请联系客服"); + return new MessageModel() { success = false, msg = "支付成功,订单修改失败,请联系客服" }; + } + } + + /// + /// 生成卡号 失败直接继续生成 + /// + /// + /// + /// + public string GetNumbers(List cardinfo, int Nums) + { + var code = ""; + for (int i = 0; i < 100; i++) + { + var newcode = GenerateCardNumberHelper.GenerateCardNumber("888", Nums); + cardinfo.Add(newcode); + var isUnique = cardinfo.GroupBy(x => x).All(g => g.Count() == 1); + if (isUnique) + { + code = newcode; + break; + } + else + { + Nums += 1; + GetNumbers(cardinfo, Nums); + } + } + return code; + } + + /// + /// 支付宝H5支付 + /// + /// + /// + public async Task> AliH5Pay(WeChatPayQuery query) + { + logger.LogInformation("唤醒支付宝" + query.CustomerId); + AliOrderResult aliOrder = new AliOrderResult(); + try + { + string out_trade_no = query.CustomerId + "1" + DateTime.Now.ToString("yyyyMMddHHmmssfff"); + + AlipayTradeWapPayQuery viewMode = new AlipayTradeWapPayQuery() { }; + string NotifyUrl = string.Format("{0}/api/front/HFivePay/AliOrderConfirm", PayInfoQuery.ApiUrl); + //生成订单 + //或者失败 + var model = new AlipayTradeWapPayModel + { + Body = "壹志愿VIP", + Subject = "壹志愿VIP", + TotalAmount = query.Money.ToString(), + OutTradeNo = out_trade_no, + ProductCode = "QUICK_WAP_WAY", + TimeoutExpress = "90m" + }; + var req = new AlipayTradeWapPayRequest(); + req.SetBizModel(model); + req.SetNotifyUrl(NotifyUrl); + req.SetReturnUrl("https://payment.yrtsedu.cn/alipay.html"); + var response = await alipayClient.PageExecuteAsync(req, alipayoptions.Value); + if (response == null) + { + logger.LogInformation("唤醒失败" + out_trade_no); + return new MessageModel() { success = false, msg = "支付宝唤醒失败" }; + } + logger.LogInformation("唤醒成功" + out_trade_no); + //_unitOfWork.BeginTran(); + var order = await _dal.Add(new V_OrderInfo + { + out_trade_no = out_trade_no, + PayType = EnumPayType.AliPay, + CardTypeId = query.CardTypeId, + Status = EnumOrderType.payment, + CustomerId = query.CustomerId, + Price = query.Money, + PayPrice = query.Money, + Name = "壹志愿好帮手VIP开通", + CardNo = "0", + CardId = 0 + }); + if (order > 0) + { + logger.LogInformation(out_trade_no + "唤醒成功"); + //_unitOfWork.CommitTran(); + return new MessageModel() + { + //?payType='alipay'&&success=true&&customerId=" + query.CustomerId + "&&out_trade_no=" + out_trade_no + success = true, + msg = "获取成功", + response = new AliOrderResult() + { + Body = response.Body, + CustomerId = query.CustomerId, + out_trade_no = out_trade_no, + PayType = "alipay", + Success = true + } + }; + } + return new MessageModel() { success = false, msg = "订单添加失败" }; + } + catch (Exception ex) + { + //_unitOfWork.RollbackTran(); + logger.LogInformation("唤醒异常" + ex.ToString()); + return new MessageModel() { success = false, msg = "支付宝唤醒失败" }; + } + } + + + } +} \ No newline at end of file diff --git a/New_College.Services/V_SubjectSelectServices.cs b/New_College.Services/V_SubjectSelectServices.cs new file mode 100644 index 0000000..4cb26af --- /dev/null +++ b/New_College.Services/V_SubjectSelectServices.cs @@ -0,0 +1,82 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.Model; +using System.Threading.Tasks; +using New_College.Model.ViewModels; +using System.Linq; + +namespace New_College.Services +{ + public class V_SubjectSelectServices : BaseServices, IV_SubjectSelectServices + { + private readonly IBaseRepository _dal; + public V_SubjectSelectServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + /// + /// 获取我的自选科目 + /// + /// + /// + public async Task> GetSubjectSelect(IdQuery query) + { + var info = await _dal.Query(x => x.IsDelete == false && x.CustomerId == query.Id && x.Status == 2); + if (info.Count <= 0) + return new MessageModel() { success = false, msg = "获取失败,暂未选科" }; + return new MessageModel() + { + success = true, + msg = "获取成功", + response = info.FirstOrDefault().SubjectSelect + }; + } + + /// + /// 保存我的选科 + /// + /// + /// + public async Task> SaveSubjectSelect(SubjectSelectQuery query) + { + var info = await _dal.Query(x => x.IsDelete == false && x.CustomerId == query.CustomerId); + if (info.Count <= 0) + { + var result = await _dal.Add(new V_SubjectSelect() + { + CustomerId = query.CustomerId, + SubjectSelect = query.SubjectSelect, + Status = query.Status + }); + if (result > 0) + { + return new MessageModel() { success = true, msg = "操作成功" }; + } + else + { + return new MessageModel() { success = false, msg = "操作失败" }; + } + } + else + { + var oneinfo = info.FirstOrDefault(); + oneinfo.SubjectSelect = query.SubjectSelect; + oneinfo.Status = query.Status; + var result = await _dal.Update(oneinfo); + if (result) + { + return new MessageModel() { success = true, msg = "操作成功" }; + } + else + { + return new MessageModel() { success = false, msg = "操作失败" }; + } + } + } + } +} \ No newline at end of file diff --git a/New_College.Services/V_VipCardInfoServices.cs b/New_College.Services/V_VipCardInfoServices.cs new file mode 100644 index 0000000..4deb9e6 --- /dev/null +++ b/New_College.Services/V_VipCardInfoServices.cs @@ -0,0 +1,419 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using New_College.Model; +using System.Threading.Tasks; +using New_College.Model.ViewModels; +using New_College.IRepository; +using System.Linq; +using System; +using LinqKit; +using System.Collections.Generic; +using New_College.Common; +using New_College.Model.ViewModels.Query; + +namespace New_College.Services +{ + public class V_VipCardInfoServices : BaseServices, IV_VipCardInfoServices + { + private readonly IBaseRepository _dal; + private readonly IV_VipCardTypeRepository v_VipCardTypeRepository; + private readonly IV_OrderInfoRepository v_OrderInfoRepository; + private readonly IV_CustomerInfoRepository v_CustomerInfoRepository; + + public V_VipCardInfoServices(IBaseRepository dal + , IV_OrderInfoRepository IV_OrderInfoRepository + , IV_VipCardTypeRepository IV_VipCardTypeRepository + , IV_CustomerInfoRepository IV_CustomerInfoRepository) + { + this._dal = dal; + v_OrderInfoRepository = IV_OrderInfoRepository; + v_VipCardTypeRepository = IV_VipCardTypeRepository; + v_CustomerInfoRepository = IV_CustomerInfoRepository; + base.BaseDal = dal; + } + + /// + /// 绑定卡 + /// + /// + /// + public async Task> BindCardInfo(VipCardQuery query) + { + var info = await v_CustomerInfoRepository.QueryById(query.CustomerId); + if (info == null) + return new MessageModel() { success = false, msg = "用户信息异常,你重新登录" }; + var cardinfo = (await _dal.Query(x => x.IsDelete == false && x.Code == query.CardCode)).FirstOrDefault(); + if (cardinfo == null || cardinfo != null && cardinfo.IsBind == 1) + return new MessageModel() { success = false, msg = "会员卡号有误或已被绑定" }; + cardinfo.IsBind = 1; + cardinfo.EndTime = DateTime.Now.AddDays(cardinfo.Day); + var result = await _dal.Update(cardinfo); + if (result == false) + return new MessageModel() { success = false, msg = "绑定失败" }; + var baseResult = await v_OrderInfoRepository.Add(new V_OrderInfo + { + out_trade_no = query.CustomerId + query.CardCode, + // PayType = 2, + CardTypeId = cardinfo.CardTypeId, + Status = EnumOrderType.payoff, + CustomerId = query.CustomerId, + Price = cardinfo.Money, + PayPrice = cardinfo.Money, + Name = "壹志愿好帮手VIP绑定", + CardNo = query.CardCode, + CardId = cardinfo.Id + }); + if (baseResult > 0) + { + //更改用户信息 + info.IsVIP = true; + info.VipCode = query.CardCode; + var updateresult = await v_CustomerInfoRepository.Update(info); + if (updateresult) + { + return new MessageModel() { success = true, msg = "绑定成功" }; + } + else + { + return new MessageModel() { success = false, msg = "用户信息更新失败" }; + } + } + else + { + return new MessageModel() { success = false, msg = "绑定失败" }; + } + } + + ///// + ///// 绑定卡 添加卡 + ///// + ///// + ///// + //public async Task> BindCardInfo(VipCardQuery query) + //{ + // var cardinfo = (await _dal.Query(x => x.IsDelete == false && x.IsBind == 0 && x.Code == query.CardCode)).FirstOrDefault(); + // if (cardinfo == null) + // return new MessageModel() { success = false, msg = "会员卡号有误或已被绑定" }; + // var endtime = DateTime.Now.AddDays(cardinfo.Day); + // var oldorderinfo = await v_OrderInfoRepository.Query(x => x.CustomerId == query.CustomerId && x.IsDelete == false); + // if (oldorderinfo.Count > 0) + // { + // var card = oldorderinfo.OrderByDescending(x => x.CreateTime).FirstOrDefault(); + // var oldcardinfo = await _dal.Query(x => x.Id == card.CardId && x.EndTime >= DateTime.Now); + // if (oldcardinfo != null) + // { + // var oldendtime = oldcardinfo.OrderByDescending(x => x.CreateTime).Select(x => x.EndTime).FirstOrDefault(); + // endtime = oldendtime.Value.AddDays(cardinfo.Day); + // } + // } + // //重新绑定的话 获取之前的到期时间再加上卡的日期 + // var addcard = await _dal.Add(new V_VipCardInfo() + // { + // CardTypeId = cardinfo.CardTypeId, + // CardTypeName = cardinfo.CardTypeName, + // Code = query.CardCode, + // IsBind = 1, + // Money = cardinfo.Money, + // Day = cardinfo.Day, + // EndTime = endtime + // }); + // if (addcard <= 0) + // return new MessageModel() { success = false, msg = "绑定失败" }; + // var baseResult = await v_OrderInfoRepository.Add(new V_OrderInfo + // { + // out_trade_no = query.CustomerId + query.CardCode, + // // PayType = 2, + // CardTypeId = cardinfo.CardTypeId, + // //Status = 1, + // CustomerId = query.CustomerId, + // Price = cardinfo.Money, + // PayPrice = cardinfo.Money, + // Name = "壹志愿好帮手VIP绑定", + // CardNo = query.CardCode, + // CardId = addcard + // }); + // if (baseResult > 0) + // { + // return new MessageModel() { success = true, msg = "绑定成功" }; + // } + // else + // { + // return new MessageModel() { success = false, msg = "绑定失败" }; + // } + //} + + + /// + /// 获取vip信息 + /// + /// + /// + public async Task> GetVipInfo(IdQuery query) + { + var orderinfo = await v_OrderInfoRepository.Query(x => x.CustomerId == query.Id && x.IsDelete == false); + if (orderinfo.Count <= 0) + return new MessageModel() { success = false, msg = "您还不是Vip" }; + var card = orderinfo.OrderByDescending(x => x.CreateTime).FirstOrDefault(); + var cardinfo = await _dal.QueryById(card.CardId); + if (card.CardNo == cardinfo.Code && DateTime.Now < cardinfo.EndTime) + { + return new MessageModel() + { + success = true, + msg = "获取成功", + response = new VipInfoResult() + { + IsVip = true, + VipCode = cardinfo.Code, + VipEndTime = cardinfo.EndTime, + VipCardTypeId = cardinfo.CardTypeId, + VipCardTypeName = cardinfo.CardTypeName + } + }; + } + else + { + return new MessageModel() + { + success = false, + msg = "卡号信息异常,或会员卡已过期", + response = new VipInfoResult() + { + IsVip = false, + VipCode = cardinfo.Code, + VipEndTime = cardinfo.EndTime + } + }; + } + } + + + /// + /// 生成卡信息 + /// + /// + /// + public async Task>> AutoVipCardInfo(AutoVipInfoQuery query) + { + var typeinfo = await v_VipCardTypeRepository.QueryById(query.VipCardTypeId); + if (typeinfo == null) + return new MessageModel>() { success = false, msg = "卡类型错误" }; + var cardinfo = (await _dal.QuerySql("SELECT Code FROM `V_VipCardInfo` where IsDelete=0")).Select(x => x.Code).ToList(); + List cardNumbers = new List(); + for (int i = 0; i < query.Num; i++) + { + var cn = GenerateCardNumberHelper.GenerateCardNumber(query.Head, query.Length); + cardNumbers.Add(cn); + } + cardinfo.AddRange(cardNumbers); + var isUnique = cardinfo.GroupBy(x => x).All(g => g.Count() == 1); + //Assert.IsTrue(isUnique); + if (isUnique) + { + List addinfo = cardNumbers.Select(x => new V_VipCardInfo() + { + CardTypeId = typeinfo.Id, + CardTypeName = typeinfo.Name, + Code = x, + Day = typeinfo.Day, + EndTime = DateTime.Now.AddDays(typeinfo.Day), + IsBind = 0, + Money = typeinfo.Money + }).ToList(); + var result = await _dal.Add(addinfo); + return new MessageModel>() { success = true, msg = "生成成功", response = cardNumbers }; + } + return new MessageModel>() { success = false, msg = "生成失败", response = cardNumbers }; + } + + #region 生成卡号 + + #endregion + + + /// + /// 获取学生卡信息(分页) vip卡 + /// + /// + /// + public async Task>> GetVipCardInfoByPage(VipCardInfoSearchQuery query) + { + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false); + if (!string.IsNullOrWhiteSpace(query.IsBind) && query.IsBind!="2") + wheres = wheres.And(x => x.IsBind ==Convert.ToInt32( query.IsBind)); + if (!string.IsNullOrWhiteSpace( query.Code )) + wheres = wheres.And(x => x.Code.Contains(query.Code)); + if (!string.IsNullOrWhiteSpace(query.CardTypeId) && query.CardTypeId != "0") + wheres = wheres.And(x => x.CardTypeId == Convert.ToInt32(query.CardTypeId)); + var info = await _dal.QueryPage(wheres, query.PageIndex, query.PageSize); + if (info.data.Count <= 0) + return new MessageModel>() + { + success = false, + msg = "获取失败" + }; + //var regioninfo = await sysRegionRepository.Query(x => x.ParentCode == "100000"); + PageModel pageModel = new PageModel() { }; + List list = new List() { }; + foreach (var item in info.data) + { + list.Add(new VipCardInfoResult() + { + Id = item.Id, + Code = item.Code, + CardTypeName = item.CardTypeName, + IsBind = item.IsBind, + IsBindName = item.IsBind == 0 ? "绑定" : "未绑定", + Day = item.Day, + Money = item.Money + }); + } + pageModel.data = list; + pageModel.dataCount = info.dataCount; + pageModel.page = info.page; + pageModel.pageCount = info.pageCount; + pageModel.PageSize = info.PageSize; + return new MessageModel>() + { + success = true, + msg = "获取成功", + response = pageModel + }; + } + + /// + /// 获取单个学生卡信息 + /// + /// + /// + public async Task> GetVipCardInfoOne(IdQuery query) + { + var info = await _dal.QueryById(query.Id); + if (info == null) + return new MessageModel() { success = false, msg = "获取失败" }; + + return new MessageModel() + { + success = true, + msg = "获取成功", + response = new VipCardInfoResultOne() + { + Id = info.Id, + Code = info.Code, + CardTypeId = info.CardTypeId, + CardTypeName = info.CardTypeName, + IsBind = info.IsBind, + Day = info.Day, + Money = info.Money + } + }; + + } + + /// + /// 添加学生卡 + /// + /// + /// + public async Task> AddVipCardInfo(VipCardInfoQuery query) + { + //首先获取选择对应的CardType信息 + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false); + if (query.CardTypeId>0) + wheres = wheres.And(x => x.Id==query.CardTypeId); + var info = await v_VipCardTypeRepository.Query(wheres); + var CardTypeList = info.Select(x => x.Id).ToList(); + var listCard = await v_VipCardTypeRepository.Query(x => query.CardTypeId==x.Id && x.IsDelete == false); + var CardTypeOne = listCard.Where(x => x.Id == query.CardTypeId).FirstOrDefault(); + + + var result = await _dal.Add(new V_VipCardInfo() + { + Code = query.Code, + Day = CardTypeOne.Day, + Money = CardTypeOne.Money, + CardTypeId = CardTypeOne.Id, + CardTypeName= CardTypeOne.Name, + }); + + if (result > 0) + { + return new MessageModel() { success = true, msg = "添加成功", response = true }; + } + else + { + return new MessageModel() { success = false, msg = "添加失败", response = false }; + } + } + + + + /// + /// 更新学生卡 + /// + /// + /// + public async Task> UpdateVipCardInfo(VipCardInfoQuery query) + { + //首先获取选择对应的CardType信息 + var wheres = PredicateBuilder.New(); + wheres = wheres.And(x => x.IsDelete == false); + if (query.CardTypeId > 0) + wheres = wheres.And(x => x.Id == query.CardTypeId); + var info = await v_VipCardTypeRepository.Query(wheres); + var CardTypeList = info.Select(x => x.Id).ToList(); + var listCard = await v_VipCardTypeRepository.Query(x => query.CardTypeId == x.Id && x.IsDelete == false); + var CardTypeOne = listCard.Where(x => x.Id == query.CardTypeId).FirstOrDefault(); + + var infoCard = await _dal.QueryById(query.Id); + if (infoCard == null) + return new MessageModel() { success = false, msg = "修改内容不存在", response = false }; + infoCard.Code = query.Code; + //infoCard.IsBind = query.IsBind; + infoCard.Day = CardTypeOne.Day; + infoCard.Money = CardTypeOne.Money; + infoCard.CardTypeId = CardTypeOne.Id; + infoCard.CardTypeName = CardTypeOne.Name; + var result = await _dal.Update(infoCard); + if (result) + { + return new MessageModel() { success = true, msg = "修改成功", response = true }; + } + else + { + return new MessageModel() { success = false, msg = "修改失败", response = false }; + } + } + /// + /// 删除学生卡 + /// + /// + /// + public async Task> DeleteVipCardInfo(IdQuery query) + { + if (query.Ids == null || query.Ids.Count <= 0) + return new MessageModel() { success = false, msg = "传入为空", response = false }; + var info = await _dal.Query(x => x.IsDelete == false && query.Ids.Contains(x.Id)); + if (info.Count <= 0) + return new MessageModel() { success = false, msg = "没有可被删除项", response = false }; + foreach (var item in info) + { + item.IsDelete = true; + } + var result = await _dal.Update(info); + if (result) + { + return new MessageModel() { success = true, msg = "删除成功", response = true }; + } + else + { + return new MessageModel() { success = false, msg = "删除失败", response = false }; + } + } + } +} \ No newline at end of file diff --git a/New_College.Services/V_VipCardTypeServices.cs b/New_College.Services/V_VipCardTypeServices.cs new file mode 100644 index 0000000..1d75ea3 --- /dev/null +++ b/New_College.Services/V_VipCardTypeServices.cs @@ -0,0 +1,59 @@ + +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using New_College.IRepository.Base; +using System.Collections.Generic; +using System.Threading.Tasks; +using New_College.Model.ViewModels; +using System.Linq; +using New_College.Model; +using New_College.Model.ViewModels.Query; +using LinqKit; + +namespace New_College.Services +{ + public class V_VipCardTypeServices : BaseServices, IV_VipCardTypeServices + { + private readonly IBaseRepository _dal; + public V_VipCardTypeServices(IBaseRepository dal) + { + this._dal = dal; + base.BaseDal = dal; + } + + /// + /// 获取Vip卡列表 + /// + /// + public async Task> GetVipCardTypeList() + { + var info = await _dal.Query(x => x.IsDelete == false, "OrderSort desc"); + return info.Select(x => new VipCardTypeResult() + { + Id = x.Id, + Name = x.Name, + Money = x.Money, + Desc = x.Desc, + Day = x.Day + }).ToList(); + } + + /// + /// 获取Vip卡列表 + /// + /// + public async Task> GetVipCardType() + { + var info = await _dal.Query(x => x.IsDelete == false, "OrderSort desc"); + return info.Select(x => new VipCardTypeQuery() + { + Id = x.Id, + Name = x.Name, + Money = x.Money, + Desc = x.Desc, + Day = x.Day + }).ToList(); + } + } +} diff --git a/New_College.Services/sysUserInfoServices.cs b/New_College.Services/sysUserInfoServices.cs new file mode 100644 index 0000000..15c2013 --- /dev/null +++ b/New_College.Services/sysUserInfoServices.cs @@ -0,0 +1,78 @@ +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Models; +using New_College.Services.BASE; +using System.Linq; +using System.Threading.Tasks; + +namespace New_College.FrameWork.Services +{ + /// + /// sysUserInfoServices + /// + public class SysUserInfoServices : BaseServices, ISysUserInfoServices + { + + IBaseRepository _dal; + IUserRoleServices _userRoleServices; + IBaseRepository _roleRepository; + public SysUserInfoServices(IBaseRepository dal, IUserRoleServices userRoleServices, IBaseRepository roleRepository) + { + this._dal = dal; + this._userRoleServices = userRoleServices; + this._roleRepository = roleRepository; + base.BaseDal = dal; + } + /// + /// + /// + /// + /// + /// + public async Task SaveUserInfo(string loginName, string loginPwd) + { + sysUserInfo sysUserInfo = new sysUserInfo(loginName, loginPwd); + sysUserInfo model = new sysUserInfo(); + var userList = await base.Query(a => a.uLoginName == sysUserInfo.uLoginName && a.uLoginPWD == sysUserInfo.uLoginPWD); + if (userList.Count > 0) + { + model = userList.FirstOrDefault(); + } + else + { + var id = await base.Add(sysUserInfo); + model = await base.QueryById(id); + } + + return model; + + } + + /// + /// + /// + /// + /// + /// + public async Task GetUserRoleNameStr(string loginName, string loginPwd) + { + string roleName = ""; + var user = (await base.Query(a => a.uLoginName == loginName && a.uLoginPWD == loginPwd)).FirstOrDefault(); + var roleList = await _roleRepository.Query(a => a.IsDeleted==false); + if (user != null) + { + var userRoles = await _userRoleServices.Query(ur => ur.UserId == user.uID); + if (userRoles.Count > 0) + { + var arr = userRoles.Select(ur => ur.RoleId.ObjToString()).ToList(); + var roles = roleList.Where(d => arr.Contains(d.Id.ObjToString())); + + roleName = string.Join(',', roles.Select(r => r.Name).ToArray()); + } + } + return roleName; + } + } +} + +//----------sysUserInfo结束---------- diff --git a/New_College.System.Architecture.png b/New_College.System.Architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..994a1e2822fe636fee8f30a749a003e2365428c2 GIT binary patch literal 46932 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 a`=7CGcFbhG#@W>%yF6X}T-G@yGywo-_Zk)e literal 0 HcmV?d00001 diff --git a/New_College.Tasks/HostedService/Job1TimedService.cs b/New_College.Tasks/HostedService/Job1TimedService.cs new file mode 100644 index 0000000..4f4b88b --- /dev/null +++ b/New_College.Tasks/HostedService/Job1TimedService.cs @@ -0,0 +1,60 @@ +using New_College.Common.Helper; +using New_College.IServices; +using Microsoft.Extensions.Hosting; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace New_College.Tasks +{ + public class Job1TimedService : IHostedService, IDisposable + { + private Timer _timer; + private readonly IBlogArticleServices _blogArticleServices; + + // 这里可以注入 + public Job1TimedService(IBlogArticleServices blogArticleServices) + { + _blogArticleServices = blogArticleServices; + } + + public Task StartAsync(CancellationToken cancellationToken) + { + Console.WriteLine("Job 1 is starting."); + + _timer = new Timer(DoWork, null, TimeSpan.Zero, + TimeSpan.FromSeconds(60 * 60));//一个小时 + + return Task.CompletedTask; + } + + private async void DoWork(object state) + { + try + { + var model = await _blogArticleServices.GetBlogDetails(1); + Console.WriteLine($"Job 1 启动成功,获取id=1的博客title为:{model?.btitle}"); + } + catch (Exception ex) + { + Console.WriteLine($"Error:{ex.Message}"); + } + + ConsoleHelper.WriteSuccessLine($"Job 1: {DateTime.Now}"); + } + + public Task StopAsync(CancellationToken cancellationToken) + { + Console.WriteLine("Job 1 is stopping."); + + _timer?.Change(Timeout.Infinite, 0); + + return Task.CompletedTask; + } + + public void Dispose() + { + _timer?.Dispose(); + } + } +} diff --git a/New_College.Tasks/HostedService/Job2TimedService.cs b/New_College.Tasks/HostedService/Job2TimedService.cs new file mode 100644 index 0000000..b0421d1 --- /dev/null +++ b/New_College.Tasks/HostedService/Job2TimedService.cs @@ -0,0 +1,47 @@ +using New_College.Common.Helper; +using Microsoft.Extensions.Hosting; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace New_College.Tasks +{ + public class Job2TimedService : IHostedService, IDisposable + { + private Timer _timer; + + // 这里可以注入 + public Job2TimedService() + { + } + + public Task StartAsync(CancellationToken cancellationToken) + { + Console.WriteLine("Job 2 is starting."); + + _timer = new Timer(DoWork, null, TimeSpan.Zero, + TimeSpan.FromSeconds(60 * 60 * 2));//两个小时 + + return Task.CompletedTask; + } + + private void DoWork(object state) + { + ConsoleHelper.WriteWarningLine($"Job 2: {DateTime.Now}"); + } + + public Task StopAsync(CancellationToken cancellationToken) + { + Console.WriteLine("Job 2 is stopping."); + + _timer?.Change(Timeout.Infinite, 0); + + return Task.CompletedTask; + } + + public void Dispose() + { + _timer?.Dispose(); + } + } +} diff --git a/New_College.Tasks/New_College.Tasks.csproj b/New_College.Tasks/New_College.Tasks.csproj new file mode 100644 index 0000000..16f34ee --- /dev/null +++ b/New_College.Tasks/New_College.Tasks.csproj @@ -0,0 +1,15 @@ + + + + netcoreapp3.1 + + + + + + + + + + + diff --git a/New_College.Tasks/QuartzNet/ISchedulerCenter.cs b/New_College.Tasks/QuartzNet/ISchedulerCenter.cs new file mode 100644 index 0000000..1ebf990 --- /dev/null +++ b/New_College.Tasks/QuartzNet/ISchedulerCenter.cs @@ -0,0 +1,44 @@ +using New_College.Model; +using New_College.Model.Models; +using System.Threading.Tasks; + +namespace New_College.Tasks +{ + /// + /// 服务调度接口 + /// + public interface ISchedulerCenter + { + + /// + /// 开启任务调度 + /// + /// + Task> StartScheduleAsync(); + /// + /// 停止任务调度 + /// + /// + Task> StopScheduleAsync(); + /// + /// + /// + /// + /// + Task> AddScheduleJobAsync(TasksQz sysSchedule); + /// + /// 停止一个任务 + /// + /// + /// + Task> StopScheduleJobAsync(TasksQz sysSchedule); + /// + /// 恢复一个任务 + /// + /// + /// + Task> ResumeJob(TasksQz sysSchedule); + + } + +} diff --git a/New_College.Tasks/QuartzNet/JobFactory.cs b/New_College.Tasks/QuartzNet/JobFactory.cs new file mode 100644 index 0000000..a1aacca --- /dev/null +++ b/New_College.Tasks/QuartzNet/JobFactory.cs @@ -0,0 +1,50 @@ +using Microsoft.Extensions.DependencyInjection; +using Quartz; +using Quartz.Spi; +using System; + +namespace New_College.Tasks +{ + public class JobFactory : IJobFactory + { + /// + /// 注入反射获取依赖对象 + /// + private readonly IServiceProvider _serviceProvider; + public JobFactory(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + /// + /// 实现接口Job + /// + /// + /// + /// + public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) + { + try + { + var serviceScope = _serviceProvider.CreateScope(); + var job = serviceScope.ServiceProvider.GetService(bundle.JobDetail.JobType) as IJob; + return job; + + } + catch (Exception e) + { + throw e; + } + } + + public void ReturnJob(IJob job) + { + var disposable = job as IDisposable; + if (disposable != null) + { + disposable.Dispose(); + } + + } + } + +} diff --git a/New_College.Tasks/QuartzNet/Jobs/JobBase.cs b/New_College.Tasks/QuartzNet/Jobs/JobBase.cs new file mode 100644 index 0000000..f068f0e --- /dev/null +++ b/New_College.Tasks/QuartzNet/Jobs/JobBase.cs @@ -0,0 +1,44 @@ +using Quartz; +using System; +using System.Diagnostics; +using System.Threading.Tasks; + +namespace New_College.Tasks +{ + public class JobBase + { + /// + /// 执行指定任务 + /// + /// + /// + public async Task ExecuteJob(IJobExecutionContext context, Func func) + { + string jobHistory = $"【{DateTime.Now}】执行任务【Id:{context.JobDetail.Key.Name},组别:{context.JobDetail.Key.Group}】"; + try + { + var s = context.Trigger.Key.Name; + //记录Job时间 + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + await func();//执行任务 + stopwatch.Stop(); + jobHistory += $",【执行成功】,完成时间:{stopwatch.Elapsed.TotalMilliseconds.ToString("00")}毫秒"; + //SerilogServer.WriteLog(context.Trigger.Key.Name.Replace("-", ""), $"{context.Trigger.Key.Name}定时任务运行一切OK", "任务结束"); + } + catch (Exception ex) + { + JobExecutionException e2 = new JobExecutionException(ex); + //true 是立即重新执行任务 + e2.RefireImmediately = true; + //SerilogServer.WriteErrorLog(context.Trigger.Key.Name.Replace("-", ""), $"{context.Trigger.Key.Name}任务运行异常", ex); + + jobHistory += $",【执行失败】,异常日志:{ex.Message}"; + } + + Console.Out.WriteLine(jobHistory); + return jobHistory; + } + } + +} diff --git a/New_College.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs b/New_College.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs new file mode 100644 index 0000000..793aec7 --- /dev/null +++ b/New_College.Tasks/QuartzNet/Jobs/Job_Blogs_Quartz.cs @@ -0,0 +1,70 @@ +using New_College.Common.Helper; +using New_College.IServices; +using Quartz; +using System; +using System.Threading.Tasks; + +/// +/// 这里要注意下,命名空间和程序集是一样的,不然反射不到 +/// +namespace New_College.Tasks +{ + public class Job_Blogs_Quartz : JobBase, IJob + { + private readonly IBlogArticleServices _blogArticleServices; + private readonly ITasksQzServices _tasksQzServices; + + public Job_Blogs_Quartz(IBlogArticleServices blogArticleServices, ITasksQzServices tasksQzServices) + { + _blogArticleServices = blogArticleServices; + _tasksQzServices = tasksQzServices; + } + public async Task Execute(IJobExecutionContext context) + { + + //var param = context.MergedJobDataMap; + // 可以直接获取 JobDetail 的值 + var jobKey = context.JobDetail.Key; + var jobId = jobKey.Name; + + var executeLog = await ExecuteJob(context, async () => await Run(context, jobId.ObjToInt())); + + // 也可以通过数据库配置,获取传递过来的参数 + JobDataMap data = context.JobDetail.JobDataMap; + //int jobId = data.GetInt("JobParam"); + + //var model = await _tasksQzServices.QueryById(jobId); + //if (model != null) + //{ + // model.RunTimes += 1; + // model.Remark += $"{executeLog}
"; + // await _tasksQzServices.Update(model); + //} + + } + public async Task Run(IJobExecutionContext context, int jobid) + { + var list = await _blogArticleServices.Query(); + + if (jobid > 0) + { + var model = await _tasksQzServices.QueryById(jobid); + if (model != null) + { + model.RunTimes += 1; + var separator = "
"; + model.Remark = + $"【{DateTime.Now}】执行任务【Id:{context.JobDetail.Key.Name},组别:{context.JobDetail.Key.Group}】【执行成功】{separator}" + + string.Join(separator, StringHelper.GetTopDataBySeparator(model.Remark, separator, 9)); + + await _tasksQzServices.Update(model); + } + } + + await Console.Out.WriteLineAsync("博客总数量" + list.Count.ToString()); + } + } + + + +} diff --git a/New_College.Tasks/QuartzNet/SchedulerCenterServer.cs b/New_College.Tasks/QuartzNet/SchedulerCenterServer.cs new file mode 100644 index 0000000..20c5a91 --- /dev/null +++ b/New_College.Tasks/QuartzNet/SchedulerCenterServer.cs @@ -0,0 +1,308 @@ +using New_College.Model; +using New_College.Model.Models; +using Quartz; +using Quartz.Impl; +using Quartz.Spi; +using System; +using System.Collections.Specialized; +using System.Reflection; +using System.Threading.Tasks; + +namespace New_College.Tasks +{ + /// + /// 任务调度管理中心 + /// + public class SchedulerCenterServer : ISchedulerCenter + { + private Task _scheduler; + private readonly IJobFactory _iocjobFactory; + public SchedulerCenterServer(IJobFactory jobFactory) + { + _iocjobFactory = jobFactory; + _scheduler = GetSchedulerAsync(); + } + private Task GetSchedulerAsync() + { + if (_scheduler != null) + return this._scheduler; + else + { + // 从Factory中获取Scheduler实例 + NameValueCollection collection = new NameValueCollection + { + { "quartz.serializer.type", "binary" }, + }; + StdSchedulerFactory factory = new StdSchedulerFactory(collection); + return _scheduler = factory.GetScheduler(); + } + } + + /// + /// 开启任务调度 + /// + /// + public async Task> StartScheduleAsync() + { + var result = new MessageModel(); + try + { + this._scheduler.Result.JobFactory = this._iocjobFactory; + if (!this._scheduler.Result.IsStarted) + { + //等待任务运行完成 + await this._scheduler.Result.Start(); + await Console.Out.WriteLineAsync("任务调度开启!"); + result.success = true; + result.msg = $"任务调度开启成功"; + return result; + } + else + { + result.success = false; + result.msg = $"任务调度已经开启"; + return result; + } + } + catch (Exception) + { + throw; + } + } + + /// + /// 停止任务调度 + /// + /// + public async Task> StopScheduleAsync() + { + var result = new MessageModel(); + try + { + if (!this._scheduler.Result.IsShutdown) + { + //等待任务运行完成 + await this._scheduler.Result.Shutdown(); + await Console.Out.WriteLineAsync("任务调度停止!"); + result.success = true; + result.msg = $"任务调度停止成功"; + return result; + } + else + { + result.success = false; + result.msg = $"任务调度已经停止"; + return result; + } + } + catch (Exception) + { + throw; + } + } + + /// + /// 添加一个计划任务(映射程序集指定IJob实现类) + /// + /// + /// + /// + public async Task> AddScheduleJobAsync(TasksQz tasksQz) + { + var result = new MessageModel(); + + if (tasksQz != null) + { + try + { + JobKey jobKey = new JobKey(tasksQz.Id.ToString(), tasksQz.JobGroup); + if (await _scheduler.Result.CheckExists(jobKey)) + { + result.success = false; + result.msg = $"该任务计划已经在执行:【{tasksQz.Name}】,请勿重复启动!"; + return result; + } + #region 设置开始时间和结束时间 + + if (tasksQz.BeginTime == null) + { + tasksQz.BeginTime = DateTime.Now; + } + DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(tasksQz.BeginTime, 1);//设置开始时间 + if (tasksQz.EndTime == null) + { + tasksQz.EndTime = DateTime.MaxValue.AddDays(-1); + } + DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(tasksQz.EndTime, 1);//设置暂停时间 + + #endregion + + #region 通过反射获取程序集类型和类 + + Assembly assembly = Assembly.Load(new AssemblyName(tasksQz.AssemblyName)); + Type jobType = assembly.GetType(tasksQz.AssemblyName + "." + tasksQz.ClassName); + + #endregion + //判断任务调度是否开启 + if (!_scheduler.Result.IsStarted) + { + await StartScheduleAsync(); + } + + //传入反射出来的执行程序集 + IJobDetail job = new JobDetailImpl(tasksQz.Id.ToString(), tasksQz.JobGroup, jobType); + job.JobDataMap.Add("JobParam", tasksQz.JobParams); + ITrigger trigger; + + #region 泛型传递 + //IJobDetail job = JobBuilder.Create() + // .WithIdentity(sysSchedule.Name, sysSchedule.JobGroup) + // .Build(); + #endregion + + if (tasksQz.Cron != null && CronExpression.IsValidExpression(tasksQz.Cron) && tasksQz.TriggerType > 0) + { + trigger = CreateCronTrigger(tasksQz); + } + else + { + trigger = CreateSimpleTrigger(tasksQz); + } + // 告诉Quartz使用我们的触发器来安排作业 + await _scheduler.Result.ScheduleJob(job, trigger); + //await Task.Delay(TimeSpan.FromSeconds(120)); + //await Console.Out.WriteLineAsync("关闭了调度器!"); + //await _scheduler.Result.Shutdown(); + result.success = true; + result.msg = $"启动任务:【{tasksQz.Name}】成功"; + return result; + } + catch (Exception ex) + { + result.success = false; + result.msg = $"任务计划异常:【{ex.Message}】"; + return result; + } + } + else + { + result.success = false; + result.msg = $"任务计划不存在:【{tasksQz.Name}】"; + return result; + } + } + + /// + /// 暂停一个指定的计划任务 + /// + /// + public async Task> StopScheduleJobAsync(TasksQz sysSchedule) + { + var result = new MessageModel(); + try + { + JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup); + if (!await _scheduler.Result.CheckExists(jobKey)) + { + result.success = false; + result.msg = $"未找到要暂停的任务:【{sysSchedule.Name}】"; + return result; + } + else + { + await this._scheduler.Result.PauseJob(jobKey); + result.success = true; + result.msg = $"暂停任务:【{sysSchedule.Name}】成功"; + return result; + } + } + catch (Exception) + { + throw; + } + } + + /// + /// 恢复指定的计划任务 + /// + /// + /// + public async Task> ResumeJob(TasksQz sysSchedule) + { + var result = new MessageModel(); + try + { + JobKey jobKey = new JobKey(sysSchedule.Id.ToString(), sysSchedule.JobGroup); + if (!await _scheduler.Result.CheckExists(jobKey)) + { + result.success = false; + result.msg = $"未找到要重新的任务:【{sysSchedule.Name}】,请先选择添加计划!"; + return result; + } + await this._scheduler.Result.ResumeJob(jobKey); + result.success = true; + result.msg = $"恢复计划任务:【{sysSchedule.Name}】成功"; + return result; + } + catch (Exception) + { + throw; + } + } + + #region 创建触发器帮助方法 + + /// + /// 创建SimpleTrigger触发器(简单触发器) + /// + /// + /// + /// + /// + private ITrigger CreateSimpleTrigger(TasksQz sysSchedule) + { + if (sysSchedule.RunTimes > 0) + { + ITrigger trigger = TriggerBuilder.Create() + .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup) + .StartAt(sysSchedule.BeginTime.Value) + .EndAt(sysSchedule.EndTime.Value) + .WithSimpleSchedule(x => + x.WithIntervalInSeconds(sysSchedule.IntervalSecond) + .WithRepeatCount(sysSchedule.RunTimes)).ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup).Build(); + return trigger; + } + else + { + ITrigger trigger = TriggerBuilder.Create() + .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup) + .StartAt(sysSchedule.BeginTime.Value) + .EndAt(sysSchedule.EndTime.Value) + .WithSimpleSchedule(x => + x.WithIntervalInSeconds(sysSchedule.IntervalSecond) + .RepeatForever()).ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup).Build(); + return trigger; + } + // 触发作业立即运行,然后每10秒重复一次,无限循环 + + } + /// + /// 创建类型Cron的触发器 + /// + /// + /// + private ITrigger CreateCronTrigger(TasksQz sysSchedule) + { + // 作业触发器 + return TriggerBuilder.Create() + .WithIdentity(sysSchedule.Id.ToString(), sysSchedule.JobGroup) + .StartAt(sysSchedule.BeginTime.Value)//开始时间 + .EndAt(sysSchedule.EndTime.Value)//结束数据 + .WithCronSchedule(sysSchedule.Cron)//指定cron表达式 + .ForJob(sysSchedule.Id.ToString(), sysSchedule.JobGroup)//作业名称 + .Build(); + } + #endregion + + } +} diff --git a/New_College.Tests/Controller_Test/BlogController_Should.cs b/New_College.Tests/Controller_Test/BlogController_Should.cs new file mode 100644 index 0000000..5d803df --- /dev/null +++ b/New_College.Tests/Controller_Test/BlogController_Should.cs @@ -0,0 +1,70 @@ +using New_College.Common; +using New_College.Controllers; +using New_College.IServices; +using New_College.Model.Models; +using Moq; +using Xunit; +using System; +using Microsoft.Extensions.Logging; +using Autofac; + +namespace New_College.Tests +{ + public class BlogController_Should + { + Mock mockBlogSev = new Mock(); + Mock mockRedisMag = new Mock(); + Mock> mockLogger = new Mock>(); + BlogController blogController; + + private IBlogArticleServices blogArticleServices; + DI_Test dI_Test = new DI_Test(); + + + + public BlogController_Should() + { + mockBlogSev.Setup(r => r.Query()); + + + var container = dI_Test.DICollections(); + blogArticleServices = container.Resolve(); + blogController = new BlogController(blogArticleServices, mockLogger.Object); + } + + [Fact] + public void TestEntity() + { + BlogArticle blogArticle = new BlogArticle(); + + Assert.True(blogArticle.bID >= 0); + } + [Fact] + public async void GetBlogsTest() + { + object blogs =await blogController.Get(1); + + Assert.NotNull(blogs); + } + + [Fact] + public async void PostTest() + { + BlogArticle blogArticle = new BlogArticle() + { + bCreateTime = DateTime.Now, + bUpdateTime = DateTime.Now, + btitle = "xuint :test controller addEntity", + + }; + + var res = await blogController.Post(blogArticle); + + Assert.True(res.success); + + var data = res.response; + + Assert.NotNull(data); + } + } +} diff --git a/New_College.Tests/Controller_Test/LoginController_Should.cs b/New_College.Tests/Controller_Test/LoginController_Should.cs new file mode 100644 index 0000000..3064d31 --- /dev/null +++ b/New_College.Tests/Controller_Test/LoginController_Should.cs @@ -0,0 +1,74 @@ +using New_College.Controllers; +using New_College.IServices; +using Xunit; +using Autofac; +using New_College.AuthHelper; + +namespace New_College.Tests +{ + public class LoginController_Should + { + LoginController loginController; + + private readonly ISysUserInfoServices _sysUserInfoServices; + private readonly IUserRoleServices _userRoleServices; + private readonly IRoleServices _roleServices; + private readonly PermissionRequirement _requirement; + private readonly IRoleModulePermissionServices _roleModulePermissionServices; + + DI_Test dI_Test = new DI_Test(); + + + + public LoginController_Should() + { + var container = dI_Test.DICollections(); + _sysUserInfoServices = container.Resolve(); + _userRoleServices = container.Resolve(); + _roleServices = container.Resolve(); + _requirement = container.Resolve(); + _roleModulePermissionServices = container.Resolve(); + loginController = new LoginController(_sysUserInfoServices,_userRoleServices,_roleServices,_requirement, _roleModulePermissionServices); + } + + [Fact] + public void GetJwtStrTest() + { + var data = loginController.GetJwtStr("test", "test"); + + Assert.NotNull(data); + } + [Fact] + public void GetJwtStrForNuxtTest() + { + object blogs = loginController.GetJwtStrForNuxt("test", "test"); + + Assert.NotNull(blogs); + } + + [Fact] + public async void GetJwtToken3Test() + { + + var res = await loginController.GetJwtToken3("test", "test"); + + Assert.NotNull(res); + } + + [Fact] + public async void RefreshTokenTest() + { + var res = await loginController.RefreshToken("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoidGVzdCIsImp0aSI6IjgiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL2V4cGlyYXRpb24iOiIyMDE5LzEwLzE4IDIzOjI2OjQ5IiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiQWRtaW5UZXN0IiwibmJmIjoxNTcxNDA4ODA5LCJleHAiOjE1NzE0MTI0MDksImlzcyI6IkJsb2cuQ29yZSIsImF1ZCI6IndyIn0.oz-SPz6UCL78fM09bUecw5rmjcNYEY9dWGtuPs2gdBg"); + + Assert.NotNull(res); + } + + [Fact] + public void Md5PasswordTest() + { + var res = loginController.Md5Password("test"); + + Assert.NotNull(res); + } + } +} diff --git a/New_College.Tests/DependencyInjection/DI_Test.cs b/New_College.Tests/DependencyInjection/DI_Test.cs new file mode 100644 index 0000000..4704ed1 --- /dev/null +++ b/New_College.Tests/DependencyInjection/DI_Test.cs @@ -0,0 +1,193 @@ +using Autofac; +using Autofac.Extensions.DependencyInjection; +using Autofac.Extras.DynamicProxy; +using AutoMapper; +using New_College.AuthHelper; +using New_College.Common; +using New_College.Common.AppConfig; +using New_College.Common.DB; +using New_College.Common.LogHelper; +using New_College.IRepository.Base; +using New_College.IServices; +using New_College.Model.Seed; +using New_College.Repository.Base; +using New_College.Services; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.IdentityModel.Tokens; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Security.Claims; +using System.Text; +using Xunit; + +namespace New_College.Tests +{ + public class DI_Test + { + + [Fact] + public void DI_Connet_Test() + { + var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath; + + IServiceCollection services = new ServiceCollection(); + services.AddAutoMapper(typeof(Startup)); + + services.AddScoped(o => + { + return new SqlSugar.SqlSugarClient(new SqlSugar.ConnectionConfig() + { + ConnectionString = GetMainConnectionDb().Connection,//必填, 数据库连接字符串 + DbType = (SqlSugar.DbType)GetMainConnectionDb().DbType,//必填, 数据库类型 + IsAutoCloseConnection = true,//默认false, 时候知道关闭数据库连接, 设置为true无需使用using或者Close操作 + IsShardSameThread = true,//共享线程 + InitKeyType = SqlSugar.InitKeyType.SystemTable//默认SystemTable, 字段信息读取, 如:该属性是不是主键,标识列等等信息 + }); + }); + + //services.AddSingleton(new Appsettings(Env)); + + + //实例化 AutoFac 容器 + var builder = new ContainerBuilder(); + builder.RegisterType().As(); + + //指定已扫描程序集中的类型注册为提供所有其实现的接口。 + //var assemblysServices = Assembly.Load("New_College.Services"); + //builder.RegisterAssemblyTypes(assemblysServices).AsImplementedInterfaces(); + //var assemblysRepository = Assembly.Load("New_College.Repository"); + //builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces(); + + var servicesDllFile = Path.Combine(basePath, "New_College.Services.dll"); + var assemblysServices = Assembly.LoadFrom(servicesDllFile); + builder.RegisterAssemblyTypes(assemblysServices) + .AsImplementedInterfaces() + .InstancePerLifetimeScope() + .EnableInterfaceInterceptors(); + + var repositoryDllFile = Path.Combine(basePath, "New_College.Repository.dll"); + var assemblysRepository = Assembly.LoadFrom(repositoryDllFile); + builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces(); + + //将services填充到Autofac容器生成器中 + builder.Populate(services); + + //使用已进行的组件登记创建新容器 + var ApplicationContainer = builder.Build(); + + var blogservice = ApplicationContainer.Resolve(); + + Assert.True(ApplicationContainer.ComponentRegistry.Registrations.Count() > 0); + } + + + /// + /// 连接字符串 + /// New_College + /// + public static MutiDBOperate GetMainConnectionDb() + { + var mainConnetctDb = BaseDBConfig.MutiConnectionString.Item1.Find(x => x.ConnId == MainDb.CurrentDbConnId); + if (BaseDBConfig.MutiConnectionString.Item1.Count > 0) + { + if (mainConnetctDb == null) + { + mainConnetctDb = BaseDBConfig.MutiConnectionString.Item1[0]; + } + } + else + { + throw new Exception("请确保appsettigns.json中配置连接字符串,并设置Enabled为true;"); + } + + return mainConnetctDb; + } + + public IContainer DICollections() + { + var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath; + + IServiceCollection services = new ServiceCollection(); + services.AddAutoMapper(typeof(Startup)); + + services.AddSingleton(new Appsettings(basePath)); + services.AddSingleton(new LogLock(basePath)); + services.AddSingleton(); + services.AddScoped(); + services.AddScoped(); + + //读取配置文件 + var symmetricKeyAsBase64 = AppSecretConfig.Audience_Secret_String; + var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64); + var signingKey = new SymmetricSecurityKey(keyByteArray); + + + var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256); + + var permission = new List(); + + var permissionRequirement = new PermissionRequirement( + "/api/denied", + permission, + ClaimTypes.Role, + Appsettings.app(new string[] { "Audience", "Issuer" }), + Appsettings.app(new string[] { "Audience", "Audience" }), + signingCredentials,//签名凭据 + expiration: TimeSpan.FromSeconds(60 * 60)//接口的过期时间 + ); + services.AddSingleton(permissionRequirement); + + //【授权】 + services.AddAuthorization(options => + { + options.AddPolicy(Permissions.Name, + policy => policy.Requirements.Add(permissionRequirement)); + }); + + + + services.AddScoped(o => + { + return new SqlSugar.SqlSugarClient(new SqlSugar.ConnectionConfig() + { + ConnectionString = GetMainConnectionDb().Connection,//必填, 数据库连接字符串 + DbType = (SqlSugar.DbType)GetMainConnectionDb().DbType,//必填, 数据库类型 + IsAutoCloseConnection = true,//默认false, 时候知道关闭数据库连接, 设置为true无需使用using或者Close操作 + IsShardSameThread = true,//共享线程 + InitKeyType = SqlSugar.InitKeyType.SystemTable//默认SystemTable, 字段信息读取, 如:该属性是不是主键,标识列等等信息 + }); + }); + + //实例化 AutoFac 容器 + var builder = new ContainerBuilder(); + //builder.RegisterType().As(); + + //指定已扫描程序集中的类型注册为提供所有其实现的接口。 + + builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IBaseRepository<>)).InstancePerDependency();//注册仓储 + + + var servicesDllFile = Path.Combine(basePath, "New_College.Services.dll"); + var assemblysServices = Assembly.LoadFrom(servicesDllFile); + builder.RegisterAssemblyTypes(assemblysServices) + .AsImplementedInterfaces() + .InstancePerLifetimeScope() + .EnableInterfaceInterceptors(); + + var repositoryDllFile = Path.Combine(basePath, "New_College.Repository.dll"); + var assemblysRepository = Assembly.LoadFrom(repositoryDllFile); + builder.RegisterAssemblyTypes(assemblysRepository).AsImplementedInterfaces(); + + //将services填充到Autofac容器生成器中 + builder.Populate(services); + + //使用已进行的组件登记创建新容器 + var ApplicationContainer = builder.Build(); + + return ApplicationContainer; + } + } +} diff --git a/New_College.Tests/New_College.Tests.csproj b/New_College.Tests/New_College.Tests.csproj new file mode 100644 index 0000000..15964b1 --- /dev/null +++ b/New_College.Tests/New_College.Tests.csproj @@ -0,0 +1,37 @@ + + + + netcoreapp3.1 + + false + + + + + + + + + Always + PreserveNewest + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + diff --git a/New_College.Tests/Redis_Test/Redis_Should.cs b/New_College.Tests/Redis_Test/Redis_Should.cs new file mode 100644 index 0000000..12c7f29 --- /dev/null +++ b/New_College.Tests/Redis_Test/Redis_Should.cs @@ -0,0 +1,26 @@ +using Xunit; + +namespace New_College.Tests +{ + public class Redis_Should + { + DI_Test dI_Test = new DI_Test(); + + public Redis_Should() + { + //var container = dI_Test.DICollections(); + //_redisCacheManager = container.Resolve(); + + } + + [Fact] + public void Connect_Redis_Test() + { + + //var redisBlogCache = _redisCacheManager.Get("Redis.Blog"); + + //Assert.Null(redisBlogCache); + } + + } +} diff --git a/New_College.Tests/Repository_Test/Repository_Base_Should.cs b/New_College.Tests/Repository_Test/Repository_Base_Should.cs new file mode 100644 index 0000000..c1bb4fd --- /dev/null +++ b/New_College.Tests/Repository_Test/Repository_Base_Should.cs @@ -0,0 +1,81 @@ +using New_College.Model.Models; +using Xunit; +using System; +using System.Linq; +using Autofac; +using New_College.IRepository.Base; + +namespace New_College.Tests +{ + public class Repository_Base_Should + { + private IBaseRepository baseRepository; + DI_Test dI_Test = new DI_Test(); + + public Repository_Base_Should() + { + + var container = dI_Test.DICollections(); + + baseRepository = container.Resolve>(); + + //DbContext.Init(BaseDBConfig.ConnectionString,(DbType)BaseDBConfig.DbType); + } + + + [Fact] + public async void Get_Blogs_Test() + { + var data = await baseRepository.Query(); + + Assert.NotNull(data); + } + + [Fact] + public async void Add_Blog_Test() + { + BlogArticle blogArticle = new BlogArticle() + { + bCreateTime = DateTime.Now, + bUpdateTime = DateTime.Now, + btitle = "xuint test title", + bcontent = "xuint test content", + bsubmitter = "xuint: test repositoryBase add blog", + }; + + var BId = await baseRepository.Add(blogArticle); + Assert.True(BId > 0); + } + + + [Fact] + public async void Update_Blog_Test() + { + var IsUpd = false; + var updateModel = (await baseRepository.Query(d => d.btitle == "xuint test title")).FirstOrDefault(); + + Assert.NotNull(updateModel); + + updateModel.bcontent = "xuint: test repositoryBase content update"; + updateModel.bCreateTime = DateTime.Now; + updateModel.bUpdateTime = DateTime.Now; + + IsUpd = await baseRepository.Update(updateModel); + + Assert.True(IsUpd); + } + + [Fact] + public async void Delete_Blog_Test() + { + var IsDel = false; + var deleteModel = (await baseRepository.Query(d => d.btitle == "xuint test title")).FirstOrDefault(); + + Assert.NotNull(deleteModel); + + IsDel = await baseRepository.Delete(deleteModel); + + Assert.True(IsDel); + } + } +} diff --git a/New_College.Tests/Service_Test/BlogArticleService_Should.cs b/New_College.Tests/Service_Test/BlogArticleService_Should.cs new file mode 100644 index 0000000..d1f2d27 --- /dev/null +++ b/New_College.Tests/Service_Test/BlogArticleService_Should.cs @@ -0,0 +1,72 @@ +using New_College.IServices; +using New_College.Model.Models; +using Xunit; +using System; +using System.Linq; +using Autofac; + +namespace New_College.Tests +{ + public class BlogArticleService_Should + { + + private IBlogArticleServices blogArticleServices; + DI_Test dI_Test = new DI_Test(); + + + public BlogArticleService_Should() + { + //mockBlogRep.Setup(r => r.Query()); + + var container = dI_Test.DICollections(); + + blogArticleServices = container.Resolve(); + + } + + + [Fact] + public void BlogArticleServices_Test() + { + Assert.NotNull(blogArticleServices); + } + + + [Fact] + public async void Get_Blogs_Test() + { + var data = await blogArticleServices.GetBlogs(); + + Assert.True(data.Any()); + } + + [Fact] + public async void Add_Blog_Test() + { + BlogArticle blogArticle = new BlogArticle() + { + bCreateTime = DateTime.Now, + bUpdateTime = DateTime.Now, + btitle = "xuint test title", + bcontent = "xuint test content", + bsubmitter = "xuint test submitter", + }; + + var BId = await blogArticleServices.Add(blogArticle); + + Assert.True(BId > 0); + } + + [Fact] + public async void Delete_Blog_Test() + { + var deleteModel = (await blogArticleServices.Query(d => d.btitle == "xuint test title")).FirstOrDefault(); + + Assert.NotNull(deleteModel); + + var IsDel = await blogArticleServices.Delete(deleteModel); + + Assert.True(IsDel); + } + } +} diff --git a/New_College.Tests/appsettings.json b/New_College.Tests/appsettings.json new file mode 100644 index 0000000..f8ddfd2 --- /dev/null +++ b/New_College.Tests/appsettings.json @@ -0,0 +1,183 @@ +{ + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Warning" + } + }, + "Console": { + "LogLevel": { + "Default": "Warning", + "Microsoft.Hosting.Lifetime": "Debug" + } + }, + "Log4Net": { + "Name": "New_College" + } + }, + //"urls": "http://localhost:8081",// IIS 部署,注释掉 + "AllowedHosts": "*", + "AppSettings": { + "RedisCachingAOP": { + "Enabled": false, + "ConnectionString": "127.0.0.1:6319" + }, + "MemoryCachingAOP": { + "Enabled": true + }, + "LogAOP": { + "Enabled": false + }, + "TranAOP": { + "Enabled": false + }, + "SqlAOP": { + "Enabled": false + }, + "Date": "2018-08-28", + "SeedDBEnabled": true, //只生成表结构 + "SeedDBDataEnabled": true, //生成表,并初始化数据 + "Author": "New_College" + }, + + // 请配置MainDB为你想要的主库的ConnId值,并设置对应的Enabled为true; + // *** 单库操作,把 MutiDBEnabled 设为false ***; + // *** 多库操作,把 MutiDBEnabled 设为true,其他的从库Enabled也为true **; + // 具体配置看视频:https://www.bilibili.com/video/BV1BJ411B7mn?p=6 + + "MainDB": "WMBLOG_SQLITE", //当前项目的主库,所对应的连接字符串的Enabled必须为true + "MutiDBEnabled": false, //是否开启多库模式 + "CQRSEnabled": false, //是否开启读写分离模式,必须是单库模式,且数据库类型一致,比如都是SqlServer + "DBS": [ + /* + 对应下边的 DBType + MySql = 0, + SqlServer = 1, + Sqlite = 2, + Oracle = 3, + PostgreSQL = 4 + */ + { + "ConnId": "WMBLOG_SQLITE", + "DBType": 2, + "Enabled": true, + "HitRate": 50, // 值越大,优先级越高 + "Connection": "WMBlog.db" //sqlite只写数据库名就行 + }, + { + "ConnId": "WMBLOG_MSSQL_1", + "DBType": 1, + "Enabled": true, + "HitRate": 40, + "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "ProviderName": "System.Data.SqlClient" + }, + { + "ConnId": "WMBLOG_MSSQL_2", + "DBType": 1, + "Enabled": true, + "HitRate": 30, + "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "ProviderName": "System.Data.SqlClient" + }, + { + "ConnId": "WMBLOG_MYSQL", + "DBType": 0, + "Enabled": true, + "HitRate": 20, + "Connection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;" + }, + { + "ConnId": "WMBLOG_ORACLE", + "DBType": 3, + "Enabled": false, + "HitRate": 10, + "Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;", + "OracleConnection_other1": "User ID=sss;Password=789;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.65)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = orcl)))" + } + ], + "Audience": { + "Secret": "sdfsdfsrty45634kkhllghtdgdfss345t678fs", //不要太短,16位+ + "SecretFile": "C:\\my-file\\new_college.audience.secret.txt", //安全。内容就是Secret + "Issuer": "New_College", + "Audience": "wr" + }, + "Startup": { + "Cors": { + "IPs": "http://127.0.0.1:2364,http://localhost:2364,http://localhost:8080,http://localhost:8021,http://localhost:1818" + }, + "AppConfigAlert": { + "Enabled": true + }, + "ApiName": "New_College", + "IdentityServer4": { + "Enabled": false, // 这里默认是false,表示使用jwt,如果设置为true,则表示系统使用Ids4模式 + "AuthorizationUrl": "https://ids.neters.club", // 认证中心域名 + "ApiName": "new_college.api" // 资源服务器 + } + }, + "Middleware": { + "RequestResponseLog": { + "Enabled": false + }, + "IPLog": { + "Enabled": true + }, + "RecordAccessLogs": { + "Enabled": true + }, + "SignalR": { + "Enabled": false + }, + "QuartzNetJob": { + "Enabled": true + }, + "Consul": { + "Enabled": false + }, + "IpRateLimit": { + "Enabled": true + } + }, + "IpRateLimiting": { + "EnableEndpointRateLimiting": true, //False: globally executed, true: executed for each + "StackBlockedRequests": false, //False: Number of rejections should be recorded on another counter + "RealIpHeader": "X-Real-IP", + "ClientIdHeader": "X-ClientId", + "IpWhitelist": [], //白名单 + "EndpointWhitelist": [ "get:/api/xxx", "*:/api/yyy" ], + "ClientWhitelist": [ "dev-client-1", "dev-client-2" ], + "HttpStatusCode": 429, //返回状态码 + "GeneralRules": [ //api规则,结尾一定要带* + { + "Endpoint": "*:/api/blog*", + "Period": "1m", + "Limit": 20 + }, + { + "Endpoint": "*/api/*", + "Period": "1s", + "Limit": 3 + }, + { + "Endpoint": "*/api/*", + "Period": "1m", + "Limit": 30 + }, + { + "Endpoint": "*/api/*", + "Period": "12h", + "Limit": 500 + } + ] + + }, + "ConsulSetting": { + "ServiceName": "BlogCoreService", + "ServiceIP": "localhost", + "ServicePort": "8081", + "ServiceHealthCheck": "/healthcheck", + "ConsulAddress": "http://localhost:8500" + } +} diff --git a/New_College.sln b/New_College.sln new file mode 100644 index 0000000..7211122 --- /dev/null +++ b/New_College.sln @@ -0,0 +1,91 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.Api", "New_College.Api\New_College.Api.csproj", "{6F47A41A-085E-4422-BB73-5A2CBAA07D9F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.Model", "New_College.Model\New_College.Model.csproj", "{E725F0A1-0B03-406F-B84B-0F486C6137FC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.Repository", "New_College.Repository\New_College.Repository.csproj", "{8D651E7F-49D3-4D27-8486-ADCF000BB24D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.IServices", "New_College.IServices\New_College.IServices.csproj", "{37BB8600-94DA-4A2C-9230-DE93EA1EB0BD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.Services", "New_College.Services\New_College.Services.csproj", "{A2EFEFFC-39AD-48D2-8337-E6840B26023B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.Common", "New_College.Common\New_College.Common.csproj", "{97D32A49-994C-44C5-A167-51E71D173B6F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.FrameWork", "New_College.FrameWork\New_College.FrameWork.csproj", "{44A2006E-3EFC-4179-B400-866178C66556}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.Tests", "New_College.Tests\New_College.Tests.csproj", "{69A9CD28-39CE-415E-8150-A4A876E708FD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.Tasks", "New_College.Tasks\New_College.Tasks.csproj", "{F8E9FA1F-4079-4F62-B717-E389BC0014E8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.Extensions", "New_College.Extensions\New_College.Extensions.csproj", "{558F1B39-07E4-4FAB-BE7E-5B6104607064}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.ConsoleApp", "New_College.ConsoleApp\New_College.ConsoleApp.csproj", "{BB9FBBDF-B112-44F2-ABB7-9C31CFB619FE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "New_College.AdminMvc", "New_College.AdminMvc\New_College.AdminMvc.csproj", "{06D885F3-6352-4BF6-B826-DEA742DFFBD7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6F47A41A-085E-4422-BB73-5A2CBAA07D9F}.Release|Any CPU.Build.0 = Release|Any CPU + {E725F0A1-0B03-406F-B84B-0F486C6137FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E725F0A1-0B03-406F-B84B-0F486C6137FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E725F0A1-0B03-406F-B84B-0F486C6137FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E725F0A1-0B03-406F-B84B-0F486C6137FC}.Release|Any CPU.Build.0 = Release|Any CPU + {8D651E7F-49D3-4D27-8486-ADCF000BB24D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D651E7F-49D3-4D27-8486-ADCF000BB24D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D651E7F-49D3-4D27-8486-ADCF000BB24D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D651E7F-49D3-4D27-8486-ADCF000BB24D}.Release|Any CPU.Build.0 = Release|Any CPU + {37BB8600-94DA-4A2C-9230-DE93EA1EB0BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37BB8600-94DA-4A2C-9230-DE93EA1EB0BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37BB8600-94DA-4A2C-9230-DE93EA1EB0BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37BB8600-94DA-4A2C-9230-DE93EA1EB0BD}.Release|Any CPU.Build.0 = Release|Any CPU + {A2EFEFFC-39AD-48D2-8337-E6840B26023B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2EFEFFC-39AD-48D2-8337-E6840B26023B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2EFEFFC-39AD-48D2-8337-E6840B26023B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2EFEFFC-39AD-48D2-8337-E6840B26023B}.Release|Any CPU.Build.0 = Release|Any CPU + {97D32A49-994C-44C5-A167-51E71D173B6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97D32A49-994C-44C5-A167-51E71D173B6F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97D32A49-994C-44C5-A167-51E71D173B6F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97D32A49-994C-44C5-A167-51E71D173B6F}.Release|Any CPU.Build.0 = Release|Any CPU + {44A2006E-3EFC-4179-B400-866178C66556}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {44A2006E-3EFC-4179-B400-866178C66556}.Debug|Any CPU.Build.0 = Debug|Any CPU + {44A2006E-3EFC-4179-B400-866178C66556}.Release|Any CPU.ActiveCfg = Release|Any CPU + {44A2006E-3EFC-4179-B400-866178C66556}.Release|Any CPU.Build.0 = Release|Any CPU + {69A9CD28-39CE-415E-8150-A4A876E708FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69A9CD28-39CE-415E-8150-A4A876E708FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69A9CD28-39CE-415E-8150-A4A876E708FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69A9CD28-39CE-415E-8150-A4A876E708FD}.Release|Any CPU.Build.0 = Release|Any CPU + {F8E9FA1F-4079-4F62-B717-E389BC0014E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8E9FA1F-4079-4F62-B717-E389BC0014E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8E9FA1F-4079-4F62-B717-E389BC0014E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8E9FA1F-4079-4F62-B717-E389BC0014E8}.Release|Any CPU.Build.0 = Release|Any CPU + {558F1B39-07E4-4FAB-BE7E-5B6104607064}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {558F1B39-07E4-4FAB-BE7E-5B6104607064}.Debug|Any CPU.Build.0 = Debug|Any CPU + {558F1B39-07E4-4FAB-BE7E-5B6104607064}.Release|Any CPU.ActiveCfg = Release|Any CPU + {558F1B39-07E4-4FAB-BE7E-5B6104607064}.Release|Any CPU.Build.0 = Release|Any CPU + {BB9FBBDF-B112-44F2-ABB7-9C31CFB619FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB9FBBDF-B112-44F2-ABB7-9C31CFB619FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB9FBBDF-B112-44F2-ABB7-9C31CFB619FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB9FBBDF-B112-44F2-ABB7-9C31CFB619FE}.Release|Any CPU.Build.0 = Release|Any CPU + {06D885F3-6352-4BF6-B826-DEA742DFFBD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06D885F3-6352-4BF6-B826-DEA742DFFBD7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06D885F3-6352-4BF6-B826-DEA742DFFBD7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06D885F3-6352-4BF6-B826-DEA742DFFBD7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AB40D0C5-E3EA-4A9B-86C2-38F0BB33FC04} + EndGlobalSection +EndGlobal diff --git a/PaymentSDK/AliPay/AliPayConfig.cs b/PaymentSDK/AliPay/AliPayConfig.cs new file mode 100644 index 0000000..192bacc --- /dev/null +++ b/PaymentSDK/AliPay/AliPayConfig.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace PaymentSDK +{ + public static class AliPayConfig + { + public static string APP_ID { get; set; } + + public static string APP_PRIVATE_KEY { get; set; } + + public static string ALIPAY_PUBLIC_KEY { get; set; } + + public static string CHARSET { get; set; } + + public static string NotifyUrl { get; set; } + + } +} diff --git a/PaymentSDK/AliPay/AliPayHelper.cs b/PaymentSDK/AliPay/AliPayHelper.cs new file mode 100644 index 0000000..80cf9a8 --- /dev/null +++ b/PaymentSDK/AliPay/AliPayHelper.cs @@ -0,0 +1,35 @@ +using Aop.Api; +using Aop.Api.Domain; +using Aop.Api.Request; +using Aop.Api.Response; +using System; +using System.Collections.Generic; +using System.Text; + +namespace PaymentSDK +{ + public class AliPayHelper + { + + public string UnifiedOrder(AlipayTradeAppPayModel alipay) + { + IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", AliPayConfig.APP_ID, AliPayConfig.APP_PRIVATE_KEY, "json", "1.0", "RSA2", AliPayConfig.ALIPAY_PUBLIC_KEY, AliPayConfig.CHARSET, false); + // 实 例 化 具 体 API 对 应 的 request 类 , 类 名 称 和 接 口 名 称 对 应 , 当 前 调 用 接 口 名 称 如 : alipay .trade .app .pay + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest(); + // SDK 已 经 封 装 掉 了 公 共 参 数 , 这 里 只 需 要 传 入 业 务 参 数 。 以 下 方 法 为 sdk 的 model 入 参 方 式 ( model 和 biz_content 同 时 存 在 的 情 况 下 取 biz_content ) 。 + request.SetBizModel(alipay); + request.SetNotifyUrl(AliPayConfig.NotifyUrl); + // 这 里 和 普 通 的 接 口 调 用 不 同 , 使 用 的 是 sdkExecute + AlipayTradeAppPayResponse response = client.SdkExecute(request); + // HttpUtility .HtmlEncode 是 为 了 输 出 到 页 面 时 防 止 被 浏 览 器 将 关 键 参 数 html 转 义 , 实 际 打 印 到 日 志 以 及 http 传 输 不 会 有 这 个 问 题 + + // 页 面 输 出 的 response .Body 就 是 orderString 可 以 直 接 给 客 户 端 请 求 , 无 需 再 做 处 理 。 + return response.Body; + } + + + + + + } +} diff --git a/PaymentSDK/AliPay/AlipayConstants.cs b/PaymentSDK/AliPay/AlipayConstants.cs new file mode 100644 index 0000000..ef2d7cc --- /dev/null +++ b/PaymentSDK/AliPay/AlipayConstants.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Aop.Api +{ + public class AlipayConstants + { + public const string APP_ID = "app_id"; + public const string FORMAT = "format"; + public const string METHOD = "method"; + public const string TIMESTAMP = "timestamp"; + public const string VERSION = "version"; + public const string SIGN_TYPE = "sign_type"; + public const string ACCESS_TOKEN = "auth_token"; + public const string APP_AUTH_TOKEN = "app_auth_token"; + public const string TARGET_APP_ID = "target_app_id"; + public const string SIGN = "sign"; + public const string TERMINAL_TYPE = "terminal_type"; + public const string TERMINAL_INFO = "terminal_info"; + public const string PROD_CODE = "prod_code"; + public const string NOTIFY_URL = "notify_url"; + public const string CHARSET = "charset"; + public const string ENCRYPT_TYPE = "encrypt_type"; + public const string BIZ_CONTENT = "biz_content"; + public const string RETURN_URL = "return_url"; + public const string APP_CERT_SN = "app_cert_sn"; + public const string ALIPAY_CERT_SN = "alipay_cert_sn"; + public const string ALIPAY_ROOT_CERT_SN = "alipay_root_cert_sn"; + public const string ALIPAY_SDK = "alipay_sdk"; + + public const string RESPONSE_SUFFIX = "_response"; + public const string ERROR_RESPONSE = "error_response"; + public const string ENCRYPT_NODE_NAME = "response_encrypted"; + } +} diff --git a/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaClient.cs b/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaClient.cs new file mode 100644 index 0000000..329c84b --- /dev/null +++ b/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaClient.cs @@ -0,0 +1,249 @@ +using System; +using System.IO; +using System.Text; +using Aop.Api.Parser; +using Aop.Api.Util; +using System.Net; + +namespace Aop.Api +{ + public class AlipayMobilePublicMultiMediaClient : IAopClient + { + private string version; + private string format; + private string serverUrl; + private string appId; + private string privateKeyPem; + private string signType = "RSA"; + private string charset; + private bool keyFromFile = true; + + private WebUtils webUtils; + + public string Version + { + get { return version != null ? version : "1.0"; } + set { version = value; } + } + + public string Format + { + get { return format != null ? format : "json"; } + set { format = value; } + } + + //该构造函数默认从文件读取privateKey,privateKeyPem参数请指定私钥文件路径 + public AlipayMobilePublicMultiMediaClient(string serverUrl, string appId, string privateKeyPem, string format, string charset) + { + this.appId = appId; + this.privateKeyPem = privateKeyPem; + this.serverUrl = serverUrl; + this.webUtils = new WebUtils(); + this.format = format; + this.charset = charset; + } + + //当指定不从文件读取privateKey时(即指定keyFromFile=false),privateKeyPem参数可以直接传私钥字符串,此时私钥内容请清除-----BEGIN RSA PRIVATE KEY-----头和-----END RSA PRIVATE KEY-----尾 + public AlipayMobilePublicMultiMediaClient(string serverUrl, string appId, string privateKeyPem, bool keyFromFile, string format, string charset) + : this(serverUrl, appId, privateKeyPem, format, charset) + { + this.keyFromFile = keyFromFile; + } + + //该构造函数默认从文件读取privateKey,privateKeyPem参数请指定私钥文件路径 + public AlipayMobilePublicMultiMediaClient(string serverUrl, string appId, string privateKeyPem, string format, string charset, string version, string signType) + : this(serverUrl, appId, privateKeyPem, format, charset) + { + this.version = version; + this.signType = signType; + } + + //当指定不从文件读取privateKeyPem时(即指定keyFromFile=false),privateKeyPem参数可以直接传私钥字符串,此时私钥内容请清除-----BEGIN RSA PRIVATE KEY-----头和-----END RSA PRIVATE KEY-----尾 + public AlipayMobilePublicMultiMediaClient(string serverUrl, string appId, string privateKeyPem, bool keyFromFile, string format, string charset, string version, string signType) + : this(serverUrl, appId, privateKeyPem, keyFromFile, format, charset) + { + this.version = version; + this.signType = signType; + } + + public void SetTimeout(int timeout) + { + webUtils.Timeout = timeout; + } + + public T Execute(IAopRequest request) where T : AopResponse + { + return Execute(request, null); + } + + public T Execute(IAopRequest request, string accessToken) where T : AopResponse + { + + return Execute(request, accessToken, null); + } + + public T Execute(IAopRequest request, string accessToken, string appAuthToken) where T : AopResponse + { + AlipayMobilePublicMultiMediaDownloadRequest multiMediaDownloadRequest = ((AlipayMobilePublicMultiMediaDownloadRequest)request); + // 添加协议级请求参数 + AopDictionary txtParams = new AopDictionary(request.GetParameters()); + txtParams.Add(AlipayConstants.METHOD, request.GetApiName()); + txtParams.Add(AlipayConstants.VERSION, Version); + txtParams.Add(AlipayConstants.APP_ID, appId); + txtParams.Add(AlipayConstants.FORMAT, format); + txtParams.Add(AlipayConstants.TIMESTAMP, DateTime.Now); + txtParams.Add(AlipayConstants.ACCESS_TOKEN, accessToken); + txtParams.Add(AlipayConstants.SIGN_TYPE, signType); + txtParams.Add(AlipayConstants.TERMINAL_TYPE, request.GetTerminalType()); + txtParams.Add(AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo()); + txtParams.Add(AlipayConstants.PROD_CODE, request.GetProdCode()); + + if (!string.IsNullOrEmpty(appAuthToken)) + { + txtParams.Add(AlipayConstants.APP_AUTH_TOKEN, appAuthToken); + } + + + // 添加签名参数 + txtParams.Add(AlipayConstants.SIGN, AopUtils.SignAopRequest(txtParams, privateKeyPem, charset, keyFromFile, signType)); + + Stream outStream = multiMediaDownloadRequest.stream; + AopResponse rsp = DoGet(txtParams, outStream); + + return (T)rsp; + + } + + private AopResponse DoGet(AopDictionary parameters, Stream outStream) + { + AlipayMobilePublicMultiMediaDownloadResponse response = null; + + string url = this.serverUrl; + System.Console.WriteLine(url); + if (parameters != null && parameters.Count > 0) + { + if (url.Contains("?")) + { + url = url + "&" + WebUtils.BuildQuery(parameters, charset); + } + else + { + url = url + "?" + WebUtils.BuildQuery(parameters, charset); + } + } + + HttpWebRequest req = webUtils.GetWebRequest(url, "GET"); + req.ContentType = "application/x-www-form-urlencoded;charset=" + charset; + + HttpWebResponse rsp = (HttpWebResponse)req.GetResponse(); + if (rsp.StatusCode == HttpStatusCode.OK) + { + if (rsp.ContentType.ToLower().Contains("text/plain")) + { + Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet); + string body = webUtils.GetResponseAsString(rsp, encoding); + IAopParser tp = new AopJsonParser(); + response = tp.Parse(body, charset); + } + else + { + GetResponseAsStream(outStream, rsp); + response = new AlipayMobilePublicMultiMediaDownloadResponse(); + } + } + return response; + } + + /// + /// 把响应流转换为文本。 + /// + /// 响应流对象 + /// 编码方式 + /// 响应文本 + public void GetResponseAsStream(Stream outStream, HttpWebResponse rsp) + { + StringBuilder result = new StringBuilder(); + Stream stream = null; + StreamReader reader = null; + BinaryWriter writer = null; + + try + { + // 以字符流的方式读取HTTP响应 + stream = rsp.GetResponseStream(); + reader = new StreamReader(stream); + + writer = new BinaryWriter(outStream); + + //stream.CopyTo(outStream); + int length = Convert.ToInt32(rsp.ContentLength); + byte[] buffer = new byte[length]; + int rc = 0; + while ((rc = stream.Read(buffer, 0, length)) > 0) + { + outStream.Write(buffer, 0, rc); + } + outStream.Flush(); + outStream.Close(); + + } + finally + { + // 释放资源 + if (reader != null) reader.Close(); + if (stream != null) stream.Close(); + if (rsp != null) rsp.Close(); + } + } + + public T pageExecute(IAopRequest request) where T : AopResponse + { + throw new NotImplementedException(); + } + + public T pageExecute(IAopRequest request, string accessToken, string reqMethod) where T : AopResponse + { + throw new NotImplementedException(); + } + + public T pageExecute(IAopRequest request, string accessToken, string appAuthToken, string reqMethod) where T : AopResponse + { + throw new NotImplementedException(); + } + + public T SdkExecute(IAopRequest request) where T : AopResponse + { + throw new NotImplementedException(); + } + + public T SdkExecute(IAopRequest request, string appAuthToken) where T : AopResponse + { + throw new NotImplementedException(); + } + + public T CertificateExecute(IAopRequest request) where T : AopResponse + { + return CertificateExecute(request, null, null); + } + + public T CertificateExecute(IAopRequest request, string accessToken) where T : AopResponse + { + return CertificateExecute(request, accessToken, null); + } + + public T CertificateExecute(IAopRequest request, string accessToken, string appAuthToken) where T : AopResponse + { + throw new NotImplementedException(); + } + + public T Execute(IAopRequest request, string accessToken, string appAuthToken, string targetAppId) where T : AopResponse + { + throw new NotImplementedException(); + } + + public T CertificateExecute(IAopRequest request, string accessToken, string appAuthToken, string targetAppId) where T : AopResponse + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaDownloadRequest.cs b/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaDownloadRequest.cs new file mode 100644 index 0000000..0a90358 --- /dev/null +++ b/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaDownloadRequest.cs @@ -0,0 +1,117 @@ +using System.Collections.Generic; +using System.IO; + +namespace Aop.Api +{ + public class AlipayMobilePublicMultiMediaDownloadRequest : IAopRequest + { + + public string BizContent { get; set; } + public Stream stream { set; get; } + + #region IAopRequest Members + private string apiVersion = "1.0"; + private string terminalType; + private string terminalInfo; + private string prodCode; + private string notifyUrl; + private string returnUrl; + private bool needEncrypt = false; + private AopObject bizModel; + + public void SetNeedEncrypt(bool needEncrypt) + { + this.needEncrypt = needEncrypt; + } + + + public bool GetNeedEncrypt() + { + return this.needEncrypt; + } + + public void SetNotifyUrl(string notifyUrl) + { + this.notifyUrl = notifyUrl; + } + + public string GetNotifyUrl() + { + return this.notifyUrl; + } + + public void SetReturnUrl(string returnUrl) + { + this.returnUrl = returnUrl; + } + + public string GetReturnUrl() + { + return this.returnUrl; + } + + public void SetApiVersion(string apiVersion) + { + this.apiVersion = apiVersion; + } + + public string GetApiVersion() + { + return this.apiVersion; + } + + public void SetTerminalType(string terminalType) + { + this.terminalType = terminalType; + } + + public string GetTerminalType() + { + return this.terminalType; + } + + public void SetTerminalInfo(string terminalInfo) + { + this.terminalInfo = terminalInfo; + } + + public string GetTerminalInfo() + { + return this.terminalInfo; + } + + public void SetProdCode(string prodCode) + { + this.prodCode = prodCode; + } + + public string GetProdCode() + { + return this.prodCode; + } + + public string GetApiName() + { + return "alipay.mobile.public.multimedia.download"; + } + + public IDictionary GetParameters() + { + AopDictionary parameters = new AopDictionary(); + parameters.Add("biz_content", this.BizContent); + return parameters; + } + + public AopObject GetBizModel() + { + return this.bizModel; + } + + public void SetBizModel(AopObject bizModel) + { + this.bizModel = bizModel; + } + + #endregion + } +} diff --git a/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaDownloadResponse.cs b/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaDownloadResponse.cs new file mode 100644 index 0000000..0e266d2 --- /dev/null +++ b/PaymentSDK/AliPay/AlipayMobilePublicMultiMediaDownloadResponse.cs @@ -0,0 +1,9 @@ +namespace Aop.Api +{ + /// + /// AlipayMobilePublicMultiMediaDownloadResponse. + /// + public class AlipayMobilePublicMultiMediaDownloadResponse : AopResponse + { + } +} diff --git a/PaymentSDK/AliPay/AlipayOpenAppAlipaycertDownloadRequest.cs b/PaymentSDK/AliPay/AlipayOpenAppAlipaycertDownloadRequest.cs new file mode 100644 index 0000000..80c07c8 --- /dev/null +++ b/PaymentSDK/AliPay/AlipayOpenAppAlipaycertDownloadRequest.cs @@ -0,0 +1,111 @@ +using System.Collections.Generic; + +namespace Aop.Api +{ + public class AlipayOpenAppAlipaycertDownloadRequest : IAopRequest + { + public string BizContent { get; set; } + + private string apiVersion = "1.0"; + private string terminalType; + private string terminalInfo; + private string prodCode; + private string notifyUrl; + private string returnUrl; + private bool needEncrypt = false; + private AopObject bizModel; + + public void SetNeedEncrypt(bool needEncrypt) + { + this.needEncrypt = needEncrypt; + } + + + public bool GetNeedEncrypt() + { + return this.needEncrypt; + } + + public void SetNotifyUrl(string notifyUrl) + { + this.notifyUrl = notifyUrl; + } + + public string GetNotifyUrl() + { + return this.notifyUrl; + } + + public void SetReturnUrl(string returnUrl) + { + this.returnUrl = returnUrl; + } + + public string GetReturnUrl() + { + return this.returnUrl; + } + + public void SetApiVersion(string apiVersion) + { + this.apiVersion = apiVersion; + } + + public string GetApiVersion() + { + return this.apiVersion; + } + + public void SetTerminalType(string terminalType) + { + this.terminalType = terminalType; + } + + public string GetTerminalType() + { + return this.terminalType; + } + + public void SetTerminalInfo(string terminalInfo) + { + this.terminalInfo = terminalInfo; + } + + public string GetTerminalInfo() + { + return this.terminalInfo; + } + + public void SetProdCode(string prodCode) + { + this.prodCode = prodCode; + } + + public string GetProdCode() + { + return this.prodCode; + } + + public string GetApiName() + { + return "alipay.open.app.alipaycert.download"; + } + + public IDictionary GetParameters() + { + AopDictionary parameters = new AopDictionary(); + parameters.Add("biz_content", this.BizContent); + return parameters; + } + + public AopObject GetBizModel() + { + return this.bizModel; + } + + public void SetBizModel(AopObject bizModel) + { + this.bizModel = bizModel; + } + } +} diff --git a/PaymentSDK/AliPay/AlipayOpenAppAlipaycertDownloadResponse.cs b/PaymentSDK/AliPay/AlipayOpenAppAlipaycertDownloadResponse.cs new file mode 100644 index 0000000..f4eaebd --- /dev/null +++ b/PaymentSDK/AliPay/AlipayOpenAppAlipaycertDownloadResponse.cs @@ -0,0 +1,9 @@ +using System.Xml.Serialization; + +namespace Aop.Api +{ + public class AlipayOpenAppAlipaycertDownloadResponse : AopResponse + { + [XmlElement("alipay_cert_content")] public string AlipayCertContent { get; set; } + } +} diff --git a/PaymentSDK/AliPay/AopDictionary.cs b/PaymentSDK/AliPay/AopDictionary.cs new file mode 100644 index 0000000..4c9d71b --- /dev/null +++ b/PaymentSDK/AliPay/AopDictionary.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Collections; +using Aop.Api.Parser; +using Newtonsoft.Json; + +namespace Aop.Api +{ + /// + /// 符合AOP习惯的纯字符串字典结构。 + /// + public class AopDictionary : Dictionary + { + private const string DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + public AopDictionary() { } + + public AopDictionary(IDictionary dictionary) + : base(dictionary) + { } + + /// + /// 添加一个新的键值对。空键或者空值的键值对将会被忽略。 + /// + /// 键名称 + /// 键对应的值,目前支持:string, int, long, double, bool, DateTime类型 + public void Add(string key, object value) + { + string strValue; + + if (value == null) + { + strValue = null; + } + else if (value is string) + { + strValue = (string)value; + } + else if (value is Nullable) + { + Nullable dateTime = value as Nullable; + strValue = dateTime.Value.ToString(DATE_TIME_FORMAT); + } + else if (value is Nullable) + { + strValue = (value as Nullable).Value.ToString(); + } + else if (value is Nullable) + { + strValue = (value as Nullable).Value.ToString(); + } + else if (value is Nullable) + { + strValue = (value as Nullable).Value.ToString(); + } + else if (value is Nullable) + { + strValue = (value as Nullable).Value.ToString().ToLower(); + } + else if (value is ICollection) + { + AopModelParser parser = new AopModelParser(); + object jo = parser.serializeArrayValue(value as ICollection); + + JsonSerializerSettings jsetting = new JsonSerializerSettings(); + jsetting.NullValueHandling = NullValueHandling.Ignore; + strValue = JsonConvert.SerializeObject(jo, Formatting.None, jsetting); + } + else if (value is AopObject) + { + AopModelParser parser = new AopModelParser(); + object jo = parser.serializeAopObject(value as AopObject); + + JsonSerializerSettings jsetting = new JsonSerializerSettings(); + jsetting.NullValueHandling = NullValueHandling.Ignore; + strValue = JsonConvert.SerializeObject(jo, Formatting.None, jsetting); + } + else + { + strValue = value.ToString(); + } + + this.Add(key, strValue); + } + + public new void Add(string key, string value) + { + if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value)) + { + base.Add(key, value); + } + } + } +} diff --git a/PaymentSDK/AliPay/AopException.cs b/PaymentSDK/AliPay/AopException.cs new file mode 100644 index 0000000..11b8043 --- /dev/null +++ b/PaymentSDK/AliPay/AopException.cs @@ -0,0 +1,41 @@ +using System; +using System.Runtime.Serialization; + +namespace Aop.Api +{ + /// + /// AOP客户端异常。 + /// + public class AopException : Exception + { + public AopException() + { + } + + public AopException(string message) + : base(message) + { + } + + protected AopException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + + public AopException(string message, Exception innerException) + : base(message, innerException) + { + } + + public AopException(string errorCode, string errorMsg) + : base(errorCode + ":" + errorMsg) + { + this.ErrorCode = errorCode; + this.ErrorMsg = errorMsg; + } + + public string ErrorCode { get; set; } + + public string ErrorMsg { get; set; } + } +} diff --git a/PaymentSDK/AliPay/AopObject.cs b/PaymentSDK/AliPay/AopObject.cs new file mode 100644 index 0000000..823ad0f --- /dev/null +++ b/PaymentSDK/AliPay/AopObject.cs @@ -0,0 +1,12 @@ +using System; + +namespace Aop.Api +{ + /// + /// 基础对象。 + /// + [Serializable] + public abstract class AopObject + { + } +} diff --git a/PaymentSDK/AliPay/AopResponse.cs b/PaymentSDK/AliPay/AopResponse.cs new file mode 100644 index 0000000..fced561 --- /dev/null +++ b/PaymentSDK/AliPay/AopResponse.cs @@ -0,0 +1,79 @@ +using System; +using System.Xml.Serialization; + +namespace Aop.Api +{ + [Serializable] + public abstract class AopResponse + { + private string code; + private string msg; + private string subCode; + private string subMsg; + private string body; + + /// + /// 错误码 + /// 对应 ErrCode + /// + [XmlElement("code")] + public string Code + { + get { return code; } + set { code = value; } + } + + /// + /// 错误信息 + /// 对应 ErrMsg + /// + [XmlElement("msg")] + public string Msg + { + get { return msg; } + set { msg = value; } + } + + /// + /// 子错误码 + /// 对应 SubErrCode + /// + [XmlElement("sub_code")] + public string SubCode + { + get { return subCode; } + set { subCode = value; } + } + + /// + /// 子错误信息 + /// 对应 SubErrMsg + /// + [XmlElement("sub_msg")] + public string SubMsg + { + get { return subMsg; } + set { subMsg = value; } + } + + /// + /// 响应原始内容 + /// + public string Body + { + get { return body; } + set { body = value; } + } + + /// + /// 响应结果是否错误 + /// + public bool IsError + { + get + { + return !string.IsNullOrEmpty(this.SubCode); + } + } + } +} diff --git a/PaymentSDK/AliPay/CertParams.cs b/PaymentSDK/AliPay/CertParams.cs new file mode 100644 index 0000000..9d486d8 --- /dev/null +++ b/PaymentSDK/AliPay/CertParams.cs @@ -0,0 +1,20 @@ +namespace Aop.Api +{ + public class CertParams + { + /// + /// 商户证书储存本地路径 + /// + public string AppCertPath { get; set; } + + /// + /// 支付宝公钥证书储存本地路径 + /// + public string AlipayPublicCertPath { get; set; } + + /// + /// 支付宝根证书储存本地路径 + /// + public string RootCertPath { get; set; } + } +} \ No newline at end of file diff --git a/PaymentSDK/AliPay/DefaultAopClient.cs b/PaymentSDK/AliPay/DefaultAopClient.cs new file mode 100644 index 0000000..5f5e6d6 --- /dev/null +++ b/PaymentSDK/AliPay/DefaultAopClient.cs @@ -0,0 +1,853 @@ +using System; +using System.Collections.Generic; +using Aop.Api.Parser; +using Aop.Api.Util; +using System.Text; +using System.Web; +using Org.BouncyCastle.X509; +using Newtonsoft.Json; + +namespace Aop.Api +{ + /// + /// AOP客户端。 + /// + public class DefaultAopClient : IAopClient + { + private string version; + private string format; + private string serverUrl; + private string appId; + private string privateKeyPem; + private string signType = "RSA"; + private string charset; + private string alipayPublicKey; + private bool keyFromFile = false; + public string return_url; + + public string notify_url; + + /// + /// 当前SDK版本号,SDK打包发布时会自动修改该值 + /// + public const string SDK_VERSION = "alipay-sdk-net-4.3.0"; + + private CertEnvironment certEnvironment; + + private string encyptKey; + private string encyptType = "AES"; + + private WebUtils webUtils; + + public string Version + { + get { return version != null ? version : "1.0"; } + set { version = value; } + } + + public string Format + { + get { return format != null ? format : "json"; } + set { format = value; } + } + + public string AppId + { + get { return appId; } + set { appId = value; } + } + + + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem) + { + this.appId = appId; + this.privateKeyPem = privateKeyPem; + this.serverUrl = serverUrl; + this.webUtils = new WebUtils(); + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, bool keyFromFile) + { + this.appId = appId; + this.privateKeyPem = privateKeyPem; + this.serverUrl = serverUrl; + this.keyFromFile = keyFromFile; + this.webUtils = new WebUtils(); + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format) + { + this.appId = appId; + this.privateKeyPem = privateKeyPem; + this.serverUrl = serverUrl; + this.format = format; + this.webUtils = new WebUtils(); + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format, string charset) + : this(serverUrl, appId, privateKeyPem, format) + { + this.charset = charset; + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format, string version, string signType) + : this(serverUrl, appId, privateKeyPem) + { + this.format = format; + this.version = version; + this.signType = signType; + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format, string version, string signType, string alipayPulicKey) + : this(serverUrl, appId, privateKeyPem, format, version, signType) + { + this.alipayPublicKey = alipayPulicKey; + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format, string version, string signType, string alipayPulicKey, string charset) + : this(serverUrl, appId, privateKeyPem, format, version, signType, alipayPulicKey) + { + this.charset = charset; + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format, string version, string signType, string alipayPulicKey, string charset, bool keyFromFile) + : this(serverUrl, appId, privateKeyPem, format, version, signType, alipayPulicKey) + { + this.keyFromFile = keyFromFile; + this.charset = charset; + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format, string version, string signType, string charset, bool keyFromFile, CertParams certParams) + : this(serverUrl, appId, privateKeyPem, format, version, signType, null, charset, keyFromFile) + { + this.certEnvironment = new CertEnvironment(certParams, signType); + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format, string version, string signType, string alipayPulicKey, string charset, string encyptKey) + : this(serverUrl, appId, privateKeyPem, format, version, signType, alipayPulicKey, charset) + { + this.encyptKey = encyptKey; + this.encyptType = "AES"; + } + + public DefaultAopClient(string serverUrl, string appId, string privateKeyPem, string format, string version, string signType, string charset, string encyptKey, CertParams certParams) + : this(serverUrl, appId, privateKeyPem, format, version, signType, null, charset, encyptKey) + { + this.certEnvironment = new CertEnvironment(certParams, signType); + } + + public void SetTimeout(int timeout) + { + webUtils.Timeout = timeout; + } + + public T Execute(IAopRequest request) where T : AopResponse + { + return Execute(request, null); + } + + public T Execute(IAopRequest request, string accessToken) where T : AopResponse + { + + return Execute(request, accessToken, null); + } + + public T Execute(IAopRequest request, string accessToken, string appAuthToken) where T : AopResponse + { + return Execute(request, accessToken, appAuthToken, null); + } + + public T Execute(IAopRequest request, string accessToken, string appAuthToken, string targetAppId) where T : AopResponse + { + ArgumentValidator.EnsureNull(certEnvironment, "检测到证书相关参数已初始化,证书模式下请改为调用CertificateExecute。"); + + if (string.IsNullOrEmpty(this.charset)) + { + this.charset = "utf-8"; + } + + string apiVersion = null; + + if (!string.IsNullOrEmpty(request.GetApiVersion())) + { + apiVersion = request.GetApiVersion(); + } + else + { + apiVersion = Version; + } + + // 添加协议级请求参数 + AopDictionary txtParams = new AopDictionary(request.GetParameters()); + + // 序列化BizModel + txtParams = SerializeBizModel(txtParams, request); + + txtParams.Add(AlipayConstants.METHOD, request.GetApiName()); + txtParams.Add(AlipayConstants.VERSION, apiVersion); + txtParams.Add(AlipayConstants.ALIPAY_SDK, SDK_VERSION); + txtParams.Add(AlipayConstants.APP_ID, appId); + txtParams.Add(AlipayConstants.FORMAT, format); + txtParams.Add(AlipayConstants.TIMESTAMP, DateTime.Now); + txtParams.Add(AlipayConstants.ACCESS_TOKEN, accessToken); + txtParams.Add(AlipayConstants.SIGN_TYPE, signType); + txtParams.Add(AlipayConstants.TERMINAL_TYPE, request.GetTerminalType()); + txtParams.Add(AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo()); + txtParams.Add(AlipayConstants.PROD_CODE, request.GetProdCode()); + txtParams.Add(AlipayConstants.CHARSET, charset); + + + if (!string.IsNullOrEmpty(request.GetNotifyUrl())) + { + txtParams.Add(AlipayConstants.NOTIFY_URL, request.GetNotifyUrl()); + } + + if (!string.IsNullOrEmpty(appAuthToken)) + { + txtParams.Add(AlipayConstants.APP_AUTH_TOKEN, appAuthToken); + } + + if (!string.IsNullOrEmpty(targetAppId)) + { + txtParams.Add(AlipayConstants.TARGET_APP_ID, targetAppId); + } + + if (request.GetNeedEncrypt()) + { + + if (string.IsNullOrEmpty(txtParams[AlipayConstants.BIZ_CONTENT])) + { + + throw new AopException("api request Fail ! The reason: encrypt request is not supported!"); + } + + if (string.IsNullOrEmpty(this.encyptKey) || string.IsNullOrEmpty(this.encyptType)) + { + throw new AopException("encryptType or encryptKey must not null!"); + } + + if (!"AES".Equals(this.encyptType)) + { + throw new AopException("api only support Aes!"); + + } + + string encryptContent = AopUtils.AesEncrypt(this.encyptKey, txtParams[AlipayConstants.BIZ_CONTENT], this.charset); + txtParams.Remove(AlipayConstants.BIZ_CONTENT); + txtParams.Add(AlipayConstants.BIZ_CONTENT, encryptContent); + txtParams.Add(AlipayConstants.ENCRYPT_TYPE, this.encyptType); + } + + // 添加签名参数 + txtParams.Add(AlipayConstants.SIGN, AopUtils.SignAopRequest(txtParams, privateKeyPem, charset, this.keyFromFile, signType)); + + // 是否需要上传文件 + string body; + + + if (request is IAopUploadRequest) + { + IAopUploadRequest uRequest = (IAopUploadRequest)request; + IDictionary fileParams = AopUtils.CleanupDictionary(uRequest.GetFileParameters()); + body = webUtils.DoPost(this.serverUrl + "?" + AlipayConstants.CHARSET + "=" + this.charset, txtParams, fileParams, this.charset); + } + else + { + body = webUtils.DoPost(this.serverUrl + "?" + AlipayConstants.CHARSET + "=" + this.charset, txtParams, this.charset); + } + + T rsp; + IAopParser parser; + if ("xml".Equals(format)) + { + parser = new AopXmlParser(); + rsp = parser.Parse(body, charset); + } + else + { + parser = new AopJsonParser(); + rsp = parser.Parse(body, charset); + } + + ResponseParseItem item = ParseRespItem(request, body, parser, this.encyptKey, this.encyptType, charset); + rsp = parser.Parse(item.RealContent, charset); + + CheckResponseSign(request, item.RespContent, rsp.IsError, parser); + + return rsp; + } + + public T CertificateExecute(IAopRequest request) where T : AopResponse + { + return CertificateExecute(request, null); + } + + public T CertificateExecute(IAopRequest request, string accessToken) where T : AopResponse + { + + return CertificateExecute(request, accessToken, null); + } + + public T CertificateExecute(IAopRequest request, string accessToken, string appAuthToken) where T : AopResponse + { + return CertificateExecute(request, accessToken, appAuthToken, null); + } + + public T CertificateExecute(IAopRequest request, string accessToken, string appAuthToken, String targetAppId) where T : AopResponse + { + ArgumentValidator.CheckNotNull(certEnvironment, "检测到证书相关参数未初始化,非证书模式下请改为调用Execute。"); + + if (string.IsNullOrEmpty(this.charset)) + { + this.charset = "utf-8"; + } + + string apiVersion = null; + + if (!string.IsNullOrEmpty(request.GetApiVersion())) + { + apiVersion = request.GetApiVersion(); + } + else + { + apiVersion = Version; + } + + // 添加协议级请求参数 + AopDictionary txtParams = new AopDictionary(request.GetParameters()); + + // 序列化BizModel + txtParams = SerializeBizModel(txtParams, request); + + txtParams.Add(AlipayConstants.METHOD, request.GetApiName()); + txtParams.Add(AlipayConstants.VERSION, apiVersion); + txtParams.Add(AlipayConstants.ALIPAY_SDK, SDK_VERSION); + txtParams.Add(AlipayConstants.APP_ID, appId); + txtParams.Add(AlipayConstants.FORMAT, format); + txtParams.Add(AlipayConstants.TIMESTAMP, DateTime.Now); + txtParams.Add(AlipayConstants.ACCESS_TOKEN, accessToken); + txtParams.Add(AlipayConstants.SIGN_TYPE, signType); + txtParams.Add(AlipayConstants.TERMINAL_TYPE, request.GetTerminalType()); + txtParams.Add(AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo()); + txtParams.Add(AlipayConstants.PROD_CODE, request.GetProdCode()); + txtParams.Add(AlipayConstants.CHARSET, charset); + + txtParams.Add(AlipayConstants.APP_CERT_SN, certEnvironment.AppCertSN); + txtParams.Add(AlipayConstants.ALIPAY_ROOT_CERT_SN, certEnvironment.RootCertSN); + + + if (!string.IsNullOrEmpty(request.GetNotifyUrl())) + { + txtParams.Add(AlipayConstants.NOTIFY_URL, request.GetNotifyUrl()); + } + + if (!string.IsNullOrEmpty(appAuthToken)) + { + txtParams.Add(AlipayConstants.APP_AUTH_TOKEN, appAuthToken); + } + + if (!string.IsNullOrEmpty(targetAppId)) + { + txtParams.Add(AlipayConstants.TARGET_APP_ID, targetAppId); + } + + if (request.GetNeedEncrypt()) + { + if (string.IsNullOrEmpty(txtParams[AlipayConstants.BIZ_CONTENT])) + { + + throw new AopException("api request Fail ! The reason: encrypt request is not supported!"); + } + + if (string.IsNullOrEmpty(this.encyptKey) || string.IsNullOrEmpty(this.encyptType)) + { + throw new AopException("encryptType or encryptKey must not null!"); + } + + if (!"AES".Equals(this.encyptType)) + { + throw new AopException("api only support Aes!"); + + } + + string encryptContent = AopUtils.AesEncrypt(this.encyptKey, txtParams[AlipayConstants.BIZ_CONTENT], this.charset); + txtParams.Remove(AlipayConstants.BIZ_CONTENT); + txtParams.Add(AlipayConstants.BIZ_CONTENT, encryptContent); + txtParams.Add(AlipayConstants.ENCRYPT_TYPE, this.encyptType); + } + + // 添加签名参数 + txtParams.Add(AlipayConstants.SIGN, AopUtils.SignAopRequest(txtParams, privateKeyPem, charset, this.keyFromFile, signType)); + + // 是否需要上传文件 + string body; + + + if (request is IAopUploadRequest) + { + IAopUploadRequest uRequest = (IAopUploadRequest)request; + IDictionary fileParams = AopUtils.CleanupDictionary(uRequest.GetFileParameters()); + body = webUtils.DoPost(this.serverUrl + "?" + AlipayConstants.CHARSET + "=" + this.charset, txtParams, fileParams, this.charset); + } + else + { + body = webUtils.DoPost(this.serverUrl + "?" + AlipayConstants.CHARSET + "=" + this.charset, txtParams, this.charset); + } + + T rsp; + IAopParser parser; + if ("xml".Equals(format)) + { + parser = new AopXmlParser(); + rsp = parser.Parse(body, charset); + } + else + { + parser = new AopJsonParser(); + rsp = parser.Parse(body, charset); + } + + ResponseParseItem item = ParseRespItem(request, body, parser, this.encyptKey, this.encyptType, charset); + rsp = parser.Parse(item.RealContent, charset); + + + CheckResponseCertSign(request, item.RespContent, rsp.IsError, parser); + + return rsp; + } + + public T pageExecute(IAopRequest request) where T : AopResponse + { + return pageExecute(request, null, null, "POST"); + } + + + public T pageExecute(IAopRequest request, string accessToken, string reqMethod) where T : AopResponse + { + return pageExecute(request, accessToken, null, reqMethod); + } + + + public T pageExecute(IAopRequest request, string accessToken, string appAuthToken, string reqMethod) where T : AopResponse + { + if (string.IsNullOrEmpty(this.charset)) + { + this.charset = "utf-8"; + } + + string apiVersion = null; + + if (!string.IsNullOrEmpty(request.GetApiVersion())) + { + apiVersion = request.GetApiVersion(); + } + else + { + apiVersion = Version; + } + + AopDictionary txtParams = new AopDictionary(request.GetParameters()); + + // 序列化BizModel + txtParams = SerializeBizModel(txtParams, request); + + // 添加协议级请求参数 + txtParams.Add(AlipayConstants.METHOD, request.GetApiName()); + txtParams.Add(AlipayConstants.VERSION, apiVersion); + txtParams.Add(AlipayConstants.ALIPAY_SDK, SDK_VERSION); + txtParams.Add(AlipayConstants.APP_ID, appId); + txtParams.Add(AlipayConstants.FORMAT, format); + txtParams.Add(AlipayConstants.TIMESTAMP, DateTime.Now); + txtParams.Add(AlipayConstants.ACCESS_TOKEN, accessToken); + txtParams.Add(AlipayConstants.APP_AUTH_TOKEN, appAuthToken); + txtParams.Add(AlipayConstants.SIGN_TYPE, signType); + txtParams.Add(AlipayConstants.TERMINAL_TYPE, request.GetTerminalType()); + txtParams.Add(AlipayConstants.TERMINAL_INFO, request.GetTerminalInfo()); + txtParams.Add(AlipayConstants.PROD_CODE, request.GetProdCode()); + txtParams.Add(AlipayConstants.NOTIFY_URL, request.GetNotifyUrl()); + txtParams.Add(AlipayConstants.CHARSET, this.charset); + txtParams.Add(AlipayConstants.RETURN_URL, request.GetReturnUrl()); + if (certEnvironment != null) + { + txtParams.Add(AlipayConstants.ALIPAY_ROOT_CERT_SN, certEnvironment.RootCertSN); + txtParams.Add(AlipayConstants.APP_CERT_SN, certEnvironment.AppCertSN); + } + //字典排序 + IDictionary sortedTxtParams = new SortedDictionary(txtParams, StringComparer.Ordinal); + txtParams = new AopDictionary(sortedTxtParams); + + // 排序返回字典类型添加签名参数 + txtParams.Add(AlipayConstants.SIGN, AopUtils.SignAopRequest(sortedTxtParams, privateKeyPem, this.charset, this.keyFromFile, this.signType)); + + // 是否需要上传文件 + string body; + + if (request is IAopUploadRequest) + { + IAopUploadRequest uRequest = (IAopUploadRequest)request; + IDictionary fileParams = AopUtils.CleanupDictionary(uRequest.GetFileParameters()); + body = webUtils.DoPost(this.serverUrl + "?" + AlipayConstants.CHARSET + "=" + this.charset, txtParams, fileParams, this.charset); + } + else + { + + if (reqMethod.Equals("GET")) + { + //拼接get请求的url + string tmpUrl = serverUrl; + if (txtParams != null && txtParams.Count > 0) + { + if (tmpUrl.Contains("?")) + { + tmpUrl = tmpUrl + "&" + WebUtils.BuildQuery(txtParams, charset); + } + else + { + tmpUrl = tmpUrl + "?" + WebUtils.BuildQuery(txtParams, charset); + } + } + body = tmpUrl; + } + else + { + //输出post表单 + body = BuildHtmlRequest(txtParams, reqMethod, reqMethod); + } + } + + T rsp = null; + IAopParser parser = null; + if ("xml".Equals(format)) + { + parser = new AopXmlParser(); + rsp = parser.Parse(body, charset); + } + else + { + parser = new AopJsonParser(); + rsp = parser.Parse(body, charset); + } + + return rsp; + } + + private static ResponseParseItem ParseRespItem(IAopRequest request, string respBody, IAopParser parser, string encryptKey, string encryptType, string charset) where T : AopResponse + { + string realContent; + if (request.GetNeedEncrypt()) + { + realContent = parser.EncryptSourceData(request, respBody, encryptType, encryptKey, charset); + } + else + { + realContent = respBody; + } + + ResponseParseItem item = new ResponseParseItem + { + RealContent = realContent, + RespContent = respBody + }; + + return item; + + } + + private void CheckResponseCertSign(IAopRequest request, string responseBody, bool isError, IAopParser parser) where T : AopResponse + { + if (request.GetApiName().Equals("alipay.open.app.alipaycert.download")) + { + return; + } + + CertItem certItem = parser.GetCertItem(request, responseBody); + if (certItem == null) + { + throw new AopException("sign check fail: Body is Empty!"); + } + + if (!isError || (isError && !string.IsNullOrEmpty(certItem.Sign))) + { + + String currentAlipayPublicKey = LoadAlipayPublicKey(certItem); + + bool rsaCheckContent = AlipaySignature.RSACheckContent(certItem.SignSourceDate, certItem.Sign, currentAlipayPublicKey, charset, signType, false); + if (!rsaCheckContent) + { + if (!string.IsNullOrEmpty(certItem.SignSourceDate) && certItem.SignSourceDate.Contains("\\/")) + { + string sourceData = certItem.SignSourceDate.Replace("\\/", "/"); + bool jsonCheck = AlipaySignature.RSACheckContent(sourceData, certItem.Sign, currentAlipayPublicKey, charset, signType, false); + if (!jsonCheck) + { + throw new AopException("sign check fail: check Sign and Data Fail JSON also"); + } + } + else + { + throw new AopException("sign check fail: check Sign and Data Fail!"); + } + } + } + } + + private String LoadAlipayPublicKey(CertItem certItem) + { + //如果响应的支付宝公钥证书序号已经缓存过,则直接使用缓存的公钥 + if (certEnvironment.ContainsAlipayPublicKey(certItem.CertSN)) + { + return certEnvironment.GetAlipayPublicKey(certItem.CertSN); + } + + //否则重新下载新的支付宝公钥证书并更新缓存 + AlipayOpenAppAlipaycertDownloadRequest request = new AlipayOpenAppAlipaycertDownloadRequest + { + BizContent = "{\"alipay_cert_sn\":\"" + certItem.CertSN + "\"}" + }; + AlipayOpenAppAlipaycertDownloadResponse response = CertificateExecute(request); + if (response.IsError) + { + throw new AopException("支付宝公钥证书校验失败,请确认是否为支付宝签发的有效公钥证书"); + } + string alipayCertBase64 = response.AlipayCertContent; + byte[] alipayCertBytes = Convert.FromBase64String(alipayCertBase64); + string alipayCertContent = Encoding.UTF8.GetString(alipayCertBytes); + if (!AntCertificationUtil.IsTrusted(alipayCertContent, certEnvironment.RootCertContent)) + { + throw new AopException("支付宝公钥证书校验失败,请确认是否为支付宝签发的有效公钥证书"); + } + + X509Certificate alipayCert = AntCertificationUtil.ParseCert(alipayCertContent); + String alipayCertSN = AntCertificationUtil.GetCertSN(alipayCert); + string newAlipayPublicKey = AntCertificationUtil.ExtractPemPublicKeyFromCert(alipayCert); + certEnvironment.AddNewAlipayPublicKey(alipayCertSN, newAlipayPublicKey); + + return newAlipayPublicKey; + } + + private void CheckResponseSign(IAopRequest request, string responseBody, bool isError, IAopParser parser) where T : AopResponse + { + if (string.IsNullOrEmpty(alipayPublicKey) || string.IsNullOrEmpty(charset)) + { + return; + } + + SignItem signItem = parser.GetSignItem(request, responseBody); + if (signItem == null) + { + throw new AopException("sign check fail: Body is Empty!"); + } + + if (!isError || + (isError && !string.IsNullOrEmpty(signItem.Sign))) + { + bool rsaCheckContent = AlipaySignature.RSACheckContent(signItem.SignSourceDate, signItem.Sign, alipayPublicKey, charset, signType, keyFromFile); + if (!rsaCheckContent) + { + if (!string.IsNullOrEmpty(signItem.SignSourceDate) && signItem.SignSourceDate.Contains("\\/")) + { + string srouceData = signItem.SignSourceDate.Replace("\\/", "/"); + bool jsonCheck = AlipaySignature.RSACheckContent(srouceData, signItem.Sign, alipayPublicKey, charset, signType, keyFromFile); + if (!jsonCheck) + { + throw new AopException( + "sign check fail: check Sign and Data Fail JSON also"); + } + } + else + { + throw new AopException( + "sign check fail: check Sign and Data Fail!"); + } + } + + } + } + + public string BuildHtmlRequest(IDictionary sParaTemp, string strMethod, string strButtonValue) + { + //待请求参数数组 + IDictionary dicPara = new Dictionary(); + dicPara = sParaTemp; + + StringBuilder sbHtml = new StringBuilder(); + //sbHtml.Append(""); + + sbHtml.Append("

)}<`ZkCi)rr$tfYY$&o7*g1ZpI68nUdzq97 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ν6~lKd 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 z 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%0AW21( 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