animeic 2 years ago
parent
commit
19eb7a1996

+ 5 - 1
boxcost/api/bill-process-excel.go

@@ -243,7 +243,7 @@ func (b *ProcessBillExcel) drawRemark() error {
 	b.Row++
 
 	remarkContentScell := fmt.Sprintf("A%d", b.Row)
-	// 预留五行备注内容 // TODO 获取内容换行符个数然后动态确定内容占用多少行单元格
+	// 预留五行备注内容
 	reg := regexp.MustCompile(`\n`)
 	remarkRowNum := len(reg.FindAllString(b.Content.Remark, -1)) + 1
 	b.Row += remarkRowNum
@@ -364,6 +364,10 @@ func (b *ProcessBillExcel) SetContent(content *model.PurchaseBill) {
 func (b *ProcessBillExcel) SetTitle(title string) {
 	b.Title = title
 
+}
+func (b *ProcessBillExcel) SetOffset(offset int) {
+	b.Offset = offset
+
 }
 func (b *ProcessBillExcel) SetSignatures(sign []*model.Signature) {
 	b.Signatures = sign

+ 4 - 0
boxcost/api/bill-purchase-excel.go

@@ -408,6 +408,10 @@ func (b *PurchaseBillExcel) SetContent(content *model.PurchaseBill) {
 func (b *PurchaseBillExcel) SetTitle(title string) {
 	b.Title = title
 
+}
+func (b *PurchaseBillExcel) SetOffset(offset int) {
+	b.Offset = offset
+
 }
 func (b *PurchaseBillExcel) SetSignatures(sign []*model.Signature) {
 	b.Signatures = sign

+ 9 - 0
boxcost/api/iFace.go

@@ -6,6 +6,15 @@ type IPurchBill interface {
 	PrintPurchType() string
 	Draws()
 	SetContent(*model.PurchaseBill)
+	SetOffset(int)
 	SetTitle(string)
 	SetSignatures([]*model.Signature)
 }
+
+type IRPurchBill interface {
+	PrintPurchType() string
+	Draws()
+	SetContent(*model.PurchaseBill)
+	SetOffset(int)
+	SetTitle(string)
+}

+ 71 - 27
boxcost/api/plan-cost-excel.go

@@ -67,15 +67,6 @@ func (b *PlanCostExcel) drawTableTitle() error {
 
 		return b.Excel.SetCellValue(b.SheetName, left1Cell, value)
 	}
-	// var drawCol1 = func(prefix string, value1 string, value2 string) error {
-	// 	topCell := fmt.Sprintf("%s%d", prefix, row)
-	// 	bottomCell := fmt.Sprintf("%s%d", prefix, row+1)
-	// 	b.Excel.SetCellStyle(b.SheetName, topCell, topCell, b.AlignCenterStyle)
-	// 	b.Excel.SetCellValue(b.SheetName, topCell, value1)
-	// 	b.Excel.SetCellStyle(b.SheetName, bottomCell, bottomCell, b.AlignCenterStyle)
-	// 	b.Excel.SetCellValue(b.SheetName, bottomCell, value2)
-	// 	return nil
-	// }
 
 	var drawCol2 = func(prefix1 string, prefix2 string, value1 string, value2 string, value3 string) error {
 		left1Cell := fmt.Sprintf("%s%d", prefix1, row)
@@ -209,8 +200,9 @@ func (b *PlanCostExcel) drawSupplierContent() error {
 
 					if len(mat.Crafts) > 0 {
 						// 实际数量、预算数量
-						mergeStartRow := row
-						mergeEndRow := row
+						// mergeStartRow := row
+						// mergeEndRow := row
+						cates := map[string]MergeRow{}
 						for _, craft := range mat.Crafts {
 							if craft.Supplier.SupplierInfo != nil { // 外箱材料报错
 								// 工序
@@ -245,20 +237,41 @@ func (b *PlanCostExcel) drawSupplierContent() error {
 									// 实际金额 在外层合并单元格
 									realAmount := ""
 									b.drawRow(row, "", "", craft.CraftInfo.Name, supplierName, craft.CraftInfo.Norm, carftHeigth, carftWidth, craft.CraftInfo.Unit, orderCount, confirmCount, price, budgetAmount, realAmount)
-									mergeEndRow = row
+									// mergeEndRow = row
+									category := craft.CraftInfo.Category
+									cates[category] = MergeRow{
+										Rows:         append(cates[category].Rows, row),
+										RealAmount:   craft.RealPrice,
+										BudgetAmount: craft.Supplier.OrderRealPrice,
+									}
+
 									row++
 								}
 
 							}
 
 						}
+
+						fmt.Println(cates)
+						for _, cate := range cates {
+							mergeStartRow := cate.Rows[0]
+							mergeEndRow := cate.Rows[len(cate.Rows)-1]
+							orderRealPrice := cate.BudgetAmount
+							realPrice := cate.RealAmount
+							b.Excel.MergeCell(b.SheetName, fmt.Sprintf("L%d", mergeStartRow), fmt.Sprintf("L%d", mergeEndRow))
+							b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("L%d", mergeEndRow), orderRealPrice)
+							b.Excel.MergeCell(b.SheetName, fmt.Sprintf("M%d", mergeStartRow), fmt.Sprintf("M%d", mergeEndRow))
+							b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("M%d", mergeEndRow), realPrice)
+							perRealPrice += realPrice
+							perOrderRealPrice += orderRealPrice
+						}
 						// 多个工序 合并预算价格、实际价格
-						b.Excel.MergeCell(b.SheetName, fmt.Sprintf("L%d", mergeStartRow), fmt.Sprintf("L%d", mergeEndRow))
-						b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("L%d", mergeEndRow), mat.Crafts[0].Supplier.OrderRealPrice)
-						b.Excel.MergeCell(b.SheetName, fmt.Sprintf("M%d", mergeStartRow), fmt.Sprintf("M%d", mergeEndRow))
-						b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("M%d", mergeEndRow), mat.Crafts[0].RealPrice)
-						perRealPrice += mat.Crafts[0].RealPrice
-						perOrderRealPrice += mat.Crafts[0].Supplier.OrderRealPrice
+						// b.Excel.MergeCell(b.SheetName, fmt.Sprintf("L%d", mergeStartRow), fmt.Sprintf("L%d", mergeEndRow))
+						// b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("L%d", mergeEndRow), mat.Crafts[0].Supplier.OrderRealPrice)
+						// b.Excel.MergeCell(b.SheetName, fmt.Sprintf("M%d", mergeStartRow), fmt.Sprintf("M%d", mergeEndRow))
+						// b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("M%d", mergeEndRow), mat.Crafts[0].RealPrice)
+						// perRealPrice += mat.Crafts[0].RealPrice
+						// perOrderRealPrice += mat.Crafts[0].Supplier.OrderRealPrice
 
 					}
 				}
@@ -411,6 +424,12 @@ func (b *PlanCostExcel) drawRow(rowIndex int, values ...string) {
 
 }
 
+type MergeRow struct {
+	Rows         []int
+	RealAmount   float64
+	BudgetAmount float64
+}
+
 func (b *PlanCostExcel) drawAllContent() error {
 	row := b.Offset + 4
 	comps := b.Content.Pack.Components
@@ -456,9 +475,12 @@ func (b *PlanCostExcel) drawAllContent() error {
 					row++
 					if len(mat.Crafts) > 0 {
 						// 实际数量、预算数量
-						mergeStartRow := row
-						mergeEndRow := row
+						// mergeStartRow := row
+						// mergeEndRow := row
+
+						cates := map[string]MergeRow{}
 						for _, craft := range mat.Crafts {
+
 							supplierName := ""
 							if craft.Supplier.SupplierInfo != nil {
 								supplierName = craft.Supplier.SupplierInfo.Name
@@ -484,17 +506,39 @@ func (b *PlanCostExcel) drawAllContent() error {
 							// 实际金额 在外层合并单元格
 							realAmount := ""
 							b.drawRow(row, "", "", craft.CraftInfo.Name, supplierName, craft.CraftInfo.Norm, carftHeigth, carftWidth, craft.CraftInfo.Unit, orderCount, confirmCount, price, budgetAmount, realAmount)
-							mergeEndRow = row
+							// mergeEndRow = row
+
+							category := craft.CraftInfo.Category
+							cates[category] = MergeRow{
+								Rows:         append(cates[category].Rows, row),
+								RealAmount:   craft.RealPrice,
+								BudgetAmount: craft.Supplier.OrderRealPrice,
+							}
 							row++
 
+						}
+						// 获取分类合并
+						fmt.Println(cates)
+						for _, cate := range cates {
+							mergeStartRow := cate.Rows[0]
+							mergeEndRow := cate.Rows[len(cate.Rows)-1]
+							orderRealPrice := cate.BudgetAmount
+							realPrice := cate.RealAmount
+							b.Excel.MergeCell(b.SheetName, fmt.Sprintf("L%d", mergeStartRow), fmt.Sprintf("L%d", mergeEndRow))
+							b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("L%d", mergeEndRow), orderRealPrice)
+							b.Excel.MergeCell(b.SheetName, fmt.Sprintf("M%d", mergeStartRow), fmt.Sprintf("M%d", mergeEndRow))
+							b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("M%d", mergeEndRow), realPrice)
+							perRealPrice += realPrice
+							perOrderRealPrice += orderRealPrice
+
 						}
 						// 多个工序 合并预算价格、实际价格
-						b.Excel.MergeCell(b.SheetName, fmt.Sprintf("L%d", mergeStartRow), fmt.Sprintf("L%d", mergeEndRow))
-						b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("L%d", mergeEndRow), mat.Crafts[0].Supplier.OrderRealPrice)
-						b.Excel.MergeCell(b.SheetName, fmt.Sprintf("M%d", mergeStartRow), fmt.Sprintf("M%d", mergeEndRow))
-						b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("M%d", mergeEndRow), mat.Crafts[0].RealPrice)
-						perRealPrice += mat.Crafts[0].RealPrice
-						perOrderRealPrice += mat.Crafts[0].Supplier.OrderRealPrice
+						// b.Excel.MergeCell(b.SheetName, fmt.Sprintf("L%d", mergeStartRow), fmt.Sprintf("L%d", mergeEndRow))
+						// b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("L%d", mergeEndRow), mat.Crafts[0].Supplier.OrderRealPrice)
+						// b.Excel.MergeCell(b.SheetName, fmt.Sprintf("M%d", mergeStartRow), fmt.Sprintf("M%d", mergeEndRow))
+						// b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("M%d", mergeEndRow), mat.Crafts[0].RealPrice)
+						// perRealPrice += mat.Crafts[0].RealPrice
+						// perOrderRealPrice += mat.Crafts[0].Supplier.OrderRealPrice
 					}
 				}
 				endRow := row - 1

+ 15 - 5
boxcost/api/plan.go

@@ -135,12 +135,22 @@ func DownLoadPlan(c *gin.Context, apictx *ApiSession) (interface{}, error) {
 				Query:       repo.Map{"_id": purchaseId},
 			}, &purchase)
 			if found {
-				purchaseExcel := NewPurchaseBill(f)
-				purchaseExcel.Content = &purchase
-				purchaseExcel.Title = fmt.Sprintf("%s原材料采购单", companyName)
+				var billExcel IPurchBill
+				if purchase.Process != nil {
+					billExcel = NewProcessBill(f)
+				}
+
+				if len(purchase.Paper) > 0 {
+					billExcel = NewPurchaseBill(f)
+				}
+				// purchaseExcel := NewPurchaseBill(f)
+				billExcel.SetContent(&purchase)
+				billExcel.SetTitle(fmt.Sprintf("%s原材料采购单", companyName))
+				billExcel.SetOffset(offset)
+				// billExcel.Title = fmt.Sprintf("%s原材料采购单", companyName)
 				//设置对应的数据
-				purchaseExcel.Offset = offset
-				purchaseExcel.Draws()
+				// purchaseExcel.Offset = offset
+				billExcel.Draws()
 
 				offset += 15
 			}

