1、修改采购报表(按商品)的excel导出功能,增加"一级分类"、"二级分类",同一个商品下每个采购单都填充商品信息;

This commit is contained in:
chenlin 2024-11-04 18:07:04 +08:00
parent aae1718e7c
commit 9d676a0607
2 changed files with 81 additions and 31 deletions

View File

@ -231,3 +231,48 @@ func TransformErpCategoryIds(categoryIds []uint32) ([]uint32, error) {
return result, nil return result, nil
} }
// CategoryLevels 代表分类层级信息
type CategoryLevels struct {
Level1 Category `json:"level1"`
Level2 Category `json:"level2,omitempty"`
Level3 Category `json:"level3,omitempty"`
}
// GetCategoryLevels 根据商品分类ID获取分类层级信息
func GetCategoryLevels(categoryID uint32) (CategoryLevels, error) {
var levels CategoryLevels
// 维持当前分类的ID
currentID := categoryID
levelCount := 0
for currentID != 0 && levelCount < 3 {
var currentCategory Category
// 查询当前分类
err := orm.Eloquent.Model(&Category{}).Where("id = ?", currentID).First(&currentCategory).Error
if err != nil {
return levels, err
}
// 根据分类编号的长度判断层级
numberLength := len(currentCategory.Number)
switch numberLength {
case 3:
levels.Level1 = currentCategory // 一级分类
case 6:
levels.Level2 = currentCategory // 二级分类
case 9:
levels.Level3 = currentCategory // 三级分类
default:
return levels, nil // 超过9位返回空
}
// 移动到上级分类
currentID = currentCategory.Pid
levelCount++
}
return levels, nil
}

View File

