init commit

This commit is contained in:
路 范
2021-12-16 17:38:37 +08:00
parent 13da2a4863
commit 974f910fad
1246 changed files with 480361 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,997 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
IIS configuration sections.
For schema documentation, see
%IIS_BIN%\config\schema\IIS_schema.xml.
Please make a backup of this file before making any changes to it.
NOTE: The following environment variables are available to be used
within this file and are understood by the IIS Express.
%IIS_USER_HOME% - The IIS Express home directory for the user
%IIS_SITES_HOME% - The default home directory for sites
%IIS_BIN% - The location of the IIS Express binaries
%SYSTEMDRIVE% - The drive letter of %IIS_BIN%
-->
<configuration>
<!--
The <configSections> section controls the registration of sections.
Section is the basic unit of deployment, locking, searching and
containment for configuration settings.
Every section belongs to one section group.
A section group is a container of logically-related sections.
Sections cannot be nested.
Section groups may be nested.
<section
name="" [Required, Collection Key] [XML name of the section]
allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
overrideModeDefault="Allow" [Allow|Deny] [Default delegation mode]
allowLocation="true" [true|false] [Allowed in location tags]
/>
The recommended way to unlock sections is by using a location tag:
<location path="Default Web Site" overrideMode="Allow">
<system.webServer>
<asp />
</system.webServer>
</location>
-->
<configSections>
<sectionGroup name="system.applicationHost">
<section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
</sectionGroup>
<sectionGroup name="system.webServer">
<section name="asp" overrideModeDefault="Deny" />
<section name="caching" overrideModeDefault="Allow" />
<section name="cgi" overrideModeDefault="Deny" />
<section name="defaultDocument" overrideModeDefault="Allow" />
<section name="directoryBrowse" overrideModeDefault="Allow" />
<section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="handlers" overrideModeDefault="Deny" />
<section name="httpCompression" overrideModeDefault="Allow" allowDefinition="Everywhere" />
<section name="httpErrors" overrideModeDefault="Allow" />
<section name="httpLogging" overrideModeDefault="Deny" />
<section name="httpProtocol" overrideModeDefault="Allow" />
<section name="httpRedirect" overrideModeDefault="Allow" />
<section name="httpTracing" overrideModeDefault="Deny" />
<section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
<section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
<section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
<section name="odbcLogging" overrideModeDefault="Deny" />
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Deny" />
<section name="basicAuthentication" overrideModeDefault="Deny" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="digestAuthentication" overrideModeDefault="Deny" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
<section name="windowsAuthentication" overrideModeDefault="Deny" />
</sectionGroup>
<section name="authorization" overrideModeDefault="Allow" />
<section name="ipSecurity" overrideModeDefault="Deny" />
<section name="dynamicIpSecurity" overrideModeDefault="Deny" />
<section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="requestFiltering" overrideModeDefault="Allow" />
</sectionGroup>
<section name="serverRuntime" overrideModeDefault="Deny" />
<section name="serverSideInclude" overrideModeDefault="Deny" />
<section name="staticContent" overrideModeDefault="Allow" />
<sectionGroup name="tracing">
<section name="traceFailedRequests" overrideModeDefault="Allow" />
<section name="traceProviderDefinitions" overrideModeDefault="Deny" />
</sectionGroup>
<section name="urlCompression" overrideModeDefault="Allow" />
<section name="validation" overrideModeDefault="Allow" />
<sectionGroup name="webdav">
<section name="globalSettings" overrideModeDefault="Deny" />
<section name="authoring" overrideModeDefault="Deny" />
<section name="authoringRules" overrideModeDefault="Deny" />
</sectionGroup>
<sectionGroup name="rewrite">
<section name="allowedServerVariables" overrideModeDefault="Deny" />
<section name="rules" overrideModeDefault="Allow" />
<section name="outboundRules" overrideModeDefault="Allow" />
<section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
<section name="providers" overrideModeDefault="Allow" />
<section name="rewriteMaps" overrideModeDefault="Allow" />
</sectionGroup>
<section name="webSocket" overrideModeDefault="Deny" />
<section name="aspNetCore" overrideModeDefault="Allow" />
</sectionGroup>
</configSections>
<configProtectedData>
<providers>
<add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
<add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA/HKxkz6alrlAPez0IUgujj/6k3WxCDriHp6jvpv3yEZmo7h6SMzGLxo4mTrIQVHSkB7tmElHKfUFTzE2BWF7nFWHY6Z6qmGBauFzwJMwESjril7Gjz69RBFH259HQ6aRDq9Xfx7U7H4HtdmnKNqGjgl/hwPQBGeIlWiDh+sYv3vKB0QU971tjX6H2B+9armlnC8UOuA6JYMDMI/VLLL16sng0fWAy5JYe0YVABVjiAWDW264RZW9Tr1Oax4qHZKg+SdjULxeOc2YmpX+d0yeITo1HkPF1hN1gHpIPIUDo05ilHUNfR3OkjVCIQK4cFKCq1s8NH+y+13MxUC4Fn1AlQ==" />
<add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAALmU8lTC+v2qtfQiiiquvvLpUQqKLEXs+jSKoWCM/uPhyB++k4dwug19mGidNK5FYiWK2KYE1yhjVJcbp12E98Q0R2nT7eBiCMY2JairxQ591rqABK7keGaIjwH7PwGzSpILl3RJ4YFvJ/7ZXEJxeDZIjW8ZxWVXx+/VyHs9U3WguLEkgMUX3jrxJi8LouxaIVPJAv/YQ1ZCWs8zImitxX/C/7o7yaIxznfsN5nGQzQfpUDPeby99aw2zPVTtZI2LaWIBON8guABvZ6JtJVDWmfdK6sodbnwdZkr6/Z2rfvamT1dC1SpQrGG7ulR/f9/GXvCaW10ZVKxekBF/CYlNMg==" />
</providers>
</configProtectedData>
<system.applicationHost>
<applicationPools>
<add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
<add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
<add name="Ewide.Web.Entry AppPool" managedRuntimeVersion="" />
<applicationPoolDefaults managedRuntimeVersion="v4.0">
<processModel loadUserProfile="true" setProfileEnvironment="false" />
</applicationPoolDefaults>
</applicationPools>
<!--
The <listenerAdapters> section defines the protocols with which the
Windows Process Activation Service (WAS) binds.
-->
<listenerAdapters>
<add name="http" />
</listenerAdapters>
<sites>
<site name="WebSite1" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:localhost" />
</bindings>
</site>
<site name="Ewide.Web.Entry" id="2">
<application path="/" applicationPool="Ewide.Web.Entry AppPool">
<virtualDirectory path="/" physicalPath="H:\在家办公2\ewide_core-master\ewide_core\Api\Ewide.Web.Entry" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:5566:localhost" />
</bindings>
</site>
<siteDefaults>
<!-- To enable logging, please change the below attribute "enabled" to "true" -->
<logFile logFormat="W3C" directory="%AppData%\Microsoft\IISExpressLogs" enabled="false" />
<traceFailedRequestsLogging directory="%AppData%\Microsoft" enabled="false" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
<webLimits />
</system.applicationHost>
<system.webServer>
<serverRuntime />
<asp scriptErrorSentToBrowser="true">
<cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
<limits />
</asp>
<caching enabled="true" enableKernelCache="true"></caching>
<cgi />
<defaultDocument enabled="true">
<files>
<add value="Default.htm" />
<add value="Default.asp" />
<add value="index.htm" />
<add value="index.html" />
<add value="iisstart.htm" />
<add value="default.aspx" />
</files>
</defaultDocument>
<directoryBrowse enabled="false" />
<fastCgi />
<!--
The <globalModules> section defines all native-code modules.
To enable a module, specify it in the <modules> section.
-->
<globalModules>
<add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
<add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
<add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
<add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
<add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
<add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
<add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
<add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
<add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
<add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
<add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
<add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
<add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
<add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
<add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
<add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
<add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
<add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
<add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
<add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
<add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
<add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
<add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
<add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
<add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
<add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
<add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
<add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
<!-- <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
<add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
<add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
<add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
<add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
<add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
<add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
<add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
<add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
<add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
<add name="AspNetCoreModule" image="%IIS_BIN%\aspnetcore.dll" />
<add name="AspNetCoreModuleV2" image="%IIS_BIN%\Asp.Net Core Module\V2\aspnetcorev2.dll" />
</globalModules>
<httpCompression directory="%TEMP%">
<scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/javascript" enabled="true" />
<add mimeType="application/atom+xml" enabled="true" />
<add mimeType="application/xaml+xml" enabled="true" />
<add mimeType="image/svg+xml" enabled="true" />
<add mimeType="*/*" enabled="false" />
</staticTypes>
</httpCompression>
<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
<error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
<error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
<error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
<error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
<error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
<error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
<error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
<error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
<error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
</httpErrors>
<httpLogging dontLog="false" />
<httpProtocol>
<customHeaders>
<clear />
<add name="X-Powered-By" value="ASP.NET" />
</customHeaders>
<redirectHeaders>
<clear />
</redirectHeaders>
</httpProtocol>
<httpRedirect enabled="false" />
<httpTracing />
<isapiFilters>
<filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
<filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
<filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
<filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
<filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
</isapiFilters>
<odbcLogging />
<security>
<access sslFlags="None" />
<applicationDependencies>
<application name="Active Server Pages" groupId="ASP" />
</applicationDependencies>
<authentication>
<anonymousAuthentication enabled="true" userName="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<digestAuthentication enabled="false" />
<iisClientCertificateMappingAuthentication enabled="false"></iisClientCertificateMappingAuthentication>
<windowsAuthentication enabled="false">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
<authorization>
<add accessType="Allow" users="*" />
</authorization>
<ipSecurity allowUnlisted="true" />
<isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
<add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
<add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
<add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
<add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
</isapiCgiRestriction>
<requestFiltering>
<fileExtensions allowUnlisted="true" applyToWebDAV="true">
<add fileExtension=".asa" allowed="false" />
<add fileExtension=".asax" allowed="false" />
<add fileExtension=".ascx" allowed="false" />
<add fileExtension=".master" allowed="false" />
<add fileExtension=".skin" allowed="false" />
<add fileExtension=".browser" allowed="false" />
<add fileExtension=".sitemap" allowed="false" />
<add fileExtension=".config" allowed="false" />
<add fileExtension=".cs" allowed="false" />
<add fileExtension=".csproj" allowed="false" />
<add fileExtension=".vb" allowed="false" />
<add fileExtension=".vbproj" allowed="false" />
<add fileExtension=".webinfo" allowed="false" />
<add fileExtension=".licx" allowed="false" />
<add fileExtension=".resx" allowed="false" />
<add fileExtension=".resources" allowed="false" />
<add fileExtension=".mdb" allowed="false" />
<add fileExtension=".vjsproj" allowed="false" />
<add fileExtension=".java" allowed="false" />
<add fileExtension=".jsl" allowed="false" />
<add fileExtension=".ldb" allowed="false" />
<add fileExtension=".dsdgm" allowed="false" />
<add fileExtension=".ssdgm" allowed="false" />
<add fileExtension=".lsad" allowed="false" />
<add fileExtension=".ssmap" allowed="false" />
<add fileExtension=".cd" allowed="false" />
<add fileExtension=".dsprototype" allowed="false" />
<add fileExtension=".lsaprototype" allowed="false" />
<add fileExtension=".sdm" allowed="false" />
<add fileExtension=".sdmDocument" allowed="false" />
<add fileExtension=".mdf" allowed="false" />
<add fileExtension=".ldf" allowed="false" />
<add fileExtension=".ad" allowed="false" />
<add fileExtension=".dd" allowed="false" />
<add fileExtension=".ldd" allowed="false" />
<add fileExtension=".sd" allowed="false" />
<add fileExtension=".adprototype" allowed="false" />
<add fileExtension=".lddprototype" allowed="false" />
<add fileExtension=".exclude" allowed="false" />
<add fileExtension=".refresh" allowed="false" />
<add fileExtension=".compiled" allowed="false" />
<add fileExtension=".msgx" allowed="false" />
<add fileExtension=".vsdisco" allowed="false" />
<add fileExtension=".rules" allowed="false" />
</fileExtensions>
<verbs allowUnlisted="true" applyToWebDAV="true" />
<hiddenSegments applyToWebDAV="true">
<add segment="web.config" />
<add segment="bin" />
<add segment="App_code" />
<add segment="App_GlobalResources" />
<add segment="App_LocalResources" />
<add segment="App_WebReferences" />
<add segment="App_Data" />
<add segment="App_Browsers" />
</hiddenSegments>
</requestFiltering>
</security>
<serverSideInclude ssiExecDisable="false" />
<staticContent lockAttributes="isDocFooterFileName">
<mimeMap fileExtension=".323" mimeType="text/h323" />
<mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
<mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
<mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
<mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
<mimeMap fileExtension=".aac" mimeType="audio/aac" />
<mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
<mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
<mimeMap fileExtension=".accde" mimeType="application/msaccess" />
<mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
<mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
<mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
<mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
<mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ai" mimeType="application/postscript" />
<mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
<mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
<mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
<mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
<mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
<mimeMap fileExtension=".art" mimeType="image/x-jg" />
<mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".asm" mimeType="text/plain" />
<mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
<mimeMap fileExtension=".au" mimeType="audio/basic" />
<mimeMap fileExtension=".avi" mimeType="video/avi" />
<mimeMap fileExtension=".axs" mimeType="application/olescript" />
<mimeMap fileExtension=".bas" mimeType="text/plain" />
<mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bmp" mimeType="image/bmp" />
<mimeMap fileExtension=".c" mimeType="text/plain" />
<mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
<mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
<mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
<mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
<mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
<mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
<mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
<mimeMap fileExtension=".cnf" mimeType="text/plain" />
<mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
<mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
<mimeMap fileExtension=".cpp" mimeType="text/plain" />
<mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
<mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
<mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
<mimeMap fileExtension=".csh" mimeType="application/x-csh" />
<mimeMap fileExtension=".css" mimeType="text/css" />
<mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
<mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dcr" mimeType="application/x-director" />
<mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
<mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
<mimeMap fileExtension=".dib" mimeType="image/bmp" />
<mimeMap fileExtension=".dir" mimeType="application/x-director" />
<mimeMap fileExtension=".disco" mimeType="text/xml" />
<mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
<mimeMap fileExtension=".dll.config" mimeType="text/xml" />
<mimeMap fileExtension=".dlm" mimeType="text/dlm" />
<mimeMap fileExtension=".doc" mimeType="application/msword" />
<mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
<mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<mimeMap fileExtension=".dot" mimeType="application/msword" />
<mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
<mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
<mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dtd" mimeType="text/xml" />
<mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
<mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
<mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
<mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".dxr" mimeType="application/x-director" />
<mimeMap fileExtension=".eml" mimeType="message/rfc822" />
<mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
<mimeMap fileExtension=".eps" mimeType="application/postscript" />
<mimeMap fileExtension=".esd" mimeType="application/vnd.ms-cab-compressed" />
<mimeMap fileExtension=".etx" mimeType="text/x-setext" />
<mimeMap fileExtension=".evy" mimeType="application/envoy" />
<mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
<mimeMap fileExtension=".exe.config" mimeType="text/xml" />
<mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
<mimeMap fileExtension=".fif" mimeType="application/fractals" />
<mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
<mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".flv" mimeType="video/x-flv" />
<mimeMap fileExtension=".gif" mimeType="image/gif" />
<mimeMap fileExtension=".glb" mimeType="model/gltf-binary" />
<mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
<mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
<mimeMap fileExtension=".h" mimeType="text/plain" />
<mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
<mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
<mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
<mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
<mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
<mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
<mimeMap fileExtension=".hta" mimeType="application/hta" />
<mimeMap fileExtension=".htc" mimeType="text/x-component" />
<mimeMap fileExtension=".htm" mimeType="text/html" />
<mimeMap fileExtension=".html" mimeType="text/html" />
<mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
<mimeMap fileExtension=".hxt" mimeType="text/html" />
<mimeMap fileExtension=".ico" mimeType="image/x-icon" />
<mimeMap fileExtension=".ics" mimeType="text/calendar" />
<mimeMap fileExtension=".ief" mimeType="image/ief" />
<mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
<mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
<mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
<mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
<mimeMap fileExtension=".jar" mimeType="application/java-archive" />
<mimeMap fileExtension=".java" mimeType="application/octet-stream" />
<mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
<mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
<mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
<mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
<mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
<mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
<mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
<mimeMap fileExtension=".js" mimeType="application/javascript" />
<mimeMap fileExtension=".json" mimeType="application/json" />
<mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
<mimeMap fileExtension=".jsx" mimeType="text/jscript" />
<mimeMap fileExtension=".latex" mimeType="application/x-latex" />
<mimeMap fileExtension=".less" mimeType="text/css" />
<mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
<mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
<mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
<mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
<mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
<mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
<mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
<mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
<mimeMap fileExtension=".m4v" mimeType="video/mp4" />
<mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
<mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
<mimeMap fileExtension=".map" mimeType="text/plain" />
<mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
<mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
<mimeMap fileExtension=".mht" mimeType="message/rfc822" />
<mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
<mimeMap fileExtension=".mid" mimeType="audio/mid" />
<mimeMap fileExtension=".midi" mimeType="audio/mid" />
<mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
<mimeMap fileExtension=".mno" mimeType="text/xml" />
<mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
<mimeMap fileExtension=".mov" mimeType="video/quicktime" />
<mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
<mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
<mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
<mimeMap fileExtension=".mp4" mimeType="video/mp4" />
<mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
<mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
<mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
<mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
<mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
<mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
<mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
<mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
<mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
<mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
<mimeMap fileExtension=".nws" mimeType="message/rfc822" />
<mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".oda" mimeType="application/oda" />
<mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
<mimeMap fileExtension=".ods" mimeType="application/oleobject" />
<mimeMap fileExtension=".oga" mimeType="audio/ogg" />
<mimeMap fileExtension=".ogg" mimeType="video/ogg" />
<mimeMap fileExtension=".ogv" mimeType="video/ogg" />
<mimeMap fileExtension=".one" mimeType="application/onenote" />
<mimeMap fileExtension=".onea" mimeType="application/onenote" />
<mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
<mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
<mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
<mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
<mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
<mimeMap fileExtension=".otf" mimeType="font/otf" />
<mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
<mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
<mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
<mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
<mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
<mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
<mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
<mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
<mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pdf" mimeType="application/pdf" />
<mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
<mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
<mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
<mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
<mimeMap fileExtension=".png" mimeType="image/png" />
<mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
<mimeMap fileExtension=".pnz" mimeType="image/png" />
<mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
<mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
<mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
<mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
<mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
<mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
<mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
<mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
<mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
<mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
<mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ps" mimeType="application/postscript" />
<mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
<mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
<mimeMap fileExtension=".qt" mimeType="video/quicktime" />
<mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
<mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
<mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
<mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
<mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
<mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
<mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
<mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
<mimeMap fileExtension=".rmi" mimeType="audio/mid" />
<mimeMap fileExtension=".roff" mimeType="application/x-troff" />
<mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
<mimeMap fileExtension=".rtf" mimeType="application/rtf" />
<mimeMap fileExtension=".rtx" mimeType="text/richtext" />
<mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
<mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
<mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
<mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
<mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
<mimeMap fileExtension=".sgml" mimeType="text/sgml" />
<mimeMap fileExtension=".sh" mimeType="application/x-sh" />
<mimeMap fileExtension=".shar" mimeType="application/x-shar" />
<mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
<mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
<mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
<mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
<mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
<mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
<mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
<mimeMap fileExtension=".snd" mimeType="audio/basic" />
<mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
<mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
<mimeMap fileExtension=".spx" mimeType="audio/ogg" />
<mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
<mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
<mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
<mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
<mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
<mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
<mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
<mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
<mimeMap fileExtension=".t" mimeType="application/x-troff" />
<mimeMap fileExtension=".tar" mimeType="application/x-tar" />
<mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
<mimeMap fileExtension=".tex" mimeType="application/x-tex" />
<mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
<mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
<mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
<mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
<mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tif" mimeType="image/tiff" />
<mimeMap fileExtension=".tiff" mimeType="image/tiff" />
<mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tr" mimeType="application/x-troff" />
<mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
<mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
<mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
<mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
<mimeMap fileExtension=".txt" mimeType="text/plain" />
<mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
<mimeMap fileExtension=".uls" mimeType="text/iuls" />
<mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
<mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
<mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
<mimeMap fileExtension=".vcs" mimeType="text/plain" />
<mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
<mimeMap fileExtension=".vml" mimeType="text/xml" />
<mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
<mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
<mimeMap fileExtension=".wasm" mimeType="application/wasm" />
<mimeMap fileExtension=".wav" mimeType="audio/wav" />
<mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
<mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
<mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".webm" mimeType="video/webm" />
<mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
<mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
<mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
<mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
<mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
<mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
<mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
<mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
<mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
<mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
<mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
<mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
<mimeMap fileExtension=".woff" mimeType="font/x-woff" />
<mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
<mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
<mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
<mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".wsdl" mimeType="text/xml" />
<mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
<mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
<mimeMap fileExtension=".x" mimeType="application/directx" />
<mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
<mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
<mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
<mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
<mimeMap fileExtension=".xdr" mimeType="text/plain" />
<mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
<mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
<mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
<mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
<mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
<mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
<mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
<mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
<mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
<mimeMap fileExtension=".xml" mimeType="text/xml" />
<mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
<mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
<mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
<mimeMap fileExtension=".xsd" mimeType="text/xml" />
<mimeMap fileExtension=".xsf" mimeType="text/xml" />
<mimeMap fileExtension=".xsl" mimeType="text/xml" />
<mimeMap fileExtension=".xslt" mimeType="text/xml" />
<mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
<mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
<mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
<mimeMap fileExtension=".z" mimeType="application/x-compress" />
<mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
</staticContent>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="ASP" verbosity="Verbose" />
<add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
<add provider="ISAPI Extension" verbosity="Verbose" />
<add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
</traceAreas>
<failureDefinitions statusCodes="200-999" />
</add>
</traceFailedRequests>
<traceProviderDefinitions>
<add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
<areas>
<clear />
<add name="Authentication" value="2" />
<add name="Security" value="4" />
<add name="Filter" value="8" />
<add name="StaticFile" value="16" />
<add name="CGI" value="32" />
<add name="Compression" value="64" />
<add name="Cache" value="128" />
<add name="RequestNotifications" value="256" />
<add name="Module" value="512" />
<add name="Rewrite" value="1024" />
<add name="FastCGI" value="4096" />
<add name="WebSocket" value="16384" />
<add name="ANCM" value="65536" />
</areas>
</add>
<add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
<areas>
<clear />
</areas>
</add>
<add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
<areas>
<clear />
</areas>
</add>
<add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
<areas>
<add name="Infrastructure" value="1" />
<add name="Module" value="2" />
<add name="Page" value="4" />
<add name="AppServices" value="8" />
</areas>
</add>
</traceProviderDefinitions>
</tracing>
<urlCompression />
<validation />
<webdav>
<globalSettings>
<propertyStores>
<add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
</propertyStores>
<lockStores>
<add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
</lockStores>
</globalSettings>
<authoring>
<locks enabled="true" lockStore="webdav_simple_lock" />
</authoring>
<authoringRules />
</webdav>
<webSocket />
<applicationInitialization />
</system.webServer>
<location path="" overrideMode="Allow">
<system.webServer>
<modules>
<add name="IsapiFilterModule" lockItem="true" />
<add name="BasicAuthenticationModule" lockItem="true" />
<add name="IsapiModule" lockItem="true" />
<add name="HttpLoggingModule" lockItem="true" />
<add name="DynamicCompressionModule" lockItem="true" />
<add name="StaticCompressionModule" lockItem="true" />
<add name="DefaultDocumentModule" lockItem="true" />
<add name="DirectoryListingModule" lockItem="true" />
<add name="ProtocolSupportModule" lockItem="true" />
<add name="HttpRedirectionModule" lockItem="true" />
<add name="ServerSideIncludeModule" lockItem="true" />
<add name="StaticFileModule" lockItem="true" />
<add name="AnonymousAuthenticationModule" lockItem="true" />
<add name="CertificateMappingAuthenticationModule" lockItem="true" />
<add name="UrlAuthorizationModule" lockItem="true" />
<add name="WindowsAuthenticationModule" lockItem="true" />
<add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
<add name="WebMatrixSupportModule" lockItem="true" />
<add name="IpRestrictionModule" lockItem="true" />
<add name="DynamicIpRestrictionModule" lockItem="true" />
<add name="RequestFilteringModule" lockItem="true" />
<add name="CustomLoggingModule" lockItem="true" />
<add name="CustomErrorModule" lockItem="true" />
<add name="FailedRequestsTracingModule" lockItem="true" />
<add name="CgiModule" lockItem="true" />
<add name="FastCgiModule" lockItem="true" />
<!-- <add name="WebDAVModule" /> -->
<add name="RewriteModule" />
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
<add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
<add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
<add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
<add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
<add name="ApplicationInitializationModule" lockItem="true" />
<add name="WebSocketModule" lockItem="true" />
<add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ConfigurationValidationModule" lockItem="true" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
<add name="AspNetCoreModule" lockItem="true" />
<add name="AspNetCoreModuleV2" lockItem="true" />
</modules>
<handlers accessPolicy="Read, Script">
<!-- <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
<add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
<add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
<add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
<add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
<add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
<add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
<add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
<add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
<add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
<add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
<add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
<add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
<add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
<add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
<add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
</location>
<location path="Ewide.Web.Entry" inheritInChildApplications="false">
<system.webServer>
<modules>
<remove name="WebMatrixSupportModule" />
</modules>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" stdoutLogEnabled="false" hostingModel="InProcess" startupTimeLimit="3600" requestTimeout="23:00:00" />
<httpCompression>
<dynamicTypes>
<add mimeType="text/event-stream" enabled="false" />
</dynamicTypes>
</httpCompression>
</system.webServer>
</location>
</configuration>