+ 320 - 0
boxcost/api/report-process-excel.go

@@ -0,0 +1,320 @@
+package api
+
+import (
+	"box-cost/db/model"
+	"fmt"
+	"regexp"
+
+	_ "image/gif"
+	_ "image/jpeg"
+	_ "image/png"
+
+	"github.com/xuri/excelize/v2"
+)
+
+type ReportProcessExcel struct {
+	Offset int
+	Row    int
+
+	Title string //标题
+
+	Excel *excelize.File
+
+	SheetName string
+
+	AlignCenterStyle int
+
+	Content *model.PurchaseBill
+
+	BudgetCount float64
+	RealCount   float64
+}
+
+func (b *ReportProcessExcel) drawTitle() error {
+	marginLeft := excelize.PageMarginLeft(0.3)
+	b.Excel.SetPageMargins(b.SheetName, marginLeft)
+	tileIndex := b.Offset + 1
+	startCell := fmt.Sprintf("A%d", tileIndex)
+	err := b.Excel.MergeCell(b.SheetName, startCell, fmt.Sprintf("J%d", tileIndex))
+	if err != nil {
+		return err
+	}
+
+	style, err := b.Excel.NewStyle(&excelize.Style{
+		Alignment: &excelize.Alignment{Horizontal: "center", Vertical: "center"},
+		Font:      &excelize.Font{Bold: true, Size: 18}})
+	if err != nil {
+		return err
+	}
+	err = b.Excel.SetCellStyle(b.SheetName, startCell, startCell, style)
+	if err != nil {
+		return err
+	}
+	b.Excel.SetRowHeight(b.SheetName, tileIndex, 23)
+	b.Excel.SetCellValue(b.SheetName, startCell, b.Title)
+	return nil
+}
+
+func (b *ReportProcessExcel) drawSubTitles() error {
+	row := b.Offset + 2
+	styleLeft, err := b.Excel.NewStyle(&excelize.Style{
+		Alignment: &excelize.Alignment{Horizontal: "left", Vertical: "center"},
+		Font:      &excelize.Font{Size: 11}})
+	if err != nil {
+		return err
+	}
+	styleRight, err := b.Excel.NewStyle(&excelize.Style{
+		Alignment: &excelize.Alignment{Horizontal: "right", Vertical: "center"},
+		Font:      &excelize.Font{Size: 11}})
+	if err != nil {
+		return err
+	}
+
+	var drawLeft = func(rowIndex int, value string) error {
+		//左边1
+		left1Cell := fmt.Sprintf("A%d", rowIndex)
+		err = b.Excel.MergeCell(b.SheetName, left1Cell, fmt.Sprintf("E%d", rowIndex))
+		if err != nil {
+			return err
+		}
+		err = b.Excel.SetCellStyle(b.SheetName, left1Cell, left1Cell, styleLeft)
+		if err != nil {
+			return err
+		}
+		b.Excel.SetCellValue(b.SheetName, left1Cell, value)
+		return nil
+	}
+
+	var drawRight = func(rowIndex int, value string) error {
+		right1Cell := fmt.Sprintf("F%d", rowIndex)
+		err = b.Excel.MergeCell(b.SheetName, right1Cell, fmt.Sprintf("J%d", rowIndex))
+		if err != nil {
+			return err
+		}
+		err = b.Excel.SetCellStyle(b.SheetName, right1Cell, right1Cell, styleRight)
+		if err != nil {
+			return err
+		}
+		b.Excel.SetCellValue(b.SheetName, right1Cell, value)
+		return nil
+	}
+	//第一行
+	drawLeft(row, "类别:"+b.Content.Type)
+	drawRight(row, "单号:"+b.Content.SerialNumber)
+	b.Excel.SetRowHeight(b.SheetName, row, 21)
+
+	//第二行
+	drawLeft(row+1, "供应商名称:"+b.Content.Supplier)
+	timeformat := b.Content.CreateTime.Local().Format("2006年01月02号 15:04:05")
+	drawRight(row+1, "下单时间:"+timeformat)
+	b.Excel.SetRowHeight(b.SheetName, row+1, 21)
+
+	//第三行
+	drawLeft(row+2, "产品名称:"+b.Content.ProductName)
+	status := ""
+	if b.Content.Status == "complete" {
+		status = fmt.Sprintf("已完成(%d)", b.Content.ConfirmCount)
+	}
+	if b.Content.Status == "created" {
+		status = "进行中"
+	}
+	drawRight(row+2, "状态:"+status)
+	b.Excel.SetRowHeight(b.SheetName, row+2, 21)
+
+	return nil
+}
+
+func (b *ReportProcessExcel) drawTableTitle() error {
+	row := b.Offset + 5
+	// 品名 规格  数量 单位 单价 金额
+	var drawCol = func(prefix string, value string) error {
+		left1Cell := fmt.Sprintf("%s%d", prefix, row)
+		left2Cell := fmt.Sprintf("%s%d", prefix, row+1)
+
+		err := b.Excel.MergeCell(b.SheetName, left1Cell, left2Cell)
+		if err != nil {
+			return err
+		}
+		err = b.Excel.SetCellStyle(b.SheetName, left1Cell, left2Cell, b.AlignCenterStyle)
+		if err != nil {
+			return err
+		}
+
+		return b.Excel.SetCellValue(b.SheetName, left1Cell, value)
+	}
+	// a采购项目 b规格 c下单数量 d单位 e完成数量 f单价 g预算金额 h实际金额 i交货时间 j备注
+	drawCol("A", "采购项目")
+	drawCol("B", "规格")
+	drawCol("C", "下单数量")
+	drawCol("D", "单位")
+	drawCol("E", "完成数量")
+	drawCol("F", "单价")
+	drawCol("G", "预算金额")
+	drawCol("H", "实际金额")
+	drawCol("I", "交货时间")
+	drawCol("J", "备注")
+
+	return nil
+}
+
+func (b *ReportProcessExcel) drawTableContent() error {
+	row := b.Offset + 7
+	b.Row = row
+
+	var DrawRow = func(rowIndex int, values ...string) {
+		charas := []string{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}
+		for i, c := range charas {
+			v := ""
+			if i < len(values) {
+				v = values[i]
+			}
+			b.Excel.SetCellValue(b.SheetName, fmt.Sprintf("%s%d", c, rowIndex), v)
+			val2Cel := fmt.Sprintf("%s%d", c, rowIndex)
+			b.Excel.SetCellStyle(b.SheetName, val2Cel, val2Cel, b.AlignCenterStyle)
+
+			b.Excel.SetRowHeight(b.SheetName, rowIndex, 21)
+		}
+	}
+	ps := b.Content.Process
+	if ps != nil {
+		deliveryTime := ps.DeliveryTime.Local().Format("2006-01-02")
+		confirmCount := "-"
+		realAmount := "-"
+		// 预算金额
+		budgetAmount := fmt.Sprintf("%.2f", b.Content.BudgetAmount)
+		b.FormatToEmpty(&budgetAmount)
+
+		// 实际完成数
+		confirmCount = fmt.Sprintf("%d", ps.ConfirmCount)
+		b.FormatToEmpty(&confirmCount)
+
+		// 实际金额
+		realAmount = fmt.Sprintf("%.2f", b.Content.RealAmount)
+		b.FormatToEmpty(&realAmount)
+
+		// a采购项目 b规格 c下单数量 d单位 e完成数量 f单价 g预算金额 h实际金额 i交货时间 j备注
+		orderCount := fmt.Sprintf("%d", ps.OrderCount)
+		price := fmt.Sprintf("%.2f", ps.Price)
+		b.FormatToEmpty(&price)
+		DrawRow(row, ps.Name, ps.Norm, orderCount, ps.Unit, confirmCount, price, budgetAmount, realAmount, deliveryTime, ps.Remark)
+		row++
+		b.Row++
+		b.BudgetCount += b.Content.BudgetAmount
+		b.RealCount += b.Content.RealAmount
+	}
+
+	return nil
+}
+
+func (b *ReportProcessExcel) drawTableFooter() error {
+	left1Cell := fmt.Sprintf("A%d", b.Row)
+	border := []excelize.Border{
+		{Type: "top", Style: 1, Color: "000000"},
+		{Type: "left", Style: 1, Color: "000000"},
+		{Type: "right", Style: 1, Color: "000000"},
+		{Type: "bottom", Style: 1, Color: "000000"},
+	}
+	styleLeft, _ := b.Excel.NewStyle(&excelize.Style{
+		Alignment: &excelize.Alignment{Horizontal: "left", Vertical: "center"},
+		Border:    border,
+	})
+
+	b.Excel.SetCellStyle(b.SheetName, left1Cell, left1Cell, styleLeft)
+	b.Excel.SetCellValue(b.SheetName, left1Cell, "送货地址:")
+
+	addCel := fmt.Sprintf("B%d", b.Row)
+
+	b.Excel.MergeCell(b.SheetName, addCel, fmt.Sprintf("E%d", b.Row))
+	b.Excel.SetCellStyle(b.SheetName, addCel, fmt.Sprintf("E%d", b.Row), styleLeft)
+	b.Excel.SetCellValue(b.SheetName, addCel, b.Content.SendTo)
+
+	sureCel := fmt.Sprintf("F%d", b.Row)
+	b.Excel.MergeCell(b.SheetName, sureCel, fmt.Sprintf("J%d", b.Row))
+	b.Excel.SetCellStyle(b.SheetName, sureCel, fmt.Sprintf("J%d", b.Row), styleLeft)
+	b.Excel.SetCellValue(b.SheetName, sureCel, "供应商签字:")
+
+	b.Excel.SetRowHeight(b.SheetName, b.Row, 30)
+
+	return nil
+}
+
+func (b *ReportProcessExcel) drawRemark() error {
+	// 填备注
+	b.Row++
+	remarkTitleCell := fmt.Sprintf("A%d", b.Row)
+	b.Excel.SetCellValue(b.SheetName, remarkTitleCell, "备注:")
+	b.Row++
+
+	remarkContentScell := fmt.Sprintf("A%d", b.Row)
+	// 预留五行备注内容
+	reg := regexp.MustCompile(`\n`)
+	remarkRowNum := len(reg.FindAllString(b.Content.Remark, -1)) + 1
+	b.Row += remarkRowNum
+	remarkContentEcell := fmt.Sprintf("J%d", b.Row)
+	b.Excel.MergeCell(b.SheetName, remarkContentScell, remarkContentEcell)
+	b.Excel.SetCellValue(b.SheetName, remarkContentScell, b.Content.Remark)
+
+	return nil
+
+}
+
+func (b *ReportProcessExcel) Draws() {
+	b.drawTitle()
+	b.drawSubTitles()
+	b.drawTableTitle()
+	b.drawTableContent()
+	b.drawTableFooter()
+	b.drawRemark()
+}
+
+func NewReportProcessBill(f *excelize.File) *ReportProcessExcel {
+
+	border := []excelize.Border{
+		{Type: "top", Style: 1, Color: "000000"},
+		{Type: "left", Style: 1, Color: "000000"},
+		{Type: "right", Style: 1, Color: "000000"},
+		{Type: "bottom", Style: 1, Color: "000000"},
+	}
+
+	styleLeft, _ := f.NewStyle(&excelize.Style{
+		Alignment: &excelize.Alignment{Horizontal: "center", Vertical: "center"},
+		Border:    border,
+		Font:      &excelize.Font{Size: 10},
+	})
+
+	b := &ReportProcessExcel{
+		Title:            "原材料采购单",
+		SheetName:        "Sheet1",
+		Excel:            f,
+		Offset:           0,
+		AlignCenterStyle: styleLeft,
+	}
+
+	f.SetColWidth(b.SheetName, "A", "J", 11.5)
+	f.SetPageMargins(b.SheetName, excelize.PageMarginTop(0), excelize.PageMarginLeft(0), excelize.PageMarginRight(0))
+	return b
+}
+
+func (b *ReportProcessExcel) FormatToEmpty(str *string) {
+	if *str == "0" || *str == "0.00" {
+		*str = ""
+	}
+
+}
+
+func (b *ReportProcessExcel) PrintPurchType() string {
+	return "process report"
+}
+
+func (b *ReportProcessExcel) SetContent(content *model.PurchaseBill) {
+	b.Content = content
+
+}
+func (b *ReportProcessExcel) SetTitle(title string) {
+	b.Title = title
+
+}
+func (b *ReportProcessExcel) SetOffset(offset int) {
+	b.Offset = offset
+
+}