@ -4924,9 +4924,9 @@ func reportByCommodityExport(req *ErpPurchaseReportByCommodityResp) (string, err
fmt.Println("url fileName:", url+fileName) fmt.Println("url fileName:", url+fileName)
// 组合标题栏数据 // 组合标题栏数据
title1 := []interface{}{"商品名称", "商品分类", "单据编号", "类型", "店铺名称", "供应商", "经手人", "制单人", "审核时间", title1 := []interface{}{"商品名称", "商品分类", "", "", "单据编号", "类型", "店铺名称", "供应商", "经手人", "制单人", "审核时间",
"计划采购", "", "", "已执行", "", "", "未执行", ""} "计划采购", "", "", "已执行", "", "", "未执行", ""}
title2 := []interface{}{"商品名称", "商品分类", "单据编号", "类型", "店铺名称", "供应商", "经手人", "制单人", "审核时间", title2 := []interface{}{"商品名称", "一级分类", "二级分类", "三级分类", "单据编号", "类型", "店铺名称", "供应商", "经手人", "制单人", "审核时间",
"采购金额", "采购单价", "采购数量", "已执行金额", "执行单价", "已执行数量", "未执行金额", "未执行数量"} "采购金额", "采购单价", "采购数量", "已执行金额", "执行单价", "已执行数量", "未执行金额", "未执行数量"}
for i, _ := range title1 { for i, _ := range title1 {
cell, _ := excelize.CoordinatesToCellName(1+i, 1) cell, _ := excelize.CoordinatesToCellName(1+i, 1)
@ -4948,9 +4948,12 @@ func reportByCommodityExport(req *ErpPurchaseReportByCommodityResp) (string, err
var row2 []interface{} var row2 []interface{}
nExcelStartRow := 0 nExcelStartRow := 0
for _, commodityData := range req.List { for _, commodityData := range req.List {
categoryLevels, _ := GetCategoryLevels(commodityData.ErpCategoryID)
row1 = []interface{}{ row1 = []interface{}{
commodityData.ErpCommodityName, // 商品名称 commodityData.ErpCommodityName, // 商品名称
commodityData.ErpCategoryName, // 商品分类 categoryLevels.Level1.Name, // 一级分类
categoryLevels.Level2.Name, // 二级分类
categoryLevels.Level3.Name, // 三级分类
"", // 单据编号 "", // 单据编号
"", // 类型 "", // 类型
"", // 店铺名称 "", // 店铺名称
@ -4994,8 +4997,10 @@ func reportByCommodityExport(req *ErpPurchaseReportByCommodityResp) (string, err
} }
row2 = []interface{}{ row2 = []interface{}{
"", // 商品名称 commodityData.ErpCommodityName, // 商品名称
"", // 商品分类 categoryLevels.Level1.Name, // 一级分类
categoryLevels.Level2.Name, // 二级分类
categoryLevels.Level3.Name, // 三级分类
orderData.SerialNumber, // 单据编号 orderData.SerialNumber, // 单据编号
orderType, // 类型 orderType, // 类型
orderData.StoreName, // 店铺名称 orderData.StoreName, // 店铺名称
@ -5025,7 +5030,7 @@ func reportByCommodityExport(req *ErpPurchaseReportByCommodityResp) (string, err
} }
totalData := "订单数:" + strconv.FormatInt(int64(req.Total), 10) totalData := "订单数:" + strconv.FormatInt(int64(req.Total), 10)
end := []interface{}{totalData, "", "", "", "", "", "", "", "", end := []interface{}{totalData, "", "", "", "", "", "", "", "", "", "",
req.PlanAmount, // 计划采购金额 req.PlanAmount, // 计划采购金额
"--", // 计划采购单价 "--", // 计划采购单价
req.PlanCount, // 计划采购数量 req.PlanCount, // 计划采购数量
@ -5052,30 +5057,30 @@ func reportByCommodityExport(req *ErpPurchaseReportByCommodityResp) (string, err
// 合并单元格 // 合并单元格
_ = file.MergeCell(fSheet, "A1", "A2") _ = file.MergeCell(fSheet, "A1", "A2")
_ = file.MergeCell(fSheet, "B1", "B2") _ = file.MergeCell(fSheet, "B1", "D1")
_ = file.MergeCell(fSheet, "C1", "C2")
_ = file.MergeCell(fSheet, "D1", "D2")
_ = file.MergeCell(fSheet, "E1", "E2") _ = file.MergeCell(fSheet, "E1", "E2")
_ = file.MergeCell(fSheet, "F1", "F2") _ = file.MergeCell(fSheet, "F1", "F2")
_ = file.MergeCell(fSheet, "G1", "G2") _ = file.MergeCell(fSheet, "G1", "G2")
_ = file.MergeCell(fSheet, "H1", "H2") _ = file.MergeCell(fSheet, "H1", "H2")
_ = file.MergeCell(fSheet, "I1", "I2") _ = file.MergeCell(fSheet, "I1", "I2")
_ = file.MergeCell(fSheet, "J1", "J2")
_ = file.MergeCell(fSheet, "K1", "K2")
_ = file.MergeCell(fSheet, "J1", "L1") _ = file.MergeCell(fSheet, "L1", "N1")
_ = file.MergeCell(fSheet, "M1", "O1") _ = file.MergeCell(fSheet, "O1", "Q1")
_ = file.MergeCell(fSheet, "P1", "Q1") _ = file.MergeCell(fSheet, "R1", "S1")
//设置单元格高度 //设置单元格高度
file.SetRowHeight("Sheet1", 1, 20) file.SetRowHeight("Sheet1", 1, 20)
file.SetRowHeight("Sheet1", 2, 20) file.SetRowHeight("Sheet1", 2, 20)
// 设置单元格大小 // 设置单元格大小
file.SetColWidth("Sheet1", "A", "A", 15) file.SetColWidth("Sheet1", "A", "A", 30)
file.SetColWidth("Sheet1", "B", "B", 10) file.SetColWidth("Sheet1", "B", "B", 10)
file.SetColWidth("Sheet1", "C", "C", 13) file.SetColWidth("Sheet1", "E", "E", 13)
file.SetColWidth("Sheet1", "E", "E", 25) file.SetColWidth("Sheet1", "G", "G", 25)
endRow := fmt.Sprintf("Q"+"%d", nExcelStartRow+3) endRow := fmt.Sprintf("S"+"%d", nExcelStartRow+3)
// 应用样式到整个表格 // 应用样式到整个表格
_ = file.SetCellStyle("Sheet1", "A1", endRow, style) _ = file.SetCellStyle("Sheet1", "A1", endRow, style)