20230806修改账号的密码安全策略
This commit is contained in:
@@ -172,3 +172,17 @@ insert into Sys_Const ([ID],[ConstText],[ConstValue],[SortIndex],[GroupId]) valu
|
|||||||
|
|
||||||
insert into Sys_Const ([ID],[ConstText],[ConstValue],[SortIndex],[GroupId]) values (NEWID(),'集团', 'http://114.247.88.97:20080/',1,'SafeReferer')--referer白名单
|
insert into Sys_Const ([ID],[ConstText],[ConstValue],[SortIndex],[GroupId]) values (NEWID(),'集团', 'http://114.247.88.97:20080/',1,'SafeReferer')--referer白名单
|
||||||
insert into Sys_Const ([ID],[ConstText],[ConstValue],[SortIndex],[GroupId]) values (NEWID(),'nbd测试', 'https://lygcgs.com.cn/',1,'SafeReferer')--referer白名单
|
insert into Sys_Const ([ID],[ConstText],[ConstValue],[SortIndex],[GroupId]) values (NEWID(),'nbd测试', 'https://lygcgs.com.cn/',1,'SafeReferer')--referer白名单
|
||||||
|
|
||||||
|
ALTER TABLE Person_Persons ADD RawPassword NVARCHAR(100) NULL
|
||||||
|
GO
|
||||||
|
|
||||||
|
/****** Object: Index [NonClusteredIndex-20230806-151620] Script Date: 2023/8/6 15:16:37 ******/
|
||||||
|
CREATE NONCLUSTERED INDEX [NonClusteredIndex-20230806-151620] ON [dbo].[Person_Persons]
|
||||||
|
(
|
||||||
|
[PersonId] ASC,
|
||||||
|
[Password] ASC,
|
||||||
|
[RawPassword] ASC
|
||||||
|
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
||||||
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -114,9 +114,13 @@ namespace BLL
|
|||||||
PersonName = item.UserName,
|
PersonName = item.UserName,
|
||||||
IdentityCard = item.IdentityCard,
|
IdentityCard = item.IdentityCard,
|
||||||
UnitId = Const.UnitId_SEDIN,
|
UnitId = Const.UnitId_SEDIN,
|
||||||
Password = Funs.EncryptionPassword(Const.Password),
|
|
||||||
DataFrom = "API"
|
DataFrom = "API"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
newPersons.RawPassword = Funs.getInitialPassword(newPersons.UnitId, newPersons.IdentityCard);
|
||||||
|
newPersons.Password = Funs.EncryptionPassword(newPersons.RawPassword);
|
||||||
|
|
||||||
if (item.Image != "")
|
if (item.Image != "")
|
||||||
{
|
{
|
||||||
string rootUrl = ConfigurationManager.AppSettings["localRoot"];
|
string rootUrl = ConfigurationManager.AppSettings["localRoot"];
|
||||||
|
|||||||
+12
-24
@@ -64,9 +64,6 @@
|
|||||||
<HintPath>..\FineUIPro\Reference BLL\Interop.WIA.dll</HintPath>
|
<HintPath>..\FineUIPro\Reference BLL\Interop.WIA.dll</HintPath>
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -107,8 +104,8 @@
|
|||||||
<Reference Include="QRCoder, Version=1.4.3.0, Culture=neutral, PublicKeyToken=c4ed5b9ae8358a28, processorArchitecture=MSIL">
|
<Reference Include="QRCoder, Version=1.4.3.0, Culture=neutral, PublicKeyToken=c4ed5b9ae8358a28, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\QRCoder.1.4.3\lib\net40\QRCoder.dll</HintPath>
|
<HintPath>..\packages\QRCoder.1.4.3\lib\net40\QRCoder.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Quartz, Version=3.5.0.0, Culture=neutral, PublicKeyToken=f6b8c98a402cc8a4, processorArchitecture=MSIL">
|
<Reference Include="Quartz, Version=3.7.0.0, Culture=neutral, PublicKeyToken=f6b8c98a402cc8a4, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Quartz.3.5.0\lib\netstandard2.0\Quartz.dll</HintPath>
|
<HintPath>..\packages\Quartz.3.7.0\lib\netstandard2.0\Quartz.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="RestSharp, Version=106.15.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
|
<Reference Include="RestSharp, Version=106.15.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\RestSharp.106.15.0\lib\net452\RestSharp.dll</HintPath>
|
<HintPath>..\packages\RestSharp.106.15.0\lib\net452\RestSharp.dll</HintPath>
|
||||||
@@ -118,8 +115,8 @@
|
|||||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.configuration" />
|
<Reference Include="System.configuration" />
|
||||||
<Reference Include="System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Configuration.ConfigurationManager, Version=6.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Configuration.ConfigurationManager.4.7.0\lib\net461\System.Configuration.ConfigurationManager.dll</HintPath>
|
<HintPath>..\packages\System.Configuration.ConfigurationManager.6.0.1\lib\net461\System.Configuration.ConfigurationManager.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Data.Linq" />
|
<Reference Include="System.Data.Linq" />
|
||||||
@@ -141,28 +138,22 @@
|
|||||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Runtime.Serialization" />
|
<Reference Include="System.Runtime.Serialization" />
|
||||||
<Reference Include="System.Security" />
|
<Reference Include="System.Security" />
|
||||||
<Reference Include="System.Security.AccessControl, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Security.AccessControl, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Security.AccessControl.4.7.0\lib\net461\System.Security.AccessControl.dll</HintPath>
|
<HintPath>..\packages\System.Security.AccessControl.6.0.0\lib\net461\System.Security.AccessControl.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Security.Permissions, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Security.Permissions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Security.Permissions.4.7.0\lib\net461\System.Security.Permissions.dll</HintPath>
|
<HintPath>..\packages\System.Security.Permissions.6.0.0\lib\net461\System.Security.Permissions.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Security.Principal.Windows, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Security.Principal.Windows, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Security.Principal.Windows.4.7.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
|
<HintPath>..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.ServiceModel" />
|
<Reference Include="System.ServiceModel" />
|
||||||
<Reference Include="System.ServiceProcess" />
|
<Reference Include="System.ServiceProcess" />
|
||||||
<Reference Include="System.Text.Encodings.Web, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Text.Encodings.Web.5.0.0\lib\net461\System.Text.Encodings.Web.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Text.Json, Version=5.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Text.Json.5.0.0\lib\net461\System.Text.Json.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -184,9 +175,6 @@
|
|||||||
<HintPath>..\FineUIPro\Reference BLL\ThoughtWorks.QRCode.Fakes.dll</HintPath>
|
<HintPath>..\FineUIPro\Reference BLL\ThoughtWorks.QRCode.Fakes.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="WindowsBase" />
|
<Reference Include="WindowsBase" />
|
||||||
<Reference Include="ZKWeb.System.Drawing, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\ZKWeb.System.Drawing.4.0.0\lib\net45\ZKWeb.System.Drawing.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="API\APIBaseInfoService.cs" />
|
<Compile Include="API\APIBaseInfoService.cs" />
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ namespace BLL
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 默认用户密码
|
/// 默认用户密码
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string Password = "123";
|
// public const string Password = "123";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 默认用户密码
|
/// 默认用户密码
|
||||||
|
|||||||
@@ -165,6 +165,76 @@ namespace BLL
|
|||||||
//return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5");
|
//return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region 获取用户初始密码
|
||||||
|
/// <summary>
|
||||||
|
/// 获取用户初始密码
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="password"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string getInitialPassword(string unitId, string idCard)
|
||||||
|
{
|
||||||
|
string prefixValue = "sedin";
|
||||||
|
string suffixValue = "1234";
|
||||||
|
//var getUnit = UnitService.GetUnitByUnitId(unitId);
|
||||||
|
//if (getUnit != null)
|
||||||
|
//{
|
||||||
|
// if (!string.IsNullOrEmpty(getUnit.UnitCode))
|
||||||
|
// {
|
||||||
|
// if (getUnit.UnitCode.Length > 10)
|
||||||
|
// {
|
||||||
|
// prefixValue = getUnit.UnitCode.Substring(getUnit.UnitCode.Length - 10);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// prefixValue = getUnit.UnitCode;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
if (!string.IsNullOrEmpty(idCard))
|
||||||
|
{
|
||||||
|
if (idCard.Length > 4)
|
||||||
|
{
|
||||||
|
suffixValue = idCard.Substring(idCard.Length - 4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
suffixValue = idCard;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return prefixValue + "." + suffixValue;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 验证密码
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="c"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool IsLetter(char c)
|
||||||
|
{
|
||||||
|
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsDigit(char c)
|
||||||
|
{
|
||||||
|
return c >= '0' && c <= '9';
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool IsSymbol(char c)
|
||||||
|
{
|
||||||
|
return c > 32 && c < 127 && !IsDigit(c) && !IsLetter(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsValIDPassword(string password)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
password.Any(c => IsLetter(c)) &&
|
||||||
|
password.Any(c => IsDigit(c)) &&
|
||||||
|
password.Any(c => IsSymbol(c));
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 为目标下拉框加上 "请选择" 项
|
/// 为目标下拉框加上 "请选择" 项
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -667,6 +667,7 @@ namespace BLL
|
|||||||
{
|
{
|
||||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||||
{
|
{
|
||||||
|
string password = Funs.getInitialPassword(person.UnitId, person.IdentityCard);
|
||||||
Model.Person_Persons newPerson = new Model.Person_Persons
|
Model.Person_Persons newPerson = new Model.Person_Persons
|
||||||
{
|
{
|
||||||
PersonId = person.PersonId,
|
PersonId = person.PersonId,
|
||||||
@@ -676,7 +677,8 @@ namespace BLL
|
|||||||
JobNum = person.JobNum,
|
JobNum = person.JobNum,
|
||||||
PersonName = person.PersonName,
|
PersonName = person.PersonName,
|
||||||
Account = person.Account,
|
Account = person.Account,
|
||||||
Password = GetPersonPassWord(person.IdentityCard, person.Account),
|
RawPassword = password,
|
||||||
|
Password =Funs.EncryptionPassword(password),
|
||||||
IsOffice = person.IsOffice,
|
IsOffice = person.IsOffice,
|
||||||
RoleIds = person.RoleIds,
|
RoleIds = person.RoleIds,
|
||||||
IdentityCard = person.IdentityCard,
|
IdentityCard = person.IdentityCard,
|
||||||
@@ -877,7 +879,6 @@ namespace BLL
|
|||||||
table.JobNum = newtable.JobNum;
|
table.JobNum = newtable.JobNum;
|
||||||
table.PersonName = newtable.PersonName;
|
table.PersonName = newtable.PersonName;
|
||||||
table.Account = newtable.Account;
|
table.Account = newtable.Account;
|
||||||
table.Password = newtable.Password;
|
|
||||||
table.IsOffice = newtable.IsOffice;
|
table.IsOffice = newtable.IsOffice;
|
||||||
table.RoleIds = newtable.RoleIds;
|
table.RoleIds = newtable.RoleIds;
|
||||||
table.IdentityCard = newtable.IdentityCard;
|
table.IdentityCard = newtable.IdentityCard;
|
||||||
@@ -1107,32 +1108,6 @@ namespace BLL
|
|||||||
}
|
}
|
||||||
|
|
||||||
#region 人员密码
|
#region 人员密码
|
||||||
/// <summary>
|
|
||||||
/// 设置人员密码
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="idCard"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static string GetPersonPassWord(string idCard,string Account)
|
|
||||||
{
|
|
||||||
string passWord = Funs.EncryptionPassword(Const.Password);
|
|
||||||
if (string.IsNullOrEmpty(Account))
|
|
||||||
{
|
|
||||||
////现场人员密码
|
|
||||||
if (!string.IsNullOrEmpty(idCard))
|
|
||||||
{
|
|
||||||
if (idCard.Length > 3)
|
|
||||||
{
|
|
||||||
passWord = Funs.EncryptionPassword(idCard.Substring(idCard.Length - 4));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
passWord = Funs.EncryptionPassword(idCard);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return passWord;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 修改密码
|
/// 修改密码
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1140,12 +1115,15 @@ namespace BLL
|
|||||||
/// <param name="password"></param>
|
/// <param name="password"></param>
|
||||||
public static void UpdatePassword(string personId, string password)
|
public static void UpdatePassword(string personId, string password)
|
||||||
{
|
{
|
||||||
Model.SGGLDB db = Funs.DB;
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||||
Model.Person_Persons m = db.Person_Persons.FirstOrDefault(e => e.PersonId == personId);
|
|
||||||
if (m != null)
|
|
||||||
{
|
{
|
||||||
m.Password = Funs.EncryptionPassword(password);
|
var m = db.Person_Persons.FirstOrDefault(e => e.PersonId == personId);
|
||||||
db.SubmitChanges();
|
if (m != null)
|
||||||
|
{
|
||||||
|
m.RawPassword = password;
|
||||||
|
m.Password = Funs.EncryptionPassword(password);
|
||||||
|
db.SubmitChanges();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
|
|
||||||
错误信息开始=====>
|
|
||||||
错误类型:SqlException
|
|
||||||
错误信息:执行超时已过期。完成操作之前已超时或服务器未响应。
|
|
||||||
错误堆栈:
|
|
||||||
在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
|
|
||||||
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
|
|
||||||
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
|
|
||||||
在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
|
|
||||||
在 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
|
|
||||||
在 System.Data.SqlClient.SqlDataReader.get_MetaData()
|
|
||||||
在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
|
|
||||||
在 System.Data.Common.DbCommand.ExecuteReader()
|
|
||||||
在 System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
|
|
||||||
在 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
|
|
||||||
在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
|
|
||||||
在 System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
|
|
||||||
在 System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
|
|
||||||
在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
|
|
||||||
在 BLL.ProjectService.GetSortIndexProjectByUserIdDropDownList(String userId) 位置 E:\工作\赛鼎施工平台\SGGL_SeDin(New)\SGGL_SeDin_New\SGGL\BLL\ProjectData\ProjectService.cs:行号 348
|
|
||||||
在 FineUIPro.Web.indexProject.Page_Load(Object sender, EventArgs e) 位置 E:\工作\赛鼎施工平台\SGGL_SeDin(New)\SGGL_SeDin_New\SGGL\FineUIPro.Web\indexProject.aspx.cs:行号 324
|
|
||||||
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
|
|
||||||
在 System.EventHandler.Invoke(Object sender, EventArgs e)
|
|
||||||
在 System.Web.UI.Control.OnLoad(EventArgs e)
|
|
||||||
在 System.Web.UI.Control.LoadRecursive()
|
|
||||||
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
|
|
||||||
----错误类型:Win32Exception
|
|
||||||
----错误信息:
|
|
||||||
----等待的操作过时。
|
|
||||||
----错误堆栈:
|
|
||||||
出错时间:07/28/2023 10:20:21
|
|
||||||
出错文件:http://localhost:12528/indexProject.aspx?projectId=d93b0835-ffbd-4039-bed3-2df806adae56
|
|
||||||
IP地址:::1
|
|
||||||
操作人员:JT
|
|
||||||
|
|
||||||
出错时间:07/28/2023 10:20:21
|
|
||||||
|
|
||||||
|
|
||||||
错误信息开始=====>
|
|
||||||
错误类型:SqlException
|
|
||||||
错误信息:执行超时已过期。完成操作之前已超时或服务器未响应。
|
|
||||||
错误堆栈:
|
|
||||||
在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
|
|
||||||
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
|
|
||||||
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
|
|
||||||
在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
|
|
||||||
在 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
|
|
||||||
在 System.Data.SqlClient.SqlDataReader.get_MetaData()
|
|
||||||
在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
|
|
||||||
在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
|
|
||||||
在 System.Data.Common.DbCommand.ExecuteReader()
|
|
||||||
在 System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
|
|
||||||
在 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
|
|
||||||
在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
|
|
||||||
在 System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
|
|
||||||
在 System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
|
|
||||||
在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
|
|
||||||
在 BLL.ProjectService.GetSortIndexProjectByUserIdDropDownList(String userId) 位置 E:\工作\赛鼎施工平台\SGGL_SeDin(New)\SGGL_SeDin_New\SGGL\BLL\ProjectData\ProjectService.cs:行号 348
|
|
||||||
在 FineUIPro.Web.indexProject.Page_Load(Object sender, EventArgs e) 位置 E:\工作\赛鼎施工平台\SGGL_SeDin(New)\SGGL_SeDin_New\SGGL\FineUIPro.Web\indexProject.aspx.cs:行号 324
|
|
||||||
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
|
|
||||||
在 System.EventHandler.Invoke(Object sender, EventArgs e)
|
|
||||||
在 System.Web.UI.Control.OnLoad(EventArgs e)
|
|
||||||
在 System.Web.UI.Control.LoadRecursive()
|
|
||||||
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
|
|
||||||
----错误类型:Win32Exception
|
|
||||||
----错误信息:
|
|
||||||
----等待的操作过时。
|
|
||||||
----错误堆栈:
|
|
||||||
出错时间:07/28/2023 10:21:54
|
|
||||||
出错文件:http://localhost:12528/indexProject.aspx?projectId=d93b0835-ffbd-4039-bed3-2df806adae56
|
|
||||||
IP地址:::1
|
|
||||||
操作人员:JT
|
|
||||||
|
|
||||||
出错时间:07/28/2023 10:21:54
|
|
||||||
|
|
||||||
|
|
||||||
错误信息开始=====>
|
|
||||||
错误类型:NullReferenceException
|
|
||||||
错误信息:未将对象引用设置到对象的实例。
|
|
||||||
错误堆栈:
|
|
||||||
在 FineUIPro.Web.PHTGL.ContractCompile.ContractReviewEdit.Page_Load(Object sender, EventArgs e) 位置 D:\诺必达\赛鼎\SGGL_SeDin\SGGL\FineUIPro.Web\PHTGL\ContractCompile\ContractReviewEdit.aspx.cs:行号 43
|
|
||||||
在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
|
|
||||||
在 System.EventHandler.Invoke(Object sender, EventArgs e)
|
|
||||||
在 System.Web.UI.Control.OnLoad(EventArgs e)
|
|
||||||
在 System.Web.UI.Control.LoadRecursive()
|
|
||||||
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
|
|
||||||
出错时间:07/28/2023 09:21:21
|
|
||||||
出错文件:http://localhost:2146/PHTGL/ContractCompile/ContractReviewEdit.aspx
|
|
||||||
IP地址:::1
|
|
||||||
|
|
||||||
出错时间:07/28/2023 09:21:21
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7666,7 +7666,6 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="HJGL\BaseInfo\Defect.aspx.cs">
|
<Compile Include="HJGL\BaseInfo\Defect.aspx.cs">
|
||||||
<DependentUpon>Defect.aspx</DependentUpon>
|
<DependentUpon>Defect.aspx</DependentUpon>
|
||||||
<SubType>ASPXCodeBehind</SubType>
|
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="HJGL\BaseInfo\Defect.aspx.designer.cs">
|
<Compile Include="HJGL\BaseInfo\Defect.aspx.designer.cs">
|
||||||
<DependentUpon>Defect.aspx</DependentUpon>
|
<DependentUpon>Defect.aspx</DependentUpon>
|
||||||
@@ -14003,7 +14002,7 @@
|
|||||||
<AutoAssignPort>True</AutoAssignPort>
|
<AutoAssignPort>True</AutoAssignPort>
|
||||||
<DevelopmentServerPort>0</DevelopmentServerPort>
|
<DevelopmentServerPort>0</DevelopmentServerPort>
|
||||||
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
<DevelopmentServerVPath>/</DevelopmentServerVPath>
|
||||||
<IISUrl>http://localhost:12528/</IISUrl>
|
<IISUrl>http://localhost:3803/</IISUrl>
|
||||||
<NTLMAuthentication>False</NTLMAuthentication>
|
<NTLMAuthentication>False</NTLMAuthentication>
|
||||||
<UseCustomServer>False</UseCustomServer>
|
<UseCustomServer>False</UseCustomServer>
|
||||||
<CustomServerUrl>
|
<CustomServerUrl>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
{
|
{
|
||||||
using BLL;
|
using BLL;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using System.Web.Services;
|
using System.Web.Services;
|
||||||
|
|
||||||
public partial class Login : PageBase
|
public partial class Login : PageBase
|
||||||
@@ -77,6 +78,23 @@
|
|||||||
Session.Remove("ProjectId");
|
Session.Remove("ProjectId");
|
||||||
PHTUrl = Request.Params["PHTUrl"];
|
PHTUrl = Request.Params["PHTUrl"];
|
||||||
ProjectId = Request.Params["ProjectId"];
|
ProjectId = Request.Params["ProjectId"];
|
||||||
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||||
|
{
|
||||||
|
var getPass = db.Person_Persons.FirstOrDefault(x => x.RawPassword != null);
|
||||||
|
if (getPass == null)
|
||||||
|
{
|
||||||
|
var getUsers = from x in db.Person_Persons
|
||||||
|
where x.PersonId != Const.hfnbdId && x.Account.Length > 0
|
||||||
|
select x;
|
||||||
|
foreach (var item in getUsers)
|
||||||
|
{
|
||||||
|
string password = Funs.getInitialPassword(item.UnitId, item.IdentityCard);
|
||||||
|
item.RawPassword = password;
|
||||||
|
item.Password = Funs.EncryptionPassword(password);
|
||||||
|
db.SubmitChanges();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -75,8 +75,12 @@ namespace FineUIPro.Web.Person
|
|||||||
{
|
{
|
||||||
if (!this.btnMenuEdit.Hidden)
|
if (!this.btnMenuEdit.Hidden)
|
||||||
{
|
{
|
||||||
BLL.Person_PersonsService.UpdatePassword(personId, BLL.Const.Password);
|
var getperson = Person_PersonsService.GetPerson_PersonsById(personId);
|
||||||
ShowNotify("密码已重置为原始密码!", MessageBoxIcon.Success);
|
if (getperson != null)
|
||||||
|
{
|
||||||
|
BLL.Person_PersonsService.UpdatePassword(personId, Funs.getInitialPassword(getperson.UnitId, getperson.IdentityCard));
|
||||||
|
ShowNotify("密码已重置为原始密码!", MessageBoxIcon.Success);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using BLL;
|
using BLL;
|
||||||
|
using FineUIPro.Web.HSSE.SitePerson;
|
||||||
using Model;
|
using Model;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using System;
|
using System;
|
||||||
@@ -679,8 +680,12 @@ namespace FineUIPro.Web.Person
|
|||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(this.PersonId))
|
if (!string.IsNullOrEmpty(this.PersonId))
|
||||||
{
|
{
|
||||||
BLL.Person_PersonsService.UpdatePassword(this.PersonId, BLL.Const.Password);
|
var getperson = Person_PersonsService.GetPerson_PersonsById(this.PersonId);
|
||||||
ShowNotify("密码已重置为原始密码!", MessageBoxIcon.Success);
|
if (getperson != null)
|
||||||
|
{
|
||||||
|
BLL.Person_PersonsService.UpdatePassword(this.PersonId, Funs.getInitialPassword(getperson.UnitId, getperson.IdentityCard));
|
||||||
|
ShowNotify("密码已重置为原始密码!", MessageBoxIcon.Success);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -75,8 +75,12 @@ namespace FineUIPro.Web.Person
|
|||||||
{
|
{
|
||||||
if (!this.btnMenuEdit.Hidden)
|
if (!this.btnMenuEdit.Hidden)
|
||||||
{
|
{
|
||||||
BLL.Person_PersonsService.UpdatePassword(personId, BLL.Const.Password);
|
var getperson = Person_PersonsService.GetPerson_PersonsById(personId);
|
||||||
ShowNotify("密码已重置为原始密码!", MessageBoxIcon.Success);
|
if (getperson != null)
|
||||||
|
{
|
||||||
|
BLL.Person_PersonsService.UpdatePassword(personId, Funs.getInitialPassword(getperson.UnitId, getperson.IdentityCard));
|
||||||
|
ShowNotify("密码已重置为原始密码!", MessageBoxIcon.Success);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -98,10 +98,13 @@
|
|||||||
if (Grid1.SelectedRowIndexArray.Length > 0)
|
if (Grid1.SelectedRowIndexArray.Length > 0)
|
||||||
{
|
{
|
||||||
foreach (int rowIndex in Grid1.SelectedRowIndexArray)
|
foreach (int rowIndex in Grid1.SelectedRowIndexArray)
|
||||||
{
|
{ var getperson = Person_PersonsService.GetPerson_PersonsById(Grid1.DataKeys[rowIndex][0].ToString());
|
||||||
string rowID = Grid1.DataKeys[rowIndex][0].ToString();
|
if (getperson != null)
|
||||||
BLL.Person_PersonsService.UpdatePassword(rowID, BLL.Const.Password);
|
{
|
||||||
|
BLL.Person_PersonsService.UpdatePassword(getperson.PersonId, Funs.getInitialPassword(getperson.UnitId, getperson.IdentityCard));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BindGrid();
|
BindGrid();
|
||||||
ShowNotify("密码已重置为原始密码!", MessageBoxIcon.Success);
|
ShowNotify("密码已重置为原始密码!", MessageBoxIcon.Success);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,6 +89,12 @@ namespace FineUIPro.Web.SysManage
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.txtNewPassword.Text.Length < 8 || !Funs.IsValIDPassword(this.txtNewPassword.Text))
|
||||||
|
{
|
||||||
|
Alert.ShowInParent("密码长度至少8位且必须包含字母、数字、特殊符号!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BLL.Person_PersonsService.UpdatePassword(user.PersonId, this.txtNewPassword.Text);
|
BLL.Person_PersonsService.UpdatePassword(user.PersonId, this.txtNewPassword.Text);
|
||||||
|
|
||||||
BLL.LogService.AddSys_Log(this.CurrUser, "修改密码", string.Empty, BLL.Const.UserMenuId, Const.BtnModify);
|
BLL.LogService.AddSys_Log(this.CurrUser, "修改密码", string.Empty, BLL.Const.UserMenuId, Const.BtnModify);
|
||||||
|
|||||||
+26
-2
@@ -11435,7 +11435,7 @@ namespace Model
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ApproveIdea", DbType="NVarChar(2000)")]
|
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ApproveIdea", DbType="NVarChar(200)")]
|
||||||
public string ApproveIdea
|
public string ApproveIdea
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -149652,7 +149652,7 @@ namespace Model
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AttentPerson", DbType="NVarChar(3000)")]
|
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AttentPerson", DbType="NVarChar(500)")]
|
||||||
public string AttentPerson
|
public string AttentPerson
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -154555,6 +154555,8 @@ namespace Model
|
|||||||
|
|
||||||
private string _HomePageType;
|
private string _HomePageType;
|
||||||
|
|
||||||
|
private string _RawPassword;
|
||||||
|
|
||||||
private EntitySet<Accident_AccidentHandle> _Accident_AccidentHandle;
|
private EntitySet<Accident_AccidentHandle> _Accident_AccidentHandle;
|
||||||
|
|
||||||
private EntitySet<Accident_AccidentPersonRecord> _Accident_AccidentPersonRecord;
|
private EntitySet<Accident_AccidentPersonRecord> _Accident_AccidentPersonRecord;
|
||||||
@@ -155163,6 +155165,8 @@ namespace Model
|
|||||||
partial void OnMultiProjectChanged();
|
partial void OnMultiProjectChanged();
|
||||||
partial void OnHomePageTypeChanging(string value);
|
partial void OnHomePageTypeChanging(string value);
|
||||||
partial void OnHomePageTypeChanged();
|
partial void OnHomePageTypeChanged();
|
||||||
|
partial void OnRawPasswordChanging(string value);
|
||||||
|
partial void OnRawPasswordChanged();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public Person_Persons()
|
public Person_Persons()
|
||||||
@@ -156666,6 +156670,26 @@ namespace Model
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RawPassword", DbType="NVarChar(100)")]
|
||||||
|
public string RawPassword
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this._RawPassword;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if ((this._RawPassword != value))
|
||||||
|
{
|
||||||
|
this.OnRawPasswordChanging(value);
|
||||||
|
this.SendPropertyChanging();
|
||||||
|
this._RawPassword = value;
|
||||||
|
this.SendPropertyChanged("RawPassword");
|
||||||
|
this.OnRawPasswordChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_Accident_AccidentHandle_Person_Persons", Storage="_Accident_AccidentHandle", ThisKey="PersonId", OtherKey="CompileMan", DeleteRule="NO ACTION")]
|
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_Accident_AccidentHandle_Person_Persons", Storage="_Accident_AccidentHandle", ThisKey="PersonId", OtherKey="CompileMan", DeleteRule="NO ACTION")]
|
||||||
public EntitySet<Accident_AccidentHandle> Accident_AccidentHandle
|
public EntitySet<Accident_AccidentHandle> Accident_AccidentHandle
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user