zhangqian
2024-07-31 ae97356a9d0e190ad39513e913ed20eae306e28f
库存报表支持动态多单位,优化,样式调整
1个文件已修改
84 ■■■■■ 已修改文件
service/inventory_report_forms.go 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/inventory_report_forms.go
@@ -215,81 +215,53 @@
    unitData, unitIndexMap := GetAllUnits()
    // 自定义表头
    headers := []string{"产品", "产品类别", "单位成本", "总价值", "在库", "可用库存", "入库", "出库"}
    headers := []interface{}{"产品", "产品类别", "单位成本", "总价值",
        map[string][]string{"在库": unitData},
        map[string][]string{"可用库存": unitData},
        map[string][]string{"入库": unitData},
        map[string][]string{"出库": unitData}}
    // 设置表头
    for i, header := range headers {
        cell := getColumnAlphabet(i) + "1"
        f.SetCellValue("Sheet1", cell, header)
    }
    f.SetCellValue("Sheet1", getColumnAlphabet(1)+"1", "产品")
    f.SetCellValue("Sheet1", getColumnAlphabet(2)+"1", "产品类别")
    f.SetCellValue("Sheet1", getColumnAlphabet(3)+"1", "单位成本")
    f.SetCellValue("Sheet1", getColumnAlphabet(4)+"1", "总价值")
    f.SetCellValue("Sheet1", getColumnAlphabet(5)+"1", "在库")
    f.MergeCell("Sheet1", getColumnAlphabet(5)+"1", getColumnAlphabet(7)+"1") // 合并单元格
    f.SetCellValue("Sheet1", getColumnAlphabet(8)+"1", "可用库存")
    f.MergeCell("Sheet1", getColumnAlphabet(8)+"1", getColumnAlphabet(11)+"1") // 合并单元格
    f.SetCellValue("Sheet1", getColumnAlphabet(12)+"1", "入库")
    f.MergeCell("Sheet1", getColumnAlphabet(12)+"1", getColumnAlphabet(15)+"1") // 合并单元格
    f.SetCellValue("Sheet1", getColumnAlphabet(16)+"1", "出库")
    f.MergeCell("Sheet1", getColumnAlphabet(16)+"1", getColumnAlphabet(19)+"1") // 合并单元格
    for i, header := range unitData {
        f.SetCellValue("Sheet1", getColumnAlphabet(i+4)+"2", header)
        f.SetCellValue("Sheet1", getColumnAlphabet(i+8)+"2", header)
        f.SetCellValue("Sheet1", getColumnAlphabet(i+12)+"2", header)
        f.SetCellValue("Sheet1", getColumnAlphabet(i+16)+"2", header)
    }
    // 设置表头样式
    style := &excelize.Style{
        Border: nil,
        Fill: excelize.Fill{
            Type:    "pattern",
            Pattern: 1,
            Shading: 0,
        },
        Font: &excelize.Font{
            Bold: true,
        },
        Alignment: &excelize.Alignment{
            Horizontal: "center",
        },
    }
    titleStyle, err := f.NewStyle(style)
    lastColumnNumber, err := SetExcelHeaders(headers, f)
    if err != nil {
        return
    }
    lastColumn := getColumnAlphabet(19)
    titleStyle, err := SetHeaderStyle(f)
    if err != nil {
        return
    }
    lastColumn := getColumnAlphabet(lastColumnNumber)
    f.SetCellStyle("Sheet1", "A1", lastColumn+"2", titleStyle)
    // 设置列宽
    f.SetColWidth("Sheet1", "A", "D", 30)
    f.SetColWidth("Sheet1", "E", lastColumn, 15)
    for i := 1; i <= 4; i++ {
        column := getColumnAlphabet(i)
        f.MergeCell("Sheet1", column+"1", column+"2") // 合并单元格
    }
    for i, v := range dataList {
        column := strconv.Itoa(i + 3)
        f.SetCellValue("Sheet1", getColumnAlphabet(0)+column, v.ProductName)
        f.SetCellValue("Sheet1", getColumnAlphabet(1)+column, v.ProductType)
        f.SetCellValue("Sheet1", getColumnAlphabet(2)+column, v.Cost)
        f.SetCellValue("Sheet1", getColumnAlphabet(3)+column, v.Value)
        rowNumber := i + 3
        column := strconv.Itoa(rowNumber)
        f.SetCellValue("Sheet1", getColumnAlphabet(1)+column, v.ProductName)
        f.SetCellValue("Sheet1", getColumnAlphabet(2)+column, v.ProductType)
        f.SetCellValue("Sheet1", getColumnAlphabet(3)+column, v.Cost)
        f.SetCellValue("Sheet1", getColumnAlphabet(4)+column, v.Value)
        f.SetCellValue("Sheet1", getColumnAlphabet(4)+column, v.Amount)
        v.AmountMoreUnits = append(v.AmountMoreUnits, models.UnitItems{Amount: v.Amount, Unit: v.Unit})
        FillMoreUnitToExcel(v.AmountMoreUnits, 5, i+3, unitIndexMap, f)
        FillMoreUnitToExcel(v.AmountMoreUnits, 5, rowNumber, unitIndexMap, f)
        f.SetCellValue("Sheet1", getColumnAlphabet(8)+column, v.AvailableNumber)
        v.AvailableNumberMoreUnits = append(v.AvailableNumberMoreUnits, models.UnitItems{Amount: v.AvailableNumber, Unit: v.Unit})
        FillMoreUnitToExcel(v.AvailableNumberMoreUnits, 9, i+3, unitIndexMap, f)
        FillMoreUnitToExcel(v.AvailableNumberMoreUnits, 5+len(unitData), rowNumber, unitIndexMap, f)
        f.SetCellValue("Sheet1", getColumnAlphabet(12)+column, v.In)
        v.InMoreUnits = append(v.InMoreUnits, models.UnitItems{Amount: v.In, Unit: v.Unit})
        FillMoreUnitToExcel(v.InMoreUnits, 13, i+3, unitIndexMap, f)
        FillMoreUnitToExcel(v.InMoreUnits, 5+len(unitData)*2, rowNumber, unitIndexMap, f)
        f.SetCellValue("Sheet1", getColumnAlphabet(16)+column, v.Out)
        v.OutMoreUnits = append(v.OutMoreUnits, models.UnitItems{Amount: v.Out, Unit: v.Unit})
        FillMoreUnitToExcel(v.OutMoreUnits, 17, i+3, unitIndexMap, f)
        FillMoreUnitToExcel(v.OutMoreUnits, 5+len(unitData)*3, rowNumber, unitIndexMap, f)
    }
    fileName = fmt.Sprintf("库存报表%s.xlsx", time.Now().Format("2006-01-02-1504"))