作者 Your Name

输出excel

@@ -66,6 +66,18 @@ type exportData struct { @@ -66,6 +66,18 @@ type exportData struct {
66 data3 map[string]string //每个员工评估项的标准权重 66 data3 map[string]string //每个员工评估项的标准权重
67 } 67 }
68 68
  69 +func newExportData() *exportData {
  70 + return &exportData{
  71 + userName: nil,
  72 + usrIdMap: map[string]string{},
  73 + userDayMap: map[string][]string{},
  74 + tableHeader: map[string]*headerLevel{},
  75 + data: map[string]*strings.Builder{},
  76 + data2: map[string]string{},
  77 + data3: map[string]string{},
  78 + }
  79 +}
  80 +
69 // 设置表格头部字段。和对应的员工列表 81 // 设置表格头部字段。和对应的员工列表
70 func (e *exportData) setCategoryNameList(param []dao.ContentCategoryName) { 82 func (e *exportData) setCategoryNameList(param []dao.ContentCategoryName) {
71 for _, v := range param { 83 for _, v := range param {
@@ -88,11 +100,8 @@ func (e *exportData) setCategoryNameList(param []dao.ContentCategoryName) { @@ -88,11 +100,8 @@ func (e *exportData) setCategoryNameList(param []dao.ContentCategoryName) {
88 } 100 }
89 } 101 }
90 child := e.tableHeader[userName].addChild(v.Category) //第一级,"分类" 102 child := e.tableHeader[userName].addChild(v.Category) //第一级,"分类"
91 - if v.Weight == 0 {  
92 - child = child.addChild("加分项") //第二级 '得分项' '加分项'  
93 - } else {  
94 - child = child.addChild("得分项") //第二级 '得分项' '加分项'  
95 - } 103 + weight := e.weightDesc(v.Weight)
  104 + child = child.addChild(weight) //第二级 '得分项' '加分项'
96 child.addChild(v.Name) //第三级 评估项名称 105 child.addChild(v.Name) //第三级 评估项名称
97 } 106 }
98 } 107 }
@@ -107,23 +116,46 @@ func (e *exportData) setData(param []*dao.ExportData2) { @@ -107,23 +116,46 @@ func (e *exportData) setData(param []*dao.ExportData2) {
107 continue 116 continue
108 } 117 }
109 userName = e.usrIdMap[v.TargetUserId] 118 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 - } 119 + weight := e.weightDesc(v.Weight)
  120 + key = e.dataKey(userName, v.BeginDay, v.Category, weight, v.ContentName)
117 e.data[key] = &strings.Builder{} 121 e.data[key] = &strings.Builder{}
118 e.data[key].WriteString(v.Value + "\n") //填写的等级 122 e.data[key].WriteString(v.Value + "\n") //填写的等级
119 for _, vv := range v.Remark { 123 for _, vv := range v.Remark {
120 e.data[key].WriteString(vv.Definition + "\n") 124 e.data[key].WriteString(vv.Definition + "\n")
121 e.data[key].WriteString(vv.RemarkText + "\n") 125 e.data[key].WriteString(vv.RemarkText + "\n")
122 } 126 }
123 - e.data2[key] = v.PromptText  
124 if _, ok := userDay[userName+v.BeginDay]; !ok { 127 if _, ok := userDay[userName+v.BeginDay]; !ok {
125 userDay[userName+v.BeginDay] = struct{}{} 128 userDay[userName+v.BeginDay] = struct{}{}
126 e.userDayMap[userName] = append(e.userDayMap[userName], v.BeginDay) 129 e.userDayMap[userName] = append(e.userDayMap[userName], v.BeginDay)
127 } 130 }
  131 + key23 := e.data23Key(userName, v.Category, weight, v.ContentName)
  132 + e.data2[key23] = v.PromptText
  133 + if v.Weight == 0 {
  134 + e.data3[key23] = ""
  135 + } else {
  136 + e.data3[key23] = fmt.Sprintf("%.2f %%", v.Weight)
  137 + }
128 } 138 }
129 } 139 }
  140 +
  141 +func (e *exportData) dataKey(userName string, beginDay string, category string, weight string, contentName string) string {
  142 + key := fmt.Sprintf("%s-%s-%s-%s-%s", userName, weight, beginDay, category, contentName)
  143 + return key
  144 +}
  145 +
  146 +func (e *exportData) data23Key(userName string, category string, weight string, contentName string) string {
  147 + key := fmt.Sprintf("%s-%s-%s-%s", userName, weight, category, contentName)
  148 + return key
  149 +}
  150 +
  151 +func (e *exportData) weightDesc(weight float64) string {
  152 + if weight == 0 {
  153 + return "加分项"
  154 + } else {
  155 + return "得分项"
  156 + }
  157 +}
  158 +
  159 +func (e *exportData) userDayKey(userName string) string {
  160 + return userName
  161 +}
