jiangshuai
2023-09-21 931e10ff09ed3bade33570755347367e3bf0f842
1.修改出入库的验证逻辑方式
1个文件已修改
38 ■■■■■ 已修改文件
controllers/operation.go 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/operation.go
@@ -293,11 +293,7 @@
        if err := models.NewOperationSearch().SetOrm(tx).SetID(id).Update(&models.Operation{Status: constvar.OperationStatus_Finish}); err != nil {
            return err
        }
        if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
            if err := models.NewMaterialSearch().Orm.Exec("update material INNER JOIN wms_operation_details on wms_operation_details.product_id=material.id INNER JOIN wms_operation on wms_operation.id=wms_operation_details.operation_id set material.amount=material.amount + wms_operation_details.amount where wms_operation.id=?", id).Error; err != nil {
                return err
            }
        } else if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing {
        if operationType.BaseOperationType != constvar.BaseOperationTypeInternal {
            var listProdtId []string
            var listProdt []*models.Material
            mapProdt := make(map[string]decimal.Decimal)
@@ -312,18 +308,34 @@
            if err := models.NewMaterialSearch().Orm.Where("id IN ?", listProdtId).Find(&listProdt).Error; err != nil {
                return err
            }
            for _, v := range listProdt {
                if value, ok := mapProdt[v.ID]; !ok {
                    return errors.New("产品种类异常")
                } else {
                    if v.Amount.LessThan(value) {
                        return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
            if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming {
                for k, v := range listProdt {
                    if value, ok := mapProdt[v.ID]; !ok {
                        return errors.New("产品种类异常")
                    } else {
                        listProdt[k].Amount.Add(value)
                        if err := tx.Save(listProdt[k]).Error; err != nil {
                            return err
                        }
                    }
                }
            }
            if err := models.NewMaterialSearch().Orm.Exec("update material INNER JOIN wms_operation_details on wms_operation_details.product_id=material.id INNER JOIN wms_operation on wms_operation.id=wms_operation_details.operation_id set material.amount=material.amount - wms_operation_details.amount where wms_operation.id=?", id).Error; err != nil {
                return err
            if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing {
                for k, v := range listProdt {
                    if value, ok := mapProdt[v.ID]; !ok {
                        return errors.New("产品种类异常")
                    } else {
                        if v.Amount.LessThan(value) {
                            return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
                        }
                        listProdt[k].Amount.Sub(value)
                        if err := tx.Save(listProdt[k]).Error; err != nil {
                            return err
                        }
                    }
                }
            }
        }
        return nil
    }); err != nil {