Binary file not shown.

View File

@@ -0,0 +1,52 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Ewide.Application
{
[Table("bs_house_code")]
[Comment("房屋编码表")]
public class BsHouseCode : Core.DEntityBase
{
[Comment("系统中唯一的房屋编码,生成即不再变更")]
[MaxLength(50)]
[Required]
public string HouseCode { get; set; }
[Comment("编号")]
[MaxLength(3)]
[Required]
public int No { get; set; }
[Comment("项目ID")]
[MaxLength(36)]
[Required]
public string ProjectId { get; set; }
[Comment("片区ID")]
[MaxLength(36)]
[Required]
public string ZoneId { get; set; }
[Comment("详细地址")]
[MaxLength(500)]
[Required]
public string Address { get; set; }
[Comment("性质")]
[Required]
public int Type { get; set; }
[Comment("所属行业")]
[Required]
public int Industry { get; set; }
[Comment("坐标-经度")]
[MaxLength(50)]
public string Lng { get; set; }
[Comment("坐标-纬度")]
[MaxLength(50)]
public string Lat { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
[Table("bs_house_company")]
[Comment("房屋相关单位表")]
public class BsHouseCompany : Core.DEntityBase
{
/// <summary>
/// 单位类型,多选
/// </summary>
[Comment("单位类型,多选")]
[MaxLength(20)]
public string Type { get; set; }
/// <summary>
/// 单位名称
/// </summary>
[Comment("单位名称")]
[MaxLength(200)]
public string Name { get; set; }
/// <summary>
/// 信息
/// </summary>
[Comment("信息")]
public string Info { get; set; }
}
}

View File

@@ -0,0 +1,378 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
[Table("bs_house_info")]
[Comment("房屋信息表")]
public class BsHouseInfo : Core.DEntityBase
{
/// <summary>
/// HouseCode主键ID
/// </summary>
[Comment("bs_house_code主键Id")]
[MaxLength(36)]
[Required]
public string HouseCodeId { get; set; }
/// <summary>
/// 幢名称
/// </summary>
[Comment("幢名称")]
[MaxLength(255)]
public string BuildingName { get; set; }
/// <summary>
/// 土地性质
/// </summary>
[Comment("土地性质")]
public int? LandAttribute { get; set; }
/// <summary>
/// 结构类型
/// </summary>
[Comment("结构类型")]
public int? StructureType { get; set; }
/// <summary>
/// 基础情况
/// </summary>
[Comment("基础情况")]
public int? BaseInfo { get; set; }
/// <summary>
/// 抗震等级
/// </summary>
[Comment("抗震等级")]
public int? SeismicGrade { get; set; }
/// <summary>
/// 竣工日期
/// </summary>
[Comment("竣工日期")]
public DateTime? CompletedDate { get; set; }
/// <summary>
/// 设计使用年限
/// </summary>
[Comment("设计使用年限")]
public int? UsefulYear { get; set; }
/// <summary>
/// 总层数
/// </summary>
[Comment("总层数")]
public int? TotalFloor { get; set; }
/// <summary>
/// 地上层数
/// </summary>
[Comment("地上层数")]
public int? LandFloorCount { get; set; }
/// <summary>
/// 地上商业层数开始
/// </summary>
[Comment("地上商业层数开始")]
public int? LandBsFloorStart { get; set; }
/// <summary>
/// 地上商业层数结束
/// </summary>
[Comment("地上商业层数结束")]
public int? LandBsFloorEnd { get; set; }
/// <summary>
/// 地上车棚层开始
/// </summary>
[Comment("地上车棚层开始")]
public int? LandBikeFloorStart { get; set; }
/// <summary>
/// 地上住宅层开始
/// </summary>
[Comment("地上住宅层开始")]
public int? LandResidenceFloorStart { get; set; }
/// <summary>
/// 地上住宅层结束
/// </summary>
[Comment("地上住宅层结束")]
public int? LandResidenceFloorEnd { get; set; }
/// <summary>
/// 地下层数
/// </summary>
[Comment("地下层数")]
public int? UnderFloorCount { get; set; }
/// <summary>
/// 总建筑面积
/// </summary>
[Comment("总建筑面积")]
public float? TotalArea { get; set; }
/// <summary>
/// 有无建筑幕墙
/// </summary>
[Comment("有无建筑幕墙")]
public int? CurtainWall { get; set; }
/// <summary>
/// 有无面砖
/// </summary>
[Comment("有无面砖")]
public int? FaceBrick { get; set; }
/// <summary>
/// 有无涂料
/// </summary>
[Comment("有无涂料")]
public int? Coating { get; set; }
/// <summary>
/// 有无粉刷
/// </summary>
[Comment("有无粉刷")]
public int? Painting { get; set; }
/// <summary>
/// 电梯
/// </summary>
[Comment("电梯")]
[MaxLength(20)]
public string Elevator { get; set; }
/// <summary>
/// 总户数(户)
/// </summary>
[Comment("总户数(户)")]
public int? HouseHolds { get; set; }
/// <summary>
/// 房屋单元数
/// </summary>
[Comment("房屋单元数")]
public int? Units { get; set; }
/// <summary>
/// 各单元每层户数(户)
/// </summary>
[Comment("各单元每层户数(户)")]
public int? UnitFloorHolds { get; set; }
/// <summary>
/// 建设单位ID
/// </summary>
[Comment("建设单位ID")]
[MaxLength(36)]
public string BuildingUnitId { get; set; }
/// <summary>
/// 设计单位ID
/// </summary>
[Comment("设计单位ID")]
[MaxLength(36)]
public string DesingerUnitId { get; set; }
/// <summary>
/// 施工单位ID
/// </summary>
[Comment("施工单位ID")]
[MaxLength(36)]
public string ConstructionUnitId { get; set; }
/// <summary>
/// 监理单位ID
/// </summary>
[Comment("监理单位ID")]
[MaxLength(36)]
public string MonitorUnitId { get; set; }
/// <summary>
/// 产权性质
/// </summary>
[Comment("产权性质")]
[MaxLength(100)]
public string PropertyRights { get; set; }
/// <summary>
/// 总共套数
/// </summary>
[Comment("总共套数")]
public int? HouseCount { get; set; }
/// <summary>
/// 直管公房套数
/// </summary>
[Comment("直管公房套数")]
public int? StraightHouseCount { get; set; }
/// <summary>
/// 自管公房套数
/// </summary>
[Comment("自管公房套数")]
public int? SelfHouseCount { get; set; }
/// <summary>
/// 私房套数
/// </summary>
[Comment("私房套数")]
public int? PrivateHouseCount { get; set; }
/// <summary>
/// 商品房套数
/// </summary>
[Comment("商品房套数")]
public int? BusinessCount { get; set; }
/// <summary>
/// 房改房套数
/// </summary>
[Comment("房改房套数")]
public int? ChangeHouseCount { get; set; }
/// <summary>
/// 拆迁安置房套数
/// </summary>
[Comment("拆迁安置房套数")]
public int? ResettlementHouseCount { get; set; }
/// <summary>
/// 其它套数
/// </summary>
[Comment("其它套数")]
public int? OtherCount { get; set; }
/// <summary>
/// 产权单位ID
/// </summary>
[Comment("产权单位ID")]
[MaxLength(36)]
public string PropertyUnitId { get; set; }
/// <summary>
/// 物业单位ID
/// </summary>
[Comment("物业单位ID")]
[MaxLength(36)]
public string WuYeUnitId { get; set; }
/// <summary>
/// 图纸资料存档处
/// </summary>
[Comment("图纸资料存档处")]
[MaxLength(50)]
public string DrawingMaterial { get; set; }
/// <summary>
/// 其他图纸存档
/// </summary>
[Comment("其他图纸存档")]
[MaxLength(100)]
public string DrawingMaterialText { get; set; }
/// <summary>
/// 立项文件
/// </summary>
[Comment("立项文件")]
[MaxLength(2000)]
public string AnEntryDocument { get; set; }
/// <summary>
/// 规划许可
/// </summary>
[Comment("规划许可")]
[MaxLength(2000)]
public string PlanningPermission { get; set; }
/// <summary>
/// 竣工验收备案
/// </summary>
[Comment("竣工验收备案")]
[MaxLength(2000)]
public string CompletionRecord { get; set; }
/// <summary>
/// 监理资料
/// </summary>
[Comment("监理资料")]
[MaxLength(2000)]
public string MonitorDocument { get; set; }
/// <summary>
/// 鉴定报告
/// </summary>
[Comment("鉴定报告")]
[MaxLength(2000)]
public string IdentificationReport { get; set; }
/// <summary>
/// 其它资料
/// </summary>
[Comment("其它资料")]
[MaxLength(2000)]
public string OtherDocument { get; set; }
/// <summary>
/// 外立面照片
/// </summary>
[Comment("外立面照片")]
[MaxLength(2000)]
public string FacadePhoto { get; set; }
/// <summary>
/// 房屋等级 1,2,3,4,C,d
/// </summary>
[Comment("房屋等级 1,2,3,4,C,d")]
public int? HouseGrade { get; set; }
/// <summary>
/// 房屋使用状态
/// </summary>
[Comment("房屋使用状态")]
public int? HouseUsedStatus { get; set; }
/// <summary>
/// -1 退回(审核被退回的数据) 1、待建档需要建档的数据未暂存未保存的2、暂存点击了暂存的数据3、待提交点击了保存的数据 5、审核中6、审核通过
/// </summary>
[Comment("-1 退回(审核被退回的数据) 1、待建档需要建档的数据未暂存未保存的2、暂存点击了暂存的数据3、待提交点击了保存的数据 5、审核中6、审核通过")]
[Required]
public int State { get; set; }
/// <summary>
/// 调查登记机构
/// </summary>
[Comment("调查登记机构")]
[MaxLength(100)]
public string InvestigateAgency { get; set; }
/// <summary>
/// 纸质资料调查人
/// </summary>
[Comment("纸质资料调查人")]
[MaxLength(50)]
public string InvestigateUser { get; set; }
/// <summary>
/// 纸质资料审核人
/// </summary>
[Comment("纸质资料审核人")]
[MaxLength(50)]
public string OfflineAuditor { get; set; }
/// <summary>
/// 主管部门
/// </summary>
[Comment("主管部门")]
[MaxLength(50)]
public string CompetentDepartment { get; set; }
}
}

View File

@@ -0,0 +1,46 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
[Table("bs_house_log")]
[Comment("房屋流转日志")]
public class BsHouseLog : Core.DEntityBase
{
[Comment("房屋编码Id")]
[MaxLength(36)]
public string HouseCodeId { get; set; }
[Comment("目标处理人Id可多个")]
public string TargetUserIds { get; set; }
[Comment("步骤类型")]
public HouseLogType Type { get; set; }
[Comment("状态")]
public HouseLogStatus Status { get; set; }
[Comment("备注信息")]
public string Remark { get; set; }
[Comment("完成时间")]
public DateTime? FinishedTime { get; set; }
[Comment("完成者Id")]
[MaxLength(36)]
public string FinishedUserId { get; set; }
[Comment("完成者名称")]
[MaxLength(20)]
public string FinishedUserName { get; set; }
[Comment("排序")]
public int Sort { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
[Table("bs_house_member_relation")]
[Comment("房屋与人员关联表")]
public class BsHouseMemberRelation : Core.DEntityBase
{
[Comment("sys_user主键Id")]
[MaxLength(36)]
[Required]
public string SysUserId { get; set; }
[Comment("bs_house_code主键Id")]
[MaxLength(36)]
[Required]
public string HouseCodeId { get; set; }
}
}

View File

@@ -0,0 +1,38 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Entity
{
[Table("bs_house_projectinfo")]
[Comment("项目表")]
public class BsHouseProjectInfo : Core.DEntityBase
{
[Comment("名称")]
[MaxLength(100)]
[Required]
public string Name { get; set; }
[Comment("备注")]
[MaxLength(1000)]
public string Note { get; set; }
[Comment("排序")]
[Required]
public int Sort { get; set; }
[Comment("区域ID")]
[MaxLength(36)]
[Required]
public string AreaCode { get; set; }
[Comment("类型")]
[Required]
public int Type { get; set; }
}
}

View File

@@ -0,0 +1,266 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Ewide.Application
{
[Table("bs_house_task")]
[Comment("房屋巡查任务表")]
public class BsHouseTask : Core.DEntityBase
{
/// <summary>
/// bs_house_code主键Id
/// </summary>
[Comment("bs_house_code主键Id")]
[MaxLength(36)]
[Required]
public string HouseCodeId { get; set; }
/// <summary>
/// 巡查日期
/// </summary>
[Comment("巡查日期")]
public DateTime? PatrolDate { get; set; }
/// <summary>
/// 巡查人姓名
/// </summary>
[Comment("巡查人姓名")]
[MaxLength(50)]
public string PatrolUser { get; set; }
/// <summary>
/// 沉降倾斜
/// </summary>
[Comment("沉降倾斜")]
[MaxLength(1000)]
public string SettlementTilt { get; set; }
/// <summary>
/// 沉降倾斜附件
/// </summary>
[Comment("沉降倾斜附件")]
[MaxLength(2000)]
public string SettlementTiltFiles { get; set; }
/// <summary>
/// 其他情况
/// </summary>
[Comment("其他情况")]
[MaxLength(1000)]
public string OtherInfo { get; set; }
/// <summary>
/// 其他情况附件
/// </summary>
[Comment("其他情况附件")]
[MaxLength(2000)]
public string OtherInfoFiles { get; set; }
/// <summary>
/// 初始等级
/// </summary>
[Comment("初始等级")]
public int? InitGrade { get; set; }
/// <summary>
/// 损坏等级
/// </summary>
[Comment("损坏等级")]
public int? DamageGrade { get; set; }
/// <summary>
/// 综合等级
/// </summary>
[Comment("综合等级")]
public int? ComprehensiveGrade { get; set; }
/// <summary>
/// 房屋场地
/// </summary>
[Comment("房屋场地")]
[MaxLength(100)]
public string HouseSite { get; set; }
/// <summary>
/// 相邻施工
/// </summary>
[Comment("相邻施工")]
[MaxLength(100)]
public string AdjacentConstruction { get; set; }
/// <summary>
/// 化学侵蚀
/// </summary>
[Comment("化学侵蚀")]
[MaxLength(100)]
public string ChemicalErosion { get; set; }
/// <summary>
/// 结构拆改
/// </summary>
[Comment("结构拆改")]
public int? StructuralDismantling { get; set; }
/// <summary>
/// 加层改造
/// </summary>
[Comment("加层改造")]
public int? AddingLayer { get; set; }
/// <summary>
/// 修缮加固
/// </summary>
[Comment("修缮加固")]
[MaxLength(100)]
public string RepairAndReinforce { get; set; }
/// <summary>
/// 历史灾害
/// </summary>
[Comment("历史灾害")]
[MaxLength(100)]
public string HistoricalCalamity { get; set; }
/// <summary>
/// 使用功能变更
/// </summary>
[Comment("使用功能变更")]
[MaxLength(100)]
public string FunctionalChange { get; set; }
/// <summary>
/// 其他调查内容
/// </summary>
[Comment("其他调查内容")]
[MaxLength(1000)]
public string OtherContents { get; set; }
/// <summary>
/// 主要安全隐患综述
/// </summary>
[Comment("主要安全隐患综述")]
[MaxLength(1000)]
public string MainSafety { get; set; }
/// <summary>
/// 处理意见
/// </summary>
[Comment("处理意见")]
public int? HandlingOpinion { get; set; }
/// <summary>
/// 处理意见备注
/// </summary>
[Comment("处理意见备注")]
[MaxLength(1000)]
public string HandlingOpinionRemark { get; set; }
/// <summary>
/// 整改情况
/// </summary>
[Comment("整改情况")]
public int? RectifyAndReform { get; set; }
/// <summary>
/// 整改情况备注
/// </summary>
[Comment("整改情况备注")]
[MaxLength(1000)]
public string RectifyAndReformRemark { get; set; }
/// <summary>
/// 巡查结果1正常,-1异常
/// </summary>
[Comment("巡查结果1正常,-1异常")]
public int? PatrolResult { get; set; }
/// <summary>
/// 巡查异常描述
/// </summary>
[Comment("巡查异常描述")]
[MaxLength(1000)]
public string PatrolResultRemark { get; set; }
/// <summary>
/// 任务人员ID
/// </summary>
[Comment("任务人员ID")]
[MaxLength(36)]
public string UserID { get; set; }
/// <summary>
/// 任务截止时间
/// </summary>
[Comment("任务截止时间")]
public DateTime? EndTime { get; set; }
/// <summary>
/// 是否过期
/// </summary>
[Comment("是否过期")]
public bool? IsDelay { get; set; }
/// <summary>
/// -1退回0待处理1保存待提交2待审核3审核通过
/// </summary>
[Comment("-1退回0待处理1保存待提交2待审核6审核通过")]
public int Status { get; set; } = 0;
/// <summary>
/// 0建档任务1系统派发的巡查任务2主动巡查任务
/// </summary>
[Comment("0建档任务1系统派发的巡查任务2主动巡查任务")]
public int? TaskType { get; set; }
/// <summary>
/// 上报街道
/// </summary>
[Comment("上报街道")]
public int? ReportRoad { get; set; }
/// <summary>
/// 上报街道时间
/// </summary>
[Comment("上报街道时间")]
public DateTime? ReportRoadTime { get; set; }
/// <summary>
/// 上报区住建
/// </summary>
[Comment("上报区住建")]
public int? ReportArea { get; set; }
/// <summary>
/// 上报区住建时间
/// </summary>
[Comment("上报区住建时间")]
public DateTime? ReportAreaTime { get; set; }
/// <summary>
/// 上报备注
/// </summary>
[Comment("上报备注")]
[MaxLength(1000)]
public string ReportRemark { get; set; }
/// <summary>
/// 提交时间
/// </summary>
[Comment("提交时间")]
public DateTime? SubmitTime { get; set; }
/// <summary>
/// 最后提交时间
/// </summary>
[Comment("最后提交时间")]
public DateTime? LastSubmitTime { get; set; }
/// <summary>
/// 是否有效
/// </summary>
[Comment("是否有效")]
public bool IsEnabled { get; set; } = true;
}
}

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Ewide.Application
{
[Table("bs_house_task_check_record")]
[Comment("房屋任务审核记录表")]
public class BsHouseTaskCheckRecord : Core.DEntityBase
{
/// <summary>
/// 任务Id
/// </summary>
[Comment("任务Id")]
[MaxLength(36)]
public string TaskId { get; set; }
/// <summary>
/// 通过1退回-1
/// </summary>
[Comment("通过3退回-1")]
public int PassOrBack { get; set; }
/// <summary>
/// 审核内容
/// </summary>
[Comment("审核内容")]
[MaxLength(500)]
public string Content { get; set; }
}
}

View File

@@ -0,0 +1,60 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Ewide.Application
{
[Table("bs_house_task_options")]
[Comment("房屋巡查任务选项表")]
public class BsHouseTaskOptions : Core.DEntityBase
{
/// <summary>
/// bs_house_code主键Id
/// </summary>
[Comment("bs_house_code主键Id")]
[MaxLength(36)]
[Required]
public string TaskId { get; set; }
/// <summary>
/// 字典类型
/// </summary>
[Comment("字典类型")]
[MaxLength(50)]
public string DictType { get; set; }
/// <summary>
/// 字典code
/// </summary>
[Comment("字典code")]
[MaxLength(50)]
public string DictCode { get; set; }
/// <summary>
/// 字典值
/// </summary>
[Comment("字典值")]
[MaxLength(100)]
public string DictValue { get; set; }
/// <summary>
/// 备注
/// </summary>
[Comment("备注")]
[MaxLength(500)]
public string Remark { get; set; }
/// <summary>
/// 附件
/// </summary>
[Comment("附件")]
[MaxLength(2000)]
public string File { get; set; }
/// <summary>
/// 是否选中
/// </summary>
[Comment("是否选中")]
public bool? Checked { get; set; }
}
}

View File

@@ -0,0 +1 @@
/** 您的业务实体文件写在此文件夹下面 **/

View File

@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public enum DataStatus
{
/// <summary>
/// 审核退回
/// </summary>
[Description("审核退回")]
Back = -1,
/// <summary>
/// 初始未处理
/// </summary>
[Description("初始未处理")]
Init = 0,
/// <summary>
/// 暂存
/// </summary>
[Description("暂存")]
TempSaved = 1,
/// <summary>
/// 已保存,待提交
/// </summary>
[Description("已保存,待提交")]
Saved = 2,
/// <summary>
/// 已提交,待审核
/// </summary>
[Description("已提交,待审核")]
Submited = 3,
/// <summary>
/// 审核通过
/// </summary>
[Description("审核通过")]
Passed = 6
}
}

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public enum HouseLogType
{
[Description("创建房屋编码")]
CreateCode = 1,
[Description("人员选房")]
SelectMember = 2,
[Description("房屋建档")]
CreateInfo = 3,
[Description("审核")]
Check = 4,
[Description("审核通过")]
Agree = 5,
[Description("审核退回")]
Disagree = 6
}
public enum HouseLogStatus
{
[Description("待处理")]
Handle = 0,
[Description("正在处理")]
Handling = 1,
[Description("已处理")]
Handled = 2,
}
}

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public enum HouseManagerRole
{
/// <summary>
/// 市住建部门
/// </summary>
CityManager,
/// <summary>
/// 区住建部门
/// </summary>
AreaManager,
/// <summary>
/// 街道管理员
/// </summary>
RoadManager,
/// <summary>
/// 片区监管员
/// </summary>
ZoneManager,
/// <summary>
/// 房屋安全管理员
/// </summary>
HouseSecurityManager
}
}

