|
|
@@ -6,13 +6,16 @@ import (
|
|
|
"fmt"
|
|
|
dao "lims_adapter/dao/feedback"
|
|
|
"lims_adapter/model/feedback"
|
|
|
+ "strconv"
|
|
|
|
|
|
+ "dashoo.cn/common_definition/admin/dict_def"
|
|
|
"dashoo.cn/common_definition/admin/permission_def"
|
|
|
"dashoo.cn/micro_libary/micro_srv"
|
|
|
"dashoo.cn/micro_libary/myerrors"
|
|
|
"dashoo.cn/micro_libary/request"
|
|
|
"github.com/gogf/gf/os/gtime"
|
|
|
"github.com/gogf/gf/util/gvalid"
|
|
|
+ "github.com/xuri/excelize/v2"
|
|
|
)
|
|
|
|
|
|
const PermissionFeedbackProcess = "feedback:process"
|
|
|
@@ -344,6 +347,122 @@ func (s FeedbackService) Processor(ctx context.Context) ([]feedback.FeedbackProc
|
|
|
return rsp, err
|
|
|
}
|
|
|
|
|
|
+func (s FeedbackService) Export(ctx context.Context, req *feedback.FeedbackListReq) (*excelize.File, error) {
|
|
|
+ _, data, err := s.List(ctx, req)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ dictService := micro_srv.InitMicroSrvClient("Dict", "micro_srv.admin")
|
|
|
+ defer dictService.Close()
|
|
|
+ rsp := &dict_def.DictDataResp{}
|
|
|
+ err = dictService.Call(context.TODO(), "GetDictDataByType", &dict_def.DictReq{
|
|
|
+ Tenant: s.Tenant,
|
|
|
+ DictCode: "OpinionsContent",
|
|
|
+ }, rsp)
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("获取反馈类型失败 %s", err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ typeMap := map[string]string{}
|
|
|
+ for _, i := range rsp.List {
|
|
|
+ typeMap[i.Key] = i.Value
|
|
|
+ }
|
|
|
+ statusMap := map[int]string{
|
|
|
+ 1: "未处理",
|
|
|
+ 2: "已处理",
|
|
|
+ }
|
|
|
+
|
|
|
+ f := excelize.NewFile()
|
|
|
+ sheet := "Sheet1"
|
|
|
+ header := []string{
|
|
|
+ "反馈人姓名", "反馈时间", "反馈类型", "反馈内容", "处理状态", "处理人", "处理时间",
|
|
|
+ }
|
|
|
+ colWidth := []float64{
|
|
|
+ 12, 20, 12, 40, 12, 12, 20,
|
|
|
+ }
|
|
|
+
|
|
|
+ colStyle, err := f.NewStyle(&excelize.Style{
|
|
|
+ Alignment: &excelize.Alignment{
|
|
|
+ Horizontal: "center",
|
|
|
+ Vertical: "center",
|
|
|
+ WrapText: true,
|
|
|
+ },
|
|
|
+ Font: &excelize.Font{
|
|
|
+ Size: 11,
|
|
|
+ Family: "宋体",
|
|
|
+ },
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ headerStyle, err := f.NewStyle(&excelize.Style{
|
|
|
+ Alignment: &excelize.Alignment{
|
|
|
+ Horizontal: "center",
|
|
|
+ },
|
|
|
+ Fill: excelize.Fill{
|
|
|
+ Type: "pattern",
|
|
|
+ Color: []string{"#a6a6a6"},
|
|
|
+ Pattern: 1,
|
|
|
+ },
|
|
|
+ Border: []excelize.Border{
|
|
|
+ {Type: "left", Color: "#000000", Style: 1},
|
|
|
+ {Type: "top", Color: "#000000", Style: 1},
|
|
|
+ {Type: "bottom", Color: "#000000", Style: 1},
|
|
|
+ {Type: "right", Color: "#000000", Style: 1},
|
|
|
+ },
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ lastcol, err := excelize.ColumnNumberToName(len(header))
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = f.SetColStyle(sheet, "A:"+lastcol, colStyle)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = f.SetCellStyle(sheet, "A1", lastcol+"1", headerStyle)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ for i := range header {
|
|
|
+ n, err := excelize.ColumnNumberToName(i + 1)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ f.SetCellValue(sheet, n+"1", header[i])
|
|
|
+ }
|
|
|
+
|
|
|
+ for i, w := range colWidth {
|
|
|
+ n, err := excelize.ColumnNumberToName(i + 1)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ err = f.SetColWidth(sheet, n, n, w)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for row, item := range data {
|
|
|
+ rowName := strconv.Itoa(row + 2)
|
|
|
+ f.SetCellValue(sheet, "A"+rowName, item.CreatedByName)
|
|
|
+ f.SetCellValue(sheet, "B"+rowName, item.CreatedAt)
|
|
|
+ f.SetCellValue(sheet, "C"+rowName, typeMap[item.Type])
|
|
|
+ f.SetCellValue(sheet, "D"+rowName, item.Content)
|
|
|
+ f.SetCellValue(sheet, "E"+rowName, statusMap[item.Status])
|
|
|
+ f.SetCellValue(sheet, "F"+rowName, item.CurrentProcessorName)
|
|
|
+ f.SetCellValue(sheet, "G"+rowName, item.ProcessedAt)
|
|
|
+ }
|
|
|
+
|
|
|
+ index := f.NewSheet(sheet)
|
|
|
+ f.SetActiveSheet(index)
|
|
|
+ return f, nil
|
|
|
+}
|
|
|
+
|
|
|
func Allow(tenant, uuid, permission string) (bool, error) {
|
|
|
permissionSrv := micro_srv.InitMicroSrvClient("Permission", "micro_srv.admin")
|
|
|
defer permissionSrv.Close()
|