yinbentan
2024-06-29 23663116574fa8f977c1241f98347833a2c28087
仓库盘点bug修改
7个文件已修改
218 ■■■■■ 已修改文件
constvar/const.go 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/code.go 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/operation.go 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
middleware/utils.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/operation.go 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
request/operation.go 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/code.go 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
constvar/const.go
@@ -297,11 +297,12 @@
type CodeStandardType string
const (
    CodeStandardType_Material CodeStandardType = "物料编码"
    CodeStandardType_Incoming CodeStandardType = "入库编码"
    CodeStandardType_Outgoing CodeStandardType = "出库编码"
    CodeStandardType_Internal CodeStandardType = "调拨编码"
    CodeStandardType_Disuse   CodeStandardType = "仓库报废编码"
    CodeStandardType_Material  CodeStandardType = "物料编码"
    CodeStandardType_Incoming  CodeStandardType = "入库编码"
    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,37 +63,42 @@
        return
    }
    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()
        if err != nil || params.WarehouseId != operationType.WarehouseId {
            util.ResponseFormat(c, code.RequestParamError, "参数缺失")
            return
        }
    } else {
        operationType, err = models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First()
        if err != nil {
    if params.BaseOperationType != constvar.BaseOperationTypeAdjust {
        if err := slf.FormatLocation(&params); err != nil {
            util.ResponseFormat(c, code.RequestParamError, err.Error())
            return
        }
        var operationType *models.OperationType
        var err error
        if params.OperationTypeId == 0 {
            operationType, err := models.NewOperationTypeSearch().
                SetWarehouseId(params.WarehouseId).SetBaseOperationType(params.BaseOperationType).
                First()
            if err != nil || params.WarehouseId != operationType.WarehouseId {
                util.ResponseFormat(c, code.RequestParamError, "参数缺失")
                return
            }
        } else {
            operationType, err = models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First()
            if err != nil {
                util.ResponseFormat(c, code.RequestParamError, err.Error())
                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,9 +364,12 @@
        util.ResponseFormat(c, code.RequestParamError, "明细中不能存在重复的产品")
        return
    }
    if err := slf.FormatLocation(&params); err != nil {
        util.ResponseFormat(c, code.RequestParamError, err.Error())
        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 {
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,25 +63,26 @@
        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;"`
    }
    OperationSearch struct {
        Operation
        Order               string
        PageNum             int
        PageSize            int
        Keyword             string
        Orm                 *gorm.DB
        Preload             bool
        Disuse              bool
        Ids                 []int
        SourceNumbers       []string
        SalesDetailsNumbers []string
        Fields              string
        BeginTime           time.Time
        EndTime             time.Time
        Order                  string
        PageNum                int
        PageSize               int
        Keyword                string
        Orm                    *gorm.DB
        Preload                bool
        Disuse                 bool
        Ids                    []int
        SourceNumbers          []string
        SalesDetailsNumbers    []string
        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
@@ -14,30 +14,31 @@
    Status            constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:状态"`            //状态
    //FromLocationId    int                      `json:"fromLocationId"   gorm:"type:int;not null;comment:源位置id"`   //源位置id
    //ToLocationId      int                      `json:"toLocationId"    gorm:"type:int;not null;comment:目标位置id"`   //目标位置id
    OperationDate     string                     `json:"operationDate" gorm:"type:varchar(31);comment:安排日期"` //安排日期
    Details           []*OperationDetails        `json:"details"`
    ContacterID       int                        `json:"contacterID" gorm:"type:int;comment:联系人ID"`           //联系人ID-非必填
    ContacterName     string                     `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` //联系人姓名-非必填
    CompanyID         string                     `json:"companyID"`                                           //公司ID-客户
    CompanyName       string                     `json:"companyName" gorm:"type:varchar(127);comment:公司名称"`   //公司名称-客户名称
    Comment           string                     `json:"comment" gorm:"type:text;comment:备注"`                 //备注
    LogisticCompanyId string                     `json:"logisticCompanyId"   gorm:"type:varchar(191);comment:物流公司id"`
    WaybillNumber     string                     `json:"waybillNumber" gorm:"type:varchar(255);comment:运单号"`    //运单号
    Weight            decimal.Decimal            `gorm:"type:decimal(20,2);comment:重量" json:"weight"`           //重量
    LogisticWeight    decimal.Decimal            `gorm:"type:decimal(20,2);comment:物流重量" json:"logisticWeight"` //物流重量
    ReceiverName      string                     `json:"receiverName" gorm:"type:varchar(31);comment:收货人姓名"`
    ReceiverPhone     string                     `json:"receiverPhone" gorm:"type:varchar(31);comment:联系电话"`
    ReceiverAddr      string                     `json:"receiverAddr" gorm:"type:varchar(255);comment:收货地址"`
    LocationId        int                        `json:"locationId"   gorm:"type:int;not null;comment:源位置id"`     //源位置id
    ToLocationId      int                        `json:"toLocationId"    gorm:"type:int;not null;comment:仓库位置id"` //目标位置id
    ManagerId         string                     `json:"managerId" gorm:"type:varchar(255);comment:主管id"`
    Manager           string                     `json:"manager" gorm:"type:varchar(255);comment:主管名称"`
    AccountantId      string                     `json:"accountantId" gorm:"type:varchar(255);comment:会计id"`
    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:保管员名称"`
    BaseOperationType constvar.BaseOperationType `json:"baseOperationType" gorm:"type:tinyint;not null;comment:基础作业类型"` //基础作业类型 5库存盘点
    WarehouseId       int                        `json:"warehouseId" gorm:"type:int;not null;comment:仓库id"`             //仓库id
    OperationDate       string                     `json:"operationDate" gorm:"type:varchar(31);comment:安排日期"` //安排日期
    Details             []*OperationDetails        `json:"details"`
    ContacterID         int                        `json:"contacterID" gorm:"type:int;comment:联系人ID"`           //联系人ID-非必填
    ContacterName       string                     `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` //联系人姓名-非必填
    CompanyID           string                     `json:"companyID"`                                           //公司ID-客户
    CompanyName         string                     `json:"companyName" gorm:"type:varchar(127);comment:公司名称"`   //公司名称-客户名称
    Comment             string                     `json:"comment" gorm:"type:text;comment:备注"`                 //备注
    LogisticCompanyId   string                     `json:"logisticCompanyId"   gorm:"type:varchar(191);comment:物流公司id"`
    WaybillNumber       string                     `json:"waybillNumber" gorm:"type:varchar(255);comment:运单号"`    //运单号
    Weight              decimal.Decimal            `gorm:"type:decimal(20,2);comment:重量" json:"weight"`           //重量
    LogisticWeight      decimal.Decimal            `gorm:"type:decimal(20,2);comment:物流重量" json:"logisticWeight"` //物流重量
    ReceiverName        string                     `json:"receiverName" gorm:"type:varchar(31);comment:收货人姓名"`
    ReceiverPhone       string                     `json:"receiverPhone" gorm:"type:varchar(31);comment:联系电话"`
    ReceiverAddr        string                     `json:"receiverAddr" gorm:"type:varchar(255);comment:收货地址"`
    LocationId          int                        `json:"locationId"   gorm:"type:int;not null;comment:源位置id"`     //源位置id
    ToLocationId        int                        `json:"toLocationId"    gorm:"type:int;not null;comment:仓库位置id"` //目标位置id
    ManagerId           string                     `json:"managerId" gorm:"type:varchar(255);comment:主管id"`
    Manager             string                     `json:"manager" gorm:"type:varchar(255);comment:主管名称"`
    AccountantId        string                     `json:"accountantId" gorm:"type:varchar(255);comment:会计id"`
    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:保管员名称"`
    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 {
@@ -76,29 +77,31 @@
    Status            constvar.OperationStatus `json:"status" gorm:"type:int(11);not null;comment:状态"`            //状态
    //FromLocationId    int                        `json:"fromLocationId"   gorm:"type:int;not null;comment:源位置id"`   //源位置id
    //ToLocationId      int                        `json:"toLocationId"    gorm:"type:int;not null;comment:目标位置id"`   //目标位置id
    OperationDate     string                     `json:"operationDate" gorm:"type:varchar(31);comment:安排日期"` //安排日期
    Details           []*OperationDetails        `json:"details"`
    ContacterID       int                        `json:"contacterID" gorm:"type:int;comment:联系人ID"`           //联系人ID-非必填
    ContacterName     string                     `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` //联系人姓名-非必填
    CompanyID         string                     `json:"companyID"`                                           //公司ID-客户
    CompanyName       string                     `json:"companyName" gorm:"type:varchar(127);comment:公司名称"`   //公司名称-客户名称
    Comment           string                     `json:"comment" gorm:"type:text;comment:备注"`                 //备注
    BaseOperationType constvar.BaseOperationType `json:"baseOperationType"`                                   //基础作业类型
    LogisticCompanyId string                     `json:"logisticCompanyId"   gorm:"type:varchar(191);comment:物流公司id"`
    WaybillNumber     string                     `json:"waybillNumber" gorm:"type:varchar(255);comment:运单号"`    //运单号
    Weight            decimal.Decimal            `gorm:"type:decimal(20,2);comment:重量" json:"weight"`           //重量
    LogisticWeight    decimal.Decimal            `gorm:"type:decimal(20,2);comment:物流重量" json:"logisticWeight"` //物流重量
    ReceiverName      string                     `json:"receiverName" gorm:"type:varchar(31);comment:收货人姓名"`
    ReceiverPhone     string                     `json:"receiverPhone" gorm:"type:varchar(31);comment:联系电话"`
    ReceiverAddr      string                     `json:"receiverAddr" gorm:"type:varchar(255);comment:收货地址"`
    LocationId        int                        `json:"locationId"   gorm:"type:int;not null;comment:源位置id"`     //源位置id
    ToLocationId      int                        `json:"toLocationId"    gorm:"type:int;not null;comment:仓库位置id"` //目标位置id
    ManagerId         string                     `json:"managerId" gorm:"type:varchar(255);comment:主管id"`
    Manager           string                     `json:"manager" gorm:"type:varchar(255);comment:主管名称"`
    AccountantId      string                     `json:"accountantId" gorm:"type:varchar(255);comment:会计id"`
    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:保管员名称"`
    OperationDate       string                     `json:"operationDate" gorm:"type:varchar(31);comment:安排日期"` //安排日期
    Details             []*OperationDetails        `json:"details"`
    ContacterID         int                        `json:"contacterID" gorm:"type:int;comment:联系人ID"`           //联系人ID-非必填
    ContacterName       string                     `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` //联系人姓名-非必填
    CompanyID           string                     `json:"companyID"`                                           //公司ID-客户
    CompanyName         string                     `json:"companyName" gorm:"type:varchar(127);comment:公司名称"`   //公司名称-客户名称
    Comment             string                     `json:"comment" gorm:"type:text;comment:备注"`                 //备注
    BaseOperationType   constvar.BaseOperationType `json:"baseOperationType"`                                   //基础作业类型
    LogisticCompanyId   string                     `json:"logisticCompanyId"   gorm:"type:varchar(191);comment:物流公司id"`
    WaybillNumber       string                     `json:"waybillNumber" gorm:"type:varchar(255);comment:运单号"`    //运单号
    Weight              decimal.Decimal            `gorm:"type:decimal(20,2);comment:重量" json:"weight"`           //重量
    LogisticWeight      decimal.Decimal            `gorm:"type:decimal(20,2);comment:物流重量" json:"logisticWeight"` //物流重量
    ReceiverName        string                     `json:"receiverName" gorm:"type:varchar(31);comment:收货人姓名"`
    ReceiverPhone       string                     `json:"receiverPhone" gorm:"type:varchar(31);comment:联系电话"`
    ReceiverAddr        string                     `json:"receiverAddr" gorm:"type:varchar(255);comment:收货地址"`
    LocationId          int                        `json:"locationId"   gorm:"type:int;not null;comment:源位置id"`     //源位置id
    ToLocationId        int                        `json:"toLocationId"    gorm:"type:int;not null;comment:仓库位置id"` //目标位置id
    ManagerId           string                     `json:"managerId" gorm:"type:varchar(255);comment:主管id"`
    Manager             string                     `json:"manager" gorm:"type:varchar(255);comment:主管名称"`
    AccountantId        string                     `json:"accountantId" gorm:"type:varchar(255);comment:会计id"`
    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