View File

@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<NoWarn>1701;1702;1591</NoWarn>
<DocumentationFile>Ewide.Application.xml</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<None Remove="applicationsettings.json" />
<None Remove="Ewide.Application.xml" />
</ItemGroup>
<ItemGroup>
<Content Include="applicationsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Ewide.Core\Ewide.Core.csproj" />
</ItemGroup>
<ItemGroup>
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
1、原则上服务应该放在Application层次考虑将咱自己的业务层直接写在Application里面好些后续升级后咱大家直接升级就行了减少冲突
2、系统默认ORM为EF Core如果觉得不趁手可以自行更换
3、在此应用层默认集成了SqlSugar,其他ORM类同可以多个ORM并行开发熟悉哪个用哪个

View File

@@ -0,0 +1,65 @@
using Ewide.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseCodeInput
{
}
public class AddHouseCodeInput : PageInputBase
{
public string HouseCode { get; set; }
[Required(ErrorMessage = "行政区域编码不能为空")]
public string AreaCode { get; set; }
[Required(ErrorMessage = "项目Id不能为空")]
public string ProjectId { get; set; }
[Required(ErrorMessage = "房屋编号不能为空")]
public int No { get; set; }
[Required(ErrorMessage = "片区Id不能为空")]
public string ZoneId { get; set; }
[Required(ErrorMessage = "房屋地址不能为空")]
public string Address { get; set; }
[Required(ErrorMessage = "房屋性质不能为空")]
public int Type { get; set; }
[Required(ErrorMessage = "所属行业不能为空")]
public int Industry { get; set; }
[Required(ErrorMessage = "经度不能为空")]
public string Lng { get; set; }
[Required(ErrorMessage = "纬度不能为空")]
public string Lat { get; set; }
}
public class EditHouseCodeInput : AddHouseCodeInput
{
[Required(ErrorMessage = "房屋编码Id不能为空")]
public string Id { get; set; }
}
public class DeleteHouseCodeInput
{
[Required(ErrorMessage = "房屋编码ID不可为空")]
public string Id { get; set; }
}
public class QueryHouseCodeInput : PageInputBase
{
public string HouseCode { get; set; }
public int? No { get; set; }
public string Address { get; set; }
public string ProjectId { get; set; }
public string ZoonId { get; set; }
public int Type { get; set; }
}
public class GetHouseCodeInput
{
[Required(ErrorMessage = "房屋编码ID不可为空")]
public string Id { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using Ewide.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseCodeOutput
{
public string Id { get; set; }
public string Address { get; set; }
public string ProjectId { get; set; }
public string ZoneId { get; set; }
public int Type { get; set; }
public string AreaName { get; set; }
public string RoadName { get; set; }
public string CommName { get; set; }
public string ZoneName { get; set; }
public string ProjectNote { get; set; }
public string FullProjName { get; set; }
public string HouseCode { get; set; }
public int No { get; set; }
public string Lng { get; set; }
public string Lat { get; set; }
}
public class GetHouseCodeOutput
{
public string Id { get; set; }
public string HouseCode { get; set; }
public int Type { get; set; }
public int Industry { get; set; }
public string AreaCode { get; set; }
public string ProjectId { get; set; }
public int No { get; set; }
public string ZoneId { get; set; }
public string Address { get; set; }
public string Lng { get; set; }
public string Lat { get; set; }
}
}

View File

@@ -0,0 +1,123 @@
using Ewide.Application.Entity;
using Ewide.Core;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Threading.Tasks;
using Dapper;
using Ewide.Core.Extension;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Collections.Generic;
namespace Ewide.Application.Service.HouseCode
{
/// <summary>
/// 房屋编码相关
/// </summary>
[ApiDescriptionSettings(Name = "HouseCode", Order = 180)]
public class HouseCodeService : IHouseCodeService, IDynamicApiController, ITransient
{
private readonly IRepository<BsHouseCode> _houseCodeRep;
private readonly IDapperRepository _dapperRepository;
private readonly IUserManager _userManager;
private readonly IHouseLogService _houseLogService;
public HouseCodeService(IRepository<BsHouseCode> HouseCodeRep, IDapperRepository dapperRepository, IUserManager userManager, IHouseLogService houseLogService)
{
_houseCodeRep = HouseCodeRep;
_dapperRepository = dapperRepository;
_userManager = userManager;
_houseLogService = houseLogService;
}
[HttpPost("/houseCode/add")]
[UnitOfWork]
public async Task AddHouseCode(AddHouseCodeInput input)
{
var houseProjectInfoRep = Db.GetRepository<BsHouseProjectInfo>();
var houseProject = await houseProjectInfoRep.FirstOrDefaultAsync(p => p.Id == input.ProjectId);
if (houseProject == null) throw Oops.Oh("项目参数有误,添加失败");
var areaCodeRep = Db.GetRepository<SysAreaCode>();
var areaCode = await areaCodeRep.DetachedEntities.FirstOrDefaultAsync(a => a.Code == input.AreaCode && a.LevelType == 4);
if(areaCode == null) throw Oops.Oh("区域编码有误,添加失败");
input.HouseCode = areaCode.AdCode + houseProject.Sort.ToString().PadLeft(3, '0') + input.No.ToString().PadLeft(3, '0');
var id = System.Guid.NewGuid().ToString().ToLower();
var houseCode = input.Adapt<BsHouseCode>();
houseCode.Id = id;
var isExist = await _houseCodeRep.AnyAsync(p => p.HouseCode == houseCode.HouseCode);
if (isExist) throw Oops.Oh("房屋编码已存在,不可重复添加");
await houseCode.InsertAsync();
// 添加到流转日志
var sort = await _houseLogService.AddThenDone(id, _userManager.User, HouseLogType.CreateCode);
sort = await _houseLogService.Add(id, _userManager.User, HouseLogType.SelectMember, sort: sort);
}
[HttpPost("/houseCode/edit")]
public async Task EditHouseCode(EditHouseCodeInput input)
{
var houseCode = input.Adapt<BsHouseCode>();
await houseCode.UpdateExcludeAsync(new[] { nameof(BsHouseCode.HouseCode) }, true);
}
[HttpPost("/houseCode/delete")]
public async Task DeleteHouseCode(DeleteHouseCodeInput input)
{
var houseCode = _houseCodeRep.FirstOrDefault(p => p.Id == input.Id);
await houseCode.DeleteNowAsync();
}
[HttpPost("/houseCode/page")]
public async Task<dynamic> QueryPage([FromBody] QueryHouseCodeInput input)
{
var sql = @"SELECT
HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName
FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9)
LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) ";
return await _dapperRepository.QueryPageDataDynamic(sql, input, filterFields: new string[] {"Type", "Address", "HouseCode","AreaCode"});
}
[HttpGet("/houseCode/detail")]
public async Task<dynamic> GetHouserCode([FromQuery] GetHouseCodeInput input)
{
var houseCode = await _houseCodeRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == input.Id);
var areaCode = (await Db.GetRepository<BsHouseProjectInfo>().DetachedEntities.FirstOrDefaultAsync(p => p.Id == houseCode.ProjectId)).AreaCode;
var result = houseCode.Adapt<GetHouseCodeOutput>();
result.AreaCode = areaCode;
return result;
}
/// <summary>
/// 获取同一区域下的下一个编号
/// </summary>
/// <param name="projectId"></param>
/// <returns></returns>
[HttpGet("/houseCode/getNextNoByCode")]
public async Task<dynamic> GetNextNoByFullNumber([Required] string projectId)
{
var areaCodeRep = Db.GetRepository<SysAreaCode>();
var houseProjectInfoRep = Db.GetRepository<BsHouseProjectInfo>();
var houseProject = await houseProjectInfoRep.FirstOrDefaultAsync(p => p.Id == projectId);
if(houseProject == null) throw Oops.Oh("项目参数有误,房屋编码生成失败");
//取到社区编码
var commAreaCode = await areaCodeRep.FirstOrDefaultAsync(a => a.Code == houseProject.AreaCode && a.LevelType == 4);
if(commAreaCode == null) throw Oops.Oh("项目区域编码有误,房屋编码生成失败");
var maxNo = await _houseCodeRep.DetachedEntities
.Where(h => h.HouseCode.Contains(commAreaCode.AdCode + houseProject.Sort.ToString().PadLeft(3, '0')))
.MaxAsync(h => (int?)h.No);
return maxNo.GetValueOrDefault(0) + 1;
}
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseCode
{
public interface IHouseCodeService
{
Task AddHouseCode(AddHouseCodeInput input);
}
}

View File

@@ -0,0 +1,61 @@
using Ewide.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseCompanyInput
{
[Required(ErrorMessage = "Id不能为空")]
public string Id { get; set; }
}
public class HouseCompanyInfoInput
{
[Required(ErrorMessage = "信息名称不能为空")]
public string Name { get; set; }
[Required(ErrorMessage = "信息内容不能为空")]
public string Value { get; set; }
}
public class HouseCompanyPageInput : PageInputBase {}
public class HouseCompanyAddInput
{
[Required(ErrorMessage = "名称不能为空")]
public virtual string Name { get; set; }
private string _Type { get; set; }
[Required(ErrorMessage = "类型不能为空")]
public virtual string Type
{
get
{
return _Type;
}
set
{
_Type = String.Join(",", value.Split(',').Select(p => $"[{p}]"));
}
}
public virtual List<HouseCompanyInfoInput> Info { get; set; }
}
public class HouseCompanyEditInput : HouseCompanyAddInput
{
[Required(ErrorMessage = "Id不能为空")]
public string Id { get; set; }
}
public class HouseCompanyListInput
{
[Required(ErrorMessage = "类型不能为空")]
public string Type { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseCompanyInfoOutput
{
public string Name { get; set; }
public string Value { get; set; }
}
public class HouseCompanyDetailOutput
{
public string Id { get; set; }
public string Name { get; set; }
private string _Type { get; set; }
public string Type
{
get
{
return _Type;
}
set
{
_Type = String.Join(",", value.Split(',').Select(p => p.Replace("[", "").Replace("]", "")));
}
}
public List<HouseCompanyInfoOutput> Info { get; set; }
}
}

View File

@@ -0,0 +1,101 @@
using Ewide.Core.Extension;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
[ApiDescriptionSettings(Name = "HouseCompany")]
public class HouseCompanyService : IHouseCompanyService, IDynamicApiController, ITransient
{
private readonly IRepository<BsHouseCompany> _bsHouseCompanyRep;
public HouseCompanyService(IRepository<BsHouseCompany> bsHouseCompanyRep)
{
_bsHouseCompanyRep = bsHouseCompanyRep;
}
[HttpPost("/houseCompany/page")]
public async Task<dynamic> Page([FromBody] HouseCompanyPageInput input)
{
var config = new TypeAdapterConfig().ForType<BsHouseCompany, HouseCompanyDetailOutput>()
.Map(target => target.Info, src => JsonConvert.DeserializeObject<List<HouseCompanyInfoOutput>>(src.Info))
.Config;
return await _bsHouseCompanyRep.DetachedEntities.ToPageData<BsHouseCompany, HouseCompanyDetailOutput>(input, config);
}
[HttpPost("/houseCompany/add")]
public async Task Add([FromBody] HouseCompanyAddInput input)
{
var info = JsonConvert.SerializeObject(input.Info);
var config = new TypeAdapterConfig().ForType<HouseCompanyAddInput, BsHouseCompany>()
.Map(target => target.Info, src => JsonConvert.SerializeObject(src.Info))
.Config;
var company = input.Adapt<BsHouseCompany>(config);
await company.InsertAsync();
}
[HttpPost("/houseCompany/edit")]
public async Task Edit([FromBody] HouseCompanyEditInput input)
{
var config = new TypeAdapterConfig().ForType<HouseCompanyEditInput, BsHouseCompany>()
.Map(target => target.Info, src => JsonConvert.SerializeObject(src.Info))
.Config;
var company = input.Adapt<BsHouseCompany>(config);
await company.UpdateAsync();
}
[HttpPost("/houseCompany/delete")]
public async Task Delete([FromBody] HouseCompanyInput input)
{
var company = await _bsHouseCompanyRep.FirstOrDefaultAsync(p => p.Id.Equals(input.Id));
await company.DeleteAsync();
}
[HttpGet("/houseCompany/detail")]
public async Task<HouseCompanyDetailOutput> Detail([FromQuery] HouseCompanyInput input)
{
var company = await _bsHouseCompanyRep.FirstOrDefaultAsync(p => p.Id.Equals(input.Id));
var config = new TypeAdapterConfig().ForType<BsHouseCompany, HouseCompanyDetailOutput>()
.Map(target => target.Info, src => JsonConvert.DeserializeObject<List<HouseCompanyInfoOutput>>(src.Info))
.Config;
var output = company.Adapt<HouseCompanyDetailOutput>(config);
return output;
}
[HttpGet("/houseCompany/list")]
public async Task<dynamic> List([FromQuery] HouseCompanyListInput input)
{
var types = input.Type.Split(',');
var result = new List<HouseCompanyDetailOutput>();
var config = new TypeAdapterConfig().ForType<BsHouseCompany, HouseCompanyDetailOutput>()
.Map(target => target.Info, src => JsonConvert.DeserializeObject<List<HouseCompanyInfoOutput>>(src.Info))
.Config;
foreach (var type in types)
{
var list = (await _bsHouseCompanyRep.DetachedEntities
.Where(p => EF.Functions.Like(p.Type, $"%[{type.Trim()}]%"))
.OrderBy(p => p.Name)
.ToListAsync())
.Select(p =>
{
var output = p.Adapt<HouseCompanyDetailOutput>(config);
return output;
});
result.AddRange(list);
}
return result.Distinct();
}
}
}

View File

@@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public interface IHouseCompanyService
{
Task<dynamic> Page([FromBody] HouseCompanyPageInput input);
Task Add([FromBody] HouseCompanyAddInput input);
Task Edit([FromBody] HouseCompanyEditInput input);
Task Delete([FromBody] HouseCompanyInput input);
Task<HouseCompanyDetailOutput> Detail([FromQuery] HouseCompanyInput input);
Task<dynamic> List([FromQuery] HouseCompanyListInput input);
}
}

View File

@@ -0,0 +1,239 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseInfoInput
{
#region building
public string BuildingName { get; set; }
public int? LandAttribute { get; set; }
public int? StructureType { get; set; }
public int? SeismicGrade { get; set; }
public int? BaseInfo { get; set; }
public string InsulationMaterial { get; set; }
public string WallMaterial { get; set; }
public string FireproofGrade { get; set; }
public int? CurtainWall { get; set; }
public int? FaceBrick { get; set; }
public int? WhiteWash { get; set; }
public int? Coating { get; set; }
public string Elevator { get; set; }
public DateTime? CompletedDate { get; set; }
public int? UsefulYear { get; set; }
/// <summary>
/// 总建筑面积
/// </summary>
public float? TotalArea { get; set; }
/// <summary>
/// 总户数(户)
/// </summary>
public int? HouseHolds { get; set; }
/// <summary>
/// 房屋单元数
/// </summary>
public int? Units { get; set; }
/// <summary>
/// 各单元每层户数(户)
/// </summary>
public int? UnitFloorHolds { get; set; }
/// <summary>
/// 总层数
/// </summary>
public int? TotalFloor { get; set; }
/// <summary>
/// 地上层数
/// </summary>
public int? LandFloorCount { get; set; }
/// <summary>
/// 地上商业层数开始
/// </summary>
public int? LandBsFloorStart { get; set; }
/// <summary>
/// 地上商业层数结束
/// </summary>
public int? LandBsFloorEnd { get; set; }
/// <summary>
/// 地上车棚层开始
/// </summary>
public int? LandBikeFloorStart { get; set; }
/// <summary>
/// 地上住宅层开始
/// </summary>
public int? LandResidenceFloorStart { get; set; }
/// <summary>
/// 地上住宅层结束
/// </summary>
public int? LandResidenceFloorEnd { get; set; }
/// <summary>
/// 地下层数
/// </summary>
public int? UnderFloorCount { get; set; }
#endregion
#region ownership
/// <summary>
/// 产权性质
/// </summary>
public string PropertyRights { get; set; }
/// <summary>
/// 总共套数
/// </summary>
public int? HouseCount { get; set; }
/// <summary>
/// 直管公房套数
/// </summary>
public int? StraightHouseCount { get; set; }
/// <summary>
/// 自管公房套数
/// </summary>
public int? SelfHouseCount { get; set; }
/// <summary>
/// 私房套数
/// </summary>
public int? PrivateHouseCount { get; set; }
/// <summary>
/// 商品房套数
/// </summary>
public int? BusinessCount { get; set; }
/// <summary>
/// 房改房套数
/// </summary>
public int? ChangeHouseCount { get; set; }
/// <summary>
/// 拆迁安置房套数
/// </summary>
public int? ResettlementHouseCount { get; set; }
/// <summary>
/// 其它套数
/// </summary>
public int? OtherCount { get; set; }
#endregion
#region manager
#endregion
#region identification
/// <summary>
/// 房屋等级 1,2,3,4,C,d
/// </summary>
public int? HouseGrade { get; set; }
/// <summary>
/// 房屋使用状态
/// </summary>
public int? HouseUsedStatus { get; set; }
#endregion
#region drawing
/// <summary>
/// 图纸资料存档处
/// </summary>
public string DrawingMaterial { get; set; }
/// <summary>
/// 其他图纸存档
/// </summary>
public string DrawingMaterialText { get; set; }
#endregion
#region attachments
/// <summary>
/// 立项文件
/// </summary>
public string AnEntryDocument { get; set; }
/// <summary>
/// 规划许可
/// </summary>
public string PlanningPermission { get; set; }
/// <summary>
/// 竣工验收备案
/// </summary>
public string CompletionRecord { get; set; }
/// <summary>
/// 监理资料
/// </summary>
public string MonitorDocument { get; set; }
/// <summary>
/// 鉴定报告
/// </summary>
public string IdentificationReport { get; set; }
/// <summary>
/// 其它资料
/// </summary>
public string OtherDocument { get; set; }
#endregion
#region aspect
/// <summary>
/// 外立面照片
/// </summary>
public string FacadePhoto { get; set; }
#endregion
#region unit
/// <summary>
/// 调查登记机构
/// </summary>
public string InvestigateAgency { get; set; }
/// <summary>
/// 纸质资料调查人
/// </summary>
public string InvestigateUser { get; set; }
/// <summary>
/// 纸质资料审核人
/// </summary>
public string OfflineAuditor { get; set; }
/// <summary>
/// 主管部门
/// </summary>
public string CompetentDepartment { get; set; }
#endregion
public int State { get; set; }
}
public class HouseInfoInputSave
{
public HouseCodeOutput houseCode { get; set; }
public HouseInfoInput houseInfo { get; set; }
public EditHouseTaskInput PatrolInfo { get; set; }
public HouseTaskCheckRecordInput TaskCheckRecord { get; set; }
}
}

View File

@@ -0,0 +1,239 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseInfoOutput
{
#region building
public string BuildingName { get; set; }
public int? LandAttribute { get; set; }
public int? StructureType { get; set; }
public int? SeismicGrade { get; set; }
public int? BaseInfo { get; set; }
public string InsulationMaterial { get; set; }
public string WallMaterial { get; set; }
public string FireproofGrade { get; set; }
public int? CurtainWall { get; set; }
public int? FaceBrick { get; set; }
public int? WhiteWash { get; set; }
public int? Coating { get; set; }
public string Elevator { get; set; }
public DateTime? CompletedDate { get; set; }
public int? UsefulYear { get; set; }
/// <summary>
/// 总建筑面积
/// </summary>
public float? TotalArea { get; set; }
/// <summary>
/// 总户数(户)
/// </summary>
public int? HouseHolds { get; set; }
/// <summary>
/// 房屋单元数
/// </summary>
public int? Units { get; set; }
/// <summary>
/// 各单元每层户数(户)
/// </summary>
public int? UnitFloorHolds { get; set; }
/// <summary>
/// 总层数
/// </summary>
public int? TotalFloor { get; set; }
/// <summary>
/// 地上层数
/// </summary>
public int? LandFloorCount { get; set; }
/// <summary>
/// 地上商业层数开始
/// </summary>
public int? LandBsFloorStart { get; set; }
/// <summary>
/// 地上商业层数结束
/// </summary>
public int? LandBsFloorEnd { get; set; }
/// <summary>
/// 地上车棚层开始
/// </summary>
public int? LandBikeFloorStart { get; set; }
/// <summary>
/// 地上住宅层开始
/// </summary>
public int? LandResidenceFloorStart { get; set; }
/// <summary>
/// 地上住宅层结束
/// </summary>
public int? LandResidenceFloorEnd { get; set; }
/// <summary>
/// 地下层数
/// </summary>
public int? UnderFloorCount { get; set; }
#endregion
#region ownership
/// <summary>
/// 产权性质
/// </summary>
public string PropertyRights { get; set; }
/// <summary>
/// 总共套数
/// </summary>
public int? HouseCount { get; set; }
/// <summary>
/// 直管公房套数
/// </summary>
public int? StraightHouseCount { get; set; }
/// <summary>
/// 自管公房套数
/// </summary>
public int? SelfHouseCount { get; set; }
/// <summary>
/// 私房套数
/// </summary>
public int? PrivateHouseCount { get; set; }
/// <summary>
/// 商品房套数
/// </summary>
public int? BusinessCount { get; set; }
/// <summary>
/// 房改房套数
/// </summary>
public int? ChangeHouseCount { get; set; }
/// <summary>
/// 拆迁安置房套数
/// </summary>
public int? ResettlementHouseCount { get; set; }
/// <summary>
/// 其它套数
/// </summary>
public int? OtherCount { get; set; }
#endregion
#region manager
#endregion
#region identification
/// <summary>
/// 房屋等级 1,2,3,4,C,d
/// </summary>
public int? HouseGrade { get; set; }
/// <summary>
/// 房屋使用状态
/// </summary>
public int? HouseUsedStatus { get; set; }
#endregion
#region drawing
/// <summary>
/// 图纸资料存档处
/// </summary>
public string DrawingMaterial { get; set; }
/// <summary>
/// 其他图纸存档
/// </summary>
public string DrawingMaterialText { get; set; }
#endregion
#region attachments
/// <summary>
/// 立项文件
/// </summary>
public string AnEntryDocument { get; set; }
/// <summary>
/// 规划许可
/// </summary>
public string PlanningPermission { get; set; }
/// <summary>
/// 竣工验收备案
/// </summary>
public string CompletionRecord { get; set; }
/// <summary>
/// 监理资料
/// </summary>
public string MonitorDocument { get; set; }
/// <summary>
/// 鉴定报告
/// </summary>
public string IdentificationReport { get; set; }
/// <summary>
/// 其它资料
/// </summary>
public string OtherDocument { get; set; }
#endregion
#region aspect
/// <summary>
/// 外立面照片
/// </summary>
public string FacadePhoto { get; set; }
#endregion
public int State { get; set; }
#region unit
/// <summary>
/// 调查登记机构
/// </summary>
public string InvestigateAgency { get; set; }
/// <summary>
/// 纸质资料调查人
/// </summary>
public string InvestigateUser { get; set; }
/// <summary>
/// 纸质资料审核人
/// </summary>
public string OfflineAuditor { get; set; }
/// <summary>
/// 主管部门
/// </summary>
public string CompetentDepartment { get; set; }
#endregion
}
public class HouseInfoOutputForDetailPage
{
#region header
public HouseCodeOutput HouseCode { get; set; }
#endregion
public HouseInfoOutput HouseInfo { get; set; }
public HouseTaskOutput PatrolInfo { get; set; }
}
}

