package employee import ( "context" "errors" "fmt" "github.com/fonchain_enterprise/fonchain-main/api/account" "github.com/fonchain_enterprise/fonchain-main/api/department" "github.com/fonchain_enterprise/fonchain-main/api/employee" "github.com/fonchain_enterprise/fonchain-main/api/oa" "github.com/fonchain_enterprise/fonchain-main/api/position" "github.com/fonchain_enterprise/fonchain-main/api/recruit" "github.com/fonchain_enterprise/fonchain-main/api/rule" appConfig "github.com/fonchain_enterprise/fonchain-main/pkg/config" "github.com/fonchain_enterprise/fonchain-main/pkg/e" "github.com/fonchain_enterprise/fonchain-main/pkg/model/login" "github.com/fonchain_enterprise/fonchain-main/pkg/model/union" "github.com/fonchain_enterprise/fonchain-main/pkg/service" "github.com/gin-gonic/gin" "strconv" "time" ) func CreateAnEmployeeProfile(c *gin.Context, userId uint64, userInfo union.User, resume *recruit.ResumeQueryListVo, reqUser *account.Operator) error { if userId == 0 { return errors.New("用户ID不能为空") } qres, err := service.RuleProvider.UserInfo(c, &rule.RulesRequest{ Domain: "fontree", AccountID: userId, }) if qres.PositionUsers == nil || len(qres.PositionUsers) == 0 { return errors.New("获取用户信息失败,职位或部门信息不存在") } // 查找在职状态的字典项 working, err := service.GrpcEmployeeProvider.SearchDictionaryList(c, &employee.SearchDictionaryRequest{ Name: "在职", Tag: "workingCondition", }) if err != nil { return err } fmt.Printf("working------%+v --------", working) // 获取在职状态的 ID,如果存在的话 nature := uint64(100) workingId := uint64(100) if len(working.WorkingCondition) != 0 { workingId = working.WorkingCondition[0].Id } natureOfEmployment, _ := service.GrpcEmployeeProvider.SearchDictionaryList(c, &employee.SearchDictionaryRequest{ Name: resume.Resumes[0].EmployeeType, Tag: "natureOfEmployment", }) if len(natureOfEmployment.NatureOfEmployment) != 0 { nature = natureOfEmployment.NatureOfEmployment[0].Id } var departmentPost []*employee.DepartmentPostInfo var postReq []*oa.WorkingTimeWithPositionsReqPosition for _, i := range qres.PositionUsers { departmentPost = append(departmentPost, &employee.DepartmentPostInfo{ DepartmentId: i.DepartmentId, PostId: i.PositionID, }) postReq = append(postReq, &oa.WorkingTimeWithPositionsReqPosition{ DepartmentUID: strconv.FormatUint(i.DepartmentId, 10), PositionUID: strconv.FormatUint(i.PositionID, 10), }) } var FileAttachment []*employee.EmployeeFileAttachmentInfo var CurriculumVitae *employee.EmployeeFileAttachmentInfo if resume.Resumes[0].InterviewFile != "" { FileAttachment = []*employee.EmployeeFileAttachmentInfo{ {Url: resume.Resumes[0].InterviewFile, Name: "应聘登记表", Type: ""}, } } if resume.Resumes[0].ResumeFile != "" { CurriculumVitae = &employee.EmployeeFileAttachmentInfo{ Url: resume.Resumes[0].ResumeFile, Name: "简历", Type: "image", } } // 创建员工档案请求 employeeFileInfo := &employee.CreateEmployeeFileRequest{ UserId: userId, Name: userInfo.NickName, InPersonTel: userInfo.TelNum, DateOfEntry: userInfo.EnterDate, DepartmentPostList: departmentPost, JobNumber: userInfo.JobNum, WorkingConditionId: workingId, PersonnelSourceId: 100, ContractTypeId: 100, NatureOfEmploymentId: nature, CompanyId: 100, //默认占位 CostCenterId: 100, SexId: 100, PoliticalStatusId: 100, MaritalStatusId: 100, ApplicationForm: FileAttachment, //应聘登记表 CurriculumVitae: CurriculumVitae, //薪资信息 BasicPay: -1, ChiefAddition: -1, PostWage: -1, MeritPay: -1, OtherAllowances: -1, ProfessionalTitleSubsidy: -1, SkillGrant: -1, PreTaxSalary: -1, SocialSecurityBase: -1, CompanyPension: -1, CompanyMedicine: -1, CompanyBeUnemployed: -1, CompanyOccupationalInjury: -1, CompanyGiveBirth: -1, CompanyReserveFund: -1, PersonagePension: -1, PersonageMedicine: -1, PersonageBeUnemployed: -1, PersonageOccupationalInjury: -1, PersonageGiveBirth: -1, PersonageReserveFund: -1, Source: "inviteForAJob", ModifyOrNot: true, } fmt.Printf("req------%+v --------", employeeFileInfo) // 创建员工档案 employeeFileInfo.Operator = uint64(reqUser.ID) employeeFileInfo.OperatorName = reqUser.Name uid, err := service.GrpcEmployeeProvider.CreateEmployeeFile(c, employeeFileInfo) if err != nil { return err } if uid.Massage != "" { return errors.New(uid.Massage) } //绑定考勤组 err = BindTheDefaultAttendanceGroup(c, uid.Id, departmentPost) if err != nil { fmt.Printf("绑定考勤组错误%+v --------", err) } _, _ = CreateAMallAccount(employeeFileInfo, uid.Id) //创建假勤余额 err = CreateAFalseAttendanceBalance(c, employeeFileInfo, uid.Id) if err != nil { fmt.Printf("创建假勤余额错误%+v --------", err) } return nil } func CreateAFalseAttendanceBalance(c *gin.Context, in *employee.CreateEmployeeFileRequest, employeeId uint64) error { annualLeave := service.AnnualLeaveByYearsOfService(in.DateOfEntry) var LeaveBalancePositionList []*oa.LeaveBalancePosition for _, s := range in.DepartmentPostList { LeaveBalancePosition := &oa.LeaveBalancePosition{ DepartmentUID: strconv.FormatUint(s.DepartmentId, 10), PositionUID: strconv.FormatUint(s.PostId, 10), } LeaveBalancePositionList = append(LeaveBalancePositionList, LeaveBalancePosition) } _, err := service.GrpcOAImpl.SaveLeaveBalance(c, &oa.LeaveBalance{ StaffUID: in.UserId, StaffNum: in.JobNumber, StaffName: in.Name, Year: int32(time.Now().Year()), Positions: LeaveBalancePositionList, AnnualLeave: float32(annualLeave), HasParentalLeave: 1, HasNursingLeave: 1, EmployeeFileId: employeeId, }) return err } func BindTheDefaultAttendanceGroup(c *gin.Context, employeeId uint64, postReq []*employee.DepartmentPostInfo) error { //绑定考勤组 Positions := []*oa.WorkingTimeWithPositionsReqPosition{} if len(postReq) == 0 { return nil } for _, i := range postReq { Positions = append(Positions, &oa.WorkingTimeWithPositionsReqPosition{ DepartmentUID: strconv.FormatUint(i.DepartmentId, 10), PositionUID: strconv.FormatUint(i.PostId, 10), }) } queryWorking := &oa.WorkingTimeWithPositionsReq{ Positions: Positions, InUse: 1, Page: 1, PageSize: 100, } workingTime, err := service.GrpcOAImpl.QueryWorkingTimeWithPositions(c, queryWorking) if len(workingTime.Data) == 1 { DepartmentID, _ := strconv.ParseUint(workingTime.Data[0].DepartmentUID, 10, 64) PositionID, _ := strconv.ParseUint(workingTime.Data[0].PositionUID, 10, 64) bandAttendance := &employee.AttendanceGroupRequest{ Id: employeeId, DepartmentId: DepartmentID, PostId: PositionID, AttendanceSectionId: workingTime.Data[0].UUID, AttendanceSectionName: workingTime.Data[0].WorkTimeTemplateName, } fmt.Printf("------------bandAttendance---%+v ", bandAttendance) _, err = service.GrpcEmployeeProvider.TheAttendanceGroupIsSet(c, bandAttendance) if err != nil { return err } } return nil } func IsHaveEmployeeAuth(c *gin.Context) (bool, []uint64, error) { userInfo := login.GetUserInfoFromC(c) departmentIDs := make([]uint64, len(userInfo.PositionUsers)) for idx, posUser := range userInfo.PositionUsers { departmentIDs[idx] = posUser.DepartmentId } //判断人是否有员工档案权限 req := position.SearchDepartmentRequest{ Domain: "fontree", UserId: userInfo.ID, Urls: []string{e.AuthEmployeeAllKey}, } res, err := service.PositionProvider.SearchDepartment(c, &req) if err == nil && len(res.List) > 0 { return true, nil, nil } if err != nil { return false, nil, err } //查询是否有亿麦权限 Todo 特殊处理数字科技中心的权限 需要优化 暂时写死部门id reqMai := position.SearchDepartmentRequest{ Domain: "fontree", UserId: userInfo.ID, Urls: []string{e.AuthEmployeeMaiKey}, } resMai, err := service.PositionProvider.SearchDepartment(c, &reqMai) if err == nil && len(resMai.List) > 0 { departmentID := uint64(0) if appConfig.Env == "prod" { departmentID = 161 departmentIDs = append(departmentIDs, departmentID) } else if appConfig.Env == "dev" || appConfig.Env == "test" { fmt.Println("==========>> 有数字科技中心数据权限") departmentID = 161 fmt.Println("==========>> 当前部门id:", departmentIDs) departmentIDs = append(departmentIDs, departmentID) fmt.Println("==========>> 添加后的部门id:", departmentIDs) } } departmentU32 := make([]uint32, len(departmentIDs)) for idx, depID := range departmentIDs { departmentU32[idx] = uint32(depID) } // 获取当前及下属部门 departmentReq := &department.BaseListV2Request{ UserId: uint32(userInfo.ID), DepartmentIds: departmentU32, } //获取当前及下属部门 departmentRes, err := service.DepartmentProvider.BaseListV2(c, departmentReq) if err != nil { return false, nil, err } subDepartmentIDs := make([]uint64, len(departmentRes.List)) for idx, dep := range departmentRes.List { subDepartmentIDs[idx] = dep.ID } fmt.Println("==========>> 去重后的部门ids:", subDepartmentIDs) employeeFile, err := service.GrpcEmployeeProvider.CheckEmployeeFilesByDepartmentID(c, &employee.CheckEmployeeFilesByDepartmentIDRequest{ DepartmentIds: subDepartmentIDs, }) if err != nil { return false, nil, err } //如果没有人员 添加默认筛选条件 if employeeFile.EmployeeFileId == nil { employeeFile.EmployeeFileId = append(employeeFile.EmployeeFileId, 0) } if employeeFile.UserIds == nil { employeeFile.UserIds = append(employeeFile.UserIds, 0) } fmt.Println("==========>> 能查看的档案id:", employeeFile.EmployeeFileId) return false, employeeFile.EmployeeFileId, nil } func BuildSaveEmployeeFile(in *employee.CreateEmployeeFileRequest, id uint64) *employee.SaveEmployeeFileRequest { list, err := service.GrpcEmployeeProvider.FindEmployeeFileList(context.Background(), &employee.FindEmployeeFileListRequest{ Id: id, }) if err != nil { return nil } var ApplicationForm, GraduationCertificate, DegreeCertificate, OtherCertificates []*employee.EmployeeFileAttachmentInfo var CurriculumVitae, ContractForm, ReverseIdentityCard, IdentityCardNumber *employee.EmployeeFileAttachmentInfo var previousFile *employee.FindEmployeeFileListInfo if len(list.EmployeeFileList) > 0 { previousFile = list.EmployeeFileList[0] } if previousFile != nil { const DefaultUint64Value = 100 const DefaultFloat32Value = -1 const DefaultStringValue = "" // 更新字段值,只有之前字段值不为默认值时更新 updateIfValid := func(currentValue *uint64, previousValue uint64) { if previousValue != DefaultUint64Value { *currentValue = previousValue } } updateStringIfValid := func(currentValue *string, previousValue string) { if previousValue != DefaultStringValue { *currentValue = previousValue } } updateFloatIfValid := func(currentValue *float32, previousValue float32) { if previousValue != DefaultFloat32Value { *currentValue = previousValue } } updateIfValid(&in.CompanyId, previousFile.CompanyId) updateIfValid(&in.CostCenterId, previousFile.CostCenterId) updateIfValid(&in.PoliticalStatusId, previousFile.PoliticalStatusId) updateIfValid(&in.MaritalStatusId, previousFile.MaritalStatusId) updateIfValid(&in.NatureOfEmploymentId, previousFile.NatureOfEmploymentId) updateIfValid(&in.ContractTypeId, previousFile.ContractTypeId) updateIfValid(&in.PersonnelSourceId, previousFile.PersonnelSourceId) updateIfValid(&in.WorkingConditionId, previousFile.WorkingConditionId) updateIfValid(&in.EducationalBackgroundId, previousFile.EducationalBackgroundId) updateIfValid(&in.SexId, previousFile.SexId) updateStringIfValid(&in.JobNumber, previousFile.JobNumber) updateStringIfValid(&in.CardNumber, previousFile.CardNumber) updateStringIfValid(&in.Name, previousFile.Name) updateStringIfValid(&in.DateOfBirth, previousFile.DateOfBirth) updateStringIfValid(&in.InPersonTel, previousFile.InPersonTel) updateStringIfValid(&in.IdNumber, previousFile.IdNumber) updateStringIfValid(&in.StartIdNumber, previousFile.StartIdNumber) updateStringIfValid(&in.EndIdNumber, previousFile.EndIdNumber) updateStringIfValid(&in.NativePlace, previousFile.NativePlace) updateStringIfValid(&in.DomicileAddress, previousFile.DomicileAddress) updateStringIfValid(&in.PresentAddress, previousFile.PresentAddress) updateStringIfValid(&in.EmergencyContact1, previousFile.EmergencyContact1) updateStringIfValid(&in.Relation1, previousFile.Relation1) updateStringIfValid(&in.EmergencyContact1Tel, previousFile.EmergencyContact1Tel) updateStringIfValid(&in.EmergencyContact2, previousFile.EmergencyContact2) updateStringIfValid(&in.Relation2, previousFile.Relation2) updateStringIfValid(&in.EmergencyContact2Tel, previousFile.EmergencyContact2Tel) updateStringIfValid(&in.SpouseSName, previousFile.SpouseSName) updateStringIfValid(&in.NameOfChild, previousFile.NameOfChild) updateStringIfValid(&in.SexOfChild, previousFile.SexOfChild) updateStringIfValid(&in.DateOfBirthOfChild, previousFile.DateOfBirthOfChild) updateStringIfValid(&in.ProbationPeriodStart, previousFile.ProbationPeriodStart) updateStringIfValid(&in.ProbationPeriodEnd, previousFile.ProbationPeriodEnd) updateStringIfValid(&in.SourceRemarks, previousFile.SourceRemarks) updateStringIfValid(&in.DateOfEntry, previousFile.DateOfEntry) updateStringIfValid(&in.LaborContractStart, previousFile.LaborContractStart) updateStringIfValid(&in.LaborContractEnd, previousFile.LaborContractEnd) updateStringIfValid(&in.LaborSecurity, previousFile.LaborSecurity) updateStringIfValid(&in.BankCardNumber, previousFile.BankCardNumber) updateStringIfValid(&in.BankOfDeposit, previousFile.BankOfDeposit) updateStringIfValid(&in.PaymentBankNumber, previousFile.PaymentBankNumber) updateStringIfValid(&in.SocialSecurityNumber, previousFile.SocialSecurityNumber) updateStringIfValid(&in.ProvidentFundNumber, previousFile.ProvidentFundNumber) updateStringIfValid(&in.AcademicNote, previousFile.AcademicNote) updateStringIfValid(&in.GraduateSchool, previousFile.GraduateSchool) updateStringIfValid(&in.ProfessionalName, previousFile.ProfessionalName) updateStringIfValid(&in.QualificationDocument, previousFile.QualificationDocument) updateFloatIfValid(&in.BasicPay, previousFile.BasicPay) updateFloatIfValid(&in.PostWage, previousFile.PostWage) updateFloatIfValid(&in.MeritPay, previousFile.MeritPay) updateFloatIfValid(&in.OtherAllowances, previousFile.OtherAllowances) updateFloatIfValid(&in.ProfessionalTitleSubsidy, previousFile.ProfessionalTitleSubsidy) updateFloatIfValid(&in.SkillGrant, previousFile.SkillGrant) updateFloatIfValid(&in.PreTaxSalary, previousFile.PreTaxSalary) updateFloatIfValid(&in.SocialSecurityBase, previousFile.SocialSecurityBase) updateStringIfValid(&in.SalaryNote, previousFile.SalaryNote) updateFloatIfValid(&in.CompanyPension, previousFile.CompanyPension) updateFloatIfValid(&in.CompanyMedicine, previousFile.CompanyMedicine) updateFloatIfValid(&in.CompanyBeUnemployed, previousFile.CompanyBeUnemployed) updateFloatIfValid(&in.CompanyOccupationalInjury, previousFile.CompanyOccupationalInjury) updateFloatIfValid(&in.CompanyGiveBirth, previousFile.CompanyGiveBirth) updateFloatIfValid(&in.CompanyReserveFund, previousFile.CompanyReserveFund) updateFloatIfValid(&in.PersonagePension, previousFile.PersonagePension) updateFloatIfValid(&in.PersonageMedicine, previousFile.PersonageMedicine) updateFloatIfValid(&in.PersonageBeUnemployed, previousFile.PersonageBeUnemployed) updateFloatIfValid(&in.PersonageOccupationalInjury, previousFile.PersonageOccupationalInjury) updateFloatIfValid(&in.PersonageGiveBirth, previousFile.PersonageGiveBirth) updateFloatIfValid(&in.PersonageReserveFund, previousFile.PersonageReserveFund) updateStringIfValid(&in.ResignationDate, previousFile.ResignationDate) updateStringIfValid(&in.ReasonForResignation, previousFile.ReasonForResignation) updateStringIfValid(&in.ResignationNote, previousFile.ResignationNote) updateStringIfValid(&in.DateOfConversion, previousFile.DateOfConversion) updateStringIfValid(&in.RemarksOnConversion, previousFile.RemarksOnConversion) updateStringIfValid(&in.Source, previousFile.Source) updateStringIfValid(&in.RecentImg, previousFile.RecentImg) updateStringIfValid(&in.TransferredDepartment, previousFile.TransferredDepartment) updateStringIfValid(&in.TransferredPost, previousFile.TransferredPost) updateStringIfValid(&in.Mailbox, previousFile.Mailbox) //updateStringIfValid(&in.ModifyOrNot, previousFile.ModifyOrNot) updateStringIfValid(&in.DateOfBirth, previousFile.DateOfBirth) updateStringIfValid(&in.DateOfBirth, previousFile.DateOfBirth) if len(previousFile.ApplicationForm) != 0 { ApplicationForm = previousFile.ApplicationForm } if len(previousFile.GraduationCertificate) != 0 { GraduationCertificate = previousFile.GraduationCertificate } if len(previousFile.DegreeCertificate) != 0 { DegreeCertificate = previousFile.DegreeCertificate } if len(previousFile.OtherCertificates) != 0 { OtherCertificates = previousFile.OtherCertificates } if previousFile.CurriculumVitae != nil { CurriculumVitae = previousFile.CurriculumVitae } if previousFile.ContractForm != nil { ContractForm = previousFile.ContractForm } if previousFile.ReverseIdentityCard != nil { ReverseIdentityCard = previousFile.ReverseIdentityCard } if previousFile.IdentityCardNumber != nil { IdentityCardNumber = previousFile.IdentityCardNumber } } if previousFile == nil { //log.Printf("No previous file found for ID: %d", id) return nil } return &employee.SaveEmployeeFileRequest{ Id: id, CompanyId: in.CompanyId, CostCenterId: in.CostCenterId, JobNumber: in.JobNumber, CardNumber: in.CardNumber, Name: in.Name, SexId: in.SexId, DateOfBirth: in.DateOfBirth, InPersonTel: in.InPersonTel, IdNumber: in.IdNumber, StartIdNumber: in.StartIdNumber, EndIdNumber: in.EndIdNumber, PoliticalStatusId: in.PoliticalStatusId, NativePlace: in.NativePlace, DomicileAddress: in.DomicileAddress, PresentAddress: in.PresentAddress, MaritalStatusId: in.MaritalStatusId, EmergencyContact1: in.EmergencyContact1, Relation1: in.Relation1, EmergencyContact1Tel: in.EmergencyContact1Tel, EmergencyContact2: in.EmergencyContact2, Relation2: in.Relation2, EmergencyContact2Tel: in.EmergencyContact2Tel, SpouseSName: in.SpouseSName, NameOfChild: in.NameOfChild, SexOfChild: in.SexOfChild, DateOfBirthOfChild: in.DateOfBirthOfChild, NatureOfEmploymentId: in.NatureOfEmploymentId, ContractTypeId: in.ContractTypeId, ProbationPeriodStart: in.ProbationPeriodStart, ProbationPeriodEnd: in.ProbationPeriodEnd, PersonnelSourceId: in.PersonnelSourceId, SourceRemarks: in.SourceRemarks, WorkingConditionId: in.WorkingConditionId, DateOfEntry: in.DateOfEntry, LaborContractStart: in.LaborContractStart, LaborContractEnd: in.LaborContractEnd, LaborSecurity: in.LaborSecurity, BankCardNumber: in.BankCardNumber, BankOfDeposit: in.BankOfDeposit, PaymentBankNumber: in.PaymentBankNumber, SocialSecurityNumber: in.SocialSecurityNumber, ProvidentFundNumber: in.ProvidentFundNumber, EducationalBackgroundId: in.EducationalBackgroundId, AcademicNote: in.AcademicNote, GraduateSchool: in.GraduateSchool, ProfessionalName: in.ProfessionalName, QualificationDocument: in.QualificationDocument, BasicPay: in.BasicPay, ChiefAddition: in.ChiefAddition, PostWage: in.PostWage, MeritPay: in.MeritPay, OtherAllowances: in.OtherAllowances, ProfessionalTitleSubsidy: in.ProfessionalTitleSubsidy, SkillGrant: in.SkillGrant, PreTaxSalary: in.PreTaxSalary, SocialSecurityBase: in.SocialSecurityBase, SalaryNote: in.SalaryNote, CompanyPension: in.CompanyPension, CompanyMedicine: in.CompanyMedicine, CompanyBeUnemployed: in.CompanyBeUnemployed, CompanyOccupationalInjury: in.CompanyOccupationalInjury, CompanyGiveBirth: in.CompanyGiveBirth, CompanyReserveFund: in.CompanyReserveFund, PersonagePension: in.PersonagePension, PersonageMedicine: in.PersonageMedicine, PersonageBeUnemployed: in.PersonageBeUnemployed, PersonageOccupationalInjury: in.PersonageOccupationalInjury, PersonageGiveBirth: in.PersonageGiveBirth, PersonageReserveFund: in.PersonageReserveFund, ResignationDate: in.ResignationDate, ReasonForResignation: in.ReasonForResignation, ResignationNote: in.ResignationNote, DateOfConversion: in.DateOfConversion, RemarksOnConversion: in.RemarksOnConversion, Source: in.Source, RecentImg: in.RecentImg, TransferredDepartment: in.TransferredDepartment, TransferredPost: in.TransferredPost, Mailbox: in.Mailbox, ApplicationForm: ApplicationForm, CurriculumVitae: CurriculumVitae, ContractForm: ContractForm, ModifyOrNot: in.ModifyOrNot, IdentityCardNumber: ReverseIdentityCard, ReverseIdentityCard: IdentityCardNumber, // GraduationCertificate: GraduationCertificate, DegreeCertificate: DegreeCertificate, OtherCertificates: OtherCertificates, Operator: in.Operator, OperatorName: in.OperatorName, } } func CreateAMallAccount(in *employee.CreateEmployeeFileRequest, employeeFileId uint64) (id uint64, err error) { var departmentIds []uint64 for _, i := range in.DepartmentPostList { departmentIds = append(departmentIds, i.DepartmentId) } departmentRes, err := service.DepartmentProvider.Details(context.Background(), &department.DetailsRequest{ IDs: departmentIds, Domain: "fontree", }) if err != nil { return 0, err } var departmentId, leaderId, referStore uint64 for _, i := range departmentRes.Data { if i.SyncID != "0" && i.SyncID != "" { referStore, err = strconv.ParseUint(i.SyncID, 10, 64) if err != nil { return 0, errors.New("商城创建账号:销售部门ID转换失败") } departmentId = i.ID } else { return 0, errors.New("商城创建账号:无销售部门") } } leaderList, err := service.DepartmentProvider.MyDepartmentsDirectLeaders(context.Background(), &department.MyDepartmentsDirectLeadersRequest{ UserId: uint32(in.UserId), DepartmentIds: []uint64{departmentId}, Domain: "fontree", }) if len(leaderList.List) != 0 { for _, i := range leaderList.List { leaderId = uint64(i.UserId) } } else { return 0, errors.New("商城创建账号:无部门主管") } leaderInfo, err := service.AccountProvider.Info(context.Background(), &account.InfoRequest{ Domain: "fontree", ID: leaderId, }) if err != nil { return 0, err } MallAccountInfo, err := service.GrpcEmployeeProvider.CreateAMallAccount(context.Background(), &employee.CreateAMallAccountRequest{ UserName: in.Name, TelNumber: in.InPersonTel, ReferTel: leaderInfo.Info.TelNum, SiteId: int32(referStore), EmployeeFileId: employeeFileId, UserId: in.UserId, }) if err != nil { return 0, err } return MallAccountInfo.Id, nil }