package service import ( "fmt" "github.com/xuri/excelize/v2" "strconv" "time" "wms/models" "wms/pkg/logx" "wms/request" ) type MonthFormsService struct{} func NewMonthFormsService() *MonthFormsService { return &MonthFormsService{} } func (slf *MonthFormsService) Query(params request.GetMonthStats) (result []*models.MonthStats, err error) { search := slf.BuildSearch(params) search = search.SetPage(params.Page, params.PageSize) return search.FindNotTotal() } func (slf *MonthFormsService) BuildSearch(params request.GetMonthStats) (search *models.MonthStatsSearch) { search = models.NewMonthStatsSearch().SetKeyword(params.Keyword).SetDate(params.Date) return search } func (slf *MonthFormsService) Count(params request.GetMonthStats) (total int64, err error) { search := slf.BuildSearch(params) return search.Count() } func (slf *MonthFormsService) FetchAll(params request.GetMonthStats) (list []*models.MonthStats, err error) { total, err := slf.Count(params) if err != nil { return nil, err } list = make([]*models.MonthStats, 0, total) params.PageSize = 500 page := 1 for { params.Page = page data, err := slf.Query(params) if err != nil { return nil, err } if len(data) == 0 { break } list = append(list, data...) page++ } return } func (slf *MonthFormsService) Export(dataList []*models.MonthStats) (filename string, err error) { // 创建一个新的 Excel 文件 f := excelize.NewFile() if err != nil { logx.Errorf("NewSheet err:%v", err) return "", err } // 设置表头 f.SetCellValue("Sheet1", "A1", "产品编码") f.SetCellValue("Sheet1", "B1", "产品名称") f.SetCellValue("Sheet1", "C1", "期初库存") f.MergeCell("Sheet1", "C1", "F1") // 合并单元格 f.SetCellValue("Sheet1", "G1", "本月入库") f.MergeCell("Sheet1", "G1", "J1") // 合并单元格 f.SetCellValue("Sheet1", "K1", "本月出库") f.MergeCell("Sheet1", "K1", "N1") // 合并单元格 f.SetCellValue("Sheet1", "O1", "期末库存") f.MergeCell("Sheet1", "O1", "R1") // 合并单元格 unitData := []string{"件", "匹", "米", "重量"} for i, header := range unitData { cell := getColumnAlphabet(i+3) + "2" f.SetCellValue("Sheet1", cell, header) } for i, header := range unitData { cell := getColumnAlphabet(i+7) + "2" f.SetCellValue("Sheet1", cell, header) } for i, header := range unitData { cell := getColumnAlphabet(i+11) + "2" f.SetCellValue("Sheet1", cell, header) } for i, header := range unitData { cell := getColumnAlphabet(i+15) + "2" f.SetCellValue("Sheet1", cell, header) } // 设置表头样式 style := &excelize.Style{ Border: nil, Fill: excelize.Fill{ Type: "pattern", Pattern: 1, Shading: 0, }, Font: &excelize.Font{ Bold: true, }, Alignment: &excelize.Alignment{ Horizontal: "center", }, } titleStyle, err := f.NewStyle(style) if err != nil { fmt.Println(err) return } f.SetCellStyle("Sheet1", "A1", "R2", titleStyle) // 设置列宽 f.SetColWidth("Sheet1", "A", "B", 30) f.SetColWidth("Sheet1", "C", "R", 15) for i, v := range dataList { column := strconv.Itoa(i + 3) f.SetCellValue("Sheet1", "A"+column, v.ProductId) f.SetCellValue("Sheet1", "B"+column, v.ProductName) f.SetCellValue("Sheet1", "C"+column, v.BeginAmount) for _, v := range v.BeginMoreUnitsArr { switch v.Unit { case "件": f.SetCellValue("Sheet1", "D"+column, v.Amount) case "匹": f.SetCellValue("Sheet1", "E"+column, v.Amount) case "米": f.SetCellValue("Sheet1", "F"+column, v.Amount) } } f.SetCellValue("Sheet1", "G"+column, v.InputAmount) for _, v := range v.InputMoreUnitsArr { switch v.Unit { case "件": f.SetCellValue("Sheet1", "H"+column, v.Amount) case "匹": f.SetCellValue("Sheet1", "I"+column, v.Amount) case "米": f.SetCellValue("Sheet1", "J"+column, v.Amount) } } f.SetCellValue("Sheet1", "K"+column, v.OutputAmount) for _, v := range v.OutputMoreUnitsArr { switch v.Unit { case "件": f.SetCellValue("Sheet1", "L"+column, v.Amount) case "匹": f.SetCellValue("Sheet1", "M"+column, v.Amount) case "米": f.SetCellValue("Sheet1", "N"+column, v.Amount) } } f.SetCellValue("Sheet1", "O"+column, v.EndAmount) for _, v := range v.EndMoreUnitsArr { switch v.Unit { case "件": f.SetCellValue("Sheet1", "P"+column, v.Amount) case "匹": f.SetCellValue("Sheet1", "Q"+column, v.Amount) case "米": f.SetCellValue("Sheet1", "R"+column, v.Amount) } } } fileName := fmt.Sprintf("月度统计报表%s.xlsx", time.Now().Format("2006-01-02-1504")) if err := f.SaveAs(fileName); err != nil { return fileName, err } return fileName, nil }