From 1c8f39c41f903d3c07e8efc8dc49ef7014b45b8e Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 02 七月 2024 18:27:01 +0800
Subject: [PATCH] 未选出入库类型的业务操作在仓库月度报表里归为其他

---
 service/warehouse_month_forms.go |  104 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 103 insertions(+), 1 deletions(-)

diff --git a/service/warehouse_month_forms.go b/service/warehouse_month_forms.go
index c245dbd..a4d4838 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"
@@ -54,6 +57,101 @@
 		}
 		list = append(list, data...)
 		page++
+	}
+	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
 }
@@ -145,8 +243,12 @@
 
 func GetDealerItems(m map[string]decimal.Decimal) (items []*models.WarehouseStatsItems) {
 	for k, v := range m {
+		name := k
+		if name == "" {
+			name = "鍏朵粬"
+		}
 		items = append(items, &models.WarehouseStatsItems{
-			Name:   k,
+			Name:   name,
 			Amount: v,
 		})
 	}

--
Gitblit v1.8.0