yunzer_go/server/controllers/employee.go

404 lines
9.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controllers
import (
"encoding/json"
"server/models"
beego "github.com/beego/beego/v2/server/web"
)
// EmployeeController 员工控制器
type EmployeeController struct {
beego.Controller
}
// GetAllEmployees 获取所有员工(可选,用于管理员查看所有员工)
// @router /employees [get]
func (c *EmployeeController) GetAllEmployees() {
employees, err := models.GetAllEmployees()
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "获取员工列表失败: " + err.Error(),
"data": nil,
}
} else {
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "获取员工列表成功",
"data": employees,
}
}
c.ServeJSON()
}
// GetTenantEmployees 获取租户下的所有员工
// @router /employees/tenant/:tenantId [get]
func (c *EmployeeController) GetTenantEmployees() {
tenantId, err := c.GetInt(":tenantId")
if err != nil || tenantId <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "租户ID无效",
"data": nil,
}
c.ServeJSON()
return
}
employees, err := models.GetTenantEmployees(tenantId)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "获取员工列表失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
// 格式化返回数据
employeeList := make([]map[string]interface{}, 0)
for _, emp := range employees {
employeeList = append(employeeList, map[string]interface{}{
"id": emp.Id,
"tenant_id": emp.TenantId,
"employee_no": emp.EmployeeNo,
"name": emp.Name,
"phone": emp.Phone,
"email": emp.Email,
"department_id": emp.DepartmentId,
"position_id": emp.PositionId,
"bank_name": emp.BankName,
"bank_account": emp.BankAccount,
"status": emp.Status,
"create_time": emp.CreateTime,
})
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "获取员工列表成功",
"data": employeeList,
}
c.ServeJSON()
}
// GetEmployeeInfo 获取员工详情
// @router /employees/:id [get]
func (c *EmployeeController) GetEmployeeInfo() {
id, err := c.GetInt(":id")
if err != nil || id <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "员工ID无效",
"data": nil,
}
c.ServeJSON()
return
}
employee, err := models.GetEmployeeById(id)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "员工不存在",
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "获取员工信息成功",
"data": map[string]interface{}{
"id": employee.Id,
"tenant_id": employee.TenantId,
"employee_no": employee.EmployeeNo,
"name": employee.Name,
"phone": employee.Phone,
"email": employee.Email,
"department_id": employee.DepartmentId,
"position_id": employee.PositionId,
"bank_name": employee.BankName,
"bank_account": employee.BankAccount,
"status": employee.Status,
"create_time": employee.CreateTime,
},
}
c.ServeJSON()
}
// AddEmployee 添加员工
// @router /employees [post]
func (c *EmployeeController) AddEmployee() {
var employeeData struct {
TenantId int `json:"tenant_id"`
EmployeeNo string `json:"employee_no"`
Name string `json:"name"`
Phone string `json:"phone"`
Email string `json:"email"`
DepartmentId int `json:"department_id"`
PositionId int `json:"position_id"`
BankName string `json:"bank_name"`
BankAccount string `json:"bank_account"`
Status int8 `json:"status"`
}
err := json.Unmarshal(c.Ctx.Input.RequestBody, &employeeData)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "请求参数错误: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
employee := &models.Employee{
TenantId: employeeData.TenantId,
EmployeeNo: employeeData.EmployeeNo,
Name: employeeData.Name,
Phone: employeeData.Phone,
Email: employeeData.Email,
DepartmentId: employeeData.DepartmentId,
PositionId: employeeData.PositionId,
BankName: employeeData.BankName,
BankAccount: employeeData.BankAccount,
Status: employeeData.Status,
}
// 如果没有指定租户ID从当前登录用户获取需要JWT中间件支持
// 这里暂时使用传入的tenant_id如果为0则使用默认值
if employee.TenantId == 0 {
// 可以从JWT token中获取租户ID这里暂时设为1作为默认值
employee.TenantId = 1
}
// 默认密码
defaultPassword := "yunzer123"
id, err := models.AddEmployee(employee, defaultPassword)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "添加员工失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
employee.Id = int(id)
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "添加员工成功",
"data": employee,
}
c.ServeJSON()
}
// UpdateEmployee 更新员工信息
// @router /employees/:id [put]
func (c *EmployeeController) UpdateEmployee() {
id, err := c.GetInt(":id")
if err != nil || id <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "员工ID无效",
"data": nil,
}
c.ServeJSON()
return
}
var updateData struct {
EmployeeNo string `json:"employee_no"`
Name string `json:"name"`
Phone string `json:"phone"`
Email string `json:"email"`
DepartmentId int `json:"department_id"`
PositionId int `json:"position_id"`
BankName string `json:"bank_name"`
BankAccount string `json:"bank_account"`
Status int8 `json:"status"`
}
err = json.Unmarshal(c.Ctx.Input.RequestBody, &updateData)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "请求参数错误: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
employee, err := models.GetEmployeeById(id)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "员工不存在",
"data": nil,
}
c.ServeJSON()
return
}
// 更新字段
employee.EmployeeNo = updateData.EmployeeNo
employee.Name = updateData.Name
employee.Phone = updateData.Phone
employee.Email = updateData.Email
employee.DepartmentId = updateData.DepartmentId
employee.PositionId = updateData.PositionId
employee.BankName = updateData.BankName
employee.BankAccount = updateData.BankAccount
employee.Status = updateData.Status
if err := models.UpdateEmployee(employee); err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "更新员工信息失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "更新员工信息成功",
"data": employee,
}
c.ServeJSON()
}
// DeleteEmployee 删除员工
// @router /employees/:id [delete]
func (c *EmployeeController) DeleteEmployee() {
id, err := c.GetInt(":id")
if err != nil || id <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "员工ID无效",
"data": nil,
}
c.ServeJSON()
return
}
if err := models.DeleteEmployee(id); err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "删除员工失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "删除员工成功",
"data": nil,
}
c.ServeJSON()
}
// ResetEmployeePassword 重置员工密码
// @router /employees/:id/reset-password [post]
func (c *EmployeeController) ResetEmployeePassword() {
id, err := c.GetInt(":id")
if err != nil || id <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "员工ID无效",
"data": nil,
}
c.ServeJSON()
return
}
// 默认密码
defaultPassword := "yunzer123"
if err := models.ResetEmployeePassword(id, defaultPassword); err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "重置密码失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "密码重置成功,新密码为: " + defaultPassword,
"data": nil,
}
c.ServeJSON()
}
// ChangeEmployeePassword 修改员工密码
// @router /employees/:id/change-password [post]
func (c *EmployeeController) ChangeEmployeePassword() {
id, err := c.GetInt(":id")
if err != nil || id <= 0 {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "员工ID无效",
"data": nil,
}
c.ServeJSON()
return
}
var passwordData struct {
OldPassword string `json:"old_password"`
NewPassword string `json:"new_password"`
}
err = json.Unmarshal(c.Ctx.Input.RequestBody, &passwordData)
if err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "请求参数错误: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
if passwordData.NewPassword == "" {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "新密码不能为空",
"data": nil,
}
c.ServeJSON()
return
}
if err := models.ChangeEmployeePassword(id, passwordData.OldPassword, passwordData.NewPassword); err != nil {
c.Data["json"] = map[string]interface{}{
"code": 1,
"message": "修改密码失败: " + err.Error(),
"data": nil,
}
c.ServeJSON()
return
}
c.Data["json"] = map[string]interface{}{
"code": 0,
"message": "密码修改成功",
"data": nil,
}
c.ServeJSON()
}