From 34de248a46755b2309f5ac8e95261c25fe1e210d Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期二, 30 七月 2024 19:12:47 +0800 Subject: [PATCH] 月度报表多单位使用动态表头及相应调整 --- service/more_units.go | 116 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 115 insertions(+), 1 deletions(-) diff --git a/service/more_units.go b/service/more_units.go index 8671ce3..7343b9b 100644 --- a/service/more_units.go +++ b/service/more_units.go @@ -1,6 +1,7 @@ package service import ( + "errors" "github.com/shopspring/decimal" "github.com/xuri/excelize/v2" "strconv" @@ -10,11 +11,58 @@ func CreateMoreUnit(amount decimal.Decimal, units []models.UnitItems) []models.UnitItems { moreValueArr := make([]models.UnitItems, 0, len(units)) for _, unitItem := range units { + if unitItem.Amount.IsZero() { + continue + } moreValueArr = append(moreValueArr, models.UnitItems{ - Amount: amount.Mul(unitItem.Amount), + Amount: amount.Div(unitItem.Amount), Unit: unitItem.Unit, Floating: unitItem.Floating, }) + } + return moreValueArr +} + +func AddMoreUnit(units []models.UnitItems, units2 []models.UnitItems) []models.UnitItems { + moreValueArr := make([]models.UnitItems, 0, len(units)) + for _, unitItem1 := range units { + for _, unitItem2 := range units2 { + if unitItem1.Unit == unitItem2.Unit { + moreValueArr = append(moreValueArr, models.UnitItems{ + Amount: unitItem1.Amount.Add(unitItem2.Amount), + Unit: unitItem1.Unit, + Floating: unitItem1.Floating, + }) + } + } + } + return moreValueArr +} + +// MoreUnitIsEnough 澶氬崟浣嶅簱瀛樻槸鍚﹁冻澶� +func MoreUnitIsEnough(units []models.UnitItems, units2 []models.UnitItems) bool { + for _, unitItem1 := range units { + for _, unitItem2 := range units2 { + if unitItem1.Amount.LessThan(unitItem2.Amount) { + return false + } + } + } + return true +} + +func SubMoreUnit(units []models.UnitItems, units2 []models.UnitItems) []models.UnitItems { + moreValueArr := make([]models.UnitItems, 0, len(units)) + for _, unitItem1 := range units { + for _, unitItem2 := range units2 { + if unitItem1.Unit == unitItem2.Unit { + moreValueArr = append(moreValueArr, models.UnitItems{ + Amount: unitItem1.Amount.Sub(unitItem2.Amount), + Unit: unitItem1.Unit, + Floating: unitItem1.Floating, + }) + } + } } return moreValueArr } @@ -33,3 +81,69 @@ } return } + +func SetExcelHeader(headers []interface{}, f *excelize.File) (err error) { + // 璁剧疆琛ㄥご + var i int + for _, h := range headers { + if v, ok := h.(string); ok { + err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"1", v) + if err != nil { + return + } + i++ + } else if childHeaders, ok := h.(map[string][]string); ok { + for title, list := range childHeaders { + err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"1", title) + if err != nil { + return err + } + err = f.MergeCell("Sheet1", getColumnAlphabet(i)+"1", getColumnAlphabet(i-1+len(list))+"1") // 鍚堝苟鍗曞厓鏍� + for _, t := range list { + err = f.SetCellValue("Sheet1", getColumnAlphabet(i)+"2", t) + if err != nil { + return err + } + i++ + } + } + } else { + return errors.New("unsupported header value") + } + } + return nil +} + +func SetHeaderStyle(f *excelize.File) (styleInt int, err error) { + // 璁剧疆琛ㄥご鏍峰紡 + style := &excelize.Style{ + Border: nil, + Fill: excelize.Fill{ + Type: "pattern", + Pattern: 1, + Shading: 0, + }, + Font: &excelize.Font{ + Bold: true, + }, + Alignment: &excelize.Alignment{ + Horizontal: "center", + }, + } + 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