package service
|
|
import (
|
"errors"
|
"github.com/shopspring/decimal"
|
"github.com/xuri/excelize/v2"
|
"strconv"
|
"wms/models"
|
)
|
|
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.Div(unitItem.Amount),
|
Unit: unitItem.Unit,
|
Floating: unitItem.Floating,
|
})
|
}
|
return moreValueArr
|
}
|
|
func FillMoreUnitToExcel(amount decimal.Decimal, units []models.UnitItems, startIndex int, column int, f *excelize.File) {
|
columnStr := strconv.Itoa(column)
|
for _, v := range units {
|
switch v.Unit {
|
case "匹":
|
f.SetCellValue("Sheet1", getColumnAlphabet(startIndex)+columnStr, v.Amount.Mul(amount))
|
case "米":
|
f.SetCellValue("Sheet1", getColumnAlphabet(startIndex+1)+columnStr, v.Amount.Mul(amount))
|
case "重量":
|
f.SetCellValue("Sheet1", getColumnAlphabet(startIndex+2)+columnStr, v.Amount.Mul(amount))
|
}
|
}
|
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)
|
}
|