From e5df488268e29b272932e6cc1d2b1e7034590ba0 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期三, 12 六月 2024 11:40:45 +0800 Subject: [PATCH] weedfs包放到项目里 --- controllers/report_forms_controller.go | 429 +++++++++++++++++++++++++++++----------------------- 1 files changed, 238 insertions(+), 191 deletions(-) diff --git a/controllers/report_forms_controller.go b/controllers/report_forms_controller.go index 9575819..17288a7 100644 --- a/controllers/report_forms_controller.go +++ b/controllers/report_forms_controller.go @@ -1,16 +1,17 @@ package controllers import ( - "fmt" "github.com/gin-gonic/gin" "github.com/shopspring/decimal" + "net/url" + "os" "wms/constvar" "wms/extend/code" "wms/extend/util" - "wms/models" + "wms/pkg/logx" "wms/request" - "wms/response" "wms/service" + "wms/task" ) type ReportFormsController struct { @@ -27,134 +28,77 @@ // @Tags 鎶ヨ〃 // @Summary 鑾峰彇搴撳瓨鎶ヨ〃 // @Produce application/json +// @Param Authorization header string true "token" // @Param object body request.GetInventoryForms true "鏌ヨ鍙傛暟" // @Success 200 {object} util.ResponseList{data=[]response.InventoryForms} "鎴愬姛" // @Router /api-wms/v1/forms/getInventoryForms [post] func (slf ReportFormsController) GetInventoryForms(c *gin.Context) { var params request.GetInventoryForms - if err := c.BindJSON(¶ms); err != nil { + err := c.BindJSON(¶ms) + if err != nil { util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") return } - //鏌ヨ浜у搧 - search := models.NewMaterialSearch() - search.Orm = search.Orm.Model(&models.Material{}). - Select(`material.id, material.name, material.cost, material.amount, material.unit, wms_product_category.name as category_name `). - Joins("left join wms_product_category on material.category_id = wms_product_category.id") - if len(params.CategoryIds) > 0 { - search.Orm.Where("material.category_id in (?)", params.CategoryIds) - } - if params.KeyWord != "" { - search.Orm.Where("material.name like ?", "%"+params.KeyWord+"%").Or("wms_product_category.name like ?", "%"+params.KeyWord+"%") - } - var ( - materials = make([]*models.Material, 0) - total int64 - ) - if err := search.Orm.Count(&total).Error; err != nil { - util.ResponseFormat(c, code.RequestParamError, "鏌ヨtotal澶辫触") + inventoryReportFormsService := service.NewInventoryReportFormsService() + total, err := inventoryReportFormsService.Count(params) + if err != nil { + logx.Errorf("GetInventoryForms count err:%v", err) + util.ResponseFormat(c, code.InternalError, "鏌ヨ鎬绘暟澶辫触") return } - if params.Page*params.PageSize > 0 { - search.Orm = search.Orm.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize) - } - if err := search.Orm.Find(&materials).Error; err != nil { - util.ResponseFormat(c, code.RequestParamError, fmt.Errorf("鏌ヨ浜у搧澶辫触: %v", err)) + result, err := inventoryReportFormsService.Query(params) + if err != nil { + logx.Errorf("GetInventoryForms query err:%v", err) + util.ResponseFormat(c, code.InternalError, "鏌ヨ澶辫触") return } - locations, err := models.NewLocationSearch().SetJointName(params.WarehouseCode).FindNotTotal() - if err != nil { - util.ResponseFormat(c, code.RequestParamError, "鏌ヨ浠撳簱浣嶇疆澶辫触") - return - } - locationIds := make([]int, 0) - for _, location := range locations { - locationIds = append(locationIds, location.Id) - } - //鏌ヨ鍦ㄥ簱鏁伴噺 - productIds := make([]string, 0) - for _, material := range materials { - productIds = append(productIds, material.ID) - } - productAmounts, err := models.NewLocationProductAmountSearch().SetProductIds(productIds).SetLocationIds(locationIds).Find() - if err != nil { - util.ResponseFormat(c, code.RequestParamError, "鏌ヨ鍦ㄥ簱鏁伴噺澶辫触") - return - } - - //鏌ヨ鍑哄叆搴撳氨缁暟閲� - var inHouse []Detail - var outHouse []Detail - dbIn := models.NewOperationDetailsSearch().Orm.Model(&models.OperationDetails{}). - Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation.status as status"). - Joins("left join wms_operation ON wms_operation_details.operation_id=wms_operation.id"). - Where("wms_operation.base_operation_type in (?)", []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeInternal}). - Where("wms_operation.status in (?)", []constvar.OperationStatus{constvar.OperationStatus_Finish}) - dbOut := models.NewOperationDetailsSearch().Orm.Model(&models.OperationDetails{}). - Select("wms_operation_details.product_id,wms_operation_details.amount,wms_operation.status as status"). - Joins("left join wms_operation ON wms_operation_details.operation_id=wms_operation.id"). - Where("wms_operation.base_operation_type in (?)", []constvar.BaseOperationType{constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeInternal, constvar.BaseOperationTypeDisuse}). - Where("wms_operation.status in (?)", []constvar.OperationStatus{constvar.OperationStatus_Ready, constvar.OperationStatus_Finish}) - if len(locationIds) > 0 { - dbIn.Where("wms_operation.to_location_id in (?)", locationIds) - dbOut.Where("wms_operation.from_location_id in (?)", locationIds) - } - if len(productIds) > 0 { - dbIn.Where("wms_operation_details.product_id in (?)", productIds) - dbOut.Where("wms_operation_details.product_id in (?)", productIds) - } - err = dbIn.Find(&inHouse).Error - if err != nil { - util.ResponseFormat(c, code.RequestParamError, "鏌ヨ鍏ュ簱鏁伴噺澶辫触") - return - } - err = dbOut.Find(&outHouse).Error - if err != nil { - util.ResponseFormat(c, code.RequestParamError, "鏌ヨ鍑哄簱鏁伴噺澶辫触") - return - } - var result []response.InventoryForms - for _, material := range materials { - var resp response.InventoryForms - resp.ProduceId = material.ID - resp.ProductName = material.Name - resp.Cost = material.Cost - resp.Unit = material.Unit - resp.Value = material.Amount.Mul(material.Cost) - resp.ProductType = material.CategoryName - for _, amount := range productAmounts { - if material.ID == amount.ProductId { - resp.Amount = resp.Amount.Add(amount.Amount) - } - } - for _, details := range inHouse { - if material.ID == details.ProductId { - resp.In = resp.In.Add(details.Amount) - } - } - available := decimal.NewFromInt(0) - for _, details := range outHouse { - if material.ID == details.ProductId { - if details.Status == constvar.OperationStatus_Ready { - available = available.Add(details.Amount) - } else { - resp.Out = resp.Out.Add(details.Amount) - } - } - } - resp.AvailableNumber = resp.Amount.Sub(available) - result = append(result, resp) - } util.ResponseFormatList(c, code.Success, result, int(total)) +} + +// DownloadInventoryForms +// @Tags 鎶ヨ〃 +// @Summary 涓嬭浇搴撳瓨鎶ヨ〃 +// @Produce application/json +// @Param Authorization header string true "token" +// @Param object body request.GetInventoryForms true "鏌ヨ鍙傛暟" +// @Success 200 {object} util.ResponseList{data=[]response.InventoryForms} "鎴愬姛" +// @Router /api-wms/v1/forms/downloadInventoryForms [post] +func (slf ReportFormsController) DownloadInventoryForms(c *gin.Context) { + var params request.GetInventoryForms + err := c.BindJSON(¶ms) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + inventoryReportFormsService := service.NewInventoryReportFormsService() + list, err := inventoryReportFormsService.FetchAll(params) + if err != nil { + logx.Errorf("DownloadInventoryForms FetchAll err:%v", err) + util.ResponseFormat(c, code.InternalError, "鏌ヨ澶辫触") + return + } + filename, err := inventoryReportFormsService.Export(list) + if err != nil { + logx.Errorf("DownloadInventoryForms 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) } // GetHistory // @Tags 鎶ヨ〃 -// @Summary 鑾峰彇鍘嗗彶淇℃伅 +// @Summary 鑾峰彇鍑哄叆搴撴槑缁� // @Produce application/json +// @Param Authorization header string true "token" // @Param object body request.GetInventoryHistory true "鏌ヨ鍙傛暟" -// @Success 200 {object} util.ResponseList{data=[]response.InventoryHistory} "鎴愬姛" +// @Success 200 {object} util.ResponseList{data=[]models.MoveHistory} "鎴愬姛" // @Router /api-wms/v1/forms/getHistory [post] func (slf ReportFormsController) GetHistory(c *gin.Context) { slf.GetHistoryNew(c) @@ -244,57 +188,63 @@ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") return } - //鑾峰彇鎿嶄綔璇︽儏 - detailsSearch := models.NewMoveHistorySearch() - var ( - result []*response.InventoryHistory - total uint64 - ids []int - err error - ) - if params.KeyWord != "" { - ids, total, err = service.SearchHistoryReport(params.KeyWord, params.BaseOperationType, params.Page, params.PageSize) - if err != nil { - util.ResponseFormat(c, code.InternalError, err.Error()) - return - } - if len(ids) == 0 { - util.ResponseFormatList(c, code.Success, result, 0) - return - } + + historyFormsService := service.NewHistoryFormsService() + result, err := historyFormsService.Query(params) + if err != nil { + util.ResponseFormat(c, code.InternalError, "鍐呴儴閿欒") + return } - detailsSearch.Orm = detailsSearch.Orm.Model(&models.MoveHistory{}). - Select("number, updated_at as date, product_name as product_name, from_location_id, operation_id," + - "to_location_id, amount, unit, operator as contacted_name, base_operation_type, weight, product_id, from_location, to_location").Order("id desc") - if len(ids) > 0 { - detailsSearch.Orm = detailsSearch.Orm.Where("id in ?", ids) - } - if params.BaseOperationType != 0 { - detailsSearch.Orm = detailsSearch.Orm.Where("base_operation_type = ?", params.BaseOperationType) - } - var t int64 - err = detailsSearch.Orm.Count(&t).Error + total, err := historyFormsService.Count(params) if err != nil { - util.ResponseFormat(c, code.RequestParamError, fmt.Errorf("鏌ヨ鎬绘潯鏁板け璐�: %v", err)) + util.ResponseFormat(c, code.InternalError, "鍐呴儴閿欒") return } - total = uint64(t) - if params.Page*params.PageSize > 0 { - detailsSearch.Orm = detailsSearch.Orm.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize) - } - err = detailsSearch.Orm.Find(&result).Error - if err != nil { - util.ResponseFormat(c, code.RequestParamError, fmt.Errorf("鏌ヨ鎿嶄綔鏄庣粏澶辫触: %v", err)) - return - } + util.ResponseFormatList(c, code.Success, result, int(total)) +} + +// DownloadHistory +// @Tags 鎶ヨ〃 +// @Summary 涓嬭浇鍑哄叆搴撴槑缁嗘姤琛� +// @Produce application/json +// @Param Authorization header string true "token" +// @Param object body request.GetInventoryHistory true "鏌ヨ鍙傛暟" +// @Success 200 {object} util.ResponseList{data=[]models.MoveHistory} "鎴愬姛" +// @Router /api-wms/v1/forms/downloadHistory [post] +func (slf ReportFormsController) DownloadHistory(c *gin.Context) { + var params request.GetInventoryHistory + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + historyFormsService := service.NewHistoryFormsService() + list, err := historyFormsService.FetchAll(params) + if err != nil { + logx.Errorf("DownloadHistory FetchAll err:%v", err) + util.ResponseFormat(c, code.InternalError, "鏌ヨ澶辫触") + return + } + filename, err := historyFormsService.Export(list, params) + if err != nil { + logx.Errorf("DownloadHistory 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) } // GetLocationForms // @Tags 鎶ヨ〃 // @Summary 鑾峰彇浣嶇疆鎶ヨ〃 // @Produce application/json +// @Param Authorization header string true "token" // @Param object body request.GetLocationForms true "鏌ヨ鍙傛暟" // @Success 200 {object} util.ResponseList{data=[]response.LocationForms} "鎴愬姛" // @Router /api-wms/v1/forms/getLocationForms [post] @@ -304,49 +254,146 @@ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") return } - ids := make([]int, 0) - if params.LocationId != 0 { - ids = append(ids, params.LocationId) - } else { - //鏌ヨ浣嶇疆 - locations, err := models.NewLocationSearch().SetJointName(params.WareHouseCode).SetType(3).FindAll() - if err != nil { - util.ResponseFormat(c, code.RequestParamError, "鏌ヨ浣嶇疆澶辫触") - return - } - for _, location := range locations { - ids = append(ids, location.Id) - } - } - var ( - amounts []*models.LocationProductAmount - total uint64 - totalInt64 int64 - err error - ) - if params.KeyWord != "" { - amounts, total, err = service.SearchLocationReport(params.KeyWord, params.Page, params.PageSize) - } else { - amounts, totalInt64, err = models.NewLocationProductAmountSearch().SetPage(params.Page, params.PageSize).SetPreload(true).SetKeyword(params.KeyWord).SetProductId(params.ProductId).SetLocationIds(ids).FindByPage() - if err != nil { - util.ResponseFormat(c, code.RequestParamError, "鏌ヨ鏁伴噺澶辫触") - return - } - total = uint64(totalInt64) - } - var result []response.LocationForms - for _, amount := range amounts { - var resp response.LocationForms - resp.Amount = amount.Amount - resp.LocationName = amount.Location.Name - resp.ProduceId = amount.Product.ID - resp.ProductName = amount.Product.Name - resp.ProductTypeName = amount.ProductCategory.Name - resp.Unit = amount.Product.Unit - resp.Value = resp.Amount.Mul(amount.Product.Cost) - result = append(result, resp) + locationFormsService := service.NewLocationFormsService() + total, err := locationFormsService.Count(params) + if err != nil { + logx.Errorf("GetLocationForms count err:%v", err) + util.ResponseFormat(c, code.InternalError, "鏌ヨ鎬绘暟澶辫触") + return + } + result, err := locationFormsService.Query(params) + if err != nil { + logx.Errorf("GetLocationForms query err:%v", err) + util.ResponseFormat(c, code.InternalError, "鏌ヨ澶辫触") + return } util.ResponseFormatList(c, code.Success, result, int(total)) } + +// DownloadLocationForms +// @Tags 鎶ヨ〃 +// @Summary 涓嬭浇浣嶇疆鎶ヨ〃 +// @Produce application/json +// @Param Authorization header string true "token" +// @Param object body request.GetLocationForms true "鏌ヨ鍙傛暟" +// @Success 200 {object} util.ResponseList{data=[]response.LocationForms} "鎴愬姛" +// @Router /api-wms/v1/forms/downloadLocationForms [post] +func (slf ReportFormsController) DownloadLocationForms(c *gin.Context) { + var params request.GetLocationForms + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + locationFormsService := service.NewLocationFormsService() + list, err := locationFormsService.FetchAll(params) + if err != nil { + logx.Errorf("DownloadLocationForms FetchAll err:%v", err) + util.ResponseFormat(c, code.InternalError, "鏌ヨ澶辫触") + return + } + filename, err := locationFormsService.Export(list) + if err != nil { + logx.Errorf("DownloadLocationForms 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) +} + +// MonthStats +// @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/monthStats [post] +func (slf ReportFormsController) MonthStats(c *gin.Context) { + var params request.GetMonthStats + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + + 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, 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 +// @Tags 鎶ヨ〃 +// @Summary 鎵嬪姩璺戞湀搴︾粺璁″簱瀛樻姤琛� +// @Produce application/json +// @Param object body request.DoMonthStats true "鏌ヨ鍙傛暟" +// @Param Authorization header string true "token" +// @Success 200 {object} util.ResponseList{data=[]models.MonthStats} "鎴愬姛" +// @Router /api-wms/v1/forms/doMonthStats [post] +func (slf ReportFormsController) DoMonthStats(c *gin.Context) { + var params request.DoMonthStats + if err := c.BindJSON(¶ms); err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + + if params.Token != constvar.DoMonthStatsToken { + return + } + + task.MonthStats() + util.ResponseFormat(c, code.Success, nil) +} -- Gitblit v1.8.0