package matrixapi
import (
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelshr"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"sort"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 04 13 : 05 : 25
@ 功能 : 获取矩阵列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) MatrixList ( c * gin . Context ) {
var requestData SearchMatrix
c . ShouldBindJSON ( & requestData )
if requestData . Page == 0 {
requestData . Page = 1
}
if requestData . PageSize == 0 {
requestData . PageSize = 10
}
var matrixInfoList [ ] modelAppPlatform . MatrixContent
gormDb := overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . MatrixContent { } ) . Where ( "`state` = 1" )
if requestData . KeyWords != "" {
gormDb = gormDb . Where ( "`name` like ?" , "%" + requestData . KeyWords + "%" )
}
if requestData . AdminOrg != 0 {
var sunOrg publicmethod . GetOrgAllParent
sunOrg . GetOrgSonAllId ( requestData . AdminOrg )
sunOrg . Id = append ( sunOrg . Id , requestData . AdminOrg )
gormDb = gormDb . Where ( "`org` IN ?" , sunOrg . Id )
}
var total int64
totalErr := gormDb . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
gormDb = publicmethod . PageTurningSettings ( gormDb , requestData . Page , requestData . PageSize )
err := gormDb . Find ( & matrixInfoList ) . Error
if err != nil {
publicmethod . Result ( 105 , err , c )
return
}
var sendList [ ] SendMatrix
for _ , v := range matrixInfoList {
var sendCont SendMatrix
sendCont . Id = v . Id
sendCont . Name = v . Name
sendCont . Center = v . Center
sendCont . Org = v . Org
var orgCont modelshr . AdministrativeOrganization
orgCont . GetCont ( map [ string ] interface { } { "`id`" : v . Org } , "`name`" )
sendCont . OrgName = orgCont . Name
sendCont . State = v . State
sendCont . Time = v . Time
sendList = append ( sendList , sendCont )
}
publicmethod . ResultList ( 0 , requestData . Page , requestData . PageSize , total , int64 ( len ( sendList ) ) , sendList , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 04 16 : 35 : 46
@ 功能 : 添加权限矩阵
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) AddMatrixCont ( c * gin . Context ) {
var requestData AddMatrixCont
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Name == "" {
publicmethod . Result ( 1 , requestData . Name , c , "请输入矩阵名称!" )
return
}
if requestData . Org == 0 {
publicmethod . Result ( 1 , requestData . Name , c , "请选择归属行政组织!" )
return
}
var isd int64
gormDb := overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . MatrixContent { } ) . Select ( "Count(`id`)" ) . Where ( "`name` = ?" , requestData . Name )
var sunOrg publicmethod . GetOrgAllParent
sunOrg . GetOrgSonAllId ( requestData . Org )
sunOrg . Id = append ( sunOrg . Id , requestData . Org )
gormDb = gormDb . Where ( "`org` IN ?" , sunOrg . Id )
err = gormDb . Find ( & isd ) . Error
if err == nil && isd > 0 {
publicmethod . Result ( 1 , isd , c , "该矩阵已经存在!请不要重复使用!" )
return
}
var matrixCont modelAppPlatform . MatrixContent
matrixCont . Name = requestData . Name //名称"`
matrixCont . Center = requestData . Center //描述"`
matrixCont . Org = requestData . Org //归属行政组织"`
matrixCont . State = 1 //状态(1:启用;2:禁用;3:删除)"`
matrixCont . Time = time . Now ( ) . Unix ( ) //创建时间"`
err = overall . CONSTANT_DB_AppPlatform . Create ( & matrixCont ) . Error
if err != nil {
publicmethod . Result ( 104 , err , c )
return
}
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 05 07 : 46 : 56
@ 功能 : 编辑权限矩阵
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) EditMatrixCont ( c * gin . Context ) {
var requestData EditMatrixCont
c . ShouldBindJSON ( & requestData )
if requestData . Id == 0 {
publicmethod . Result ( 1 , requestData . Name , c , "未知矩阵!" )
return
}
where := publicmethod . MapOut [ string ] ( )
where [ "`id`" ] = requestData . Id
var matrixInfo modelAppPlatform . MatrixContent
err := matrixInfo . GetCont ( where )
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
editInfo := publicmethod . MapOut [ string ] ( )
if requestData . Name != "" && requestData . Name != matrixInfo . Name {
var isd int64
gormDb := overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . MatrixContent { } ) . Select ( "Count(`id`)" ) . Where ( "`name` = ?" , requestData . Name )
var sunOrg publicmethod . GetOrgAllParent
sunOrg . GetOrgSonAllId ( requestData . Org )
sunOrg . Id = append ( sunOrg . Id , requestData . Org )
gormDb = gormDb . Where ( "`org` IN ?" , sunOrg . Id )
err = gormDb . Find ( & isd ) . Error
if err == nil && isd > 0 {
publicmethod . Result ( 1 , requestData . Name , c , "该矩阵已经存在!请不要重复使用!" )
return
} else {
editInfo [ "`name`" ] = requestData . Name
}
}
if requestData . Center != "" && requestData . Center != matrixInfo . Center {
editInfo [ "`center`" ] = requestData . Center
}
if requestData . Org != 0 && requestData . Org != matrixInfo . Org {
editInfo [ "`org`" ] = requestData . Org
}
if len ( editInfo ) > 0 {
editInfo [ "`time`" ] = time . Now ( ) . Unix ( )
err = matrixInfo . EiteCont ( where , editInfo )
if err != nil {
publicmethod . Result ( 106 , err , c )
return
}
}
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 05 0 8 : 49 : 44
@ 功能 : 编辑矩阵状态
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) EditStatusCont ( c * gin . Context ) {
var requestData EditState
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if len ( requestData . Id ) < 1 {
publicmethod . Result ( 1 , requestData . Id , c , "未知矩阵!" )
return
}
if requestData . Status != 3 {
saveData := publicmethod . MapOut [ string ] ( )
saveData [ "state" ] = requestData . Status
saveData [ "time" ] = time . Now ( ) . Unix ( )
err = overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . MatrixContent { } ) . Where ( "`id` IN ?" , requestData . Id ) . Updates ( saveData ) . Error
if err != nil {
publicmethod . Result ( 106 , err , c )
return
}
} else { //判断是否强制删除
if requestData . IsTrue {
overall . CONSTANT_DB_AppPlatform . Where ( "`id` IN ?" , requestData . Id ) . Delete ( & modelAppPlatform . MatrixContent { } )
overall . CONSTANT_DB_AppPlatform . Where ( "`mc_id` IN ?" , requestData . Id ) . Delete ( & modelAppPlatform . MatrixFrame { } )
overall . CONSTANT_DB_AppPlatform . Where ( "`mc_id` IN ?" , requestData . Id ) . Delete ( & modelAppPlatform . MatrixHandler { } )
} else {
saveData := publicmethod . MapOut [ string ] ( )
saveData [ "state" ] = requestData . Status
saveData [ "time" ] = time . Now ( ) . Unix ( )
err = overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . MatrixContent { } ) . Where ( "`id` IN ?" , requestData . Id ) . Updates ( saveData ) . Error
if err != nil {
publicmethod . Result ( 106 , err , c )
return
}
}
}
publicmethod . Result ( 0 , err , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 06 10 : 31 : 04
@ 功能 : 设置矩阵字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) SetupMatrixField ( c * gin . Context ) {
var requestData HaveMatrixField
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Id == 0 {
publicmethod . Result ( 1 , err , c , "未知矩阵!请检查提交数据" )
return
}
if len ( requestData . Factor ) < 1 {
publicmethod . Result ( 1 , err , c , "未知矩阵条件字段!请检查提交数据" )
return
}
if len ( requestData . Outcome ) < 1 {
publicmethod . Result ( 1 , err , c , "未知矩阵取值字段!请检查提交数据" )
return
}
for _ , v := range requestData . Factor {
AddOrEditMatrixField ( requestData . Id , v )
}
for _ , s := range requestData . Outcome {
AddOrEditMatrixField ( requestData . Id , s )
}
publicmethod . Result ( 0 , requestData , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 06 10 : 48 : 33
@ 功能 : 新增或编辑权限矩阵基础字段
@ 参数
# matrixId 矩阵Id
# cont 矩阵内容
@ 返回值
#
@ 方法原型
#
* /
func AddOrEditMatrixField ( matrixId int64 , cont MatrixField ) ( err error ) {
var matrixFramCont modelAppPlatform . MatrixFrame
err = matrixFramCont . GetCont ( map [ string ] interface { } { "`mc_id`" : matrixId , "`pinyin`" : cont . PinYin } )
if err != nil {
var newCont modelAppPlatform . MatrixFrame
newCont . Name = cont . Name //名称"`
newCont . Types = cont . Types //骨架类型(1:人力资源;2:行政组织;2:分部;)"`
newCont . Condition = cont . Condition //骨架取值类型(1:作为条件使用;2:作为取值使用)"`
newCont . State = 1 //状态(1:启用;2:禁用;3:删除)"`
newCont . McId = matrixId //矩阵ID"`
newCont . Time = time . Now ( ) . Unix ( ) //创建时间"`
newCont . PinYin = cont . PinYin //拼音(标识使用)"`
err = overall . CONSTANT_DB_AppPlatform . Create ( & newCont ) . Error
} else {
if matrixFramCont . Name != cont . Name {
var editCont modelAppPlatform . MatrixFrame
err = editCont . EiteCont ( map [ string ] interface { } { "`id`" : matrixFramCont . Id } , map [ string ] interface { } { "`name`" : cont . Name , "`time`" : time . Now ( ) . Unix ( ) } )
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 06 13 : 10 : 35
@ 功能 : 获取矩阵字段
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) GetMatrixField ( c * gin . Context ) {
var requestData publicmethod . CommonId [ int64 ]
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Id == 0 {
publicmethod . Result ( 1 , err , c , "未知矩阵!请检查提交数据" )
return
}
var contList [ ] modelAppPlatform . MatrixFrame
err = overall . CONSTANT_DB_AppPlatform . Where ( "`state` = 1 AND `mc_id` = ?" , requestData . Id ) . Find ( & contList ) . Error
if err != nil {
publicmethod . Result ( 107 , err , c )
return
}
var sendData HaveMatrixField
sendData . Id = requestData . Id
for _ , v := range contList {
var contInfo MatrixField
contInfo . Id = v . Id
contInfo . Name = v . Name
contInfo . Types = v . Types //骨架类型(1:人力资源;2:行政组织;2:分部;)
contInfo . Condition = v . Condition //骨架取值类型(1:作为条件使用;2:作为取值使用)
contInfo . PinYin = v . PinYin
contInfo . IsEdit = false //是否可更改
contInfo . PyEdit = true //
if v . Condition == 1 {
sendData . Factor = append ( sendData . Factor , contInfo )
} else {
sendData . Outcome = append ( sendData . Outcome , contInfo )
}
}
publicmethod . Result ( 0 , sendData , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 10 11 : 07 : 41
@ 功能 :
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) SubmitMatrixData ( c * gin . Context ) {
var requestData [ ] ReceiveMartix
c . ShouldBindJSON ( & requestData )
if len ( requestData ) < 1 {
publicmethod . Result ( 1 , requestData , c , "未知矩阵!请检查提交数据" )
return
}
var matrixMainId int64 = 0
var matrixContList [ ] modelAppPlatform . MatrixHandler
for _ , v := range requestData {
if len ( v . UserList ) > 0 {
numberInt , _ := strconv . ParseInt ( v . Number , 10 , 64 )
matrixMainId = v . McId
for _ , w := range v . UserList {
var matrixCont modelAppPlatform . MatrixHandler
matrixCont . Number = numberInt //:批号"`
matrixCont . Name = w . Name //使用者名称"`
handIdInt , _ := strconv . ParseInt ( w . Id , 10 , 64 )
matrixCont . HandId = handIdInt //使用者标识符"`
matrixCont . Types = v . Types //骨架类型(1:人力资源;2:行政组织;2:分部;)"`
matrixCont . McId = v . McId //矩阵ID"`
matrixCont . MhId = v . MhId //骨架ID"`
matrixCont . Time = time . Now ( ) . Unix ( ) //创建时间"`
matrixContList = append ( matrixContList , matrixCont )
}
}
}
if len ( matrixContList ) < 1 {
publicmethod . Result ( 1 , requestData , c , "未知矩阵!请检查提交数据" )
return
}
if matrixMainId != 0 {
var delMatrix modelAppPlatform . MatrixHandler
err := delMatrix . DelCont ( map [ string ] interface { } { "`mc_id`" : matrixMainId } )
if err == nil {
overall . CONSTANT_DB_AppPlatform . Create ( & matrixContList )
}
} else {
overall . CONSTANT_DB_AppPlatform . Create ( & matrixContList )
}
publicmethod . Result ( 0 , matrixContList , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 10 14 : 10 : 15
@ 功能 : 获取矩阵取值
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) GainMatrixData ( c * gin . Context ) {
var requestData publicmethod . CommonId [ int64 ]
err := c . ShouldBindJSON ( & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
if requestData . Id == 0 {
publicmethod . Result ( 1 , err , c , "未知矩阵!请检查提交数据" )
return
}
var matrixNumber [ ] int64
err = overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . MatrixHandler { } ) . Distinct ( "`number`" ) . Where ( "`mc_id` = ?" , requestData . Id ) . Find ( & matrixNumber ) . Error
if err != nil || len ( matrixNumber ) < 1 {
publicmethod . Result ( 107 , err , c )
return
}
var matrixFramList [ ] modelAppPlatform . MatrixFrame
err = overall . CONSTANT_DB_AppPlatform . Where ( "`state` = 1 AND `mc_id` = ?" , requestData . Id ) . Find ( & matrixFramList ) . Error
if err != nil || len ( matrixFramList ) < 1 {
publicmethod . Result ( 107 , err , c )
return
}
matrixDataList := make ( [ ] interface { } , 0 )
for _ , v := range matrixNumber {
matrixHang := publicmethod . MapOut [ string ] ( )
for _ , w := range matrixFramList {
//
var sendCont SendMatrixFieldVal
sendCont . Id = w . Id
sendCont . Types = w . Types
sendCont . IsEdit = false
sendCont . PinYin = w . PinYin
var handCont [ ] modelAppPlatform . MatrixHandler
overall . CONSTANT_DB_AppPlatform . Where ( "`mc_id` = ? AND `mh_id` = ? AND `number` = ?" , requestData . Id , w . Id , v ) . Find ( & handCont )
if len ( handCont ) > 0 {
for _ , j := range handCont {
sendCont . Number = strconv . FormatInt ( j . Number , 10 )
var userCont UserListCont
userCont . Id = strconv . FormatInt ( j . HandId , 10 )
if j . Types == 1 {
var orgCont modelshr . AdministrativeOrganization
orgCont . GetCont ( map [ string ] interface { } { "`id`" : j . HandId } , "`name`" )
userCont . Name = orgCont . Name
} else {
var userContIng modelshr . PersonArchives
userContIng . GetCont ( map [ string ] interface { } { "`key`" : j . HandId } , "`name`" , "`icon`" , "`icon_photo`" )
userCont . Name = userContIng . Name
userCont . Icons = userContIng . Icon
if userContIng . Icon == "" {
userCont . Icons = userContIng . IconPhoto
}
}
sendCont . UserList = append ( sendCont . UserList , userCont )
}
}
matrixHang [ sendCont . PinYin ] = sendCont
}
// fmt.Printf("%v\n", matrixHang)
matrixDataList = append ( matrixDataList , matrixHang )
}
publicmethod . Result ( 0 , matrixDataList , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 11 0 8 : 28 : 27
@ 功能 : 矩阵取值
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) MatrixValue ( c * gin . Context ) {
// requestData := publicmethod.MapOut[string]()
var requestData OneMatrixVal
err := c . ShouldBindJSON ( & requestData )
var matrixContNumber [ ] int64
gormDb := overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . MatrixHandler { } ) . Select ( "`number`" )
for _ , v := range requestData . Condition {
gormDb = gormDb . Or ( "`hand_id` = ? AND `mh_id` = ? AND `mc_id` = ?" , v . Val , v . Id , requestData . Id )
}
err = gormDb . Find ( & matrixContNumber ) . Error
wligibleMap := make ( map [ int64 ] int )
for _ , v := range matrixContNumber {
if _ , isOk := wligibleMap [ v ] ; isOk {
wligibleMap [ v ] ++
} else {
wligibleMap [ v ] = 1
}
}
var sicleEligible [ ] Condition [ int64 ]
for k , v := range wligibleMap {
var sicleCont Condition [ int64 ]
sicleCont . Id = k
sicleCont . Val = int64 ( v )
sicleEligible = append ( sicleEligible , sicleCont )
}
sort . Slice ( sicleEligible , func ( i , j int ) bool {
return sicleEligible [ i ] . Val < sicleEligible [ j ] . Val
} )
conditionCount := sicleEligible [ len ( sicleEligible ) - 1 ]
conditionLength := len ( requestData . Condition )
if conditionCount . Val != int64 ( conditionLength ) {
publicmethod . Result ( 0 , err , c )
return
}
//获取最终结果
var finalResult [ ] modelAppPlatform . MatrixHandler
err = overall . CONSTANT_DB_AppPlatform . Where ( "`number` = ? AND `mc_id` = ? AND `mh_id` IN ?" , conditionCount . Id , requestData . Id , requestData . ValueField ) . Find ( & finalResult ) . Error
if err != nil || len ( finalResult ) < 1 {
publicmethod . Result ( 1 , finalResult , c , "没有操作人" )
}
var sendList [ ] SendMatrixVal
for _ , v := range finalResult {
var sendCont SendMatrixVal
sendCont . Id = strconv . FormatInt ( v . HandId , 10 )
if v . Types == 1 {
var orgCont modelshr . AdministrativeOrganization
orgCont . GetCont ( map [ string ] interface { } { "`id`" : v . HandId } , "`name`" , "`number`" , "`superior`" , "`wechat_organization_id`" )
sendCont . Number = orgCont . Number
sendCont . Name = orgCont . Name
sendCont . WechatId = strconv . FormatInt ( orgCont . WechatOrganizationId , 10 ) //微信相关参数
sendCont . Icon = "" //人物头像
sendCont . OrgId = strconv . FormatInt ( orgCont . Superior , 10 ) //人员行政组织或行政组织上级
} else {
var userCont modelshr . PersonArchives
userCont . GetCont ( map [ string ] interface { } { "`key`" : v . HandId } , "`number`" , "`name`" , "`icon`" , "`icon_photo`" , "`wechat`" , "`work_wechat`" , "`admin_org`" )
sendCont . Number = userCont . Number
sendCont . Name = userCont . Name
sendCont . WechatId = userCont . Wechat //微信相关参数
if userCont . WorkWechat != "" {
sendCont . WechatId = userCont . WorkWechat
}
sendCont . Icon = userCont . Icon
if userCont . IconPhoto != "" {
sendCont . Icon = userCont . IconPhoto
} //人物头像
sendCont . OrgId = strconv . FormatInt ( userCont . AdminOrg , 10 ) //人员行政组织或行政组织上级
}
sendList = append ( sendList , sendCont )
}
sendData := publicmethod . MapOut [ string ] ( )
sendData [ "err" ] = err
sendData [ "requestData" ] = requestData
sendData [ "matrixContList" ] = matrixContNumber
sendData [ "wligibleMap" ] = wligibleMap
sendData [ "sicleEligible" ] = sicleEligible [ len ( sicleEligible ) - 1 ]
sendData [ "finalResult" ] = finalResult
publicmethod . Result ( 0 , sendList , c )
}