jiangshuai
2023-10-19 c278d736f5f9c0ab4a64540aa1a6b89984b0cd2c
1.wms业务调整及bug修改
3个文件已修改
65 ■■■■■ 已修改文件
controllers/operation.go 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/product_controller.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/operation_type.go 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/operation.go
@@ -355,10 +355,18 @@
                            return err
                        }
                        //TODO:出入库的finish和报废的finish都要增加对location_product_amount表数量的更新,因为此表有ProductCategory字段,所以operation_details表中要增加ProductCategoryId字段
                        //var locAmount models.LocationProductAmount
                        //if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_produt_amount").Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?",operation.ToLocationID,v.ID).First(&locAmount).Error;err!=nil {
                        //    return err
                        //}
                        var locAmount models.LocationProductAmount
                        if err := models.NewLocationProductAmountSearch().Orm.
                            Table("wms_location_produt_amount").
                            Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").
                            Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?", v.ID, operation.ToLocationID).
                            First(&locAmount).Error; err != nil {
                            return err
                        }
                        locAmount.Amount = locAmount.Amount.Add(value)
                        if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
                            return err
                        }
                    }
                }
@@ -375,9 +383,53 @@
                        if err := tx.Save(listProdt[k]).Error; err != nil {
                            return err
                        }
                        var locAmount models.LocationProductAmount
                        if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_produt_amount").Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?", v.ID, operation.ToLocationID).First(&locAmount).Error; err != nil {
                            return err
                        }
                        if locAmount.Amount.LessThan(value) {
                            return errors.New(fmt.Sprintf("产品:%v,库存:%v,出库:%v,数量不够,无法完成出库操作", v.Name, v.Amount.String(), value.String()))
                        }
                        locAmount.Amount = locAmount.Amount.Sub(value)
                        if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(&locAmount); err != nil {
                            return err
                        }
                    }
                }
            }
            if operationType.BaseOperationType == constvar.BaseOperationTypeInternal {
                for k, v := range listProdt {
                    if value, ok := mapProdt[v.ID]; !ok {
                        return errors.New("产品种类异常")
                    } else {
                        listProdt[k].Amount = listProdt[k].Amount.Add(value)
                        if err := tx.Save(listProdt[k]).Error; err != nil {
                            return err
                        }
                        //TODO:出入库的finish和报废的finish都要增加对location_product_amount表数量的更新,因为此表有ProductCategory字段,所以operation_details表中要增加ProductCategoryId字段
                        var fromAmount, toAmount models.LocationProductAmount
                        if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_produt_amount").Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?", v.ID, operation.FromLocationID).Find(&fromAmount).Error; err != nil {
                            return err
                        }
                        if fromAmount.Amount.LessThan(value) {
                            return errors.New(fmt.Sprintf("产品:%v,库存:%v,调拨:%v,数量不够,无法完成调拨操作", v.Name, v.Amount.String(), value.String()))
                        }
                        fromAmount.Amount = fromAmount.Amount.Sub(value)
                        if err := models.NewLocationProductAmountSearch().SetID(fromAmount.Id).Update(&fromAmount); err != nil {
                            return err
                        }
                        if err := models.NewLocationProductAmountSearch().Orm.Table("wms_location_produt_amount").Joins("inner join wms_location_product on wms_location_produt.id=wms_location_produt_amount.location_product_id").Where("wms_location_produt.product_id=? and wms_location_produt.location_id=?", v.ID, operation.ToLocationID).Find(&toAmount).Error; err != nil {
                            return err
                        }
                        toAmount.Amount = toAmount.Amount.Add(value)
                        if err := models.NewLocationProductAmountSearch().SetID(toAmount.Id).Update(&toAmount); err != nil {
                            return err
                        }
                    }
                }
            }
        }
        return nil
controllers/product_controller.go
@@ -404,7 +404,7 @@
    db := models.NewOperationSearch().Orm.Table("wms_operation").Select("wms_operation.id,wms_operation.number,wms_operation.source_number,wms_operation.status,wms_operation.from_location_id,wms_operation.to_location_id,wms_operation.operation_date,wms_operation.contacter_id,wms_operation.contacter_name,wms_operation.company_id,wms_operation.company_name,wms_operation.comment,wms_operation_details.product_id,material.name as product_name,material.unit,wms_operation_details.amount").InnerJoins("inner join wms_operation_details on wms_operation_details.operation_id=wms_operation.id").InnerJoins("inner join material on material.id=wms_operation_details.product_id")
    if params.Number != "" {
        db = db.Where("wms_operation.number like ? or wms_operation.source_number like ?", fmt.Sprintf("%%%v%%", params.Number), fmt.Sprintf("%%%v%%", params.Number))
        db = db.Where("wms_operation.number like ? or wms_operation.source_number like ? or material.name like ?", fmt.Sprintf("%%%v%%", params.Number), fmt.Sprintf("%%%v%%", params.Number), fmt.Sprintf("%%%v%%", params.Number))
    }
    db = db.Where("wms_operation.operation_type_id=?", 0)
    var (
models/operation_type.go
@@ -291,7 +291,8 @@
        records = make([]*OperationTypeByStatus, 0)
        db      = slf.Orm
    )
    db = db.Table("wms_job_type").Select("wms_job_type.id,wms_operation.status,count(wms_operation.id) as count").InnerJoins("inner join wms_operation on wms_operation.operation_type_id=wms_job_type.id").Group("wms_job_type.id,wms_operation.status")
    db = db.Table("wms_job_type").Select("wms_job_type.id,wms_operation.status,count(wms_operation.id) as count").InnerJoins("inner join wms_operation on wms_operation.operation_type_id=wms_job_type.id").Where("wms_operation.deleted_at is null").
        Group("wms_job_type.id,wms_operation.status")
    if len(idList) > 0 {
        db = db.Where("wms_job_type.id IN ?", idList)
    }