jiangshuai
2023-11-14 22a93375823a1fe58e5ca2dcd0545ddf1dfc883c
产品列表增加预测和出入库数量
3个文件已修改
63 ■■■■■ 已修改文件
controllers/product_controller.go 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/material.go 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
request/product_request.go 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/product_controller.go
@@ -106,6 +106,46 @@
                product.CategoryName = category.Name
            }
        }
        var reorderAmount request.ProductStatisticsAmount
        if err := models.NewOperationSearch().Orm.
            Table("wms_operation_details").
            InnerJoins("INNER JOIN wms_operation on wms_operation_details.operation_id=wms_operation.id").
            Select("wms_operation_details.product_id,SUM(wms_operation_details.amount) as total_count").
            Where("wms_operation_details.product_id=? and wms_operation.`status`=? and wms_operation.base_operation_type in (?)", product.ID, constvar.OperationStatus_Ready, []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeDisuse}).
            Group("wms_operation_details.product_id").
            //Order("wms_operation_details.product_id").
            First(&reorderAmount).Error; err != nil {
            if !errors.Is(err, gorm.ErrRecordNotFound) {
                util.ResponseFormat(c, code.RequestParamError, "产品数据统计失败")
                return
            } else {
                reorderAmount.TotalAmount = decimal.NewFromInt(0)
            }
        }
        product.PredictionAmount = product.Amount.Add(reorderAmount.TotalAmount)
        var statisticsList []*request.ProductStatistics
        if err := models.NewOperationSearch().Orm.
            Table("wms_operation").
            InnerJoins("INNER JOIN wms_operation_details on wms_operation_details.operation_id=wms_operation.id").
            Select("SUM(wms_operation_details.amount) as total_amount,wms_operation.base_operation_type").
            Where("wms_operation_details.product_id=? and wms_operation.`status`=? and wms_operation.base_operation_type in (?)", product.ID, constvar.OperationStatus_Finish, []constvar.BaseOperationType{constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeOutgoing, constvar.BaseOperationTypeDisuse}).
            Group("wms_operation.base_operation_type").
            Find(&statisticsList).Error; err != nil {
            util.ResponseFormat(c, code.RequestParamError, "产品数据统计失败")
            return
        }
        for _, v := range statisticsList {
            if v.BaseOperationType == constvar.BaseOperationTypeIncoming {
                product.InputAmount = v.TotalAmount
            }
            if v.BaseOperationType == constvar.BaseOperationTypeOutgoing {
                product.OutputAmount = product.OutputAmount.Add(v.TotalAmount)
            }
            if v.BaseOperationType == constvar.BaseOperationTypeAdjust {
                product.OutputAmount = product.OutputAmount.Add(v.TotalAmount)
            }
        }
    }
    util.ResponseFormatList(c, code.Success, products, int(total))
}
models/material.go
@@ -67,11 +67,14 @@
        //HSCode                  string                     `gorm:"type:varchar(255);comment:HS编码" json:"HSCode"`                    //HS编码
        //OriginCountryId         int                        `gorm:"type:int(11);comment:原产地id" json:"originCountryId"`               //原产地id
        //OriginCountryName       string                     `gorm:"type:varchar(255);comment:原产地名称" json:"originCountryName"`        //原产地名称
        InStorageExplain        string        `gorm:"type:varchar(512);comment:入库说明" json:"inStorageExplain"`          //入库说明
        OutStorageExplain       string        `gorm:"type:varchar(512);comment:出库说明" json:"outStorageExplain"`         //出库说明
        InternalTransferExplain string        `gorm:"type:varchar(512);comment:内部调拨说明" json:"internalTransferExplain"` //内部调拨说明
        AttachmentList          []*Attachment `json:"attachmentList" gorm:"many2many:material_attachment"`
        AttachmentIDs           []uint        `json:"attachmentIDs" gorm:"-"`
        InStorageExplain        string          `gorm:"type:varchar(512);comment:入库说明" json:"inStorageExplain"`          //入库说明
        OutStorageExplain       string          `gorm:"type:varchar(512);comment:出库说明" json:"outStorageExplain"`         //出库说明
        InternalTransferExplain string          `gorm:"type:varchar(512);comment:内部调拨说明" json:"internalTransferExplain"` //内部调拨说明
        AttachmentList          []*Attachment   `json:"attachmentList" gorm:"many2many:material_attachment"`
        AttachmentIDs           []uint          `json:"attachmentIDs" gorm:"-"`
        PredictionAmount        decimal.Decimal `json:"predictionAmount" gorm:"-"`
        InputAmount             decimal.Decimal `json:"inputAmount" gorm:"-"`
        OutputAmount            decimal.Decimal `json:"outputAmount" gorm:"-"`
    }
    MaterialSearch struct {
request/product_request.go
@@ -49,3 +49,13 @@
    ProductId  string `json:"productId"`
    LocationId int    `json:"locationId"`
}
type ProductStatistics struct {
    TotalAmount       decimal.Decimal            `gorm:"column:total_amount"`
    BaseOperationType constvar.BaseOperationType `gorm:"column:base_operation_type"` //基础作业类型
}
type ProductStatisticsAmount struct {
    ProductId   string          `gorm:"column:product_id"`
    TotalAmount decimal.Decimal `gorm:"column:total_amount"`
}