package administrativeorganization
import (
"fmt"
"hr_server/models"
"hr_server/overall"
"hr_server/overall/overallhandle"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
//职位(岗位)列表
func ( o * OrganizationApi ) PositionList ( c * gin . Context ) {
var requestData lookPositionList
c . ShouldBindJSON ( & requestData )
if requestData . Page < 0 {
requestData . Page = 1
}
if requestData . PageSize < 0 {
requestData . PageSize = 10
}
// gormDb := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Select("").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type")
var positionType models . Position
gormDb := overall . CONSTANT_DB_HR . Table ( fmt . Sprintf ( "%s p" , positionType . TableName ( ) ) ) . Select ( "p.*,d.name as dutiesname,d.number as dutiesnumber,ao.name as aoname,ao.number as aonumber,j.name as jobname" ) . Joins ( "left join duties as d on d.id = p.duties" ) . Joins ( "left join administrative_organization as ao on ao.id = p.administrative_organization" ) . Joins ( "left join job_class as j on j.id = d.job_type" )
if requestData . Name != "" {
gormDb = gormDb . Where ( "p.name LIKE ?" , "%" + requestData . Name + "%" )
}
if requestData . Number != "" {
gormDb = gormDb . Where ( "p.number = ?" , requestData . Number )
}
if requestData . Duties != "" {
gormDb = gormDb . Where ( "p.duties = ?" , requestData . Duties )
}
if requestData . Organization != "" {
gormDb = gormDb . Where ( "p.administrative_organization = ?" , requestData . Organization )
}
if requestData . InCharge != 0 {
gormDb = gormDb . Where ( "p.person_in_charge = ?" , requestData . InCharge )
}
if requestData . Department != "" {
gormDb = gormDb . Where ( "p.department = ?" , requestData . Department )
}
gormDb = gormDb . Where ( "p.state IN ?" , [ ] int { 1 , 2 } )
var total int64
totalErr := gormDb . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
var positionAry [ ] positionOutInfo
errGorm := gormDb . Order ( "p.department DESC,p.duties DESC,p.duties ASC" ) . Limit ( requestData . PageSize ) . Offset ( overallhandle . LimitPage ( requestData . Page , requestData . PageSize ) ) . Find ( & positionAry ) . Error
for i , v := range positionAry {
var getSpur models . Position
getWhe := overallhandle . MapOut ( )
getWhe [ "id" ] = v . Superior
// fmt.Printf("%v\n", v.Superior)
getSpur . GetCont ( getWhe , "number" , "name" )
positionAry [ i ] . SuperiorNumber = getSpur . Number
positionAry [ i ] . SuperiorName = getSpur . Name
var getSpurDepart models . AdministrativeOrganization
getWheDepart := overallhandle . MapOut ( )
getWheDepart [ "id" ] = v . Department
getSpurDepart . GetCont ( getWheDepart , "name" )
positionAry [ i ] . DepartmentName = getSpurDepart . Name
}
if errGorm != nil {
overallhandle . Result ( 105 , errGorm , c )
} else {
overallhandle . ResultList ( 0 , requestData . Page , requestData . PageSize , total , int64 ( len ( positionAry ) ) , positionAry , c )
}
}
//添加职位(岗位)
func ( o * OrganizationApi ) AddPositionCont ( c * gin . Context ) {
var requestData addPositionInfo
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Number == "" {
overallhandle . Result ( 101 , requestData . Number , c , "职位编码不能为空!" )
return
}
if requestData . Name == "" {
overallhandle . Result ( 101 , requestData . Name , c , "职位名称不能为空!" )
return
}
var dutiesId int64 = 0
if requestData . Duties == "" {
overallhandle . Result ( 101 , requestData . Duties , c , "请指定该职位的职务!" )
return
} else {
dutiesId , _ = strconv . ParseInt ( requestData . Duties , 10 , 64 )
}
var organizationId int64 = 0
if requestData . Organization == "" {
overallhandle . Result ( 101 , requestData . Organization , c , "请指定该职位归属的行政组织!" )
return
} else {
organizationId , _ = strconv . ParseInt ( requestData . Organization , 10 , 64 )
}
var superiorInt int64 = 0
if requestData . Superior != "" {
superiorInt , _ = strconv . ParseInt ( requestData . Superior , 10 , 64 )
}
if requestData . InCharge == 0 {
requestData . InCharge = 2
}
var departmentId int64 = 0
if requestData . Department == "" {
overallhandle . Result ( 101 , requestData . Organization , c , "请指定该职位归属的部门!" )
return
} else {
departmentId , _ = strconv . ParseInt ( requestData . Department , 10 , 64 )
}
var positionCont models . Position
//判断编号是否已经存在
isNumExit := overallhandle . MapOut ( )
isNumExit [ "number" ] = requestData . Number
judgeNumErr := positionCont . GetCont ( isNumExit )
if judgeNumErr == nil {
overallhandle . Result ( 101 , isNumExit , c , "该编号已经存在!请不要重复使用!" )
return
}
//判断岗位名称是否已经存在
isExit := overallhandle . MapOut ( )
isExit [ "department" ] = departmentId
isExit [ "name" ] = requestData . Name
isExit [ "administrative_organization" ] = organizationId
judgeErr := positionCont . GetCont ( isExit )
if judgeErr == nil {
overallhandle . Result ( 101 , isExit , c , "该职位在本部门下已经存在!请不要重复添加" )
return
}
positionCont . Number = requestData . Number
positionCont . Name = requestData . Name
positionCont . Duties = dutiesId
positionCont . AdministrativeOrganization = organizationId
positionCont . Superior = superiorInt
positionCont . PersonInCharge = requestData . InCharge
positionCont . Department = departmentId
positionCont . State = 1
positionCont . Time = time . Now ( ) . Unix ( )
addDataErr := overall . CONSTANT_DB_HR . Create ( & positionCont ) . Error
if addDataErr != nil {
overallhandle . Result ( 104 , addDataErr , c )
} else {
overallhandle . Result ( 0 , positionCont , c )
}
}
//获取职位(岗位)详情
func ( o * OrganizationApi ) GetPositionCont ( c * gin . Context ) {
var requestData overallhandle . GetId
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == 0 && requestData . IdStr == "" {
overallhandle . Result ( 101 , err , c , "职务分类Id不能为空!" )
return
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
var positionType models . Position
var postCont positionOutInfo
dbErr := overall . CONSTANT_DB_HR . Model ( & positionType ) . Select ( "position.*,d.name as dutiesname,d.number as dutiesnumber,ao.name as aoname,ao.number as aonumber,j.name as jobname" ) . Joins ( "left join duties as d on d.id = position.duties" ) . Joins ( "left join administrative_organization as ao on ao.id = position.administrative_organization" ) . Joins ( "left join job_class as j on j.id = d.job_type" ) . Where ( "position.id = ?" , requestData . Id ) . First ( & postCont ) . Error
if dbErr != nil {
overallhandle . Result ( 105 , dbErr , c )
} else {
var getSpur models . Position
getWhe := overallhandle . MapOut ( )
getWhe [ "id" ] = postCont . Superior
fmt . Printf ( "%v\n" , postCont . Superior )
getSpur . GetCont ( getWhe , "number" , "name" )
postCont . SuperiorNumber = getSpur . Number
postCont . SuperiorName = getSpur . Name
overallhandle . Result ( 0 , postCont , c )
}
}
//编辑职位(岗位)
func ( o * OrganizationApi ) EitePositionCont ( c * gin . Context ) {
var requestData eitePositionInfo
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == 0 && requestData . IdStr == "" {
overallhandle . Result ( 101 , err , c , "行政类别Id不能为空!" )
return
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
whereAry := overallhandle . MapOut ( )
whereAry [ "id" ] = requestData . Id
var govCont models . Position
judgeErr := govCont . GetCont ( whereAry )
if judgeErr != nil {
overallhandle . Result ( 107 , judgeErr , c )
return
}
saveData := overallhandle . MapOut ( )
saveData [ "time" ] = time . Now ( ) . Unix ( )
if requestData . Number != "" && requestData . Number != govCont . Number {
isNumExit := overallhandle . MapOut ( )
isNumExit [ "number" ] = requestData . Number
var govContNum models . Position
judgeNumErr := govContNum . GetCont ( isNumExit , "id" , "number" )
if judgeNumErr == nil {
overallhandle . Result ( 101 , isNumExit , c , "该编号已经存在!请不要重复使用!" )
return
}
saveData [ "number" ] = requestData . Number
}
departIsTrue := false
if requestData . Department != "" && requestData . Department != strconv . FormatInt ( govCont . Department , 10 ) {
departIsTrue = true
saveData [ "department" ] = requestData . Department
}
if requestData . Name != "" && requestData . Name != govCont . Name {
if departIsTrue == true {
//判断岗位名称是否已经存在
departmentId , _ := strconv . ParseInt ( requestData . Department , 10 , 64 )
isExit := overallhandle . MapOut ( )
isExit [ "department" ] = departmentId
isExit [ "name" ] = requestData . Name
var govContName models . Position
judgeErr := govContName . GetCont ( isExit , "id" , "department" , "name" )
if judgeErr == nil {
overallhandle . Result ( 101 , isExit , c , "该职位在本部门下已经存在!请不要重复添加" )
return
}
}
saveData [ "name" ] = requestData . Name
}
if requestData . Duties != "" && requestData . Duties != strconv . FormatInt ( govCont . Duties , 10 ) {
saveData [ "duties" ] = requestData . Duties
}
if requestData . Organization != "" && requestData . Organization != strconv . FormatInt ( govCont . AdministrativeOrganization , 10 ) {
saveData [ "administrative_organization" ] = requestData . Organization
}
if requestData . Superior != "" && requestData . Superior != strconv . FormatInt ( govCont . Superior , 10 ) {
saveData [ "superior" ] = requestData . Superior
}
if requestData . InCharge != 0 {
saveData [ "person_in_charge" ] = requestData . InCharge
}
eiteErr := govCont . EiteCont ( whereAry , saveData )
if eiteErr != nil {
overallhandle . Result ( 106 , eiteErr , c )
} else {
overallhandle . Result ( 0 , saveData , c )
}
}
//编辑职位(岗位)状态或删除
func ( o * OrganizationApi ) EitePositionStateOrDel ( c * gin . Context ) {
var requestData EiteJobStateDel
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == 0 && requestData . IdStr == "" {
overallhandle . Result ( 101 , err , c , "行政类别Id不能为空!" )
return
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
if requestData . State == 0 {
requestData . State = 1
}
whereAry := overallhandle . MapOut ( )
whereAry [ "id" ] = requestData . Id
var jobClassInfo models . Position
//判断行政组织是否存在
judgeExist := jobClassInfo . GetCont ( whereAry )
if judgeExist != nil {
overallhandle . Result ( 107 , judgeExist , c )
return
}
saveData := overallhandle . MapOut ( )
saveData [ "time" ] = time . Now ( ) . Unix ( )
saveData [ "state" ] = requestData . State
if requestData . State != 3 {
eiteErr := jobClassInfo . EiteCont ( whereAry , saveData )
if eiteErr != nil {
overallhandle . Result ( 106 , eiteErr , c )
} else {
overallhandle . Result ( 0 , saveData , c )
}
} else {
if requestData . IsTrue != 1 {
//软删除
eiteErr := jobClassInfo . EiteCont ( whereAry , saveData )
if eiteErr != nil {
overallhandle . Result ( 106 , eiteErr , c )
} else {
overallhandle . Result ( 0 , saveData , c )
}
} else {
//硬删除
delErr := overall . CONSTANT_DB_HR . Where ( whereAry ) . Delete ( & jobClassInfo )
if delErr == nil {
overallhandle . Result ( 0 , saveData , c )
} else {
overallhandle . Result ( 108 , delErr , c )
}
}
}
}