package dao import ( "errors" "gorm.io/gorm" "gorm.io/gorm/clause" "hospital-admin-api/api/model" "hospital-admin-api/api/requests" "hospital-admin-api/global" "strings" ) type ProductDao struct { } // GetProductById 获取商品数据-商品id func (r *ProductDao) GetProductById(productId int64) (m *model.Product, err error) { err = global.Db.First(&m, productId).Error if err != nil { return nil, err } return m, nil } // GetProductPreloadById 获取商品数据-加载全部关联-商品id func (r *ProductDao) GetProductPreloadById(productId int64) (m *model.Product, err error) { err = global.Db.Preload(clause.Associations).First(&m, productId).Error if err != nil { return nil, err } return m, nil } // DeleteProduct 删除商品 func (r *ProductDao) DeleteProduct(tx *gorm.DB, maps interface{}) error { err := tx.Where(maps).Delete(&model.Product{}).Error if err != nil { return err } return nil } // EditProduct 修改商品 func (r *ProductDao) EditProduct(tx *gorm.DB, maps interface{}, data interface{}) error { err := tx.Model(&model.Product{}).Where(maps).Updates(data).Error if err != nil { return err } return nil } // EditProductByUserId 修改商品-商品id func (r *ProductDao) EditProductByUserId(tx *gorm.DB, productId int64, data interface{}) error { err := tx.Model(&model.Product{}).Where("product_id = ?", productId).Updates(data).Error if err != nil { return err } return nil } // GetProductList 获取商品列表 func (r *ProductDao) GetProductList(maps interface{}) (m []*model.Product, err error) { err = global.Db.Where(maps).Find(&m).Error if err != nil { return nil, err } return m, nil } // AddProduct 新增商品 func (r *ProductDao) AddProduct(tx *gorm.DB, model *model.Product) (*model.Product, error) { if err := tx.Create(model).Error; err != nil { return nil, err } return model, nil } // GetProductPageSearch 获取商品列表-分页 func (r *ProductDao) GetProductPageSearch(req requests.GetProductPage, page, pageSize int) (m []*model.Product, total int64, err error) { var totalRecords int64 // 构建查询条件 query := global.Db.Model(&model.Product{}) // 库存表 query = query.Preload("ProductPlatformAmount", func(db *gorm.DB) *gorm.DB { return db.Select("amount_id", "product_platform_id", "product_platform_code", "stock") }) // 商品名称 if req.ProductName != "" { query = query.Where("product_name LIKE ?", "%"+req.ProductName+"%") } // 商品通用名 if req.CommonName != "" { query = query.Where("common_name LIKE ?", "%"+req.CommonName+"%") } // 商品助记码 if req.MnemonicCode != "" { query = query.Where("mnemonic_code LIKE ?", "%"+req.MnemonicCode+"%") } // 药品类型 if req.ProductType != nil { query = query.Where("product_type = ?", req.ProductType) } // 是否麻精药品 if req.IsMajing != nil { query = query.Where("is_majing = ?", req.IsMajing) } // 商品状态 if req.ProductStatus != nil { query = query.Where("product_status = ?", req.ProductStatus) } // 平台商品id if req.ProductPlatformId != "" { query = query.Where("product_platform_id = ?", req.ProductPlatformId) } // 处方平台编码 if req.ProductPlatformCode != "" { query = query.Where("product_platform_code LIKE ?", "%"+req.ProductPlatformCode+"%") } // 药店编码 if req.ProductPharmacyCode != "" { query = query.Where("product_pharmacy_code LIKE ?", "%"+req.ProductPharmacyCode+"%") } // 批准文号 if req.LicenseNumber != "" { query = query.Where("license_number LIKE ?", "%"+req.LicenseNumber+"%") } // 生产厂家 if req.Manufacturer != "" { query = query.Where("manufacturer LIKE ?", "%"+req.Manufacturer+"%") } // 商品备注 if req.ProductRemarks != "" { query = query.Where("product_remarks LIKE ?", "%"+req.ProductRemarks+"%") } // 排序 if req.Order != nil { if req.Order.Stock != "" { if req.Order.Stock != "desc" && req.Order.Stock != "asc" { return nil, 0, errors.New("排序字段错误") } query = query.Joins("JOIN gdxz_product_platform_amount ON gdxz_product_platform_amount.product_platform_id = gdxz_product.product_platform_id"). Order("gdxz_product_platform_amount.stock " + req.Order.Stock) } } query = query.Order("gdxz_product.created_at desc") // 查询总数量 if err := query.Count(&totalRecords).Error; err != nil { return nil, 0, err } err = query.Scopes(model.Paginate(page, pageSize)).Find(&m).Error if err != nil { return nil, 0, err } return m, totalRecords, nil } // GetProductExportListSearch 获取商品列表-导出 func (r *ProductDao) GetProductExportListSearch(req requests.ProductExportList) (m []*model.Product, err error) { // 构建查询条件 query := global.Db.Model(&model.Product{}) // 库存表 query = query.Preload("ProductPlatformAmount", func(db *gorm.DB) *gorm.DB { return db.Select("amount_id", "product_platform_id", "product_platform_code", "stock") }) // 当前搜索数据 if req.Type == 1 { // 商品名称 if req.ProductName != "" { query = query.Where("product_name LIKE ?", "%"+req.ProductName+"%") } // 商品通用名 if req.CommonName != "" { query = query.Where("common_name LIKE ?", "%"+req.CommonName+"%") } // 商品助记码 if req.MnemonicCode != "" { query = query.Where("mnemonic_code LIKE ?", "%"+req.MnemonicCode+"%") } // 药品类型 if req.ProductType != nil { query = query.Where("product_type = ?", req.ProductType) } // 商品状态 if req.ProductStatus != nil { query = query.Where("product_status = ?", req.ProductStatus) } // 平台商品id if req.ProductPlatformId != "" { query = query.Where("product_platform_id = ?", req.ProductPlatformId) } // 处方平台编码 if req.ProductPlatformCode != "" { query = query.Where("product_platform_code LIKE ?", "%"+req.ProductPlatformCode+"%") } // 药店编码 if req.ProductPharmacyCode != "" { query = query.Where("product_pharmacy_code LIKE ?", "%"+req.ProductPharmacyCode+"%") } // 批准文号 if req.LicenseNumber != "" { query = query.Where("license_number LIKE ?", "%"+req.LicenseNumber+"%") } // 生产厂家 if req.Manufacturer != "" { query = query.Where("manufacturer LIKE ?", "%"+req.Manufacturer+"%") } // 商品备注 if req.ProductRemarks != "" { query = query.Where("product_remarks LIKE ?", "%"+req.ProductRemarks+"%") } } // 当前选中数据 if req.Type == 2 { if req.Id == "" { return nil, errors.New("未提供需导出数据编号") } id := strings.Split(req.Id, ",") query = query.Where("product_id IN (?)", id) } // 排序 query = query.Order("created_at desc") err = query.Find(&m).Error if err != nil { return nil, err } return m, nil } // GetProductListSearch 获取系统商品列表-限制条数 func (r *ProductDao) GetProductListSearch(req requests.GetProductList) (m []*model.Product, err error) { // 构建查询条件 query := global.Db.Model(&model.Product{}) // 库存表 query = query.Preload("ProductPlatformAmount", func(db *gorm.DB) *gorm.DB { return db.Select("amount_id", "product_platform_id", "product_platform_code", "stock") }) // 商品id if req.ProductId != "" { query = query.Where("product_id = ?", req.ProductId) } // 商品名称 if req.ProductName != "" { query = query.Where("product_name LIKE ?", "%"+req.ProductName+"%") } // 商品通用名 if req.CommonName != "" { query = query.Where("common_name LIKE ?", "%"+req.CommonName+"%") } // 商品助记码 if req.MnemonicCode != "" { query = query.Where("mnemonic_code LIKE ?", "%"+req.MnemonicCode+"%") } // 药品类型 if req.ProductType != nil { query = query.Where("product_type = ?", req.ProductType) } // 是否麻精药品 if req.IsMajing != nil { query = query.Where("is_majing = ?", req.IsMajing) } // 商品状态 if req.ProductStatus != nil { query = query.Where("product_status = ?", req.ProductStatus) } // 平台商品id if req.ProductPlatformId != "" { query = query.Where("product_platform_id = ?", req.ProductPlatformId) } // 处方平台编码 if req.ProductPlatformCode != "" { query = query.Where("product_platform_code LIKE ?", "%"+req.ProductPlatformCode+"%") } // 药店编码 if req.ProductPharmacyCode != "" { query = query.Where("product_pharmacy_code LIKE ?", "%"+req.ProductPharmacyCode+"%") } // 批准文号 if req.LicenseNumber != "" { query = query.Where("license_number LIKE ?", "%"+req.LicenseNumber+"%") } // 生产厂家 if req.Manufacturer != "" { query = query.Where("manufacturer LIKE ?", "%"+req.Manufacturer+"%") } // 商品备注 if req.ProductRemarks != "" { query = query.Where("product_remarks LIKE ?", "%"+req.ProductRemarks+"%") } query = query.Order("gdxz_product.created_at desc") err = query.Limit(req.Limit).Find(&m).Error if err != nil { return nil, err } return m, nil }