yinbentan
2024-06-29 23663116574fa8f977c1241f98347833a2c28087
仓库盘点bug修改
7个文件已修改
60 ■■■■ 已修改文件
constvar/const.go 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/code.go 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/operation.go 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
middleware/utils.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/operation.go 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
request/operation.go 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/code.go 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
constvar/const.go
@@ -302,6 +302,7 @@
    CodeStandardType_Outgoing CodeStandardType = "出库编码"
    CodeStandardType_Internal CodeStandardType = "调拨编码"
    CodeStandardType_Disuse   CodeStandardType = "仓库报废编码"
    CodeStandardType_TakeStock CodeStandardType = "盘点编码"
)
type OperationSource int
@@ -326,9 +327,10 @@
type MiniDictType int
const (
    TransferType MiniDictType = iota + 1 // 调拨类型
    StorageType                          // 入库类型
    StorageType  MiniDictType = iota + 1 // 入库类型
    StockoutType                         // 出库类型
    TransferType                         // 调拨类型
    TakeStock                            // 盘点类型
)
func (t MiniDictType) Valid() bool {
controllers/code.go
@@ -99,6 +99,8 @@
        id, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeInternal).MaxAutoIncr()
    case constvar.CodeStandardType_Disuse:
        id, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeDisuse).MaxAutoIncr()
    case constvar.CodeStandardType_TakeStock:
        id, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeAdjust).MaxAutoIncr()
    default:
        util.ResponseFormat(c, cd.RequestError, "编码规则不存在")
        return