View File

@@ -0,0 +1,208 @@
using Dapper;
using Ewide.Core;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseSafety.HouseInfo
{
/// <summary>
/// 房屋详细信息
/// </summary>
[ApiDescriptionSettings(Name = "HouseInfo", Order = 200)]
public class HouseInfoService : IHouseInfoService, IDynamicApiController, ITransient
{
private readonly IRepository<BsHouseCode> _houseCodeRep;
private readonly IRepository<BsHouseInfo> _houseInfoRep;
private readonly IRepository<BsHouseTask> _houseTaskRep;
private readonly IRepository<SysUser> _sysUserRep;
private readonly IUserManager _userManager;
private readonly IDapperRepository _dapperRepository;
private readonly IHouseLogService _houseLogService;
public HouseInfoService(
IRepository<BsHouseCode> HouseCodeRep,
IRepository<BsHouseInfo> HouseInfoRep,
IRepository<BsHouseTask> HouseTaskRep,
IRepository<SysUser> sysUserRep,
IUserManager userManager, IDapperRepository dapperRepository, IHouseLogService houseLogService)
{
_houseCodeRep = HouseCodeRep;
_houseInfoRep = HouseInfoRep;
_houseTaskRep = HouseTaskRep;
_sysUserRep = sysUserRep;
_userManager = userManager;
_dapperRepository = dapperRepository;
_houseLogService = houseLogService;
}
[HttpPost("/houseInfo/save")]
[UnitOfWork]
[AllowAnonymous]
public async Task Save([FromBody] HouseInfoInputSave input)
{
await InputDataProcess(input, DataStatus.Saved);
}
[HttpPost("/houseInfo/submitToCheck")]
[UnitOfWork]
[AllowAnonymous]
public async Task SubmitToCheck([FromBody] HouseInfoInputSave input)
{
await InputDataProcess(input,DataStatus.Submited);
}
[HttpPost("/houseInfo/check")]
[UnitOfWork]
public async Task Check([FromBody] HouseInfoInputSave input)
{
await InputDataProcess(input, input.TaskCheckRecord.PassOrBackDataStatus );
}
[HttpGet("/houseInfo/getByTaskId")]
[UnitOfWork]
public async Task<HouseInfoOutputForDetailPage> GetByTaskId([Required] string taskId)
{
//获取任务实体
var houseTask = await _houseTaskRep.DetachedEntities.FirstOrDefaultAsync(t=>t.Id == taskId);
if(houseTask == null) throw Oops.Oh("任务不存在");
//获取房屋编码信息
var houseCodeOutputAsync = await _dapperRepository.QueryAsync<HouseCodeOutput>(
@"SELECT
HC.Id,HC.Address,HC.ProjectId,HC.ZoneId,HC.Type,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,O.Name ZoneName,Proj.Note ProjectNote,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName,HC.HouseCode,HC.Lng,HC.Lat,HC.No
FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_org O ON HC.ZoneId = O.Id
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9)
LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6)
WHERE HC.Id=@HouseCodeId", new { houseTask.HouseCodeId }
);
var houseCodeOutput= houseCodeOutputAsync.SingleOrDefault();
if (houseCodeOutput == null) throw Oops.Oh("任务已失效:房屋编码不存在,请重新加载任务列表");
//获取当前登录账号
var currentUser = await _userManager.CheckUserAsync();
//查询房屋详细信息是否存在
var houseInfo = await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(h => h.HouseCodeId == houseTask.HouseCodeId);
var houseInfoOutputForDetailPage = new HouseInfoOutputForDetailPage
{
HouseCode = houseCodeOutput
};
var taskOutput = houseTask.Adapt<HouseTaskOutput>();
taskOutput.PatrolDate = houseTask.PatrolDate.GetValueOrDefault(DateTime.Now);
taskOutput.PatrolUser = String.IsNullOrEmpty(houseTask.PatrolUser) ? currentUser.Name : houseTask.PatrolUser;
houseInfoOutputForDetailPage.PatrolInfo = taskOutput;
if (houseInfo == null || houseInfo.State <= (int)DataStatus.Submited)
{
// 未建档或者当前数据未提交时打开,标记为已读
await _houseLogService.Read(houseCodeOutput.Id);
}
if (houseInfo == null)
{
houseInfoOutputForDetailPage.HouseInfo = new HouseInfoOutput();
return houseInfoOutputForDetailPage;
}
var houseInfoOutput = (await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.HouseCodeId == houseTask.HouseCodeId)).Adapt<HouseInfoOutput>();
houseInfoOutputForDetailPage.HouseInfo = houseInfoOutput;
return houseInfoOutputForDetailPage;
}
[NonAction]
[UnitOfWork]
public async Task InputDataProcess(HouseInfoInputSave input,DataStatus dataStatus = DataStatus.Init)
{
//房屋编码地址/坐标单独更新
var houseCode = input.houseCode.Adapt<BsHouseCode>();
await houseCode.UpdateIncludeAsync(new[] { nameof(BsHouseCode.Address), nameof(BsHouseCode.Lng), nameof(BsHouseCode.Lat) }, true);
//获取房屋详情实体,判断是新增还是更新
var houseEntity = await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(h => h.HouseCodeId == input.houseCode.Id);
//建档审核通过的房屋数据修改时对应的建档任务Task不处理
var houseTask = await _houseTaskRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == input.PatrolInfo.Id);
if (houseEntity == null || houseEntity.State != 6)
{
var _houseTask = input.PatrolInfo.Adapt<BsHouseTask>();
_houseTask.HouseCodeId = input.houseCode.Id;
//任务没有暂存状态其他状态与HouseInfo的State一致
_houseTask.Status = dataStatus == DataStatus.TempSaved ? (int)DataStatus.Saved : (int)dataStatus;
await _houseTask.UpdateExcludeAsync(new string[] { nameof(BsHouseTask.TaskType) }, ignoreNullValues: true);
}
//判断房屋建档状态
//dataStatus == DataStatus.Saved 若是保存操作 则判断是新增/更新
//判断是新增/更新 根据传入参数dataStatus确定
input.houseInfo.State = dataStatus == DataStatus.Saved ? (houseEntity == null ? (int)DataStatus.Saved : houseEntity.State) : (int)dataStatus;
var houseInfo = input.houseInfo.Adapt<BsHouseInfo>();
houseInfo.HouseCodeId = input.houseCode.Id;
if (houseEntity == null)
{
houseInfo.Id = Guid.NewGuid().ToString();
await houseInfo.InsertAsync();
}
else
{
houseInfo.Id = houseEntity.Id;
await houseInfo.UpdateExcludeAsync(new[] { nameof(BsHouseInfo.HouseGrade) }, true);
}
int? logSort = null;
if (dataStatus == DataStatus.Submited)
{
await _houseLogService.Done(input.houseCode.Id);
var org = await _userManager.GetUserOrgInfo();
var _sysEmpRep = Db.GetRepository<SysEmp>();
var _sysUserRoleRep = Db.GetRepository<SysUserRole>();
var _sysRoleRep = Db.GetRepository<SysRole>();
var zoneManagerList = await (from u in _sysUserRep.DetachedEntities
join e in _sysEmpRep.DetachedEntities on u.Id equals e.Id
join ur in _sysUserRoleRep.DetachedEntities on u.Id equals ur.SysUserId
join r in _sysRoleRep.DetachedEntities on ur.SysRoleId equals r.Id
where e.OrgId == org.Id && r.Code == Enum.GetName(HouseManagerRole.ZoneManager).ToUnderScoreCase()
select u).ToListAsync();
logSort = await _houseLogService.Add(input.houseCode.Id, zoneManagerList, HouseLogType.Check);
}
//审核操作则新增一条审核记录
if (dataStatus == DataStatus.Back || dataStatus == DataStatus.Passed)
{
var checkRecord = input.TaskCheckRecord.Adapt<BsHouseTaskCheckRecord>();
await checkRecord.InsertAsync();
await _houseLogService.Done(input.houseCode.Id);
logSort = await _houseLogService.AddThenDone(input.houseCode.Id, _userManager.User, dataStatus == DataStatus.Passed ? HouseLogType.Agree : HouseLogType.Disagree, remark: checkRecord.Content, sort: logSort);
if (dataStatus == DataStatus.Back)
{
var user = await _sysUserRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(houseTask.UserID));
logSort = await _houseLogService.Add(input.houseCode.Id, user, HouseLogType.CreateInfo, sort: logSort);
}
}
}
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public interface IHouseInfoService
{
Task<HouseInfoOutputForDetailPage> GetByTaskId(string taskId);
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseLogInput
{
[Required(ErrorMessage = "Id不能为空")]
public string Id { get; set; }
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseLogOutput
{
public string Id { get; set; }
public string TargetUserNames { get; set; }
public int Type { get; set; }
public int Status { get; set; }
public string Remark { get; set; }
public DateTime? FinishedTime { get; set; }
public string FinishedUserId { get; set; }
public string FinishedUserName { get; set; }
}
}

View File

@@ -0,0 +1,209 @@
using Dapper;
using Ewide.Core;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
/// <summary>
/// 房屋流转日志
/// </summary>
[ApiDescriptionSettings(Name = "HouseLog", Order = 210)]
public class HouseLogService : IHouseLogService, IDynamicApiController, ITransient
{
private readonly IDapperRepository _dapperRep;
private readonly IUserManager _userManager;
private readonly IRepository<BsHouseLog> _bsHouseLogRep;
public HouseLogService(IDapperRepository dapperRep, IUserManager userManager, IRepository<BsHouseLog> bsHouseLogRep)
{
_dapperRep = dapperRep;
_userManager = userManager;
_bsHouseLogRep = bsHouseLogRep;
}
[NonAction]
[UnitOfWork]
public async Task<int> Add(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null)
{
return await Add(houseCodeId, new List<SysUser> { targetUser }, type, remark, sort);
}
[NonAction]
[UnitOfWork]
public async Task<int> Add(string houseCodeId, List<SysUser> targetUsers, HouseLogType type, string remark = null, int? sort = null)
{
if (!sort.HasValue)
{
sort = await _bsHouseLogRep.DetachedEntities.Where(p => p.HouseCodeId.Equals(houseCodeId)).MaxAsync(p => p.Sort);
}
var _sort = sort.GetValueOrDefault(1) + 1;
await new BsHouseLog
{
Id = Guid.NewGuid().ToString(),
HouseCodeId = houseCodeId,
TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)),
Type = type,
Status = HouseLogStatus.Handle,
Remark = remark,
Sort = _sort
}.InsertAsync();
return _sort;
}
[NonAction]
[UnitOfWork]
public async Task Read(string houseCodeId)
{
var log = await _bsHouseLogRep
.Where(p => p.HouseCodeId.Equals(houseCodeId) && p.Status.Equals(HouseLogStatus.Handle))
.OrderByDescending(p => p.CreatedTime)
.FirstOrDefaultAsync();
if (log != null)
{
log.Status = HouseLogStatus.Handling;
await log.UpdateAsync();
}
}
[NonAction]
[UnitOfWork]
public async Task Done(string houseCodeId)
{
var log = await _bsHouseLogRep
.Where(p => p.HouseCodeId.Equals(houseCodeId) && !p.Status.Equals(HouseLogStatus.Handled))
.OrderByDescending(p => p.CreatedTime)
.FirstOrDefaultAsync();
if (log != null)
{
log.Status = HouseLogStatus.Handled;
log.FinishedTime = DateTime.Now;
log.FinishedUserId = _userManager.UserId;
log.FinishedUserName = _userManager.User.Account;
await log.UpdateAsync();
}
}
[NonAction]
[UnitOfWork]
public async Task<int> AddThenRead(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null)
{
return await AddThenRead(houseCodeId, new List<SysUser> { targetUser }, type, remark, sort);
}
[NonAction]
[UnitOfWork]
public async Task<int> AddThenRead(string houseCodeId, List<SysUser> targetUsers, HouseLogType type, string remark = null, int? sort = null)
{
if (!sort.HasValue)
{
sort = await _bsHouseLogRep.DetachedEntities.Where(p => p.HouseCodeId.Equals(houseCodeId)).MaxAsync(p => p.Sort);
}
var _sort = sort.GetValueOrDefault(1) + 1;
await new BsHouseLog
{
Id = Guid.NewGuid().ToString(),
HouseCodeId = houseCodeId,
TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)),
Type = type,
Status = HouseLogStatus.Handling,
Remark = remark,
Sort = _sort
}.InsertAsync();
return _sort;
}
[NonAction]
[UnitOfWork]
public async Task<int> AddThenDone(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null)
{
return await AddThenDone(houseCodeId, new List<SysUser> { targetUser }, type, remark, sort);
}
[NonAction]
[UnitOfWork]
public async Task<int> AddThenDone(string houseCodeId, List<SysUser> targetUsers, HouseLogType type, string remark = null, int? sort = null)
{
if (!sort.HasValue)
{
sort = await _bsHouseLogRep.DetachedEntities.Where(p => p.HouseCodeId.Equals(houseCodeId)).MaxAsync(p => p.Sort);
}
var _sort = sort.GetValueOrDefault(1) + 1;
await new BsHouseLog
{
Id = Guid.NewGuid().ToString(),
HouseCodeId = houseCodeId,
TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)),
Type = type,
Status = HouseLogStatus.Handled,
Remark = remark,
FinishedTime = DateTime.Now,
FinishedUserId = _userManager.UserId,
FinishedUserName = _userManager.User.Account,
Sort = _sort
}.InsertAsync();
return _sort;
}
[HttpGet("/houseLog/list")]
public async Task<dynamic> List([FromQuery] HouseLogInput input)
{
var sql = @"SELECT
HL.Id,
HL.Type,
HL.`Status`,
HL.Remark,
HL.FinishedTime,
HL.FinishedUserId,
IFNULL(NickName, `Name`) FinishedUserName,
(SELECT GROUP_CONCAT(IFNULL(NickName,`Name`)) FROM sys_user
WHERE Id IN (
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(_HL.TargetUserIds,',',HT.help_topic_id + 1),',',-1)
FROM bs_house_log _HL
JOIN mysql.help_topic HT ON HT.help_topic_id < (LENGTH(_HL.TargetUserIds) - LENGTH(REPLACE(_HL.TargetUserIds,',','')) + 1)
WHERE _HL.Id = HL.Id
)
) TargetUserNames
FROM bs_house_log HL
LEFT JOIN sys_user SU ON HL.FinishedUserId = SU.Id
WHERE HouseCodeId = @HouseCodeId
ORDER BY Sort DESC";
return await _dapperRep.QueryAsync<HouseLogOutput>(sql, new { houseCodeId = input.Id });
}
[HttpGet("/houseLog/listByInfoId")]
public async Task<dynamic> ListByInfoId([FromQuery] HouseLogInput input)
{
var info = await Db.GetRepository<BsHouseInfo>().DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(input.Id));
return await List(new HouseLogInput
{
Id = info.HouseCodeId
});
}
[HttpGet("/houseLog/listByTaskId")]
public async Task<dynamic> ListByTaskId([FromQuery] HouseLogInput input)
{
var task = await Db.GetRepository<BsHouseTask>().DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(input.Id));
return await List(new HouseLogInput
{
Id = task.HouseCodeId
});
}
}
}

View File

@@ -0,0 +1,24 @@
using Ewide.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public interface IHouseLogService
{
Task<int> Add(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null);
Task<int> Add(string houseCodeId, List<SysUser> targetUsers, HouseLogType type, string remark = null, int? sort = null);
Task Read(string houseCodeId);
Task Done(string houseCodeId);
Task<int> AddThenRead(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null);
Task<int> AddThenRead(string houseCodeId, List<SysUser> targetUsers, HouseLogType type, string remark = null, int? sort = null);
Task<int> AddThenDone(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null);
Task<int> AddThenDone(string houseCodeId, List<SysUser> targetUsers, HouseLogType type, string remark = null, int? sort = null);
Task<dynamic> List(HouseLogInput input);
Task<dynamic> ListByInfoId(HouseLogInput input);
Task<dynamic> ListByTaskId(HouseLogInput input);
}
}

View File

@@ -0,0 +1,16 @@
using Ewide.Core.Service;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public class AddHouseMemberInput : AddUserInput
{
[Required(ErrorMessage = "角色不能为空")]
public string RoleId { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using Ewide.Core.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public class HouseMemberOutput
{
}
}

View File

@@ -0,0 +1,326 @@
using Dapper;
using Ewide.Core;
using Ewide.Core.Extension;
using Ewide.Core.Service;
using Furion.DatabaseAccessor;
using Furion.DataEncryption;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System;
namespace Ewide.Application.Service
{
[ApiDescriptionSettings(Name = "HouseMember")]
public class HouseMemberService : IHouseMemberService, IDynamicApiController, ITransient
{
private readonly IDapperRepository _dapperRepository;
private readonly IRepository<SysUser> _sysUserRep; // 用户表仓储
private readonly IUserManager _userManager;
private readonly ISysUserService _sysUserService;
private readonly ISysEmpService _sysEmpService;
public HouseMemberService(
IDapperRepository dapperRepository,
IRepository<SysUser> sysUserRep,
IUserManager userManager,
ISysUserService sysUserService,
ISysEmpService sysEmpService
)
{
_dapperRepository = dapperRepository;
_sysUserRep = sysUserRep;
_userManager = userManager;
_sysUserService = sysUserService;
_sysEmpService = sysEmpService;
}
/// <summary>
/// 分页查询用户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseMember/page")]
public async Task<dynamic> QueryMemberPageList([FromBody] UserInput input)
{
var dataScopes = await _userManager.GetUserAllDataScopeList();
var sql = @"SELECT
SU.*,
SO.Name OrgName,
SUR.RoleName,
SUR.RoleCode
FROM sys_user SU
LEFT JOIN sys_emp SE ON SU.Id = SE.Id
LEFT JOIN sys_org SO ON SE.OrgId = SO.Id
LEFT JOIN (
SELECT
SUR.SysUserId,
GROUP_CONCAT(SR.Name) RoleName,
GROUP_CONCAT(SR.Code) RoleCode
FROM sys_user_role SUR
LEFT JOIN sys_role SR ON SUR.SysRoleId = SR.Id
GROUP BY SUR.SysUserId
) SUR ON SU.Id = SUR.SysUserId
WHERE 1=1";
var param = new DynamicParameters();
if (!string.IsNullOrEmpty(input.SearchValue))
{
sql += @" AND (SU.Account Like @SearchValue
OR SU.Name Like @SearchValue
OR SU.Phone Like @SearchValue)";
param.Add("SearchValue", "%" + input.SearchValue + "%");
}
if (!string.IsNullOrEmpty(input.SysEmpParam.OrgId))
{
var filter = " AND (SO.Id = @OrgId {0}) ";
filter = String.Format(filter, input.TreeNodeDataScope.GetValueOrDefault(1) == 2 ? " OR SO.Pids Like CONCAT('%[', @OrgId, ']%') " : "");
sql += filter;
param.Add("OrgId", input.SysEmpParam.OrgId);
}
if (input.SearchStatus >= 0)
{
sql += " AND SU.Status = @Status";
param.Add("Status", input.SearchStatus);
}
if (!_userManager.SuperAdmin)
{
sql += " AND SU.AdminType <> @AdminType";
param.Add("AdminType", AdminType.SuperAdmin);
sql += " AND SU.Id <> @UserId";
param.Add("UserId", _userManager.UserId);
if (dataScopes.Count > 0)
{
sql += " AND SO.Id IN @OrgIds";
param.Add("OrgIds", dataScopes.ToArray());
}
}
var users = await _dapperRepository.QueryPageData<UserOutput>(sql, input, param);
//foreach (var user in users.Items)
//{
// user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id);
//}
return PageDataResult<UserOutput>.PageResult(users);
}
/// <summary>
/// 增加用户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseMember/add")]
[UnitOfWork]
public async Task AddUser(AddHouseMemberInput input)
{
var id = await _sysUserService.AddUser(input);
var grantRoleInput = input.Adapt<UpdateUserInput>();
grantRoleInput.Id = id;
// 添加角色
grantRoleInput.GrantRoleIdList.Add(input.RoleId);
await _sysUserService.GrantUserRole(grantRoleInput);
}
/// <summary>
/// 获取角色
/// </summary>
/// <param name="orgId"></param>
/// <returns></returns>
[HttpGet("/houseMember/defaultRole")]
public async Task<dynamic> DefaultRole([FromQuery] string orgId)
{
return (await GetDefaultRole(orgId)).Adapt<RoleOutput>();
}
/// <summary>
/// 获取用户拥有角色
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/houseMember/ownRole")]
public async Task<dynamic> GetUserOwnRole([FromQuery] QueryUserInput input)
{
return await _sysUserService.GetUserOwnRole(input);
}
[HttpGet("/houseMember/defaultRoleRange")]
public async Task<dynamic> DefaultRoleRange()
{
return (await GetRoleRange()).Select(p => p.Adapt<RoleOutput>()).ToList();
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseMember/delete")]
[UnitOfWork]
public async Task DeleteUser(DeleteUserInput input)
{
/*
* 未处理逻辑
* 片区监管员在本片区已有安全员的情况下无法删除
*/
await _sysUserService.DeleteUser(input);
}
/// <summary>
/// 更新用户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseMember/edit")]
[UnitOfWork]
public async Task UpdateUser(UpdateUserInput input)
{
/*
* 未处理逻辑
* 如果移动组织架构,会产生以下几种逻辑
* 片区1监管员(无安全员或有其他监管员)=>片区2,直接成功
* 片区1监管员(有安全员并且无其他监管员)=>片区2,无法移动
* 片区1安全员=>片区2(有监管员),直接成功
* 片区1安全员=>片区2(无监管员),无法移动,需要创建监管员
*/
await _sysUserService.UpdateUser(input);
}
/// <summary>
/// 查看用户
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/houseMember/detail")]
public async Task<dynamic> GetUser([FromQuery] QueryUserInput input)
{
var sql = @"SELECT
SU.*,
SO.Name OrgName,
SUR.RoleName,
SUR.RoleCode
FROM sys_user SU
LEFT JOIN sys_emp SE ON SU.Id = SE.Id
LEFT JOIN sys_org SO ON SE.OrgId = SO.Id
LEFT JOIN (
SELECT
SUR.SysUserId,
GROUP_CONCAT(SR.Name) RoleName,
GROUP_CONCAT(SR.Code) RoleCode
FROM sys_user_role SUR
LEFT JOIN sys_role SR ON SUR.SysRoleId = SR.Id
GROUP BY SUR.SysUserId
) SUR ON SU.Id = SUR.SysUserId
WHERE SU.Id=@Id";
var user = (await _dapperRepository.QueryAsync<UserOutput>(sql, new { input.Id })).SingleOrDefault();
if (user != null)
{
user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id);
}
return user;
}
/// <summary>
/// 修改用户状态
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseMember/changeStatus")]
public async Task ChangeUserStatus(UpdateUserInput input)
{
await _sysUserService.ChangeUserStatus(input);
}
/// <summary>
/// 授权用户数据范围
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseMember/grantData")]
public async Task GrantUserData(UpdateUserInput input)
{
await _sysUserService.GrantUserData(input);
}
/// <summary>
/// 获取用户拥有数据
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/houseMember/ownData")]
public async Task<dynamic> GetUserOwnData([FromQuery] QueryUserInput input)
{
return await _sysUserService.GetUserOwnData(input);
}
/// <summary>
/// 获取当前机构中所创建的默认角色
/// 片区中的第一个帐号必定为片区监管员
/// </summary>
/// <param name="orgId"></param>
/// <returns></returns>
[NonAction]
private async Task<SysRole> GetDefaultRole(string orgId)
{
var roles = await GetRoleRange();
if (roles.Count < 2) throw Oops.Oh("未配置正确的角色");
var _sysOrgRep = Db.GetRepository<SysOrg>();
var org = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == orgId);
// 如果当前组织为街道, 则直接返回安全员
if (org == null || org.Type <= (int)OrgType.)
{
return roles.LastOrDefault();
}
var _sysEmpRep = Db.GetRepository<SysEmp>();
var _sysUserRoleRep = Db.GetRepository<SysUserRole>();
var userIds = await _sysEmpRep.DetachedEntities.Where(p => p.OrgId == orgId).Select(p => p.Id).ToListAsync();
var roleIds = await _sysUserRoleRep.DetachedEntities.Where(p => userIds.Contains(p.SysUserId)).Select(p => p.SysRoleId).ToListAsync();
var _sysRoleRep = Db.GetRepository<SysRole>();
var isExistZoneManager = await _sysRoleRep.DetachedEntities.AnyAsync(p => roleIds.Contains(p.Id) && p.Code == Enum.GetName(HouseManagerRole.ZoneManager).ToUnderScoreCase());
// 存在片区监管员,返回安全员, 否则返回监管员
if (isExistZoneManager)
{
return roles.LastOrDefault();
}
return roles.FirstOrDefault();
}
/// <summary>
/// 获取可创建的角色列表
/// </summary>
/// <returns></returns>
[NonAction]
private async Task<List<SysRole>> GetRoleRange()
{
var codes = (new[] {
Enum.GetName(HouseManagerRole.ZoneManager),
Enum.GetName(HouseManagerRole.HouseSecurityManager),
}).Select(p => p.ToUnderScoreCase());
var _sysRoleRep = Db.GetRepository<SysRole>();
var roles = await _sysRoleRep.DetachedEntities.Where(p => codes.Contains(p.Code)).ToListAsync();
return roles;
}
}
}

