package examtestpage import ( "encoding/json" "errors" "fmt" "strconv" "time" "github.com/flipped-aurora/gin-vue-admin/server/commonus" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" "github.com/flipped-aurora/gin-vue-admin/server/model/hrsystem" "github.com/flipped-aurora/gin-vue-admin/server/model/testpage" "github.com/flipped-aurora/gin-vue-admin/server/model/wechat" "github.com/flipped-aurora/gin-vue-admin/server/utils/redishandel" "github.com/gin-gonic/gin" "gorm.io/gorm" ) //集团分厂管理模块 type GroupHandleApi struct{} //集团栏目 type GroupMap struct { Id int64 `json:"id" gorm:"column:g_id;type:bigint(20);;primaryKey;unique;not null;autoIncrement;index"` Name string `json:"name" gorm:"column:g_name;type:varchar(255);not null;comment:组织名称"` //'组织名称', Time int64 `json:"time" gorm:"column:g_time;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` //'编辑时间', Parentid int64 `json:"parentid" gorm:"column:g_parentid;type:bigint(20) unsigned;default:0;not null;comment:父级栏目"` Sate int8 `json:"state" gorm:"column:g_sate;type:tinyint(1) unsigned;default:1;not null;comment:状态"` //'状态', JinDieId string `json:"jindieid" gorm:"column:g_jindie_id;type:bigint(20) unsigned;default:0;not null;comment:金蝶ID"` //金蝶ID } type TableData struct { ID int64 `json:"id"` Name string `json:"name"` Address bool `json:"address"` WxId string `json:"wxId"` JdId string `json:"jdId"` Attributes int8 `json:"attributes"` Sort int `json:"sort"` Date string `json:"date"` Children interface{} `json:"children"` QueryId int `json:"queryid"` SingId int `json:"singid"` ErgodicID string `json:"ergodicid"` } //POST提交参数 type postGroupCanshu struct { Id int64 `json:"id" from:"id"` TypeId int `json:"typeid" from:"typeid"` } //集团列表 func (g *GroupHandleApi) GroupList(c *gin.Context) { var groupStruct []wechat.GroupForm //集团表结构 gormDb := global.GVA_DB_WatchDate.Model(&groupStruct) var requestData getGroupType errRequest := c.ShouldBindJSON(&requestData) if errRequest != nil { gormDb = gormDb.Where("g_parentid = ?", 1) } if requestData.Parentid == 0 { gormDb = gormDb.Where("g_parentid = ?", 1) } else { gormDb = gormDb.Where("g_id = ?", requestData.Parentid) } var groupMap []GroupMap //要获取的集团架构字段 var groupMapStruct []TableData // err := global.GVA_DB_WatchDate.Model(&groupStruct).Where("g_parentid = ?", 1).Find(&groupMap).Error //获取集团信息 err := gormDb.Find(&groupMap).Error if err != nil { fmt.Println(err) response.Result(100, groupMapStruct, "集团架构获取失败!", c) return } var departList []testpage.BranchFactoryHasMany // err = global.GVA_DB_Master.Preload("WorkshopSectionStruct").Where("bf_group = ?", 3).Find(&departList) // groupAry := map[int]interface{}{} for i, v := range groupMap { // fmt.Printf("%v\n", v.Id) err = global.GVA_DB_Master.Preload("WorkshopSectionStruct").Where("bf_group = ?", v.Id).Find(&departList).Error if err == nil { var groupTypeStruct TableData groupTypeStruct.ID = v.Id groupTypeStruct.Name = v.Name groupTypeStruct.Address = true groupTypeStruct.WxId = strconv.FormatInt(v.Id, 10) groupTypeStruct.JdId = v.JinDieId groupTypeStruct.Attributes = 1 groupTypeStruct.Sort = i + 1 groupTypeStruct.QueryId = 1 groupTypeStruct.Date = commonus.TimeStampToDate(v.Time, 6) groupTypeStruct.Children = openGroupMap(i+1, departList) groupTypeStruct.SingId = i + 1 + 3 // groupAry[i] = openGroupMap(departList) groupMapStruct = append(groupMapStruct, groupTypeStruct) } } sendMap := commonus.MapOut() sendMap["list"] = groupMapStruct // fmt.Printf("%v\n", groupMap) // response.Ok(c) response.Result(0, sendMap, "获取成功", c) } // //展开集团列表 func openGroupMap(singid int, data []testpage.BranchFactoryHasMany) []TableData { // openMapData := map[int]interface{}{} var mapStruct []TableData for i, v := range data { var kk TableData kk.ID = v.Id kk.Name = v.Name kk.Address = true if v.Set != 1 { kk.Address = false } kk.WxId = strconv.FormatInt(v.WechatId, 10) kk.JdId = "" kk.Attributes = v.Attribute kk.Sort = i + 1 kk.QueryId = 2 kk.Date = commonus.TimeStampToDate(v.Time, 6) var sunGroup []TableData for ii, vv := range v.WorkshopSectionStruct { var kk_i TableData kk_i.ID = vv.Id kk_i.Name = vv.Name kk_i.Address = true if vv.Set != 1 { kk_i.Address = false } kk_i.WxId = "" kk_i.JdId = "" kk_i.Attributes = 0 kk_i.Sort = ii + 1 kk_i.QueryId = 3 kk_i.Date = commonus.TimeStampToDate(vv.Time, 6) kk_i.SingId, _ = strconv.Atoi(strconv.Itoa(singid) + strconv.Itoa(i) + strconv.Itoa(ii)) // kk_i.Children = []map[string]interface{}{} sunGroup = append(sunGroup, kk_i) } kk.Children = sunGroup kk.SingId, _ = strconv.Atoi(strconv.Itoa(singid) + strconv.Itoa(i) + strconv.Itoa(4)) mapStruct = append(mapStruct, kk) } return mapStruct } //获取集团信息 /* @id 集团ID */ func (g *GroupHandleApi) GetGroupInfo(c *gin.Context) { var id postGroupCanshu _ = c.ShouldBindJSON(&id) //获取提交的参数 if id.Id == 0 { response.Result(101, id, "您的参数不正确!请检查您的提交!", c) } var groupStruct wechat.GroupForm //集团表结构 err := global.GVA_DB_WatchDate.Where("g_id = ?", id.Id).First(&groupStruct).Error //获取集团信息 if err != nil { response.Result(100, groupStruct, "获取失败", c) return } sendMap := commonus.MapOut() sendMap["list"] = groupStruct // fmt.Printf("====>%v\n", id.Id) response.Result(0, groupStruct, "获取成功", c) } /*获取子公司信息 @id 子公司ID */ func (g *GroupHandleApi) GetSubsidiaryInfo(c *gin.Context) { var id postGroupCanshu _ = c.ShouldBindJSON(&id) //获取提交的参数 if id.Id == 0 { response.Result(101, id, "您的参数不正确!请检查您的提交!", c) } var subsidiaryStruct testpage.BranchFactory //子公司表结构 err := global.GVA_DB_Master.Where("bf_id = ?", id.Id).First(&subsidiaryStruct).Error //获取子公司信息 if err != nil { response.Result(100, subsidiaryStruct, "获取失败", c) return } sendMap := commonus.MapOut() sendMap["list"] = subsidiaryStruct response.Result(0, subsidiaryStruct, "获取成功", c) } /*获取工段信息 @id 工段ID */ func (g *GroupHandleApi) GetGroupPositionInfo(c *gin.Context) { var id postGroupCanshu _ = c.ShouldBindJSON(&id) //获取提交的参数 if id.Id == 0 { response.Result(101, id, "您的参数不正确!请检查您的提交!", c) } var workShopesStruct testpage.WorkShopsection //工段表结构 err := global.GVA_DB_Master.Where("ws_id = ?", id.Id).First(&workShopesStruct).Error //获取工段信息 if err != nil { response.Result(100, workShopesStruct, "获取失败", c) return } sendMap := commonus.MapOut() sendMap["list"] = workShopesStruct response.Result(0, workShopesStruct, "获取成功", c) } /* 删除操作 @id 要删除的ID @type 要删除的类型 */ func (g *GroupHandleApi) DelGroupInfo(c *gin.Context) { var postInfo postGroupCanshu err := c.ShouldBindJSON(&postInfo) if err != nil { response.Result(100, err, "您的参数不正确!请检查您的提交!", c) return } if postInfo.Id == 0 { response.Result(101, postInfo.Id, "您的参数不正确!请检查您的提交!", c) return } var errSun error switch postInfo.TypeId { case 1: // fmt.Println("A1") errSun = DelDepartment(postInfo.Id) case 2: errSun = DelWorhPost(postInfo.Id) default: // fmt.Println("A2") errSun = DelterGroup(postInfo.Id) } // fmt.Printf("%v===========>%T\n", postInfo.TypeId, postInfo.TypeId) if errSun != nil { msg := fmt.Sprintf("删除失败!%v", errSun) response.Result(102, errSun, msg, c) return } sendMap := commonus.MapOut() sendMap["list"] = errSun response.Result(0, errSun, "获取成功", c) } /* 软删除集团信息 @id 集团ID */ func DelterGroup(id int64) error { assignErr := global.GVA_DB_WatchDate.Model(&wechat.GroupForm{}).Where("g_parentid = ? and g_id = ?", 1, id).First(&GroupMap{}).Error //获取集团信息 if errors.Is(assignErr, gorm.ErrRecordNotFound) { return errors.New("该集团不存在!") } err := global.GVA_DB_WatchDate.Where("g_id = ?", id).First(&wechat.GroupForm{}).Update("g_sate", 2).Error return err } /* 软删除分厂信息 @id 分厂ID */ func DelDepartment(id int64) error { assignErr := global.GVA_DB_Master.Where("bf_set = ? and bf_id = ?", 1, id).First(&testpage.BranchFactory{}).Error //获取分厂或部室信息 if errors.Is(assignErr, gorm.ErrRecordNotFound) { return errors.New("该分厂或部室不存在!") } err := global.GVA_DB_Master.Where("bf_id = ?", id).First(&testpage.BranchFactory{}).Update("bf_set", 3).Error return err } /* 软删除分厂信息 @id 分厂ID */ func DelWorhPost(id int64) error { assignErr := global.GVA_DB_Master.Where("ws_set = ? and ws_id = ?", 1, id).First(&testpage.WorkShopsection{}).Error //获取分厂或部室信息 if errors.Is(assignErr, gorm.ErrRecordNotFound) { return errors.New("该工段不存在!") } err := global.GVA_DB_Master.Where("ws_id = ?", id).First(&testpage.WorkShopsection{}).Update("ws_set", 3).Error return err } //添加组织架构(集团信息) /* @id 部门ID @name 部门名称 @parentid 上级部门ID。顶级部门的上级ID为1 @state 状态(1:启用;2:禁用) @jindieid 金蝶ID */ func (g *GroupHandleApi) AddGroupInfo(c *gin.Context) { var groupInfo GroupMap _ = c.ShouldBindJSON(&groupInfo) //获取提交的参数 if groupInfo.Parentid == 0 { response.Result(101, groupInfo, "您的参数不正确!请检查您的提交!", c) return } if groupInfo.Name == "" { response.Result(102, groupInfo, "您的参数不正确!请检查您的提交!", c) return } var groupStruct wechat.GroupForm //集团表结构 var groupMap GroupMap //要获取的集团架构字段 err := global.GVA_DB_WatchDate.Model(&groupStruct).Where("g_name = ?", groupInfo.Name).First(&groupMap).Error //获取集团信息 if err == nil { response.Result(103, groupMap, "该集团名称已经存在!请更换!", c) return } var dep commonus.DePartMentInfo addId, adderr := dep.AddDepartment(groupInfo.Parentid, groupInfo.Name) if adderr != true { response.Result(1003, groupInfo.Name, "该集团添加失败(企业微信通讯故障!)", c) return } groupStruct.Id = addId groupStruct.Name = groupInfo.Name groupStruct.Parentid = groupInfo.Parentid groupStruct.Orderes = 1 groupStruct.Time = time.Now().Unix() groupStruct.Sate = 1 groupStruct.Group = "" groupStruct.GroupSun = "" groupStruct.JinDieId = 0 result := global.GVA_DB_WatchDate.Create(&groupStruct).Error if result != nil { commonus.DelDepartment(addId) response.Result(1004, groupStruct, "该集团添加失败(写入数据库错误!)", c) return } // redisClient := redishandel.RunRedis() // redisClient.SetRedisTime(7200) // redisClient.Set("kaifa", "1234565") // jsh, _ := redisClient.Get("kaifa") // fmt.Printf("%v ----------%v ********** %v\n", ton, add, id) // fmt.Printf("%v ----------%v ********** %v\n", ton, err, jsh) // jsonBytes, _ := json.Marshal(groupInfo) // commonus.CurlPostJosn("111", jsonBytes) // fmt.Printf("%v ----------%T ********** %v********** %v\n", jsonBytes, jsonBytes, addId, adderr) sendMap := commonus.MapOut() sendMap["list"] = groupStruct response.Result(0, groupStruct, "添加成功", c) } /* 修改组织架构(集团信息) @id 部门ID @name 部门名称 @parentid 上级部门ID。顶级部门的上级ID为1 @state 状态(1:启用;2:禁用) @jindieid 金蝶ID */ func (g *GroupHandleApi) EiteGroupInfo(c *gin.Context) { var groupInfo GroupMap _ = c.ShouldBindJSON(&groupInfo) //获取提交的参数 if groupInfo.Id == 0 { response.Result(101, groupInfo, "您的参数不正确!请检查您的提交!", c) return } var groupStruct wechat.GroupForm //集团表结构 //要获取的集团架构字段 judgeErr := global.GVA_DB_WatchDate.Where("g_id = ?", groupInfo.Id).First(&groupStruct).Error //获取集团信息 if judgeErr != nil { response.Result(101, judgeErr, "该集团不存在!请检查你的数据!", c) return } if groupInfo.Name == "" { response.Result(102, groupInfo, "请提交修改后的集团名称!", c) return } else { groupStruct.Name = groupInfo.Name } if groupInfo.Parentid != 0 { groupStruct.Parentid = groupInfo.Parentid } if groupInfo.Sate != 0 { groupStruct.Sate = groupInfo.Sate } if groupInfo.JinDieId != "" { jinDieId, jinDeiErr := strconv.ParseInt(groupInfo.JinDieId, 10, 64) if jinDeiErr != nil { groupStruct.JinDieId = 0 } else { groupStruct.JinDieId = jinDieId } } groupStruct.Time = time.Now().Unix() affairOperation := global.GVA_DB_WatchDate.Begin() saveErr := affairOperation.Save(groupStruct).Error if saveErr != nil { affairOperation.Rollback() response.Result(102, groupInfo, "数据写入失败!", c) return } var dep commonus.DePartMentInfo _, saveErrwe := dep.SaveDepartment(groupStruct.Id, groupStruct.Orderes, groupStruct.Parentid, groupStruct.Name, "") if saveErrwe != true { affairOperation.Rollback() response.Result(102, groupInfo, "与企业微信通讯失败", c) return } affairOperation.Commit() sendMap := commonus.MapOut() sendMap["list"] = groupStruct response.Result(0, groupStruct, "修改成功", c) } //获取单个成员信息 type getOneUserSendDate struct { UserId string `json:"userid" from:"userid"` } //获取成员详细信息 func (g *GroupHandleApi) GetOneUserInfoAll(c *gin.Context) { var groupInfo getOneUserSendDate _ = c.ShouldBindJSON(&groupInfo) //获取提交的参数 if groupInfo.UserId == "" { response.Result(101, groupInfo, "您的参数不正确!请检查您的提交!", c) return } redisClient := redishandel.RunRedis() isTrue, tokenInfo := redisClient.HashGet("deUserAry:wechat_"+global.GVA_CONFIG.RedisPrefix.Alias, "userinfo_"+"_"+groupInfo.UserId) if isTrue != true { userInfo, msg, _ := commonus.GetOneAddressBookMember(groupInfo.UserId) var callBackData commonus.WechatUserInfo json.Unmarshal(userInfo, &callBackData) var us commonus.UserListStruct json.Unmarshal(userInfo, &us) userMap := commonus.MapOut() json.Unmarshal(userInfo, &userMap) jsonUser, _ := json.Marshal(us) redisClient.SetRedisTime(2678400) redisClient.HashSet("deUserAry:wechat_"+global.GVA_CONFIG.RedisPrefix.Alias, "userinfo_"+"_"+groupInfo.UserId, string(jsonUser)) response.Result(0, us, msg, c) } else { var us commonus.UserListStruct json.Unmarshal([]byte(tokenInfo), &us) response.Result(0, us, "获取成功", c) } // fmt.Printf("%v=============>%v\n", kjs, userMap) // var sendText commonus.SendText // sendText.Touser = groupInfo.UserId // sendText.MsgType = "text" // appId, _ := strconv.ParseInt(global.GVA_CONFIG.WorkWechatSchool.AgentId, 10, 64) // fmt.Printf("AppId===>%v\n", global.GVA_CONFIG.WorkWechatSchool.AgentId) // sendText.AgentId = appId // sendText.Text.Content = "异常规矩人员 \n人员列表\n" + callBackData.Name + " 打卡地址:" + callBackData.Address + " \n张义良 打卡地址:" + callBackData.Address + "\n查看详情" // sendText.DuplicateCheckInterval = 1800 // sendText.SendTextMessage() } //获取单个成员信息 type getDeparMentUserSendDate struct { Id int `json:"id" from:"id"` FetchChild int `json:"fetch_child" from:"fetch_child"` } //获取部门成员 GetDepartmentUserList func (g *GroupHandleApi) GetDepartMentUserInfoAll(c *gin.Context) { var groupInfo getDeparMentUserSendDate _ = c.ShouldBindJSON(&groupInfo) //获取提交的参数 if groupInfo.Id == 0 { response.Result(101, groupInfo, "您的参数不正确!请检查您的提交!", c) return } redisClient := redishandel.RunRedis() redisClient.SetRedisTime(2678400) isTrueStr, departmentUserList := redisClient.Get("deUserAry:wechat_user_list" + global.GVA_CONFIG.RedisPrefix.Alias + "_" + strconv.Itoa(groupInfo.Id)) if isTrueStr == false { userInfo, msg, _ := commonus.GetDepartmentUserList(groupInfo.Id) var callBackData commonus.WechatUserInfoDepartment json.Unmarshal(userInfo, &callBackData) for _, v := range callBackData.UserList { isTrue, _ := redisClient.HashGet("deUserAry:wechat_"+global.GVA_CONFIG.RedisPrefix.Alias, "userinfo_"+"_"+v.UserId) if isTrue != true { // var us commonus.UserListStruct jsonBytes, _ := json.Marshal(v) // redisClient.SetRedisTime(7200) redisClient.HashSet("deUserAry:wechat_"+global.GVA_CONFIG.RedisPrefix.Alias, "userinfo_"+"_"+v.UserId, string(jsonBytes)) } userInset := commonus.MapOut() userInset["userid"] = v.UserId userInset["name"] = v.Name jsonDepartment, _ := json.Marshal(v.Department) userInset["department"] = string(jsonDepartment) userInset["position"] = v.Position userInset["mobile"] = v.Mobile userInset["gender"] = v.Gender userInset["email"] = v.Email userInset["avatar"] = v.Avatar userInset["status"] = v.Status jsonExtattr, _ := json.Marshal(v.Extattr) userInset["extattr"] = string(jsonExtattr) userInset["main_department"] = v.MainDepartment userInset["qr_code"] = v.QrCode jsonIsLeaderInDept, _ := json.Marshal(v.IsLeaderInDept) userInset["is_leader_in_dept"] = string(jsonIsLeaderInDept) userInset["thumb_avatar"] = v.ThumbAvatar userInset["time"] = time.Now().Unix() var userInfoStruct wechat.WechatUsers myErr := global.GVA_DB_WatchDate.Where("userid = ?", v.UserId).First(&userInfoStruct).Error if myErr == nil { saveErr := global.GVA_DB_WatchDate.Model(&userInfoStruct).Where("userid = ?", v.UserId).Save(userInset).Error if saveErr != nil { fmt.Printf("%v(%v) 信息更新失败\n", v.Name, v.UserId) } } else { userInset["u_id"] = commonus.GetFileNumber() createErr := global.GVA_DB_WatchDate.Model(&userInfoStruct).Create(userInset).Error if createErr != nil { fmt.Printf("%v(%v) 信息写入失败\n", v.Name, v.UserId) } } // fmt.Printf("isTrue ====> %v\n", isTrue) } jsonUserStr, _ := json.Marshal(callBackData.UserList) redisClient.Set("deUserAry:wechat_user_list"+global.GVA_CONFIG.RedisPrefix.Alias+"_"+strconv.Itoa(groupInfo.Id), string(jsonUserStr)) msg = "获取成功!" returnData := commonus.MapOut() returnData["count"] = len(callBackData.UserList) returnData["list"] = callBackData.UserList response.Result(0, returnData, msg, c) } else { var userAry []commonus.UserListStruct jsonUserList := json.Unmarshal([]byte(departmentUserList), &userAry) if jsonUserList != nil { response.Result(102, jsonUserList, "部门人员列表获取错误!", c) return } msges := "获取成功!" returnData := commonus.MapOut() returnData["count"] = len(userAry) returnData["list"] = userAry response.Result(203, returnData, msges, c) } } //刷新集团成员数据库 func (g *GroupHandleApi) RefreshDataBaseUser(c *gin.Context) { var userAry []wechat.WechatUsers var weChatAry []commonus.UserListStruct userErr := global.GVA_DB_WatchDate.Find(&userAry) //获取数据库所有成员 redisClient := redishandel.RunRedis() redisClient.SetRedisTime(7200) isTrueStr, departmentUserList := redisClient.Get("RefreshUserAry:wechat_user_all_" + global.GVA_CONFIG.RedisPrefix.Alias) if isTrueStr != true { jsonErr := json.Unmarshal([]byte(departmentUserList), &weChatAry) if jsonErr != nil { wechatAllList, _, isYes := commonus.GetDepartmentUserList(1) //企业微信所有成员 if isYes == true { var callBackData commonus.WechatUserInfoDepartment jsonErrs := json.Unmarshal(wechatAllList, &callBackData) if jsonErrs != nil { response.Result(101, jsonErrs, "Json解析错误!", c) return } if callBackData.Errcode != 0 { response.Result(102, callBackData.ErrMsg, "获取企业微信数据错误!", c) return } weChatAry = callBackData.UserList jsonUserStr, _ := json.Marshal(callBackData.UserList) redisClient.Set("RefreshUserAry:wechat_user_all"+global.GVA_CONFIG.RedisPrefix.Alias, string(jsonUserStr)) } } } else { jsonUserList := json.Unmarshal([]byte(departmentUserList), &weChatAry) if jsonUserList != nil { wechatAllList, _, isYes := commonus.GetDepartmentUserList(1) //企业微信所有成员 if isYes == true { var callBackData commonus.WechatUserInfoDepartment jsonErrs := json.Unmarshal(wechatAllList, &callBackData) if jsonErrs != nil { response.Result(101, jsonErrs, "Json解析错误!", c) return } if callBackData.Errcode != 0 { response.Result(102, callBackData.ErrMsg, "获取企业微信数据错误!", c) return } weChatAry = callBackData.UserList jsonUserStr, _ := json.Marshal(callBackData.UserList) redisClient.Set("RefreshUserAry:wechat_user_all"+global.GVA_CONFIG.RedisPrefix.Alias, string(jsonUserStr)) } } } var judgeUID []int64 if len(userAry) > 0 && len(weChatAry) > 0 { var userAryest []wechat.WechatUsers var saveAry []wechat.WechatUsers var delAry []wechat.SignOutWechatUsers if len(userAry) < len(weChatAry) { for _, c_v := range weChatAry { panding := false for _, u_v := range userAry { if c_v.UserId == u_v.Userid { //判断是否有要更新的数据 if c_v.Status != u_v.Status || c_v.MainDepartment != int(u_v.MainDepartment) || c_v.Mobile != u_v.Mobile { var saveUserAry wechat.WechatUsers saveUserAry.Uid = u_v.Uid saveUserAry.Userid = c_v.UserId saveUserAry.Name = c_v.Name jsonDepartment, departErr := json.Marshal(c_v.Department) if departErr == nil { saveUserAry.Department = string(jsonDepartment) } else { saveUserAry.Department = fmt.Sprintf("[%s]", c_v.MainDepartment) } saveUserAry.Position = c_v.Position saveUserAry.Mobile = c_v.Mobile genderInt, genderErr := strconv.Atoi(c_v.Gender) if genderErr == nil { saveUserAry.Gender = genderInt } else { saveUserAry.Gender = 1 } saveUserAry.Email = c_v.Email saveUserAry.Avatar = c_v.Avatar saveUserAry.Status = c_v.Status jsonExtattr, extarErr := json.Marshal(c_v.Extattr) if extarErr == nil { saveUserAry.Extattr = string(jsonExtattr) } else { saveUserAry.Extattr = "{\"attrs\":[]}" } saveUserAry.MainDepartment = int64(c_v.MainDepartment) saveUserAry.QrCode = c_v.QrCode jsonIsLeaderInDept, isErr := json.Marshal(c_v.IsLeaderInDept) if isErr == nil { saveUserAry.IsLeaderInDept = string(jsonIsLeaderInDept) } else { saveUserAry.IsLeaderInDept = "[0]" } saveUserAry.ThumbAvatar = c_v.ThumbAvatar saveUserAry.UserNumber = u_v.UserNumber saveUserAry.SysBf = u_v.SysBf saveUserAry.SysWs = u_v.SysWs saveUserAry.SysPs = u_v.SysPs saveUserAry.WmTema = u_v.WmTema saveUserAry.IsAdmin = u_v.IsAdmin saveUserAry.IsRole = u_v.IsRole saveUserAry.Pwd = u_v.Pwd saveUserAry.Time = time.Now().Unix() saveAry = append(saveAry, saveUserAry) } panding = true } } //数据库不存在的数据 if panding == false { var addUserAry wechat.WechatUsers uidVal := commonus.GetFileNumberEs() if len(judgeUID) > 0 { judTrue := false for _, judUid := range judgeUID { if judUid == uidVal { judTrue = true // fmt.Printf("重复ID-------->%v\n", uidVal) } } if judTrue == true { time.Sleep(5 * time.Millisecond) uidVal = commonus.GetFileNumberEs() } judgeUID = append(judgeUID, uidVal) } else { judgeUID = append(judgeUID, uidVal) } addUserAry.Uid = uidVal addUserAry.Userid = c_v.UserId addUserAry.Name = c_v.Name jsonDepartment, departErr := json.Marshal(c_v.Department) if departErr == nil { addUserAry.Department = string(jsonDepartment) } else { addUserAry.Department = fmt.Sprintf("[%s]", c_v.MainDepartment) } addUserAry.Position = c_v.Position addUserAry.Mobile = c_v.Mobile genderInt, genderErr := strconv.Atoi(c_v.Gender) if genderErr == nil { addUserAry.Gender = genderInt } else { addUserAry.Gender = 1 } addUserAry.Email = c_v.Email addUserAry.Avatar = c_v.Avatar addUserAry.Status = c_v.Status jsonExtattr, extarErr := json.Marshal(c_v.Extattr) if extarErr == nil { addUserAry.Extattr = string(jsonExtattr) } else { addUserAry.Extattr = "{\"attrs\":[]}" } addUserAry.MainDepartment = int64(c_v.MainDepartment) addUserAry.QrCode = c_v.QrCode jsonIsLeaderInDept, isErr := json.Marshal(c_v.IsLeaderInDept) if isErr == nil { addUserAry.IsLeaderInDept = string(jsonIsLeaderInDept) } else { addUserAry.IsLeaderInDept = "[0]" } addUserAry.ThumbAvatar = c_v.ThumbAvatar addUserAry.UserNumber = "" addUserAry.SysBf = 0 addUserAry.SysWs = 0 addUserAry.SysPs = 0 addUserAry.WmTema = 0 addUserAry.IsAdmin = 1 addUserAry.IsRole = 0 addUserAry.Pwd = "" addUserAry.Time = time.Now().Unix() userAryest = append(userAryest, addUserAry) } } var addRow int64 var saveRow int64 addRow = 0 saveRow = 0 if len(userAryest) > 0 { addDate := global.GVA_DB_WatchDate.Create(&userAryest) addRow = addDate.RowsAffected } if len(saveAry) > 0 { saveDate := global.GVA_DB_WatchDate.Save(&saveAry) saveRow = saveDate.RowsAffected } returnUserInset := commonus.MapOut() returnUserInset["save_len"] = len(saveAry) returnUserInset["save"] = saveAry returnUserInset["add_len"] = len(userAryest) returnUserInset["add"] = userAryest returnUserInset["addRow"] = addRow returnUserInset["saveRow"] = saveRow response.Result(200, returnUserInset, "完成!", c) } else { var delUid []int64 //获取需要删除的信息 for _, cd_v := range userAry { pandingDel := false for _, ud_v := range weChatAry { if cd_v.Userid == ud_v.UserId { pandingDel = true } } if pandingDel == false { var delUserInfo wechat.SignOutWechatUsers uidVal := commonus.GetFileNumberEs() if len(judgeUID) > 0 { judTrue := false for _, judUid := range judgeUID { if judUid == uidVal { judTrue = true // fmt.Printf("重复ID-------->%v\n", uidVal) } } if judTrue == true { time.Sleep(5 * time.Millisecond) uidVal = commonus.GetFileNumberEs() } judgeUID = append(judgeUID, uidVal) } else { judgeUID = append(judgeUID, uidVal) } delUserInfo.Uid = uidVal delUserInfo.Userid = cd_v.Userid delUserInfo.Name = cd_v.Name delUserInfo.Department = cd_v.Department delUserInfo.Position = cd_v.Position delUserInfo.Mobile = cd_v.Mobile delUserInfo.Gender = cd_v.Gender delUserInfo.Email = cd_v.Email delUserInfo.Avatar = cd_v.Avatar delUserInfo.Status = cd_v.Status delUserInfo.Extattr = cd_v.Extattr delUserInfo.MainDepartment = int64(cd_v.MainDepartment) delUserInfo.QrCode = cd_v.QrCode delUserInfo.IsLeaderInDept = cd_v.IsLeaderInDept delUserInfo.ThumbAvatar = cd_v.ThumbAvatar delUserInfo.UserNumber = cd_v.UserNumber delUserInfo.SysBf = cd_v.SysBf delUserInfo.SysWs = cd_v.SysWs delUserInfo.SysPs = cd_v.SysPs delUserInfo.WmTema = cd_v.WmTema delUserInfo.IsAdmin = cd_v.IsAdmin delUserInfo.IsRole = cd_v.IsRole delUserInfo.Pwd = cd_v.Pwd delUserInfo.Time = time.Now().Unix() delAry = append(delAry, delUserInfo) delUid = append(delUid, cd_v.Uid) } } var addRowDel int64 addRowDel = 0 if len(delUid) > 0 { addDateDel := global.GVA_DB_WatchDate.Create(&delAry) addRowDel = addDateDel.RowsAffected var delUserCont wechat.WechatUsers global.GVA_DB_WatchDate.Delete(&delUserCont, delUid) } returnUserInset := commonus.MapOut() returnUserInset["delAry_len"] = len(delAry) returnUserInset["delAry"] = delAry returnUserInset["addRowDel"] = addRowDel returnUserInset["judgeUID"] = judgeUID returnUserInset["judgeUID_len"] = len(judgeUID) returnUserInset["delUid"] = len(delUid) response.Result(2001, returnUserInset, "完成!", c) } } else { returnUserInset := commonus.MapOut() returnUserInset["userErr"] = userErr returnUserInset["weChatAry"] = weChatAry response.Result(1102, returnUserInset, "您的参数不正确!请检查您的提交!", c) } } //获取集团和分厂架构 func (g *GroupHandleApi) GetGroupDepartMap(c *gin.Context) { var requestData getGroupDepart c.ShouldBindJSON(&requestData) if requestData.Id == 0 && requestData.IdStr == "" { requestData.Id = 0 } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } var govMap []OutGovCont gormDb := global.GVA_DB_HrDataBase.Model(&hrsystem.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` = 1") if requestData.Level != 0 { gormDb = gormDb.Where("aot.level <= ?", requestData.Level) } if requestData.All == 0 { if requestData.Id == 0 { requestData.Id = 312 } gormDb = gormDb.Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307}) } groupErr := gormDb.Find(&govMap).Error if groupErr != nil { response.Result(103, groupErr, "数据获取失败!", c) return } var gTreeAry []outGov for i, v := range govMap { var govInfo outGov govInfo.ID = v.Id govInfo.Name = v.Name govInfo.Address = true govInfo.WxId = strconv.FormatInt(v.Id, 10) govInfo.JdId = "1" govInfo.Attributes = 1 govInfo.Superior = v.Superior govInfo.Sort = i + 1 govInfo.QueryId = 1 govInfo.Date = commonus.TimeStampToDate(v.Time, 6) govInfo.ErgodicID = v.Number //fmt.Sprintf("%v_%v", v.Id, i) govInfo.SingId = i + 1 + 3 govInfo.ClassName = v.ClassName govInfo.Level = v.Level gTreeAry = append(gTreeAry, govInfo) } govMapThree := GovThreeList(requestData.Id, gTreeAry) response.Result(0, govMapThree, "获取成功", c) } //递归树 func GovThreeList(parentId int64, govAry []outGov) []govThree { var govMap []govThree for _, v := range govAry { // var zhucont govThree if v.Superior == parentId { child := GovThreeList(v.ID, govAry) govMap = append(govMap, govThree{v, child}) } } return govMap } // func (g *GroupHandleApi) GetGroupDepartMap(c *gin.Context) { // var requestData getGroupDepart // err := c.ShouldBindJSON(&requestData) // if err != nil { // } // gormDb := global.GVA_DB_WatchDate.Model(&wechat.GroupForm{}).Where("`g_parentid` = 1 AND `g_sate` = 1") // if requestData.Id != 0 { // gormDb = gormDb.Where("`g_id` = ?", requestData.Id) // } // var groupMap []GroupMap // groupErr := gormDb.Order("g_id ASC").Find(&groupMap).Error // if groupErr != nil { // response.Result(103, groupErr, "数据获取失败!", c) // return // } // var departList []testpage.BranchFactoryHasMany // // err = global.GVA_DB_Master.Preload("WorkshopSectionStruct").Where("bf_group = ?", 3).Find(&departList) // // groupAry := map[int]interface{}{} // var groupMapStruct []TableData // for i, v := range groupMap { // // fmt.Printf("%v\n", v.Id) // err = global.GVA_DB_Master.Preload("WorkshopSectionStruct").Where("bf_group = ?", v.Id).Find(&departList).Error // if err == nil { // var groupTypeStruct TableData // groupTypeStruct.ID = v.Id // groupTypeStruct.Name = v.Name // groupTypeStruct.Address = true // groupTypeStruct.WxId = strconv.FormatInt(v.Id, 10) // groupTypeStruct.JdId = v.JinDieId // groupTypeStruct.Attributes = 1 // groupTypeStruct.Sort = i + 1 // groupTypeStruct.QueryId = 1 // groupTypeStruct.Date = commonus.TimeStampToDate(v.Time, 6) // groupTypeStruct.ErgodicID = fmt.Sprintf("%v_%v", v.Id, i) // bfErr, bfInfo := GetBranchFactoryMapEs(v.Id, i) // if bfErr == true { // groupTypeStruct.Children = bfInfo // } // groupTypeStruct.SingId = i + 1 + 3 // // groupAry[i] = openGroupMap(departList) // groupMapStruct = append(groupMapStruct, groupTypeStruct) // } // } // sendMap := commonus.MapOut() // sendMap["list"] = groupMapStruct // // fmt.Printf("%v\n", groupMap) // // response.Ok(c) // response.Result(0, sendMap, "获取成功", c) // } //获得分厂名称 func GetBranchFactoryMap(id int64) (isTrue bool, ContInfo []testpage.BranchFactory) { isTrue = false err := global.GVA_DB_Master.Where("bf_group = ?", id).Find(&ContInfo).Error if err == nil { isTrue = true } return } type bfMapJbqList struct { testpage.BranchFactory ErgodicID string `json:"ergodicid"` } func GetBranchFactoryMapEs(id int64, jbq int) (isTrue bool, ContInfo []bfMapJbqList) { isTrue = false var ContInfoBf []testpage.BranchFactory err := global.GVA_DB_Master.Where("bf_group = ?", id).Find(&ContInfoBf).Error if err != nil { return } for index, val := range ContInfoBf { var bfMapCont bfMapJbqList bfMapCont.Id = val.Id bfMapCont.Name = val.Name bfMapCont.Set = val.Set bfMapCont.Uid = val.Uid bfMapCont.Time = val.Time bfMapCont.Attribute = val.Attribute bfMapCont.Group = val.Group bfMapCont.WechatId = val.WechatId bfMapCont.ErgodicID = fmt.Sprintf("%v_%v_%v", val.Id, jbq, index) ContInfo = append(ContInfo, bfMapCont) } isTrue = true return } //获取集团架构人员信息对照表 func (g *GroupHandleApi) GetGroupUser(c *gin.Context) { var requestData getGroupDepart c.ShouldBindJSON(&requestData) if requestData.Id == 0 && requestData.IdStr == "" { requestData.Id = 0 } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } var govMap []OutGovCont gormDb := global.GVA_DB_HrDataBase.Model(&hrsystem.AdministrativeOrganization{}).Select("administrative_organization.*,aot.id as aotid,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` = 1 AND aot.id IN (1,2,3,5)") if requestData.Level != 0 { gormDb = gormDb.Where("aot.level <= ?", requestData.Level) } if requestData.All == 0 { if requestData.Id == 0 { requestData.Id = 312 } gormDb = gormDb.Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307}) } groupErr := gormDb.Find(&govMap).Error if groupErr != nil { response.Result(103, groupErr, "数据获取失败!", c) return } var departAry []govUserCont for _, v := range govMap { var departInfo govUserCont departInfo.ID = v.Id //`json:"id"` departInfo.Name = v.Name //`json:"name"` departInfo.Number = v.Number //`json:"State"` departInfo.ClassName = v.ClassName //`json:"classname"` departInfo.Level = v.Level //`json:"level"` departInfo.Superior = v.Superior departInfo.UserList = getUserList(v.Id, requestData.Level) departAry = append(departAry, departInfo) } govMapThree := GovUserThreeList(requestData.Id, departAry) response.Result(0, govMapThree, "获取成功", c) } func (g *GroupHandleApi) GetGroupUserOld(c *gin.Context) { var requestData groupRequest err := c.ShouldBindJSON(&requestData) if err != nil { } gormDb := global.GVA_DB_WatchDate.Model(&wechat.GroupForm{}).Where("`g_parentid` = 1 AND `g_sate` = 1") if requestData.GroupId != 0 { gormDb = gormDb.Where("`g_id` = ?", requestData.GroupId) } var groupMap []wechat.GroupForm groupErr := gormDb.Order("g_id ASC").Find(&groupMap).Error if groupErr != nil { response.Result(103, groupErr, "数据获取失败!", c) return } var groupUserMap []groupUser for _, val := range groupMap { var groupUserInfo groupUser groupUserInfo.Id = strconv.FormatInt(val.Id, 10) groupUserInfo.Name = val.Name isGroupTrue, DepartMap := GetDepartMap(val.Id) if isGroupTrue == true { groupUserInfo.Children = DepartMap } groupUserMap = append(groupUserMap, groupUserInfo) } sendMap := commonus.MapOut() sendMap["list"] = groupUserMap response.Result(0, sendMap, "获取成功", c) } //获取分厂与对应员工 func GetDepartMap(printId int64) (isTrue bool, departMap []groupUser) { isTrue = false var branchFactory []testpage.BranchFactory err := global.GVA_DB_Master.Where("bf_group = ?", printId).Find(&branchFactory).Error if err != nil { isTrue = true } for _, val := range branchFactory { var bfInf groupUser bfInf.Id = strconv.FormatInt(val.Id, 10) bfInf.Name = val.Name isGroupTrue, DepartMap := GetBranchFactoryUser(val.Id) if isGroupTrue == true { bfInf.Children = DepartMap } departMap = append(departMap, bfInf) } isTrue = true return } //获取分厂人员列表 func GetBranchFactoryUser(printId int64) (isTrue bool, departMap []groupUser) { isTrue = false var userInfo []testpage.PersonalDetails userErr := global.GVA_DB_Master.Model(&testpage.WorkMan{}).Select("worker_man.*,worker_man_data.*").Joins("left join worker_man_data on worker_man_data.wmd_key = worker_man.wm_key").Where("`wm_bf_id` = ? AND `wm_set` = 1 AND `wm_hire_set` = 1", printId).Find(&userInfo).Error if userErr != nil { return } for _, val := range userInfo { var bfInf groupUser bfInf.Id = strconv.FormatInt(val.Key, 10) bfInf.Name = val.Name bfInf.Number = val.Number departMap = append(departMap, bfInf) } isTrue = true return } type departSelect struct { Id string `json:"id"` } //获取分厂列表 func (g *GroupHandleApi) GetDepartmentListOld(c *gin.Context) { var requestData commonus.SetIds err := c.ShouldBindJSON(&requestData) if err != nil { response.Result(101, err, "数据获取失败!", c) return } if requestData.Id == 0 && requestData.OutId == "" { response.Result(102, err, "参数错误!请重新提交!", c) return } if requestData.OutId != "" { idInt, inIntErr := strconv.ParseInt(requestData.OutId, 10, 64) if inIntErr == nil { requestData.Id = idInt } } var bfList []testpage.BranchFactory errData := global.GVA_DB_Master.Where("bf_group = ? AND bf_set = 1", requestData.Id).Find(&bfList).Error if errData != nil { response.Result(101, errData, "数据获取失败!", c) return } response.Result(0, bfList, "数据获取成功!", c) } //获取分厂列表 func (g *GroupHandleApi) GetDepartmentList(c *gin.Context) { var requestData getGroupDepart c.ShouldBindJSON(&requestData) if requestData.Id == 0 && requestData.IdStr == "" { requestData.Id = 0 } if requestData.IdStr != "" { idInt64, _ := strconv.ParseInt(requestData.IdStr, 10, 64) requestData.Id = idInt64 } var govMap []OutGovCont gormDb := global.GVA_DB_HrDataBase.Model(&hrsystem.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` = 1") if requestData.Level != 0 { gormDb = gormDb.Where("aot.level <= ?", requestData.Level) } if requestData.All == 0 { if requestData.Id == 0 { requestData.Id = 312 } gormDb = gormDb.Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307}) } groupErr := gormDb.Find(&govMap).Error if groupErr != nil { response.Result(103, groupErr, "数据获取失败!", c) return } var departAry []govDepart for _, v := range govMap { var departInfo govDepart departInfo.ID = v.Id //`json:"id"` departInfo.Name = v.Name //`json:"name"` departInfo.State = v.State //`json:"State"` departInfo.Uid = 1 //`json:"Uid"` departInfo.Time = v.Time //`json:"time"` departInfo.Attributes = 1 //`json:"attributes"` departInfo.Superior = v.Superior //`json:"superior"` departInfo.Group = v.OrganizationType //`json:"group"` departInfo.WechatId = strconv.FormatInt(v.WechatOrganizationId, 10) //`json:"wechatid"` departInfo.ClassName = v.ClassName //`json:"classname"` departInfo.Level = v.Level //`json:"level"` departAry = append(departAry, departInfo) } govMapThree := GovDepartThreeList(requestData.Id, departAry) response.Result(0, govMapThree, "获取成功", c) } //递归树 func GovDepartThreeList(parentId int64, govAry []govDepart) []govDepartThree { var govMap []govDepartThree for _, v := range govAry { // var zhucont govThree if v.Superior == parentId { child := GovDepartThreeList(v.ID, govAry) govMap = append(govMap, govDepartThree{v, child}) } } return govMap } //递归树 func GovUserThreeList(parentId int64, govAry []govUserCont) []govUserContThree { // fmt.Printf("parentId---------->%v\n", parentId) var govMap []govUserContThree for _, v := range govAry { // var zhucont govThree if v.Superior == parentId { child := GovUserThreeList(v.ID, govAry) govMap = append(govMap, govUserContThree{v, child}) } } return govMap } //获取Hr人员信息 func getUserList(departmentId int64, level int) (userList []peopleList) { var userAry []hrsystem.PersonArchives gormDb := global.GVA_DB_HrDataBase.Model(&hrsystem.PersonArchives{}).Select("`id`,`number`,`name`,`wechat`,`work_wechat`,`key`").Where("state = 1 AND emp_type BETWEEN 1 AND 10 ") if level <= 4 { gormDb = gormDb.Where(" FIND_IN_SET(?,`maindeparment`)", departmentId) } else { gormDb = gormDb.Where(" FIND_IN_SET(?,`admin_org`)", departmentId) } err := gormDb.Find(&userAry).Error // err := global.GVA_DB_HrDataBase.Model(&hrsystem.Personnel{}).Select("`id`,`number`,`name`,`wechat`,`work_wechat`,`key`,admin_org").Where("state = 1 AND admin_org = ?", departmentId).Find(&userAry).Error if err != nil { return } for _, v := range userAry { var userCont peopleList userCont.ID = v.Id //`json:"id"` userCont.Name = v.Name //`json:"name"` userCont.Number = v.Number //`json:"number"` userCont.Key = strconv.FormatInt(v.Key, 10) //`json:"key"` userCont.WechatId = v.Wechat //`json:"wechatid"` if v.WorkWechat != "" { userCont.WechatId = v.WorkWechat } userList = append(userList, userCont) } return } func getUserListold(departmentId int64) (userList []peopleList) { var userAry []hrsystem.Personnel err := global.GVA_DB_HrDataBase.Model(&hrsystem.Personnel{}).Select("`id`,`number`,`name`,`wechat`,`work_wechat`,`key`").Where("state = 1 AND FIND_IN_SET(?,`deparment`)", departmentId).Find(&userAry).Error // err := global.GVA_DB_HrDataBase.Model(&hrsystem.Personnel{}).Select("`id`,`number`,`name`,`wechat`,`work_wechat`,`key`,admin_org").Where("state = 1 AND admin_org = ?", departmentId).Find(&userAry).Error if err != nil { return } for _, v := range userAry { var userCont peopleList userCont.ID = v.Id //`json:"id"` userCont.Name = v.Name //`json:"name"` userCont.Number = v.Number //`json:"number"` userCont.Key = strconv.FormatInt(v.Key, 10) //`json:"key"` userCont.WechatId = v.Wechat //`json:"wechatid"` if v.WorkWechat != "" { userCont.WechatId = v.WorkWechat } userList = append(userList, userCont) } return }