constvar/const.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
controllers/operation.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
controllers/operation_type.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/operation.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/operation_details.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/operation_type.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
request/operation.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
router/router.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
constvar/const.go
@@ -173,3 +173,10 @@ OperationStatus_Ready //就绪 OperationStatus_Finish //完成 ) type PostType int const ( PostType_Soon PostType = iota + 1 //尽快 PostType_AfterReady //当所有产品就绪时 ) controllers/operation.go
@@ -6,6 +6,7 @@ "github.com/spf13/cast" "gorm.io/gorm" "strconv" "wms/constvar" "wms/extend/code" "wms/extend/util" "wms/models" @@ -39,12 +40,54 @@ util.ResponseFormat(c, code.RequestParamError, err.Error()) return } if err := slf.FormatLocation(¶ms); err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } params.Status = constvar.OperationStatus_Ready if err := models.NewOperationSearch().Create(¶ms); err != nil { logx.Errorf("Operation create err: %v", err) util.ResponseFormat(c, code.SaveFail, "添加失败:"+err.Error()) return } util.ResponseFormat(c, code.Success, "添加成功") } func (slf OperationController) FormatLocation(params *models.Operation) error { operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First() if err != nil { return err } if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming { if location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First(); err != nil { return err } else { params.FromLocationId = location.Id } if params.ToLocationId == 0 { return errors.New("请选择目标位置") } } if operationType.BaseOperationType == constvar.BaseOperationTypeOutgoing { if location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeCustomer)).First(); err != nil { return err } else { params.ToLocationId = location.Id } if params.FromLocationId == 0 { return errors.New("请选择源位置") } } if operationType.BaseOperationType == constvar.BaseOperationTypeInternal { if params.ToLocationId == 0 { return errors.New("请选择目标位置") } if params.FromLocationId == 0 { return errors.New("请选择源位置") } } return nil } func (slf OperationController) CheckParams(params models.Operation) error { @@ -54,14 +97,6 @@ if params.OperationTypeId == 0 { return errors.New("operationTypeId为0") } if params.FromLocationId == 0 { return errors.New("请选择源位置") } if params.ToLocationId == 0 { return errors.New("请选择目标位置") } if params.OperationDate == "" { @@ -74,16 +109,13 @@ //检查明细部分 for _, v := range params.Details { if v.ProductId == 0 { if v.ProductId == "" { return errors.New("productID为0") } if v.ProductName == "" { return errors.New("产品名称异常") } if v.Quantity.IsNegative() { return errors.New("产品数量出错") } if v.FinishQuantity.IsNegative() { return errors.New("产品数量出错") } } @@ -151,11 +183,19 @@ util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误:"+err.Error()) return } if reqParams.Status != constvar.OperationStatus_Ready { util.ResponseFormat(c, code.RequestParamError, "该入库信息已完成,无法进行修改") return } if err := structx.AssignTo(reqParams, ¶ms); err != nil { util.ResponseFormat(c, code.RequestParamError, "数据转换错误"+err.Error()) return } if err := slf.CheckParams(params); err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } if err := slf.FormatLocation(¶ms); err != nil { util.ResponseFormat(c, code.RequestParamError, err.Error()) return } @@ -190,7 +230,16 @@ return } if id == 0 { util.ResponseFormat(c, code.RequestParamError, "空的记录id") util.ResponseFormat(c, code.RequestParamError, "id为0") return } operation, err := models.NewOperationSearch().SetID(id).First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "未找到相关出入库信息:"+err.Error()) return } if operation.Status != constvar.OperationStatus_Ready { util.ResponseFormat(c, code.RequestError, "该入库信息无法进行删除") return } if err := models.WithTransaction(func(tx *gorm.DB) error { @@ -207,3 +256,61 @@ } util.ResponseFormat(c, code.Success, "删除成功") } // DeleteDevice // // @Tags 入库/出库 // @Summary 更改记录状态 // @Produce application/json // @Param id path int true "id" // @Success 200 {object} util.Response "成功" // @Router /api-wms/v1/operation/finish/{id} [put] func (slf OperationController) Finish(c *gin.Context) { id, err := strconv.Atoi(c.Param("id")) if err != nil { util.ResponseFormat(c, code.RequestParamError, "错误的id值") return } if id == 0 { util.ResponseFormat(c, code.RequestParamError, "id为0") return } operation, err := models.NewOperationSearch().SetID(id).First() if err != nil { util.ResponseFormat(c, code.RequestParamError, "未找到相关出入库信息:"+err.Error()) return } if operation.Status != constvar.OperationStatus_Ready { util.ResponseFormat(c, code.RequestError, "该出入库信息无法完成") return } //operationType, err := models.NewOperationTypeSearch().SetID(uint(operation.OperationTypeId)).First() //if err != nil { // util.ResponseFormat(c, code.RequestError, err.Error()) // return //} //if operationType.BaseOperationType == constvar.BaseOperationTypeIncoming { // if location, err := models.NewLocationSearch().SetType(int(constvar.LocationTypeVendor)).First(); err != nil { // return err // } else { // params.FromLocationId = location.Id // } // if params.ToLocationId == 0 { // return errors.New("请选择目标位置") // } //} if err := models.WithTransaction(func(tx *gorm.DB) error { if err := models.NewOperationSearch().SetOrm(tx).SetID(id).Update(&models.Operation{Status: constvar.OperationStatus_Finish}); err != nil { return err } if err := models.NewMaterialSearch().Orm.Exec("update material INNER JOIN wms_operation_details on wms_operation_details.product_id=material.id INNER JOIN wms_operation on wms_operation.id=wms_operation_details.operation_id set material.amount=material.amount + wms_operation_details.quantity where wms_operation.id=?", id).Error; err != nil { return err } return nil }); err != nil { util.ResponseFormat(c, code.RequestError, err.Error()) return } util.ResponseFormat(c, code.Success, "操作成功") } controllers/operation_type.go
@@ -17,12 +17,12 @@ type OperationTypeController struct{} // Add // @Tags 作业类型 // @Tags 业务类型 // @Summary 添加作业类型 // @Produce application/json // @Param object body request.AddOperationType true "作业类型信息" // @Success 200 {object} util.Response "成功" // @Router /api-wms/v1/warehouse/operationType [post] // @Router /api-wms/v1/operationType/operationType [post] func (slf OperationTypeController) Add(c *gin.Context) { var reqParams request.AddOperationType var params models.OperationType @@ -49,13 +49,13 @@ } // Update // @Tags 作业类型 // @Tags 业务类型 // @Summary 编辑作业类型 // @Produce application/json // @Param object body request.UpdateOperationType true "作业类型信息" // @Param id path string true "作业类型id" // @Success 200 {object} util.Response "成功" // @Router /api-wms/v1/warehouse/operationType/{id} [put] // @Router /api-wms/v1/operationType/operationType/{id} [put] func (slf OperationTypeController) Update(c *gin.Context) { id := cast.ToUint(c.Param("id")) if id == 0 { @@ -102,12 +102,12 @@ } // List // @Tags 作业类型 // @Tags 业务类型 // @Summary 查询作业类型列表 // @Produce application/json // @Param object query request.GetOperationTypeList true "查询参数" // @Success 200 {object} util.ResponseList{data=[]models.OperationType} "成功" // @Router /api-wms/v1/warehouse/operationType [get] // @Router /api-wms/v1/operationType/operationType [get] func (slf OperationTypeController) List(c *gin.Context) { var params request.GetOperationTypeList if err := c.ShouldBindQuery(¶ms); err != nil { @@ -124,12 +124,12 @@ } // Delete // @Tags 作业类型 // @Tags 业务类型 // @Summary 删除作业类型 // @Produce application/json // @Param id path string true "作业类型id" // @Success 200 {object} util.Response "成功" // @Router /api-wms/v1/warehouse/operationType/{id} [delete] // @Router /api-wms/v1/operationType/operationType/{id} [delete] func (slf OperationTypeController) Delete(c *gin.Context) { id := cast.ToUint(c.Param("id")) if id == 0 { models/operation.go
@@ -2,7 +2,6 @@ import ( "fmt" "github.com/shopspring/decimal" "gorm.io/gorm" "wms/constvar" "wms/pkg/mysqlx" @@ -22,16 +21,19 @@ ToLocationId int `json:"toLocationId" gorm:"type:int;not null;comment:目标位置id"` //目标位置id ToLocation Location `json:"toLocation" gorm:"foreignKey:ToLocationId"` //目标位置 OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:安排日期"` CarrierID int `json:"carrierID" gorm:"type:int;comment:承运商ID"` CarrierName string `json:"carrierName" gorm:"type:varchar(63);comment:承运商名称"` Tracking string `json:"tracking" gorm:"type:varchar(127);comment:追踪参考"` ContacterID int `json:"contacterID" gorm:"type:int;comment:联系人ID"` ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` Weight decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:重量(kg)"` TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:物流重量(kg)"` CompanyID int `json:"companyID" gorm:"type:int;comment:公司ID"` CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:公司名称(kg)"` Details []*OperationDetails `json:"details"` CompanyID int `json:"companyID" gorm:"type:int;comment:公司ID-客户"` CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:公司名称-客户"` Comment string `json:"comment" gorm:"type:text;comment:备注"` Details []*OperationDetails `json:"details"` //Weight decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:重量(kg)"` //TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:物流重量(kg)"` //CarrierID int `json:"carrierID" gorm:"type:int;comment:承运商ID"` //CarrierName string `json:"carrierName" gorm:"type:varchar(63);comment:承运商名称"` //Tracking string `json:"tracking" gorm:"type:varchar(127);comment:追踪参考"` } OperationSearch struct { @@ -73,10 +75,10 @@ return slf } //func (slf *OperationSearch) SetKeyword(keyword string) *OperationSearch { // slf.Keyword = keyword // return slf //} func (slf *OperationSearch) SetKeyword(keyword string) *OperationSearch { slf.Keyword = keyword return slf } func (slf *OperationSearch) SetOperationTypeId(operationTypeId int) *OperationSearch { slf.OperationTypeId = operationTypeId models/operation_details.go
@@ -12,12 +12,12 @@ OperationDetails struct { WmsModel Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` OperationId int `json:"OperationId" gorm:"type:int;not null;comment:操作记录id"` //操作id ProductId int `json:"productId" gorm:"type:int;not null;comment:产品id"` //产品id ProductName string `json:"productName" gorm:"type:varchar(255);not null;comment:产品名称"` //产品名称 Quantity decimal.Decimal `json:"quantity" gorm:"type:decimal(20,2);not null;comment:数量"` //数量 FinishQuantity decimal.Decimal `json:"finishQuantity" gorm:"type:decimal(20,2);not null;comment:数量"` //完成数量 Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` OperationId int `json:"OperationId" gorm:"type:int;not null;comment:操作记录id"` //操作id ProductId string `json:"productId" gorm:"type:varchar(191);not null;comment:产品id"` //产品id ProductName string `json:"productName" gorm:"type:varchar(255);not null;comment:产品名称"` //产品名称 Quantity decimal.Decimal `json:"quantity" gorm:"type:decimal(20,2);not null;comment:数量"` //数量 Unit string `json:"unit" gorm:"type:varchar(31);comment:单位"` } OperationDetailsSearch struct { models/operation_type.go
@@ -88,6 +88,11 @@ return slf } func (slf *OperationTypeSearch) SetBaseOperationType(baseOperationType constvar.BaseOperationType) *OperationTypeSearch { slf.BaseOperationType = baseOperationType return slf } func (slf *OperationTypeSearch) build() *gorm.DB { var db = slf.Orm.Model(&OperationType{}) request/operation.go
@@ -13,24 +13,26 @@ 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:安排日期"` OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:安排日期"` //安排日期 Details []*OperationDetails `json:"details"` CarrierID int `json:"carrierID" gorm:"type:int;comment:承运商ID"` CarrierName string `json:"carrierName" gorm:"type:varchar(63);comment:承运商名称"` Tracking string `json:"tracking" gorm:"type:varchar(127);comment:追踪参考"` ContacterID int `json:"contacterID" gorm:"type:int;comment:联系人ID"` ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` Weight decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:重量(kg)"` TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:物流重量(kg)"` CompanyID int `json:"companyID" gorm:"type:int;comment:公司ID"` CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:公司名称(kg)"` ContacterID int `json:"contacterID" gorm:"type:int;comment:联系人ID"` //联系人ID-非必填 ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` //联系人姓名-非必填 CompanyID int `json:"companyID" gorm:"type:int;comment:公司ID"` //公司ID-客户 CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:公司名称"` //公司名称-客户名称 Comment string `json:"comment" gorm:"type:text;comment:备注"` //Weight decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:重量(kg)"` //重量(kg)-非必填 //TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:物流重量(kg)"` //物流重量(kg)-非必填 //CarrierID int `json:"carrierID" gorm:"type:int;comment:承运商ID"` //承运商ID-非必填 //CarrierName string `json:"carrierName" gorm:"type:varchar(63);comment:承运商名称"` //承运商名称-非必填 //Tracking string `json:"tracking" gorm:"type:varchar(127);comment:追踪参考"` //追踪参考-非必填 } type OperationDetails struct { ProductId int `json:"productId" gorm:"type:int;not null;comment:产品id"` //产品id ProductName string `json:"productName" gorm:"type:varchar(255);not null;comment:产品名称"` //产品名称 Quantity decimal.Decimal `json:"quantity" gorm:"type:decimal(20,2);not null;comment:数量"` //数量 FinishQuantity decimal.Decimal `json:"finishQuantity" gorm:"type:decimal(20,2);not null;comment:数量"` //完成数量 ProductId int `json:"productId" gorm:"type:int;not null;comment:产品id"` //产品id ProductName string `json:"productName" gorm:"type:varchar(255);not null;comment:产品名称"` //产品名称 Quantity decimal.Decimal `json:"quantity" gorm:"type:decimal(20,2);not null;comment:数量"` //数量 Unit string `json:"unit" gorm:"type:varchar(31);comment:单位"` } type OperationList struct { @@ -46,15 +48,15 @@ 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:安排日期"` OperationDate string `json:"operationDate" gorm:"type:varchar(31);comment:安排日期"` //安排日期 Details []*OperationDetails `json:"details"` CarrierID int `json:"carrierID" gorm:"type:int;comment:承运商ID"` CarrierName string `json:"carrierName" gorm:"type:varchar(63);comment:承运商名称"` Tracking string `json:"tracking" gorm:"type:varchar(127);comment:追踪参考"` ContacterID int `json:"contacterID" gorm:"type:int;comment:联系人ID"` ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` Weight decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:重量(kg)"` TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:物流重量(kg)"` CompanyID int `json:"companyID" gorm:"type:int;comment:公司ID"` CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:公司名称(kg)"` CarrierID int `json:"carrierID" gorm:"type:int;comment:承运商ID"` //承运商ID-非必填 CarrierName string `json:"carrierName" gorm:"type:varchar(63);comment:承运商名称"` //承运商名称-非必填 Tracking string `json:"tracking" gorm:"type:varchar(127);comment:追踪参考"` //追踪参考-非必填 ContacterID int `json:"contacterID" gorm:"type:int;comment:联系人ID"` //联系人ID-非必填 ContacterName string `json:"contacterName" gorm:"type:varchar(63);comment:联系人姓名"` //联系人姓名-非必填 Weight decimal.Decimal `json:"weight" gorm:"type:decimal(20,2);comment:重量(kg)"` //重量(kg)-非必填 TransferWeight decimal.Decimal `json:"transferWeight" gorm:"type:decimal(20,2);comment:物流重量(kg)"` //物流重量(kg)-非必填 CompanyID int `json:"companyID" gorm:"type:int;comment:公司ID"` //公司ID-客户 CompanyName string `json:"companyName" gorm:"type:varchar(127);comment:公司名称"` //公司名称-客户名称 } router/router.go
@@ -51,7 +51,7 @@ warehouseAPI.DELETE("warehouse/:id", warehouseController.Delete) // 删除仓库 } // 作业类型 // 业务类型 operationTypeController := new(controllers.OperationTypeController) operationTypeAPI := r.Group(urlPrefix + "/operationType") { @@ -69,6 +69,7 @@ operationAPI.POST("operation", operationController.Add) operationAPI.PUT("operation/:id", operationController.Update) operationAPI.DELETE("operation/:id", operationController.Delete) operationAPI.PUT("Finish/:id", operationController.Finish) } //产品