View File

@@ -0,0 +1,22 @@
using Ewide.Core.Service;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public interface IHouseMemberService
{
Task<dynamic> QueryMemberPageList([FromBody] UserInput input);
Task AddUser(AddHouseMemberInput input);
Task<dynamic> DefaultRole([FromQuery] string orgId);
Task DeleteUser(DeleteUserInput input);
Task UpdateUser(UpdateUserInput input);
Task<dynamic> GetUser([FromQuery] QueryUserInput input);
Task ChangeUserStatus(UpdateUserInput input);
Task<dynamic> GetUserOwnRole([FromQuery] QueryUserInput input);
Task GrantUserData(UpdateUserInput input);
Task<dynamic> GetUserOwnData([FromQuery] QueryUserInput input);
Task<dynamic> DefaultRoleRange();
}
}

View File

@@ -0,0 +1,52 @@
using Ewide.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseProjectInfo.Dto
{
public class HouseProjectInfoInput : InputBase
{
public string Name { get; set; }
public string Note { get; set; }
public int Sort { get; set; }
public string AreaCode { get; set; }
public int Type { get; set; }
}
public class AddProjectInput : HouseProjectInfoInput
{
}
public class UpdateProjectInput : HouseProjectInfoInput
{
[Required(ErrorMessage = "项目ID不可为空")]
public string Id { get; set; }
}
public class DeleteProjectInput
{
[Required(ErrorMessage = "项目ID不可为空")]
public string Id { get; set; }
}
public class QueryProjectInput : UpdateProjectInput
{
}
public class PageProjectInput: HouseProjectInfoInput
{
public string pid { get; set; }
}
public class ListHouseProjectInfoInput
{
[Required(ErrorMessage = "区域编码不可为空")]
public string AreaCode { get; set; }
[Required(ErrorMessage = "性质不可为空")]
public int Type { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseProjectInfo.Dto
{
public class HouseProjectOutput
{
public string Id { get; set; }
public string Name { get; set; }
public string Note { get; set; }
public int Sort { get; set; }
public string AreaCode { get; set; }
public string AreaName { get; set; }
public int Type { get; set; }
}
}

View File

@@ -0,0 +1,147 @@
using Ewide.Application.Entity;
using Ewide.Application.Service.HouseProjectInfo.Dto;
using Ewide.Core;
using Ewide.Core.Service;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseProjectInfo
{
/// <summary>
/// 项目管理相关服务
/// </summary>
[ApiDescriptionSettings(Name = "HouseProjectInfo", Order = 170)]
public class HouseProjectInfoService : IHouseProjectInfoService, ITransient, IDynamicApiController
{
private readonly IRepository<BsHouseProjectInfo> _houseProjectInfoRep;
public HouseProjectInfoService(IRepository<BsHouseProjectInfo> houseProjectInfoRep)
{
_houseProjectInfoRep = houseProjectInfoRep;
}
/// <summary>
/// 添加项目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseProjectInfo/add")]
public async Task AddProject(AddProjectInput input)
{
await _houseProjectInfoRep.InsertNowAsync(input.Adapt<BsHouseProjectInfo>());
}
/// <summary>
/// 删除项目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseProjectInfo/delete")]
public async Task DeleteProject(DeleteProjectInput input)
{
var project = _houseProjectInfoRep.FirstOrDefault(p => p.Id == input.Id);
await project.DeleteNowAsync();
}
/// <summary>
/// 编辑项目
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseProjectInfo/edit")]
public async Task UpdateProject(UpdateProjectInput input)
{
var project = input.Adapt<BsHouseProjectInfo>();
await project.UpdateExcludeAsync(new[] { nameof(BsHouseProjectInfo.AreaCode) }, true);
}
/// <summary>
/// 通过ID获取项目
/// </summary>
/// <param name="projectId"></param>
/// <returns></returns>
[HttpGet("/houseProjectInfo/getById")]
public async Task<BsHouseProjectInfo> GetById([Required] string projectId)
{
return await _houseProjectInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == projectId);
}
/// <summary>
/// 分页查询
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseProjectInfo/page")]
public async Task<dynamic> QueryProjectPageList([FromBody] PageProjectInput input)
{
var areaCodeRep = Db.GetRepository<SysAreaCode>();
var projects = await _houseProjectInfoRep.DetachedEntities
.Join(areaCodeRep.DetachedEntities, p => p.AreaCode, a => a.Code, (p, a) => new { p, AreaName = a.Name })
.Where(input.Type>0, x => x.p.Type == input.Type)
.Where(!string.IsNullOrEmpty(input.Name), x => x.p.Name.Contains(input.Name))
.Where(!string.IsNullOrEmpty(input.Note), x => x.p.Note.Contains(input.Note))
.Where(!string.IsNullOrEmpty(input.AreaCode), x => x.p.AreaCode == input.AreaCode)
.Where(!string.IsNullOrEmpty(input.pid) , x=> x.p.AreaCode.Contains(input.pid))
.Select(x => new { x.p.Id, x.p.Name, x.p.Note, x.p.Sort, x.p.AreaCode, x.AreaName, x.p.Type }.Adapt<HouseProjectOutput>()).ToPagedListAsync(input.PageIndex, input.PageSize);
return PageDataResult<HouseProjectOutput>.PageResult(projects);
}
/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/houseProjectInfo/detail")]
public async Task<dynamic> GetProject([FromQuery] QueryProjectInput input)
{
var user = await _houseProjectInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == input.Id);
var userDto = user.Adapt<UserOutput>();
return userDto;
}
[HttpGet("/houseProjectInfo/nextSort")]
public async Task<int> GetNextProjectSortByAreaCode([FromQuery] ListHouseProjectInfoInput input)
{
//var projects = await _houseProjectInfoRep.DetachedEntities
// .Where(p => p.AreaCode == input.AreaCode && p.Type == input.Type)
// .Select(p => p.Sort)
// .DefaultIfEmpty()
// .MaxAsync();
if (input.Type > 2 || input.Type < 1)
{
throw Oops.Oh("类型参数异常");
}
var p = await _houseProjectInfoRep.DetachedEntities
.Where(p => p.AreaCode == input.AreaCode && p.Type == input.Type)
.MaxAsync(p => (int?)p.Sort);
return p.GetValueOrDefault(0) + 1;
}
/// <summary>
/// 获取项目下拉列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("houseProjectInfo/list")]
public async Task<dynamic> GetProjectList([FromQuery] ListHouseProjectInfoInput input)
{
return await _houseProjectInfoRep.DetachedEntities
.Where(p => p.AreaCode == input.AreaCode && p.Type == input.Type)
.OrderBy(p => p.Sort)
.ToListAsync();
}
}
}

View File

@@ -0,0 +1,24 @@
using Ewide.Application.Entity;
using Ewide.Application.Service.HouseProjectInfo.Dto;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseProjectInfo
{
public interface IHouseProjectInfoService
{
Task AddProject(AddProjectInput input);
Task DeleteProject(DeleteProjectInput input);
Task UpdateProject(UpdateProjectInput input);
Task<BsHouseProjectInfo> GetById([FromRoute] string projectId);
Task<dynamic> GetProject([FromQuery] QueryProjectInput input);
Task<dynamic> QueryProjectPageList([FromQuery] PageProjectInput input);
Task<int> GetNextProjectSortByAreaCode([FromQuery] ListHouseProjectInfoInput input);
Task<dynamic> GetProjectList([FromQuery] ListHouseProjectInfoInput input);
}
}

View File

@@ -0,0 +1,21 @@
using Ewide.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseQueryInput: PageInputBase
{
}
public class HouseQueryDetailInput
{
[Required(ErrorMessage = "Id不能为空")]
public string Id { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseQueryOutput
{
}
}

View File

@@ -0,0 +1,110 @@
using Dapper;
using Ewide.Core.Extension;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseSafety.HouseQuery
{
/// <summary>
/// 住宅查询
/// </summary>
[ApiDescriptionSettings(Name = "HouseQuery", Order = 210)]
public class HouseQueryService : IHouseQueryService, IDynamicApiController, ITransient
{
private readonly IRepository<BsHouseCode> _houseCodeRep;
private readonly IRepository<BsHouseInfo> _houseInfoRep;
private readonly IRepository<BsHouseTask> _houseTaskRep;
private readonly IDapperRepository _dapperRepository;
public HouseQueryService(IRepository<BsHouseCode> HouseCodeRep, IRepository<BsHouseInfo> HouseInfoRep, IRepository<BsHouseTask> HouseTaskRep, IDapperRepository dapperRepository)
{
_houseCodeRep = HouseCodeRep;
_houseInfoRep = HouseInfoRep;
_houseTaskRep = HouseTaskRep;
_dapperRepository = dapperRepository;
}
[HttpPost("/houseQuery/page")]
public async Task<dynamic> QueryPage([FromBody] HouseQueryInput input)
{
var sql = @"SELECT
HC.ID,
HC.HouseCode,
AA.Name AreaName,
RA.Name RoadName,
CA.Name CommName,
Proj.AreaCode,
Proj.Note,
Proj.Name,
CONCAT(Proj.Name,'(',Proj.Note,')') FullProjName,
HC.Address,
IFNULL(HI.BuildingName,'') BuildingName,
IFNULL(HI.TotalFloor,0) TotalFloor,
IFNULL(HI.TotalArea,0) TotalArea,
HI.LandAttribute,
IFNULL(HI.HouseGrade,0) HouseGrade,
HC.Type,
HC.No,
HI.State,
HI.CompletedDate,
HI.CreatedTime
FROM bs_house_code HC
LEFT JOIN bs_house_info HI ON HI.HouseCodeId = HC.Id
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9)
LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6)
WHERE 1=1";
return await _dapperRepository.QueryPageDataDynamic(sql, input, filterFields: new string[] {
"HouseCode",
"Address",
"BuildingName",
"State",
"AreaCode",
"LandAttribute",
"HouseGrade",
"CompletedDate",
"CreatedTime",
"TotalArea",
"TotalFloor"
});
}
[HttpGet("/houseQuery/detail")]
public async Task<dynamic> Detail([FromQuery] HouseQueryDetailInput input)
{
var houseCodeOutputAsync = await _dapperRepository.QueryAsync<HouseCodeOutput>(
@"SELECT HC.Id,HC.Address,HC.ProjectId,HC.ZoneId,HC.Type,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,O.Name ZoneName,Proj.Note ProjectNote,CONCAT(Proj.Name,'(',Proj.Note,')') ProjectFullName,HC.HouseCode,HC.Lng,HC.Lat,HC.No FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_org O ON HC.ZoneId = O.Id
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9)
LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6)
WHERE HC.Id=@Id", new { input.Id }
);
var houseCodeOutput = houseCodeOutputAsync.SingleOrDefault();
var houseInfoOutputForDetailPage = new HouseInfoOutputForDetailPage
{
HouseCode = houseCodeOutput
};
var houseInfoOutput = (await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.HouseCodeId == houseCodeOutput.Id)).Adapt<HouseInfoOutput>();
houseInfoOutputForDetailPage.HouseInfo = houseInfoOutput;
return houseInfoOutputForDetailPage;
}
}
}

View File

@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseSafety.HouseQuery
{
public interface IHouseQueryService
{
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseSelectInput
{
[Required(ErrorMessage = "用户Id不能为空")]
public string UserId { get; set; }
[Required(ErrorMessage = "房屋编码Id不能为空")]
public string[] Ids { get; set; }
}
public class QueryHouseSelectorInput : QueryHouseCodeInput
{
[Required(ErrorMessage = "用户Id不能为空")]
public string UserId { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseSelectorOutput
{
}
}

View File

@@ -0,0 +1,225 @@
using Dapper;
using Ewide.Core;
using Ewide.Core.Extension;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
/// <summary>
/// 选房相关
/// </summary>
[ApiDescriptionSettings(Name = "HouseSelector", Order = 180)]
public class HouseSelectorService : IHouseSelectorService, IDynamicApiController, ITransient
{
private readonly IUserManager _userManager;
private readonly IDapperRepository _dapperRep;
private readonly IRepository<BsHouseMemberRelation> _bsHouseMemberRelationRep;
private readonly IRepository<BsHouseCode> _bsHouseCodeRep;
private readonly IRepository<BsHouseTask> _bsHouseTaskRep;
private readonly IRepository<SysUser> _sysUserRep;
private readonly IHouseZoneService _houseZoneService;
private readonly IHouseLogService _houseLogService;
public HouseSelectorService(
IUserManager userManager,
IDapperRepository dapperRep,
IRepository<BsHouseMemberRelation> bsHouseMemberRelationRep,
IRepository<BsHouseCode> bsHouseCodeRep,
IRepository<BsHouseTask> bsHouseTaskRep,
IRepository<SysUser> sysUserRep,
IHouseZoneService houseZoneService,
IHouseLogService houseLogService
)
{
_userManager = userManager;
_dapperRep = dapperRep;
_bsHouseMemberRelationRep = bsHouseMemberRelationRep;
_bsHouseCodeRep = bsHouseCodeRep;
_bsHouseTaskRep = bsHouseTaskRep;
_sysUserRep = sysUserRep;
_houseZoneService = houseZoneService;
_houseLogService = houseLogService;
}
/// <summary>
/// 获取人员允许绑定的房屋编码列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseSelector/selectorPage")]
public async Task<dynamic> HouseSelectorList([FromBody] QueryHouseSelectorInput input)
{
var sql = @"SELECT
HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName
FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9)
LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6)
LEFT JOIN bs_house_member_relation HM ON HC.Id = HM.HouseCodeId
INNER JOIN (SELECT * FROM sys_emp WHERE Id = @UserId) E ON HC.ZoneId = E.OrgId
WHERE HM.Id IS NULL";
return await _dapperRep.QueryPageDataDynamic(sql, input, param: new
{
input.UserId
}, filterFields: new[] {
nameof(BsHouseCode.Address) ,
nameof(BsHouseCode.CreatedTime)
});
}
/// <summary>
/// 获取人员已经绑定的房屋编码列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseSelector/selectedPage")]
public async Task<dynamic> HouseSelectedList([FromBody] QueryHouseSelectorInput input)
{
var sql = @"SELECT
HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName
FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9)
LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6)
INNER JOIN (SELECT * FROM bs_house_member_relation WHERE SysUserId = @UserId) HM ON HC.Id = HM.HouseCodeId";
return await _dapperRep.QueryPageDataDynamic(sql, input, param: new
{
input.UserId
}, filterFields: new[] {
nameof(BsHouseCode.Address) ,
nameof(BsHouseCode.CreatedTime)
});
}
/// <summary>
/// 从人员选择房屋
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseSelector/select")]
[UnitOfWork]
public async Task Select([FromBody] HouseSelectInput input)
{
#region
var ids = input.Ids.Distinct().ToList();
if (ids.Count == 0) throw Oops.Oh("没有选中任何房屋");
// 验证当前用户是否安全员 **须补充
// 已经被选中的房屋,从ids中剔除
var houseSelected = await _bsHouseMemberRelationRep.DetachedEntities
.Where(p => ids.Contains(p.HouseCodeId))
.Select(p => p.HouseCodeId)
.ToListAsync();
if (houseSelected.Count > 0)
{
houseSelected.ForEach(p =>
{
var index = ids.IndexOf(p);
if (index > -1)
{
ids.RemoveAt(index);
}
});
}
if (ids.Count == 0) throw Oops.Oh("当前房屋在此之前已经全部被选中,请确认");
var selectedUser = await _sysUserRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(input.UserId));
// 从用户所在片区中过滤房屋
var zoneId = await _houseZoneService.GetZoneByUser(selectedUser.Id);
var house = await _bsHouseCodeRep.DetachedEntities.Where(p => ids.Contains(p.Id) && p.ZoneId == zoneId).Select(p => p.Id).ToListAsync();
if (house.Count == 0) throw Oops.Oh("选中的房屋错误");
#endregion
// 选定房屋
house.ForEach(async p =>
{
var originalTask = _bsHouseTaskRep.DetachedEntities.FirstOrDefault(t => t.HouseCodeId == p && t.TaskType == 0 && t.IsEnabled);
if (originalTask == null)
{
new BsHouseTask
{
Id = System.Guid.NewGuid().ToString(),
HouseCodeId = p,
UserID = selectedUser.Id,
EndTime = System.DateTime.Now.AddMonths(1),
Status = 0,
TaskType = 0
}.Insert();
await _houseLogService.Done(p);
await _houseLogService.Add(p, selectedUser, HouseLogType.CreateInfo);
}
else
{
var sort = await _houseLogService.AddThenDone(p, _userManager.User, HouseLogType.SelectMember);
if (originalTask.Status != 6)//建档未完成生成新建档任务分配给新的人员原建档任务数据保留有效性设置为false取消巡查关系
{
var newTask = originalTask.Adapt<BsHouseTask>();
newTask.Id = System.Guid.NewGuid().ToString();
newTask.UserID = input.UserId;
newTask.EndTime = System.DateTime.Now.AddMonths(1);
newTask.Insert();
originalTask.IsEnabled = false;
originalTask.Update();
sort = await _houseLogService.Add(p, selectedUser, HouseLogType.CreateInfo, sort: sort);
}//已建档完成,不再分配建档任务,仅更换巡查关系
else
{
var originalRelation = _bsHouseMemberRelationRep.DetachedEntities.FirstOrDefault(r => r.HouseCodeId == p && r.SysUserId == originalTask.UserID);
originalRelation.Delete();
}
}
new BsHouseMemberRelation
{
SysUserId = selectedUser.Id,
HouseCodeId = p
}.Insert();
});
}
[HttpPost("/houseSelector/revoke")]
[UnitOfWork]
public async Task Revoke([FromBody] HouseSelectInput input)
{
var ids = input.Ids.Distinct().ToList();
if (ids.Count == 0) throw Oops.Oh("没有选中任何房屋");
var selected = await _bsHouseMemberRelationRep.Where(p => ids.Contains(p.HouseCodeId) && p.SysUserId == input.UserId).ToListAsync();
selected.ForEach(p =>
{
p.Delete();
});
}
public async Task SelectMember()
{
}
}
}

View File

@@ -0,0 +1,18 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public interface IHouseSelectorService
{
Task<dynamic> HouseSelectorList([FromQuery] QueryHouseSelectorInput input);
Task<dynamic> HouseSelectedList([FromQuery] QueryHouseSelectorInput input);
Task Select([FromBody] HouseSelectInput input);
Task Revoke([FromBody] HouseSelectInput input);
Task SelectMember();
}
}

View File

@@ -0,0 +1,171 @@
using Ewide.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseTaskInput
{
[Required(ErrorMessage = "巡查日期不能为空")]
public DateTime PatrolDate { get; set; }
[Required(ErrorMessage = "巡查人员/单位不能为空")]
public string PatrolUser { get; set; }
/// <summary>
/// 沉降倾斜
/// </summary>
public string SettlementTilt { get; set; }
/// <summary>
/// 沉降倾斜附件
/// </summary>
public string SettlementTiltFiles { get; set; }
/// <summary>
/// 其他情况
/// </summary>
public string OtherInfo { get; set; }
/// <summary>
/// 其他情况附件
/// </summary>
public string OtherInfoFiles { get; set; }
//[Required(ErrorMessage = "巡查初始等级不能为空")]
public int InitGrade { get; set; }
//[Required(ErrorMessage = "巡查损坏等级不能为空")]
public int DamageGrade { get; set; }
//[Required(ErrorMessage = "巡查综合等级不能为空")]
public int ComprehensiveGrade { get; set; }
#region investigation
/// <summary>
/// 房屋场地
/// </summary>
public string HouseSite { get; set; }
/// <summary>
/// 相邻施工
/// </summary>
public string AdjacentConstruction { get; set; }
/// <summary>
/// 化学侵蚀
/// </summary>
public string ChemicalErosion { get; set; }
/// <summary>
/// 结构拆改
/// </summary>
public int? StructuralDismantling { get; set; }
/// <summary>
/// 加层改造
/// </summary>
public int? AddingLayer { get; set; }
/// <summary>
/// 修缮加固
/// </summary>
public string RepairAndReinforce { get; set; }
/// <summary>
/// 历史灾害
/// </summary>
public string HistoricalCalamity { get; set; }
/// <summary>
/// 使用功能变更
/// </summary>
public string FunctionalChange { get; set; }
/// <summary>
/// 其他调查内容
/// </summary>
public string OtherContents { get; set; }
#endregion
/// <summary>
/// 主要安全隐患综述
/// </summary>
public string MainSafety { get; set; }
/// <summary>
/// 处理意见
/// </summary>
public int? HandlingOpinion { get; set; }
/// <summary>
/// 处理意见备注
/// </summary>
public string HandlingOpinionRemark { get; set; }
/// <summary>
/// 整改情况
/// </summary>
public int? RectifyAndReform { get; set; }
/// <summary>
/// 整改情况备注
/// </summary>
public string RectifyAndReformRemark { get; set; }
/// <summary>
/// 巡查结果1正常,-1异常
/// </summary>
//[Required(ErrorMessage = "巡查结果不能为空")]
public int PatrolResult { get; set; }
public string PatrolResultRemark { get; set; }
/// <summary>
/// 上报街道
/// </summary>
public int? ReportRoad { get; set; }
/// <summary>
/// 上报街道时间
/// </summary>
public DateTime? ReportRoadTime { get; set; }
/// <summary>
/// 上报区住建
/// </summary>
public int? ReportArea { get; set; }
/// <summary>
/// 上报区住建时间
/// </summary>
public DateTime? ReportAreaTime { get; set; }
/// <summary>
/// 上报备注
/// </summary>
public string ReportRemark { get; set; }
}
public class AddHouseTaskInput : HouseTaskInput
{
}
public class EditHouseTaskInput : HouseTaskInput
{
[Required(ErrorMessage = "任务Id不能为空")]
public string Id { get; set; }
}
public class SubmitHouseTaskInput
{
[Required(ErrorMessage = "任务Id不能为空")]
public string TaskId { get; set; }
}
public class QueryHouseTaskInput : PageInputBase
{
}
}

