| | |
| | | return |
| | | } |
| | | |
| | | if err := slf.FormatLocation(¶ms); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err.Error()) |
| | | return |
| | | } |
| | | |
| | | if CheckDetailsRepeat(params.Details) { |
| | | util.ResponseFormat(c, code.RequestParamError, "明细中不能存在重复的产品") |
| | | return |
| | | } |
| | | |
| | | operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err.Error()) |
| | | return |
| | | if params.BaseOperationType != constvar.BaseOperationTypeAdjust { |
| | | if err := slf.FormatLocation(¶ms); 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 |
| | | |
| | | var numberNum int64 |
| | | if err := mysqlx.GetDB().Model(&models.Operation{}).Where("number=?", params.Number).Count(&numberNum).Error; err != nil { |
| | |
| | | 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(¶ms); err != nil { |
| | | return err |
| | | } |
| | |
| | | return false |
| | | } |
| | | |
| | | // FormatLocation 位置检查 |
| | | func (slf OperationController) FormatLocation(params *models.Operation) error { |
| | | operationType, err := models.NewOperationTypeSearch().SetID(uint(params.OperationTypeId)).First() |
| | | if err != nil { |
| | |
| | | } |
| | | |
| | | if params.OperationTypeId == 0 && int(params.BaseOperationType) == 0 { |
| | | return errors.New("未识别该记录类型") |
| | | return errors.New("未识别该记录类型1") |
| | | } |
| | | |
| | | if params.BaseOperationType != 0 { |
| | | if params.WarehouseId == 0 { |
| | | return errors.New("未识别该记录类型2") |
| | | } |
| | | } |
| | | |
| | | if params.OperationDate == "" { |
| | | 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("请添加明细信息") |
| | |
| | | // @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 |
| | |
| | | costMap[material.ID] = material.Cost |
| | | salePriceMap[material.ID] = material.SalePrice |
| | | } |
| | | list, total, err := search.SetOperationTypeId(params.OperationTypeId).SetPreload(true).SetOrder("created_at desc").Find() |
| | | list, total, err := search.SetOperationTypeId(params.OperationTypeId). |
| | | SetBaseOperationType(params.BaseOperationType). |
| | | SetPreload(true).SetOrder("created_at desc").Find() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestError, "查找失败:"+err.Error()) |
| | | return |
| | |
| | | if !params.PageInfo.Check() { |
| | | return errors.New("数据分页信息错误") |
| | | } |
| | | if params.OperationTypeId == 0 { |
| | | return errors.New("operationTypeId为0") |
| | | if params.OperationTypeId == 0 && params.BaseOperationType == 0 { |
| | | return errors.New("operationTypeId和baseOperationType不能同时为0") |
| | | } |
| | | return nil |
| | | } |
| | |
| | | util.ResponseFormat(c, code.RequestParamError, "明细中不能存在重复的产品") |
| | | return |
| | | } |
| | | if err := slf.FormatLocation(¶ms); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err.Error()) |
| | | return |
| | | |
| | | if params.BaseOperationType != constvar.BaseOperationTypeAdjust { |
| | | if err := slf.FormatLocation(¶ms); 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 { |
| | |
| | | |
| | | sheet := "Sheet1" |
| | | f.SetCellValue(sheet, "A2", "单位(部门):"+operation.CompanyName) // 单位部门 |
| | | f.SetCellValue(sheet, "H2", operation.OperationDate) // 时间 |
| | | f.SetCellValue(sheet, "O2", operation.Number) // 编号 |
| | | f.SetCellValue(sheet, "J2", operation.OperationDate) // 时间 |
| | | f.SetCellValue(sheet, "Q2", operation.Number) // 编号 |
| | | |
| | | totalAmount := decimal.NewFromInt(0) // 总金额 |
| | | totalPrice := decimal.NewFromInt(0) // 总价 |
| | |
| | | if i > 9 { |
| | | break |
| | | } |
| | | f.SetCellValue(sheet, "A"+strconv.Itoa(rowIndex), v.Product.Name) // 产品名称 |
| | | f.SetCellValue(sheet, "B"+strconv.Itoa(rowIndex), v.Product.Specs) //规格 |
| | | f.SetCellValue(sheet, "C"+strconv.Itoa(rowIndex), v.TotalGrossWeight.String()) //重量 |
| | | f.SetCellValue(sheet, "D"+strconv.Itoa(rowIndex), v.Amount.String()) //数量 |
| | | f.SetCellValue(sheet, "E"+strconv.Itoa(rowIndex), v.AuxiliaryAmount.String()) //辅助数量 |
| | | f.SetCellValue(sheet, "F"+strconv.Itoa(rowIndex), v.AuxiliaryUnit) //辅助单位 |
| | | f.SetCellValue(sheet, "A"+strconv.Itoa(rowIndex), v.Product.Name) // 品名 |
| | | f.SetCellValue(sheet, "B"+strconv.Itoa(rowIndex), v.Product.Type) // 型号 |
| | | f.SetCellValue(sheet, "C"+strconv.Itoa(rowIndex), v.Product.Unit) // 单位 |
| | | f.SetCellValue(sheet, "D"+strconv.Itoa(rowIndex), v.Amount.String()) // 数量 |
| | | unit := service.CreateMoreUnit(v.Amount, v.Product.MoreUnitList) |
| | | for _, v1 := range unit { |
| | | if !v1.Amount.IsZero() { |
| | | f.SetCellValue(sheet, "E"+strconv.Itoa(rowIndex), v1.Amount) // 辅数量 |
| | | f.SetCellValue(sheet, "F"+strconv.Itoa(rowIndex), v1.Unit) // 辅单位 |
| | | break |
| | | } |
| | | } |
| | | f.SetCellValue(sheet, "G"+strconv.Itoa(rowIndex), v.Product.SalePrice.String()) // 单价 |
| | | |
| | | // 金额 |
| | | if !v.Product.SalePrice.IsZero() { |
| | | ap := v.Amount.Mul(v.Product.SalePrice) |