package administrativeorganization
import (
"encoding/json"
"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 )
}
}
}
}
//获取职位权限配置清单
func ( o * OrganizationApi ) GetPositionRole ( 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 , requestData , c )
return
}
if requestData . IdStr != "" {
idInt , inIntErr := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
if inIntErr == nil {
requestData . Id = idInt
}
}
where := overallhandle . MapOut ( )
var positionRole models . Position
where [ "id" ] = requestData . Id
inFoErr := positionRole . GetCont ( positionRole , "menu_permit" , "button_permit" )
if inFoErr != nil {
overallhandle . Result ( 105 , requestData , c )
return
}
_ , datahhh := GetMenuOperation ( positionRole . MenuPermit , positionRole . ButtonPermit )
overallhandle . Result ( 0 , datahhh , c )
}
//遍历确权
func GetMenuOperation ( menuStr , menuOperStr string ) ( isTrue bool , sendData [ ] powerConfigList ) {
isTrue = false
var menuStrMap [ ] string
var menuOperStrMap [ ] string
json . Unmarshal ( [ ] byte ( menuStr ) , & menuStrMap )
json . Unmarshal ( [ ] byte ( menuOperStr ) , & menuOperStrMap )
var systemMenuList [ ] models . SystemMenu
menuOperErr := overall . CONSTANT_DB_Master . Where ( "`m_steat` IN ?" , [ ] int { 1 , 2 } ) . Order ( "m_sort asc" ) . Order ( "m_id desc" ) . Find ( & systemMenuList ) . Error
if menuOperErr != nil {
return
}
sendData = GetMenuPowerThree ( 1 , 0 , systemMenuList , menuStrMap , menuOperStrMap )
return
}
//递归无限树
func GetMenuPowerThree ( jurisd int , parentId int64 , threeData [ ] models . SystemMenu , menuStrMap , menuOperStrMap [ ] string ) [ ] powerConfigList {
// treeList := []SystemMenuThree{}
treeListPower := [ ] powerConfigList { }
for _ , v := range threeData {
if v . ParentId == parentId {
var powerConfigCont powerConfigList
powerConfigCont . Id = v . Id
powerConfigCont . Title = v . Title
powerConfigCont . IsTrue = overallhandle . JudeInArray ( v . Id , menuStrMap )
child := GetMenuPowerThree ( jurisd , v . Id , threeData , menuStrMap , menuOperStrMap )
powerConfigCont . Child = child
isTrue , menuOper := MenuOperation ( jurisd , v . Id )
if isTrue == true {
var operList [ ] powerCont
for _ , oper_val := range menuOper {
var operCont powerCont
operCont . Id = oper_val . OperId
operCont . Title = oper_val . OperTitle
operCont . IsTrue = overallhandle . JudeInArray ( oper_val . OperId , menuOperStrMap )
operList = append ( operList , operCont )
}
powerConfigCont . MenuOperation = operList
}
treeListPower = append ( treeListPower , powerConfigCont )
}
}
return treeListPower
}
//获取菜单操作项目
func MenuOperation ( jurisd int , menuId int64 ) ( isTrue bool , operation [ ] models . MenuOperation ) {
isTrue = false
// if jurisd != 1 {
// operErr := overall.CONSTANT_DB_Master.Where("`menu_id` = ? AND oper_id IN ?", menuId, global.Gva_Authority_Authentication).Order("oper_id desc").Find(&operation).Error
// if operErr == nil {
// isTrue = true
// }
// } else {
// operErr := overall.CONSTANT_DB_Master.Where("`menu_id` = ?", menuId).Order("oper_id desc").Find(&operation).Error
// if operErr == nil {
// isTrue = true
// }
// }
operErr := overall . CONSTANT_DB_Master . Where ( "`menu_id` = ?" , menuId ) . Order ( "oper_id desc" ) . Find ( & operation ) . Error
if operErr == nil {
isTrue = true
}
return
}