View File

@@ -0,0 +1,173 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseTaskOutput
{
public DateTime? PatrolDate { get; set; }
public string PatrolUser { get; set; }
/// <summary>
/// 沉降倾斜
/// </summary>
public string SettlementTilt { get; set; }
/// <summary>
/// 沉降倾斜附件
/// </summary>
public string SettlementTiltFiles { get; set; }
/// <summary>
/// 其他情况
/// </summary>
public string OtherInfo { get; set; }
/// <summary>
/// 其他情况附件
/// </summary>
public string OtherInfoFiles { get; set; }
/// <summary>
/// 初始等级
/// </summary>
public int? InitGrade { get; set; }
/// <summary>
/// 损坏等级
/// </summary>
public int? DamageGrade { get; set; }
/// <summary>
/// 综合等级
/// </summary>
public int? ComprehensiveGrade { get; set; }
#region investigation
/// <summary>
/// 房屋场地
/// </summary>
public string HouseSite { get; set; }
/// <summary>
/// 相邻施工
/// </summary>
public string AdjacentConstruction { get; set; }
/// <summary>
/// 化学侵蚀
/// </summary>
public string ChemicalErosion { get; set; }
/// <summary>
/// 结构拆改
/// </summary>
public int? StructuralDismantling { get; set; }
/// <summary>
/// 加层改造
/// </summary>
public int? AddingLayer { get; set; }
/// <summary>
/// 修缮加固
/// </summary>
public string RepairAndReinforce { get; set; }
/// <summary>
/// 历史灾害
/// </summary>
public string HistoricalCalamity { get; set; }
/// <summary>
/// 使用功能变更
/// </summary>
public string FunctionalChange { get; set; }
/// <summary>
/// 其他调查内容
/// </summary>
public string OtherContents { get; set; }
#endregion
/// <summary>
/// 主要安全隐患综述
/// </summary>
public string MainSafety { get; set; }
/// <summary>
/// 处理意见
/// </summary>
public int? HandlingOpinion { get; set; }
/// <summary>
/// 处理意见备注
/// </summary>
public string HandlingOpinionRemark { get; set; }
/// <summary>
/// 整改情况
/// </summary>
public int? RectifyAndReform { get; set; }
/// <summary>
/// 整改情况备注
/// </summary>
public string RectifyAndReformRemark { get; set; }
/// <summary>
/// 巡查结果1正常,-1异常
/// </summary>
public int? PatrolResult { get; set; }
/// <summary>
/// 巡查异常描述
/// </summary>
public string PatrolResultRemark { get; set; }
/// <summary>
/// 上报街道
/// </summary>
public int? ReportRoad { get; set; }
/// <summary>
/// 上报街道时间
/// </summary>
public DateTime? ReportRoadTime { get; set; }
/// <summary>
/// 上报区住建
/// </summary>
public int? ReportArea { get; set; }
/// <summary>
/// 上报区住建时间
/// </summary>
public DateTime? ReportAreaTime { get; set; }
/// <summary>
/// 上报备注
/// </summary>
public string ReportRemark { get; set; }
public int Status { get; set; }
/// <summary>
/// 提交时间
/// </summary>
public DateTime? SubmitTime { get; set; }
/// <summary>
/// 最后提交时间
/// </summary>
public DateTime? LastSubmitTime { get; set; }
/// <summary>
/// 是否有效
/// </summary>
public bool IsEnabled { get; set; }
}
}

View File

@@ -0,0 +1,102 @@
using Dapper;
using Ewide.Core;
using Ewide.Core.Extension;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
/// <summary>
/// 房屋任务(巡查任务/建档任务)
/// </summary>
[ApiDescriptionSettings(Name = "HouseTask", Order = 190)]
public class HouseTaskService : IHouseTaskService, IDynamicApiController, ITransient
{
private readonly IRepository<BsHouseTask> _houseTaskRep;
private readonly IRepository<BsHouseInfo> _houseInfoRep;
private readonly IDapperRepository _dapperRepository;
private readonly IUserManager _userManager;
private readonly IHouseLogService _houseLogService;
public HouseTaskService(IRepository<BsHouseTask> HouseTaskRep, IRepository<BsHouseInfo> HouseInfoRep, IDapperRepository dapperRepository, IUserManager userManager, IHouseLogService houseLogService)
{
_houseTaskRep = HouseTaskRep;
_houseInfoRep = HouseInfoRep;
_dapperRepository = dapperRepository;
_userManager = userManager;
_houseLogService = houseLogService;
}
[HttpPost("/houseTask/page")]
public async Task<dynamic> QueryPage([FromBody] QueryHouseTaskInput input)
{
var sql = @"SELECT T.Id,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,Proj.Name,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName,HC.HouseCode,HC.Address,T.EndTime,HC.Type,HC.Industry,HC.No,T.Status,IFNULL(HI.State,0) State FROM `bs_house_task` T
LEFT JOIN bs_house_code HC ON T.HouseCodeId = HC.Id
LEFT JOIN bs_house_info HI ON HI.HouseCodeId = T.HouseCodeId
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode
LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9)
LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6)
WHERE T.IsEnabled = 1 {0}";
var user = await _userManager.CheckUserAsync();
if (user == null) throw Oops.Oh("登录信息丢失");
var userRoles = await _userManager.GetUserRoleList();
var userOrg = await _userManager.GetUserOrgInfo();
var param = new DynamicParameters();
if (userRoles.Where(r => r.Code == Enum.GetName(HouseManagerRole.HouseSecurityManager).ToUnderScoreCase()).Any())
{
sql = String.Format(sql, " AND T.UserID=@UserID ");
param.Add("UserID", user.Id);
}
if (userRoles.Where(r => r.Code == Enum.GetName(HouseManagerRole.ZoneManager).ToUnderScoreCase()).Any())
{
sql = String.Format(sql, " AND (T.Status=3 OR T.Status=6) AND HC.ZoneId = @ZoneId ");
param.Add("ZoneId", userOrg.Id);
}
return await _dapperRepository.QueryPageDataDynamic(sql, input, param, filterFields: new string[] { "Type", "Address", "HouseCode", "Status","State" });
}
[HttpPost("/houseTask/submit")]
[UnitOfWork]
[AllowAnonymous]
public async Task Submit([FromBody] SubmitHouseTaskInput input)
{
//获取任务实体
var houseTask = await _houseTaskRep.DetachedEntities.FirstOrDefaultAsync(t => t.Id == input.TaskId);
if (houseTask == null) throw Oops.Oh("任务不存在");
houseTask.Status = 2;
houseTask.LastSubmitTime = DateTime.Now;
if (!houseTask.SubmitTime.HasValue) houseTask.SubmitTime = houseTask.LastSubmitTime;
await houseTask.UpdateExcludeAsync(new string[] { nameof(BsHouseTask.TaskType) }, ignoreNullValues: true);
if(houseTask.TaskType == 0)
{
var houseInfo = await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(h => h.HouseCodeId == houseTask.HouseCodeId);
if (houseInfo == null) throw Oops.Oh("提交审核失败:请先保存后再提交");
houseInfo.State = 5;
await houseInfo.UpdateExcludeAsync(new[] { nameof(BsHouseInfo.HouseGrade) }, true);
}
// 提交时流转日志
await _houseLogService.Done(houseTask.HouseCodeId);
}
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public interface IHouseTaskService
{
Task<dynamic> QueryPage(QueryHouseTaskInput input);
}
}

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseTaskCheckRecordInput
{
/// <summary>
/// 任务Id
/// </summary>
[Required(ErrorMessage = "任务参数有误")]
public string TaskId { get; set; }
/// <summary>
/// 通过3退回-1
/// </summary>
[Required(ErrorMessage = "审核结果不能为空")]
public int PassOrBack { get; set; }
public DataStatus PassOrBackDataStatus
{
get
{
return PassOrBack switch
{
-1 => DataStatus.Back,
1 => DataStatus.TempSaved,
2 => DataStatus.Saved,
3 => DataStatus.Submited,
6 => DataStatus.Passed,
_ => DataStatus.Init,
};
}
}
/// <summary>
/// 审核内容
/// </summary>
[Required(ErrorMessage = "审核内容不能为空")]
public string Content { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service.HouseSafety.HouseTaskCheckRecord.Dto
{
public class HouseTaskCheckRecordOutput
{
}
}

View File

@@ -0,0 +1,41 @@
using Ewide.Core.Service;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
public class HouseZoneInput
{
[Required(ErrorMessage = "区域编码不可为空")]
[MinLength(9, ErrorMessage = "区域编码长度必须为9位及以上")]
public string AreaCode { get; set; }
}
public class AddHouseZoneInput : OrgInput
{
/// <summary>
/// 所属街道
/// </summary>
[Required(ErrorMessage = "所属街道不能为空")]
public override string Pid { get; set; }
/// <summary>
/// 名称
/// </summary>
[Required(ErrorMessage = "片区名称不能为空")]
public override string Name { get; set; }
}
public class UpdateHouseZoneInput : AddHouseZoneInput
{
/// <summary>
/// 机构Id
/// </summary>
[Required(ErrorMessage = "片区Id不能为空")]
public string Id { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application
{
class HouseZoneOutput
{
}
}

View File

@@ -0,0 +1,175 @@
using Ewide.Core;
using Ewide.Core.Extension;
using Ewide.Core.Service;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
/// <summary>
/// 片区相关
/// </summary>
[ApiDescriptionSettings(Name = "HouseZone", Order = 180)]
public class HouseZoneService : IHouseZoneService, IDynamicApiController, ITransient
{
private readonly IUserManager _userManager;
private readonly IRepository<SysOrg> _sysOrgRep;
private readonly IRepository<SysEmp> _sysEmpRep;
private readonly ISysOrgService _sysOrgService;
public HouseZoneService(
IUserManager userManager,
IRepository<SysOrg> sysOrgRep,
IRepository<SysEmp> sysEmpRep,
ISysOrgService sysOrgService
)
{
_userManager = userManager;
_sysOrgRep = sysOrgRep;
_sysEmpRep = sysEmpRep;
_sysOrgService = sysOrgService;
}
/// <summary>
/// 获取片区列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("/houseZone/list")]
public async Task<dynamic> GetHouseZoneList([FromQuery] HouseZoneInput input)
{
var areaCode = input.AreaCode.Substring(0, 9);
var road = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.AreaCode == areaCode);
if (road == null) throw Oops.Oh("未在组织机构中配置街道");
return await _sysOrgRep.DetachedEntities
.Where(p => p.Pid == road.Id)
.Where(p => p.Type == (int)OrgType.)
.OrderBy(p => p.Sort)
.Select(p => new
{
p.Id,
p.Name
})
.ToListAsync();
}
[HttpGet("/houseZone/getById")]
public async Task<dynamic> GetById([Required] string zoneId)
{
return await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == zoneId);
}
/// <summary>
/// 分页查询片区
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/houseZone/page")]
public async Task<dynamic> QueryZonePageList([FromBody] PageOrgInput input)
{
var dataScopeList = _sysOrgService.GetDataScopeList(await _userManager.GetUserAllDataScopeList());
var name = !string.IsNullOrEmpty(input.Name?.Trim());
var id = !string.IsNullOrEmpty(input.Id?.Trim());
var pId = !string.IsNullOrEmpty(input.Pid?.Trim());
var orgs = await _sysOrgRep.DetachedEntities
.Where((name, u => EF.Functions.Like(u.Name, $"%{input.Name.Trim()}%")), // 根据机构名称模糊查询
(id, u => u.Id == input.Id.Trim()), // 根据机构id查询
(pId, u => EF.Functions.Like(u.Pids, $"%[{input.Pid.Trim()}]%")
|| u.Id == input.Pid.Trim())) // 根据父机构id查询
.Where(dataScopeList.Count > 0, u => dataScopeList.Contains(u.Id)) // 非管理员范围限制
.Where(u => u.Status != CommonStatus.DELETED)
.Where(u => u.Type == (int)OrgType.)
.OrderBy(u => u.Sort)
.ToPageData<SysOrg, OrgOutput>(input);
return PageDataResult<OrgOutput>.PageResult(orgs);
}
/// <summary>
/// 根据用户Id获取所在片区的Id
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
[HttpGet("/houseZone/getByUser")]
public async Task<string> GetZoneByUser([FromQuery][Required(ErrorMessage = "用户Id不能为空")] string userId)
{
var data = await _sysEmpRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == userId);
if(data == null) throw Oops.Oh("用户不在组织机构中");
var org = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == data.OrgId && p.Type == (int)OrgType.);
if(org == null) throw Oops.Oh("用户不在片区中");
return org.Id;
}
[HttpGet("/houseZone/autoIncrement")]
public async Task<dynamic> AutoIncrement([FromQuery] string roadId)
{
var road = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == roadId && p.Type == 3);
if (road == null) throw Oops.Oh("组织机构错误");
return await AutoIncrement(road);
}
[NonAction]
public async Task<dynamic> AutoIncrement(SysOrg road)
{
var maxZone = (await _sysOrgRep.DetachedEntities.Where(p => p.Pid == road.Id && p.Type == (int)OrgType.).MaxAsync(p => p.Code)) ?? "000";
return Convert.ToInt32(maxZone[^3..]) + 1;
}
[HttpPost("/houseZone/add")]
public async Task AddZone(AddHouseZoneInput input)
{
/*
* 区县市限定所属区域/上级机构是否为当前区
* 街道自动获取所属区域/上级机构
* 自动生成唯一编码, 街道Code+三位编号
*
* 机构类型默认为片区
*/
var org = await _userManager.GetUserOrgInfo();
var areaManager = Enum.GetName(HouseManagerRole.AreaManager).ToUnderScoreCase();
var roadManager = Enum.GetName(HouseManagerRole.RoadManager).ToUnderScoreCase();
var roles = await _userManager.GetUserRoleList();
if (roles.Any(p => p.Code == areaManager))
{
var road = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == input.Pid);
if (!road.Pids.Contains(org.Id)) throw Oops.Oh("当前用户组织机构错误");
input.AreaCode = road.AreaCode;
input.Code = road.Code + (await AutoIncrement(road)).ToString().PadLeft(3, '0');
}
else if (roles.Any(p => p.Code == roadManager))
{
input.AreaCode = org.AreaCode;
input.Code = org.Code + (await AutoIncrement(org)).ToString().PadLeft(3, '0');
}
input.Type = (int)OrgType.;
AddOrgInput addOrgInput = input.Adapt<AddOrgInput>();
await _sysOrgService.AddOrg(addOrgInput);
}
[HttpPost("/houseZone/edit")]
public async Task EditZone(UpdateHouseZoneInput input)
{
var zone = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(z => z.Id == input.Id);
if(zone == null) throw Oops.Oh("修改失败:数据有误,刷新列表后再尝试修改");
zone.Remark = input.Remark;
await zone.UpdateIncludeAsync(new[] { nameof(SysOrg.Remark) }, true);
}
}
}

View File

@@ -0,0 +1,15 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Application.Service
{
public interface IHouseZoneService
{
Task<dynamic> GetHouseZoneList([FromQuery] HouseZoneInput input);
Task<string> GetZoneByUser([FromQuery] string userId);
}
}

View File

@@ -0,0 +1,30 @@
using Furion;
using Microsoft.Extensions.DependencyInjection;
using System.Linq;
namespace Ewide.Application
{
public class Startup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
//services.AddSqlSugar(new ConnectionConfig
//{
// ConnectionString = App.Configuration["ConnectionStrings:DefaultConnection"],
// DbType = DbType.Sqlite,
// IsAutoCloseConnection = true,
// InitKeyType = InitKeyType.Attribute
//},
//db =>
//{
// // db.DbMaintenance.CreateDatabase();
// // db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Test));
// db.Aop.OnLogExecuting = (sql, pars) =>
// {
// App.PrintToMiniProfiler("SqlSugar", "Info", sql + "\r\n" + string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value)));
// };
//});
}
}
}

View File

