package hr import ( "WiiCITMS/models/hr" "WiiGenerates/WiiCITMS/generates/v1/go/types" "WiiGoLibrary/apply/middle/process/v1" "WiiGoLibrary/framework/db/v1/utils/mssql/unique" "WiiGoLibrary/framework/hub/v1/dblib" "errors" ) // CreatePositionRequest 创建岗位请求参数 type CreatePositionRequest struct { PositionName string `json:"positionName"` // 岗位名称 PositionCode string `json:"positionCode"` // 岗位代码 Description string `json:"description"` // 岗位描述 Level int `json:"level"` // 岗位级别 CategoryID int `json:"categoryId"` // 岗位类别ID CategoryName string `json:"categoryName"` // 岗位类别名称 IsManagement bool `json:"isManagement"` // 是否管理岗位 } // QueryPositionsRequest 查询岗位请求参数 type QueryPositionsRequest struct { PositionName string `json:"positionName"` // 岗位名称,用于模糊查询 PositionCode string `json:"positionCode"` // 岗位代码,用于精确查询 CategoryID int `json:"categoryId"` // 岗位类别ID,用于筛选 Level int `json:"level"` // 岗位级别,用于筛选 IsManagement bool `json:"isManagement"` // 是否管理岗位,用于筛选 // Status int `json:"status"` // 状态:-1-所有,1-启用,0-禁用 Limit int `json:"limit"` // 分页参数,每页数量 Offset int `json:"offset"` // 分页参数,偏移量 } // CreatePosition 创建岗位 func CreatePosition(params CreatePositionRequest) (*hr.PositionModel, *process.Process) { // 验证岗位代码是否已存在 var count int64 r := dblib.DBIns.DB.Model(&hr.PositionModel{}).Where("PositionCode = ? AND (RecordStatus & 524288) = 0", params.PositionCode).Count(&count) if r.Error != nil { return nil, process.FailError(types.QueryPositionError, r.Error) } if count > 0 { return nil, process.FailError(types.DuplicatePositionCodeError, errors.New("岗位代码已存在")) } // 创建岗位 position := hr.PositionInstance() position.PositionName = params.PositionName position.PositionCode = params.PositionCode position.Description = params.Description position.Level = int16(params.Level) position.CategoryID = int16(params.CategoryID) position.CategoryName = params.CategoryName position.IsManagement = params.IsManagement position.Status = 1 // 默认启用 // 保存到数据库 r = dblib.DBIns.DB.Create(position) if r.Error != nil { return nil, process.FailError(types.CreatePositionError, r.Error) } return position, process.Success(200) } // QueryPositions 查询岗位列表 func QueryPositions(params QueryPositionsRequest) ([]*hr.PositionModel, *process.Process) { result := make([]*hr.PositionModel, 0) // 构建查询条件 db := dblib.DBIns.DB.Model(&hr.PositionModel{}).Where("(RecordStatus & 524288) = 0") // 按岗位名称模糊查询 if params.PositionName != "" { db = db.Where("PositionName LIKE ?", "%"+params.PositionName+"%") } // 按岗位代码精确查询 if params.PositionCode != "" { db = db.Where("PositionCode = ?", params.PositionCode) } // 按岗位类别筛选 // if params.CategoryID > 0 { // db = db.Where("CategoryID = ?", params.CategoryID) // } // 按岗位级别筛选 // if params.Level > 0 { // db = db.Where("Level = ?", params.Level) // } // 按是否管理岗位筛选 if params.IsManagement { db = db.Where("IsManagement = ?", params.IsManagement) } // 按状态筛选 // if params.Status >= 0 { // db = db.Where("Status = ?", params.Status) // } // 分页查询 limit := params.Limit if limit <= 0 { limit = 20 // 默认每页20条 } offset := params.Offset if offset < 0 { offset = 0 } // 执行查询 r := db.Limit(limit).Offset(offset).Find(&result) if r.Error != nil { return result, process.FailError(types.QueryPositionError, r.Error) } return result, process.Success(200) } // GetPositionByID 根据ID获取岗位 func GetPositionByID(positionGuid string) (*hr.PositionModel, *process.Process) { // 验证岗位ID guid, err := unique.FromString(positionGuid) if err != nil { return nil, process.FailError(types.InvalidParamError, err) } // 查询岗位 position := &hr.PositionModel{} r := dblib.DBIns.DB.Where("RecordGuid = ? AND (RecordStatus & 524288) = 0", guid).First(position) if r.Error != nil { return nil, process.FailError(types.PositionNotFoundError, r.Error) } return position, process.Success(200) } // UpdatePosition 更新岗位信息 func UpdatePosition(positionGuid string, params CreatePositionRequest) (*hr.PositionModel, *process.Process) { // 获取岗位 position, proc := GetPositionByID(positionGuid) if proc.IsError() { return nil, proc } // 如果修改了岗位代码,验证是否与其他岗位冲突 if params.PositionCode != "" && params.PositionCode != position.PositionCode { var count int64 r := dblib.DBIns.DB.Model(&hr.PositionModel{}). Where("PositionCode = ? AND RecordGuid != ? AND (RecordStatus & 524288) = 0", params.PositionCode, position.RecordGuid).Count(&count) if r.Error != nil { return nil, process.FailError(types.QueryPositionError, r.Error) } if count > 0 { return nil, process.FailError(types.DuplicatePositionCodeError, errors.New("岗位代码已存在")) } position.PositionCode = params.PositionCode } // 更新岗位信息 if params.PositionName != "" { position.PositionName = params.PositionName } if params.Description != "" { position.Description = params.Description } if params.Level > 0 { position.Level = int16(params.Level) } if params.CategoryID > 0 { position.CategoryID = int16(params.CategoryID) } if params.CategoryName != "" { position.CategoryName = params.CategoryName } position.IsManagement = params.IsManagement // 保存更新 r := dblib.DBIns.DB.Save(position) if r.Error != nil { return nil, process.FailError(types.UpdatePositionError, r.Error) } return position, process.Success(200) } // ChangePositionStatus 更改岗位状态(启用/禁用) func ChangePositionStatus(positionGuid string, status int) (*hr.PositionModel, *process.Process) { // 获取岗位 position, proc := GetPositionByID(positionGuid) if proc.IsError() { return nil, proc } // 验证状态值 if status != 0 && status != 1 { return nil, process.FailError(types.InvalidParamError, errors.New("无效的状态值,必须为0或1")) } // 更新状态 position.Status = int16(status) // 保存更新 r := dblib.DBIns.DB.Save(position) if r.Error != nil { return nil, process.FailError(types.UpdatePositionError, r.Error) } return position, process.Success(200) } // DeletePosition 删除岗位(逻辑删除) func DeletePosition(positionGuid string) *process.Process { // 获取岗位 position, proc := GetPositionByID(positionGuid) if proc.IsError() { return proc } // 检查岗位是否有关联的组织 var relationCount int64 r := dblib.DBIns.DB.Model(&hr.OrgPositionRelModel{}). Where("PositionGuid = ? AND (RecordStatus & 524288) = 0", position.RecordGuid).Count(&relationCount) if r.Error != nil { return process.FailError(types.QueryPositionError, r.Error) } if relationCount > 0 { return process.FailError(types.DeletePositionError, errors.New("该岗位已关联组织,不能删除")) } // 使用原生SQL执行删除操作(设置删除标记) sql := "UPDATE " + hr.PositionTable + " SET RecordStatus = RecordStatus | 524288 WHERE RecordGuid = ?" r = dblib.DBIns.DB.Exec(sql, position.RecordGuid) if r.Error != nil { return process.FailError(types.DeletePositionError, r.Error) } return process.Success(200) }