正在显示
4 个修改的文件
包含
147 行增加
和
53 行删除
| 1 | +package service | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "strings" | ||
| 6 | + | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/dao" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +// 员工绩效-综合管理-导出绩效指标 | ||
| 11 | + | ||
| 12 | +// excel表头部字段 | ||
| 13 | +type headerLevel struct { | ||
| 14 | + Name string | ||
| 15 | + Filter map[string]int | ||
| 16 | + Child []headerLevel | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +// 添加下一层级的字段 | ||
| 20 | +func (h *headerLevel) addChild(name string) (child *headerLevel) { | ||
| 21 | + cIndex, ok := h.Filter[name] | ||
| 22 | + if !ok { | ||
| 23 | + h.Child = append(h.Child, headerLevel{ | ||
| 24 | + Name: name, | ||
| 25 | + Filter: map[string]int{}, | ||
| 26 | + Child: []headerLevel{}, | ||
| 27 | + }) | ||
| 28 | + h.Filter[name] = len(h.Child) - 1 | ||
| 29 | + cIndex = h.Filter[name] | ||
| 30 | + } | ||
| 31 | + return &h.Child[cIndex] | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +// 获取表头的所有列表名 | ||
| 35 | +func (h *headerLevel) collectAllColumn(all *[][]string) { | ||
| 36 | + for _, v := range h.Child { | ||
| 37 | + v.collectColumn(&v, all, nil) | ||
| 38 | + } | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +func (h *headerLevel) collectColumn(child *headerLevel, columns *[][]string, column *[]string) { | ||
| 42 | + if column == nil { | ||
| 43 | + column = &[]string{} | ||
| 44 | + } | ||
| 45 | + *column = append(*column, h.Name) | ||
| 46 | + for _, v := range child.Child { | ||
| 47 | + if len(v.Child) > 0 { | ||
| 48 | + v.collectColumn(&v, columns, column) | ||
| 49 | + } | ||
| 50 | + if len(v.Child) == 0 { | ||
| 51 | + item := make([]string, len(*column)) | ||
| 52 | + copy(item, *column) | ||
| 53 | + item = append(item, v.Name) | ||
| 54 | + *columns = append(*columns, item) | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +type exportData struct { | ||
| 60 | + userName []string //员工的名称列表 ,对应excel文件的多个sheet | ||
| 61 | + usrIdMap map[string]string | ||
| 62 | + userDayMap map[string][]string //每个员工对应的日期列表 key=员工名称 value= 日期列表 | ||
| 63 | + tableHeader map[string]*headerLevel //每个员工数据表格对应表头 key=员工名称 | ||
| 64 | + data map[string]*strings.Builder //每个员工表头对应的评估填写的数据 key=员工名称+日期+表头 | ||
| 65 | + data2 map[string]string //每个员工评估项的标准描述 | ||
| 66 | + data3 map[string]string //每个员工评估项的标准权重 | ||
| 67 | +} | ||
| 68 | + | ||
| 69 | +// 设置表格头部字段。和对应的员工列表 | ||
| 70 | +func (e *exportData) setCategoryNameList(param []dao.ContentCategoryName) { | ||
| 71 | + for _, v := range param { | ||
| 72 | + if _, ok := e.usrIdMap[v.TargetUserId]; !ok { | ||
| 73 | + if _, ok := e.tableHeader[v.TargetUserName]; ok { | ||
| 74 | + //出现重名,id不同但名称相同 | ||
| 75 | + uname := fmt.Sprintf("%s%d", v.TargetUserName, len(e.usrIdMap)) | ||
| 76 | + e.usrIdMap[v.TargetUserId] = uname | ||
| 77 | + } else { | ||
| 78 | + e.usrIdMap[v.TargetUserId] = v.TargetUserName | ||
| 79 | + } | ||
| 80 | + e.userName = append(e.userName, e.usrIdMap[v.TargetUserId]) | ||
| 81 | + } | ||
| 82 | + userName := e.usrIdMap[v.TargetUserId] | ||
| 83 | + if _, ok := e.tableHeader[userName]; !ok { | ||
| 84 | + e.tableHeader[userName] = &headerLevel{ | ||
| 85 | + Name: "个人绩效评估等级统计表", | ||
| 86 | + Filter: map[string]int{}, | ||
| 87 | + Child: []headerLevel{}, | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + child := e.tableHeader[userName].addChild(v.Category) //第一级,"分类" | ||
| 91 | + if v.Weight == 0 { | ||
| 92 | + child = child.addChild("加分项") //第二级 '得分项' '加分项' | ||
| 93 | + } else { | ||
| 94 | + child = child.addChild("得分项") //第二级 '得分项' '加分项' | ||
| 95 | + } | ||
| 96 | + child.addChild(v.Name) //第三级 评估项名称 | ||
| 97 | + } | ||
| 98 | +} | ||
| 99 | + | ||
| 100 | +func (e *exportData) setData(param []*dao.ExportData2) { | ||
| 101 | + userName := "" | ||
| 102 | + key := "" | ||
| 103 | + userDay := map[string]struct{}{} | ||
| 104 | + for _, v := range param { | ||
| 105 | + //员工填写的评估内容 | ||
| 106 | + if _, ok := e.usrIdMap[v.TargetUserId]; !ok { | ||
| 107 | + continue | ||
| 108 | + } | ||
| 109 | + userName = e.usrIdMap[v.TargetUserId] | ||
| 110 | + if v.Weight == 0 { | ||
| 111 | + key = fmt.Sprintf("%s-%s-加分项-%s-%s", userName, v.BeginDay, v.Category, v.ContentName) | ||
| 112 | + e.data3[key] = "" | ||
| 113 | + } else { | ||
| 114 | + key = fmt.Sprintf("%s-%s-得分项-%s-%s", userName, v.BeginDay, v.Category, v.ContentName) | ||
| 115 | + e.data3[key] = fmt.Sprintf("%.2f %%", v.Weight) | ||
| 116 | + } | ||
| 117 | + e.data[key] = &strings.Builder{} | ||
| 118 | + e.data[key].WriteString(v.Value + "\n") //填写的等级 | ||
| 119 | + for _, vv := range v.Remark { | ||
| 120 | + e.data[key].WriteString(vv.Definition + "\n") | ||
| 121 | + e.data[key].WriteString(vv.RemarkText + "\n") | ||
| 122 | + } | ||
| 123 | + e.data2[key] = v.PromptText | ||
| 124 | + if _, ok := userDay[userName+v.BeginDay]; !ok { | ||
| 125 | + userDay[userName+v.BeginDay] = struct{}{} | ||
| 126 | + e.userDayMap[userName] = append(e.userDayMap[userName], v.BeginDay) | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | +} |
| @@ -615,11 +615,23 @@ func (srv StaffAssessServeice) ExportUserAssess2(param *query.SummaryCommand) (* | @@ -615,11 +615,23 @@ func (srv StaffAssessServeice) ExportUserAssess2(param *query.SummaryCommand) (* | ||
| 615 | break | 615 | break |
| 616 | } | 616 | } |
| 617 | } | 617 | } |
| 618 | - assessDao := dao.NewStaffAssessDao(map[string]interface{}{ | ||
| 619 | - "transactionContext": transactionContext, | ||
| 620 | - }) | 618 | + // assessDao := dao.NewStaffAssessDao(map[string]interface{}{ |
| 619 | + // "transactionContext": transactionContext, | ||
| 620 | + // }) | ||
| 621 | + // 获取所有的评估项 | ||
| 622 | + // categoryNameList, err := assessDao.SearchContentCategoryName(param.CompanyId, param.CycleId, param.OperatorId, hrbp) | ||
| 623 | + // if err != nil { | ||
| 624 | + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 625 | + // } | ||
| 626 | + // categoryNameTree := map[string]headerLevel{} | ||
| 627 | + // userNameMap := map[string]struct{}{} //处理员工重名 | ||
| 628 | + // userIdMap := map[string]string{} //映射员工id和员工名称 | ||
| 629 | + // userNameList := []string{} //员工名称列表 | ||
| 621 | if err := transactionContext.CommitTransaction(); err != nil { | 630 | if err := transactionContext.CommitTransaction(); err != nil { |
| 622 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 631 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 623 | } | 632 | } |
| 633 | + | ||
| 634 | + // tableHeader := excelTableHeader{} | ||
| 635 | + | ||
| 624 | return nil, nil | 636 | return nil, nil |
| 625 | } | 637 | } |
| @@ -7,50 +7,3 @@ type excelTableHeader struct { | @@ -7,50 +7,3 @@ type excelTableHeader struct { | ||
| 7 | Level3 string | 7 | Level3 string |
| 8 | Level4 string | 8 | Level4 string |
| 9 | } | 9 | } |
| 10 | - | ||
| 11 | -// excel表头部字段 | ||
| 12 | -type HeaderLevel struct { | ||
| 13 | - Name string | ||
| 14 | - Filter map[string]int | ||
| 15 | - Child []HeaderLevel | ||
| 16 | -} | ||
| 17 | - | ||
| 18 | -// 添加下一层级的字段 | ||
| 19 | -func (h *HeaderLevel) AddChild(name string) (child *HeaderLevel) { | ||
| 20 | - cIndex, ok := h.Filter[name] | ||
| 21 | - if !ok { | ||
| 22 | - h.Child = append(h.Child, HeaderLevel{ | ||
| 23 | - Name: name, | ||
| 24 | - Filter: map[string]int{}, | ||
| 25 | - Child: []HeaderLevel{}, | ||
| 26 | - }) | ||
| 27 | - h.Filter[name] = len(h.Child) - 1 | ||
| 28 | - cIndex = h.Filter[name] | ||
| 29 | - } | ||
| 30 | - return &h.Child[cIndex] | ||
| 31 | -} | ||
| 32 | - | ||
| 33 | -// 获取表头的所有列表名 | ||
| 34 | -func (h *HeaderLevel) CollectAllColumn(all *[][]string) { | ||
| 35 | - for _, v := range h.Child { | ||
| 36 | - v.collectColumn(&v, all, nil) | ||
| 37 | - } | ||
| 38 | -} | ||
| 39 | - | ||
| 40 | -func (h *HeaderLevel) collectColumn(child *HeaderLevel, columns *[][]string, column *[]string) { | ||
| 41 | - if column == nil { | ||
| 42 | - column = &[]string{} | ||
| 43 | - } | ||
| 44 | - *column = append(*column, h.Name) | ||
| 45 | - for _, v := range child.Child { | ||
| 46 | - if len(v.Child) > 0 { | ||
| 47 | - v.collectColumn(&v, columns, column) | ||
| 48 | - } | ||
| 49 | - if len(v.Child) == 0 { | ||
| 50 | - item := make([]string, len(*column)) | ||
| 51 | - copy(item, *column) | ||
| 52 | - item = append(item, v.Name) | ||
| 53 | - *columns = append(*columns, item) | ||
| 54 | - } | ||
| 55 | - } | ||
| 56 | -} |
| @@ -647,7 +647,7 @@ func (d *StaffAssessDao) CountAssessCycleMe(executorId int, companyId int) (int, | @@ -647,7 +647,7 @@ func (d *StaffAssessDao) CountAssessCycleMe(executorId int, companyId int) (int, | ||
| 647 | type ContentCategoryName struct { | 647 | type ContentCategoryName struct { |
| 648 | Category string //指标分类 | 648 | Category string //指标分类 |
| 649 | Name string //指标名称 | 649 | Name string //指标名称 |
| 650 | - Weight string //指标权重 | 650 | + Weight float64 //指标权重 |
| 651 | CycleId string //周期id | 651 | CycleId string //周期id |
| 652 | CycleName string //周期名称 | 652 | CycleName string //周期名称 |
| 653 | TargetUserId string //评估的目标员工id | 653 | TargetUserId string //评估的目标员工id |
| @@ -710,7 +710,7 @@ type ExportData2 struct { | @@ -710,7 +710,7 @@ type ExportData2 struct { | ||
| 710 | // cycleId int, 评估周期id | 710 | // cycleId int, 评估周期id |
| 711 | // userId int, 用户id,谁要查看数据 | 711 | // userId int, 用户id,谁要查看数据 |
| 712 | // hrbp 是否搜索HRBP角色的用户可以查看,1:是;-1:否 | 712 | // hrbp 是否搜索HRBP角色的用户可以查看,1:是;-1:否 |
| 713 | -func (d *StaffAssessDao) ExportDataUserAssess2(companyId int, cycleId int, operaterId int, hrbp int) ([]ExportData1, error) { | 713 | +func (d *StaffAssessDao) ExportDataUserAssess2(companyId int, cycleId int, operaterId int, hrbp int) ([]*ExportData2, error) { |
| 714 | sqlStr := ` select | 714 | sqlStr := ` select |
| 715 | t_staff_assess_1.target_user_id, | 715 | t_staff_assess_1.target_user_id, |
| 716 | t_staff_assess_1.target_user_name, | 716 | t_staff_assess_1.target_user_name, |
| @@ -734,7 +734,7 @@ func (d *StaffAssessDao) ExportDataUserAssess2(companyId int, cycleId int, opera | @@ -734,7 +734,7 @@ func (d *StaffAssessDao) ExportDataUserAssess2(companyId int, cycleId int, opera | ||
| 734 | sqlStr0 := d.useTStaffAssess(companyId, cycleId, operaterId, "", hrbp, 5000, 0, string(domain.AssessSelf)) | 734 | sqlStr0 := d.useTStaffAssess(companyId, cycleId, operaterId, "", hrbp, 5000, 0, string(domain.AssessSelf)) |
| 735 | sqlStr = sqlStr0 + sqlStr | 735 | sqlStr = sqlStr0 + sqlStr |
| 736 | tx := d.transactionContext.PgTx | 736 | tx := d.transactionContext.PgTx |
| 737 | - var result []ExportData1 | 737 | + result := []*ExportData2{} |
| 738 | _, err := tx.Query(&result, sqlStr, condition...) | 738 | _, err := tx.Query(&result, sqlStr, condition...) |
| 739 | return result, err | 739 | return result, err |
| 740 | } | 740 | } |
-
请 注册 或 登录 后发表评论