+ 18 - 0
boxcost/api/report-purchase-excel.go

@@ -301,3 +301,21 @@ func (b *ReportPurchaseExcel) FormatToEmpty(str *string) {
 	}
 
 }
+
+// 接口方法
+
+func (b *ReportPurchaseExcel) PrintPurchType() string {
+	return "purchase report"
+
+}
+func (b *ReportPurchaseExcel) SetContent(content *model.PurchaseBill) {
+	b.Content = content
+
+}
+func (b *ReportPurchaseExcel) SetOffset(offset int) {
+	b.Offset = offset
+}
+func (b *ReportPurchaseExcel) SetTitle(title string) {
+	b.Title = title
+
+}

+ 1 - 1
boxcost/db/model/bill.go

@@ -155,7 +155,7 @@ type ProduceBill struct {
 	RealAmount float64 `bson:"realAmount,omitempty" json:"realAmount"`
 
 	// 预算金额
-	BudgetAmount float64 `bson:"budgetAmount,omitempty" json:"realAmbudgetAmountount"`
+	BudgetAmount float64 `bson:"budgetAmount,omitempty" json:"budgetAmount"`
 
 	//供应商
 	Supplier string `bson:"supplier,omitempty" json:"supplier"`

+ 1 - 1
boxcost/db/model/supplier.go

@@ -13,7 +13,7 @@ type Supplier struct {
 	Address    string             `bson:"address,omitempty" json:"address"`
 	Phone      string             `bson:"phone,omitempty" json:"phone"`
 	Categorys  []string           `bson:"categorys,omitempty" json:"categorys"` // 多个分类
-	Category   string             `bson:"category,omitempty" json:"category"`   // 多个分类
+	Category   string             `bson:"category,omitempty" json:"category"`   // todo 旧的待删除
 	CreateTime time.Time          `bson:"createTime,omitempty" json:"createTime"`
 	UpdateTime time.Time          `bson:"updateTime,omitempty" json:"updateTime"`
 }