位置报表多单位使用动态表头及相应数据调整(数据使用存储的多单位数据,并展示在对应单位下面)
4个文件已修改
67 ■■■■ 已修改文件
service/history_forms.go 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/inventory_report_forms.go 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/location_forms.go 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/more_units.go 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/history_forms.go
@@ -137,8 +137,10 @@
    var fileName string
    f := excelize.NewFile()
    unitData, unitIndexMap := GetAllUnits()
    // 自定义表头
    headers := []interface{}{"日期", "单号", "产品", "产品编码", "业务类型", "从", "至", map[string][]string{"数量": {"件", "匹", "米", "重量"}}, "单位", "重量"}
    headers := []interface{}{"日期", "单号", "产品", "产品编码", "业务类型", "从", "至", map[string][]string{"数量": unitData}, "单位", "重量"}
    // 设置表头
    if err := SetExcelHeader(headers, f); err != nil {
@@ -166,7 +168,7 @@
        f.SetCellValue("Sheet1", "F"+column, v.FromLocation)
        f.SetCellValue("Sheet1", "G"+column, v.ToLocation)
        f.SetCellValue("Sheet1", "H"+column, v.Amount)
        FillMoreUnitToExcel(v.Amount, v.AmountMoreUnits, 7, i+3, f)
        FillMoreUnitToExcel(v.AmountMoreUnits, 7, i+3, unitIndexMap, f)
        f.SetCellValue("Sheet1", "L"+column, v.Unit)
        f.SetCellValue("Sheet1", "M"+column, v.Weight)
    }
service/inventory_report_forms.go
@@ -213,6 +213,7 @@
    var fileName string
    f := excelize.NewFile()
    unitData, unitIndexMap := GetAllUnits()
    // 自定义表头
    headers := []string{"产品", "产品类别", "单位成本", "总价值", "在库", "可用库存", "入库", "出库"}
    // 设置表头
@@ -221,12 +222,12 @@
        f.SetCellValue("Sheet1", cell, header)
    }
    f.SetCellValue("Sheet1", getColumnAlphabet(0)+"1", "产品")
    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.MergeCell("Sheet1", getColumnAlphabet(4)+"1", getColumnAlphabet(7)+"1") // 合并单元格
    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", "入库")
@@ -234,7 +235,6 @@
    f.SetCellValue("Sheet1", getColumnAlphabet(16)+"1", "出库")
    f.MergeCell("Sheet1", getColumnAlphabet(16)+"1", getColumnAlphabet(19)+"1") // 合并单元格
    unitData := []string{"件", "匹", "米", "重量"}
    for i, header := range unitData {
        f.SetCellValue("Sheet1", getColumnAlphabet(i+4)+"2", header)
        f.SetCellValue("Sheet1", getColumnAlphabet(i+8)+"2", header)
@@ -276,16 +276,20 @@
        f.SetCellValue("Sheet1", getColumnAlphabet(3)+column, v.Value)
        f.SetCellValue("Sheet1", getColumnAlphabet(4)+column, v.Amount)
        FillMoreUnitToExcel(v.Amount, v.AmountMoreUnits, 5, i+3, f)
        v.AmountMoreUnits = append(v.AmountMoreUnits, models.UnitItems{Amount: v.Amount, Unit: v.Unit})
        FillMoreUnitToExcel(v.AmountMoreUnits, 5, i+3, unitIndexMap, f)
        f.SetCellValue("Sheet1", getColumnAlphabet(8)+column, v.AvailableNumber)
        FillMoreUnitToExcel(v.AvailableNumber, v.AvailableNumberMoreUnits, 9, i+3, f)
        v.AvailableNumberMoreUnits = append(v.AvailableNumberMoreUnits, models.UnitItems{Amount: v.AvailableNumber, Unit: v.Unit})
        FillMoreUnitToExcel(v.AvailableNumberMoreUnits, 9, i+3, unitIndexMap, f)
        f.SetCellValue("Sheet1", getColumnAlphabet(12)+column, v.In)
        FillMoreUnitToExcel(v.In, v.AmountMoreUnits, 13, i+3, f)
        v.InMoreUnits = append(v.InMoreUnits, models.UnitItems{Amount: v.In, Unit: v.Unit})
        FillMoreUnitToExcel(v.InMoreUnits, 13, i+3, unitIndexMap, f)
        f.SetCellValue("Sheet1", getColumnAlphabet(16)+column, v.Out)
        FillMoreUnitToExcel(v.Out, v.AmountMoreUnits, 17, i+3, f)
        v.OutMoreUnits = append(v.OutMoreUnits, models.UnitItems{Amount: v.Out, Unit: v.Unit})
        FillMoreUnitToExcel(v.OutMoreUnits, 17, i+3, unitIndexMap, f)
    }
    fileName = fmt.Sprintf("库存报表%s.xlsx", time.Now().Format("2006-01-02-1504"))
