zhangqian
2024-07-01 73b6baf6af3d88cdcb0e2df7932a9bd96b0b85c5
controllers/warehouse.go
@@ -7,6 +7,7 @@
   "github.com/spf13/cast"
   "gorm.io/gorm"
   "strconv"
   "strings"
   "wms/constvar"
   "wms/extend/code"
   "wms/extend/util"
@@ -41,12 +42,24 @@
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   //创建视图
   view := &models.Location{
      Name:      params.Code,
      JointName: params.Code,
      Type:      constvar.LocationTypeView,
   }
   id, err := models.NewLocationSearch().CreateReturnId(view)
   if err != nil {
      util.ResponseFormat(c, code.SaveFail, "视图创建失败")
      return
   }
   //创建默认位置
   location := &models.Location{
      Name:              "默认位置",
      ParentId:          params.Code,
      JointName:         params.Code + "/默认位置",
      Type:              constvar.LocationTypeInternal,
      ReplenishLocation: true,
      ParentId:          id,
   }
   locationId, err := models.NewLocationSearch().CreateReturnId(location)
   if err != nil {
@@ -54,7 +67,36 @@
      return
   }
   params.LocationId = locationId
   if err := models.NewWarehouseSearch().Create(&params); err != nil {
   err = models.WithTransaction(func(tx *gorm.DB) error {
      err := models.NewWarehouseSearch().SetOrm(tx).Create(&params)
      if err != nil {
         return err
      }
      //创建三个默认操作类型
      var types []*models.OperationType
      inType := &models.OperationType{
         Name:              params.Name + "-入库",
         BaseOperationType: constvar.BaseOperationTypeIncoming,
         WarehouseId:       params.Id,
      }
      types = append(types, inType)
      outType := &models.OperationType{
         Name:              params.Name + "-出库",
         BaseOperationType: constvar.BaseOperationTypeOutgoing,
         WarehouseId:       params.Id,
      }
      types = append(types, outType)
      internalType := &models.OperationType{
         Name:              params.Name + "-内部调拨",
         BaseOperationType: constvar.BaseOperationTypeInternal,
         WarehouseId:       params.Id,
      }
      types = append(types, internalType)
      err = models.NewOperationTypeSearch().SetOrm(tx).CreateBatch(types)
      return err
   })
   if err != nil {
      _ = models.NewLocationSearch().SetID(locationId).Delete()
      logx.Errorf("warehouse create err: %v", err)
      util.ResponseFormat(c, code.SaveFail, "插入失败")
      return
@@ -80,7 +122,34 @@
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   err := models.NewWarehouseSearch().SetID(params.Id).Update(&params)
   warehouse, err := models.NewWarehouseSearch().SetID(params.Id).First()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "仓库不存在")
      return
   }
   err = models.WithTransaction(func(db *gorm.DB) error {
      //更新作业类型名称
      if params.Name != warehouse.Name {
         m := make(map[string]interface{})
         m["name"] = params.Name + "-入库"
         err := models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeIncoming).SetWarehouseId(params.Id).UpdateByMap(m)
         if err != nil {
            return err
         }
         m["name"] = params.Name + "-出库"
         err = models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeOutgoing).SetWarehouseId(params.Id).UpdateByMap(m)
         if err != nil {
            return err
         }
         m["name"] = params.Name + "-内部调拨"
         err = models.NewOperationTypeSearch().SetOrm(db).SetBaseOperationType(constvar.BaseOperationTypeInternal).SetWarehouseId(params.Id).UpdateByMap(m)
         if err != nil {
            return err
         }
      }
      err = models.NewWarehouseSearch().SetID(params.Id).Update(&params)
      return err
   })
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "修改失败")
@@ -100,9 +169,27 @@
   }
   //更新位置信息
   if oldRecord != nil && params.Code != oldRecord.Code {
      m := make(map[string]interface{})
      m["parent_id"] = params.Code
      err := models.NewLocationSearch().SetID(oldRecord.LocationId).UpdateByMap(m)
      locations, err := models.NewLocationSearch().SetJointName(oldRecord.Code).FindNotTotal()
      if err != nil {
         return errors.New("查询位置信息失败")
      }
      err = models.WithTransaction(func(db *gorm.DB) error {
         for _, location := range locations {
            m := make(map[string]interface{})
            index := strings.Index(location.JointName, "/")
            if index > 0 {
               m["joint_name"] = params.Code + location.JointName[index:]
            } else {
               m["joint_name"] = params.Code
            }
            err = models.NewLocationSearch().SetOrm(db).SetID(location.Id).UpdateByMap(m)
            if err != nil {
               return err
            }
         }
         return nil
      })
      if err != nil {
         return errors.New("更新位置信息失败")
      }
@@ -139,11 +226,11 @@
      return
   }
   //获取位置信息
   codes := make([]string, 0)
   ids := make([]int, 0)
   for _, warehouse := range list {
      codes = append(codes, warehouse.Code)
      ids = append(ids, warehouse.LocationId)
   }
   locations, err := models.NewLocationSearch().SetParents(codes).FindNotTotal()
   locations, err := models.NewLocationSearch().SetIds(ids).FindNotTotal()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "位置信息查找失败")
      return
@@ -174,22 +261,31 @@
      return
   }
   //删除位置信息
   first, err := models.NewWarehouseSearch().SetID(id).First()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "获取仓库信息失败")
      return
   }
   err = models.NewLocationSearch().SetID(first.LocationId).Delete()
   err = models.WithTransaction(func(tx *gorm.DB) error {
      //删除位置信息
      err = models.NewLocationSearch().SetOrm(tx).SetJointName(first.Code).Delete()
      if err != nil {
         return err
      }
      //删除操作类型
      err = models.NewOperationTypeSearch().SetOrm(tx).SetWarehouseId(first.Id).Delete()
      if err != nil {
         return err
      }
      //删除仓库
      err = models.NewWarehouseSearch().SetOrm(tx).SetID(id).Delete()
      return err
   })
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "删除位置信息失败")
      util.ResponseFormat(c, code.RequestParamError, "删除仓库失败")
      return
   }
   err = models.NewWarehouseSearch().SetID(id).Delete()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "删除仓库信息失败")
      return
   }
   util.ResponseFormat(c, code.UpdateSuccess, "删除成功")
}