zhangqian
2024-07-30 34de248a46755b2309f5ac8e95261c25fe1e210d
月度报表多单位使用动态表头及相应调整
3个文件已修改
119 ■■■■■ 已修改文件
service/inventory_report_forms.go 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/month_forms.go 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/more_units.go 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
}
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)
        }
    }
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
}