service/location_forms.go
@@ -36,7 +36,7 @@
        moreUnit := amount.Product.MoreUnit
        if moreUnit != nil && *moreUnit {
            resp.AmountMoreUnits = CreateMoreUnit(resp.Amount, amount.Product.MoreUnitList)
            resp.AmountMoreUnits = amount.MoreUnitList
        }
        result = append(result, resp)
@@ -101,11 +101,12 @@
    var fileName string
    f := excelize.NewFile()
    unitData, unitIndexMap := GetAllUnits()
    // 自定义表头
    headers := []interface{}{"位置", "产品", "产品类别", map[string][]string{"在库数量": {"件", "匹", "米", "重量"}}, "价值"}
    headers := []interface{}{"位置", "产品", "产品类别", map[string][]string{"在库数量": unitData}, "价值"}
    // 设置表头
    var i int
    i := 1
    for _, h := range headers {
        if v, ok := h.(string); ok {
            f.SetCellValue("Sheet1", getColumnAlphabet(i)+"1", v)
@@ -146,16 +147,15 @@
    f.SetCellStyle("Sheet1", "A1", lastColumn+"2", titleStyle)
    // 设置列宽
    f.SetColWidth("Sheet1", "A", "C", 30)
    f.SetColWidth("Sheet1", "D", lastColumn, 15)
    for i, v := range dataList {
        column := strconv.Itoa(i + 3)
        f.SetCellValue("Sheet1", "A"+column, v.LocationName)
        f.SetCellValue("Sheet1", "B"+column, v.ProductName)
        f.SetCellValue("Sheet1", "C"+column, v.ProductTypeName)
        f.SetCellValue("Sheet1", "D"+column, v.Amount)
        FillMoreUnitToExcel(v.Amount, v.AmountMoreUnits, 4, i+2, f)
        f.SetCellValue("Sheet1", "H"+column, v.Value)
        row := strconv.Itoa(i + 3)
        f.SetCellValue("Sheet1", "A"+row, v.LocationName)
        f.SetCellValue("Sheet1", "B"+row, v.ProductName)
        f.SetCellValue("Sheet1", "C"+row, v.ProductTypeName)
        v.AmountMoreUnits = append(v.AmountMoreUnits, models.UnitItems{Amount: v.Amount, Unit: v.Unit})
        FillMoreUnitToExcel(v.AmountMoreUnits, 4, i+3, unitIndexMap, f)
        f.SetCellValue("Sheet1", getColumnAlphabet(4+len(unitData))+row, v.Value)
    }
    fileName = fmt.Sprintf("位置报表%s.xlsx", time.Now().Format("2006-01-02-1504"))
service/more_units.go
@@ -67,17 +67,10 @@
    return moreValueArr
}
func FillMoreUnitToExcel(amount decimal.Decimal, units []models.UnitItems, startIndex int, column int, f *excelize.File) {
    columnStr := strconv.Itoa(column)
func FillMoreUnitToExcel(units []models.UnitItems, startIndex int, row int, unitIndexMap map[string]int, f *excelize.File) {
    rowStr := strconv.Itoa(row)
    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))
        }
        f.SetCellValue("Sheet1", getColumnAlphabet(startIndex+unitIndexMap[v.Unit])+rowStr, v.Amount)
    }
    return
}