253 lines
7.5 KiB
Go
253 lines
7.5 KiB
Go
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)
|
||
}
|