@@ -0,0 +1,3 @@
{
}

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v5.0", FrameworkDisplayName = "")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Ewide.Application")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Ewide.Application")]
[assembly: System.Reflection.AssemblyTitleAttribute("Ewide.Application")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// 由 MSBuild WriteCodeFragment 类生成。

View File

@@ -0,0 +1 @@
645aa266f12effcadeb795373ee12957c5900400

View File

@@ -0,0 +1,10 @@
is_global = true
build_property.TargetFramework = net5.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.PublishSingleFile =
build_property.IncludeAllContentForSelfExtract =
build_property._SupportedPlatformList = Android,iOS,Linux,macOS,Windows
build_property.RootNamespace = Ewide.Application
build_property.ProjectDir = D:\WORK\g公司\codes\ewide_core_flow\back_end_code\Ewide.Application\

View File

@@ -0,0 +1,184 @@
{
"format": 1,
"restore": {
"D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Application\\Ewide.Application.csproj": {}
},
"projects": {
"D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Application\\Ewide.Application.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Application\\Ewide.Application.csproj",
"projectName": "Ewide.Application",
"projectPath": "D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Application\\Ewide.Application.csproj",
"packagesPath": "C:\\Users\\z1303\\.nuget\\packages\\",
"outputPath": "D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Application\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
],
"configFilePaths": [
"C:\\Users\\z1303\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net5.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net5.0": {
"targetAlias": "net5.0",
"projectReferences": {
"D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Core\\Ewide.Core.csproj": {
"projectPath": "D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Core\\Ewide.Core.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net5.0": {
"targetAlias": "net5.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.400\\RuntimeIdentifierGraph.json"
}
}
},
"D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Core\\Ewide.Core.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Core\\Ewide.Core.csproj",
"projectName": "Ewide.Core",
"projectPath": "D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Core\\Ewide.Core.csproj",
"packagesPath": "C:\\Users\\z1303\\.nuget\\packages\\",
"outputPath": "D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Core\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
],
"configFilePaths": [
"C:\\Users\\z1303\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net5.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net5.0": {
"targetAlias": "net5.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net5.0": {
"targetAlias": "net5.0",
"dependencies": {
"CSRedisCore": {
"target": "Package",
"version": "[3.6.6, )"
},
"Furion": {
"target": "Package",
"version": "[2.19.3, )"
},
"Furion.Extras.Authentication.JwtBearer": {
"target": "Package",
"version": "[2.19.3, )"
},
"Furion.Extras.DatabaseAccessor.Dapper": {
"target": "Package",
"version": "[2.19.3, )"
},
"Furion.Extras.DatabaseAccessor.SqlSugar": {
"target": "Package",
"version": "[2.19.3, )"
},
"Furion.Extras.Logging.Serilog": {
"target": "Package",
"version": "[2.19.3, )"
},
"Furion.Extras.ObjectMapper.Mapster": {
"target": "Package",
"version": "[2.19.3, )"
},
"Kendo.DynamicLinqCore": {
"target": "Package",
"version": "[3.1.1, )"
},
"Portable.BouncyCastle": {
"target": "Package",
"version": "[1.8.10, )"
},
"Quartz": {
"target": "Package",
"version": "[3.3.2, )"
},
"System.Drawing.Common": {
"target": "Package",
"version": "[5.0.2, )"
},
"System.Text.Encoding.CodePages": {
"target": "Package",
"version": "[5.0.0, )"
},
"UAParser": {
"target": "Package",
"version": "[3.1.46, )"
},
"aliyun-net-sdk-core": {
"target": "Package",
"version": "[1.5.10, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.400\\RuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\z1303\.nuget\packages\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.11.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\z1303\.nuget\packages\" />
<SourceRoot Include="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\" />
</ItemGroup>
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgMicrosoft_Extensions_ApiDescription_Server Condition=" '$(PkgMicrosoft_Extensions_ApiDescription_Server)' == '' ">C:\Users\z1303\.nuget\packages\microsoft.extensions.apidescription.server\3.0.0</PkgMicrosoft_Extensions_ApiDescription_Server>
<PkgMicrosoft_CodeAnalysis_Analyzers Condition=" '$(PkgMicrosoft_CodeAnalysis_Analyzers)' == '' ">C:\Users\z1303\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.2</PkgMicrosoft_CodeAnalysis_Analyzers>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v5.0", FrameworkDisplayName = "")]

View File

@@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Ewide.Application")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Ewide.Application")]
[assembly: System.Reflection.AssemblyTitleAttribute("Ewide.Application")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// 由 MSBuild WriteCodeFragment 类生成。

View File

@@ -0,0 +1 @@
a4707699b8934a562445e235a81a1c957f6d838c

View File

@@ -0,0 +1,10 @@
is_global = true
build_property.TargetFramework = net5.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.PublishSingleFile =
build_property.IncludeAllContentForSelfExtract =
build_property._SupportedPlatformList = Android,iOS,Linux,macOS,Windows
build_property.RootNamespace = Ewide.Application
build_property.ProjectDir = H:\在家办公2\ewide_core-master\ewide_core\Api\Ewide.Application\

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,212 @@
{
"version": 2,
"dgSpecHash": "PsOl8VgtJJZz8+RG9w5e5icKu1vE1yxT9PXktX3S2MOWiO8RcttT0dmF64QPbHdsY21QBTyAVE935HATt2ZfoA==",
"success": true,
"projectFilePath": "D:\\WORK\\g公司\\codes\\ewide_core_flow\\back_end_code\\Ewide.Application\\Ewide.Application.csproj",
"expectedPackageFiles": [
"C:\\Users\\z1303\\.nuget\\packages\\aliyun-net-sdk-core\\1.5.10\\aliyun-net-sdk-core.1.5.10.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\ben.demystifier\\0.4.1\\ben.demystifier.0.4.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\bouncycastle.netcore\\1.8.3\\bouncycastle.netcore.1.8.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\csrediscore\\3.6.6\\csrediscore.3.6.6.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\dapper\\2.0.78\\dapper.2.0.78.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\dapper.contrib\\2.0.78\\dapper.contrib.2.0.78.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\furion\\2.19.3\\furion.2.19.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\furion.extras.authentication.jwtbearer\\2.19.3\\furion.extras.authentication.jwtbearer.2.19.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\furion.extras.databaseaccessor.dapper\\2.19.3\\furion.extras.databaseaccessor.dapper.2.19.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\furion.extras.databaseaccessor.sqlsugar\\2.19.3\\furion.extras.databaseaccessor.sqlsugar.2.19.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\furion.extras.dependencymodel.codeanalysis\\2.19.3\\furion.extras.dependencymodel.codeanalysis.2.19.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\furion.extras.logging.serilog\\2.19.3\\furion.extras.logging.serilog.2.19.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\furion.extras.objectmapper.mapster\\2.19.3\\furion.extras.objectmapper.mapster.2.19.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\google.protobuf\\3.6.1\\google.protobuf.3.6.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\k4os.compression.lz4\\1.1.11\\k4os.compression.lz4.1.1.11.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\k4os.compression.lz4.streams\\1.1.11\\k4os.compression.lz4.streams.1.1.11.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\k4os.hash.xxhash\\1.0.6\\k4os.hash.xxhash.1.0.6.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\kendo.dynamiclinqcore\\3.1.1\\kendo.dynamiclinqcore.3.1.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\mapster\\7.2.0\\mapster.7.2.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\mapster.core\\1.2.0\\mapster.core.1.2.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\mapster.dependencyinjection\\1.0.0\\mapster.dependencyinjection.1.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.aspnetcore.authentication.jwtbearer\\5.0.11\\microsoft.aspnetcore.authentication.jwtbearer.5.0.11.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.aspnetcore.razor.language\\5.0.11\\microsoft.aspnetcore.razor.language.5.0.11.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.codeanalysis.analyzers\\3.3.2\\microsoft.codeanalysis.analyzers.3.3.2.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.codeanalysis.common\\3.11.0\\microsoft.codeanalysis.common.3.11.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.codeanalysis.csharp\\3.11.0\\microsoft.codeanalysis.csharp.3.11.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.csharp\\4.7.0\\microsoft.csharp.4.7.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.data.sqlclient\\2.1.1\\microsoft.data.sqlclient.2.1.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.data.sqlclient.sni.runtime\\2.1.1\\microsoft.data.sqlclient.sni.runtime.2.1.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.data.sqlite\\2.2.4\\microsoft.data.sqlite.2.2.4.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.data.sqlite.core\\2.2.4\\microsoft.data.sqlite.core.2.2.4.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.entityframeworkcore\\5.0.11\\microsoft.entityframeworkcore.5.0.11.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.entityframeworkcore.abstractions\\5.0.11\\microsoft.entityframeworkcore.abstractions.5.0.11.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.entityframeworkcore.analyzers\\5.0.11\\microsoft.entityframeworkcore.analyzers.5.0.11.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.entityframeworkcore.relational\\5.0.11\\microsoft.entityframeworkcore.relational.5.0.11.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.apidescription.server\\3.0.0\\microsoft.extensions.apidescription.server.3.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\5.0.0\\microsoft.extensions.caching.abstractions.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.caching.memory\\5.0.0\\microsoft.extensions.caching.memory.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.configuration\\2.0.0\\microsoft.extensions.configuration.2.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\5.0.0\\microsoft.extensions.configuration.abstractions.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.configuration.binder\\2.0.0\\microsoft.extensions.configuration.binder.2.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\5.0.2\\microsoft.extensions.dependencyinjection.5.0.2.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\5.0.0\\microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.dependencymodel\\5.0.0\\microsoft.extensions.dependencymodel.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\3.1.8\\microsoft.extensions.fileproviders.abstractions.3.1.8.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.hosting.abstractions\\3.1.8\\microsoft.extensions.hosting.abstractions.3.1.8.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.logging\\5.0.0\\microsoft.extensions.logging.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\5.0.0\\microsoft.extensions.logging.abstractions.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.options\\5.0.0\\microsoft.extensions.options.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.options.configurationextensions\\2.0.0\\microsoft.extensions.options.configurationextensions.2.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.extensions.primitives\\5.0.0\\microsoft.extensions.primitives.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.identity.client\\4.21.1\\microsoft.identity.client.4.21.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.identitymodel.jsonwebtokens\\6.8.0\\microsoft.identitymodel.jsonwebtokens.6.8.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.identitymodel.logging\\6.8.0\\microsoft.identitymodel.logging.6.8.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.identitymodel.protocols\\6.8.0\\microsoft.identitymodel.protocols.6.8.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.identitymodel.protocols.openidconnect\\6.8.0\\microsoft.identitymodel.protocols.openidconnect.6.8.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.identitymodel.tokens\\6.8.0\\microsoft.identitymodel.tokens.6.8.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.netcore.platforms\\5.0.0\\microsoft.netcore.platforms.5.0.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.openapi\\1.2.3\\microsoft.openapi.1.2.3.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.win32.primitives\\4.3.0\\microsoft.win32.primitives.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.win32.registry\\4.7.0\\microsoft.win32.registry.4.7.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\microsoft.win32.systemevents\\5.0.0\\microsoft.win32.systemevents.5.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\miniprofiler.aspnetcore\\4.2.22\\miniprofiler.aspnetcore.4.2.22.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\miniprofiler.aspnetcore.mvc\\4.2.22\\miniprofiler.aspnetcore.mvc.4.2.22.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\miniprofiler.shared\\4.2.22\\miniprofiler.shared.4.2.22.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\mysql.data\\8.0.21\\mysql.data.8.0.21.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\netstandard.library\\1.6.1\\netstandard.library.1.6.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\newtonsoft.json\\12.0.3\\newtonsoft.json.12.0.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\npgsql\\4.1.3.1\\npgsql.4.1.3.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\oracle.manageddataaccess.core\\3.21.1\\oracle.manageddataaccess.core.3.21.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\portable.bouncycastle\\1.8.10\\portable.bouncycastle.1.8.10.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\quartz\\3.3.2\\quartz.3.3.2.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.native.system\\4.3.0\\runtime.native.system.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.native.system.io.compression\\4.3.0\\runtime.native.system.io.compression.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.native.system.net.http\\4.3.0\\runtime.native.system.net.http.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog\\2.10.0\\serilog.2.10.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog.aspnetcore\\4.1.0\\serilog.aspnetcore.4.1.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog.extensions.hosting\\4.1.2\\serilog.extensions.hosting.4.1.2.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog.extensions.logging\\3.0.1\\serilog.extensions.logging.3.0.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog.formatting.compact\\1.1.0\\serilog.formatting.compact.1.1.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog.settings.configuration\\3.1.0\\serilog.settings.configuration.3.1.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog.sinks.console\\3.1.1\\serilog.sinks.console.3.1.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog.sinks.debug\\2.0.0\\serilog.sinks.debug.2.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\serilog.sinks.file\\4.1.0\\serilog.sinks.file.4.1.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlitepclraw.bundle_green\\1.1.12\\sqlitepclraw.bundle_green.1.1.12.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlitepclraw.core\\1.1.12\\sqlitepclraw.core.1.1.12.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlitepclraw.lib.e_sqlite3.linux\\1.1.12\\sqlitepclraw.lib.e_sqlite3.linux.1.1.12.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlitepclraw.lib.e_sqlite3.osx\\1.1.12\\sqlitepclraw.lib.e_sqlite3.osx.1.1.12.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlitepclraw.lib.e_sqlite3.v110_xp\\1.1.12\\sqlitepclraw.lib.e_sqlite3.v110_xp.1.1.12.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlitepclraw.provider.e_sqlite3.netstandard11\\1.1.12\\sqlitepclraw.provider.e_sqlite3.netstandard11.1.1.12.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlsugarcore\\5.0.4.2\\sqlsugarcore.5.0.4.2.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlsugarcore.dm\\1.0.0\\sqlsugarcore.dm.1.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sqlsugarcore.kdbndp\\1.0.0\\sqlsugarcore.kdbndp.1.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\ssh.net\\2016.1.0\\ssh.net.2016.1.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\sshnet.security.cryptography\\1.2.0\\sshnet.security.cryptography.1.2.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\swashbuckle.aspnetcore\\6.2.3\\swashbuckle.aspnetcore.6.2.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\swashbuckle.aspnetcore.swagger\\6.2.3\\swashbuckle.aspnetcore.swagger.6.2.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\swashbuckle.aspnetcore.swaggergen\\6.2.3\\swashbuckle.aspnetcore.swaggergen.6.2.3.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\swashbuckle.aspnetcore.swaggerui\\6.2.3\\swashbuckle.aspnetcore.swaggerui.6.2.3.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.appcontext\\4.3.0\\system.appcontext.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.buffers\\4.5.0\\system.buffers.4.5.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.collections.concurrent\\4.3.0\\system.collections.concurrent.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.collections.immutable\\5.0.0\\system.collections.immutable.5.0.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.componentmodel\\4.3.0\\system.componentmodel.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.componentmodel.annotations\\5.0.0\\system.componentmodel.annotations.5.0.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.componentmodel.primitives\\4.3.0\\system.componentmodel.primitives.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.configuration.configurationmanager\\4.7.0\\system.configuration.configurationmanager.4.7.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.console\\4.3.0\\system.console.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.data.common\\4.3.0\\system.data.common.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.diagnostics.debug\\4.3.0\\system.diagnostics.debug.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.diagnostics.diagnosticsource\\5.0.1\\system.diagnostics.diagnosticsource.5.0.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.diagnostics.performancecounter\\4.7.0\\system.diagnostics.performancecounter.4.7.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.diagnostics.stacktrace\\4.3.0\\system.diagnostics.stacktrace.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.diagnostics.tools\\4.3.0\\system.diagnostics.tools.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.diagnostics.tracesource\\4.0.0\\system.diagnostics.tracesource.4.0.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.directoryservices\\4.7.0\\system.directoryservices.4.7.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.directoryservices.protocols\\4.7.0\\system.directoryservices.protocols.4.7.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.drawing.common\\5.0.2\\system.drawing.common.5.0.2.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.dynamic.runtime\\4.3.0\\system.dynamic.runtime.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.globalization.calendars\\4.3.0\\system.globalization.calendars.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.globalization.extensions\\4.3.0\\system.globalization.extensions.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.identitymodel.tokens.jwt\\6.8.0\\system.identitymodel.tokens.jwt.6.8.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.io.compression\\4.3.0\\system.io.compression.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.io.compression.zipfile\\4.3.0\\system.io.compression.zipfile.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.io.filesystem\\4.3.0\\system.io.filesystem.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.io.filesystem.accesscontrol\\4.7.0\\system.io.filesystem.accesscontrol.4.7.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.io.filesystem.primitives\\4.3.0\\system.io.filesystem.primitives.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.linq\\4.3.0\\system.linq.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.linq.dynamic.core\\1.2.2\\system.linq.dynamic.core.1.2.2.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.linq.expressions\\4.3.0\\system.linq.expressions.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.net.http\\4.3.0\\system.net.http.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.net.nameresolution\\4.0.0\\system.net.nameresolution.4.0.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.net.primitives\\4.3.0\\system.net.primitives.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.net.sockets\\4.3.0\\system.net.sockets.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.objectmodel\\4.3.0\\system.objectmodel.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection.emit\\4.3.0\\system.reflection.emit.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection.emit.ilgeneration\\4.3.0\\system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection.emit.lightweight\\4.3.0\\system.reflection.emit.lightweight.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection.extensions\\4.3.0\\system.reflection.extensions.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.reflection.metadata\\5.0.0\\system.reflection.metadata.5.0.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection.typeextensions\\4.3.0\\system.reflection.typeextensions.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.runtime.caching\\4.7.0\\system.runtime.caching.4.7.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\5.0.0\\system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.interopservices.runtimeinformation\\4.3.0\\system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.numerics\\4.3.0\\system.runtime.numerics.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.serialization.primitives\\4.3.0\\system.runtime.serialization.primitives.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.security.accesscontrol\\4.7.0\\system.security.accesscontrol.4.7.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.security.cryptography.algorithms\\4.3.0\\system.security.cryptography.algorithms.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.security.cryptography.cng\\4.5.0\\system.security.cryptography.cng.4.5.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.security.cryptography.csp\\4.3.0\\system.security.cryptography.csp.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.security.cryptography.encoding\\4.3.0\\system.security.cryptography.encoding.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.security.cryptography.openssl\\4.3.0\\system.security.cryptography.openssl.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.security.cryptography.primitives\\4.3.0\\system.security.cryptography.primitives.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.security.cryptography.protecteddata\\4.7.0\\system.security.cryptography.protecteddata.4.7.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.security.cryptography.x509certificates\\4.3.0\\system.security.cryptography.x509certificates.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.security.permissions\\4.7.0\\system.security.permissions.4.7.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.security.principal.windows\\4.7.0\\system.security.principal.windows.4.7.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.text.encoding.codepages\\5.0.0\\system.text.encoding.codepages.5.0.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.text.encoding.extensions\\4.3.0\\system.text.encoding.extensions.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.text.json\\5.0.2\\system.text.json.5.0.2.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.text.regularexpressions\\4.3.0\\system.text.regularexpressions.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.threading\\4.3.0\\system.threading.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.threading.tasks.parallel\\4.3.0\\system.threading.tasks.parallel.4.3.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.threading.thread\\4.0.0\\system.threading.thread.4.0.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.threading.threadpool\\4.0.10\\system.threading.threadpool.4.0.10.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.threading.timer\\4.3.0\\system.threading.timer.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.valuetuple\\4.5.0\\system.valuetuple.4.5.0.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.windows.extensions\\4.7.0\\system.windows.extensions.4.7.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.xml.readerwriter\\4.3.0\\system.xml.readerwriter.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.xml.xdocument\\4.3.0\\system.xml.xdocument.4.3.0.nupkg.sha512",
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.xml.xmldocument\\4.0.1\\system.xml.xmldocument.4.0.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.xml.xpath\\4.0.1\\system.xml.xpath.4.0.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\system.xml.xpath.xmldocument\\4.0.1\\system.xml.xpath.xmldocument.4.0.1.nupkg.sha512",
"C:\\Users\\z1303\\.nuget\\packages\\uaparser\\3.1.46\\uaparser.3.1.46.nupkg.sha512"
],
"logs": []
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Core.Attributes
{
public class OpAttribute : Attribute
{
private readonly LogOpType logOpType;
public OpAttribute(LogOpType logOpType)
{
this.logOpType = logOpType;
}
public int OpType { get => (int)logOpType; }
//测试修改
}
}

View File

@@ -0,0 +1,33 @@
using Furion.ConfigurableOptions;
namespace Ewide.Core
{
/// <summary>
/// 缓存配置
/// </summary>
public class CacheOptions : IConfigurableOptions
{
/// <summary>
/// 缓存类型
/// </summary>
public CacheType CacheType { get; set; }
/// <summary>
/// Redis配置
/// </summary>
public string RedisConnectionString { get; set; }
}
public enum CacheType
{
/// <summary>
/// 内存缓存
/// </summary>
MemoryCache,
/// <summary>
/// Redis缓存
/// </summary>
RedisCache
}
}

View File

@@ -0,0 +1,107 @@
using System;
using System.Threading.Tasks;
namespace Ewide.Core
{
/// <summary>
/// 缓存接口
/// </summary>
public interface ICache
{
/// <summary>
/// 用于在 key 存在时删除 key
/// </summary>
/// <param name="key">键</param>
long Del(params string[] key);
/// <summary>
/// 用于在 key 存在时删除 key
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
Task<long> DelAsync(params string[] key);
/// <summary>
/// 用于在 key 模板存在时删除
/// </summary>
/// <param name="pattern">key模板</param>
/// <returns></returns>
Task<long> DelByPatternAsync(string pattern);
/// <summary>
/// 检查给定 key 是否存在
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
bool Exists(string key);
/// <summary>
/// 检查给定 key 是否存在
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
Task<bool> ExistsAsync(string key);
/// <summary>
/// 获取指定 key 的值
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
string Get(string key);
/// <summary>
/// 获取指定 key 的值
/// </summary>
/// <typeparam name="T">byte[] 或其他类型</typeparam>
/// <param name="key">键</param>
/// <returns></returns>
T Get<T>(string key);
/// <summary>
/// 获取指定 key 的值
/// </summary>
/// <param name="key">键</param>
/// <returns></returns>
Task<string> GetAsync(string key);
/// <summary>
/// 获取指定 key 的值
/// </summary>
/// <typeparam name="T">byte[] 或其他类型</typeparam>
/// <param name="key">键</param>
/// <returns></returns>
Task<T> GetAsync<T>(string key);
/// <summary>
/// 设置指定 key 的值所有写入参数object都支持string | byte[] | 数值 | 对象
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
bool Set(string key, object value);
/// <summary>
/// 设置指定 key 的值所有写入参数object都支持string | byte[] | 数值 | 对象
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="expire">有效期</param>
bool Set(string key, object value, TimeSpan expire);
/// <summary>
/// 设置指定 key 的值所有写入参数object都支持string | byte[] | 数值 | 对象
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <returns></returns>
Task<bool> SetAsync(string key, object value);
/// <summary>
/// 设置指定 key 的值所有写入参数object都支持string | byte[] | 数值 | 对象
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="expire">有效期</param>
/// <returns></returns>
Task<bool> SetAsync(string key, object value, TimeSpan expire);
}
}

View File

@@ -0,0 +1,125 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Furion.DependencyInjection;
using Microsoft.Extensions.Caching.Memory;
namespace Ewide.Core
{
/// <summary>
/// 内存缓存
/// </summary>
public class MemoryCache : ICache, ISingleton
{
private readonly IMemoryCache _memoryCache;
public MemoryCache(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
}
public long Del(params string[] key)
{
foreach (var k in key)
{
_memoryCache.Remove(k);
}
return key.Length;
}
public Task<long> DelAsync(params string[] key)
{
foreach (var k in key)
{
_memoryCache.Remove(k);
}
return Task.FromResult((long)key.Length);
}
public async Task<long> DelByPatternAsync(string pattern)
{
if (string.IsNullOrEmpty(pattern))
return default;
//pattern = Regex.Replace(pattern, @"\{*.\}", "(.*)");
var keys = GetAllKeys().Where(k => k.StartsWith(pattern));
if (keys != null && keys.Any())
return await DelAsync(keys.ToArray());
return default;
}
public bool Exists(string key)
{
return _memoryCache.TryGetValue(key, out _);
}
public Task<bool> ExistsAsync(string key)
{
return Task.FromResult(_memoryCache.TryGetValue(key, out _));
}
public string Get(string key)
{
return _memoryCache.Get(key)?.ToString();
}
public T Get<T>(string key)
{
return _memoryCache.Get<T>(key);
}
public Task<string> GetAsync(string key)
{
return Task.FromResult(Get(key));
}
public Task<T> GetAsync<T>(string key)
{
return Task.FromResult(Get<T>(key));
}
public bool Set(string key, object value)
{
_memoryCache.Set(key, value);
return true;
}
public bool Set(string key, object value, TimeSpan expire)
{
_memoryCache.Set(key, value, expire);
return true;
}
public Task<bool> SetAsync(string key, object value)
{
Set(key, value);
return Task.FromResult(true);
}
public Task<bool> SetAsync(string key, object value, TimeSpan expire)
{
Set(key, value, expire);
return Task.FromResult(true);
}
private List<string> GetAllKeys()
{
const BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
var entries = _memoryCache.GetType().GetField("_entries", flags).GetValue(_memoryCache);
var cacheItems = entries.GetType().GetProperty("Keys").GetValue(entries) as ICollection<object>; //entries as IDictionary;
var keys = new List<string>();
if (cacheItems == null) return keys;
return cacheItems.Select(u => u.ToString()).ToList();
//foreach (DictionaryEntry cacheItem in cacheItems)
//{
// keys.Add(cacheItem.Key.ToString());
//}
//return keys;
}
}
}

View File

@@ -0,0 +1,95 @@
using Furion.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Ewide.Core
{
/// <summary>
/// Redis缓存
/// </summary>
public class RedisCache : ICache, ISingleton
{
public RedisCache(IOptions<CacheOptions> cacheOptions)
{
var csredis = new CSRedis.CSRedisClient(cacheOptions.Value.RedisConnectionString);
RedisHelper.Initialization(csredis);
}
public long Del(params string[] key)
{
return RedisHelper.Del(key);
}
public Task<long> DelAsync(params string[] key)
{
return RedisHelper.DelAsync(key);
}
public async Task<long> DelByPatternAsync(string pattern)
{
if (string.IsNullOrEmpty(pattern))
return default;
//pattern = Regex.Replace(pattern, @"\{.*\}", "*");
var keys = (await RedisHelper.KeysAsync(pattern));
if (keys != null && keys.Length > 0)
{
return await RedisHelper.DelAsync(keys);
}
return default;
}
public bool Exists(string key)
{
return RedisHelper.Exists(key);
}
public Task<bool> ExistsAsync(string key)
{
return RedisHelper.ExistsAsync(key);
}
public string Get(string key)
{
return RedisHelper.Get(key);
}
public T Get<T>(string key)
{
return RedisHelper.Get<T>(key);
}
public Task<string> GetAsync(string key)
{
return RedisHelper.GetAsync(key);
}
public Task<T> GetAsync<T>(string key)
{
return RedisHelper.GetAsync<T>(key);
}
public bool Set(string key, object value)
{
return RedisHelper.Set(key, value);
}
public bool Set(string key, object value, TimeSpan expire)
{
return RedisHelper.Set(key, value, expire);
}
public Task<bool> SetAsync(string key, object value)
{
return RedisHelper.SetAsync(key, value);
}
public Task<bool> SetAsync(string key, object value, TimeSpan expire)
{
return RedisHelper.SetAsync(key, value, expire);
}
}
}

View File

@@ -0,0 +1,227 @@
using Furion;
using Furion.DependencyInjection;
using Furion.DistributedIDGenerator;
using Furion.JsonSerialization;
using Microsoft.Extensions.Caching.Memory;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
namespace Ewide.Core
{
/// <summary>
/// 点选验证码
/// </summary>
public class ClickWordCaptcha : IClickWordCaptcha, ITransient
{
private readonly IMemoryCache _memoryCache;
public ClickWordCaptcha(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
}
/// <summary>
/// 生成验证码图片
/// </summary>
/// <param name="code"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
public ClickWordCaptchaResult CreateCaptchaImage(string code, int width, int height)
{
var rtnResult = new ClickWordCaptchaResult();
// 变化点: 3个字
int rightCodeLength = 3;
Bitmap bitmap = null;
Graphics g = null;
MemoryStream ms = null;
Random random = new Random();
Color[] colorArray = { Color.Black, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
string bgImagesDir = Path.Combine(App.WebHostEnvironment.WebRootPath, "Captcha/Image");
string[] bgImagesFiles = Directory.GetFiles(bgImagesDir);
//if (bgImagesFiles == null || bgImagesFiles.Length == 0)
// throw Oops.Oh("背景图片文件丢失");
// 字体来自https://www.zcool.com.cn/special/zcoolfonts/
string fontsDir = Path.Combine(App.WebHostEnvironment.WebRootPath, "Captcha/Font");
string[] fontFiles = new DirectoryInfo(fontsDir)?.GetFiles()
?.Where(m => m.Extension.ToLower() == ".ttf")
?.Select(m => m.FullName).ToArray();
//if (fontFiles == null || fontFiles.Length == 0)
// throw Oops.Oh("字体文件丢失");
int imgIndex = random.Next(bgImagesFiles.Length);
string randomImgFile = bgImagesFiles[imgIndex];
var imageStream = Image.FromFile(randomImgFile);
bitmap = new Bitmap(imageStream, width, height);
imageStream.Dispose();
g = Graphics.FromImage(bitmap);
Color[] penColor = { Color.Red, Color.Green, Color.Blue };
int code_length = code.Length;
List<string> words = new List<string>();
for (int i = 0; i < code_length; i++)
{
int colorIndex = random.Next(colorArray.Length);
int fontIndex = random.Next(fontFiles.Length);
Font f = LoadFont(fontFiles[fontIndex], 15, FontStyle.Regular);
Brush b = new SolidBrush(colorArray[colorIndex]);
int _y = random.Next(height);
if (_y > (height - 30))
_y = _y - 60;
int _x = width / (i + 1);
if ((width - _x) < 50)
{
_x = width - 60;
}
string word = code.Substring(i, 1);
if (rtnResult.repData.point.Count < rightCodeLength)
{
// (int, int) percentPos = ToPercentPos((width, height), (_x, _y));
// 添加正确答案 位置数据
rtnResult.repData.point.Add(new PointPosModel()
{
X = _x, //percentPos.Item1,
Y = _y //percentPos.Item2,
});
words.Add(word);
}
g.DrawString(word, f, b, _x, _y);
}
rtnResult.repData.wordList = words;
ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Jpeg);
g.Dispose();
bitmap.Dispose();
ms.Dispose();
rtnResult.repData.originalImageBase64 = Convert.ToBase64String(ms.GetBuffer()); //"data:image/jpg;base64," +
rtnResult.repData.token = IDGen.NextID().ToString();
// 缓存验证码正确位置集合
var cacheOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(30));
_memoryCache.Set(CommonConst.CACHE_KEY_CODE + rtnResult.repData.token, rtnResult.repData.point, cacheOptions);
rtnResult.repData.point = null; // 清空位置信息
return rtnResult;
}
/// <summary>
/// 转换为相对于图片的百分比单位
/// </summary>
/// <param name="widthAndHeight">图片宽高</param>
/// <param name="xAndy">相对于图片的绝对尺寸</param>
/// <returns>(int:xPercent, int:yPercent)</returns>
private (int, int) ToPercentPos((int, int) widthAndHeight, (int, int) xAndy)
{
(int, int) rtnResult = (0, 0);
// 注意: int / int = int (小数部分会被截断)
rtnResult.Item1 = (int)(((double)xAndy.Item1) / ((double)widthAndHeight.Item1) * 100);
rtnResult.Item2 = (int)(((double)xAndy.Item2) / ((double)widthAndHeight.Item2) * 100);
return rtnResult;
}
/// <summary>
/// 加载字体
/// </summary>
/// <param name="path">字体文件路径,包含字体文件名和后缀名</param>
/// <param name="size">大小</param>
/// <param name="fontStyle">字形(常规/粗体/斜体/粗斜体)</param>
private Font LoadFont(string path, int size, FontStyle fontStyle)
{
var pfc = new System.Drawing.Text.PrivateFontCollection();
pfc.AddFontFile(path);// 字体文件路径
Font myFont = new Font(pfc.Families[0], size, fontStyle);
return myFont;
}
/// <summary>
/// 随机绘制字符串
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public string RandomCode(int number)
{
var str = "左怀军天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰余成岁律吕调阳云腾致雨露结为霜金生丽水玉出昆冈剑号巨阙珠称夜光果珍李柰菜重芥姜海咸河淡鳞潜羽翔龙师火帝鸟官人皇始制文字乃服衣裳推位让国有虞陶唐吊民伐罪周发殷汤坐朝问道垂拱平章爱育黎首臣伏戎羌遐迩体率宾归王";
char[] str_char_arrary = str.ToArray();
Random rand = new Random();
HashSet<string> hs = new HashSet<string>();
bool randomBool = true;
while (randomBool)
{
if (hs.Count == number)
break;
int rand_number = rand.Next(str_char_arrary.Length);
hs.Add(str_char_arrary[rand_number].ToString());
}
return string.Join("", hs);
}
/// <summary>
/// 验证码验证
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public dynamic CheckCode(ClickWordCaptchaInput input)
{
var res = new ClickWordCaptchaResult();
var rightVCodePos = _memoryCache.Get(CommonConst.CACHE_KEY_CODE + input.Token) as List<PointPosModel>;
if (rightVCodePos == null)
{
res.repCode = "6110";
res.repMsg = "验证码已失效,请重新获取";
return res;
}
var userVCodePos = JSON.GetJsonSerializer().Deserialize<List<PointPosModel>>(input.PointJson);
if (userVCodePos == null || userVCodePos.Count < rightVCodePos.Count)
{
res.repCode = "6111";
res.repMsg = "验证码无效";
return res;
}
int allowOffset = 20; // 允许的偏移量(点触容错)
for (int i = 0; i < userVCodePos.Count; i++)
{
var xOffset = userVCodePos[i].X - rightVCodePos[i].X;
var yOffset = userVCodePos[i].Y - rightVCodePos[i].Y;
xOffset = Math.Abs(xOffset); // x轴偏移量
yOffset = Math.Abs(yOffset); // y轴偏移量
// 只要有一个点的任意一个轴偏移量大于allowOffset则验证不通过
if (xOffset > allowOffset || yOffset > allowOffset)
{
res.repCode = "6112";
res.repMsg = "验证码错误";
return res;
}
}
_memoryCache.Remove(CommonConst.CACHE_KEY_CODE + input.Token);
res.repCode = "0000";
res.repMsg = "验证成功";
return res;
}
}
/// <summary>
/// 记录正确位置
/// </summary>
public class PointPosModel
{
public int X { get; set; }
public int Y { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
using Furion.DependencyInjection;
using System.ComponentModel.DataAnnotations;
namespace Ewide.Core
{
/// <summary>
/// 点击验证码输入参数
/// </summary>
[SuppressSniffer]
public class ClickWordCaptchaInput
{
/// <summary>
/// 验证码类型
/// </summary>
[Required(ErrorMessage = "验证码类型")]
public string CaptchaType { get; set; }
/// <summary>
/// 坐标点集合
/// </summary>
[Required(ErrorMessage = "坐标点集合不能为空")]
public string PointJson { get; set; }
/// <summary>
/// Token
/// </summary>
public string Token { get; set; }
}
}

View File

@@ -0,0 +1,44 @@
using Furion.DependencyInjection;
using System.Collections.Generic;
namespace Ewide.Core
{
/// <summary>
/// 验证码输出参数
/// </summary>
[SuppressSniffer]
public class ClickWordCaptchaResult
{
public string repCode { get; set; } = "0000";
public string repMsg { get; set; }
public RepData repData { get; set; } = new RepData();
public bool error { get; set; }
public bool success { get; set; } = true;
}
[SuppressSniffer]
public class RepData
{
public string captchaId { get; set; }
public string projectCode { get; set; }
public string captchaType { get; set; }
public string captchaOriginalPath { get; set; }
public string captchaFontType { get; set; }
public string captchaFontSize { get; set; }
public string secretKey { get; set; }
public string originalImageBase64 { get; set; }
public List<PointPosModel> point { get; set; } = new List<PointPosModel>();
public string jigsawImageBase64 { get; set; }
public List<string> wordList { get; set; } = new List<string>();
public string pointList { get; set; }
public string pointJson { get; set; }
public string token { get; set; }
public bool result { get; set; }
public string captchaVerification { get; set; }
}
[SuppressSniffer]
public class WordList
{
}
}

View File

@@ -0,0 +1,9 @@
namespace Ewide.Core
{
public interface IClickWordCaptcha
{
dynamic CheckCode(ClickWordCaptchaInput input);
ClickWordCaptchaResult CreateCaptchaImage(string code, int width, int height);
string RandomCode(int number);
}
}

View File

@@ -0,0 +1,130 @@
using Furion.DependencyInjection;
using Microsoft.Extensions.Caching.Memory;
using System;
using System.ComponentModel.DataAnnotations;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Text;
namespace Ewide.Core
{
/// <summary>
/// 常规验证码
/// </summary>
public class GeneralCaptcha : IGeneralCaptcha, ITransient
{
private readonly IMemoryCache _memoryCache;
public GeneralCaptcha(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
}
/// <summary>
/// 生成验证码图片
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
public string CreateCaptchaImage(int length = 4)
{
return Convert.ToBase64String(Draw(length));
}
private string GenerateRandom(int length)
{
var chars = new StringBuilder();
// 验证码的字符集,去掉了一些容易混淆的字符
char[] character = { '2', '3', '4', '5', '6', '8', '9', 'a', 'b', 'd', 'e', 'f', 'h', 'k', 'm', 'n', 'r', 'x', 'y', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };
Random rnd = new Random();
// 生成验证码字符串
for (int i = 0; i < length; i++)
{
chars.Append(character[rnd.Next(character.Length)]);
}
return chars.ToString();
}
private byte[] Draw(int length = 4)
{
int codeW = 110;
int codeH = 36;
int fontSize = 22;
// 颜色列表,用于验证码、噪线、噪点
Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
// 字体列表,用于验证码
string[] fonts = new[] { "Times New Roman", "Verdana", "Arial", "Gungsuh", "Impact" };
var code = GenerateRandom(length); // 随机字符串集合
using (Bitmap bmp = new Bitmap(codeW, codeH))
using (Graphics g = Graphics.FromImage(bmp))
using (MemoryStream ms = new MemoryStream())
{
g.Clear(Color.White);
Random rnd = new Random();
// 画噪线
for (int i = 0; i < 1; i++)
{
int x1 = rnd.Next(codeW);
int y1 = rnd.Next(codeH);
int x2 = rnd.Next(codeW);
int y2 = rnd.Next(codeH);
var clr = color[rnd.Next(color.Length)];
g.DrawLine(new Pen(clr), x1, y1, x2, y2);
}
// 画验证码字符串
string fnt;
Font ft;
for (int i = 0; i < code.Length; i++)
{
fnt = fonts[rnd.Next(fonts.Length)];
ft = new Font(fnt, fontSize);
var clr = color[rnd.Next(color.Length)];
g.DrawString(code[i].ToString(), ft, new SolidBrush(clr), (float)i * 24 + 2, (float)0);
}
// 缓存验证码正确集合
var cacheOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromSeconds(30));
_memoryCache.Set(CommonConst.CACHE_KEY_CODE + Guid.NewGuid().ToString(), code, cacheOptions);
// 将验证码图片写入内存流
bmp.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
}
/// <summary>
/// 验证码验证
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public dynamic CheckCode(GeneralCaptchaInput input)
{
var res = new ClickWordCaptchaResult();
var code = _memoryCache.Get(CommonConst.CACHE_KEY_CODE + input.Token);
if (code == null)
{
res.repCode = "6110";
res.repMsg = "验证码已失效,请重新获取";
return res;
}
if (input.CaptchaCode != (string)code)
{
res.repCode = "6112";
res.repMsg = "验证码错误";
return res;
}
_memoryCache.Remove(CommonConst.CACHE_KEY_CODE + input.Token);
res.repCode = "0000";
res.repMsg = "验证成功";
return res;
}
}
}

View File

@@ -0,0 +1,29 @@
using Furion.DependencyInjection;
using System.ComponentModel.DataAnnotations;
namespace Ewide.Core
{
/// <summary>
/// 常规验证码输入
/// </summary>
[SuppressSniffer]
public class GeneralCaptchaInput
{
/// <summary>
/// 验证码类型
/// </summary>
[Required(ErrorMessage = "验证码类型")]
public string CaptchaType { get; set; }
/// <summary>
/// 验证码字符
/// </summary>
[Required(ErrorMessage = "验证码字符不能为空")]
public string CaptchaCode { get; set; }
/// <summary>
/// Token
/// </summary>
public string Token { get; set; }
}
}

View File

@@ -0,0 +1,8 @@
namespace Ewide.Core
{
public interface IGeneralCaptcha
{
dynamic CheckCode(GeneralCaptchaInput input);
string CreateCaptchaImage(int length = 4);
}
}

View File

@@ -0,0 +1,26 @@
namespace Ewide.Core
{
public class ClaimConst
{
/// <summary>
/// 用户Id
/// </summary>
public const string CLAINM_USERID = "UserId";
/// <summary>
/// 账号
/// </summary>
public const string CLAINM_ACCOUNT = "Account";
/// <summary>
/// 名称
/// </summary>
public const string CLAINM_NAME = "Name";
/// <summary>
/// 是否超级管理
/// </summary>
public const string CLAINM_SUPERADMIN = "SuperAdmin";
}
}

View File

@@ -0,0 +1,49 @@
namespace Ewide.Core
{
public class CommonConst
{
/// <summary>
/// 默认密码
/// </summary>
public const string DEFAULT_PASSWORD = "123456";
/// <summary>
/// 用户缓存
/// </summary>
public const string CACHE_KEY_USER = "user_";
/// <summary>
/// 菜单缓存
/// </summary>
public const string CACHE_KEY_MENU = "menu_";
/// <summary>
/// 权限缓存
/// </summary>
public const string CACHE_KEY_PERMISSION = "permission_";
/// <summary>
/// 数据范围缓存
/// </summary>
public const string CACHE_KEY_DATASCOPE = "datascope_";
/// <summary>
/// 验证码缓存
/// </summary>
public const string CACHE_KEY_CODE = "vercode_";
/// <summary>
/// 区域缓存
/// </summary>
public const string CACHE_AREA_CODE = "areaCode";
/// <summary>
/// 所有缓存关键字集合
/// </summary>
public const string CACHE_KEY_ALL = "allkey";
/// <summary>
/// 定时任务缓存
/// </summary>
public const string CACHE_KEY_TIMER_JOB = "timerjob";
}
}

View File

@@ -0,0 +1,91 @@
using Ewide.Core.Service;
using Ewide.Core.Service.Area;
using Ewide.Core.Service.Area.Dto;
using Furion.DynamicApiController;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Core.Controller
{
/// <summary>
/// 区域代码相关服务
/// </summary>
[ApiDescriptionSettings(Name = "AreaCode", Order = 160)]
public class AreaCodeController : IDynamicApiController
{
private readonly IAreaCodeService _areaCodeService;
private readonly IUserManager _userManager;
private readonly ISysUserService _sysUserService;
public AreaCodeController(IAreaCodeService areaCodeService, IUserManager userManager, ISysUserService sysUserService)
{
_areaCodeService = areaCodeService;
_userManager = userManager;
_sysUserService = sysUserService;
}
/// <summary>
/// 查询
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/sysArea/page")]
public async Task<dynamic> QueryAreaCodePageList([FromBody] AreaCodeInput input)
{
return (await _areaCodeService.QueryAreaCodePageList(input));
}
/// <summary>
///
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
[HttpGet("/sysArea/{code}")]
public async Task<AreaCodeOutput> GetAreaCode([FromRoute]string code)
{
return (await _areaCodeService.GetAreaCode(code)).Adapt<AreaCodeOutput>();
}
/// <summary>
/// 添加区域信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/sysArea/add")]
public async Task AddAreaCode(AreaCodeInput input)
{
await _areaCodeService.AddAreaCode(input);
}
/// <summary>
/// 更新区域信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/sysArea/edit")]
public async Task UpdateAreaCode(AreaCodeInput input)
{
await _areaCodeService.UpdateAreaCode(input);
}
/// <summary>
/// 删除区域
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/sysArea/delete")]
public async Task DeleteAreaCode(DeleteAreaCodeInput input)
{
await _areaCodeService.DeleteAreaCode(input);
}
/// <summary>
/// 获取目录树
/// </summary>
/// <returns></returns>
[HttpGet("/sysArea/tree")]
public async Task<List<AreaTreeNode>> GetAreaCodeTree([FromQuery]int? level)
{
return await _areaCodeService.GetAreaCodeTree(level);
}
}
}

View File

@@ -0,0 +1,72 @@
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;
namespace Ewide.Core
{
/// <summary>
/// 自定义实体基类
/// </summary>
public abstract class DEntityBase : IEntity
{
/// <summary>
/// 主键Id
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Comment("Id主键")]
[Column("Id", TypeName = "varchar(36)")]
public virtual string Id { get; set; } = String.Empty;
/// <summary>
/// 创建时间
/// </summary>
[Comment("创建时间")]
public virtual DateTime? CreatedTime { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[Comment("更新时间")]
public virtual DateTime? UpdatedTime { get; set; }
/// <summary>
/// 创建者Id
/// </summary>
[Comment("创建者Id")]
[Column("CreatedUserId", TypeName = "varchar(36)")]
public virtual string CreatedUserId { get; set; }
/// <summary>
/// 创建者名称
/// </summary>
[Comment("创建者名称")]
[MaxLength(20)]
public virtual string CreatedUserName { get; set; }
/// <summary>
/// 修改者Id
/// </summary>
[Comment("修改者Id")]
[Column("UpdatedUserId", TypeName = "varchar(36)")]
public virtual string UpdatedUserId { get; set; }
/// <summary>
/// 修改者名称
/// </summary>
[Comment("修改者名称")]
[MaxLength(20)]
public virtual string UpdatedUserName { get; set; }
/// <summary>
/// 软删除
/// </summary>
[JsonIgnore]
[Comment("软删除标记")]
[Column("IsDeleted", TypeName = "bit")]
public virtual bool IsDeleted { get; set; } = false;
}
}

View File

@@ -0,0 +1,57 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
namespace Ewide.Core
{
/// <summary>
/// 系统应用表
/// </summary>
[Table("sys_app")]
[Comment("系统应用表")]
public class SysApp : DEntityBase
{
/// <summary>
/// 名称
/// </summary>
[Comment("名称")]
public string Name { get; set; }
/// <summary>
/// 编码
/// </summary>
[Comment("编码")]
public string Code { get; set; }
/// <summary>
/// 图标
/// </summary>
[Comment("图标")]
public string Icon { get; set; }
/// <summary>
/// 图标颜色
/// </summary>
[Comment("图标颜色")]
public string Color { get; set; }
/// <summary>
/// 是否默认激活Y-是N-否),只能有一个系统默认激活
/// 用户登录后默认展示此系统菜单
/// </summary>
[Comment("是否默认激活")]
[Column("Active", TypeName = "bit")]
public bool Active { get; set; }
/// <summary>
/// 状态(字典 0正常 1停用 2删除
/// </summary>
[Comment("状态")]
public CommonStatus Status { get; set; } = CommonStatus.ENABLE;
/// <summary>
/// 排序
/// </summary>
[Comment("排序")]
public int Sort { get; set; }
}
}

View File

@@ -0,0 +1,83 @@
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Ewide.Core
{
[Table("sys_area_code")]
[Comment("区域表")]
public class SysAreaCode: IEntity
{
[Key]
[Comment("系统使用的区域编码")]
[MaxLength(50)]
public string Code { get; set; }
[Comment("区域的行政编码")]
[MaxLength(50)]
public string AdCode { get; set; }
[Comment("名称")]
[Required]
[MaxLength(100)]
public string Name { get; set; }
[Comment("备注")]
[MaxLength(1000)]
public string Note { get; set; }
[Comment("类别")]
[Required]
public int LevelType { get; set; }
[Comment("排序")]
public int Sort { get; set; }
/// <summary>
/// 父节点就是去掉后面两位
/// </summary>
public string ParentCode => LevelType switch
{
// 市级 => 没有父级 3302
1 => string.Empty,
// 区级 => 6位取4位得到市级 330201
2 => Code[0..(Code.Length - 2)],
// 其他 => 去除后3位得到上级 330201001
_ => Code[0..(Code.Length - 3)],
};
/// <summary>
/// 多个区域有多个用户绑定自定义数据
/// </summary>
[XmlIgnore]
public ICollection<SysUser> SysUsers { get; set; }
/// <summary>
/// 中间表
/// </summary>
[XmlIgnore]
public List<SysUserArea> SysUserAreas { get; set; }
/// <summary>
/// 多个区域有多个角色绑定权限数据
/// </summary>
[XmlIgnore]
public ICollection<SysRole> SysRoles { get; set; }
/// <summary>
/// 中间表
/// </summary>
[XmlIgnore]
public List<SysRoleArea> SysRoleAreas { get; set; }
/// <summary>
/// 一个区域有多个组织
/// </summary>
[XmlIgnore]
public ICollection<SysOrg> SysOrgs { get; set; }
}
}

View File

@@ -0,0 +1,49 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
namespace Ewide.Core
{
/// <summary>
/// 代码生成表
/// </summary>
[Table("sys_code_gen")]
[Comment("代码生成表")]
public class SysCodeGen : DEntityBase
{
/// <summary>
/// 作者姓名
/// </summary>
[Comment("作者姓名")]
public string AuthorName { get; set; }
/// <summary>
/// 是否移除表前缀
/// </summary>
[Comment("是否移除表前缀")]
public string TablePrefix { get; set; }
/// <summary>
/// 生成方式
/// </summary>
[Comment("生成方式")]
public string GenerateType { get; set; }
/// <summary>
/// 数据库表名
/// </summary>
[Comment("数据库表名")]
public string TableName { get; set; }
/// <summary>
/// 命名空间
/// </summary>
[Comment("命名空间")]
public string NameSpace { get; set; }
/// <summary>
/// 业务名
/// </summary>
[Comment("业务名")]
public string BusName { get; set; }
}
}

View File

@@ -0,0 +1,104 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
namespace Ewide.Core
{
/// <summary>
/// 代码生成字段配置表
/// </summary>
[Table("sys_code_gen_config")]
[Comment("代码生成字段配置表")]
public class SysCodeGenConfig : DEntityBase
{
/// <summary>
/// 代码生成主表ID
/// </summary>
[Comment("代码生成主表ID")]
[Column("CodeGenId", TypeName = "varchar(36)")]
public string CodeGenId { get; set; }
/// <summary>
/// 数据库字段名
/// </summary>
[Comment("数据库字段名")]
public string ColumnName { get; set; }
/// <summary>
/// 字段描述
/// </summary>
[Comment("字段描述")]
public string ColumnComment { get; set; }
/// <summary>
/// .NET数据类型
/// </summary>
[Comment(".NET数据类型")]
public string NetType { get; set; }
/// <summary>
/// 作用类型(字典)
/// </summary>
[Comment("作用类型")]
public string EffectType { get; set; }
/// <summary>
/// 字典code
/// </summary>
[Comment("字典Code")]
public string DictTypeCode { get; set; }
/// <summary>
/// 列表是否缩进(字典)
/// </summary>
[Comment("列表是否缩进")]
public string WhetherRetract { get; set; }
/// <summary>
/// 是否必填(字典)
/// </summary>
[Comment("是否必填")]
public string WhetherRequired { get; set; }
/// <summary>
/// 是否是查询条件
/// </summary>
[Comment("是否是查询条件")]
public string QueryWhether { get; set; }
/// <summary>
/// 查询方式
/// </summary>
[Comment("查询方式")]
public string QueryType { get; set; }
/// <summary>
/// 列表显示
/// </summary>
[Comment("列表显示")]
public string WhetherTable { get; set; }
/// <summary>
/// 增改
/// </summary>
[Comment("增改")]
public string WhetherAddUpdate { get; set; }
/// <summary>
/// 主外键
/// </summary>
[Comment("主外键")]
public string ColumnKey { get; set; }
/// <summary>
/// 数据库中类型(物理类型)
/// </summary>
[Comment("数据库中类型")]
public string DataType { get; set; }
/// <summary>
/// 是否通用字段
/// </summary>
[Comment("是否通用字段")]
public string WhetherCommon { get; set; }
}
}

Some files were not shown because too many files have changed in this diff Show More