From 9d296a1c658c19c6faa51dfef31d025e59a480cb Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期二, 02 七月 2024 12:02:45 +0800 Subject: [PATCH] 按仓库统计月度报表下载接口 --- service/warehouse_month_forms.go | 98 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 98 insertions(+), 0 deletions(-) diff --git a/service/warehouse_month_forms.go b/service/warehouse_month_forms.go index c245dbd..9edf8c4 100644 --- a/service/warehouse_month_forms.go +++ b/service/warehouse_month_forms.go @@ -1,7 +1,10 @@ package service import ( + "fmt" "github.com/shopspring/decimal" + "github.com/xuri/excelize/v2" + "strconv" "time" "wms/constvar" "wms/models" @@ -58,6 +61,101 @@ return } +func (slf *WarehouseMonthFormsService) Export(dataList []*models.WarehouseMonthStats) (filename string, err error) { + // 鍒涘缓涓�涓柊鐨� Excel 鏂囦欢 + f := excelize.NewFile() + + if err != nil { + logx.Errorf("NewSheet err:%v", err) + return "", err + } + + headers, headerLen, inputTypes, outputTypes := slf.GetHeaders() + err = SetExcelHeader(headers, f) + if err != nil { + logx.Errorf("SetExcelHeader err:%v", err) + return "", err + } + + //琛ㄥご鏍峰紡 + style, err := SetHeaderStyle(f) + if err != nil { + return "", err + } + + f.SetCellStyle("Sheet1", "A1", getColumnAlphabet(headerLen)+"2", style) + // 璁剧疆鍒楀 + f.SetColWidth("Sheet1", "A", "F", 30) + f.SetColWidth("Sheet1", "G", getColumnAlphabet(headerLen), 15) + + inputStart := 7 + outputStart := 7 + len(inputTypes) + 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.EndAmount) + f.SetCellValue("Sheet1", "D"+column, v.BeginAmount) + f.SetCellValue("Sheet1", "E"+column, v.Unit) + f.SetCellValue("Sheet1", "F"+column, v.SalePrice) + + slf.FillDealerTypeToExcel(v.InputItems, inputStart, i+3, inputTypes, f) + slf.FillDealerTypeToExcel(v.OutputItems, outputStart, i+3, outputTypes, f) + } + + fileName := fmt.Sprintf("%s鏈堝害缁熻鎶ヨ〃%s.xlsx", "浠撳簱", time.Now().Format("2006-01-02-1504")) + if err := f.SaveAs(fileName); err != nil { + return fileName, err + } + + return fileName, nil +} + +func (slf *WarehouseMonthFormsService) GetHeaders() (headers []interface{}, headerLen int, inputTypes, outputTypes []string) { + // 鑷畾涔夎〃澶� + + //鏌ヨ鍏ュ簱绫诲瀷 + inputTypes = GetDictNameListByType(constvar.StorageType) + inputTypes = append(inputTypes, constvar.InputTotalHeader) + + headerLen += len(inputTypes) + + //鏌ヨ鍏ュ簱绫诲瀷 + outputTypes = GetDictNameListByType(constvar.StockoutType) + outputTypes = append(outputTypes, constvar.OutPutTotalHeader) + + headerLen += len(inputTypes) + + headerLen += 6 + + headers = []interface{}{"鐗╂枡缂栧彿", "鐗╂枡缂栫爜", "鏈堟湯缁撳瓨", "鏈堝垵缁撳瓨", "鍗曚綅", "鍗曚环", map[string][]string{"鏈湀鍏ュ簱": inputTypes}, map[string][]string{"鏈湀鍑哄簱": outputTypes}} + return headers, headerLen, inputTypes, outputTypes +} + +func (slf *WarehouseMonthFormsService) SumItems(items []*models.WarehouseStatsItems) (sum decimal.Decimal) { + for _, v := range items { + sum = sum.Add(v.Amount) + } + return sum +} + +func (slf *WarehouseMonthFormsService) FillDealerTypeToExcel(items []*models.WarehouseStatsItems, startIndex int, column int, dealerTypes []string, f *excelize.File) { + columnStr := strconv.Itoa(column) + sum := slf.SumItems(items) + detailMap := models.WarehouseStatsItemMap(items) + + for i := 0; i < len(dealerTypes); i++ { + var amount decimal.Decimal + if detailMap[dealerTypes[i]] != nil { + amount = detailMap[dealerTypes[i]].Amount + } else if dealerTypes[i] == constvar.InputTotalHeader { + amount = sum + } + f.SetCellValue("Sheet1", getColumnAlphabet(startIndex+i)+columnStr, amount) + } + return +} + func GetCurrentWarehouseStats(date string, warehouseId int, productIds []string) (statRecords []*models.WarehouseMonthStats, err error) { //鏈湀鏈熷垵鏁伴噺/涓婃湀缁撲綑鏁伴噺 groupSumList, err := models.NewLocationProductAmountSearch().SetProductIds(productIds).GroupSum("product_id", "amount") -- Gitblit v1.8.0