From e718c2568e9712ab40dc4d2d4d20cf3635dc4c34 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 07 六月 2024 14:10:49 +0800
Subject: [PATCH] 月度统计报表下载接口
---
example.xlsx | 0
models/month_stats.go | 9 +
controllers/report_forms_controller.go | 59 ++++++-
service/month_forms.go | 181 +++++++++++++++++++++++++
docs/swagger.yaml | 31 ++++
docs/docs.go | 52 +++++++
docs/swagger.json | 52 +++++++
router/router.go | 1
8 files changed, 372 insertions(+), 13 deletions(-)
diff --git a/controllers/report_forms_controller.go b/controllers/report_forms_controller.go
index 6d7b0ce..17288a7 100644
--- a/controllers/report_forms_controller.go
+++ b/controllers/report_forms_controller.go
@@ -8,7 +8,6 @@
"wms/constvar"
"wms/extend/code"
"wms/extend/util"
- "wms/models"
"wms/pkg/logx"
"wms/request"
"wms/service"
@@ -83,11 +82,6 @@
if err != nil {
logx.Errorf("DownloadInventoryForms Export err:%v", err)
util.ResponseFormat(c, code.InternalError, "瀵煎嚭鏁版嵁鍒版枃浠跺け璐�")
- return
- }
-
- if err != nil {
- util.ResponseFormat(c, code.RequestParamError, "瀵煎嚭澶辫触")
return
}
@@ -306,11 +300,6 @@
return
}
- if err != nil {
- util.ResponseFormat(c, code.RequestParamError, "瀵煎嚭澶辫触")
- return
- }
-
fileContentDisposition := "attachment;filename=\"" + url.QueryEscape(filename) + "\""
c.Header("Content-Type", "application/xlsx")
c.Header("Content-Disposition", fileContentDisposition)
@@ -333,13 +322,57 @@
return
}
- list, total, err := models.NewMonthStatsSearch().SetPage(params.Page, params.PageSize).SetKeyword(params.Keyword).SetDate(params.Date).Find()
+ monthFormsService := service.NewMonthFormsService()
+ total, err := monthFormsService.Count(params)
if err != nil {
+ logx.Errorf("MonthStats count err:%v", err)
+ util.ResponseFormat(c, code.InternalError, "鏌ヨ鎬绘暟澶辫触")
+ return
+ }
+ result, err := monthFormsService.Query(params)
+ if err != nil {
+ logx.Errorf("MonthStats query err:%v", err)
util.ResponseFormat(c, code.InternalError, "鏌ヨ澶辫触")
return
}
- util.ResponseFormatList(c, code.Success, list, int(total))
+ util.ResponseFormatList(c, code.Success, result, int(total))
+}
+
+// DownloadMonthStats
+// @Tags 鎶ヨ〃
+// @Summary 涓嬭浇鏈堝害缁熻搴撳瓨鎶ヨ〃
+// @Produce application/json
+// @Param object body request.GetMonthStats true "鏌ヨ鍙傛暟"
+// @Param Authorization header string true "token"
+// @Success 200 {object} util.ResponseList{data=[]models.MonthStats} "鎴愬姛"
+// @Router /api-wms/v1/forms/downloadMonthStats [post]
+func (slf ReportFormsController) DownloadMonthStats(c *gin.Context) {
+ var params request.GetMonthStats
+ if err := c.BindJSON(¶ms); err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+ return
+ }
+
+ monthFormsService := service.NewMonthFormsService()
+ list, err := monthFormsService.FetchAll(params)
+ if err != nil {
+ logx.Errorf("DownloadMonthStats FetchAll err:%v", err)
+ util.ResponseFormat(c, code.InternalError, "鏌ヨ澶辫触")
+ return
+ }
+ filename, err := monthFormsService.Export(list)
+ if err != nil {
+ logx.Errorf("DownloadMonthStats Export err:%v", err)
+ util.ResponseFormat(c, code.InternalError, "瀵煎嚭鏁版嵁鍒版枃浠跺け璐�")
+ return
+ }
+
+ fileContentDisposition := "attachment;filename=\"" + url.QueryEscape(filename) + "\""
+ c.Header("Content-Type", "application/xlsx")
+ c.Header("Content-Disposition", fileContentDisposition)
+ c.File(filename)
+ defer os.Remove(filename)
}
// DoMonthStats
diff --git a/docs/docs.go b/docs/docs.go
index 24e7450..ebff3df 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -624,6 +624,58 @@
}
}
},
+ "/api-wms/v1/forms/downloadMonthStats": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "鎶ヨ〃"
+ ],
+ "summary": "涓嬭浇鏈堝害缁熻搴撳瓨鎶ヨ〃",
+ "parameters": [
+ {
+ "description": "鏌ヨ鍙傛暟",
+ "name": "object",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/request.GetMonthStats"
+ }
+ },
+ {
+ "type": "string",
+ "description": "token",
+ "name": "Authorization",
+ "in": "header",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.MonthStats"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
"/api-wms/v1/forms/getHistory": {
"post": {
"produces": [
diff --git a/docs/swagger.json b/docs/swagger.json
index 73aef55..55a6798 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -612,6 +612,58 @@
}
}
},
+ "/api-wms/v1/forms/downloadMonthStats": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "鎶ヨ〃"
+ ],
+ "summary": "涓嬭浇鏈堝害缁熻搴撳瓨鎶ヨ〃",
+ "parameters": [
+ {
+ "description": "鏌ヨ鍙傛暟",
+ "name": "object",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/request.GetMonthStats"
+ }
+ },
+ {
+ "type": "string",
+ "description": "token",
+ "name": "Authorization",
+ "in": "header",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.MonthStats"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
"/api-wms/v1/forms/getHistory": {
"post": {
"produces": [
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 23eb568..d8fb65a 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -2320,6 +2320,37 @@
summary: 涓嬭浇浣嶇疆鎶ヨ〃
tags:
- 鎶ヨ〃
+ /api-wms/v1/forms/downloadMonthStats:
+ post:
+ parameters:
+ - description: 鏌ヨ鍙傛暟
+ in: body
+ name: object
+ required: true
+ schema:
+ $ref: '#/definitions/request.GetMonthStats'
+ - description: token
+ in: header
+ name: Authorization
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: 鎴愬姛
+ schema:
+ allOf:
+ - $ref: '#/definitions/util.ResponseList'
+ - properties:
+ data:
+ items:
+ $ref: '#/definitions/models.MonthStats'
+ type: array
+ type: object
+ summary: 涓嬭浇鏈堝害缁熻搴撳瓨鎶ヨ〃
+ tags:
+ - 鎶ヨ〃
/api-wms/v1/forms/getHistory:
post:
parameters:
diff --git a/example.xlsx b/example.xlsx
new file mode 100644
index 0000000..5e4b104
--- /dev/null
+++ b/example.xlsx
Binary files differ
diff --git a/models/month_stats.go b/models/month_stats.go
index a40c003..64e1111 100644
--- a/models/month_stats.go
+++ b/models/month_stats.go
@@ -347,3 +347,12 @@
}
return m
}
+
+func (slf *MonthStatsSearch) Count() (int64, error) {
+ var (
+ total int64
+ db = slf.build()
+ )
+ err := db.Count(&total).Error
+ return total, err
+}
diff --git a/router/router.go b/router/router.go
index 6cd7916..b3ab526 100644
--- a/router/router.go
+++ b/router/router.go
@@ -160,6 +160,7 @@
reportFormsAPI.POST("getLocationForms", reportFormsController.GetLocationForms) //鑾峰彇浣嶇疆鎶ヨ〃
reportFormsAPI.POST("downloadLocationForms", reportFormsController.DownloadLocationForms) //涓嬭浇浣嶇疆鎶ヨ〃
reportFormsAPI.POST("monthStats", reportFormsController.MonthStats) //鑾峰彇鏈堝害缁熻鎶ヨ〃
+ reportFormsAPI.POST("downloadMonthStats", reportFormsController.DownloadMonthStats) //涓嬭浇鏈堝害缁熻鎶ヨ〃
reportFormsAPI.POST("doMonthStats", reportFormsController.DoMonthStats) //鎵嬪姩璺戞湀搴︾粺璁″簱瀛樻姤琛�
}
diff --git a/service/month_forms.go b/service/month_forms.go
new file mode 100644
index 0000000..2073e9d
--- /dev/null
+++ b/service/month_forms.go
@@ -0,0 +1,181 @@
+package service
+
+import (
+ "fmt"
+ "github.com/xuri/excelize/v2"
+ "strconv"
+ "time"
+ "wms/models"
+ "wms/pkg/logx"
+ "wms/request"
+)
+
+type MonthFormsService struct{}
+
+func NewMonthFormsService() *MonthFormsService {
+ return &MonthFormsService{}
+}
+
+func (slf *MonthFormsService) Query(params request.GetMonthStats) (result []*models.MonthStats, err error) {
+ search := slf.BuildSearch(params)
+ search = search.SetPage(params.Page, params.PageSize)
+ return search.FindNotTotal()
+}
+
+func (slf *MonthFormsService) BuildSearch(params request.GetMonthStats) (search *models.MonthStatsSearch) {
+ search = models.NewMonthStatsSearch().SetKeyword(params.Keyword).SetDate(params.Date)
+ return search
+}
+
+func (slf *MonthFormsService) Count(params request.GetMonthStats) (total int64, err error) {
+ search := slf.BuildSearch(params)
+ return search.Count()
+}
+
+func (slf *MonthFormsService) FetchAll(params request.GetMonthStats) (list []*models.MonthStats, err error) {
+ total, err := slf.Count(params)
+ if err != nil {
+ return nil, err
+ }
+ list = make([]*models.MonthStats, 0, total)
+ params.PageSize = 500
+ page := 1
+ for {
+ params.Page = page
+ data, err := slf.Query(params)
+ if err != nil {
+ return nil, err
+ }
+ if len(data) == 0 {
+ break
+ }
+ list = append(list, data...)
+ page++
+ }
+ return
+}
+
+func (slf *MonthFormsService) Export(dataList []*models.MonthStats) (filename string, err error) {
+ // 鍒涘缓涓�涓柊鐨� Excel 鏂囦欢
+ f := excelize.NewFile()
+
+ if err != nil {
+ logx.Errorf("NewSheet err:%v", err)
+ return "", err
+ }
+
+ // 璁剧疆琛ㄥご
+ f.SetCellValue("Sheet1", "A1", "浜у搧缂栫爜")
+ 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") // 鍚堝苟鍗曞厓鏍�
+
+ unitData := []string{"浠�", "鍖�", "绫�", "閲嶉噺"}
+ for i, header := range unitData {
+ cell := getColumnAlphabet(i+3) + "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,
+ Fill: excelize.Fill{
+ Type: "pattern",
+ Pattern: 1,
+ Shading: 0,
+ },
+ Font: &excelize.Font{
+ Bold: true,
+ },
+ Alignment: &excelize.Alignment{
+ Horizontal: "center",
+ },
+ }
+ titleStyle, err := f.NewStyle(style)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ f.SetCellStyle("Sheet1", "A1", "R2", titleStyle)
+ // 璁剧疆鍒楀
+ f.SetColWidth("Sheet1", "A", "B", 30)
+ f.SetColWidth("Sheet1", "C", "R", 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)
+ 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", "G"+column, v.InputAmount)
+ 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", "K"+column, v.OutputAmount)
+ 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", "O"+column, v.EndAmount)
+ 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)
+ }
+ }
+ }
+
+ fileName := fmt.Sprintf("鏈堝害缁熻鎶ヨ〃%s.xlsx", time.Now().Format("2006-01-02-1504"))
+ if err := f.SaveAs(fileName); err != nil {
+ return fileName, err
+ }
+
+ return fileName, nil
+}
--
Gitblit v1.8.0