package publicmethod
import (
"appPlatform/middleware/grocerystore"
"appPlatform/middleware/snowflake"
"appPlatform/models/modelAppPlatform"
"appPlatform/models/modelshr"
"appPlatform/models/modelsschool"
"appPlatform/models/modelsstorage"
"appPlatform/models/modelssystempermission"
"appPlatform/overall"
"bytes"
"crypto/md5"
"crypto/rand"
"crypto/sha1"
"encoding/hex"
"encoding/json"
"errors"
"fmt"
"math"
"math/big"
"reflect"
"sort"
"strconv"
"strings"
"time"
"github.com/mozillazg/go-pinyin"
"gorm.io/gorm"
)
// 全局函数处理
// 时间相关处理类
var (
timeLayoutMap = map [ string ] string {
"y" : "2006" ,
"m" : "2006-01" ,
"d" : "2006-01-02" ,
"h" : "2006-01-02 15" ,
"i" : "2006-01-02 15:04" ,
"s" : "2006-01-02 15:04:05" ,
}
weekDay = map [ string ] int {
"Monday" : 1 ,
"Tuesday" : 2 ,
"Wednesday" : 3 ,
"Thursday" : 4 ,
"Friday" : 5 ,
"Saturday" : 6 ,
"Sunday" : 7 ,
}
)
// 编号,纯数字
func TableNumber ( class ... string ) ( number int64 ) {
result , _ := rand . Int ( rand . Reader , big . NewInt ( 8999 ) )
numberTeam := result . Int64 ( ) + 1000
numberStr := fmt . Sprintf ( "%v%v" , time . Now ( ) . Unix ( ) , numberTeam )
if len ( class ) > 0 {
resultLong , _ := rand . Int ( rand . Reader , big . NewInt ( 8999999 ) )
numberTeamLong := resultLong . Int64 ( ) + 1000000
numberStr = fmt . Sprintf ( "%v%v" , time . Now ( ) . Unix ( ) , numberTeamLong )
}
number , _ = strconv . ParseInt ( numberStr , 10 , 64 )
return
}
// 获取UUID
func GetUUid ( workId int64 ) ( uuId int64 ) {
snowflakeId , snowflakeErr := snowflake . NewWorker ( workId )
if snowflakeErr != nil {
uuId = TableNumber ( )
} else {
uuId = snowflakeId . GetId ( )
}
return
}
// 获取随机数
func GetRandNumber ( max int ) ( num int64 ) {
maxVal := int64 ( math . Pow10 ( max ) ) - 1
minVal := int64 ( math . Pow10 ( max - 1 ) )
// fmt.Printf("max:%v\nmaxVal:%v\nminVal:%v\n", max, maxVal, minVal)
if maxVal < 1 {
maxVal = 9
}
if minVal < 1 {
minVal = 1
}
result , _ := rand . Int ( rand . Reader , big . NewInt ( int64 ( maxVal ) ) )
num = result . Int64 ( ) + int64 ( minVal )
return
}
// 初始化map(泛型)
func MapOut [ T GenericityVariable ] ( ) ( data map [ T ] interface { } ) {
data = make ( map [ T ] interface { } ) //必可不少,分配内存
return data
}
//时间搓转换成日期
/ *
@ timestamp 待转换的时间戳
@ timeType 转换类型
* /
func UnixTimeToDay ( timeStamp int64 , timeType int ) ( dateStr string ) {
timeTemplate := "2006-01-02 15:04:05" //常规类型
switch timeType {
case 1 :
timeTemplate = "2006/01/02 15:04:05"
case 2 :
timeTemplate = "2006/01/02 15:04"
case 3 :
timeTemplate = "2006/01/02 15"
case 4 :
timeTemplate = "2006/01/02"
case 5 :
timeTemplate = "15:04:05"
case 6 :
timeTemplate = "15:04"
case 7 :
timeTemplate = "15"
case 8 :
timeTemplate = "04:05"
case 9 :
timeTemplate = "04"
case 10 :
timeTemplate = "05"
case 11 :
timeTemplate = "2006-01-02 15:04:05"
case 12 :
timeTemplate = "2006-01-02 15:04"
case 13 :
timeTemplate = "2006-01-02 15"
case 14 :
timeTemplate = "2006-01-02"
case 15 :
timeTemplate = "2006-01" //年月
case 16 :
timeTemplate = "2006" //年
case 17 :
timeTemplate = "01" //月
case 18 :
timeTemplate = "02" //日
case 19 : //季度
dayMonth := time . Unix ( timeStamp , 0 ) . Format ( "01" )
datMonthFloat , datMonthFloatErr := strconv . ParseFloat ( dayMonth , 10 )
if datMonthFloatErr == nil {
dateStr = strconv . FormatFloat ( math . Ceil ( datMonthFloat / 3 ) , 'f' , - 1 , 64 )
} else {
dateStr = "1"
}
dateStr = "1"
// fmt.Printf("获取是电话卡-------------->%v------------>%v------------>%v\n", dateStr, datMonthFloat, datMonthFloatErr)
case 20 :
timeTemplate = "20060102"
case 21 :
timeTemplate = "200601"
case 22 :
timeTemplate = "01-02"
case 23 : //当前日期为本月第几周
monthFirstDayStr := DateToTimeStampOld ( UnixTimeToDay ( timeStamp , 10 ) + "-01 00:00:00" ) //获取指定月第一天时间戳
dayTime := time . Unix ( monthFirstDayStr , 0 )
dayOfWeek := int ( dayTime . Weekday ( ) ) //获取本月第一天是周几
if dayOfWeek == 0 {
dayOfWeek = 7
}
dayNumber , dayNumberErr := strconv . ParseInt ( UnixTimeToDay ( timeStamp , 9 ) , 10 , 64 ) //获取今天是几号
if dayNumberErr != nil {
dayNumber = 1
}
daysAndWeeksDiff := dayNumber - ( 8 - int64 ( dayOfWeek ) )
if daysAndWeeksDiff <= 0 {
dateStr = "1"
} else {
daysAndWeeksDiffFlot , daysAndWeeksDiffFloatErr := strconv . ParseFloat ( strconv . FormatInt ( daysAndWeeksDiff , 10 ) , 10 )
if daysAndWeeksDiffFloatErr == nil {
daysWeeksDiffVal := math . Ceil ( daysAndWeeksDiffFlot / 7 ) + 1
dateStr = strconv . FormatFloat ( daysWeeksDiffVal , 'f' , - 1 , 64 )
} else {
dateStr = "1"
}
}
case 24 :
timeTemplate = "2006.01.02"
case 25 :
timeTemplate = "2006.01"
case 26 :
timeTemplate = "01.02"
case 27 :
timeTemplate = "2006.01.02 15:04:05"
case 28 :
timeTemplate = "2006012"
case 29 :
timeTemplate = "200612"
case 30 :
timeTemplate = "0612"
case 31 :
timeTemplate = "20061"
case 32 :
timeTemplate = "06"
case 33 :
timeTemplate = "0612"
case 34 :
timeTemplate = "061"
case 35 :
timeTemplate = "0102"
case 36 :
timeTemplate = "012"
case 37 :
timeTemplate = "12"
case 38 :
timeTemplate = "1"
case 39 :
timeTemplate = "2"
case 40 :
timeTemplate = "2006/01"
case 41 : //当前年第几周
timeDay := TimeUnixToTime ( timeStamp , "s" )
year , week := timeDay . ISOWeek ( )
dateStr = fmt . Sprintf ( "%v年第%v周" , year , week )
return dateStr
default :
timeTemplate = "2006-01-02 15:04:05" //常规类型
}
dateStr = time . Unix ( timeStamp , 0 ) . Format ( timeTemplate )
return
}
/ *
日期转时间戳
* /
func DateToTimeStamp ( dataStr string ) ( timeStamp int64 , isTrue bool ) {
isTrue = false
tmp := "2006-01-02 15:04:05"
res , err := time . ParseInLocation ( tmp , dataStr , time . Local )
timeStamp = res . Unix ( )
if err == nil {
isTrue = true
}
return
}
func DateToTimeStampOld ( dataStr string ) ( timeStamp int64 ) {
tmp := "2006-01-02 15:04:05"
res , _ := time . ParseInLocation ( tmp , dataStr , time . Local )
timeStamp = res . Unix ( )
return
}
// 数据库查询翻页
func LimitPage ( page , pageSize int ) ( offSet int ) {
if page < 1 {
page = 1
}
offSet = pageSize * ( page - 1 )
if offSet < 0 {
offSet = 0
}
return
}
// 数据库查询翻页
func LimitPage64 ( page , pageSize int64 ) ( offSet int64 ) {
if page < 1 {
page = 1
}
offSet = pageSize * ( page - 1 )
if offSet < 0 {
offSet = 0
}
return
}
// 中文首字母大写
func ChineseFirstWordCapitalize ( wordStr string ) ( firstWord string ) {
pinYinSub := pinyin . NewArgs ( )
rows := pinyin . Pinyin ( wordStr , pinYinSub )
for i := 0 ; i < len ( rows ) ; i ++ {
if len ( rows [ i ] ) != 0 {
str := rows [ i ] [ 0 ]
pi := str [ 0 : 1 ]
firstWord += string ( bytes . ToUpper ( [ ] byte ( pi ) ) )
}
}
return
}
// ZeroFillByStr
// @Description: 字符串补零
// @param str :需要操作的字符串
// @param resultLen 结果字符串的长度
// @param reverse true 为前置补零,false 为后置补零
// @return string
func ZeroFillByStr ( str string , resultLen int , reverse bool ) string {
if len ( str ) > resultLen || resultLen <= 0 {
return str
}
if reverse {
return fmt . Sprintf ( "%0*s" , resultLen , str ) //不足前置补零
}
result := str
for i := 0 ; i < resultLen - len ( str ) ; i ++ {
result += "0"
}
return result
}
/ *
* 加密算法
* /
type Md5Encryption struct {
Code string ` json:"code" `
AppKey string ` json:"appKey" `
}
func ( m * Md5Encryption ) Md5EncryptionAlgorithm ( ) ( md5Val string ) {
if m . AppKey == "" {
m . Md5EncryptionInit ( m . Code )
}
// fmt.Printf("Code ====> %v\n", m.Code)
// fmt.Printf("AppKey ====> %v\n", m.AppKey)
mdNew := md5 . New ( )
mdNew . Write ( [ ] byte ( m . AppKey ) )
keyMd5 := fmt . Sprintf ( "%x" , mdNew . Sum ( nil ) )
// fmt.Printf("Step1:--AppKey-加密->%v\n", keyMd5)
codeNewMd1 := md5 . New ( )
codeNewMd1 . Write ( [ ] byte ( m . Code ) )
codeMd1 := fmt . Sprintf ( "%x" , codeNewMd1 . Sum ( nil ) )
// fmt.Printf("Step2:--CodeString-加密->%v\n", codeMd1)
yiCeng := codeMd1 + keyMd5
// fmt.Printf("Step3:--CodeString+AppKey-->%v\n", yiCeng)
yiCengNew := md5 . New ( )
yiCengNew . Write ( [ ] byte ( yiCeng ) )
yiCengMd5 := fmt . Sprintf ( "%x" , yiCengNew . Sum ( nil ) )
// fmt.Printf("Step4:--one-加密->%v\n", yiCengMd5)
erCeng := yiCengMd5 + m . AppKey
// fmt.Printf("Step5:--one + AppKey->%v\n", erCeng)
// fmt.Printf("AppKey ===2=> %v\n", m.AppKey)
erCengNew := md5 . New ( )
erCengNew . Write ( [ ] byte ( erCeng ) )
md5Val = fmt . Sprintf ( "%x" , erCengNew . Sum ( nil ) )
// fmt.Printf("Step6:--therr--加密-->%v\n", md5Val)
// md5Val = codeMd1
return
}
func ( m * Md5Encryption ) Md5EncryptionAlgorithmFj ( ) ( md5Val string , outlog [ ] string ) {
if m . AppKey == "" {
m . Md5EncryptionInit ( m . Code )
}
// fmt.Printf("Code ====> %v\n", m.Code)
// fmt.Printf("AppKey ====> %v\n", m.AppKey)
outlog = append ( outlog , fmt . Sprintf ( "Code ====> %v" , m . Code ) )
outlog = append ( outlog , fmt . Sprintf ( "AppKey ====> %v" , m . AppKey ) )
mdNew := md5 . New ( )
mdNew . Write ( [ ] byte ( m . AppKey ) )
keyMd5 := fmt . Sprintf ( "%x" , mdNew . Sum ( nil ) )
// fmt.Printf("Step1:--AppKey-加密->%v\n", keyMd5)
outlog = append ( outlog , fmt . Sprintf ( "Step1:--AppKey-加密->%v" , keyMd5 ) )
codeNewMd1 := md5 . New ( )
codeNewMd1 . Write ( [ ] byte ( m . Code ) )
codeMd1 := fmt . Sprintf ( "%x" , codeNewMd1 . Sum ( nil ) )
// fmt.Printf("Step2:--CodeString-加密->%v\n", codeMd1)
outlog = append ( outlog , fmt . Sprintf ( "Step2:--CodeString-加密->%v" , codeMd1 ) )
yiCeng := codeMd1 + keyMd5
// fmt.Printf("Step3:--CodeString+AppKey-->%v\n", yiCeng)
outlog = append ( outlog , fmt . Sprintf ( "Step3:--CodeString+AppKey-->%v" , yiCeng ) )
yiCengNew := md5 . New ( )
yiCengNew . Write ( [ ] byte ( yiCeng ) )
yiCengMd5 := fmt . Sprintf ( "%x" , yiCengNew . Sum ( nil ) )
// fmt.Printf("Step4:--one-加密->%v\n", yiCengMd5)
outlog = append ( outlog , fmt . Sprintf ( "Step4:--one-加密->%v" , yiCengMd5 ) )
erCeng := yiCengMd5 + m . AppKey
// fmt.Printf("Step5:--one + AppKey->%v\n", erCeng)
outlog = append ( outlog , fmt . Sprintf ( "Step5:--one + AppKey->%v" , erCeng ) )
// fmt.Printf("AppKey ===2=> %v\n", m.AppKey)
erCengNew := md5 . New ( )
erCengNew . Write ( [ ] byte ( erCeng ) )
md5Val = fmt . Sprintf ( "%x" , erCengNew . Sum ( nil ) )
// fmt.Printf("Step6:--therr--加密-->%v\n", md5Val)
outlog = append ( outlog , fmt . Sprintf ( "Step6:--therr--加密-->%v" , md5Val ) )
// md5Val = codeMd1
return
}
// 初始化程序
func ( m * Md5Encryption ) Md5EncryptionInit ( code string ) {
m . AppKey = overall . CONSTANT_CONFIG . Appsetup . AppKey
m . Code = code
}
// sha1算法
func Sha1Encryption ( str string ) string {
sha1 := sha1 . New ( )
sha1 . Write ( [ ] byte ( str ) )
return hex . EncodeToString ( sha1 . Sum ( nil ) )
}
//计算当前时间N个月后的时间
/ *
@ timeStamp 当前时间戳
@ futureTime 正数多少时间后 , 负数多少时间前
* /
func GetFutureMonthTime ( timeStamp int64 , futureTime , class int ) ( dateStr int64 ) {
timeUnix := time . Unix ( timeStamp , 0 )
addDate := timeUnix . AddDate ( 0 , 0 , futureTime )
switch class {
case 2 :
addDate = timeUnix . AddDate ( 0 , futureTime , 0 )
case 3 :
addDate = timeUnix . AddDate ( futureTime , 0 , 0 )
default :
addDate = timeUnix . AddDate ( 0 , 0 , futureTime )
}
dateStr = addDate . Unix ( )
return
}
// 判断字符串是否在切片中 泛型
func IsInTrue [ T GenericityVariable ] ( key T , keyAry [ ] T ) ( isTrue bool ) {
isTrue = false
for _ , v := range keyAry {
if v == key {
return true
}
}
return
}
// 获取两个切片得差集
func DifferenceSet [ T GenericityVariable ] ( one , two [ ] T ) [ ] T {
var three [ ] T
temp := map [ T ] struct { } { }
for _ , val := range two {
if _ , ok := temp [ val ] ; ! ok {
temp [ val ] = struct { } { }
}
}
for _ , val := range one {
if _ , ok := temp [ val ] ; ! ok {
three = append ( three , val )
}
}
return three
}
// 两个切片的交集
func Intersect [ T GenericityVariable ] ( a , b [ ] T ) [ ] T {
inter := make ( [ ] T , 0 )
mp := make ( map [ T ] bool )
for _ , s := range a {
if _ , ok := mp [ s ] ; ! ok {
mp [ s ] = true
}
}
for _ , s := range b {
if _ , ok := mp [ s ] ; ok {
inter = append ( inter , s )
}
}
return inter
}
//判断类型转换成
/ *
字符转int
* /
func StringToInt ( val interface { } ) ( int , error ) {
switch val . ( type ) {
case string :
return strconv . Atoi ( val . ( string ) )
case int :
return val . ( int ) , nil
default :
return 0 , nil
}
return 0 , nil
}
/ *
字符转int64
* /
func StringToInt64 ( val interface { } ) ( int64 , error ) {
switch valData := val . ( type ) {
case string :
return strconv . ParseInt ( valData , 10 , 64 )
case int :
return int64 ( valData ) , nil
case int8 :
return int64 ( valData ) , nil
case int16 :
return int64 ( valData ) , nil
case int32 :
return int64 ( valData ) , nil
case int64 :
return valData , nil
case uint :
return int64 ( valData ) , nil
case uint8 :
return int64 ( valData ) , nil
case uint16 :
return int64 ( valData ) , nil
case uint32 :
return int64 ( valData ) , nil
case uint64 :
return int64 ( valData ) , nil
case float64 :
val := strconv . FormatFloat ( valData , 'f' , - 1 , 64 )
valInt , err := strconv . ParseInt ( val , 10 , 64 )
return valInt , err
default :
return 0 , nil
}
return 0 , nil
}
// 获取人员TokenRedis 信息
func GetUserRedisToken ( number string ) ( manCont modelshr . ManCont , err error ) {
redisMyContKey := fmt . Sprintf ( "ScanCode:Authentication:UserCont_%v_%v" , overall . CONSTANT_CONFIG . RedisPrefixStr . Alias , number )
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS5 )
useMap , isTrue := redisClient . HashGetAll ( redisMyContKey )
if isTrue == false {
err . Error ( )
return
}
// fmt.Printf("%v\n", useMap)
err = MapToStruct ( useMap , & manCont , "json" )
return
}
// 获取人员Redis信息
func GetUserRedisCont ( number string ) ( manCont modelshr . ManCont , err error ) {
redisMyContKey := fmt . Sprintf ( "ScanCode:Authentication:UserCont_%v_%v" , overall . CONSTANT_CONFIG . RedisPrefixStr . Alias , number )
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS5 )
useMap , isTrue := redisClient . HashGetAll ( redisMyContKey )
if isTrue == false {
err . Error ( )
return
}
// fmt.Printf("%v\n", useMap)
// var manInfo models.ManCont
err = MapToStruct ( useMap , & manCont , "json" )
// manCont = manInfo
return
}
// 获取人员Redis信息返回指针
func GetUserRedisContPointer ( number string ) ( manCont modelshr . ManCont , err error ) {
redisMyContKey := fmt . Sprintf ( "ScanCode:Authentication:UserCont_%v_%v" , overall . CONSTANT_CONFIG . RedisPrefixStr . Alias , number )
// fmt.Printf("redisMyContKey------------>%v\n", redisMyContKey)
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS5 )
useMap , isTrue := redisClient . HashGetAll ( redisMyContKey )
if isTrue == false {
err . Error ( )
return
}
// fmt.Printf("%v\n", useMap)
// var manInfo models.ManCont
err = MapToStruct ( useMap , & manCont , "json" )
// manCont = manInfo
return
}
/ *
map [ string ] string 转 struct
* /
func MapToStruct ( mapString map [ string ] string , structInterface interface { } , tag string ) ( err error ) {
strType := reflect . TypeOf ( structInterface )
strValue := reflect . ValueOf ( structInterface )
switch strType . Kind ( ) {
case reflect . Ptr :
if strType . Elem ( ) . Kind ( ) != reflect . Struct {
// fmt.Printf("1-->%v\n", strType.Elem().Kind().String())
return errors . New ( "需要*struct类型,却传入*" + strType . Elem ( ) . Kind ( ) . String ( ) + "类型" )
}
default :
// fmt.Printf("2-->%v\n", strType.Kind().String())
return errors . New ( "需要*struct类型,却传入" + strType . Kind ( ) . String ( ) + "类型" )
}
// fmt.Printf("strType--->%v---strValue---->%v\n", strType, strValue)
strTypeElem := strType . Elem ( )
strValueElem := strValue . Elem ( )
strTypeNum := strTypeElem . NumField ( )
// fmt.Printf("strTypeElem--->%v---strValueElem---->%v---------strTypeNum--------->%v\n", strTypeElem, strValueElem, strTypeNum)
for i := 0 ; i < strTypeNum ; i ++ {
fieldName := strTypeElem . Field ( i ) . Name
if tag != "" {
fieldName = strTypeElem . Field ( i ) . Tag . Get ( tag )
}
value , ok := mapString [ fieldName ]
if ! ok {
continue
}
// fmt.Printf("name--->%v---tag---->%v----value---->%v----ok---->%v\n", fieldName, tag, value, ok)
if strValueElem . Field ( i ) . CanSet ( ) {
// fmt.Printf("Type--->%v---value---->%v\n", strValueElem.Field(i).Type(), reflect.TypeOf(value))
valType := fmt . Sprintf ( "%v" , strValueElem . Field ( i ) . Type ( ) )
switch valType {
case "int" :
valueInt , _ := strconv . Atoi ( value )
strValueElem . Field ( i ) . Set ( reflect . ValueOf ( valueInt ) )
case "int32" :
valueInt32 , _ := strconv . ParseInt ( value , 10 , 32 )
strValueElem . Field ( i ) . Set ( reflect . ValueOf ( int32 ( valueInt32 ) ) )
case "int64" :
valueInt64 , _ := strconv . ParseInt ( value , 10 , 64 )
strValueElem . Field ( i ) . Set ( reflect . ValueOf ( valueInt64 ) )
case "float32" :
valuefloat32 , _ := strconv . ParseFloat ( value , 32 )
strValueElem . Field ( i ) . Set ( reflect . ValueOf ( float32 ( valuefloat32 ) ) )
case "float64" :
valuefloat64 , _ := strconv . ParseFloat ( value , 64 )
strValueElem . Field ( i ) . Set ( reflect . ValueOf ( valuefloat64 ) )
case "string" :
strValueElem . Field ( i ) . Set ( reflect . ValueOf ( value ) )
default :
}
} else {
continue
}
}
return
}
// 翻页设置
func PageTurningSettings ( gormDb * gorm . DB , page , pageSize int ) * gorm . DB {
if page < 0 {
page = 1
}
if pageSize < 0 {
pageSize = 10
}
gormDb = gormDb . Limit ( pageSize ) . Offset ( LimitPage ( page , pageSize ) )
return gormDb
}
//浮点数保留小数
/ *
@ value 浮点数值
@ weishu 要保留的小数位数
* /
func DecimalEs ( value float64 , weishu int ) float64 {
switch weishu {
case 3 :
value , _ = strconv . ParseFloat ( fmt . Sprintf ( "%.3f" , value ) , 64 )
case 4 :
value , _ = strconv . ParseFloat ( fmt . Sprintf ( "%.4f" , value ) , 64 )
case 5 :
value , _ = strconv . ParseFloat ( fmt . Sprintf ( "%.5f" , value ) , 64 )
case 6 :
value , _ = strconv . ParseFloat ( fmt . Sprintf ( "%.6f" , value ) , 64 )
default :
value , _ = strconv . ParseFloat ( fmt . Sprintf ( "%.2f" , value ) , 64 )
}
return value
}
// 递归查找
func RecursionOrgLeve ( superior int64 , leve int64 ) ( groupId int64 ) {
if leve == 0 {
leve = 1
}
if superior == 0 {
return
}
var orgMap modelshr . OrgContType
err := orgMap . GetCont ( map [ string ] interface { } { "`id`" : superior , "`state`" : 1 } , "`id`" , "`superior`" , "`level`" )
if err != nil {
return
}
if orgMap . Level <= leve {
groupId = orgMap . Id
return
} else {
groupId = RecursionOrgLeve ( orgMap . Superior , leve )
}
return
}
// 获取集团、公司、部门、二级部门、工段
func GetOrgStructurees ( orgId int64 ) ( groupId , companyId , departmentId , sunDepartId , workShopId int64 ) {
if orgId == 0 {
return
}
var orgContTypeInfo modelshr . OrgContType
err := orgContTypeInfo . GetCont ( map [ string ] interface { } { "`id`" : orgId } )
if err != nil {
return
}
switch orgContTypeInfo . Level {
case 1 :
groupId = orgContTypeInfo . Id
case 2 :
groupId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 1 )
workShopId = orgContTypeInfo . Id
case 3 :
groupId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 2 )
companyId = orgContTypeInfo . Id
case 4 :
groupId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 2 )
companyId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 3 )
departmentId = orgContTypeInfo . Id
case 5 :
groupId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 2 )
companyId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 3 )
departmentId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 4 )
sunDepartId = orgContTypeInfo . Id
case 6 :
groupId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 2 )
companyId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 3 )
departmentId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 4 )
sunDepartId = RecursionOrgLevees ( orgId , orgContTypeInfo . Superior , 5 )
workShopId = orgContTypeInfo . Id
default :
groupId = orgContTypeInfo . Id
companyId = orgContTypeInfo . Id
workShopId = orgContTypeInfo . Id
}
return
}
func RecursionOrgLevees ( oldId , superior int64 , leve int64 ) ( groupId int64 ) {
if leve == 0 {
leve = 1
}
if superior == 0 {
return
}
var orgMap modelshr . OrgContType
err := orgMap . GetCont ( map [ string ] interface { } { "`id`" : superior , "`state`" : 1 } , "`id`" , "`superior`" , "`level`" )
if err != nil {
return
}
if orgMap . Level <= leve {
if orgMap . Level == leve {
groupId = oldId
} else {
groupId = orgMap . Id
}
return
} else {
groupId = RecursionOrgLevees ( orgMap . Id , orgMap . Superior , leve )
}
return
}
// 获取集团、公司、部门、二级部门、工段
func GetOrgStructure ( orgId int64 ) ( groupId , companyId , departmentId , sunDepartId , workShopId int64 ) {
if orgId == 0 {
return
}
var orgContTypeInfo modelshr . OrgContType
err := orgContTypeInfo . GetCont ( map [ string ] interface { } { "`id`" : orgId } )
if err != nil {
return
}
switch orgContTypeInfo . Level {
case 1 :
groupId = orgContTypeInfo . Id
case 2 :
groupId = RecursionOrgLeve ( orgContTypeInfo . Superior , 1 )
workShopId = orgContTypeInfo . Id
case 3 :
groupId = RecursionOrgLeve ( orgContTypeInfo . Superior , 2 )
companyId = orgContTypeInfo . Id
case 4 :
groupId = RecursionOrgLeve ( orgContTypeInfo . Superior , 2 )
companyId = RecursionOrgLeve ( orgContTypeInfo . Superior , 3 )
departmentId = orgContTypeInfo . Id
case 5 :
groupId = RecursionOrgLeve ( orgContTypeInfo . Superior , 2 )
companyId = RecursionOrgLeve ( orgContTypeInfo . Superior , 3 )
departmentId = RecursionOrgLeve ( orgContTypeInfo . Superior , 4 )
sunDepartId = orgContTypeInfo . Id
case 6 :
groupId = RecursionOrgLeve ( orgContTypeInfo . Superior , 2 )
companyId = RecursionOrgLeve ( orgContTypeInfo . Superior , 3 )
departmentId = RecursionOrgLeve ( orgContTypeInfo . Superior , 4 )
sunDepartId = RecursionOrgLeve ( orgContTypeInfo . Superior , 5 )
workShopId = orgContTypeInfo . Id
default :
groupId = orgContTypeInfo . Id
companyId = orgContTypeInfo . Id
workShopId = orgContTypeInfo . Id
}
return
}
// 获取指定行政组织id,所有子类
func GetDepartmentSun ( superior int64 , idary [ ] int64 ) ( orgIdAry [ ] int64 ) {
if superior == 0 {
return
}
var orgAry [ ] modelshr . AdministrativeOrganization
err := overall . CONSTANT_DB_HR . Model ( & modelshr . AdministrativeOrganization { } ) . Select ( "`id`" ) . Where ( "`state` = 1 AND `superior` = ?" , superior ) . Find ( & orgAry ) . Error
if err != nil {
return
}
for _ , v := range orgAry {
if IsInTrue [ int64 ] ( v . Id , orgIdAry ) == false {
orgIdAry = append ( orgIdAry , v . Id )
GetDepartmentSun ( v . Id , orgIdAry )
} else {
GetDepartmentSun ( v . Id , orgIdAry )
}
}
return
}
// 获取集团或第一实权部门
func GetGroupOrDepartPower ( parentId int64 , departId ... int64 ) int64 {
if parentId == 0 {
return 0
}
var orgCont modelshr . AdministrativeOrganization
err := orgCont . GetCont ( map [ string ] interface { } { "id" : parentId } , "id" , "organization_type" , "superior" , "ispower" )
if err != nil {
return parentId
}
if len ( departId ) > 0 {
if orgCont . IsPower == 1 {
return orgCont . Id
}
return GetGroupOrDepartPower ( orgCont . Superior , 1 )
} else {
if orgCont . OrganizationType <= 2 {
return orgCont . Id
}
return GetGroupOrDepartPower ( orgCont . Superior )
}
return orgCont . Id
}
// 判断指定日期是周几
func GetWeekday ( date string ) ( string , error ) {
layout := "2006-01-02"
t , err := time . Parse ( layout , date )
if err != nil {
return fmt . Sprintf ( "%v" , time . Sunday ) , err
}
dayOfWeek := t . Weekday ( )
var weekdays = [ ... ] string {
"星期日" , "星期一" , "星期二" , "星期三" , "星期四" , "星期五" , "星期六" ,
}
return fmt . Sprintf ( weekdays [ dayOfWeek ] ) , nil
}
// 时间计算(年、季、月、周、日、时、分、秒)
func ComputingTime ( timeStamp int64 , timeType int ) ( timeDataInt int64 ) {
var timeData string = "1"
switch timeType {
case 1 :
timeData = time . Unix ( timeStamp , 0 ) . Format ( "2006" ) //年
case 2 :
dayMonth := time . Unix ( timeStamp , 0 ) . Format ( "01" ) //季度
datMonthFloat , datMonthFloatErr := strconv . ParseFloat ( dayMonth , 10 )
if datMonthFloatErr == nil {
timeData = strconv . FormatFloat ( math . Ceil ( datMonthFloat / 3 ) , 'f' , - 1 , 64 )
} else {
timeData = "1"
}
case 3 :
timeData = time . Unix ( timeStamp , 0 ) . Format ( "01" ) //月份
case 4 : //当前日期为本月第几周
monthFirstDayStr := DateToTimeStampOld ( UnixTimeToDay ( timeStamp , 15 ) + "-01 00:00:00" ) //获取指定月第一天时间戳
dayTime := time . Unix ( monthFirstDayStr , 0 )
dayOfWeek := int ( dayTime . Weekday ( ) ) //获取本月第一天是周几
if dayOfWeek == 0 {
dayOfWeek = 7
}
dayNumber , dayNumberErr := strconv . ParseInt ( UnixTimeToDay ( timeStamp , 18 ) , 10 , 64 ) //获取今天是几号
if dayNumberErr != nil {
dayNumber = 1
}
daysAndWeeksDiff := dayNumber - ( 8 - int64 ( dayOfWeek ) )
if daysAndWeeksDiff <= 0 {
timeData = "1"
} else {
daysAndWeeksDiffFlot , daysAndWeeksDiffFloatErr := strconv . ParseFloat ( strconv . FormatInt ( daysAndWeeksDiff , 10 ) , 10 )
if daysAndWeeksDiffFloatErr == nil {
daysWeeksDiffVal := math . Ceil ( daysAndWeeksDiffFlot / 7 ) + 1
timeData = strconv . FormatFloat ( daysWeeksDiffVal , 'f' , - 1 , 64 )
} else {
timeData = "1"
}
}
case 5 :
timeData = time . Unix ( timeStamp , 0 ) . Format ( "02" ) //天
case 7 :
timeData = time . Unix ( timeStamp , 0 ) . Format ( "15" ) //时
case 8 :
timeData = time . Unix ( timeStamp , 0 ) . Format ( "04" ) //分
case 9 :
timeData = time . Unix ( timeStamp , 0 ) . Format ( "05" ) //秒
default :
timeData = "0"
}
timeDataInt , timeDataIntErr := strconv . ParseInt ( timeData , 10 , 64 )
if timeDataIntErr != nil {
timeDataInt = 0
return
}
return
}
/ *
获取岗位权限
@ ordid 行政组织
@ postid 岗位
@ system 系统标识
* /
func GetPostPower ( ordid , postid int64 , system string ) ( menuIdAry , menuUrl [ ] string , err error ) {
redisFileEmpowerKey := fmt . Sprintf ( "ScanCode:SystemEmpower:Authorize_%v_%v_%v" , overall . CONSTANT_CONFIG . RedisPrefixStr . Alias , system , postid )
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS5 )
empowerRedisToken , isTrue := redisClient . HashGetAll ( redisFileEmpowerKey )
// fmt.Printf("empowerRedisToken------------->%v---------->isTrue------------->%v---------->redisFileEmpowerKey------------->%v\n", empowerRedisToken, isTrue, redisFileEmpowerKey)
if isTrue == false {
fmt . Printf ( "GetPostPower-1-->%v\n" , empowerRedisToken [ "menuid" ] )
menuIdAry , menuUrl , err = readMenuList ( postid , system )
writeRedisData := MapOut [ string ] ( )
writeRedisData [ "menuid" ] = strings . Join ( menuIdAry , "," )
writeRedisData [ "menuurl" ] = strings . Join ( menuUrl , "|_^_|" )
redisClient . SetRedisTime ( 10800 )
redisClient . HashMsetAdd ( redisFileEmpowerKey , writeRedisData )
} else {
// fmt.Printf("GetPostPower-2-->%v\n", empowerRedisToken["menuid"])
menuIdAry = strings . Split ( empowerRedisToken [ "menuid" ] , "," )
menuUrl = strings . Split ( empowerRedisToken [ "menuurl" ] , "|_^_|" )
// fmt.Printf("GetPostPower-3-->%v-->%v\n", len(menuIdAry), menuIdAry)
if len ( menuIdAry ) <= 1 {
menuIdAry , menuUrl , err = readMenuList ( postid , system )
writeRedisData := MapOut [ string ] ( )
writeRedisData [ "menuid" ] = strings . Join ( menuIdAry , "," )
writeRedisData [ "menuurl" ] = strings . Join ( menuUrl , "|_^_|" )
redisClient . SetRedisTime ( 10800 )
redisClient . HashMsetAdd ( redisFileEmpowerKey , writeRedisData )
}
}
return
}
/ *
读取菜单
* /
func readMenuList ( postid int64 , system string ) ( menuIdAry , menuUrl [ ] string , err error ) {
var ponitId string
err = overall . CONSTANT_DB_System_Permission . Model ( & modelssystempermission . Empower { } ) . Select ( "`point_id`" ) . Where ( "`state` = 1 AND `post_id` = ? AND `system` = ?" , postid , system ) . Find ( & ponitId ) . Error
if err != nil {
return
}
menuIdAry = strings . Split ( ponitId , "," )
if len ( menuIdAry ) < 1 {
return
}
switch system {
case "cangchu" :
menuUrl , err = getStorageSystemEmpower ( menuIdAry )
default :
//绩效考核系统
menuUrl , err = getKpiSystemEmpower ( menuIdAry )
}
return
}
/ *
获取绩效考核系统授权菜单
@ menuIdAry 菜单ID
* /
func getKpiSystemEmpower ( menuIdAry [ ] string ) ( menuUrl [ ] string , err error ) {
if len ( menuIdAry ) < 1 {
return
}
var empowerMenuUrl [ ] string
err = overall . CONSTANT_DB_Master . Model ( & modelsschool . SystemMenuSchool { } ) . Distinct ( "`m_url`" ) . Where ( "`m_steat` = 1 AND `m_id` IN ?" , menuIdAry ) . Find ( & empowerMenuUrl ) . Error
if err != nil || len ( empowerMenuUrl ) < 1 {
return
}
for i := 0 ; i < len ( empowerMenuUrl ) ; i ++ {
if empowerMenuUrl [ i ] != "#" && IsInTrue [ string ] ( empowerMenuUrl [ i ] , menuUrl ) == false {
menuUrl = append ( menuUrl , empowerMenuUrl [ i ] )
}
}
return
}
/ *
获取仓储考核系统授权菜单
@ menuIdAry 菜单ID
* /
func getStorageSystemEmpower ( menuIdAry [ ] string ) ( menuUrl [ ] string , err error ) {
if len ( menuIdAry ) < 1 {
return
}
var empowerMenuUrl [ ] string
err = overall . CONSTANT_DB_Storage . Model ( & modelsstorage . AccesstoAddress { } ) . Distinct ( "`url`" ) . Where ( "`state` = 1 AND `id` IN ?" , menuIdAry ) . Find ( & empowerMenuUrl ) . Error
if err != nil || len ( empowerMenuUrl ) < 1 {
return
}
// fmt.Printf("empowerMenuUrl---------->%v\n", empowerMenuUrl)
for i := 0 ; i < len ( empowerMenuUrl ) ; i ++ {
if empowerMenuUrl [ i ] != "#" && empowerMenuUrl [ i ] != "" && IsInTrue [ string ] ( empowerMenuUrl [ i ] , menuUrl ) == false {
menuUrl = append ( menuUrl , empowerMenuUrl [ i ] )
}
}
return
}
// 获取公司最小主责部门
func GetMinMainDutyDeparment ( company string ) ( organization [ ] modelshr . AdministrativeOrganization ) {
if company == "" {
return
}
var allOrg [ ] modelshr . AdministrativeOrganization
err := overall . CONSTANT_DB_HR . Model ( & modelshr . AdministrativeOrganization { } ) . Where ( "ispower = 1 AND state = 1 AND organization_type > 2 AND superior = ?" , company ) . Find ( & allOrg ) . Error
if err != nil || len ( allOrg ) < 1 {
return
}
for _ , v := range allOrg {
sunOrgList , orgSunErr := GetSunOrgList ( v . Id )
if orgSunErr == nil && len ( sunOrgList ) > 0 {
for _ , sv := range sunOrgList {
organization = append ( organization , sv )
}
} else {
organization = append ( organization , v )
}
}
return
}
// 获取下级行政组织是否有主行政部门
func GetSunOrgList ( orgId int64 ) ( orgList [ ] modelshr . AdministrativeOrganization , ovErr error ) {
if orgId == 0 {
return
}
ovErr = overall . CONSTANT_DB_HR . Where ( "state = 1" ) . Where ( "ispower = 1 AND superior = ?" , orgId ) . Find ( & orgList ) . Error
return
}
// 递归无限极菜单树
func GetMenuThree ( jurisd int , parentId string , threeData [ ] MenuContList ) [ ] PowerThree {
treeList := [ ] PowerThree { }
for _ , v := range threeData {
if v . ParentId == parentId {
child := GetMenuThree ( jurisd , v . Id , threeData )
var node PowerThree
node . Id = v . Id
node . Name = v . Name
node . ParentId = v . ParentId
node . IsTrue = v . IsTrue
isTrue , menuOper := MenuOperation ( jurisd , v . Id )
if isTrue == true {
node . MenuOperation = menuOper
// fmt.Printf("GetMenuThree-1111--%v--->%v\n", v.Id, menuOper)
}
node . Child = child
treeList = append ( treeList , node )
}
}
return treeList
}
// 获取菜单操作项目
func MenuOperation ( jurisd int , menuId string ) ( isTrue bool , operation [ ] MenuContList ) {
var operList [ ] modelsschool . MenuOperation
isTrue = false
operErr := overall . CONSTANT_DB_Master . Where ( "`menu_id` = ?" , menuId ) . Order ( "oper_id desc" ) . Find ( & operList ) . Error
if operErr != nil || len ( operList ) < 1 {
return
}
isTrue = true
for i := 0 ; i < len ( operList ) ; i ++ {
var menSmaiCont MenuContList
menSmaiCont . Id = strconv . FormatInt ( operList [ i ] . OperId , 10 )
menSmaiCont . Name = operList [ i ] . OperTitle
menSmaiCont . ParentId = strconv . FormatInt ( operList [ i ] . MenuId , 10 )
operation = append ( operation , menSmaiCont )
}
// fmt.Printf("ApiUrl---%v--->%v--->%v--->%v\n", menuId, isTrue, operErr, operList)
return
}
/ *
递归无限极菜单树
* /
func GetMenuThrees ( jurisd int , parentId string , threeData [ ] MenuContList ) [ ] PowerThree {
treeList := [ ] PowerThree { }
for _ , v := range threeData {
if v . ParentId == parentId {
child := GetMenuThrees ( jurisd , v . Id , threeData )
var node PowerThree
node . Id = v . Id
node . Name = v . Name
node . ParentId = v . ParentId
node . Child = child
node . IsTrue = v . IsTrue
// fmt.Printf("GetMenuThree-22222--%v--->%v\n", v.Id, node)
treeList = append ( treeList , node )
}
}
return treeList
}
// 获取责任人
func GetDepartmentLeader ( userCont modelshr . PersonArchives ) {
var orgContList [ ] DepartmentIsPower
orgContList = GetAllFatherDeparment ( userCont . AdminOrg , 1 , orgContList )
//根据序号排序
sort . Slice ( orgContList , func ( i , j int ) bool {
return orgContList [ i ] . Sort < orgContList [ j ] . Sort
} )
jsonStr , _ := json . Marshal ( orgContList )
fmt . Printf ( "orgList---------------->%v\n" , string ( jsonStr ) )
}
// 获取行政组织的所有上级实权部门
func GetAllFatherDeparment ( orgId int64 , sort int , oldCont [ ] DepartmentIsPower ) ( orgContList [ ] DepartmentIsPower ) {
if orgId == 0 {
return
}
var orgCont modelshr . AdministrativeOrganization
err := orgCont . GetCont ( map [ string ] interface { } { "id" : orgId } , "id" , "name" , "organization_type" , "superior" , "ispower" )
if err != nil {
return
}
if orgCont . OrganizationType <= 2 {
orgContList = oldCont
// jsonStr, _ := json.Marshal(oldCont)
// fmt.Printf("oldCont---------------->%v\n", string(jsonStr))
return
} else {
// jsonStr, _ := json.Marshal(oldCont)
// fmt.Printf("oldCont---------------->%v\n", string(jsonStr))
if orgCont . IsPower == 1 {
var orgListCont DepartmentIsPower
orgListCont . Id = strconv . FormatInt ( orgCont . Id , 10 )
orgListCont . Name = orgCont . Name
orgListCont . Superior = orgCont . Superior
orgListCont . OrganizationType = orgCont . OrganizationType
orgListCont . IsPower = orgCont . IsPower
orgListCont . Sort = sort
orgListCont . PowerPeople = GetDutyOrgAbourLeader ( orgCont . Id )
oldCont = append ( oldCont , orgListCont )
orgContList = oldCont
sort = sort + 1
}
return GetAllFatherDeparment ( orgCont . Superior , sort , oldCont )
}
return orgContList
}
/ *
获取主权行政组织责任岗位及相关人员
@ ordId 行政组织ID
* /
func GetDutyOrgAbourLeader ( ordId int64 ) ( postAboutPeople [ ] DepartSoverePostMan ) {
//获取负责人岗位
var leaderPostList [ ] modelshr . Position
err := overall . CONSTANT_DB_HR . Model ( & modelshr . Position { } ) . Select ( "`id`,`name`" ) . Where ( "`state` = 1 AND `person_in_charge` = 1 AND `administrative_organization` = ?" , ordId ) . Find ( & leaderPostList ) . Error
if err != nil || len ( leaderPostList ) < 1 {
return
}
var isIn [ ] int64
for _ , v := range leaderPostList {
if IsInTrue [ int64 ] ( v . Id , isIn ) == false { //岗位
var postAboutManCont DepartSoverePostMan
postAboutManCont . Id = strconv . FormatInt ( v . Id , 10 )
postAboutManCont . Name = v . Name
postAboutManCont . People = GetManInPostList ( ordId , v . Id )
postAboutPeople = append ( postAboutPeople , postAboutManCont )
}
}
return postAboutPeople
}
/ *
获取岗位中的人及其职务
@ ordId 行政组织ID
@ postId 岗位ID
* /
func GetManInPostList ( ordId , postId int64 ) ( peopleList [ ] PeopleSoverePostMan ) {
//获取相关行政组织岗位的人员列表
var usList [ ] modelshr . PersonArchives
err := overall . CONSTANT_DB_HR . Model ( & modelshr . PersonArchives { } ) . Select ( "`id`,`number`,`name`,`job_id`" ) . Where ( "`state` = 1 AND `admin_org` = ? AND `position` = ? AND `emp_type` IN ?" , ordId , postId , overall . EmployeeStatusIng ) . Find ( & usList ) . Error
if err != nil || len ( usList ) < 1 {
return
}
for _ , v := range usList {
var peopleCont PeopleSoverePostMan
peopleCont . Id = strconv . FormatInt ( v . Id , 10 )
peopleCont . Number = v . Number
peopleCont . Name = v . Name
var duitesCont modelshr . Duties
duitesCont . GetCont ( map [ string ] interface { } { "`id`" : v . JobId } , "`id`" , "`name`" )
peopleCont . PostId = strconv . FormatInt ( duitesCont . Id , 10 )
peopleCont . PostName = duitesCont . Name
peopleList = append ( peopleList , peopleCont )
}
return
}
/ *
获取上级审批
@ userKey 用户KEy
@ ordId 行政组织ID
@ postId 岗位ID
@ sort 排序
@ contList 审批人列表
* /
func GetPositionList ( userKey , ordId , postId int64 , sort int , contList [ ] PositionDigui ) ( listCont [ ] PositionDigui ) {
var positionCont modelshr . PostDutiesJob
err := positionCont . GetCont ( map [ string ] interface { } { "`id`" : postId } )
if err != nil {
return
}
jsonStr , _ := json . Marshal ( positionCont )
fmt . Printf ( "positionCont---------------->%v\n" , string ( jsonStr ) )
if positionCont . JobType < 2 {
listCont = contList
return
} else {
if positionCont . PersonInCharge == 1 {
peopelAry := GetPeopleInPostList ( userKey , positionCont . AdministrativeOrganization , positionCont . Id )
if len ( peopelAry ) > 0 {
var cont PositionDigui
cont . Id = strconv . FormatInt ( positionCont . Id , 10 )
cont . Name = positionCont . Name
cont . OrgId = strconv . FormatInt ( positionCont . AdministrativeOrganization , 10 )
cont . Superior = strconv . FormatInt ( positionCont . Superior , 10 )
cont . Sort = sort
cont . People = peopelAry
contList = append ( contList , cont )
}
listCont = contList
return GetPositionList ( userKey , positionCont . AdministrativeOrganization , positionCont . Superior , sort + 1 , contList )
} else {
return GetPositionList ( userKey , positionCont . AdministrativeOrganization , positionCont . Superior , sort + 1 , contList )
}
}
return
}
/ *
获取岗位下人员列表
@ userKey 用户KEy
@ ordId 行政组织ID
@ postId 岗位ID
* /
func GetPeopleInPostList ( userKey , ordId , postId int64 ) ( peopleList [ ] PostPeople ) {
isTrue := false
//获取相关行政组织岗位的人员列表
var usList [ ] modelshr . PersonArchives
err := overall . CONSTANT_DB_HR . Model ( & modelshr . PersonArchives { } ) . Select ( "`id`,`key`,`number`,`name`,`job_id`,`wechat`,`work_wechat`,`company`,`maindeparment`,`admin_org`,`job_id`" ) . Where ( "`state` = 1 AND `admin_org` = ? AND `position` = ? AND `emp_type` IN ?" , ordId , postId , overall . EmployeeStatusIng ) . Find ( & usList ) . Error
if err != nil || len ( usList ) < 1 {
return
}
for _ , v := range usList {
if v . Key == userKey {
isTrue = true
}
wechatStr := v . Wechat
if v . WorkWechat != "" {
wechatStr = v . WorkWechat
}
if wechatStr != "" {
var peopleCont PostPeople
peopleCont . Id = strconv . FormatInt ( v . Id , 10 )
peopleCont . Number = v . Number
peopleCont . Name = v . Name
peopleCont . Company = strconv . FormatInt ( v . Company , 10 )
if v . Company != 0 {
var companyCont modelshr . AdministrativeOrganization
companyCont . GetCont ( map [ string ] interface { } { "`id`" : v . Company } , "`name`" )
peopleCont . CompanyName = companyCont . Name
}
if v . MainDeparment != 0 {
departmentId := GetGroupOrDepartPower ( v . AdminOrg , 1 )
peopleCont . Department = strconv . FormatInt ( departmentId , 10 )
var departCont modelshr . AdministrativeOrganization
departCont . GetCont ( map [ string ] interface { } { "`id`" : departmentId } , "`name`" )
peopleCont . DepartmentName = departCont . Name
}
peopleCont . OrgId = strconv . FormatInt ( v . AdminOrg , 10 )
if v . AdminOrg != 0 {
var orgCont modelshr . AdministrativeOrganization
orgCont . GetCont ( map [ string ] interface { } { "`id`" : v . AdminOrg } , "`name`" )
peopleCont . OrgName = orgCont . Name
}
var duitesCont modelshr . Duties
duitesCont . GetCont ( map [ string ] interface { } { "`id`" : v . JobId } , "`id`" , "`name`" )
peopleCont . DutiesId = strconv . FormatInt ( duitesCont . Id , 10 )
peopleCont . DutiesName = duitesCont . Name
peopleCont . Wechat = wechatStr
peopleList = append ( peopleList , peopleCont )
}
}
fmt . Printf ( "%v\n" , isTrue )
// if isTrue == true {
// var emptyAry []PostPeople
// peopleList = emptyAry
// }
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 19 15 : 01 : 33
@ 功能 : 获取岗位权限信息
@ 参数
# orgId 行政组织
# postId 岗位
# systemName 系统
@ 返回值
#
@ 方法原型
#
* /
func GetPostOfUsEmpowerCont ( orgId , postId int64 , systemName string ) ( sysPowerCont SystemPowerInfo , err error ) {
redisFileKey := fmt . Sprintf ( "Licence:LoginApi_%v_%v_%v" , systemName , orgId , postId )
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS3 )
userRedisToken , isTrue := redisClient . HashGetAll ( redisFileKey )
if isTrue == false {
var systemPowerCont modelssystempermission . Empower
err = systemPowerCont . GetCont ( map [ string ] interface { } { "`ordid`" : orgId , "`post_id`" : postId , "`system`" : systemName } )
if err != nil {
return
}
sysPowerCont . Id = systemPowerCont . Id
sysPowerCont . OrdId = systemPowerCont . OrdId //行政组织"`
sysPowerCont . PostId = systemPowerCont . PostId //岗位ID"`
sysPowerCont . System = systemPowerCont . System //系统"`
sysPowerCont . PointId = systemPowerCont . PointId //权限点位"`
sysPowerCont . State = systemPowerCont . State //状态(1:启用;2:禁用;3:删除)"`
sysPowerCont . Time = systemPowerCont . Time //创建时间"`
sysPowerCont . Level = systemPowerCont . Level //授权范围等级(1:本部门;2:本分部;3:所有)"`
sysPowerCont . Organization = systemPowerCont . Organization //行政组织"`
sysPowerCont . PointIdList = strings . Split ( systemPowerCont . PointId , "," )
sysPowerCont . OrganizationList = strings . Split ( systemPowerCont . Organization , "," )
myContRedis := MapOut [ string ] ( )
myContRedis [ "id" ] = systemPowerCont . Id
myContRedis [ "ordid" ] = systemPowerCont . OrdId
myContRedis [ "postid" ] = systemPowerCont . PostId
myContRedis [ "system" ] = systemPowerCont . System
myContRedis [ "pointid" ] = systemPowerCont . PointId
myContRedis [ "state" ] = systemPowerCont . State
myContRedis [ "time" ] = systemPowerCont . Time
myContRedis [ "level" ] = systemPowerCont . Level
myContRedis [ "organization" ] = systemPowerCont . Organization
redisClient . SetRedisTime ( 10800 )
redisClient . HashMsetAdd ( redisFileKey , myContRedis )
} else {
idInt , _ := strconv . ParseInt ( userRedisToken [ "id" ] , 10 , 64 )
sysPowerCont . Id = idInt
orgIdInt , _ := strconv . ParseInt ( userRedisToken [ "ordid" ] , 10 , 64 )
sysPowerCont . OrdId = orgIdInt //行政组织"`
postIdInt , _ := strconv . ParseInt ( userRedisToken [ "postid" ] , 10 , 64 )
sysPowerCont . PostId = postIdInt //岗位ID"`
sysPowerCont . System = userRedisToken [ "system" ] //系统"`
sysPowerCont . PointId = userRedisToken [ "pointid" ] //权限点位"`
stateInt , _ := strconv . Atoi ( userRedisToken [ "state" ] )
sysPowerCont . State = stateInt //状态(1:启用;2:禁用;3:删除)"`
timeInt , _ := strconv . ParseInt ( userRedisToken [ "time" ] , 10 , 64 )
sysPowerCont . Time = timeInt //创建时间"`
levelInt , _ := strconv . Atoi ( userRedisToken [ "level" ] )
sysPowerCont . Level = levelInt //授权范围等级(1:本部门;2:本分部;3:所有)"`
sysPowerCont . Organization = userRedisToken [ "organization" ] //行政组织"`
sysPowerCont . PointIdList = strings . Split ( userRedisToken [ "pointid" ] , "," )
sysPowerCont . OrganizationList = strings . Split ( userRedisToken [ "organization" ] , "," )
writeRedisData := MapOut [ string ] ( )
for i , v := range userRedisToken {
writeRedisData [ i ] = v
}
redisClient . SetRedisTime ( 10800 )
redisClient . HashMsetAdd ( redisFileKey , writeRedisData )
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 19 15 : 03 : 42
@ 功能 : 获取系统授权
@ 参数
# roleId 角色ID
# systemName 系统名称
# userKey 人员识别码
# orgId 行政组织
# postId 岗位
@ 返回值
# roleName 角色名称
# pointId 菜单权限
# operation 操作权限
# level 操作等级
@ 方法原型
# func GetNewAccredit ( systemName , roleId string , userKey , orgId , postId int64 ) ( roleName , pointId , operation string , level int )
* /
func GetNewAccredit ( systemName , roleId string , userKey , orgId , postId int64 ) ( roleName , pointId , operation string , level int ) {
// fmt.Printf("jsonStr---1--->%v---->%v---->%v---->%v---->%v\n", systemName, roleId, userKey, orgId, postId)
redisFileKey := fmt . Sprintf ( "Licence:PowerLoginApi_%v_%v_%v_%v" , systemName , userKey , orgId , postId )
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS3 )
userRedisToken , isTrue := redisClient . HashGetAll ( redisFileKey )
// fmt.Printf("jsonStr---2--->%v---->%v---->%v---->%v---->%v---->%v\n", systemName, roleId, userKey, orgId, postId, userRedisToken)
if isTrue == false {
var pointIdAry [ ] string
var operationAry [ ] string
if roleId != "" {
roleIdAry := strings . Split ( roleId , "," )
var roleCont [ ] modelssystempermission . SystemRole
if len ( roleIdAry ) > 0 {
//获取角色名称
err := overall . CONSTANT_DB_System_Permission . Model ( & modelssystempermission . SystemRole { } ) . Select ( "`name`" ) . Where ( "`id` IN ?" , roleIdAry ) . Find ( & roleCont ) . Error
if err == nil && len ( roleCont ) > 0 {
var roleNameAry [ ] string
for _ , rnv := range roleCont {
if IsInTrue [ string ] ( rnv . Name , roleNameAry ) == false {
roleNameAry = append ( roleNameAry , rnv . Name )
}
}
roleName = strings . Join ( roleNameAry , "|" )
}
//获取配置的所有角色权限
var roleEmpowerCont [ ] modelssystempermission . RoleEmpower
err = overall . CONSTANT_DB_System_Permission . Model ( & modelssystempermission . RoleEmpower { } ) . Select ( "`point_id`,`operation`,`level`" ) . Where ( "`system` = ? AND `role_id` IN ?" , systemName , roleIdAry ) . Find ( & roleEmpowerCont ) . Error
if err == nil && len ( roleEmpowerCont ) > 0 {
for _ , rev := range roleEmpowerCont {
menuList := strings . Split ( rev . PointId , "," )
for _ , mv := range menuList { //菜单权限
if mv != "" && IsInTrue [ string ] ( mv , pointIdAry ) == false {
pointIdAry = append ( pointIdAry , mv )
}
}
operList := strings . Split ( rev . Operation , "," )
for _ , ov := range operList { //操作权限
if ov != "" && IsInTrue [ string ] ( ov , operationAry ) == false {
operationAry = append ( operationAry , ov )
}
}
if level < rev . Level {
level = rev . Level //等级
}
}
}
}
}
//获取行政组织授权
if orgId > 0 && postId > 0 {
var orgEmpowerCont modelssystempermission . Empower
orgEmpowerCont . GetCont ( map [ string ] interface { } { "`ordid`" : orgId , "`post_id`" : postId , "`system`" : systemName } , "`point_id`" , "`operation`" , "`level`" )
if len ( pointIdAry ) < 1 { //判断是否已经配过权限
pointIdAry = strings . Split ( orgEmpowerCont . PointId , "," )
} else {
guoduPoin := strings . Split ( orgEmpowerCont . PointId , "," )
for _ , pv := range guoduPoin { //合并权限
if pv != "" && IsInTrue [ string ] ( pv , pointIdAry ) == false {
pointIdAry = append ( pointIdAry , pv )
}
}
}
if len ( operationAry ) < 1 { //判断是否已经配过权限
operationAry = strings . Split ( orgEmpowerCont . Operation , "," )
} else {
guoduOper := strings . Split ( orgEmpowerCont . Operation , "," )
for _ , gpv := range guoduOper { //合并权限
if gpv != "" && IsInTrue [ string ] ( gpv , operationAry ) == false {
operationAry = append ( operationAry , gpv )
}
}
}
if level < orgEmpowerCont . Level {
level = orgEmpowerCont . Level
}
}
pointId = strings . Join ( pointIdAry , "," )
operation = strings . Join ( operationAry , "," )
var powerCont EmpowerCont
powerCont . RoleName = roleName
powerCont . PointId = pointId
powerCont . Operation = operation
powerCont . Level = level
//组转写入redis
myContRedis := MapOut [ string ] ( )
myContRedis [ "roleName" ] = roleName
myContRedis [ "pointid" ] = pointId
myContRedis [ "operation" ] = operation
myContRedis [ "level" ] = level
redisClient . SetRedisTime ( 10800 )
redisClient . HashMsetAdd ( redisFileKey , myContRedis )
} else {
roleName = userRedisToken [ "roleName" ]
pointId = userRedisToken [ "pointid" ]
operation = userRedisToken [ "operation" ]
level , _ = strconv . Atoi ( userRedisToken [ "level" ] )
//组转写入redis
writeRedisData := MapOut [ string ] ( )
for i , v := range userRedisToken {
writeRedisData [ i ] = v
}
redisClient . SetRedisTime ( 10800 )
redisClient . HashMsetAdd ( redisFileKey , writeRedisData )
}
return
}
// 步骤名称
func GetSetpName ( setId int ) ( setpName string ) {
switch setId {
case 1 :
setpName = "创建申请"
case 2 :
setpName = "审核"
case 3 :
setpName = "责任划分"
case 4 :
setpName = "整改措施"
case 5 :
setpName = "整改验收"
case 6 :
setpName = "抄送"
case 7 :
// setpName = "部门负责人"
setpName = "审核确认"
default :
setpName = "创建申请"
}
return
}
// 步骤名称/节点类型 0:发起人;1:审批;2:抄送;3:执行节点;4:路由;5:条件;
func GetSetpNodeName ( setId int ) ( setpName string ) {
switch setId {
case 1 :
setpName = "审核"
case 2 :
setpName = "抄送"
case 3 :
setpName = "执行"
case 4 :
setpName = "路由"
case 5 :
setpName = "条件条件"
default :
setpName = "发起申请"
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 10 - 01 10 : 44 : 41
@ 功能 : 获取企业微信审批组相关负责人
@ 参数
# wechatTeamId 审批数据库节点ID
# departmentId 部门ID
@ 返回值
# userStrList 微信Openid
# err cuo
* /
func GetRefereeTeamWorkWechat ( wechatTeamId , departmentId int64 ) ( userStrList [ ] string , err error ) {
var orgCont modelshr . AdministrativeOrganization
if departmentId != 0 {
err = orgCont . GetCont ( map [ string ] interface { } { "`id`" : departmentId } , "`wechat_organization_id`" )
// fmt.Printf("orgCont------------>%v\n", err)
if err != nil {
return
}
}
//获取角色组数据
var roleCont modelsschool . RoleGroup
if wechatTeamId != 0 {
err = roleCont . GetCont ( map [ string ] interface { } { "`srg_id`" : wechatTeamId } , "`srg_extatry`" , "`srg_type`" )
// fmt.Printf("orgCont:%v------------>roleCont:%v\n", err, roleCont)
if err != nil {
return
}
}
var roleUser [ ] roleGroupBodyAry
if roleCont . Type == 1 {
//矩阵
roleList := MapOut [ string ] ( )
err = json . Unmarshal ( [ ] byte ( roleCont . Contentes ) , & roleList )
if err != nil {
return
}
departmentIdStr := strconv . FormatInt ( orgCont . WechatOrganizationId , 10 )
// fmt.Printf("roleList------矩阵------>%v------>%v\n", roleList, departmentIdStr)
for i , v := range roleList {
if i == departmentIdStr {
jsonMAp , _ := json . Marshal ( v )
json . Unmarshal ( jsonMAp , & roleUser )
}
}
} else {
//个人
err = json . Unmarshal ( [ ] byte ( roleCont . Contentes ) , & roleUser )
}
if len ( roleUser ) < 1 {
err = fmt . Errorf ( "没有数据!" )
}
// fmt.Printf("roleUser------------>%v\n", roleUser)
for _ , v := range roleUser {
if IsInTrue [ string ] ( v . Id , userStrList ) == false {
userStrList = append ( userStrList , v . Id )
}
}
return
}
// 获取指定月的起止时间
func GetAppointMonthStarAndEndTime ( dayTime string ) ( startTime , endTime int64 ) {
dataTypeAll := "2006-01-02"
dayTime = fmt . Sprintf ( "%v-%v" , dayTime , "01" )
firstToTime := StringToTimeIng ( "d" , dayTime )
startTimeStr := fmt . Sprintf ( "%v 00:00:00" , firstToTime . AddDate ( 0 , 0 , 0 ) . Format ( dataTypeAll ) )
endTimeStr := fmt . Sprintf ( "%v 23:59:59" , firstToTime . AddDate ( 0 , 1 , - 1 ) . Format ( dataTypeAll ) )
// startTime = dayTime
startTime = DateToTimeStampOld ( startTimeStr )
endTime = DateToTimeStampOld ( endTimeStr )
return
}
// 获取指定日的起止时间副本
func GetAppointMonthStarAndEndTimeEs ( dayTime string ) ( startTime , endTime int64 ) {
dataTypeAll := "2006-01-02"
firstToTime := StringToTimeIng ( "d" , dayTime )
startTimeStr := fmt . Sprintf ( "%v 00:00:00" , firstToTime . AddDate ( 0 , 0 , 0 ) . Format ( dataTypeAll ) )
endTimeStr := fmt . Sprintf ( "%v 23:59:59" , firstToTime . AddDate ( 0 , 1 , - 1 ) . Format ( dataTypeAll ) )
// startTime = dayTime
startTime , _ = DateToTimeStamp ( startTimeStr )
endTime , _ = DateToTimeStamp ( endTimeStr )
return
}
// 日期字符串转换成time格式
func StringToTimeIng ( unit , str string ) ( res time . Time ) {
loc , _ := time . LoadLocation ( "Local" )
// str := t.ToString()
layout , ok := timeLayoutMap [ unit ]
if ! ok {
layout = timeLayoutMap [ "s" ]
}
res , _ = time . ParseInLocation ( layout , str , loc )
return
}
// 一天的起止时间(时间戳版本)
func TimeUnixDayStartAndEnd ( timeVal int64 ) ( start , end int64 ) {
timeStr := UnixTimeToDay ( timeVal , 14 )
startTimeStr := fmt . Sprintf ( "%v 00:00:00" , timeStr )
endTimeStr := fmt . Sprintf ( "%v 23:59:59" , timeStr )
start = DateToTimeStampOld ( startTimeStr )
end = DateToTimeStampOld ( endTimeStr )
return
}
// 计算日期差
func DayBetweenDate ( oneDay , twoDay string ) ( int , error ) {
const layout = "2006-01-02"
t1 , err := time . Parse ( layout , oneDay )
if err != nil {
return 0 , err
}
t2 , err := time . Parse ( layout , twoDay )
if err != nil {
return 0 , err
}
// 计算日期差
duration := t1 . Sub ( t2 )
// 转换为天数
days := int ( duration . Hours ( ) / 24 )
return days , nil
}
// 时间戳转换成time格式
func TimeUnixToTime ( timeData int64 , unit string ) ( res time . Time ) {
timeStr := UnixTimeToDay ( timeData , 11 )
loc , _ := time . LoadLocation ( "Local" )
layout , ok := timeLayoutMap [ unit ]
if ! ok {
layout = timeLayoutMap [ "s" ]
}
res , _ = time . ParseInLocation ( layout , timeStr , loc )
return
}
// 递归无限极菜单树
/ *
@ jurisd 起始位置
@ parentId 上级ID
@ threeData 结果值
@ oper 已付权限
* /
func GetMenuThreePeiQuan ( jurisd int , parentId string , threeData [ ] MenuContList , oper [ ] string ) [ ] PowerThree {
treeList := [ ] PowerThree { }
for _ , v := range threeData {
if v . ParentId == parentId {
child := GetMenuThreePeiQuan ( jurisd , v . Id , threeData , oper )
var node PowerThree
node . Id = v . Id
node . Name = v . Name
node . ParentId = v . ParentId
node . IsTrue = v . IsTrue
isTrue , menuOper := MenuOperationPeiQuan ( jurisd , v . Id , oper )
if isTrue == true {
node . MenuOperation = menuOper
// fmt.Printf("GetMenuThree-1111--%v--->%v\n", v.Id, menuOper)
}
node . Child = child
treeList = append ( treeList , node )
}
}
return treeList
}
// 配权
// 获取菜单操作项目
/ *
@ jurisd 起始位置
@ menuId 菜单ID
@ oper 已付权限
* /
func MenuOperationPeiQuan ( jurisd int , menuId string , oper [ ] string ) ( isTrue bool , operation [ ] MenuContList ) {
var operList [ ] modelsschool . MenuOperation
isTrue = false
operErr := overall . CONSTANT_DB_Master . Where ( "`menu_id` = ?" , menuId ) . Order ( "oper_id desc" ) . Find ( & operList ) . Error
if operErr != nil || len ( operList ) < 1 {
return
}
isTrue = true
for i := 0 ; i < len ( operList ) ; i ++ {
var menSmaiCont MenuContList
idStr := strconv . FormatInt ( operList [ i ] . OperId , 10 )
menSmaiCont . Id = idStr
menSmaiCont . Name = operList [ i ] . OperTitle
menSmaiCont . ParentId = strconv . FormatInt ( operList [ i ] . MenuId , 10 )
if IsInTrue [ string ] ( idStr , oper ) == true {
menSmaiCont . IsTrue = true
}
operation = append ( operation , menSmaiCont )
}
// fmt.Printf("ApiUrl---%v--->%v--->%v--->%v\n", menuId, isTrue, operErr, operList)
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 01 - 03 16 : 41 : 19
@ 功能 : 合并数组
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func MergeStruct [ T GenericityVariable ] ( aryOen , aryTwo [ ] T ) ( structAry [ ] T ) {
if len ( aryOen ) >= len ( aryTwo ) {
structAry = aryOen
for i := 0 ; i < len ( aryTwo ) ; i ++ {
if IsInTrue [ T ] ( aryTwo [ i ] , structAry ) == false {
structAry = append ( structAry , aryTwo [ i ] )
}
}
} else {
structAry = aryTwo
for i := 0 ; i < len ( aryOen ) ; i ++ {
if IsInTrue [ T ] ( aryOen [ i ] , structAry ) == false {
structAry = append ( structAry , aryOen [ i ] )
}
}
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 07 - 16 16 : 02 : 25
@ 功能 : 一天的开始与结束时间
@ day 日期
@ class 1 : 返回时间戳 , 2 : 返回日期
* /
func OenDayStartOrEndTime ( day string , class int ) ( startTime , endTime interface { } ) {
var creTimeAll DateTimeTotimes
creTimeAll . BaisStrToTime ( day )
timeVal := UnixTimeToDay ( creTimeAll . AllTime , 14 )
if class == 1 {
startTime = DateToTimeStampOld ( fmt . Sprintf ( "%v 00:00:00" , timeVal ) )
endTime = DateToTimeStampOld ( fmt . Sprintf ( "%v 23:59:59" , timeVal ) )
} else {
startTime = fmt . Sprintf ( "%v 00:00:00" , timeVal )
endTime = fmt . Sprintf ( "%v 23:59:59" , timeVal )
}
return
}
// 根据字符串组合时间
//补全时间
/ *
# dateTime 日期
* /
func ( d * DateTimeTotimes ) BaisStrToTime ( dateTime string ) {
timeStrAry := strings . Split ( dateTime , "-" )
switch len ( timeStrAry ) {
case 1 :
dateTime = fmt . Sprintf ( "%v-01-01 12:00:00" , dateTime )
case 2 :
if len ( timeStrAry [ 1 ] ) < 2 {
dateTime = fmt . Sprintf ( "%v-0%v-01 12:00:00" , timeStrAry [ 0 ] , timeStrAry [ 1 ] )
} else {
dateTime = fmt . Sprintf ( "%v-%v-01 12:00:00" , timeStrAry [ 0 ] , timeStrAry [ 1 ] )
}
case 3 :
monthStr := timeStrAry [ 1 ]
if len ( timeStrAry [ 1 ] ) < 2 {
monthStr = fmt . Sprintf ( "0%v" , timeStrAry [ 1 ] )
}
dayAry := strings . Split ( timeStrAry [ 2 ] , " " )
// fmt.Printf("dayAry:%v------>%v\n", dayAry, len(dayAry))
dayStr := dayAry [ 0 ]
if len ( dayAry [ 0 ] ) < 2 {
dayStr = fmt . Sprintf ( "0%v" , dayAry [ 0 ] )
}
if len ( dayAry ) > 1 {
// fmt.Printf("dayAry[1]:%v------>%v\n", dayAry[1], len(dayAry[1]))
if len ( dayAry [ 1 ] ) > 0 {
Hours := "00"
minutes := "00"
seconds := "00"
hisAry := strings . Split ( dayAry [ 1 ] , ":" )
switch len ( hisAry ) {
case 1 :
if len ( hisAry [ 0 ] ) < 2 {
Hours = fmt . Sprintf ( "0%v" , hisAry [ 0 ] )
} else {
Hours = hisAry [ 0 ]
}
case 2 :
if len ( hisAry [ 0 ] ) < 2 {
Hours = fmt . Sprintf ( "0%v" , hisAry [ 0 ] )
} else {
Hours = hisAry [ 0 ]
}
if len ( hisAry [ 1 ] ) < 2 {
minutes = fmt . Sprintf ( "0%v" , hisAry [ 1 ] )
} else {
minutes = hisAry [ 1 ]
}
case 3 :
if len ( hisAry [ 0 ] ) < 2 {
Hours = fmt . Sprintf ( "0%v" , hisAry [ 0 ] )
} else {
Hours = hisAry [ 0 ]
}
if len ( hisAry [ 1 ] ) < 2 {
minutes = fmt . Sprintf ( "0%v" , hisAry [ 1 ] )
} else {
minutes = hisAry [ 1 ]
}
if len ( hisAry [ 2 ] ) < 2 {
seconds = fmt . Sprintf ( "0%v" , hisAry [ 2 ] )
} else {
seconds = hisAry [ 2 ]
}
default :
}
dayStr = fmt . Sprintf ( "%v %v:%v:%v" , dayStr , Hours , minutes , seconds )
}
}
// dayStr := timeStrAry[2]
// if len(timeStrAry[2]) < 2 {
// dayStr = fmt.Sprintf("0%v", timeStrAry[2])
// }
dateTime = fmt . Sprintf ( "%v-%v-%v" , timeStrAry [ 0 ] , monthStr , dayStr )
default :
}
// fmt.Printf("dateTime:%v---1--->%v\n", dateTime, len(dateTime))
orgTime , orgTimeErr := DateToTimeStamp ( fmt . Sprintf ( "%v-01-01 12:00:00" , dateTime ) )
if orgTimeErr {
d . AllTime = orgTime
d . AllTimeString = dateTime
d . Years = strconv . FormatInt ( ComputingTime ( orgTime , 1 ) , 10 )
d . Quarter = strconv . FormatInt ( ComputingTime ( orgTime , 2 ) , 10 )
d . Months = strconv . FormatInt ( ComputingTime ( orgTime , 3 ) , 10 )
d . Week = strconv . FormatInt ( ComputingTime ( orgTime , 4 ) , 10 )
d . Days = strconv . FormatInt ( ComputingTime ( orgTime , 5 ) , 10 )
d . Hours = strconv . FormatInt ( ComputingTime ( orgTime , 7 ) , 10 )
d . Minutes = strconv . FormatInt ( ComputingTime ( orgTime , 8 ) , 10 )
d . Second = strconv . FormatInt ( ComputingTime ( orgTime , 9 ) , 10 )
} else {
orgTime , orgTimeErr = DateToTimeStamp ( fmt . Sprintf ( "%v-01 12:00:00" , dateTime ) )
if orgTimeErr {
d . AllTime = orgTime
d . Years = strconv . FormatInt ( ComputingTime ( orgTime , 1 ) , 10 )
d . Quarter = strconv . FormatInt ( ComputingTime ( orgTime , 2 ) , 10 )
d . Months = strconv . FormatInt ( ComputingTime ( orgTime , 3 ) , 10 )
d . Week = strconv . FormatInt ( ComputingTime ( orgTime , 4 ) , 10 )
d . Days = strconv . FormatInt ( ComputingTime ( orgTime , 5 ) , 10 )
d . Hours = strconv . FormatInt ( ComputingTime ( orgTime , 7 ) , 10 )
d . Minutes = strconv . FormatInt ( ComputingTime ( orgTime , 8 ) , 10 )
d . Second = strconv . FormatInt ( ComputingTime ( orgTime , 9 ) , 10 )
fmt . Printf ( "dateTime:%v---2--->%v--->%v\n" , orgTime , d . AllTime , d . Quarter )
} else {
orgTime , orgTimeErr = DateToTimeStamp ( fmt . Sprintf ( "%v 12:00:00" , dateTime ) )
if orgTimeErr {
d . AllTime = orgTime
d . Years = strconv . FormatInt ( ComputingTime ( orgTime , 1 ) , 10 )
d . Quarter = strconv . FormatInt ( ComputingTime ( orgTime , 2 ) , 10 )
d . Months = strconv . FormatInt ( ComputingTime ( orgTime , 3 ) , 10 )
d . Week = strconv . FormatInt ( ComputingTime ( orgTime , 4 ) , 10 )
d . Days = strconv . FormatInt ( ComputingTime ( orgTime , 5 ) , 10 )
d . Hours = strconv . FormatInt ( ComputingTime ( orgTime , 7 ) , 10 )
d . Minutes = strconv . FormatInt ( ComputingTime ( orgTime , 8 ) , 10 )
d . Second = strconv . FormatInt ( ComputingTime ( orgTime , 9 ) , 10 )
} else {
orgTime , orgTimeErr = DateToTimeStamp ( fmt . Sprintf ( "%v:00:00" , dateTime ) )
if orgTimeErr {
d . AllTime = orgTime
d . Years = strconv . FormatInt ( ComputingTime ( orgTime , 1 ) , 10 )
d . Quarter = strconv . FormatInt ( ComputingTime ( orgTime , 2 ) , 10 )
d . Months = strconv . FormatInt ( ComputingTime ( orgTime , 3 ) , 10 )
d . Week = strconv . FormatInt ( ComputingTime ( orgTime , 4 ) , 10 )
d . Days = strconv . FormatInt ( ComputingTime ( orgTime , 5 ) , 10 )
d . Hours = strconv . FormatInt ( ComputingTime ( orgTime , 7 ) , 10 )
d . Minutes = strconv . FormatInt ( ComputingTime ( orgTime , 8 ) , 10 )
d . Second = strconv . FormatInt ( ComputingTime ( orgTime , 9 ) , 10 )
} else {
orgTime , orgTimeErr = DateToTimeStamp ( fmt . Sprintf ( "%v:00" , dateTime ) )
if orgTimeErr {
d . AllTime = orgTime
d . Years = strconv . FormatInt ( ComputingTime ( orgTime , 1 ) , 10 )
d . Quarter = strconv . FormatInt ( ComputingTime ( orgTime , 2 ) , 10 )
d . Months = strconv . FormatInt ( ComputingTime ( orgTime , 3 ) , 10 )
d . Week = strconv . FormatInt ( ComputingTime ( orgTime , 4 ) , 10 )
d . Days = strconv . FormatInt ( ComputingTime ( orgTime , 5 ) , 10 )
d . Hours = strconv . FormatInt ( ComputingTime ( orgTime , 7 ) , 10 )
d . Minutes = strconv . FormatInt ( ComputingTime ( orgTime , 8 ) , 10 )
d . Second = strconv . FormatInt ( ComputingTime ( orgTime , 9 ) , 10 )
} else {
orgTime , orgTimeErr = DateToTimeStamp ( dateTime )
if orgTimeErr {
d . AllTime = orgTime
d . Years = strconv . FormatInt ( ComputingTime ( orgTime , 1 ) , 10 )
d . Quarter = strconv . FormatInt ( ComputingTime ( orgTime , 2 ) , 10 )
d . Months = strconv . FormatInt ( ComputingTime ( orgTime , 3 ) , 10 )
d . Week = strconv . FormatInt ( ComputingTime ( orgTime , 4 ) , 10 )
d . Days = strconv . FormatInt ( ComputingTime ( orgTime , 5 ) , 10 )
d . Hours = strconv . FormatInt ( ComputingTime ( orgTime , 7 ) , 10 )
d . Minutes = strconv . FormatInt ( ComputingTime ( orgTime , 8 ) , 10 )
d . Second = strconv . FormatInt ( ComputingTime ( orgTime , 9 ) , 10 )
}
}
}
}
}
d . AllTimeString = UnixTimeToDay ( d . AllTime , 11 )
}
}
//统一图标计算最大值最小值方法
/ *
maxVal 最大值
minVal 最小值
* /
func JudjeMaxOfMinVal ( maxVal , minVal float64 ) ( maxVals , minVals float64 ) {
if maxVal > 0 {
if minVal > 0 {
if maxVal < 10 {
if maxVal < 1 {
maxVal = math . Ceil ( maxVal ) + 0.1
minVals = math . Ceil ( minVal ) - 0.1
} else {
maxVal = math . Ceil ( maxVal ) + 1
minVals = math . Ceil ( minVal ) - 1
}
} else {
jianGe := math . Ceil ( ( maxVal - minVal ) / 5 )
if jianGe <= 0 {
jianGe = 1
}
maxVals = math . Ceil ( maxVal ) + jianGe
minVals = math . Ceil ( minVal ) - jianGe
if minVals < 0 {
minVals = 0
}
}
} else {
jianGe := math . Ceil ( maxVal / 5 )
maxVals = math . Ceil ( maxVal ) + jianGe
}
} else {
if minVal > - 1 {
minVals = minVal - 0.1
} else {
maxGuoDu := maxVal * - 1
minGuoDu := minVal * - 1
jianGe := math . Ceil ( ( minGuoDu - maxGuoDu ) / 5 )
if jianGe > 0 {
minVals = minVal - jianGe
} else {
minVals = minVal - 1
}
}
}
// fmt.Printf("ge---1-->%v----->%v\n", maxVals, minVals)
return
}
// 获取行政组织所有上级
func ( g * GetOrgAllParent ) GetOrgParentAllId ( orgId int64 ) {
if orgId == 0 {
return
}
var orgCont modelshr . AdministrativeOrganization
err := orgCont . GetCont ( map [ string ] interface { } { "`id`" : orgId , "`state`" : 1 } , "`superior`" )
if err == nil {
if IsInTrue [ int64 ] ( orgId , g . Id ) == false {
g . Id = append ( g . Id , orgId )
}
g . GetOrgParentAllId ( orgCont . Superior )
} else {
return
}
}
// 获取所有下级
func ( g * GetOrgAllParent ) GetOrgSonAllId ( orgId int64 ) {
var orgAry [ ] int64
if orgId != 0 {
err := overall . CONSTANT_DB_HR . Model ( & modelshr . AdministrativeOrganization { } ) . Select ( "`id`" ) . Where ( "`state` = 1 AND `superior` = ?" , orgId ) . Find ( & orgAry ) . Error
if err != nil {
return
}
for _ , v := range orgAry {
if ! IsInTrue [ int64 ] ( v , g . Id ) {
g . Id = append ( g . Id , v )
g . GetOrgSonAllId ( v )
} else {
g . GetOrgSonAllId ( v )
}
}
}
}
// 获取行政组织所有上级和下级
func HaveAllOrgRelation ( orgId int64 ) [ ] int64 {
// departmentId := RecursionOrgLeve(orgId, 4)
// fmt.Printf("获取行政组--->%v--->%v\n", departmentId, orgId)
var getAllOrg GetOrgAllParent
getAllOrg . GetOrgAllFatherId ( orgId , 4 )
getAllOrg . GetOrgSonAllId ( orgId )
// getAllOrg.Id = append(getAllOrg.Id, orgId)
// getAllOrg.GetOrgParent(orgId, 4)
// fmt.Printf("获取行政组--2222->%v--->%v\n", getAllOrg.Id, orgId)
return getAllOrg . Id
}
// 获取指定等级行政组织所有上级
func ( g * GetOrgAllParent ) GetOrgAllFatherId ( orgId , level int64 ) {
var orgCont modelshr . OrgContType
err := orgCont . GetCont ( map [ string ] interface { } { "`id`" : orgId , "`state`" : 1 } , "`superior`" , "level" )
if err == nil {
if ! IsInTrue [ int64 ] ( orgId , g . Id ) {
g . Id = append ( g . Id , orgId )
}
if orgCont . Level >= level {
g . GetOrgAllFatherId ( orgCont . Superior , level )
}
} else {
return
}
}
// 获取上下级
func ( g * GetOrgAllParent ) GetOrgParent ( orgId , level int64 ) {
if orgId != 0 {
var orgCont modelshr . OrgContType
err := orgCont . GetCont ( map [ string ] interface { } { "`id`" : orgId , "`state`" : 1 } , "`superior`" , "level" )
if err == nil {
// fmt.Printf("获取行政组--2222->%v--->%v\n", orgCont.Level, level)
if orgCont . Level >= level {
g . GetOrgSonAllId ( orgId )
g . GetOrgParent ( orgCont . Superior , level )
}
}
}
}
//计算得分
/ *
参数
@ targetScore 指标分值
@ resultval 结算值
@ allPrizes 全奖值
@ zeroPrizes 零奖值
@ CappingVals 封顶值
@ typeClass 1 : 定性 ; 2 : 定量 ; 3 : 观察指标
返回说明
@ scoreVal 计算得分
@ allPrize 全奖值
@ zeroPrize 零奖值
@ CappingVal 封顶值
@ achievement 达成率
func CalculateScore ( targetScore int64 , resultval , allPrizes , zeroPrizes , CappingVals float64 , typeClass int ) ( scoreVal , allPrize , zeroPrize , CappingVal , achievement float64 )
* /
func CalculateScore ( targetScore int64 , resultval , allPrizes , zeroPrizes , CappingVals float64 , typeClass int ) ( scoreVal , allPrize , zeroPrize , CappingVal , achievement float64 ) {
allPrize = allPrizes / 100
zeroPrize = zeroPrizes / 100
CappingVal = CappingVals / 100
resultval = resultval / 100
//fmt.Printf("达成率--1-->targetScore:%v-->resultval:%v-->allPrize:%v-->zeroPrize:%v-->CappingVal:%v\n", targetScore, resultval, allPrize, zeroPrize, CappingVal)
//不修正精度的达成率
var achievementAll float64 = 0
if allPrize == 0 && zeroPrize == 0 { //全奖值与零奖值都为0 那么达成率 100 和实际得分是 指标分
achievement = 100
scoreVal = float64 ( targetScore )
if typeClass == 2 {
if resultval <= 0 {
scoreVal = 0
}
}
achievementAll = 100
//fmt.Printf("达成率--11-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
} else {
if allPrize > zeroPrize { //如果全奖值大于零奖值 执行一下操作
if resultval <= zeroPrize { //实际结算值小于零奖值 那么达成率和实际得分都是0
achievement = 0
scoreVal = 0
achievementAll = 0
// } else if resultval > allPrize { //实际结算值大于全奖值 执行一下操作
//fmt.Printf("达成率--7-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
} else { //实际结算值在全奖值 与 零奖值之间
chuShu := resultval - float64 ( zeroPrize )
beiChuShu := float64 ( allPrize ) - float64 ( zeroPrize )
if beiChuShu != 0 {
achievement = DecimalEs ( chuShu / beiChuShu , 4 )
achievementAll = chuShu / beiChuShu
if achievement <= 0 {
//如果在全奖值大于零件值的情况下出现达成率为0或负数,则达成率和实际得分都是0
achievement = 0
scoreVal = 0
achievementAll = 0
//fmt.Printf("达成率--8-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
} else {
//fmt.Printf("达成率--9-1->targetScore:%v-->resultval:%v-->scoreVal:%v-->allPrize:%v-->zeroPrize:%v-->CappingVal:%v-->achievement:%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
if achievement * 100 >= CappingVal {
//如果达成率大于等于封顶值
if CappingVal > 0 {
scoreVal = ( CappingVal / 100 ) * float64 ( targetScore )
//fmt.Printf("达成率--9-2->targetScore:%v-->resultval:%v-->scoreVal:%v-->allPrize:%v-->zeroPrize:%v-->CappingVal:%v-->achievement:%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
} else {
//fmt.Printf("达成率--9-3->targetScore:%v-->resultval:%v-->scoreVal:%v-->allPrize:%v-->zeroPrize:%v-->CappingVal:%v-->achievement:%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
scoreVal = float64 ( targetScore )
}
} else {
// scoreVal = achievement * (float64(targetScore))
scoreVal = achievementAll * ( float64 ( targetScore ) )
//fmt.Printf("达成率--9-4->targetScore:%v-->resultval:%v-->scoreVal:%v-->allPrize:%v-->zeroPrize:%v-->CappingVal:%v-->achievement:%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
}
//fmt.Printf("达成率--9-->targetScore:%v-->resultval:%v-->scoreVal:%v-->allPrize:%v-->zeroPrize:%v-->CappingVal:%v-->achievement:%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
}
achievement = DecimalEs ( achievement * 100 , 4 )
} else {
//被除数为0时 那么达成率和实际得分都是0
achievement = 0
scoreVal = 0
achievementAll = 0
//fmt.Printf("达成率--10-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
}
}
} else { //如果全奖值小于零奖值 执行一下操作
if resultval >= zeroPrize { //实际结算值大于零奖值 那么达成率和实际得分都是0
achievement = 0
scoreVal = 0
achievementAll = 0
//fmt.Printf("达成率--1-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
} else {
chuShu := resultval - float64 ( zeroPrize )
beiChuShu := float64 ( allPrize ) - float64 ( zeroPrize )
if beiChuShu != 0 {
achievement = DecimalEs ( chuShu / beiChuShu , 4 )
achievementAll = chuShu / beiChuShu
if achievement <= 0 {
//如果在全奖值大于零件值的情况下出现达成率为0或负数,则达成率和实际得分都是0
achievement = 0
scoreVal = 0
achievementAll = 0
//fmt.Printf("达成率--2-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
} else {
if achievement * 100 >= CappingVal {
//如果达成率大于等于封顶值
scoreVal = CappingVal * float64 ( targetScore ) / 100
//fmt.Printf("达成率--3-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
} else {
// scoreVal = achievement * (float64(targetScore))
scoreVal = achievementAll * ( float64 ( targetScore ) )
//fmt.Printf("达成率--4-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
}
}
achievement = DecimalEs ( achievement * 100 , 4 )
//fmt.Printf("达成率--6-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
} else {
//被除数为0时 那么达成率和实际得分都是0
achievement = 0
scoreVal = 0
achievementAll = 0
//fmt.Printf("达成率--5-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
}
}
}
}
if typeClass == 3 {
scoreVal = float64 ( targetScore )
//fmt.Printf("达成率--11-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
}
scoreVal = DecimalEs ( scoreVal , 2 )
allPrize = DecimalEs ( allPrize , 2 )
zeroPrize = DecimalEs ( zeroPrize , 2 )
CappingVal = DecimalEs ( CappingVal , 2 )
achievement = DecimalEs ( achievement , 4 )
//fmt.Printf("达成率--12-->%v-->%v-->%v-->%v-->%v-->%v-->%v\n", targetScore, resultval, scoreVal, allPrize, zeroPrize, CappingVal, achievement)
return
}
// 字符串数子转int64
func StrNumberToInt64 ( val string , cheng float64 ) ( valInt int64 ) {
valFloat , _ := strconv . ParseFloat ( val , 64 )
valFloatGd := DecimalEs ( valFloat * cheng , 2 )
valStr := strconv . FormatFloat ( valFloatGd , 'f' , - 1 , 64 )
valInt , _ = strconv . ParseInt ( valStr , 10 , 64 )
return
}
/ *
递归无限极菜单树
* /
func GetMenuRouterThree ( parentId int , threeData [ ] modelAppPlatform . Menus ) [ ] MenusRouterThree {
treeList := [ ] MenusRouterThree { }
for _ , v := range threeData {
if v . ParentId == parentId {
child := GetMenuRouterThree ( v . Id , threeData )
var node MenusRouterThree
node . Path = v . Path //路由路径
if v . Types == 5 {
// node.Path = fmt.Sprintf("%v?appid=%v&tableid=%v", v.Path, v.AppId, v.TableId)
}
node . AppId = v . AppId
node . TableId = v . TableId
node . Component = v . Component //组件路径
node . Redirect = v . Redirect //跳转链接
node . Name = v . Name //路由名称
var metaCont MenusRouterThreeMet
metaCont . Perm = strconv . FormatInt ( v . Perm , 10 )
metaCont . Title = v . Name //路由title
metaCont . Icon = v . Icon //ICON
if v . Visible == 1 {
metaCont . Hidden = false //否隐藏
} else {
metaCont . Hidden = true //否隐藏
}
metaCont . Roles = [ ] string { } //拥有路由权限的角色编码
metaCont . KeepAlive = false //是否开启缓存
node . Meta = metaCont //路由属性类型
node . Children = child //子路由列表
// // fmt.Printf("GetMenuThree-22222--%v--->%v\n", v.Id, node)
treeList = append ( treeList , node )
}
}
return treeList
}
/ *
递归无限极菜单树
* /
func GetAppMenuThree ( parentId int , threeData [ ] modelAppPlatform . Menus ) [ ] AppMenusThree {
treeList := [ ] AppMenusThree { }
for _ , v := range threeData {
if v . ParentId == parentId {
child := GetAppMenuThree ( v . Id , threeData )
var node AppMenusThree
node . Id = v . Id //
node . Name = v . Name //菜单名称"`
node . Types = v . Types //菜单类型(1-菜单;2-目录;3-外链;4-按钮权限"`
node . Path = v . Path //路由路径"`
node . Component = v . Component //组件路径(vue页面完整路径,省略.vue后缀)"`
node . Perm = v . Perm // 权限标识"`
node . Visible = v . Visible //显示状态(1:显示;2:隐藏,3:删除)"`
node . Sort = v . Sort //排序(数字越小排名越靠前))"`
node . Icon = v . Icon //菜单图标"`
node . Redirect = v . Redirect //跳转路径"`
node . ParentId = v . ParentId //父菜单ID"`
node . Time = v . Time //创建时间"`
node . Class = MenuType ( v . Types )
node . PermCode = strconv . FormatInt ( v . Perm , 10 )
node . Children = child //子路由列表
// // fmt.Printf("GetMenuThree-22222--%v--->%v\n", v.Id, node)
treeList = append ( treeList , node )
}
}
return treeList
}
func GetMenuOptionsThree ( parentId int , threeData [ ] modelAppPlatform . Menus ) [ ] AppMenusOptionsThree {
treeList := [ ] AppMenusOptionsThree { }
for _ , v := range threeData {
if v . ParentId == parentId {
child := GetMenuOptionsThree ( v . Id , threeData )
var node AppMenusOptionsThree
node . Label = v . Name //路由名称
node . Value = v . Id //路由ID
node . Children = child //子路由列表
// // fmt.Printf("GetMenuThree-22222--%v--->%v\n", v.Id, node)
treeList = append ( treeList , node )
}
}
return treeList
}
// 菜单类型对照
func MenuType ( class int ) string {
switch class {
case 1 :
return "MENU"
case 2 :
return "CATALOG"
case 3 :
return "EXTLINK"
case 4 :
return "BUTTON"
case 5 :
return "MyApp"
default :
return "CATALOG"
}
return "CATALOG"
}
func MenuTypeToInt ( class string ) int {
switch class {
case "MENU" :
return 1
case "CATALOG" :
return 2
case "EXTLINK" :
return 3
case "BUTTON" :
return 4
case "MyApp" :
return 5
default :
return 2
}
return 2
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 14 13 : 33 : 12
@ 功能 : 获取指定括号中的数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func MatchBracket ( s , starBracket , endBracket string ) string {
i := strings . Index ( s , starBracket )
if i >= 0 {
// fmt.Printf("match-i-->%v\n", i)
j := strings . Index ( s [ i : ] , endBracket )
if j >= 0 {
// fmt.Printf("match-j-->%v-->%v\n", j, s[i+1:i+j])
return s [ i + 1 : i + j ]
}
}
return ""
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 14 16 : 01 : 13
@ 功能 : 通用执行SQL原生语句
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ExecSql ( database , sqlStr string ) ( err error ) {
switch database {
case "Master" :
err = overall . CONSTANT_DB_Master . Exec ( sqlStr ) . Error
case "AppPlatform" :
err = overall . CONSTANT_DB_AppPlatform . Exec ( sqlStr ) . Error
case "Wechat" :
err = overall . CONSTANT_DB_Wechat . Exec ( sqlStr ) . Error
case "HR" :
err = overall . CONSTANT_DB_HR . Exec ( sqlStr ) . Error
case "FILE_BOOK" :
err = overall . CONSTANT_DB_FILE_BOOK . Exec ( sqlStr ) . Error
case "ERROR_SUBJECT" :
err = overall . CONSTANT_DB_ERROR_SUBJECT . Exec ( sqlStr ) . Error
case "MY_TEST" :
err = overall . CONSTANT_DB_MY_TEST . Exec ( sqlStr ) . Error
case "SCORING" :
err = overall . CONSTANT_DB_SCORING . Exec ( sqlStr ) . Error
case "QA" :
err = overall . CONSTANT_DB_QA . Exec ( sqlStr ) . Error
case "BILLBOARD" :
err = overall . CONSTANT_DB_BILLBOARD . Exec ( sqlStr ) . Error
case "HEALTH" :
err = overall . CONSTANT_DB_HEALTH . Exec ( sqlStr ) . Error
case "KPI" :
err = overall . CONSTANT_DB_KPI . Exec ( sqlStr ) . Error
case "WECHAT_LOG" :
err = overall . CONSTANT_DB_WECHAT_LOG . Exec ( sqlStr ) . Error
case "MANAGE_ARCHIVES" :
err = overall . CONSTANT_DB_MANAGE_ARCHIVES . Exec ( sqlStr ) . Error
case "System_Permission" :
err = overall . CONSTANT_DB_System_Permission . Exec ( sqlStr ) . Error
case "DB_Storage" :
err = overall . CONSTANT_DB_Storage . Exec ( sqlStr ) . Error
case "DB_Server" :
err = overall . CONSTANT_DB_Server . Exec ( sqlStr ) . Error
case "Tidb" :
err = overall . CONSTANT_DB_Tidb . Exec ( sqlStr ) . Error
case "CustomerForm" :
err = overall . CONSTANT_DB_CustomerForm . Exec ( sqlStr ) . Error
default :
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 0 9 - 22 11 : 28 : 12
@ 功能 : 获取指定行政组织id , 所有子类
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( g * GetOrgAllParent ) GetOrgSun ( superior int64 ) {
var id [ ] int64
if superior == 0 {
return
}
err := overall . CONSTANT_DB_HR . Model ( & modelshr . AdministrativeOrganization { } ) . Select ( "`id`" ) . Where ( "`state` = 1 AND `superior` = ?" , superior ) . Find ( & id ) . Error
if err != nil || len ( id ) < 1 {
return
}
for _ , v := range id {
if ! IsInTrue [ int64 ] ( v , g . Id ) {
g . Id = append ( g . Id , v )
}
g . GetOrgSun ( v )
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 11 - 27 0 9 : 44 : 25
@ 功能 : 获取自定义App子菜单
* /
func ( g * GetOrgAllParent ) GetAppMenuSun ( appKey , superior int64 ) {
var id [ ] int64
if superior == 0 {
return
}
err := overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . Appmenus { } ) . Select ( "`id`" ) . Where ( "`state` = 1 AND `type` = 1 AND `isLock` = 2 AND `appkey` = ? AND `parent` = ?" , appKey , superior ) . Find ( & id ) . Error
if err != nil || len ( id ) < 1 {
return
}
for _ , v := range id {
if ! IsInTrue [ int64 ] ( v , g . Id ) {
g . Id = append ( g . Id , v )
}
g . GetAppMenuSun ( appKey , v )
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 03 - 06 14 : 16 : 0 9
@ 功能 : 获取指定自定义表单分组所有子分组
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( g * GetOrgAllParent ) GetFormGroupSun ( superior int64 ) {
if superior == 0 {
return
}
var id [ ] int64
err := overall . CONSTANT_DB_AppPlatform . Model ( & modelAppPlatform . CustomerFormGroup { } ) . Select ( "`id`" ) . Where ( "`state` IN ? AND `superior` = ?" , [ ] int { 1 , 2 } , superior ) . Find ( & id ) . Error
if err != nil || len ( id ) < 1 {
return
}
for _ , v := range id {
if ! IsInTrue [ int64 ] ( v , g . Id ) {
g . Id = append ( g . Id , v )
}
g . GetOrgSun ( v )
}
}
// 类型转换
func TypeToClass ( val interface { } , timeClass int ) ( str string ) {
if typeVal , ok := val . ( uint ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( uint8 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( uint16 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( uint32 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( uint64 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( int ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( int8 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( int16 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( int32 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( int64 ) ; ok {
str = UnixTimeToDay ( typeVal , timeClass )
} else if typeVal , ok := val . ( float32 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( float64 ) ; ok {
str = UnixTimeToDay ( int64 ( typeVal ) , timeClass )
} else if typeVal , ok := val . ( byte ) ; ok {
valInt , valErr := strconv . ParseInt ( string ( typeVal ) , 10 , 64 )
if valErr == nil {
str = UnixTimeToDay ( valInt , timeClass )
} else {
str = ""
}
} else if typeVal , ok := val . ( string ) ; ok {
valInt , valErr := strconv . ParseInt ( typeVal , 10 , 64 )
if valErr == nil {
str = UnixTimeToDay ( valInt , timeClass )
} else {
str = typeVal
}
} else {
str = ""
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 11 - 0 8 16 : 03 : 24
@ 功能 : 根据身份证获取对应生日
@ 参数
# cardId 身份证号码
@ 返回值
# 生日
@ 方法原型
#
* /
func GetBirthday ( cardId string ) string {
if len ( cardId ) < 15 {
return ""
}
// 兼容第一代15位身份证号码
if len ( cardId ) == 15 {
// 第一代身份证年份都是19开头的
return fmt . Sprintf ( "19%s" , cardId [ 6 : 12 ] )
} else {
return cardId [ 6 : 14 ]
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 11 - 0 8 16 : 10 : 28
@ 功能 : 根据生日日期得到用户年龄
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( b * BirthdayAge ) GetAgeByBirthday ( cardId string ) {
if len ( cardId ) < 15 {
return
}
birthday := GetBirthday ( cardId )
if len ( birthday ) < 1 {
b . Age = 0
}
year , _ := strconv . Atoi ( birthday [ 0 : 4 ] )
month , _ := strconv . Atoi ( birthday [ 4 : 6 ] )
day , _ := strconv . Atoi ( birthday [ 6 : ] )
var months string
if month < 10 {
months = fmt . Sprintf ( "0%v" , month )
} else {
months = strconv . Itoa ( month )
}
var days string
if day < 10 {
days = fmt . Sprintf ( "0%v" , day )
} else {
days = strconv . Itoa ( day )
}
b . Birthday = fmt . Sprintf ( "%v-%v-%v" , year , months , days )
// 计算当前日期与生日中年月日都差值
now := time . Now ( )
age := now . Year ( ) - year
moreMonth := int ( now . Month ( ) ) - month
moreDay := now . Day ( ) - day
// 未到生日月份,或者到了月份,但未到生日日期,年龄都要减1岁
if moreMonth < 0 || ( moreMonth == 0 && moreDay < 0 ) {
age --
}
// 不要出现负值
if age < 0 {
age = 0
}
b . Age = age
}
// 统计元素重复出现的次数
/ *
@ ary 数组切片
* /
func StatisticalDuplication [ T GenericityVariable ] ( ary [ ] T ) ( mapAry map [ T ] int ) {
mapAry = make ( map [ T ] int )
count := 0
for i := 0 ; i < len ( ary ) ; i ++ {
for n := 0 ; n < len ( ary ) ; n ++ {
if ary [ i ] == ary [ n ] {
count ++
}
}
mapAry [ ary [ i ] ] = count
count = 0
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 03 - 06 14 : 42 : 33
@ 功能 : 生成自定义表单分组树
* /
func CustFormGroupTree ( pid int64 , treeList [ ] modelAppPlatform . CustomerFormGroup ) [ ] CustomerFormGroupTree {
var TreeNodes [ ] CustomerFormGroupTree
if reflect . ValueOf ( treeList ) . IsValid ( ) {
for _ , v := range treeList {
if v . Superior == pid {
// v.Child = append(v.Child, CustFormGroupTree(v.Superior, treeList)...)
// TreeNodes = append(TreeNodes, v)
var treeInfo CustomerFormGroupTree
treeInfo . Id = v . Id
treeInfo . Title = v . Title //分组名称"`
treeInfo . Superior = v . Superior //父级"`
treeInfo . Sort = v . Sort //排序"`
treeInfo . Ordid = v . Ordid //归属行政组织"`
treeInfo . State = v . State //显示状态(1:启用;2:禁用,3:删除)"`
treeInfo . Time = v . Time //创建时间"`
treeInfo . Child = append ( treeInfo . Child , CustFormGroupTree ( v . Superior , treeList ) ... )
TreeNodes = append ( TreeNodes , treeInfo )
}
}
}
return TreeNodes
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 04 - 02 11 : 19 : 41
@ 功能 : 泛型类型断言
* /
func TypeToInterface ( val interface { } ) string {
switch balData := val . ( type ) {
case int :
return strconv . Itoa ( balData )
case int8 :
return strconv . FormatInt ( int64 ( balData ) , 10 )
case int16 :
return strconv . FormatInt ( int64 ( balData ) , 10 )
case int32 :
return strconv . FormatInt ( int64 ( balData ) , 10 )
case int64 :
return strconv . FormatInt ( balData , 10 )
case uint :
return strconv . FormatUint ( uint64 ( balData ) , 10 )
case uint8 :
return strconv . FormatUint ( uint64 ( balData ) , 10 )
case uint16 :
return strconv . FormatUint ( uint64 ( balData ) , 10 )
case uint32 :
return strconv . FormatUint ( uint64 ( balData ) , 10 )
case uint64 :
return strconv . FormatUint ( balData , 10 )
case float32 :
return fmt . Sprintf ( "%v" , float64 ( balData ) )
case float64 :
return fmt . Sprintf ( "%v" , float64 ( balData ) )
default :
if balDataStr , ok := balData . ( string ) ; ok {
if balDataStr != "" {
return balDataStr
} else {
return ""
}
} else {
return ""
}
}
// if valDataStr, ok := val.(string); ok {
// if valDataStr != "" {
// return valDataStr
// } else {
// return ""
// }
// } else {
// return ""
// }
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 04 - 07 0 8 : 26 : 39
@ 功能 : 去除字段保留字
* /
func RemoveReservedWord ( val string ) bool {
reservedWord := [ ] string { "id" , "masters_key" , "creater_time" , "edit_time" , "flow_id" , "states" , "flowIsOpen" , "explicate" }
return IsInTrue [ string ] ( val , reservedWord )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 04 - 07 0 8 : 26 : 39
@ 功能 : 去除字段保留字
* /
func RemoveReservedWordTime ( val string ) bool {
reservedWord := [ ] string { "datetimerange" , "daterange" , "monthrange" }
return IsInTrue [ string ] ( val , reservedWord )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 0 8 - 30 0 8 : 49 : 43
@ 功能 : 输出班组
* /
func TeamidName ( val int64 ) string {
switch val {
case 1 :
return "长白班"
case 2 :
return "甲班"
case 3 :
return "乙班"
case 4 :
return "丙班"
case 5 :
return "丁班"
default :
return "未知"
}
return "未知"
}
func TeamidNameInt ( val string ) int64 {
switch val {
case "长白班" :
return 1
case "甲班" :
return 2
case "乙班" :
return 3
case "丙班" :
return 4
case "丁班" :
return 5
default :
return 0
}
return 0
}
//取最大值
func GetMaxNum [ T GenericityVariable ] ( ary [ ] T ) T {
maxVal := ary [ 0 ]
if len ( ary ) == 0 {
return maxVal
}
for i := 1 ; i < len ( ary ) ; i ++ {
if maxVal < ary [ i ] {
maxVal = ary [ i ]
}
}
return maxVal
}
// 数据库关系转换
func DatabaseIntToString ( typeId int64 ) string {
switch typeId {
case 2 :
return "RTD"
case 3 :
return "TIDB"
case 4 :
return "SqlServer"
case 5 :
return "redis"
default :
return "mysql"
}
return "mysql"
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 01 - 16 0 8 : 35 : 07
@ 功能 : 泛型去重
* /
func RemoveDuplicate [ T GenericityVariable ] ( ary [ ] T ) [ ] T {
m := make ( map [ T ] bool )
uniqueNumbers := [ ] T { }
for _ , v := range ary {
if ! m [ v ] {
m [ v ] = true
uniqueNumbers = append ( uniqueNumbers , v )
}
}
return uniqueNumbers
}
// 获得月份最后一天,最后一秒
func GetDaysInMonth ( nextYear int , nextMonth int ) DateTimeTotimes {
crueMonth := nextMonth + 1
if crueMonth > 12 {
crueMonth = crueMonth - 12
nextYear = nextYear + 1
}
firstDayOfNextMonth := time . Date ( nextYear , time . Month ( crueMonth ) , 1 , 0 , 0 , 0 , 0 , time . UTC )
lastDayOfThisMonth := firstDayOfNextMonth . Add ( - 1 * time . Second )
// fmt.Println("本月最后一天时间:", lastDayOfThisMonth)
dates := lastDayOfThisMonth . Format ( "2006-01-02 15:04:05" )
var creTimeAll DateTimeTotimes
creTimeAll . BaisStrToTime ( dates )
return creTimeAll
}
// 获取指定时间的上个月的开始和结束时间
func GetLastMonthStartEnd ( dayTime string ) ( int64 , int64 ) {
// dataTypeAll := "2006-01-02"
// dayTime = fmt.Sprintf("%v-%v", dayTime, "01")
now := StringToTimeIng ( "d" , dayTime )
// now := time.Now()
lastMonthFirstDay := now . AddDate ( 0 , - 1 , - now . Day ( ) + 1 )
lastMonthStart := time . Date ( lastMonthFirstDay . Year ( ) , lastMonthFirstDay . Month ( ) , lastMonthFirstDay . Day ( ) , 0 , 0 , 0 , 0 , now . Location ( ) ) . Unix ( )
lastMonthEndDay := lastMonthFirstDay . AddDate ( 0 , 1 , - 1 )
lastMonthEnd := time . Date ( lastMonthEndDay . Year ( ) , lastMonthEndDay . Month ( ) , lastMonthEndDay . Day ( ) , 23 , 59 , 59 , 0 , now . Location ( ) ) . Unix ( )
return lastMonthStart , lastMonthEnd
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 06 - 03 0 9 : 13 : 15
@ 功能 : 计算整数长度
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func GetIntLength ( n int64 ) int {
if n == 0 {
return 1
}
count := 0
// 处理负数的情况
if n < 0 {
n = - n
}
for n > 0 {
count ++
n /= 10
}
return count
}
// 值处理
// 1:自动(原始值);2:整数;3:保留1位小数;4:保留2位小数;5:百分比;6:百分比1位小数;7:百分比2位小数;
func DataChuli ( val float64 , types int ) interface { } {
var guodu interface { }
switch types {
case 2 :
guodu = int64 ( val )
case 3 :
guodu = fmt . Sprintf ( "%.1f" , val )
case 4 :
guodu = fmt . Sprintf ( "%.2f" , val )
case 5 :
guodu = fmt . Sprintf ( "%v%" , val )
case 6 :
guodu = fmt . Sprintf ( "%.1f%" , val )
case 7 :
guodu = fmt . Sprintf ( "%.2f%" , val )
default :
guodu = val
}
return guodu
}