Community Server专题九:MemberRole之Profile

本文详细介绍了ASP.NET中的Profile机制,解释了如何使用Profile来存储用户的个性化信息,并深入探讨了Profile的数据存储方式及其实现原理。
上个专题我们讲到了Membership,了解了Membership可以让我们轻松的实现用户注册、登录、删除用户、用户更改密码等等一系列关于用户的基本操作,但是对于一个面向多用户的web程序,为了满足用户在访问站点时能够根据自己的喜好定制web站点的一些页面布局、皮肤,语言等等一些信息,Membership是不能满足要求的,因此,在CS中引入了Profile,Profile并不是为了实现用户个性化的机制,只是实现了个性化信息存储(在asp.net 2.0 beat2.0中页面的个性化可以用webpart实现的),目前CS的版本中还没有实现这个功能。但是我想,CS实现页面布局的个性化是迟早的事情,如果有可能,我会在CS专题结束后做一些asp.net 2.0 webpart的讲解。
CS中的Profile存储的主要是注册用户的email、timezone(时区)、日期格式、字体大小等等。通过这些信息CS就可以给注册并且登录后的用户个性化他们设置的页面,如:选择的皮肤、语言、字体大小,日期格式。
以显示日期格式为例,我们看看Profile给我们带来的效果:
我们先在CS中设置日期格式如下:
可以看到CS论坛中的日期格式如下:
接下来,设置过另外一个格式:
在论坛中可以看到格式也改变了:
如果你注销后,日期格式又会发生改变(改变为默认日期格式),也就是说这种设置完全是个人的。
当然,要实现这样的功能需要构建复杂的代码,Profile机制在这里仅仅提供数据的存储服务,这个专题我们只分析Profile机制是如何提供存储服务的。
先看看配置文件:
节点下的内容我就不多说了。<properties>节点是配置的关键,该节点下面的信息就是一个注册用户可以存储的个性化信息。name是存储的名称,type是该名称保存数据的类型(其实还有一些信息可有可无,比如defaultValue等,表示默认值)。
< profile enabled ="true" >

< providers >

< add

name ="CommunityServerSqlProvider"

type
="CommunityServer.Components.CSProfileProvider,CommunityServer.Components"

connectionStringName
="SiteSqlServer"

applicationName
="dev"

description
="StoresandretrievesprofiledatafromthelocalMicrosoftSQLServerdatabase"

/>

</ providers >



< properties >

< add name ="commonName" type ="string" />

< add name ="birthdate" type ="DateTime" />

< add name ="gender" type ="int" defaultValue ="0" />

< add name ="dateFormat" type ="string" defaultValue ="yyyy-MM-dd" />

< add name ="publicEmail" type ="string" />

< add name ="language" type ="string" />

< add name ="webAddress" type ="string" />

< add name ="webLog" type ="string" />

< add name ="signature" type ="string" />

< add name ="signatureFormatted" type ="string" />

< add name ="location" type ="string" />

< add name ="occupation" type ="string" />

< add name ="interests" type ="string" />

< add name ="msnIM" type ="string" />

< add name ="yahooIM" type ="string" />

< add name ="aolIM" type ="string" />

< add name ="icqIM" type ="string" />

< add name ="qqIM" type ="string" />

< add name ="enablePostPreviewPopup" type ="System.Boolean" defaultValue ="false" />

< add name ="enableEmoticons" type ="System.Boolean" defaultValue ="true" />

< add name ="timezone" type ="System.Double" defaultValue ="0" />

< add name ="fontsize" type ="int" defaultValue ="0" />

</ properties >

</ profile >

< providers >
用Reflector打开MemberRole,可以看到相比Membership,profile在类结构方面复杂很多,其实往往数据库设计的越简单,处理数据的类就越复杂。与Membership一样,通过实现 IConfigurationSectionHandler接口来读取在Web.config中配置。先实例化一个ProfileConfig,用来存储Providers节点下的信息和Properties节点下信息。
Provider与Properties属性下,看看UML图:
public class ProfileConfig
{
//Methods
publicProfileConfig(ProfileConfigparent);

//Fields
publicboolAutomaticSaveEnabled;
publicboolEnabled;
publicstringInherits;
publicProfilePropertySettingsCollectionProperties;
publicProfileProviderProvider;
}

分别存储在
在图中,可以看到Properties是一个ProfilePropertySettingsCollection类的实例,该实例通过一个索引器来保存或者读取多个ProfilePropertySettings类实例,而ProfilePropertySettings实例中保存的就是<properties>节点下的<add>节点信息,如:<add name = "msnIM" type = "string" />。
由于Profile采用的也是Provider数据访问模型,所以可以看到上图中左边的三个类一路继承下来,但都是抽象类,没有具体实现。由于MemberRole中只实现了SQL Server的数据库存储实现,该实现在SqlProfileProvider类中可以看到:
(UML 中用斜体来表示抽象方法或者抽象类)
在Profile中还运用了httpModule,在web.config文件文件中,我们还看到这样一个配置文件:

httpModule模块的配置,该模块有何用处我们具体看看。

< httpModules >

……

< add name ="Profile" type ="Microsoft.ScalableHosting.Profile.ProfileModule,MemberRole,Version=1.0.0.0,Culture=neutral,PublicKeyToken=b7c773fb104e7562" />

……

</ httpModules >
这是一个
以下类省略方法与属性具体内容:
httpModule不了解,请看前面的专题。在Init方法中可以看到
public sealed class ProfileModule:IHttpModule
{
//Events
publiceventProfileMigrateEventHandlerMigrateAnonymous;
publiceventProfileEventHandlerPersonalize;
publiceventProfileAutoSaveEventHandlerProfileAutoSaving;

//Methods
staticProfileModule();
[SecurityPermission(SecurityAction.Demand,UnmanagedCode
=true)]
publicProfileModule();
publicvoidDispose();
publicvoidInit(HttpApplicationapp);
privatevoidOnEnter(objectsource,EventArgseventArgs);
privatevoidOnLeave(objectsource,EventArgseventArgs);
privatevoidOnPersonalize(ProfileEventArgse);
internalstaticvoidParseDataFromDB(string[]names,stringvalues,byte[]buf,SettingsPropertyValueCollectionproperties);
internalstaticvoidPrepareDataForSaving(refstringallNames,refstringallValues,refbyte[]buf,boolbinarySupported,SettingsPropertyValueCollectionproperties,booluserIsAuthenticated);

//Fields
privateProfileAutoSaveEventHandler_AutoSaveEventHandler;
privateProfileEventHandler_eventHandler;
privateProfileMigrateEventHandler_MigrateEventHandler;
privatestaticobjects_Lock;
}



如果你对
Http请求状态开始和结束Http请求时自动被激发。很有必要具体看看事件的处理内容:
public void Init(HttpApplicationapp)
{
app.AcquireRequestState
+=newEventHandler(this.OnEnter);
app.EndRequest
+=newEventHandler(this.OnLeave);
}


这里声明了两个事件,这两个事件分别在
Http请求状态开始时激发:
Context,这很重要,因为web请求是无状态的,要保存上下文信息来完成这次请求。接着调用OnPersonalize方法:
private void OnEnter( object source,EventArgseventArgs)
{
if(ProfileManager.Enabled)
{
HttpContextcontext1
=((HttpApplication)source).Context;
this.OnPersonalize(newProfileEventArgs(context1));
stringtext1=AnonymousIdUtil.GetAnonymousIdInternal(context1);
if((context1.Request.IsAuthenticated&&(text1!=null))&&((text1.Length>0)&&(this._MigrateEventHandler!=null)))
{
AnonymousIdUtil.SetShowAnonymousId(context1,
true);
ProfileMigrateEventArgsargs1
=newProfileMigrateEventArgs(context1,text1);
this._MigrateEventHandler(this,args1);
AnonymousIdUtil.SetShowAnonymousId(context1,
false);
}

}

}


