liujiandao
2023-10-26 201be38fd71ee487d887e686cf07773ec750a8de
controllers/operation.go
@@ -1,11 +1,13 @@
package controllers
import (
   "encoding/json"
   "errors"
   "fmt"
   "github.com/gin-gonic/gin"
   "github.com/shopspring/decimal"
   "gorm.io/gorm"
   "os"
   "sort"
   "strconv"
   "time"
@@ -13,6 +15,7 @@
   "wms/extend/code"
   "wms/extend/util"
   "wms/models"
   "wms/opa"
   "wms/pkg/logx"
   "wms/pkg/structx"
   "wms/request"
@@ -366,7 +369,7 @@
               operationTransfer := &models.Operation{
                  Number:            operation.Number,
                  SourceNumber:      operation.SourceNumber,
                  OperationTypeId:   operation.OperationTypeId,
                  OperationTypeId:   0,
                  OperationTypeName: operation.OperationTypeName,
                  Status:            constvar.OperationStatus_Finish,
                  FromLocationID:    locationRule.AreaId,
@@ -377,7 +380,7 @@
                  CompanyID:         operation.CompanyID,
                  CompanyName:       operation.CompanyName,
                  Comment:           operation.Comment,
                  BaseOperationType: operation.BaseOperationType,
                  BaseOperationType: constvar.BaseOperationTypeInternal,
                  Details: []*models.OperationDetails{
                     &models.OperationDetails{
                        ProductId: v.ID,
@@ -448,8 +451,20 @@
            if !ok {
               return errors.New("产品种类异常")
            }
            if v.Amount.LessThan(value) {
               return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
            //todo 演示测试数据
            data, err := os.ReadFile("conf/input.json")
            if err != nil {
               return errors.New("文件读取失败")
            }
            m := make(map[string]interface{})
            err = json.Unmarshal(data, &m)
            if err != nil {
               return errors.New("格式转换失败")
            }
            if opa.OpaCheck(c, m, "operation") {
               if v.Amount.LessThan(value) {
                  return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
               }
            }
            listProdt[k].Amount = listProdt[k].Amount.Sub(value)
            if err := tx.Save(listProdt[k]).Error; err != nil {