zhangqian
2024-06-25 a9262d9b1c5b570d077c2dc7d3fdda9058f88ec7
调拨和库存调整产生的出入库补充对应仓库的业务类型
2个文件已修改
44 ■■■■ 已修改文件
controllers/operation.go 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/operation.go 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/operation.go
@@ -486,19 +486,19 @@
        }
        if operation.BaseOperationType == constvar.BaseOperationTypeOutgoing || operation.BaseOperationType == constvar.BaseOperationTypeDisuse {
            if err := service.FinishOperationOutput(tx, listDetails, mapLocAmount); err != nil {
            if err := service.FinishOperationOutput(tx, listDetails, mapLocAmount, operation); err != nil {
                return err
            }
        }
        if operation.BaseOperationType == constvar.BaseOperationTypeInternal {
            if err := service.FinishOperationInternal(tx, listDetails); err != nil {
            if err := service.FinishOperationInternal(tx, listDetails, operation); err != nil {
                return err
            }
        }
        if operation.BaseOperationType == constvar.BaseOperationTypeAdjust {
            if err := service.FinishOperationAdjust(tx, listDetails, mapLocAmount); err != nil {
            if err := service.FinishOperationAdjust(tx, listDetails, mapLocAmount, operation); err != nil {
                return err
            }
        }
service/operation.go
@@ -223,7 +223,7 @@
}
// FinishOperationOutput 完成出库或报废
func FinishOperationOutput(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) {
func FinishOperationOutput(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount, originOperation *models.Operation) (err error) {
    var internalInputDetails []*models.OperationDetails //内部调拨产生的出库验证后,生成入库单
    for k, v := range listDetails {
        if v.Product.Amount.LessThan(v.Amount) {
@@ -250,7 +250,12 @@
        }
    }
    if len(internalInputDetails) > 0 {
        opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming)
        if err != nil {
            return err
        }
        operation := &models.Operation{
            OperationTypeId:   opTypeId,
            Number:            strconv.FormatInt(time.Now().Unix(), 10),
            Status:            constvar.OperationStatus_Ready,
            OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
@@ -269,7 +274,7 @@
}
// FinishOperationInternal 验证内部调拨生成出库单
func FinishOperationInternal(tx *gorm.DB, listDetails []*models.OperationDetails) (err error) {
func FinishOperationInternal(tx *gorm.DB, listDetails []*models.OperationDetails, originOperation *models.Operation) (err error) {
    var outputDetails []*models.OperationDetails
    for _, v := range listDetails {
        outputDetails = append(outputDetails, &models.OperationDetails{
@@ -287,7 +292,12 @@
            SalePrice:        v.SalePrice,
        })
        if len(outputDetails) > 0 {
            opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing)
            if err != nil {
                return err
            }
            operation := &models.Operation{
                OperationTypeId:   opTypeId,
                Number:            strconv.FormatInt(time.Now().Unix(), 10),
                Status:            constvar.OperationStatus_Ready,
                OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
@@ -309,7 +319,7 @@
// FinishOperationAdjust 完成库存调整
// 验证后生成入库单或出库单(库存减少生成出库单,库存增加生成入库单)
func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) {
func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount, originOperation *models.Operation) (err error) {
    var inputDetails []*models.OperationDetails
    var outputDetails []*models.OperationDetails
    for _, v := range listDetails {
@@ -373,7 +383,12 @@
        //}
        if len(inputDetails) > 0 {
            opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming)
            if err != nil {
                return err
            }
            operation := &models.Operation{
                OperationTypeId:   opTypeId,
                Number:            strconv.FormatInt(time.Now().Unix(), 10),
                Status:            constvar.OperationStatus_Ready,
                OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
@@ -388,7 +403,12 @@
            }
        }
        if len(outputDetails) > 0 {
            opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing)
            if err != nil {
                return err
            }
            operation := &models.Operation{
                OperationTypeId:   opTypeId,
                Number:            strconv.FormatInt(time.Now().Unix(), 10),
                Status:            constvar.OperationStatus_Ready,
                OperationDate:     time.Now().Format("2006-01-02 15:04:05"),
@@ -406,3 +426,15 @@
    return nil
}
func GetTargetOperationTypeIdByOperation(operation *models.Operation, baseOT constvar.BaseOperationType) (operationTypeId int, err error) {
    oT, err := models.NewOperationTypeSearch().SetID(uint(operation.OperationTypeId)).First()
    if err != nil {
        return 0, err
    }
    targetOT, err := models.NewOperationTypeSearch().SetBaseOperationType(baseOT).SetWarehouseId(oT.WarehouseId).First()
    if err != nil {
        return 0, err
    }
    return targetOT.Id, nil
}