Imports Newtonsoft.Json
Imports PrnAsyncwork
Imports Prnconntocol
Imports PrnDatbasehlp
Imports PrnMentService
Imports PrnUtlthods
Imports System.Linq
Public Class UserMessageHandler
Inherits BaseMessageHandler
Public Sub New(serviceProvider As IServiceProvider)
MyBase.New(serviceProvider)
End Sub
Public Overrides Function GetSupportedCommands() As Integer()
Return {
ProtocolCommands.CMD_GET_USERS,
ProtocolCommands.CMD_CREATE_USER,
ProtocolCommands.CMD_UPDATE_USER,
ProtocolCommands.CMD_DELETE_USER
}
End Function
Public Overrides Function CanHandle(command As Integer) As Boolean
Return GetSupportedCommands().Contains(command)
End Function
Public Overrides Async Function HandleMessageAsync(message As NetworkMessage, session As ClientSession) As Task(Of NetworkMessage)
Try
Dim authResult = Await AuthenticateSessionAsync(session, message)
If Not authResult.IsAuthenticated Then
Return CreateErrorResponse(message, Constants.ErrorCodes.AUTHENTICATION_FAILED, authResult.Message)
End If
Select Case message.Command
Case ProtocolCommands.CMD_GET_USERS
Return Await HandleGetUsersAsync(message, session, authResult.User)
Case ProtocolCommands.CMD_CREATE_USER
Return Await HandleCreateUserAsync(message, session, authResult.User)
Case ProtocolCommands.CMD_UPDATE_USER
Return Await HandleUpdateUserAsync(message, session, authResult.User)
Case ProtocolCommands.CMD_DELETE_USER
Return Await HandleDeleteUserAsync(message, session, authResult.User)
Case Else
Return CreateErrorResponse(message, Constants.ErrorCodes.UNKNOWN_ERROR, "不支持的用户管理命令")
End Select
Catch ex As Exception
Logger.Error($"处理用户管理消息失败: {message.Command}", ex)
Return CreateErrorResponse(message, Constants.ErrorCodes.UNKNOWN_ERROR, "系统错误,请稍后重试")
End Try
End Function
Private Async Function HandleGetUsersAsync(message As NetworkMessage, session As ClientSession, currentUser As User) As Task(Of NetworkMessage)
Try
Dim request = JsonConvert.DeserializeObject(Of GetUsersRequest)(message.Data)
If request Is Nothing Then
request = New GetUsersRequest()
End If
Using userService As New UserManagementService()
Dim result = Await userService.GetUserListAsync(currentUser.UserId, request.PageIndex, request.PageSize)
If result.Success Then
Dim responseData As New GetUsersResponse With {
.Users = result.Users,
.TotalCount = result.TotalCount,
.PageIndex = request.PageIndex,
.PageSize = request.PageSize
}
LogOperation(currentUser, "获取用户列表", "用户管理", New With {
.PageIndex = request.PageIndex,
.PageSize = request.PageSize,
.ResultCount = result.Users.Count
})
Return CreateSuccessResponse(message, responseData, result.Message)
Else
Return CreateErrorResponse(message, Constants.ErrorCodes.BUSINESS_ERROR, result.Message)
End If
End Using
Catch ex As Exception
Logger.Error("处理获取用户列表请求失败", ex)
Return CreateErrorResponse(message, Constants.ErrorCodes.UNKNOWN_ERROR, "获取用户列表失败")
End Try
End Function
Private Async Function HandleCreateUserAsync(message As NetworkMessage, session As ClientSession, currentUser As User) As Task(Of NetworkMessage)
Try
Dim userData = JsonConvert.DeserializeObject(Of User)(message.Data)
If userData Is Nothing Then
Return CreateErrorResponse(message, Constants.ErrorCodes.VALIDATION_ERROR, "用户数据格式错误")
End If
Using userService As New UserManagementService()
Dim result = Await userService.CreateUserAsync(userData, currentUser.UserId)
If result.Success Then
LogOperation(currentUser, "创建用户", "用户管理", New With {
.NewUserId = result.Data,
.Username = userData.Username,
.UserType = userData.UserType
})
Return CreateSuccessResponse(message, result.Data, result.Message)
Else
Return CreateErrorResponse(message, Constants.ErrorCodes.BUSINESS_ERROR, result.Message)
End If
End Using
Catch ex As Exception
Logger.Error("处理创建用户请求失败", ex)
Return CreateErrorResponse(message, Constants.ErrorCodes.UNKNOWN_ERROR, "创建用户失败")
End Try
End Function
Private Async Function HandleUpdateUserAsync(message As NetworkMessage, session As ClientSession, currentUser As User) As Task(Of NetworkMessage)
Try
Dim updateData = JsonConvert.DeserializeObject(Of UpdateUserRequest)(message.Data)
If updateData Is Nothing Then
Return CreateErrorResponse(message, Constants.ErrorCodes.VALIDATION_ERROR, "更新数据格式错误")
End If
Using userService As New UserManagementService()
Dim result = Await userService.UpdateUserAsync(updateData.UserId, updateData.UserData, currentUser.UserId)
If result.Success Then
LogOperation(currentUser, "更新用户", "用户管理", New With {
.UpdatedUserId = updateData.UserId,
.UpdateFields = GetUpdatedFields(updateData.UserData)
})
Return CreateSuccessResponse(message, Nothing, result.Message)
Else
Return CreateErrorResponse(message, Constants.ErrorCodes.BUSINESS_ERROR, result.Message)
End If
End Using
Catch ex As Exception
Logger.Error("处理更新用户请求失败", ex)
Return CreateErrorResponse(message, Constants.ErrorCodes.UNKNOWN_ERROR, "更新用户失败")
End Try
End Function
Private Async Function HandleDeleteUserAsync(message As NetworkMessage, session As ClientSession, currentUser As User) As Task(Of NetworkMessage)
Try
Dim deleteData = JsonConvert.DeserializeObject(Of DeleteUserRequest)(message.Data)
If deleteData Is Nothing Then
Return CreateErrorResponse(message, Constants.ErrorCodes.VALIDATION_ERROR, "删除数据格式错误")
End If
Using userService As New UserManagementService()
Dim result = Await userService.DeleteUserAsync(deleteData.UserId, currentUser.UserId)
If result.Success Then
LogOperation(currentUser, "删除用户", "用户管理", New With {
.DeletedUserId = deleteData.UserId
})
Return CreateSuccessResponse(message, Nothing, result.Message)
Else
Return CreateErrorResponse(message, Constants.ErrorCodes.BUSINESS_ERROR, result.Message)
End If
End Using
Catch ex As Exception
Logger.Error("处理删除用户请求失败", ex)
Return CreateErrorResponse(message, Constants.ErrorCodes.UNKNOWN_ERROR, "删除用户失败")
End Try
End Function
Private Function GetUpdatedFields(userData As User) As List(Of String)
Dim fields As New List(Of String)()
If userData.RealName IsNot Nothing Then fields.Add("RealName")
If userData.Phone IsNot Nothing Then fields.Add("Phone")
If userData.Email IsNot Nothing Then fields.Add("Email")
If userData.UserType IsNot Nothing Then fields.Add("UserType")
If userData.Department IsNot Nothing Then fields.Add("Department")
If userData.Position IsNot Nothing Then fields.Add("Position")
Return fields
End Function
End Class
Public Class GetUsersRequest
Public Property PageIndex As Integer = 1
Public Property PageSize As Integer = 20
End Class
Public Class GetUsersResponse
Public Property Users As List(Of User)
Public Property TotalCount As Integer
Public Property PageIndex As Integer
Public Property PageSize As Integer
End Class
Public Class UpdateUserRequest
Public Property UserId As Integer
Public Property UserData As User
End Class
Public Class DeleteUserRequest
Public Property UserId As Integer
End Class
Public Class OperationResult(Of T)
Public Property Success As Boolean
Public Property Message As String
Public Property Data As T
Public Property ErrorCode As String
Public Shared Function Succeed(data As T, Optional message As String = "操作成功") As OperationResult(Of T)
Return New OperationResult(Of T) With {
.Success = True,
.Message = message,
.Data = data,
.ErrorCode = Nothing
}
End Function
Public Shared Function Fail(message As String, Optional errorCode As String = Constants.ErrorCodes.BUSINESS_ERROR) As OperationResult(Of T)
Return New OperationResult(Of T) With {
.Success = False,
.Message = message,
.Data = Nothing,
.ErrorCode = errorCode
}
End Function
End Class 错误:Success不是list of成员,直接提供完整修复代码,不要搞那些花里胡哨的分步说明