| | |
| | | "github.com/spf13/cast" |
| | | "gorm.io/gorm" |
| | | "strconv" |
| | | "wms/constvar" |
| | | "wms/extend/code" |
| | | "wms/extend/util" |
| | | "wms/models" |
| | |
| | | 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 { |
| | |
| | | |
| | | 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 == "" { |
| | |
| | | |
| | | //检查明细部分 |
| | | 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("产品数量出错") |
| | | } |
| | | } |
| | |
| | | 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 |
| | | } |
| | |
| | | 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 { |
| | |
| | | } |
| | | 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, "操作成功") |
| | | } |