首先得到该次请求的上下文
—Personalize(用处是在你的运用代码中如果还需要对这个请求开始的时候做一些个性化处理添加自己的方法,那么就可以通过向这个事件指定委托,委托指向的方法就会在这个时候被事件调用。)。之后判断e.Profile是否已经有内容,如果有就保存在context. Items[ "PRF"]中,如果没有就保存一个context. Items[ "PRFDL"] = true,这样后面就可以判断Profile的内容是否已经存储在请求的上下文中了。
private void OnPersonalize(ProfileEventArgse)
{
if(this._eventHandler!=null)
{
this._eventHandler(this,e);
}

if(e.Profile!=null)
{
ProfileUtil.SetProfile(e.Context,e.Profile);
}

else
{
ProfileUtil.SetProfileDelayLoad(e.Context,
true);
}

}


该方法主要是初始化一个事件
再回到OnEnter方法中来,处理完OnPersonalize方法的调用后,判断是否是是已经验证过的匿名用户,根据判断后在看是否进行MigrateAnonymous事件的初始化,关于匿名用户的处理,后面会专门的专题讲解,这里就不多说。
看看结束Http请求时激发的方法:
web.config中的设置判断是否初始化ProfileAutoSaving事件,然后ContinueWithProfileAutoSave的值来决定是否在请求结束的时候自动对Profile信息进行保存,其实这里的Profile信息就是一个ProfileBase实体,在OnPersonalize方法中被保存在context. Items[ "PRF"]中,当这次请求完成后,上下文context信息将自动被销毁。
private void OnLeave( object source,EventArgseventArgs)
{
if(ProfileManager.Enabled)
{
HttpApplicationapplication1
=(HttpApplication)source;
HttpContextcontext1
=application1.Context;
if(((ProfileUtil.GetProfileInternal(context1)!=null)&&(ProfileUtil.GetProfileInternal(context1)!=ProfileBase.SingletonInstance))&&ProfileManager.AutomaticSaveEnabled)
{
if(this._AutoSaveEventHandler!=null)
{
ProfileAutoSaveEventArgsargs1
=newProfileAutoSaveEventArgs(context1);
this._AutoSaveEventHandler(this,args1);
if(!args1.ContinueWithProfileAutoSave)
{
return;
}

}

ProfileUtil.GetProfileInternal(context1).Save();
}

}

}


