zhangqian
2024-06-25 a9262d9b1c5b570d077c2dc7d3fdda9058f88ec7
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
}