From 34de248a46755b2309f5ac8e95261c25fe1e210d Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 30 七月 2024 19:12:47 +0800
Subject: [PATCH] 月度报表多单位使用动态表头及相应调整
---
service/inventory_report_forms.go | 6 ++-
service/month_forms.go | 98 ++++++++++++++++---------------------------------
service/more_units.go | 15 +++++++
3 files changed, 51 insertions(+), 68 deletions(-)
diff --git a/service/inventory_report_forms.go b/service/inventory_report_forms.go
index b00d906..694cfaa 100644
--- a/service/inventory_report_forms.go
+++ b/service/inventory_report_forms.go
@@ -300,7 +300,9 @@
func getColumnAlphabet(index int) string {
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if index <= 26 {
- return string(alphabet[index])
+ return string(alphabet[index-1])
}
- return getColumnAlphabet((index)/26) + getColumnAlphabet((index)%26+1)
+ quotient := (index - 1) / 26
+ remainder := (index - 1) % 26
+ return getColumnAlphabet(quotient) + getColumnAlphabet(remainder+1)
}
diff --git a/service/month_forms.go b/service/month_forms.go
index 9f1aed5..a6fe4de 100644
--- a/service/month_forms.go
+++ b/service/month_forms.go
@@ -67,36 +67,29 @@
return "", err
}
+ unitData, unitIndexMap := GetAllUnits()
+ unitLen := len(unitData)
+
// 璁剧疆琛ㄥご
f.SetCellValue("Sheet1", "A1", "浜у搧缂栫爜")
+ f.MergeCell("Sheet1", "A1", "A2") // 鍚堝苟鍗曞厓鏍�
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") // 鍚堝苟鍗曞厓鏍�
+ f.MergeCell("Sheet1", "B1", "B2") // 鍚堝苟鍗曞厓鏍�
+ f.SetCellValue("Sheet1", getColumnAlphabet(3)+"1", "鏈熷垵搴撳瓨")
+ f.MergeCell("Sheet1", getColumnAlphabet(3)+"1", getColumnAlphabet(2+unitLen)+"1") // 鍚堝苟鍗曞厓鏍�
+ f.SetCellValue("Sheet1", getColumnAlphabet(3+unitLen)+"1", "鏈湀鍏ュ簱")
+ f.MergeCell("Sheet1", getColumnAlphabet(3+unitLen)+"1", getColumnAlphabet(2+unitLen*2)+"1") // 鍚堝苟鍗曞厓鏍�
+ f.SetCellValue("Sheet1", getColumnAlphabet(3+unitLen*2)+"1", "鏈湀鍑哄簱")
+ f.MergeCell("Sheet1", getColumnAlphabet(3+unitLen*2)+"1", getColumnAlphabet(2+unitLen*3)+"1") // 鍚堝苟鍗曞厓鏍�
+ f.SetCellValue("Sheet1", getColumnAlphabet(3+unitLen*3)+"1", "鏈熸湯搴撳瓨")
+ f.MergeCell("Sheet1", getColumnAlphabet(3+unitLen*3)+"1", getColumnAlphabet(2+unitLen*4)+"1") // 鍚堝苟鍗曞厓鏍�
- unitData := []string{"浠�", "鍖�", "绫�", "閲嶉噺"}
- for i, header := range unitData {
- cell := getColumnAlphabet(i+3) + "2"
- f.SetCellValue("Sheet1", cell, header)
+ for j := 0; j < 4; j++ { //缁欐湡鍒濆簱瀛橈紝 鏈湀鍏ュ簱锛� 鏈湀鍑哄簱锛� 鏈熸湯搴撳瓨璧嬪�煎鍗曚綅琛ㄥご
+ for i, header := range unitData {
+ cell := getColumnAlphabet(i+3+unitLen*j) + "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,
@@ -116,61 +109,34 @@
if err != nil {
return
}
- f.SetCellStyle("Sheet1", "A1", "R2", titleStyle)
+ f.SetCellStyle("Sheet1", "A1", getColumnAlphabet(2+unitLen*4)+"2", titleStyle)
// 璁剧疆鍒楀
f.SetColWidth("Sheet1", "A", "B", 30)
- f.SetColWidth("Sheet1", "C", "R", 15)
+ f.SetColWidth("Sheet1", "C", getColumnAlphabet(2+unitLen*4), 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)
+ row := strconv.Itoa(i + 3)
+ f.SetCellValue("Sheet1", "A"+row, v.ProductId)
+ f.SetCellValue("Sheet1", "B"+row, v.ProductName)
+
+ v.BeginMoreUnitsArr = append(v.BeginMoreUnitsArr, models.UnitItems{Amount: v.BeginAmount, Unit: v.Unit})
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", getColumnAlphabet(3+unitIndexMap[v.Unit])+row, v.Amount)
}
- f.SetCellValue("Sheet1", "G"+column, v.InputAmount)
+ v.InputMoreUnitsArr = append(v.InputMoreUnitsArr, models.UnitItems{Amount: v.InputAmount, Unit: v.Unit})
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", getColumnAlphabet(3+unitLen*1+unitIndexMap[v.Unit])+row, v.Amount)
}
- f.SetCellValue("Sheet1", "K"+column, v.OutputAmount)
+ v.OutputMoreUnitsArr = append(v.OutputMoreUnitsArr, models.UnitItems{Amount: v.OutputAmount, Unit: v.Unit})
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", getColumnAlphabet(3+unitLen*2+unitIndexMap[v.Unit])+row, v.Amount)
}
- f.SetCellValue("Sheet1", "O"+column, v.EndAmount)
+ v.EndMoreUnitsArr = append(v.EndMoreUnitsArr, models.UnitItems{Amount: v.EndAmount, Unit: v.Unit})
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)
- }
+ f.SetCellValue("Sheet1", getColumnAlphabet(3+unitLen*3+unitIndexMap[v.Unit])+row, v.Amount)
}
}
diff --git a/service/more_units.go b/service/more_units.go
index 1e01506..7343b9b 100644
--- a/service/more_units.go
+++ b/service/more_units.go
@@ -132,3 +132,18 @@
}
return f.NewStyle(style)
}
+
+func GetAllUnits() (allUnits []string, unitIndexMap map[string]int) {
+ units, err := models.NewUnitDictSearch().FindNotTotal()
+ allUnits = make([]string, 0, len(units))
+ unitIndexMap = make(map[string]int)
+ if err != nil {
+ return
+ }
+
+ for k, v := range units {
+ allUnits = append(allUnits, v.Name)
+ unitIndexMap[v.Name] = k
+ }
+ return
+}
--
Gitblit v1.8.0