其实只要对事件与委托了解,看懂就不成问题,主要就是根据在
在Profile中还有很重要的一部分,那就是数据的序化(串行化),通过一些方法把要存储的信息和信息的名称分别存放在数据库的两个字段中,这些信息是叠加的字符或者二进制串:
PropertyNames保存Profile的名称,PropertyValuesString保存以文本方式Profile的值,PropertyValuesBinary是二进制方式保存的Profile的值。具体分析一下:
PropertyNames内容:
“publicEmail:S:0:13:yahooIM:S:13:0:timezone:S:13:1:msnIM:S:14:13:commonName:B:0:-1:birthdate:S:27:9:gender:S:36:1:fontsize:B:0:-”
PropertyValuesString内容:
“ugoer@msn.com0ugoer@msn.com1982-8-141yyyy年M月d日, dddFalsezh-CN25694432www.ugoer.com无ugoer.cnblogs.comTrue”
“S”表示是用文本方式存储PropertyNames值,如果是“B”就表示用二进制存储。心细一点就会发现PropertyNames的值中包括所有的web.config中配置 < properties >节点下的name,只是在这些name后面多了如“:S:13:1:”这样的信息,刚才说过S表示用文本方式存储,其实“13”指的是从第PropertyValuesString字段中存储信息的第13个字符开始后的1个字符长度的内容为timezone的值。这就是奥妙所在,那么PropertyValuesBinary是不是多余呢?有时你可能考虑需要用二进制的方式来保存这些信息,这样在数据库中这些信息就不容易直接看到,因此MemberRole中的Profile提供这样的选择,在asp.net 2.0 beta2中也同样提供这样的选择,毕竟众口难调嘛。
最后看看是如何对properties信息进行序化和反序化的:
数据操作的具体实现是SqlProfileProvider类中,SetPropertyValues方法实现Profile信息的保存,该方法中调用ProfileModule类的PrepareDataForSaving方法来实现数据的序化(其实我搞不明白为什么PrepareDataForSaving这个方法放在ProfileModule类下,这有点不合逻辑,不过方法是静态的,放在哪里都不影响):
ParseDataFromDB方法中进行,该方法也在ProfileModule类下:
internal static void PrepareDataForSaving( ref string allNames, ref string allValues, ref byte []buf, bool binarySupported,SettingsPropertyValueCollectionproperties, bool userIsAuthenticated)
{
StringBuilderbuilder1
=newStringBuilder();
StringBuilderbuilder2
=newStringBuilder();
MemorySt
# CRM项目控制器接口报告 ## 目录结构说明 本报告按照以下三个路径对控制器进行分类: 1. **/Controllers** - 主控制器目录(MVC控制器) 2. **/Areas/API/Controllers** - API控制器目录(Web API控制器) --- # 第一部分:/Controllers 目录下的控制器 ## 1. HomeController **路径**: `/Controllers/HomeController.cs` **命名空间**: `BEMS.Web.Controllers` **基类**: `Controller` ### 接口列表 #### 1. Login (GET) - **路径**: `/Home/Login` - **HTTP方法**: GET - **描述**: 显示登录页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 2. LoginBlank (GET) - **路径**: `/Home/LoginBlank` - **HTTP方法**: GET - **描述**: 显示空白登录页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 3. SSOLogin (GET) - **路径**: `/Home/SSOLogin` - **HTTP方法**: GET - **描述**: SSO登录重定向 - **入参**: 无 - **返回值**: `RedirectResult` #### 4. Login (POST) - **路径**: `/Home/Login` - **HTTP方法**: POST - **描述**: 处理用户登录 - **入参**: `LoginViewModel` ```csharp public class LoginViewModel { [Required] [Display(Name = "登录名")] public string LoginName { get; set; } [Required] [Display(Name = "密码")] public string Password { get; set; } } ``` - **返回值**: `ActionResult` (View或Redirect) #### 5. LoginBlank (POST) - **路径**: `/Home/LoginBlank` - **HTTP方法**: POST - **描述**: 处理空白登录页面登录 - **入参**: `LoginViewModel` (同上) - **返回值**: `ActionResult` (View或Redirect) #### 6. LogOut (POST) - **路径**: `/Home/LogOut` - **HTTP方法**: POST - **描述**: 退出登录 - **入参**: 无 - **返回值**: `ActionResult` (Redirect) --- ## 2. UserController **路径**: `/Controllers/Authorization/UserController.cs` **命名空间**: `BEMS.Web.Controllers.Authorization` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/User/Index` - **HTTP方法**: GET/POST - **描述**: 用户列表查询 - **入参**: `UserListViewModel` ```csharp public class UserListViewModel { public PageInfo PageInfo { get; set; } public IEnumerable<UserViewModel> UserViewModels { get; set; } public UserSearchParams SearchParams { get; set; } } public class UserSearchParams { public string Name { get; set; } } ``` - **返回值**: `ActionResult` (PartialView) #### 2. Create (GET) - **路径**: `/User/Create` - **HTTP方法**: GET - **描述**: 显示创建用户页面 - **入参**: 无 - **返回值**: `ActionResult` (PartialView) #### 3. Create (POST) - **路径**: `/User/Create` - **HTTP方法**: POST - **描述**: 创建新用户 - **入参**: `UserViewModel` ```csharp public class UserViewModel : ViewModelBase { [Required] [StringLength(50)] [Display(Name = "登录帐号")] public string UserName { get; set; } [StringLength(30, MinimumLength = 6)] [Display(Name = "登录密码")] public string Password { get; set; } [StringLength(20)] [Display(Name = "电话号码")] public string PhoneNo { get; set; } [Required] [Display(Name = "角色")] public List<string> RoleIds { get; set; } [Required] [Display(Name = "用户姓名")] public string TrueName { get; set; } public bool IsSystem { get; set; } public bool FromLoginCenter { get; set; } [Display(Name = "管理大区")] public List<string> Regions { get; set; } } ``` - **返回值**: `ActionResult` (Redirect) #### 4. Remove (GET) - **路径**: `/User/Remove` - **HTTP方法**: GET - **描述**: 删除用户 - **入参**: `string id` (用户ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 5. Edit (GET) - **路径**: `/User/Edit` - **HTTP方法**: GET - **描述**: 显示编辑用户页面 - **入参**: `string id` (用户ID) - **返回值**: `ActionResult` (PartialView) #### 6. Edit (POST) - **路径**: `/User/Edit` - **HTTP方法**: POST - **描述**: 更新用户信息 - **入参**: `UserViewModel` (同上) - **返回值**: `ActionResult` (Redirect) #### 7. ChangePassword (GET) - **路径**: `/User/ChangePassword` - **HTTP方法**: GET - **描述**: 显示修改密码页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 8. ChangePassword (POST) - **路径**: `/User/ChangePassword` - **HTTP方法**: POST - **描述**: 修改密码 - **入参**: `ChangePasswordViewModel` ```csharp public class ChangePasswordViewModel { [Required] [StringLength(30, MinimumLength = 6)] [Display(Name = "旧密码")] public string OldPassword { get; set; } [Required] [StringLength(30, MinimumLength = 6)] [Display(Name = "新的密码")] public string NewPassword { get; set; } [Required] [Compare("NewPassword")] [StringLength(30, MinimumLength = 6)] [Display(Name = "确认新密码")] public string ConfirmPassword { get; set; } } ``` - **返回值**: `JsonResult<JsonBase<String>>` #### 9. Welcome (GET) - **路径**: `/User/Welcome` - **HTTP方法**: GET - **描述**: 欢迎页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 10. LogOut (GET) - **路径**: `/User/LogOut` - **HTTP方法**: GET - **描述**: 退出登录 - **入参**: 无 - **返回值**: `ActionResult` (Redirect) --- ## 3. RoleController **路径**: `/Controllers/Authorization/RoleController.cs` **命名空间**: `BEMS.Web.Controllers.Authorization` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/Role/Index` - **HTTP方法**: GET/POST - **描述**: 角色列表查询 - **入参**: `RoleListViewModel` ```csharp public class RoleListViewModel { public PageInfo PageInfo { get; set; } public IEnumerable<RoleViewModel> RoleViewModels { get; set; } public RoleSearchParams SearchParams { get; set; } } public class RoleSearchParams { public string Name { get; set; } } ``` - **返回值**: `ActionResult` (PartialView) #### 2. Create (GET) - **路径**: `/Role/Create` - **HTTP方法**: GET - **描述**: 显示创建角色页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 3. Create (POST) - **路径**: `/Role/Create` - **HTTP方法**: POST - **描述**: 创建新角色 - **入参**: `RoleViewModel` ```csharp public class RoleViewModel : ViewModelBase { [Required] [StringLength(50)] [Display(Name = "角色名称")] public string RoleName { get; set; } [StringLength(500)] [Display(Name = "备注")] public string Comments { get; set; } [Display(Name = "角色类型")] public int RoleType { get; set; } public bool IsSystem { get; set; } } ``` - **返回值**: `ActionResult` (Redirect) #### 4. Remove (GET) - **路径**: `/Role/Remove` - **HTTP方法**: GET - **描述**: 删除角色 - **入参**: `string id` (角色ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 5. Edit (GET) - **路径**: `/Role/Edit` - **HTTP方法**: GET - **描述**: 显示编辑角色页面 - **入参**: `string id` (角色ID) - **返回值**: `ActionResult` (PartialView) #### 6. Edit (POST) - **路径**: `/Role/Edit` - **HTTP方法**: POST - **描述**: 更新角色信息 - **入参**: `RoleViewModel` (同上) - **返回值**: `JsonResult<JsonBase<String>>` #### 7. Authority (GET) - **路径**: `/Role/Authority` - **HTTP方法**: GET - **描述**: 角色授权页面 - **入参**: `string roleId` (角色ID) - **返回值**: `ActionResult` (View) #### 8. Update (POST) - **路径**: `/Role/Update` - **HTTP方法**: POST - **描述**: 更新角色权限 - **入参**: `AuthorityEntityModel` ```csharp public class AuthorityEntityModel { public string Actions { get; set; } public string SiteMaps { get; set; } public string Category { set; get; } public string TargetId { set; get; } } ``` - **返回值**: `ActionResult` (Redirect) --- ## 4. APPDataController **路径**: `/Controllers/Base/APPDataController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/APPData/Index` - **HTTP方法**: GET/POST - **描述**: APP数据列表查询 - **入参**: `APPDataListViewModel` ```csharp public class APPDataListViewModel { public PageInfo PageInfo { get; set; } public IEnumerable<APPDataViewModel> ViewModels { get; set; } public APPDataSearchParams SearchParams { get; set; } } public class APPDataSearchParams { public string Name { get; set; } } ``` - **返回值**: `ActionResult` (PartialView) #### 2. Create (GET) - **路径**: `/APPData/Create` - **HTTP方法**: GET - **描述**: 显示创建APP数据页面 - **入参**: 无 - **返回值**: `ActionResult` (PartialView) #### 3. Create (POST) - **路径**: `/APPData/Create` - **HTTP方法**: POST - **描述**: 创建APP数据 - **入参**: `APPDataViewModel` ```csharp public class APPDataViewModel : ViewModelBase { [Required] [StringLength(100)] [Display(Name = "模块名称")] public string APP_Name { get; set; } [Required] [StringLength(50)] [Display(Name = "模块代码")] public string APP_Code { get; set; } [StringLength(300)] [Display(Name = "模块描述")] public string APP_Desc { get; set; } } ``` - **返回值**: `ActionResult` (Redirect) #### 4. Remove (GET) - **路径**: `/APPData/Remove` - **HTTP方法**: GET - **描述**: 删除APP数据 - **入参**: `string id` (APP数据ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 5. Edit (GET) - **路径**: `/APPData/Edit` - **HTTP方法**: GET - **描述**: 显示编辑APP数据页面 - **入参**: `string id` (APP数据ID) - **返回值**: `ActionResult` (PartialView) #### 6. Edit (POST) - **路径**: `/APPData/Edit` - **HTTP方法**: POST - **描述**: 更新APP数据 - **入参**: `APPDataViewModel` (同上) - **返回值**: `JsonResult<JsonBase<String>>` --- ## 5. MemberRoleController **路径**: `/Controllers/Base/MemberRoleController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/MemberRole/Index` - **HTTP方法**: GET/POST - **描述**: 会员角色列表查询 - **入参**: `MemberRoleListViewModel` - **返回值**: `ActionResult` (PartialView) #### 2. Create (GET) - **路径**: `/MemberRole/Create` - **HTTP方法**: GET - **描述**: 显示创建会员角色页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 3. Create (POST) - **路径**: `/MemberRole/Create` - **HTTP方法**: POST - **描述**: 创建会员角色 - **入参**: `MemberRoleViewModel` - **返回值**: `ActionResult` (Redirect) #### 4. Remove (GET) - **路径**: `/MemberRole/Remove` - **HTTP方法**: GET - **描述**: 删除会员角色 - **入参**: `string id` (角色ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 5. Edit (GET) - **路径**: `/MemberRole/Edit` - **HTTP方法**: GET - **描述**: 显示编辑会员角色页面 - **入参**: `string id` (角色ID) - **返回值**: `ActionResult` (PartialView) #### 6. Edit (POST) - **路径**: `/MemberRole/Edit` - **HTTP方法**: POST - **描述**: 更新会员角色 - **入参**: `MemberRoleViewModel` - **返回值**: `JsonResult<JsonBase<String>>` #### 7. MemberRoleAuthority (GET) - **路径**: `/MemberRole/MemberRoleAuthority` - **HTTP方法**: GET - **描述**: 会员角色授权页面 - **入参**: `string memberRoleId` (会员角色ID) - **返回值**: `ActionResult` (View) #### 8. UpdateMemberRoleAuthority (POST) - **路径**: `/MemberRole/UpdateMemberRoleAuthority` - **HTTP方法**: POST - **描述**: 更新会员角色权限 - **入参**: `MemberAppAuthorityUpdateEntityModel` - **返回值**: `ActionResult` (Redirect) --- ## 6. MemberUserController **路径**: `/Controllers/Base/MemberUserController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/MemberUser/Index` - **HTTP方法**: GET/POST - **描述**: 会员用户列表查询 - **入参**: `MemberUserListViewModel` ```csharp public class MemberUserListViewModel { public PageInfo PageInfo { get; set; } public IEnumerable<MemberUserViewModel> ViewModels { get; set; } public MemberUserSearchParams SearchParams { get; set; } } public class MemberUserSearchParams { public string Name { get; set; } } ``` - **返回值**: `ActionResult` (PartialView) #### 2. Create (GET) - **路径**: `/MemberUser/Create` - **HTTP方法**: GET - **描述**: 显示创建会员用户页面 - **入参**: 无 - **返回值**: `ActionResult` (PartialView) #### 3. Create (POST) - **路径**: `/MemberUser/Create` - **HTTP方法**: POST - **描述**: 创建会员用户 - **入参**: `MemberUserViewModel` ```csharp public class MemberUserViewModel : ViewModelBase { [Required] [StringLength(50)] [Display(Name = "用户名")] public string UserName { get; set; } [Required] [StringLength(50)] [Display(Name = "姓名")] public string TrueName { get; set; } [Required] [StringLength(50, MinimumLength = 6)] [Display(Name = "密码")] public string Password { get; set; } [StringLength(20)] [Display(Name = "电话号码")] public string PhoneNo { get; set; } [StringLength(200)] [Display(Name = "Email")] public string Email { get; set; } [StringLength(40)] [Display(Name = "域账号")] public string SSOAccount { get; set; } [StringLength(200)] [Display(Name = "微信Id")] public string WXOpenId { get; set; } [StringLength(200)] [Display(Name = "微信Id")] public string WXUnionId { get; set; } [Display(Name = "UUID")] public string UUID { get; set; } [Display(Name = "角色")] public List<string> RoleIds { get; set; } public bool IsSSOAutoCreate { get; set; } [Display(Name = "国家地区")] public List<string> CompanyCodeList { get; set; } public string CompanyCodeListDesc { get; set; } } ``` - **返回值**: `ActionResult` (Redirect) #### 4. Remove (GET) - **路径**: `/MemberUser/Remove` - **HTTP方法**: GET - **描述**: 删除会员用户 - **入参**: `string id` (用户ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 5. Edit (GET) - **路径**: `/MemberUser/Edit` - **HTTP方法**: GET - **描述**: 显示编辑会员用户页面 - **入参**: `string id` (用户ID) - **返回值**: `ActionResult` (PartialView) #### 6. Edit (POST) - **路径**: `/MemberUser/Edit` - **HTTP方法**: POST - **描述**: 更新会员用户信息 - **入参**: `MemberUserViewModel` (同上) - **返回值**: `ActionResult` (Redirect) --- ## 7. MemberUserLoginLogController **路径**: `/Controllers/Base/MemberUserLoginLogController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/MemberUserLoginLog/Index` - **HTTP方法**: GET/POST - **描述**: 会员用户登录日志列表查询 - **入参**: `MemberUserLoginLogListViewModel` - **返回值**: `ActionResult` (PartialView) --- ## 8. PersonController **路径**: `/Controllers/Demo/PersonController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/Person/Index` - **HTTP方法**: GET/POST - **描述**: 人员列表查询 - **入参**: `PersonListViewModel` ```csharp public class PersonListViewModel { public PageInfo PageInfo { get; set; } public IEnumerable<PersonViewModel> ViewModels { get; set; } public PersonSearchParams SearchParams { get; set; } } public class PersonSearchParams { public string Name { get; set; } } ``` - **返回值**: `ActionResult` (PartialView) #### 2. Create (GET) - **路径**: `/Person/Create` - **HTTP方法**: GET - **描述**: 显示创建人员页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 3. Create (POST) - **路径**: `/Person/Create` - **HTTP方法**: POST - **描述**: 创建人员 - **入参**: `PersonViewModel` ```csharp public class PersonViewModel : ViewModelBase { [Required] [StringLength(50)] [Display(Name = "姓名")] public string UserName { get; set; } [Required] [Display(Name = "性别")] public int Sex { get; set; } [Required] [Display(Name = "身高")] public int Height { get; set; } [Required] [Display(Name = "体重")] public decimal Weight { get; set; } } ``` - **返回值**: `ActionResult` (Redirect) #### 4. Remove (GET) - **路径**: `/Person/Remove` - **HTTP方法**: GET - **描述**: 删除人员 - **入参**: `string id` (人员ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 5. Edit (GET) - **路径**: `/Person/Edit` - **HTTP方法**: GET - **描述**: 显示编辑人员页面 - **入参**: `string id` (人员ID) - **返回值**: `ActionResult` (PartialView) #### 6. Edit (POST) - **路径**: `/Person/Edit` - **HTTP方法**: POST - **描述**: 更新人员信息 - **入参**: `PersonViewModel` (同上) - **返回值**: `ActionResult` (Redirect) --- ## 9. ImplantMainInfoController **路径**: `/Controllers/Implant/ImplantMainInfoController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/ImplantMainInfo/Index` - **HTTP方法**: GET/POST - **描述**: 植入主信息列表查询 - **入参**: `ImplantMainInfoListViewModel` - **返回值**: `ActionResult` (PartialView) #### 2. Remove (GET) - **路径**: `/ImplantMainInfo/Remove` - **HTTP方法**: GET - **描述**: 删除植入主信息 - **入参**: `string id` (主信息ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 3. SetPrintStatus (GET) - **路径**: `/ImplantMainInfo/SetPrintStatus` - **HTTP方法**: GET - **描述**: 设置打印状态 - **入参**: - `string id` (主信息ID) - `string status` (状态) - `string from` (来源,默认"Index") - **返回值**: `JsonResult<JsonBase<String>>` #### 4. SetPrintStatus2 (GET) - **路径**: `/ImplantMainInfo/SetPrintStatus2` - **HTTP方法**: GET - **描述**: 批量设置打印状态 - **入参**: - `string ids` (主信息ID列表,逗号分隔) - `string status` (状态) - `string from` (来源,默认"Index") - **返回值**: `JsonResult<JsonBase<String>>` #### 5. DoCheck (POST) - **路径**: `/ImplantMainInfo/DoCheck` - **HTTP方法**: POST - **描述**: 审核植入信息 - **入参**: `DoCheckModel` ```csharp public class DoCheckModel { public string id { get; set; } public string status { get; set; } public string from { get; set; } public string adminRemarks { get; set; } } ``` - **返回值**: `JsonResult<JsonBase<String>>` #### 6. ViewDetails (GET) - **路径**: `/ImplantMainInfo/ViewDetails` - **HTTP方法**: GET - **描述**: 查看植入详情 - **入参**: `string id` (主信息ID) - **返回值**: `ActionResult` (PartialView) #### 7. Edit (GET) - **路径**: `/ImplantMainInfo/Edit` - **HTTP方法**: GET - **描述**: 显示编辑植入信息页面 - **入参**: `string id` (主信息ID) - **返回值**: `ActionResult` (PartialView) #### 8. PrintWarrentyCard (GET) - **路径**: `/ImplantMainInfo/PrintWarrentyCard` - **HTTP方法**: GET - **描述**: 打印保修卡 - **入参**: `string id` (主信息ID) - **返回值**: `ActionResult` (PartialView) #### 9. PrintWarrentyCard2 (GET) - **路径**: `/ImplantMainInfo/PrintWarrentyCard2` - **HTTP方法**: GET - **描述**: 批量打印保修卡 - **入参**: `string ids` (主信息ID列表) - **返回值**: `ActionResult` (PartialView) #### 10. PrintWarrentyCardQRCode (GET) - **路径**: `/ImplantMainInfo/PrintWarrentyCardQRCode` - **HTTP方法**: GET - **描述**: 打印带二维码的保修卡 - **入参**: `string id` (主信息ID) - **返回值**: `ActionResult` (PartialView) #### 11. PrintWarrentyCard2QRCode (GET) - **路径**: `/ImplantMainInfo/PrintWarrentyCard2QRCode` - **HTTP方法**: GET - **描述**: 批量打印带二维码的保修卡 - **入参**: `string ids` (主信息ID列表) - **返回值**: `ActionResult` (PartialView) #### 12. UpdateCardInfo (POST) - **路径**: `/ImplantMainInfo/UpdateCardInfo` - **HTTP方法**: POST - **描述**: 更新卡片信息 - **入参**: `ImplantMainInfoViewModel` - **返回值**: `JsonResult<JsonBase<String>>` #### 13. DeleteAttachment (GET) - **路径**: `/ImplantMainInfo/DeleteAttachment` - **HTTP方法**: GET - **描述**: 删除附件 - **入参**: - `string mainInfoId` (主信息ID) - `string attachmentId` (附件ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 14. DelPacemakersDetails (GET) - **路径**: `/ImplantMainInfo/DelPacemakersDetails` - **HTTP方法**: GET - **描述**: 删除起搏器详情 - **入参**: - `string id` (详情ID) - `string mainInfoId` (主信息ID) - **返回值**: `JsonResult<JsonBase<string>>` #### 15. UploadAttachment (POST) - **路径**: `/ImplantMainInfo/UploadAttachment` - **HTTP方法**: POST - **描述**: 上传附件 - **入参**: 文件上传 (FormData) - **返回值**: `JsonResult<JsonBase<String>>` #### 16. Export (GET) - **路径**: `/ImplantMainInfo/Export` - **HTTP方法**: GET - **描述**: 导出数据 - **入参**: - `string RecordStatus` - `string WarrantyCardStatus` - `string CreatedTimeSpan` - `string ImplantDateTimeSpan` - `string Name` - `string PrintStatus` - `string Province` - `string Type` - `string RegistrationStatus` - `string SubModel` - `string SubSerial` - `string FollowUp` - **返回值**: `FileResult` (Excel文件) #### 17. GetModelInfo (GET) - **路径**: `/ImplantMainInfo/GetModelInfo` - **HTTP方法**: GET - **描述**: 获取型号信息 - **入参**: `string modelNo` (型号编号) - **返回值**: `JsonResult` (包含SelectMode和WarrantyYear) #### 18. SavePacemakersDetails (GET) - **路径**: `/ImplantMainInfo/SavePacemakersDetails` - **HTTP方法**: GET - **描述**: 保存起搏器详情 - **入参**: `PacemakersDetailsViewModel` - **返回值**: `JsonResult` #### 19. CheckMainSerialNumber (GET) - **路径**: `/ImplantMainInfo/CheckMainSerialNumber` - **HTTP方法**: GET - **描述**: 检查主序列号 - **入参**: - `string mainInfoId` (主信息ID) - `string modelNo` (型号) - `string serialNumber` (序列号) - **返回值**: `JsonResult` #### 20. AdminSave (GET) - **路径**: `/ImplantMainInfo/AdminSave` - **HTTP方法**: GET - **描述**: 管理员保存数据 - **入参**: `ImplantMainInfoViewModel` - **返回值**: `JsonResult` --- ## 10. ModelInfoController **路径**: `/Controllers/Implant/ModelInfoController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/ModelInfo/Index` - **HTTP方法**: GET/POST - **描述**: 型号信息列表查询 - **入参**: `ModelInfoListViewModel` - **返回值**: `ActionResult` (PartialView) #### 2. Create (GET) - **路径**: `/ModelInfo/Create` - **HTTP方法**: GET - **描述**: 显示创建型号信息页面 - **入参**: 无 - **返回值**: `ActionResult` (PartialView) #### 3. Create (POST) - **路径**: `/ModelInfo/Create` - **HTTP方法**: POST - **描述**: 创建型号信息 - **入参**: `ModelInfoViewModel` - **返回值**: `ActionResult` (Redirect) #### 4. Remove (GET) - **路径**: `/ModelInfo/Remove` - **HTTP方法**: GET - **描述**: 删除型号信息 - **入参**: `string id` (型号信息ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 5. Edit (GET) - **路径**: `/ModelInfo/Edit` - **HTTP方法**: GET - **描述**: 显示编辑型号信息页面 - **入参**: `string id` (型号信息ID) - **返回值**: `ActionResult` (PartialView) #### 6. Edit (POST) - **路径**: `/ModelInfo/Edit` - **HTTP方法**: POST - **描述**: 更新型号信息 - **入参**: `ModelInfoViewModel` - **返回值**: `JsonResult<JsonBase<String>>` #### 7. MaterialList (GET) - **路径**: `/ModelInfo/MaterialList` - **HTTP方法**: GET - **描述**: 获取物料列表 - **入参**: `string KeyWord` (关键词) - **返回值**: `JsonResult` (物料列表) --- ## 11. PowerController **路径**: `/Controllers/Implant/PowerController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/Power/Index` - **HTTP方法**: GET/POST - **描述**: 电源主信息列表查询 - **入参**: `PowerMainListViewModel` - **返回值**: `ActionResult` (PartialView) #### 2. ViewDetail (GET) - **路径**: `/Power/ViewDetail` - **HTTP方法**: GET - **描述**: 查看电源详情 - **入参**: `string id` (主信息ID) - **返回值**: `ActionResult` (PartialView) #### 3. Remove (GET) - **路径**: `/Power/Remove` - **HTTP方法**: GET - **描述**: 删除电源信息 - **入参**: `string id` (主信息ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 4. Export (GET) - **路径**: `/Power/Export` - **HTTP方法**: GET - **描述**: 导出电源数据 - **入参**: `PowerMainSearchParams` - **返回值**: `FileResult` (Excel文件) --- ## 12. SICDImplantController **路径**: `/Controllers/Implant/SICDImplantController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/SICDImplant/Index` - **HTTP方法**: GET/POST - **描述**: SICD植入信息列表查询 - **入参**: `SICDImplantMainInfoListViewModel` - **返回值**: `ActionResult` (PartialView) #### 2. ViewDetail (GET) - **路径**: `/SICDImplant/ViewDetail` - **HTTP方法**: GET - **描述**: 查看SICD植入详情 - **入参**: `string id` (主信息ID) - **返回值**: `ActionResult` (PartialView) #### 3. Remove (GET) - **路径**: `/SICDImplant/Remove` - **HTTP方法**: GET - **描述**: 删除SICD植入信息 - **入参**: `string id` (主信息ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 4. SetPrintStatus (GET) - **路径**: `/SICDImplant/SetPrintStatus` - **HTTP方法**: GET - **描述**: 设置打印状态 - **入参**: - `string id` (主信息ID) - `string status` (状态) - `string from` (来源,默认"Index") - **返回值**: `JsonResult<JsonBase<String>>` #### 5. SetPrintStatus2 (GET) - **路径**: `/SICDImplant/SetPrintStatus2` - **HTTP方法**: GET - **描述**: 批量设置打印状态 - **入参**: - `string ids` (主信息ID列表) - `string status` (状态) - `string from` (来源,默认"Index") - **返回值**: `JsonResult<JsonBase<String>>` #### 6. DoCheck (POST) - **路径**: `/SICDImplant/DoCheck` - **HTTP方法**: POST - **描述**: 审核SICD植入信息 - **入参**: `DoCheckModel` (同上) - **返回值**: `JsonResult<JsonBase<String>>` #### 7. PrintWarrentyCard (GET) - **路径**: `/SICDImplant/PrintWarrentyCard` - **HTTP方法**: GET - **描述**: 打印保修卡 - **入参**: `string id` (主信息ID) - **返回值**: `ActionResult` (PartialView) #### 8. PrintWarrentyCard2 (GET) - **路径**: `/SICDImplant/PrintWarrentyCard2` - **HTTP方法**: GET - **描述**: 批量打印保修卡 - **入参**: `string ids` (主信息ID列表) - **返回值**: `ActionResult` (PartialView) #### 9. PrintWarrentyCardQRCode (GET) - **路径**: `/SICDImplant/PrintWarrentyCardQRCode` - **HTTP方法**: GET - **描述**: 打印带二维码的保修卡 - **入参**: `string id` (主信息ID) - **返回值**: `ActionResult` (PartialView) #### 10. PrintWarrentyCard2QRCode (GET) - **路径**: `/SICDImplant/PrintWarrentyCard2QRCode` - **HTTP方法**: GET - **描述**: 批量打印带二维码的保修卡 - **入参**: `string ids` (主信息ID列表) - **返回值**: `ActionResult` (PartialView) #### 11. Export (GET) - **路径**: `/SICDImplant/Export` - **HTTP方法**: GET - **描述**: 导出SICD数据 - **入参**: - `string RecordStatus` - `string WarrantyCardStatus` - `string CreatedTimeSpan` - `string ImplantDateTimeSpan` - `string Name` - `string PrintStatus` - `string Provincec` - `string Province` - `string RegistrationStatus` - `string SubModel` - `string SubSerial` - `string FollowUp` - **返回值**: `FileResult` (Excel文件) --- ## 13. SiteMapController **路径**: `/Controllers/Sys/SiteMapController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/SiteMap/Index` - **HTTP方法**: GET/POST - **描述**: 站点地图列表查询 - **入参**: `SiteMapListViewModel` - **返回值**: `ActionResult` (PartialView) #### 2. Create (GET) - **路径**: `/SiteMap/Create` - **HTTP方法**: GET - **描述**: 显示创建站点地图页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 3. Create (POST) - **路径**: `/SiteMap/Create` - **HTTP方法**: POST - **描述**: 创建站点地图 - **入参**: `SiteMapViewModel` - **返回值**: `ActionResult` (Redirect) #### 4. Remove (GET) - **路径**: `/SiteMap/Remove` - **HTTP方法**: GET - **描述**: 删除站点地图 - **入参**: `string id` (站点地图ID) - **返回值**: `JsonResult<JsonBase<String>>` #### 5. Edit (GET) - **路径**: `/SiteMap/Edit` - **HTTP方法**: GET - **描述**: 显示编辑站点地图页面 - **入参**: `string id` (站点地图ID) - **返回值**: `ActionResult` (PartialView) #### 6. Edit (POST) - **路径**: `/SiteMap/Edit` - **HTTP方法**: POST - **描述**: 更新站点地图 - **入参**: `SiteMapViewModel` - **返回值**: `JsonResult<JsonBase<String>>` --- ## 14. UserLoginLogController **路径**: `/Controllers/Sys/UserLoginLogController.cs` **命名空间**: `BEMS.Controllers` **基类**: `BaseController` ### 接口列表 #### 1. Index (GET/POST) - **路径**: `/UserLoginLog/Index` - **HTTP方法**: GET/POST - **描述**: 用户登录日志列表查询 - **入参**: `UserLoginLogListViewModel` - **返回值**: `ActionResult` (PartialView) --- ## 15. LoginController **路径**: `/Controllers/WebApp/LoginController.cs` **命名空间**: `BEMS.Web.Controllers.WebApp` **基类**: `WebAppController` ### 接口列表 #### 1. Index (GET) - **路径**: `/Login/Index` - **HTTP方法**: GET - **描述**: 显示登录页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 2. ChangeLan (POST) - **路径**: `/Login/ChangeLan` - **HTTP方法**: POST - **描述**: 更改语言 - **入参**: `string lan` (语言代码) - **返回值**: `JsonResult` --- ## 16. BEUserLoginController **路径**: `/Controllers/WebApp/BEUserLoginController.cs` **命名空间**: `BEMS.Web.Controllers.WebApp` **基类**: `WebAppController` ### 接口列表 #### 1. Login (GET) - **路径**: `/BEUserLogin/Login` - **HTTP方法**: GET - **描述**: 显示BE用户登录页面 - **入参**: 无 - **返回值**: `ActionResult` (View) #### 2. Login (POST) - **路径**: `/BEUserLogin/Login` - **HTTP方法**: POST - **描述**: 处理BE用户登录 - **入参**: `MemberLoginViewModel` ```csharp public class MemberLoginViewModel { [Required] [Display(Name = "登录名")] public string LoginName { get; set; } [Required] [Display(Name = "密码")] public string Password { get; set; } } ``` - **返回值**: `ActionResult` (View或Redirect) #### 3. LogOut (GET) - **路径**: `/BEUserLogin/LogOut` - **HTTP方法**: GET - **描述**: BE用户退出登录 - **入参**: 无 - **返回值**: `ActionResult` (Redirect) --- ## 17. ErrorController **路径**: `/Controllers/ErrorController.cs` **命名空间**: `BEMS.Web.Controllers` **基类**: `Controller` ### 接口列表 #### 1. Error_500 (GET) - **路径**: `/Error/Error_500` - **HTTP方法**: GET - **描述**: 显示500错误页面 - **入参**: 无 - **返回值**: `ActionResult` (PartialView) --- ## 18. WebAppController **路径**: `/Controllers/WebAppController.cs` **命名空间**: `BEMS.Web.Controllers` **基类**: `Controller` ### 接口列表 #### 1. SetLanguage (GET) - **路径**: `/WebApp/SetLanguage` - **HTTP方法**: GET - **描述**: 设置语言 - **入参**: `string language` (语言代码) - **返回值**: `ActionResult` (Redirect) --- # 第二部分:/Areas/API/Controllers 目录下的控制器 ## 1. PatientController **路径**: `/Areas/API/Controllers/PatientController.cs` **命名空间**: `BEMS.Web.Areas.API.Controllers` **基类**: `ApiController` **路由前缀**: `api/Patient` ### 接口列表 #### 1. ParamVerification (POST) - **路径**: `/api/Patient/ParamVerification` - **HTTP方法**: POST - **描述**: 参数验证 - **入参**: `Object bodyParam` (加密的JSON字符串) - **返回值**: `ResModel` ```csharp public class ResModel { public int code { get; set; } public string message { get; set; } public object data { get; set; } } ``` #### 2. ImplantInfo (POST) - **路径**: `/api/Patient/ImplantInfo` - **HTTP方法**: POST - **描述**: 获取患者植入信息 - **入参**: `string bodyParam` (加密的JSON字符串,包含patientName) - **返回值**: `ResModel` (包含患者植入信息列表) ```csharp public class PatientImplantInfo { public string PatientName { get; set; } public string PatientSex { get; set; } public string ModelNo { get; set; } public string SerialNumber { get; set; } public string SelectMode { get; set; } public DateTime? ImplantDate { get; set; } public string WarrantyYear { get; set; } public string HospitalName { get; set; } public string HospitalAddress { get; set; } public string DoctorName { get; set; } public string HospitalTel { get; set; } public string Type { get; set; } public string RecordStatus { get; set; } public List<PacemakersDetail> PacemakersDetail { get; set; } } ``` #### 3. SyncRegistrationInfo (POST) - **路径**: `/api/Patient/SyncRegistrationInfo` - **HTTP方法**: POST - **描述**: 同步注册信息(患者手机号和身份证号) - **入参**: `string bodyParam` (加密的JSON字符串,包含modelNo, serialNumber, patientPhone, patientIdCard) - **返回值**: `ResModel` --- ## 2. ImplantInfoController **路径**: `/Areas/API/Controllers/WebApp/ImplantInfoController.cs` **命名空间**: `BEMS.Web.Areas.API.Controllers` **基类**: `MemberApiController` **路由前缀**: `api/ImplantInfo` ### 接口列表 #### 1. GetHospitalList (GET) - **路径**: `/api/ImplantInfo/HospitalList` - **HTTP方法**: GET - **描述**: 获取医院列表 - **入参**: `string KeyWord` (关键词,可选) - **返回值**: `ResModel` (包含医院列表) ```csharp // 返回数据格式 { code: 200, message: "", data: [ { Text: "医院名称", Value: "医院代码", Tel: "" } ] } ``` #### 2. GetDoctorsList (GET) - **路径**: `/api/ImplantInfo/DoctorsList` - **HTTP方法**: GET - **描述**: 获取医生列表 - **入参**: - `string HospitalCode` (医院代码) - `string KeyWord` (关键词,可选) - **返回值**: `ResModel` (包含医生列表) #### 3. SetDoctorInfo (POST) - **路径**: `/api/ImplantInfo/Doctor` - **HTTP方法**: POST - **描述**: 设置医生信息 - **入参**: `dynamic data` ```csharp { HospitalCode: string, HospitalName: string, HCPName: string, HCPTel: string } ``` - **返回值**: `ResModel` #### 4. GetFollowUpUserList (GET) - **路径**: `/api/ImplantInfo/FollowUpUserList` - **HTTP方法**: GET - **描述**: 获取跟台人列表 - **入参**: `string KeyWord` (关键词,可选) - **返回值**: `ResModel` (包含跟台人列表) #### 5. GetSubBUList (GET) - **路径**: `/api/ImplantInfo/SubBUList` - **HTTP方法**: GET - **描述**: 获取类别列表(SubBU) - **入参**: 无 - **返回值**: `ResModel` (包含类别列表) #### 6. MaterialList (GET) - **路径**: `/api/ImplantInfo/MaterialList` - **HTTP方法**: GET - **描述**: 获取型号列表 - **入参**: - `string KeyWord` (关键词) - `string productLine` (产品线,默认"CRM") - **返回值**: `ResModel` (包含型号列表) #### 7. GetProviderList (GET) - **路径**: `/api/ImplantInfo/ProviderList` - **HTTP方法**: GET - **描述**: 获取制造商列表(植入电极导管信息) - **入参**: 无 - **返回值**: `ResModel` (包含制造商列表) #### 8. GetImplantPositionList (GET) - **路径**: `/api/ImplantInfo/ImplantPositionList` - **HTTP方法**: GET - **描述**: 获取植入位置列表 - **入参**: 无 - **返回值**: `ResModel` (包含植入位置列表) #### 9. GetMyImplantsList (GET) - **路径**: `/api/ImplantInfo/MyImplantsList` - **HTTP方法**: GET - **描述**: 我的植入单列表 - **入参**: - `string keyWords` (关键词) - `string recordStatus` (记录状态) - `string printStatus` (打印状态) - `string registrationStatus` (注册状态) - `int pageIndex` (页码,默认1) - `int pageSize` (每页大小,默认10) - **返回值**: `ResModel` (包含植入单列表和总数) #### 10. GetImplantsById (GET) - **路径**: `/api/ImplantInfo/ImplantsById` - **HTTP方法**: GET - **描述**: 获取植入单详情 - **入参**: `string Id` (植入单ID) - **返回值**: `ResModel` (包含植入单详情) #### 11. DeleteImplantsById (GET) - **路径**: `/api/ImplantInfo/DeleteMyImplant` - **HTTP方法**: GET - **描述**: 删除植入单 - **入参**: `string Id` (植入单ID) - **返回值**: `ResModel` #### 12. CancelImplantsById (GET) - **路径**: `/api/ImplantInfo/CancelMyImplant` - **HTTP方法**: GET - **描述**: 撤销植入单 - **入参**: - `string Id` (植入单ID) - `int VersionNumber` (版本号) - **返回值**: `ResModel` #### 13. SaveDraft (POST) - **路径**: `/api/ImplantInfo/SaveDraft` - **HTTP方法**: POST - **描述**: 保存草稿 - **入参**: `ImplantMainInfoModel` ```csharp public class ImplantMainInfoModel { public string Id { get; set; } public DateTime? ImplantDate { get; set; } public string HospitalCode { get; set; } public string HospitalName { get; set; } public string HospitalTel { get; set; } public string DoctorCode { get; set; } public string DoctorName { get; set; } public string DoctorTel { get; set; } public string FollowUpByEID { get; set; } public string FollowUpByName { get; set; } public string PatientNameCN { get; set; } public string PatientNameEN { get; set; } public string PatientPhoneNotCrypto { get; set; } public string PatientIdCardNotCrypto { get; set; } public string PatientSex { get; set; } public string ModelNo { get; set; } public string SerialNumber { get; set; } public string RecordStatus { get; set; } public List<PacemakersDetailsModel> PacemakersDetailsList { get; set; } public List<ScreenShotsModel> Attachments { get; set; } // ... 更多字段 } ``` - **返回值**: `ResModel` #### 14. Submit (POST) - **路径**: `/api/ImplantInfo/Submit` - **HTTP方法**: POST - **描述**: 提交植入单 - **入参**: `ImplantMainInfoModel` (同上) - **返回值**: `ResModel` #### 15. UploadAttachment (POST) - **路径**: `/api/ImplantInfo/UploadAttachment` - **HTTP方法**: POST - **描述**: 上传附件 - **入参**: 文件上传 (FormData) - **返回值**: `ResModel` (包含文件信息) ```csharp { FileId: string, PreSignedUrl: string, ThumbUrl: string, OriginalUrl: string, FileName: string, OriginFileName: string } ``` #### 16. UsualnessHospitalList (GET) - **路径**: `/api/ImplantInfo/UsualnessHospitalList` - **HTTP方法**: GET - **描述**: 获取常用医院列表 - **入参**: 无 - **返回值**: `ResModel` (包含常用医院列表,最多10条) --- ## 3. MemberUserController **路径**: `/Areas/API/Controllers/WebApp/MemberUserController.cs` **命名空间**: `BEMS.Web.Areas.API.Controllers` **基类**: `MemberApiController` ### 接口列表 #### 1. Login (GET) - **路径**: `/api/MemberUser/Login` - **HTTP方法**: GET - **描述**: 用户登录 - **入参**: - `string username` (用户名) - `string password` (密码,MD5加密) - `string sign` (签名) - `int tspan` (时间戳) - **返回值**: `ResModel` (包含用户信息和Token) ```csharp { Id: string, UserName: string, TrueName: string, Token: string, PhoneNo: string, Email: string, IsEmailBind: bool, SSOAccount: string, MFlowToken: string, AuthorizedAppModule: List<string> } ``` #### 2. BindingEmailPassword (POST) - **路径**: `/api/MemberUser/BindingEmailPassword` - **HTTP方法**: POST - **描述**: 绑定邮箱密码 - **入参**: `BindingEmailPasswordReq` ```csharp public class BindingEmailPasswordReq { public string pwdhash { get; set; } } ``` - **返回值**: `ResModel` #### 3. CheckEmailPwd (POST) - **路径**: `/api/MemberUser/CheckEmailPwd` - **HTTP方法**: POST - **描述**: 检查邮箱密码 - **入参**: `string hash` (密码哈希) - **返回值**: `ResModel` --- ## 4. PowerController **路径**: `/Areas/API/Controllers/WebApp/PowerController.cs` **命名空间**: `BEMS.Web.Areas.API.Controllers` **基类**: `MemberApiController` **路由前缀**: `api/Power` ### 接口列表 #### 1. SearchImplant (GET) - **路径**: `/api/Power/SearchImplant` - **HTTP方法**: GET - **描述**: 搜索植入单 - **入参**: - `string keyWords` (关键词,可选) - `int pageIndex` (页码,默认1) - `int pageSize` (每页大小,默认10) - **返回值**: `ResModel` (包含植入单列表和总数) #### 2. PacemakersDetails (GET) - **路径**: `/api/Power/PacemakersDetails` - **HTTP方法**: GET - **描述**: 获取起搏器详情(最多3条) - **入参**: `string id` (植入单ID) - **返回值**: `ResModel` (包含起搏器详情列表) #### 3. GetList (GET) - **路径**: `/api/Power/GetList` - **HTTP方法**: GET - **描述**: 获取设备电池列表 - **入参**: - `string keyword` (关键词,可选) - `int pageIndex` (页码,默认1) - `int pageSize` (每页大小,默认10) - **返回值**: `ResModel` (包含设备电池列表和总数) #### 4. GetDetail (GET) - **路径**: `/api/Power/GetDetail` - **HTTP方法**: GET - **描述**: 获取设备电池详情 - **入参**: `string id` (设备电池ID) - **返回值**: `ResModel` (包含主信息、详情和附件) #### 5. Submit (POST) - **路径**: `/api/Power/Submit` - **HTTP方法**: POST - **描述**: 提交设备电池信息 - **入参**: `SubmitModel` - **返回值**: `ResModel` #### 6. UploadAttachment (POST) - **路径**: `/api/Power/UploadAttachment` - **HTTP方法**: POST - **描述**: 上传附件 - **入参**: 文件上传 (FormData) - **返回值**: `ResModel` (包含文件信息) --- ## 5. SICDImplantInfoController **路径**: `/Areas/API/Controllers/WebApp/SICDImplantInfoController.cs` **命名空间**: `BEMS.Web.Areas.API.Controllers` **基类**: `MemberApiController` **路由前缀**: `api/SICDImplant` ### 接口列表 #### 1. GetMyImplantsList (GET) - **路径**: `/api/SICDImplant/MyImplantsSCID` - **HTTP方法**: GET - **描述**: 我的S-ICD植入单列表 - **入参**: - `string ipttype` (植入类型) - `string recordStatus` (记录状态) - `string registrationStatus` (注册状态) - `string subModel` (子型号) - `string subSerial` (子序列号) - `string keyWords` (关键词) - `int pageIndex` (页码,默认1) - `int pageSize` (每页大小,默认10) - **返回值**: `ResModel` (包含植入单列表和总数) #### 2. GetImplantsById (GET) - **路径**: `/api/SICDImplant/ImplantsById` - **HTTP方法**: GET - **描述**: 获取S-ICD植入单详情 - **入参**: `string Id` (植入单ID) - **返回值**: `ResModel` (包含植入单详情) #### 3. DeleteImplantsById (GET) - **路径**: `/api/SICDImplant/DeleteMyImplant` - **HTTP方法**: GET - **描述**: 删除S-ICD植入单 - **入参**: `string Id` (植入单ID) - **返回值**: `ResModel` #### 4. CancelImplantsById (GET) - **路径**: `/api/SICDImplant/CancelMyImplant` - **HTTP方法**: GET - **描述**: 撤销S-ICD植入单 - **入参**: - `string Id` (植入单ID) - `int VersionNumber` (版本号) - **返回值**: `ResModel` #### 5. SaveDraft (POST) - **路径**: `/api/SICDImplant/SaveDraft` - **HTTP方法**: POST - **描述**: 保存筛选单草稿 - **入参**: `SICDImplantMainInfoModel` ```csharp public class SICDImplantMainInfoModel { public string Id { get; set; } public string PatientName { get; set; } public string PatientEnName { get; set; } public string PatientPhoneNotCrypto { get; set; } public string PatientIdCardNotCrypto { get; set; } public string PatientGender { get; set; } public int? PatientHeight { get; set; } public int? PatientWeight { get; set; } public decimal? BMI { get; set; } public string NYHA { get; set; } public string Indication { get; set; } public string Prd_Model { get; set; } public string Prd_SN { get; set; } public DateTime? ImplantDate { get; set; } public string HospitalCode { get; set; } public string HospitalName { get; set; } public string DoctorCode { get; set; } public string DoctorName { get; set; } public string RecordStatus { get; set; } public List<SICDImplant_Detail_ModelSub> ModelList { get; set; } public List<SICDImplant_Attachment_ModelSub> Attachments { get; set; } // ... 更多字段 } ``` - **返回值**: `ResModel` #### 6. Submit (POST) - **路径**: `/api/SICDImplant/Submit` - **HTTP方法**: POST - **描述**: 提交筛选单 - **入参**: `SICDImplantMainInfoModel` (同上) - **返回值**: `ResModel` #### 7. SaveImplateDraft (POST) - **路径**: `/api/SICDImplant/ImplateDraft` - **HTTP方法**: POST - **描述**: 保存植入单草稿 - **入参**: `SICDImplantMainInfoModel` (同上) - **返回值**: `ResModel` #### 8. SaveImplateSubmit (POST) - **路径**: `/api/SICDImplant/ImplateSubmit` - **HTTP方法**: POST - **描述**: 提交植入单 - **入参**: `SICDImplantMainInfoModel` (同上) - **返回值**: `ResModel` #### 9. AdminSubmit (POST) - **路径**: `/api/SICDImplant/AdminSubmit` - **HTTP方法**: POST - **描述**: 管理员修改筛选单 - **入参**: `SICDImplantMainInfoModel` (同上) - **返回值**: `ResModel` #### 10. SaveAdminImplateSubmit (POST) - **路径**: `/api/SICDImplant/AdminImplateSubmit` - **HTTP方法**: POST - **描述**: 管理员修改植入单 - **入参**: `SICDImplantMainInfoModel` (同上) - **返回值**: `ResModel` --- ## 6. WxCommonController **路径**: `/Areas/API/Controllers/WebApp/WxCommonController.cs` **命名空间**: `BEMS.Web.Areas.API.Controllers` **基类**: `ApiController` **路由前缀**: `api/WxCommon` ### 接口列表 #### 1. GetWXAuthorizationToken (GET) - **路径**: `/api/WxCommon/WXAuthorizationToken` - **HTTP方法**: GET - **描述**: 获取微信授权Token - **入参**: - `string code` (微信授权码) - `string account` (账号,可选,用于模拟登录) - **返回值**: `ResModel` (包含Token和用户信息) ```csharp { Token: string, Avatar: string, TrueName: string } ``` #### 2. GetWXConfig (GET) - **路径**: `/api/WxCommon/WXConfig` - **HTTP方法**: GET - **描述**: 获取微信配置信息 - **入参**: `string shareurl` (分享URL) - **返回值**: `ResModel` (包含微信JS-SDK配置信息) -
12-05
var columns = [[ { title: 'ids', field: 'id', align: 'center', hidden:true, width: 10, formatter: function (val, item, rowIndex) { var id = (item.id != null) ? item.id : ''; return '<input class="text name" type="hidden" name="projectReviewItemList[' + membersItemIndex + '].id" value="' + id + '" readonly >'; } },{ title: 'reviewItemId', field: 'reviewItemId', align: 'center', hidden:true, width: 10, formatter: function (val, item, rowIndex) { var reviewItemId = (item.reviewItemId != null) ? item.reviewItemId : ''; return '<input class="text name" type="hidden" name="projectReviewItemList[' + membersItemIndex + '].reviewItem.id" value="' + reviewItemId + '" readonly >'; } },{ title: '${message("模块")}', field: 'spare1', align: 'center', width: 120, formatter: function (val, item, rowIndex) { var spare1 = (item.spare1 != null) ? item.spare1 : ''; // return '<input type="text" style="text-align: center" name="projectReviewItemList[' + membersItemIndex + '].reviewItem.spare1" value="' + spare1 + '" readonly >'; return '<div style="text-align: center;font-size: 17px; height: 100%">'+spare1+'<div/ >'; } }, { title: '${message("子模版")}', field: 'value', width: 300, align: 'center', formatter: function (val, item, rowIndex) { var value = (item.value != null) ? item.value : ''; // return '<input class="text name" type="text" name="projectReviewItemList[' + membersItemIndex + '].reviewItem.value" value="' + value + '" readonly>'; return '<div style="text-align: center;font-size: 14px">'+value+'<div/ >'; } }, { title: '${message("评估方法")}', field: 'remark', width: 500, align: 'center', formatter: function (value, item, rowIndex) { var remark = (item.remark != null) ? item.remark : ''; // return '<input type="text" class="text mobile" name="projectReviewItemList[' + membersItemIndex + '].reviewItem.remark" value="' + remark + '" readonly>' remark = remark.replaceAll(" ",'<br>'); return '<div style="border-style: solid;;font-size: 13px;text-align: left;border-color: #e6e6e6;border-width: 1px;width: 100%;height:auto">'+remark+'<div/ >'; } }, { title: '${message("评估结果")}', field: 'review_result', width: 120, align: 'center', formatter: function (val, item, rowIndex) { var review_result = (item.review_result != null) ? item.review_result : ''; var flag1 = ""; var flag2 = ""; var flag3 = ""; if (review_result == 3){ flag1 = 'selected' }else if (review_result == 2){ flag2 = 'selected' }else if (review_result == 1){ flag3 = 'selected' } var htmls = '<select style="font-size: 13px" class="text memberRole" name="projectReviewItemList[' + membersItemIndex + '].reviewResult" required >'; htmls += '<option style="font-size: 13px" value="" >请选择</option>'; htmls += '<option style="font-size: 13px" value="3" '+flag1+'>高(3)</option>'; htmls += '<option style="font-size: 13px" value="2" '+flag2+'>中(2)</option>'; htmls += '<option style="font-size: 13px" value="1" '+flag3+'>低(1)</option>'; htmls += '</select>'; return htmls; } }, { title: '${message("指标对应项目情况特殊说明")}', field: 'review_comment', width: 250, align: 'center', formatter: function (val, item, rowIndex) { var reviewComment = (item.review_comment != null) ? item.review_comment : ''; return '<input style="font-size: 13px" type="text" class="text" name="projectReviewItemList[' + membersItemIndex + '].reviewComment" value="' + reviewComment + '" >' } }, { title: '', field: 'members_index', align: 'center', hidden: true, isdrag: false, columnMenu: false, width: 100, formatter: function (val, item, rowIndex) { membersItemIndex++; } } ]];子模版均分模块的高度,美化成有所有边框的表格
09-18
基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值