123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- package api
- import (
- "box-cost/db/model"
- "box-cost/db/repo"
- "errors"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/xuri/excelize/v2"
- )
- // 统计报表 按时间范围,供应商 包装-计划(多选) 维度进行过滤,形成报表。可以下载
- func Report(r *GinRouter) {
- // 加工列表
- r.GET("/report/produce/list", ReportProduceList)
- // 采购列表
- r.GET("/report/purchase/list", ReportPurchaseList)
- r.GET("/report/produce/download", ReportProduceDownload)
- r.GET("/report/purchase/download", ReportPurchaseDownload)
- }
- // 加工单
- func ReportProduceList(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- page, size, query := UtilQueryPageSize(c)
- // 条件处理
- // 获取采购单符合条件的信息
- return repo.RepoPageSearch(apictx.CreateRepoCtx(), &repo.PageSearchOptions{
- CollectName: repo.CollectionBillProduce,
- Query: handleReportQuery(query),
- Page: page,
- Size: size,
- })
- }
- // 采购单
- func ReportPurchaseList(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- page, size, query := UtilQueryPageSize(c)
- return repo.RepoPageSearch(apictx.CreateRepoCtx(), &repo.PageSearchOptions{
- CollectName: repo.CollectionBillPurchase,
- Query: handleReportQuery(query),
- Page: page,
- Size: size,
- })
- }
- func ReportProduceDownload(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- _, _, query := UtilQueryPageSize(c)
- // 获取采符合条件的信息
- produces := []model.ProduceBill{}
- err := repo.RepoDocsSearch(apictx.CreateRepoCtx(), &repo.PageSearchOptions{
- CollectName: repo.CollectionBillProduce,
- Query: handleReportQuery(query),
- }, &produces)
- if err != nil || len(produces) < 1 {
- return nil, errors.New("数据不存在")
- }
- f := excelize.NewFile()
- index := f.NewSheet("Sheet1")
- sheetName := f.GetSheetName(index)
- f.SetActiveSheet(index)
- f.SetDefaultFont("宋体")
- 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"},
- }
- alignCenterStyle, _ := f.NewStyle(&excelize.Style{
- Alignment: &excelize.Alignment{Horizontal: "center", Vertical: "center"},
- Border: border,
- })
- offset := 0
- info := model.Setting{}
- repo.RepoSeachDoc(apictx.CreateRepoCtx(), &repo.DocSearchOptions{
- CollectName: "infos",
- }, &info)
- var budgetCount float64 = 0
- var realCount float64 = 0
- var row int = 0
- for _, produce := range produces {
- produceExcel := NewReportProduceExcel(f)
- produceExcel.Content = &produce
- produceExcel.Title = fmt.Sprintf("%s加工单", info.CompanyName)
- //设置对应的数据
- produceExcel.Offset = offset
- produceExcel.Draws()
- budgetCount += produceExcel.BudgetCount
- realCount += produceExcel.RealCount
- offset += 15
- row = produceExcel.Row
- }
- row++
- startCell := fmt.Sprintf("%s%d", "A", row)
- endCell := fmt.Sprintf("%s%d", "H", row)
- f.MergeCell(sheetName, startCell, endCell)
- f.SetCellStyle(sheetName, startCell, endCell, alignCenterStyle)
- f.SetCellValue(sheetName, startCell, "汇总金额")
- // 预算金额汇总
- budgetCountCell := fmt.Sprintf("%s%d", "I", row)
- budgetCountStr := ""
- if realCount > 0 {
- budgetCountStr = fmt.Sprintf("%.2f", budgetCount)
- }
- f.SetCellValue(sheetName, budgetCountCell, budgetCountStr)
- f.SetCellStyle(sheetName, budgetCountCell, budgetCountCell, alignCenterStyle)
- // 实际金额汇总
- RealCountCell := fmt.Sprintf("%s%d", "J", row)
- realCountStr := ""
- if realCount > 0 {
- realCountStr = fmt.Sprintf("%.2f", realCount)
- }
- f.SetCellValue(sheetName, RealCountCell, realCountStr)
- f.SetCellStyle(sheetName, RealCountCell, RealCountCell, alignCenterStyle)
- f.SetRowHeight(sheetName, row, 21)
- c.Header("Content-Type", "application/octet-stream")
- c.Header("Content-Disposition", "attachment; filename="+"reportProduce.xlsx")
- c.Header("Content-Transfer-Encoding", "binary")
- err = f.Write(c.Writer)
- if err != nil {
- return nil, err
- }
- return nil, nil
- }
- func ReportPurchaseDownload(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- _, _, query := UtilQueryPageSize(c)
- purchases := []model.PurchaseBill{}
- err := repo.RepoDocsSearch(apictx.CreateRepoCtx(), &repo.PageSearchOptions{
- CollectName: repo.CollectionBillPurchase,
- Query: handleReportQuery(query),
- }, &purchases)
- if err != nil || len(purchases) < 1 {
- return nil, errors.New("数据不存在")
- }
- f := excelize.NewFile()
- index := f.NewSheet("Sheet1")
- sheetName := f.GetSheetName(index)
- f.SetActiveSheet(index)
- f.SetDefaultFont("宋体")
- 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"},
- }
- alignCenterStyle, _ := f.NewStyle(&excelize.Style{
- Alignment: &excelize.Alignment{Horizontal: "center", Vertical: "center"},
- Border: border,
- })
- offset := 0
- info := model.Setting{}
- repo.RepoSeachDoc(apictx.CreateRepoCtx(), &repo.DocSearchOptions{
- CollectName: "infos",
- }, &info)
- var budgetCount float64 = 0
- var realCount float64 = 0
- var row int = 0
- for _, purchase := range purchases {
- purchaseExcel := NewReportPurchaseExcel(f)
- purchaseExcel.Content = &purchase
- purchaseExcel.Title = fmt.Sprintf("%s原材料采购单", info.CompanyName)
- //设置对应的数据
- purchaseExcel.Offset = offset
- purchaseExcel.Draws()
- budgetCount += purchaseExcel.BudgetCount
- realCount += purchaseExcel.RealCount
- offset += 15
- row = purchaseExcel.Row
- }
- row++
- startCell := fmt.Sprintf("%s%d", "A", row)
- endCell := fmt.Sprintf("%s%d", "H", row)
- f.MergeCell(sheetName, startCell, endCell)
- f.SetCellStyle(sheetName, startCell, endCell, alignCenterStyle)
- f.SetCellValue(sheetName, startCell, "汇总金额")
- // 预算金额汇总
- budgetCountCell := fmt.Sprintf("%s%d", "I", row)
- budgetCountStr := ""
- if realCount > 0 {
- budgetCountStr = fmt.Sprintf("%.2f", budgetCount)
- }
- f.SetCellValue(sheetName, budgetCountCell, budgetCountStr)
- f.SetCellStyle(sheetName, budgetCountCell, budgetCountCell, alignCenterStyle)
- // 实际金额汇总
- RealCountCell := fmt.Sprintf("%s%d", "J", row)
- realCountStr := ""
- if realCount > 0 {
- realCountStr = fmt.Sprintf("%.2f", realCount)
- }
- f.SetCellValue(sheetName, RealCountCell, realCountStr)
- f.SetCellStyle(sheetName, RealCountCell, RealCountCell, alignCenterStyle)
- f.SetRowHeight(sheetName, row, 21)
- c.Header("Content-Type", "application/octet-stream")
- c.Header("Content-Disposition", "attachment; filename="+"reportPurchase.xlsx")
- c.Header("Content-Transfer-Encoding", "binary")
- err = f.Write(c.Writer)
- if err != nil {
- return nil, err
- }
- return nil, nil
- }
|