@@ -227,38 +227,7 @@ func (srv StaffAssessServeice) ExportUserAssess(param *query.ListAssessContentCy @@ -227,38 +227,7 @@ func (srv StaffAssessServeice) ExportUserAssess(param *query.ListAssessContentCy
227 if err != nil { 227 if err != nil {
228 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 228 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
229 } 229 }
230 - //roleRepo := factory.CreateRoleRepository(map[string]interface{}{  
231 - // "transactionContext": transactionContext,  
232 - //})  
233 - //roleUserRepo := factory.CreateRoleUserRepository(map[string]interface{}{  
234 - // "transactionContext": transactionContext,  
235 - //})  
236 - //_, roleList, err := roleRepo.Find(map[string]interface{}{  
237 - // "type": domain.RoleTypeSystem,  
238 - // "companyId": param.CompanyId,  
239 - //})  
240 - //if err != nil {  
241 - // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取角色信息列表"+err.Error())  
242 - //}  
243 - //_, userRoleList, err := roleUserRepo.Find(map[string]interface{}{  
244 - // "companyId": param.CompanyId,  
245 - // "userId": param.OperaterId,  
246 - //})  
247 - //if err != nil {  
248 - // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取用户的角色信息列表"+err.Error())  
249 - //}  
250 - //hrbp := -1  
251 - //for _, v := range userRoleList {  
252 - // for _, v2 := range roleList {  
253 - // if v.RoleId == v2.Id {  
254 - // hrbp = 1  
255 - // break  
256 - // }  
257 - // }  
258 - // if hrbp == 1 {  
259 - // break  
260 - // }  
261 - //} 230 +
262 assessDao := dao.NewStaffAssessDao(map[string]interface{}{ 231 assessDao := dao.NewStaffAssessDao(map[string]interface{}{
263 "transactionContext": transactionContext, 232 "transactionContext": transactionContext,
264 }) 233 })
@@ -595,56 +564,99 @@ func (srv StaffAssessServeice) ExportUserAssess2(param *query.SummaryCommand) (* @@ -595,56 +564,99 @@ func (srv StaffAssessServeice) ExportUserAssess2(param *query.SummaryCommand) (*
595 defer func() { 564 defer func() {
596 _ = transactionContext.RollbackTransaction() 565 _ = transactionContext.RollbackTransaction()
597 }() 566 }()
598 -  
599 - roleRepo := factory.CreateRoleRepository(map[string]interface{}{  
600 - "transactionContext": transactionContext,  
601 - })  
602 - roleUserRepo := factory.CreateRoleUserRepository(map[string]interface{}{  
603 - "transactionContext": transactionContext,  
604 - })  
605 - _, roleList, err := roleRepo.Find(map[string]interface{}{  
606 - "type": domain.RoleTypeSystem,  
607 - "companyId": param.CompanyId,  
608 - }) 567 + hrbp, err := srv.getHRBP(transactionContext, param.CompanyId, param.OperatorId)
609 if err != nil { 568 if err != nil {
610 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取用户的角色信息列表"+err.Error()) 569 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
611 } 570 }
612 - _, userRoleList, err := roleUserRepo.Find(map[string]interface{}{  
613 - "companyId": param.CompanyId,  
614 - "userId": param.OperatorId, 571 + assessDao := dao.NewStaffAssessDao(map[string]interface{}{
  572 + "transactionContext": transactionContext,
615 }) 573 })
  574 + // 获取所有的评估项
  575 + categoryNameList, err := assessDao.SearchContentCategoryName(param.CompanyId, param.CycleId, param.OperatorId, hrbp)
616 if err != nil { 576 if err != nil {
617 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取用户的角色信息列表"+err.Error())  
618 - }  
619 - hrbp := -1  
620 - for _, v := range userRoleList {  
621 - for _, v2 := range roleList {  
622 - if v.RoleId == v2.Id {  
623 - hrbp = 1  
624 - break  
625 - }  
626 - }  
627 - if hrbp == 1 {  
628 - break 577 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
629 } 578 }
  579 + //获取员工填写的评估
  580 + userAssessList, err := assessDao.ExportDataUserAssess2(
  581 + param.CompanyId,
  582 + param.CycleId,
  583 + param.OperatorId,
  584 + hrbp,
  585 + )
  586 + if err != nil {
  587 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
630 } 588 }
631 - // assessDao := dao.NewStaffAssessDao(map[string]interface{}{  
632 - // "transactionContext": transactionContext,  
633 - // })  
634 - // 获取所有的评估项  
635 - // categoryNameList, err := assessDao.SearchContentCategoryName(param.CompanyId, param.CycleId, param.OperatorId, hrbp)  
636 - // if err != nil {  
637 - // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
638 - // }  
639 - // categoryNameTree := map[string]headerLevel{}  
640 - // userNameMap := map[string]struct{}{} //处理员工重名  
641 - // userIdMap := map[string]string{} //映射员工id和员工名称  
642 - // userNameList := []string{} //员工名称列表  
643 if err := transactionContext.CommitTransaction(); err != nil { 589 if err := transactionContext.CommitTransaction(); err != nil {
644 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 590 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
645 } 591 }
646 -  
647 - // tableHeader := excelTableHeader{}  
648 -  
649 - return nil, nil 592 + eData := newExportData()
  593 + eData.setCategoryNameList(categoryNameList)
  594 + eData.setData(userAssessList)
  595 + xlsxFile := excelize.NewFile()
  596 + //设置默认的第一个sheet
  597 + sheetIndex := xlsxFile.GetActiveSheetIndex()
  598 + firstSheetName := xlsxFile.GetSheetName(sheetIndex)
  599 + cycleName := ""
  600 + if len(userAssessList) > 0 {
  601 + cycleName = userAssessList[0].CycleName
  602 + }
  603 + //填入excel 文件
  604 + for _, v := range eData.userName {
  605 + // 根据员工名称 添加一个sheet
  606 + xlsxFile.NewSheet(v)
  607 + //填写前4行数据
  608 + tableHeader, ok := eData.tableHeader[v]
  609 + if !ok {
  610 + continue
  611 + }
  612 + xlsxFile.SetCellStr(v, "B2", v)
  613 + //填充第一列数据
  614 + xlsxFile.SetCellStr(v, "A2", cycleName)
  615 + xlsxFile.SetCellStr(v, "A1", tableHeader.Name)
  616 + xlsxFile.SetCellStr(v, "A5", "权重")
  617 + xlsxFile.SetCellStr(v, "A6", "评估标准")
  618 + //日期
  619 + dayList := eData.userDayMap[v]
  620 + for ii, vv := range dayList {
  621 + if ii == 0 {
  622 + axis := fmt.Sprintf("A%d", ii+7)
  623 + xlsxFile.SetCellStr(v, axis, vv)
  624 + } else {
  625 + axis := fmt.Sprintf("A%d", ii+7+2)
  626 + xlsxFile.SetCellStr(v, axis, vv)
  627 + }
  628 + }
  629 + for _, v2 := range tableHeader.Child {
  630 + //第二行
  631 + for _, v3 := range v2.Child {
  632 + //第三行
  633 + for i4, v4 := range v3.Child {
  634 + //按列填充数据
  635 + colName, _ := excelize.ColumnNumberToName(i4 + 3) //第3列开始
  636 + xlsxFile.SetCellStr(v, colName+"2", v2.Name) //分类
  637 + xlsxFile.SetCellStr(v, colName+"3", v3.Name) //加分项 得分项
  638 + xlsxFile.SetCellStr(v, colName+"4", v4.Name) // 评估项名称
  639 + //权重 填写第5行数据
  640 + k23 := eData.data23Key(v, v2.Name, v3.Name, v4.Name)
  641 + xlsxFile.SetCellStr(v, colName+"5", eData.data3[k23])
  642 + //评估标准 填写第6行数据
  643 + xlsxFile.SetCellStr(v, colName+"6", eData.data2[k23])
  644 + //按日期填充评估的填写的值
  645 + for i5, v5 := range dayList {
  646 + k1 := eData.dataKey(v, v5, v2.Name, v3.Name, v4.Name)
  647 + if i5 > 0 {
  648 + axis := fmt.Sprintf("%s%d", colName, i5+7+2) //单元格高度按三个单元格合并
  649 + xlsxFile.SetCellStr(v, axis, eData.data[k1].String())
  650 + } else {
  651 + axis := fmt.Sprintf("%s%d", colName, i5+7)
  652 + xlsxFile.SetCellStr(v, axis, eData.data[k1].String())
  653 + }
  654 + }
  655 + }
  656 + }
  657 + }
  658 + }
  659 + //删除默认的第一个sheet
  660 + xlsxFile.DeleteSheet(firstSheetName)
  661 + return xlsxFile, nil
650 } 662 }