controllers/operation.go
@@ -63,19 +63,23 @@
        return
    }
    if CheckDetailsRepeat(params.Details) {
        util.ResponseFormat(c, code.RequestParamError, "明细中不能存在重复的产品")
        return
    }
    if params.BaseOperationType != constvar.BaseOperationTypeAdjust {
    if err := slf.FormatLocation(&params); err != nil {
        util.ResponseFormat(c, code.RequestParamError, err.Error())
        return
    }
    if CheckDetailsRepeat(params.Details) {
        util.ResponseFormat(c, code.RequestParamError, "明细中不能存在重复的产品")
        return
    }
    var operationType *models.OperationType
    var err error
    if params.OperationTypeId == 0 {
        operationType, err = models.NewOperationTypeSearch().SetWarehouseId(params.WarehouseId).SetBaseOperationType(params.BaseOperationType).First()
            operationType, err := models.NewOperationTypeSearch().
                SetWarehouseId(params.WarehouseId).SetBaseOperationType(params.BaseOperationType).
                First()
        if err != nil || params.WarehouseId != operationType.WarehouseId {
            util.ResponseFormat(c, code.RequestParamError, "参数缺失")
            return
@@ -87,13 +91,14 @@
            return
        }
    }
        params.BaseOperationType = operationType.BaseOperationType
        params.WarehouseId = operationType.WarehouseId
    }
    userInfo := middleware.GetUserInfo(c)
    params.CreatedBy = userInfo.Username
    params.Status = constvar.OperationStatus_Ready
    //params.Number = strconv.FormatInt(time.Now().Unix(), 10)
    params.BaseOperationType = operationType.BaseOperationType
    params.WarehouseId = operationType.WarehouseId
    var numberNum int64
    if err := mysqlx.GetDB().Model(&models.Operation{}).Where("number=?", params.Number).Count(&numberNum).Error; err != nil {
@@ -104,7 +109,7 @@
        util.ResponseFormat(c, code.RequestParamError, "单号已存在")
        return
    }
    err = models.WithTransaction(func(db *gorm.DB) error {
    err := models.WithTransaction(func(db *gorm.DB) error {
        if err := models.NewOperationSearch().Create(&params); err != nil {
            return err
        }
@@ -148,6 +153,7 @@
    return false
}
// FormatLocation 位置检查
func (slf OperationController) FormatLocation(params *models.Operation) error {
    operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First()
    if err != nil {
@@ -215,9 +221,9 @@
        return errors.New("请选择安排日期")
    }
    if params.LocationID == 0 {
        return errors.New("请选择源位置")
    }
    //if params.LocationID == 0 {
    //    return errors.New("请选择源位置")
    //}
    if len(params.Details) <= 0 {
        return errors.New("请添加明细信息")
@@ -268,7 +274,7 @@
// @Summary   入库/出库列表
// @Produce   application/json
// @Param         object  body  request.OperationList true  "查询参数"
// @Success   200 {object} util.Response    "成功"
// @Success   200 {object} util.ResponseList{data=[]models.Operation}    "成功"
// @Router    /api-wms/v1/operation/list [post]
func (slf OperationController) List(c *gin.Context) {
    var params request.OperationList
@@ -358,10 +364,13 @@
        util.ResponseFormat(c, code.RequestParamError, "明细中不能存在重复的产品")
        return
    }
    if params.BaseOperationType != constvar.BaseOperationTypeAdjust {
    if err := slf.FormatLocation(&params); err != nil {
        util.ResponseFormat(c, code.RequestParamError, err.Error())
        return
    }
    }
    if err := models.WithTransaction(func(tx *gorm.DB) error {
        if err := models.NewOperationDetailsSearch().SetOrm(tx).SetOperationId(params.Id).Delete(); err != nil {
            return err
middleware/utils.go
@@ -60,6 +60,7 @@
    }
}
// 获取登录用户信息
func GetUserInfo(c *gin.Context) *request.CustomClaims {
    if claims, exists := c.Get("claims"); exists {
        waitUse := claims.(*request.CustomClaims)
models/operation.go
@@ -63,7 +63,7 @@
        WarehouseId         int      `json:"warehouseId" gorm:"type:int;not null;comment:仓库id"`
        IsInternalOutput    bool     `json:"isInternalOutput"` //是否调拨产生的出库
        InventoryDealerType int      `json:"inventoryDealerType" gorm:"type:varchar(255);comment:会计名称"`
        InventoryDealerType int      `json:"inventoryDealerType" gorm:"type:varchar(255);comment:调拨出入库分类(对应dict字典表的ID)"`
        InventoryDealer     MiniDict `json:"inventoryDealer" gorm:"foreignKey:InventoryDealerType;"`
    }
@@ -82,6 +82,7 @@
        Fields              string
        BeginTime           time.Time
        EndTime             time.Time
        InventoryDealerTypeIds []int //
    }
)
@@ -189,6 +190,11 @@
    return slf
}
func (slf *OperationSearch) SetInventoryDealerTypeIds(inventoryDealerTypeArr []int) *OperationSearch {
    slf.InventoryDealerTypeIds = inventoryDealerTypeArr
    return slf
}
func (slf *OperationSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&Operation{})
@@ -258,6 +264,11 @@
    if !slf.BeginTime.IsZero() && !slf.EndTime.IsZero() {
        db = db.Where("created_at between ? and ?", slf.BeginTime, slf.EndTime)
    }
    if len(slf.InventoryDealerTypeIds) > 0 {
        db = db.Where("inventory_dealer_type in (?)", slf.InventoryDealerTypeIds)
    }
    return db
}
request/operation.go
@@ -38,6 +38,7 @@
    Custodian         string                     `json:"custodian" gorm:"type:varchar(255);comment:保管员名称"`
    BaseOperationType constvar.BaseOperationType `json:"baseOperationType" gorm:"type:tinyint;not null;comment:基础作业类型"` //基础作业类型 5库存盘点
    WarehouseId       int                        `json:"warehouseId" gorm:"type:int;not null;comment:仓库id"`             //仓库id
    InventoryDealerType int                        `json:"inventoryDealerType" gorm:"type:varchar(255);comment:调拨出入库分类(对应dict字典表的ID)"`
}
type OperationDetails struct {
@@ -99,6 +100,8 @@
    Accountant        string                     `json:"accountant" gorm:"type:varchar(255);comment:会计名称"`
    CustodianId       string                     `json:"custodianId" gorm:"type:varchar(255);comment:保管员id"`
    Custodian         string                     `json:"custodian" gorm:"type:varchar(255);comment:保管员名称"`
    WarehouseId         int                        `json:"warehouseId" gorm:"type:int;not null;comment:仓库id"` //仓库id
    InventoryDealerType int                        `json:"inventoryDealerType" gorm:"type:varchar(255);comment:调拨出入库分类(对应dict字典表的ID)"`
}
type OperationAllList struct {
service/code.go
@@ -40,6 +40,8 @@
        maxAutoIncr, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeInternal).MaxAutoIncr()
    case constvar.CodeStandardType_Disuse:
        maxAutoIncr, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeDisuse).MaxAutoIncr()
    case constvar.CodeStandardType_TakeStock:
        maxAutoIncr, err = models.NewOperationSearch().SetBaseOperationType(constvar.BaseOperationTypeAdjust).MaxAutoIncr()
    default:
        err = errors.New("编码规则不存在")
        return