package rongXinPage
import (
"appPlatform/models/modelshr"
personalitycolor "appPlatform/models/personalityColor"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"encoding/csv"
"encoding/json"
"fmt"
"net/url"
"sort"
"strconv"
"strings"
"github.com/gin-gonic/gin"
)
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 0 9 - 13 0 8 : 55 : 14
@ 功能 : 下载九型人格测试结果
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) DownLoadNineTestPage ( c * gin . Context ) {
keywords := c . Query ( "keywords" )
adminorg := c . Query ( "adminorg" )
emptype := c . Query ( "emptype" )
var peopleList [ ] modelshr . PersonArchives
goormDb := overall . CONSTANT_DB_HrInside . Model ( & modelshr . PersonArchives { } ) . Select ( "`number`,`name`,`admin_org`" ) . Where ( "`emp_type` BETWEEN 1 AND 10" )
if keywords != "undefined" && keywords != "" {
goormDb = goormDb . Where ( "`name` LIKE ?" , "%" + keywords + "%" )
}
if adminorg != "undefined" && adminorg != "" {
adminorgInt , _ := strconv . ParseInt ( adminorg , 10 , 64 )
var sunOrg publicmethod . GetOrgAllParent
sunOrg . GetOrgSun ( adminorgInt )
sunOrg . Id = append ( sunOrg . Id , adminorgInt )
if len ( sunOrg . Id ) > 0 {
goormDb = goormDb . Where ( "`admin_org` IN ?" , sunOrg . Id )
}
}
var empInt [ ] int
json . Unmarshal ( [ ] byte ( emptype ) , & empInt )
if len ( empInt ) > 0 {
goormDb = goormDb . Where ( "`emp_type` IN ?" , empInt )
}
err := goormDb . Find ( & peopleList ) . Error
if err != nil || len ( peopleList ) < 1 {
c . String ( c . Writer . Status ( ) , "没有查询到数据" )
return
}
// fmt.Printf("%v-%v-%v-%v\n", keywords, adminorg, emptype, peopleList)
testPageList := GetPeopleNineData ( peopleList )
// fmt.Printf("testPageList->%v\n", testPageList)
var builder strings . Builder
builder . WriteString ( "\xEF\xBB\xBF" ) //写入UTF-8 BOM 防止乱码
writer := csv . NewWriter ( & builder )
writer . Write ( [ ] string { "团队角色盘点" } )
writer . Write ( [ ] string { "序号" , "工号" , "姓名" , "行政组织" , "第一角色" , "第二角色" , "第三角色" , "第四角色" } )
for i , v := range testPageList {
var scvBody [ ] string
xuHao := strconv . Itoa ( i + 1 )
scvBody = append ( scvBody , xuHao )
scvBody = append ( scvBody , v ... )
writer . Write ( scvBody )
}
writer . Flush ( )
fileName := fmt . Sprintf ( "团队角色盘点_%v.csv" , publicmethod . GetUUid ( 1 ) )
c . Writer . Header ( ) . Add ( "Content-type" , "application/octet-stream" )
c . Header ( "Content-Type" , "application/vnd.ms-excel;charset=utf8" )
c . Header ( "Content-Disposition" , "attachment; filename=" + url . PathEscape ( fileName ) )
// c.Header("Content-Disposition", "attachment; filename=团队角色盘点.csv")
c . Header ( "Content-Transfer-Encoding" , "binary" )
c . Writer . Write ( [ ] byte ( builder . String ( ) ) )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 0 9 - 13 10 : 30 : 19
@ 功能 : 获取人员九型性格数据
* /
func GetPeopleNineData ( user [ ] modelshr . PersonArchives ) ( list [ ] [ ] string ) {
if len ( user ) < 1 {
return
}
var numAry [ ] string
for _ , v := range user {
numAry = append ( numAry , v . Number )
}
var xgAry [ ] personalitycolor . Charcolortest
overall . CONSTANT_DB_Color . Model ( & personalitycolor . Charcolortest { } ) . Where ( "`c_class` = ? AND `c_number` IN ?" , 10000003 , numAry ) . Find ( & xgAry )
for i := 0 ; i < len ( xgAry ) ; i ++ {
if xgAry [ i ] . TestJson != "" {
var testPage JieShouDaaning
err := json . Unmarshal ( [ ] byte ( xgAry [ i ] . TestJson ) , & testPage )
if err == nil {
scoreForEachItem := CalculateScoresForEachItem ( testPage )
sort . Slice ( scoreForEachItem , func ( i , j int ) bool {
return scoreForEachItem [ i ] . Value > scoreForEachItem [ j ] . Value
} )
var itemList [ ] string
number , name , org := GetUserName ( xgAry [ i ] . Number , user )
itemList = append ( itemList , number )
itemList = append ( itemList , name )
itemList = append ( itemList , org )
for j := 0 ; j < 4 ; j ++ {
itemList = append ( itemList , scoreForEachItem [ j ] . Attribute )
}
list = append ( list , itemList )
}
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 0 9 - 13 11 : 17 : 14
@ 功能 : 获取人员姓名
* /
func GetUserName ( num string , user [ ] modelshr . PersonArchives ) ( number , name , org string ) {
for _ , v := range user {
if v . Number == num {
number = num
name = v . Name
org = GetOrgInfo ( v . AdminOrg )
return
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 0 9 - 14 10 : 31 : 36
@ 功能 : 获取行政组织
* /
func GetOrgInfo ( orgId int64 ) string {
var fatherOrg publicmethod . GetOrgAllParent
fatherOrg . GetOrgAllFatherId ( orgId , 4 )
var orgName [ ] string
orgIdLen := len ( fatherOrg . Id )
if orgIdLen > 0 {
for i := orgIdLen - 1 ; i >= 0 ; i -- {
if fatherOrg . Id [ i ] != 0 {
var orgInfo modelshr . AdministrativeOrganization
orgInfo . GetCont ( map [ string ] interface { } { "`id`" : fatherOrg . Id [ i ] } , "`name`" )
if orgInfo . Name != "" {
orgName = append ( orgName , orgInfo . Name )
}
}
}
}
if len ( orgName ) > 0 {
return strings . Join ( orgName , "/" )
}
return ""
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 0 9 - 13 10 : 49 : 43
@ 功能 : 计算各项得分
* /
func CalculateScoresForEachItem ( testPage JieShouDaaning ) ( ScoreForEachItem [ ] Character ) {
PL := 0
RI := 0
CO := 0
SH := 0
ME := 0
TW := 0
IM := 0
CF := 0
SP := 0
DR := 0
for _ , v := range testPage . List {
for _ , av := range v . Answer {
// fmt.Printf("PL:%v\n", av.Attribute)
switch av . Attribute {
case "PL" :
// fmt.Printf("PL:%v\n", av.Value)
PL = PL + av . Value
case "RI" :
RI = RI + av . Value
case "CO" :
CO = CO + av . Value
case "SH" :
SH = SH + av . Value
case "ME" :
ME = ME + av . Value
case "TW" :
TW = TW + av . Value
case "IM" :
IM = IM + av . Value
case "CF" :
CF = CF + av . Value
case "SP" :
SP = SP + av . Value
case "DR" :
DR = DR + av . Value
default :
}
}
}
var itemScorePL Character
itemScorePL . Title = "PL"
itemScorePL . Attribute = "创新智多星"
itemScorePL . Value = PL
ScoreForEachItem = append ( ScoreForEachItem , itemScorePL )
var itemScoreRI Character
itemScoreRI . Title = "RI"
itemScoreRI . Attribute = "资源调查员"
itemScoreRI . Value = RI
ScoreForEachItem = append ( ScoreForEachItem , itemScoreRI )
var itemScoreCO Character
itemScoreCO . Title = "CO"
itemScoreCO . Attribute = "协调者"
itemScoreCO . Value = CO
ScoreForEachItem = append ( ScoreForEachItem , itemScoreCO )
var itemScoreSH Character
itemScoreSH . Title = "SH"
itemScoreSH . Attribute = "鞭策者"
itemScoreSH . Value = SH
ScoreForEachItem = append ( ScoreForEachItem , itemScoreSH )
var itemScoreME Character
itemScoreME . Title = "ME"
itemScoreME . Attribute = "监督评论员"
itemScoreME . Value = ME
ScoreForEachItem = append ( ScoreForEachItem , itemScoreME )
var itemScoreTW Character
itemScoreTW . Title = "TW"
itemScoreTW . Attribute = "凝聚者"
itemScoreTW . Value = TW
ScoreForEachItem = append ( ScoreForEachItem , itemScoreTW )
var itemScoreIM Character
itemScoreIM . Title = "IM"
itemScoreIM . Attribute = "实干家"
itemScoreIM . Value = IM
ScoreForEachItem = append ( ScoreForEachItem , itemScoreIM )
var itemScoreCF Character
itemScoreCF . Title = "CF"
itemScoreCF . Attribute = "善始善终者"
itemScoreCF . Value = CF
ScoreForEachItem = append ( ScoreForEachItem , itemScoreCF )
var itemScoreSP Character
itemScoreSP . Title = "SP"
itemScoreSP . Attribute = "专家"
itemScoreSP . Value = SP
ScoreForEachItem = append ( ScoreForEachItem , itemScoreSP )
var itemScoreDR Character
itemScoreDR . Title = "DR"
itemScoreDR . Attribute = "DR"
itemScoreDR . Value = DR
ScoreForEachItem = append ( ScoreForEachItem , itemScoreDR )
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 0 9 - 19 14 : 17 : 00
@ 功能 : 下载人格测试状态
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) StatisticsPersonality ( c * gin . Context ) {
var requestData CharacterStatis
c . ShouldBindJSON ( & requestData )
if requestData . Typekey == "" {
requestData . Typekey = "10000001"
}
keywords := c . Query ( "keywords" )
adminorg := c . Query ( "org" )
typekey := c . Query ( "typekey" )
types := c . Query ( "types" )
if typekey != "" {
requestData . Typekey = typekey
}
typesInt , _ := strconv . Atoi ( types )
var xgNumber [ ] string
overall . CONSTANT_DB_Color . Model ( & personalitycolor . Charcolortest { } ) . Distinct ( "`c_number`" ) . Where ( "`c_class` = ?" , typekey ) . Find ( & xgNumber )
var peopleList [ ] modelshr . PersonArchives
goormDb := overall . CONSTANT_DB_HrInside . Model ( & modelshr . PersonArchives { } ) . Select ( "`number`,`name`,`company`,`maindeparment`,`admin_org`" ) . Where ( "`emp_type` BETWEEN 1 AND 10" )
if keywords != "undefined" && keywords != "" {
goormDb = goormDb . Where ( "`name` LIKE ? OR `number` LIKE ?" , "%" + keywords + "%" , "%" + keywords + "%" )
}
if adminorg != "undefined" && adminorg != "0" && adminorg != "" {
adminorgInt , _ := strconv . ParseInt ( adminorg , 10 , 64 )
var sunOrg publicmethod . GetOrgAllParent
sunOrg . GetOrgSun ( adminorgInt )
sunOrg . Id = append ( sunOrg . Id , adminorgInt )
if len ( sunOrg . Id ) > 0 {
goormDb = goormDb . Where ( "`admin_org` IN ?" , sunOrg . Id )
}
}
err := goormDb . Find ( & peopleList ) . Error
if err != nil || len ( peopleList ) < 1 {
c . String ( c . Writer . Status ( ) , "没有查询到数据" )
return
}
// return
var builder strings . Builder
builder . WriteString ( "\xEF\xBB\xBF" ) //写入UTF-8 BOM 防止乱码
writer := csv . NewWriter ( & builder )
if typesInt == 2 {
// fmt.Printf("Typekey: %v\n", requestData.Typekey)
writer . Write ( [ ] string { "已完成测试人员名单" } )
switch requestData . Typekey {
case "10000001" : //性格色彩
writer . Write ( [ ] string { "序号" , "工号" , "姓名" , "行政组织" , "性格色彩解析" } )
// fmt.Printf("Typekey----1------>: %v\n", requestData.Typekey)
case "10000002" : //DISC性格特质
writer . Write ( [ ] string { "序号" , "工号" , "姓名" , "行政组织" , "DISC性格解析" } )
// fmt.Printf("Typekey----2------>: %v\n", requestData.Typekey)
case "10000003" : //九型人格特质
writer . Write ( [ ] string { "序号" , "工号" , "姓名" , "行政组织" , "第一角色" , "第二角色" , "第三角色" , "第四角色" } )
// fmt.Printf("Typekey----3------>: %v\n", requestData.Typekey)
default :
writer . Write ( [ ] string { "序号" , "工号" , "姓名" , "行政组织" } )
// fmt.Printf("Typekey----4------>: %v\n", requestData.Typekey)
}
} else {
writer . Write ( [ ] string { "未完成测试人员名单" } )
writer . Write ( [ ] string { "序号" , "工号" , "姓名" , "行政组织" } )
}
jibuqi := 0
for _ , v := range peopleList {
if typesInt == 2 {
if publicmethod . IsInTrue [ string ] ( v . Number , xgNumber ) {
var scvBody [ ] string
jibuqi ++
xuHao := strconv . Itoa ( jibuqi )
scvBody = append ( scvBody , xuHao )
scvBody = append ( scvBody , v . Number )
scvBody = append ( scvBody , v . Name )
scvBody = append ( scvBody , jisuanOrg ( v . Company , v . MainDeparment , v . AdminOrg ) )
switch requestData . Typekey {
case "10000001" : //性格色彩
scvBody = append ( scvBody , TallyColor ( v ) )
case "10000002" : //DISC性格特质
scvBody = append ( scvBody , TallDiscCaput ( v ) )
case "10000003" : //九型人格特质
scvBody = append ( scvBody , TallyNineCaput ( v ) ... )
default :
}
writer . Write ( scvBody )
}
} else {
if ! publicmethod . IsInTrue [ string ] ( v . Number , xgNumber ) {
var scvBody [ ] string
jibuqi ++
xuHao := strconv . Itoa ( jibuqi )
scvBody = append ( scvBody , xuHao )
scvBody = append ( scvBody , v . Number )
scvBody = append ( scvBody , v . Name )
scvBody = append ( scvBody , jisuanOrg ( v . Company , v . MainDeparment , v . AdminOrg ) )
writer . Write ( scvBody )
}
}
}
writer . Flush ( )
fileName := fmt . Sprintf ( "未完成测试人员名单_%v.csv" , publicmethod . GetUUid ( 1 ) )
if typesInt == 2 {
fileName = fmt . Sprintf ( "已完成测试人员名单_%v.csv" , publicmethod . GetUUid ( 1 ) )
}
// fmt.Printf("fileName: %v\n", fileName)
c . Writer . Header ( ) . Add ( "Content-type" , "application/octet-stream" )
c . Header ( "Content-Type" , "application/vnd.ms-excel;charset=utf8" )
c . Header ( "Content-Disposition" , "attachment; filename=" + url . PathEscape ( fileName ) )
// c.Header("Content-Disposition", "attachment; filename=团队角色盘点.csv")
c . Header ( "Content-Transfer-Encoding" , "binary" )
c . Writer . Write ( [ ] byte ( builder . String ( ) ) )
// for _, v := range peopleList {
// }
// org = GetOrgInfo(v.AdminOrg)
// publicmethod.Result(0, xgNumber, c)
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 0 9 - 19 15 : 20 : 31
@ 功能 : 计算行政组织关系
* /
func jisuanOrg ( company , deparment , org int64 ) string {
var orgList [ ] string
if company != 0 {
var com modelshr . AdministrativeOrganization
// err := com.GetCont(map[string]interface{}{"`id`": company}, "`name`")
err := com . RedisCont ( company )
if err == nil {
orgList = append ( orgList , com . Name )
}
}
if deparment != 0 && deparment != company {
var depam modelshr . AdministrativeOrganization
// err := depam.GetCont(map[string]interface{}{"`id`": deparment}, "`name`")
err := depam . RedisCont ( deparment )
if err == nil {
orgList = append ( orgList , depam . Name )
}
}
if org != 0 && org != deparment && org != company {
var orgInfo modelshr . AdministrativeOrganization
// err := orgInfo.GetCont(map[string]interface{}{"`id`": org}, "`name`")
err := orgInfo . RedisCont ( org )
if err == nil {
orgList = append ( orgList , orgInfo . Name )
}
}
if len ( orgList ) > 0 {
return strings . Join ( orgList , "/" )
}
return ""
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 02 - 27 11 : 02 : 37
@ 功能 : 下载人员班组
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) DownLoadTearms ( c * gin . Context ) {
adminorg := c . Query ( "org" )
if adminorg == "" || adminorg == "0" {
c . String ( c . Writer . Status ( ) , "没有获取到正确的行政组织" )
return
}
adminorgInt , _ := strconv . ParseInt ( adminorg , 10 , 64 )
var sunOrg publicmethod . GetOrgAllParent
sunOrg . GetOrgSun ( adminorgInt )
sunOrg . Id = append ( sunOrg . Id , adminorgInt )
var peopleList [ ] modelshr . PersonArchives
overall . CONSTANT_DB_HrInside . Model ( & modelshr . PersonArchives { } ) . Select ( "`number`,`name`,`admin_org`,`teamid` " ) . Where ( "`admin_org` IN ? AND `emp_type` BETWEEN 1 AND 10" , sunOrg . Id ) . Find ( & peopleList )
if len ( peopleList ) < 1 {
c . String ( c . Writer . Status ( ) , "没有查询到信息" )
return
}
var orgInfo modelshr . AdministrativeOrganization
orgInfo . GetCont ( map [ string ] interface { } { "`id`" : adminorg } , "`name`" )
var builder strings . Builder
builder . WriteString ( "\xEF\xBB\xBF" ) //写入UTF-8 BOM 防止乱码
writer := csv . NewWriter ( & builder )
tableTitle := fmt . Sprintf ( "%v班组信息列表" , orgInfo . Name )
writer . Write ( [ ] string { tableTitle } )
writer . Write ( [ ] string { "序号" , "工号" , "姓名" , "班组" } )
for i , v := range peopleList {
var scvBody [ ] string
xuHao := strconv . Itoa ( i + 1 )
scvBody = append ( scvBody , xuHao )
scvBody = append ( scvBody , v . Number )
scvBody = append ( scvBody , v . Name )
if v . TeamId != 0 {
var teamsInfo modelshr . TeamGroup
teamsInfo . GetCont ( map [ string ] interface { } { "`id`" : v . TeamId } , "`name`" )
if teamsInfo . Name == "" {
scvBody = append ( scvBody , "未知" )
} else {
scvBody = append ( scvBody , teamsInfo . Name )
}
} else {
scvBody = append ( scvBody , "未知" )
}
writer . Write ( scvBody )
}
writer . Flush ( )
fileName := fmt . Sprintf ( "%v_班组信息列表_%v.csv" , orgInfo . Name , publicmethod . GetUUid ( 1 ) )
c . Writer . Header ( ) . Add ( "Content-type" , "application/octet-stream" )
c . Header ( "Content-Type" , "application/vnd.ms-excel;charset=utf8" )
c . Header ( "Content-Disposition" , "attachment; filename=" + url . PathEscape ( fileName ) )
// c.Header("Content-Disposition", "attachment; filename=团队角色盘点.csv")
c . Header ( "Content-Transfer-Encoding" , "binary" )
c . Writer . Write ( [ ] byte ( builder . String ( ) ) )
}