package controllers
|
|
import (
|
"github.com/gin-gonic/gin"
|
"wms/constvar"
|
"wms/extend/code"
|
"wms/extend/util"
|
"wms/models"
|
"wms/request"
|
"wms/response"
|
)
|
|
type ReportFormsController struct {
|
}
|
|
// GetInventoryForms
|
// @Tags 报表
|
// @Summary 获取库存报表
|
// @Produce application/json
|
// @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 {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
//查询产品
|
search := models.NewMaterialSearch()
|
if params.PageInfo.Check() {
|
search.SetPage(params.Page, params.PageSize)
|
}
|
materials, total, err := search.SetCategoryIds(params.CategoryIds).Find()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询产品类型失败")
|
return
|
}
|
//查询产品类型
|
categories, err := models.NewProductCategorySearch().SetIds(params.CategoryIds).FindNotTotal()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询产品类型失败")
|
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)
|
}
|
var inHouse []models.OperationDetails
|
var outHouse []models.OperationDetails
|
dbIn := models.NewOperationDetailsSearch().Orm.Model(&models.OperationDetails{}).
|
Joins("left join wms_operation ON wms_operation_details.operation_id=wms_operation.id").
|
Where("wms_operation.base_operation_type=?", constvar.BaseOperationTypeIncoming).
|
Where("wms_operation.status=?", constvar.OperationStatus_Ready)
|
dbOut := models.NewOperationDetailsSearch().Orm.Model(&models.OperationDetails{}).
|
Joins("left join wms_operation ON wms_operation_details.operation_id=wms_operation.id").
|
Where("wms_operation.base_operation_type=?", constvar.BaseOperationTypeOutgoing).
|
Where("wms_operation.status=?", constvar.OperationStatus_Ready)
|
if len(locationIds) > 0 {
|
dbIn.Where("wms_operation.from_location_id in (?)", locationIds)
|
dbOut.Where("wms_operation.from_location_id in (?)", locationIds)
|
}
|
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.Amount = material.Amount
|
resp.Unit = material.Unit
|
resp.Value = material.Amount.Mul(material.Cost)
|
for _, category := range categories {
|
if material.CategoryId == int(category.ID) {
|
resp.ProductType = category.Name
|
break
|
}
|
}
|
for _, details := range inHouse {
|
if material.ID == details.ProductId {
|
resp.In = resp.In.Add(details.Amount)
|
}
|
}
|
for _, details := range outHouse {
|
if material.ID == details.ProductId {
|
resp.Out = resp.Out.Add(details.Amount)
|
}
|
}
|
resp.AvailableNumber = resp.Amount
|
result = append(result, resp)
|
}
|
util.ResponseFormatList(c, code.Success, result, int(total))
|
}
|
|
// GetHistory
|
// @Tags 报表
|
// @Summary 获取历史信息
|
// @Produce application/json
|
// @Param object body request.GetInventoryHistory true "查询参数"
|
// @Success 200 {object} util.ResponseList{data=[]response.InventoryHistory} "成功"
|
// @Router /api-wms/v1/forms/getHistory [post]
|
func (slf ReportFormsController) GetHistory(c *gin.Context) {
|
var params request.GetInventoryHistory
|
if err := c.BindJSON(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
//获取操作详情
|
detailsSearch := models.NewOperationDetailsSearch()
|
if params.PageInfo.Check() {
|
detailsSearch.SetPage(params.Page, params.PageSize)
|
}
|
details, total, err := detailsSearch.SetProductId(params.ProduceId).Find()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询操作详情失败")
|
return
|
}
|
var operationIds []int
|
for _, detail := range details {
|
operationIds = append(operationIds, detail.OperationID)
|
}
|
//获取已完成的操作记录
|
operations, err := models.NewOperationSearch().SetIds(operationIds).SetStatus(constvar.OperationStatus_Finish).FindNotTotal()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询操作记录失败")
|
return
|
}
|
var result []response.InventoryHistory
|
for _, detail := range details {
|
var resp response.InventoryHistory
|
resp.Amount = detail.Amount
|
resp.Unit = params.Unit
|
resp.ProductName = params.ProductName
|
for _, operation := range operations {
|
if detail.OperationID == operation.Id {
|
resp.Number = operation.Number
|
resp.Date = operation.UpdateTime
|
resp.Status = "完成"
|
resp.ContactedName = operation.ContacterName
|
resp.FromLocation = operation.FromLocation.Name
|
resp.ToLocation = operation.ToLocation.Name
|
result = append(result, resp)
|
break
|
}
|
}
|
}
|
util.ResponseFormatList(c, code.Success, result, int(total))
|
}
|
|
// GetLocationForms
|
// @Tags 报表
|
// @Summary 获取位置报表
|
// @Produce application/json
|
// @Param object body request.PageInfo true "查询参数"
|
// @Success 200 {object} util.ResponseList{data=[]response.LocationForms} "成功"
|
// @Router /api-wms/v1/forms/getLocationForms [post]
|
func (slf ReportFormsController) GetLocationForms(c *gin.Context) {
|
var params request.GetLocationForms
|
if err := c.BindJSON(¶ms); err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
|
return
|
}
|
search := models.NewLocationProductSearch()
|
if params.PageInfo.Check() {
|
search.SetPage(params.Page, params.PageSize)
|
}
|
find, total, err := search.SetKeyword(params.KeyWord).FindByPage()
|
if err != nil {
|
util.ResponseFormat(c, code.RequestParamError, "查询上架规则失败")
|
return
|
}
|
var result []response.LocationForms
|
for _, product := range find {
|
var resp response.LocationForms
|
resp.LocationName = product.Location.Name
|
resp.ProduceId = product.Product.ID
|
resp.ProductName = product.Product.Name
|
resp.ProductTypeName = product.ProductCategory.Name
|
resp.Amount = product.Product.Amount
|
resp.Unit = product.Product.Unit
|
resp.Value = product.Product.Amount.Mul(product.Product.Cost)
|
result = append(result, resp)
|
}
|
util.ResponseFormatList(c, code.Success, result, int(total))
|
}
|