新增系统商品

This commit is contained in:
wucongxing 2023-12-21 17:19:30 +08:00
parent b38c3f17cd
commit a988ba3743
9 changed files with 376 additions and 51 deletions

View File

@ -59,8 +59,8 @@ func (r *Product) GetPlatformProductPage(c *gin.Context) {
responses.OkWithData(result, c)
}
// GetPlatformProduct 平台商品详情
func (r *Product) GetPlatformProduct(c *gin.Context) {
// GetProductPlatform 平台商品详情
func (r *Product) GetProductPlatform(c *gin.Context) {
id := c.Param("product_platform_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
@ -76,7 +76,7 @@ func (r *Product) GetPlatformProduct(c *gin.Context) {
// 业务处理
productService := service.ProductService{}
getPlatformProductResponses, err := productService.GetPlatformProduct(productPlatformId)
getPlatformProductResponses, err := productService.GetProductPlatform(productPlatformId)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
@ -85,10 +85,10 @@ func (r *Product) GetPlatformProduct(c *gin.Context) {
responses.OkWithData(getPlatformProductResponses, c)
}
// GetSystemProductPage 获取系统商品列表-分页
func (r *Product) GetSystemProductPage(c *gin.Context) {
// GetProductPage 获取商品列表-分页
func (r *Product) GetProductPage(c *gin.Context) {
productRequest := requests.ProductRequest{}
req := productRequest.GetPlatformProductPage
req := productRequest.GetProductPage
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
@ -108,15 +108,15 @@ func (r *Product) GetSystemProductPage(c *gin.Context) {
req.PageSize = 20
}
productPlatformDao := dao.ProductPlatformDao{}
productPlatform, total, err := productPlatformDao.GetPlatformProductPageSearch(req, req.Page, req.PageSize)
productDao := dao.ProductDao{}
product, total, err := productDao.GetProductPageSearch(req, req.Page, req.PageSize)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 处理返回值
GetProductPlatformPageResponses := dto.GetProductPlatformListDto(productPlatform)
GetProductPageResponses := dto.GetProductListDto(product)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
@ -126,6 +126,32 @@ func (r *Product) GetSystemProductPage(c *gin.Context) {
result["page"] = req.Page
result["page_size"] = req.PageSize
result["total"] = total
result["data"] = GetProductPlatformPageResponses
result["data"] = GetProductPageResponses
responses.OkWithData(result, c)
}
// GetProduct 商品详情
func (r *Product) GetProduct(c *gin.Context) {
id := c.Param("product_id")
if id == "" {
responses.FailWithMessage("缺少参数", c)
return
}
// 将 id 转换为 int64 类型
productId, err := strconv.ParseInt(id, 10, 64)
if err != nil {
responses.Fail(c)
return
}
// 业务处理
productService := service.ProductService{}
getPlatformProductResponses, err := productService.GetProduct(productId)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.OkWithData(getPlatformProductResponses, c)
}

View File

@ -4,6 +4,7 @@ import (
"gorm.io/gorm"
"gorm.io/gorm/clause"
"hospital-admin-api/api/model"
"hospital-admin-api/api/requests"
"hospital-admin-api/global"
)
@ -71,3 +72,80 @@ func (r *ProductDao) AddProduct(tx *gorm.DB, model *model.Product) (*model.Produ
}
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)
}
// 平台商品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("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
}

View File

@ -0,0 +1,72 @@
package dao
import (
"gorm.io/gorm"
"hospital-admin-api/api/model"
"hospital-admin-api/global"
)
type ProductPlatformAmountDao struct {
}
// GetProductPlatformAmountById 获取商品库存数据-商品库存id
func (r *ProductPlatformAmountDao) GetProductPlatformAmountById(amountId int64) (m *model.ProductPlatformAmount, err error) {
err = global.Db.First(&m, amountId).Error
if err != nil {
return nil, err
}
return m, nil
}
// GetProductPlatformAmountByProductPlatformId 获取商品库存数据-平台商品id
func (r *ProductPlatformAmountDao) GetProductPlatformAmountByProductPlatformId(productPlatformId int64) (m *model.ProductPlatformAmount, err error) {
err = global.Db.Where("product_platform_id = ?", productPlatformId).First(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// DeleteProductPlatformAmount 删除商品库存
func (r *ProductPlatformAmountDao) DeleteProductPlatformAmount(tx *gorm.DB, maps interface{}) error {
err := tx.Where(maps).Delete(&model.ProductPlatformAmount{}).Error
if err != nil {
return err
}
return nil
}
// EditProductPlatformAmount 修改商品库存
func (r *ProductPlatformAmountDao) EditProductPlatformAmount(tx *gorm.DB, maps interface{}, data interface{}) error {
err := tx.Model(&model.ProductPlatformAmount{}).Where(maps).Updates(data).Error
if err != nil {
return err
}
return nil
}
// EditProductPlatformAmountByUserId 修改商品库存-商品库存id
func (r *ProductPlatformAmountDao) EditProductPlatformAmountByUserId(tx *gorm.DB, amountId int64, data interface{}) error {
err := tx.Model(&model.ProductPlatformAmount{}).Where("amount_id = ?", amountId).Updates(data).Error
if err != nil {
return err
}
return nil
}
// GetProductPlatformAmountList 获取商品库存列表
func (r *ProductPlatformAmountDao) GetProductPlatformAmountList(maps interface{}) (m []*model.ProductPlatformAmount, err error) {
err = global.Db.Where(maps).Find(&m).Error
if err != nil {
return nil, err
}
return m, nil
}
// AddProductPlatformAmount 新增商品K库存
func (r *ProductPlatformAmountDao) AddProductPlatformAmount(tx *gorm.DB, model *model.ProductPlatformAmount) (*model.ProductPlatformAmount, error) {
if err := tx.Create(model).Error; err != nil {
return nil, err
}
return model, nil
}

111
api/dto/Product.go Normal file
View File

@ -0,0 +1,111 @@
package dto
import (
"fmt"
"hospital-admin-api/api/model"
"hospital-admin-api/utils"
)
type ProductDto struct {
ProductId string `json:"product_id"` // 主键id
ProductPlatformId string `json:"product_platform_id"` // 处方平台商品id
ProductName string `json:"product_name"` // 商品名称
CommonName string `json:"common_name"` // 商品通用名
ProductPrice float64 `json:"product_price"` // 商品价格
MnemonicCode string `json:"mnemonic_code"` // 商品助记码(首字母简拼)
ProductType int `json:"product_type"` // 药品类型0:未知 1:中成药 2:西药)
ProductPlatformCode string `json:"product_platform_code"` // 处方平台商品编码
ProductPharmacyCode string `json:"product_pharmacy_code"` // 第三方药店商品编码
ProductCoverImg string `json:"product_cover_img"` // 商品封面图
ProductSpec string `json:"product_spec"` // 商品规格
LicenseNumber string `json:"license_number"` // 批准文号
Manufacturer string `json:"manufacturer"` // 生产厂家
SingleUnit string `json:"single_unit"` // 单次剂量1次1包
SingleUse string `json:"single_use"` // 单次用法(例:口服)
PackagingUnit string `json:"packaging_unit"` // 基本包装单位(例:盒/瓶)
FrequencyUse string `json:"frequency_use"` // 使用频率(例1天3次)
AvailableDays float64 `json:"available_days"` // 可用天数(3)
ProductRemarks string `json:"product_remarks"` // 商品备注
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
Stock uint `json:"stock"` // 现有库存
}
// GetProductDto 商品详情
func GetProductDto(m *model.Product) *ProductDto {
return &ProductDto{
ProductId: fmt.Sprintf("%d", m.ProductId),
ProductPlatformId: fmt.Sprintf("%d", m.ProductPlatformId),
ProductName: m.ProductName,
CommonName: m.ProductName,
ProductPrice: m.ProductPrice,
MnemonicCode: m.MnemonicCode,
ProductType: m.ProductType,
ProductPlatformCode: m.ProductPlatformCode,
ProductPharmacyCode: m.ProductPharmacyCode,
ProductCoverImg: utils.AddOssDomain(m.ProductCoverImg),
ProductSpec: m.ProductSpec,
LicenseNumber: m.LicenseNumber,
Manufacturer: m.Manufacturer,
SingleUnit: m.SingleUnit,
SingleUse: m.SingleUse,
PackagingUnit: m.PackagingUnit,
FrequencyUse: m.FrequencyUse,
AvailableDays: m.AvailableDays,
ProductRemarks: m.ProductRemarks,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
// GetProductListDto 商品列表
func GetProductListDto(m []*model.Product) []*ProductDto {
// 处理返回值
responses := make([]*ProductDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &ProductDto{
ProductId: fmt.Sprintf("%d", v.ProductId),
ProductPlatformId: fmt.Sprintf("%d", v.ProductPlatformId),
ProductName: v.ProductName,
CommonName: v.ProductName,
ProductPrice: v.ProductPrice,
MnemonicCode: v.MnemonicCode,
ProductType: v.ProductType,
ProductPlatformCode: v.ProductPlatformCode,
ProductPharmacyCode: v.ProductPharmacyCode,
ProductCoverImg: utils.AddOssDomain(v.ProductCoverImg),
ProductSpec: v.ProductSpec,
LicenseNumber: v.LicenseNumber,
Manufacturer: v.Manufacturer,
SingleUnit: v.SingleUnit,
SingleUse: v.SingleUse,
PackagingUnit: v.PackagingUnit,
FrequencyUse: v.FrequencyUse,
AvailableDays: v.AvailableDays,
ProductRemarks: v.ProductRemarks,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 加载商品库存
if v.ProductPlatformAmount != nil {
response = response.LoadProductAmount(v.ProductPlatformAmount)
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
// LoadProductAmount 加载商品库存
func (r *ProductDto) LoadProductAmount(m *model.ProductPlatformAmount) *ProductDto {
if m != nil {
r.Stock = m.Stock
}
return r
}

View File

@ -8,25 +8,26 @@ import (
// Product 商品表
type Product struct {
ProductId int64 `gorm:"column:product_id;type:bigint(19);primary_key;comment:主键id" json:"product_id"`
ProductPlatformId int64 `gorm:"column:product_platform_id;type:bigint(19);comment:处方平台商品id" json:"product_platform_id"`
ProductName string `gorm:"column:product_name;type:varchar(255);comment:商品名称" json:"product_name"`
CommonName string `gorm:"column:common_name;type:varchar(100);comment:商品通用名" json:"common_name"`
ProductPrice float64 `gorm:"column:product_price;type:decimal(10,2);comment:商品价格" json:"product_price"`
MnemonicCode string `gorm:"column:mnemonic_code;type:varchar(50);comment:商品助记码(首字母简拼)" json:"mnemonic_code"`
ProductType int `gorm:"column:product_type;type:tinyint(4);default:1;comment:药品类型0:未知 1:中成药 2:西药)" json:"product_type"`
ProductPlatformCode string `gorm:"column:product_platform_code;type:varchar(100);comment:处方平台商品编码" json:"product_platform_code"`
ProductPharmacyCode string `gorm:"column:product_pharmacy_code;type:varchar(100);comment:第三方药店商品编码" json:"product_pharmacy_code"`
ProductCoverImg string `gorm:"column:product_cover_img;type:varchar(255);comment:商品封面图" json:"product_cover_img"`
ProductSpec string `gorm:"column:product_spec;type:varchar(255);comment:商品规格" json:"product_spec"`
LicenseNumber string `gorm:"column:license_number;type:varchar(30);comment:批准文号" json:"license_number"`
Manufacturer string `gorm:"column:manufacturer;type:varchar(255);comment:生产厂家" json:"manufacturer"`
SingleUnit string `gorm:"column:single_unit;type:varchar(50);comment:单次剂量1次1包" json:"single_unit"`
SingleUse string `gorm:"column:single_use;type:varchar(50);comment:单次用法(例:口服)" json:"single_use"`
PackagingUnit string `gorm:"column:packaging_unit;type:varchar(20);comment:基本包装单位(例:盒/瓶)" json:"packaging_unit"`
FrequencyUse string `gorm:"column:frequency_use;type:varchar(50);comment:使用频率(例1天3次)" json:"frequency_use"`
AvailableDays float64 `gorm:"column:available_days;type:float(10,2);comment:可用天数(3)" json:"available_days"`
ProductRemarks string `gorm:"column:product_remarks;type:varchar(255);comment:商品备注" json:"product_remarks"`
ProductId int64 `gorm:"column:product_id;type:bigint(19);primary_key;comment:主键id" json:"product_id"`
ProductPlatformId int64 `gorm:"column:product_platform_id;type:bigint(19);comment:处方平台商品id" json:"product_platform_id"`
ProductName string `gorm:"column:product_name;type:varchar(255);comment:商品名称" json:"product_name"`
CommonName string `gorm:"column:common_name;type:varchar(100);comment:商品通用名" json:"common_name"`
ProductPrice float64 `gorm:"column:product_price;type:decimal(10,2);comment:商品价格" json:"product_price"`
MnemonicCode string `gorm:"column:mnemonic_code;type:varchar(50);comment:商品助记码(首字母简拼)" json:"mnemonic_code"`
ProductType int `gorm:"column:product_type;type:tinyint(4);default:1;comment:药品类型0:未知 1:中成药 2:西药)" json:"product_type"`
ProductPlatformCode string `gorm:"column:product_platform_code;type:varchar(100);comment:处方平台商品编码" json:"product_platform_code"`
ProductPharmacyCode string `gorm:"column:product_pharmacy_code;type:varchar(100);comment:第三方药店商品编码" json:"product_pharmacy_code"`
ProductCoverImg string `gorm:"column:product_cover_img;type:varchar(255);comment:商品封面图" json:"product_cover_img"`
ProductSpec string `gorm:"column:product_spec;type:varchar(255);comment:商品规格" json:"product_spec"`
LicenseNumber string `gorm:"column:license_number;type:varchar(30);comment:批准文号" json:"license_number"`
Manufacturer string `gorm:"column:manufacturer;type:varchar(255);comment:生产厂家" json:"manufacturer"`
SingleUnit string `gorm:"column:single_unit;type:varchar(50);comment:单次剂量1次1包" json:"single_unit"`
SingleUse string `gorm:"column:single_use;type:varchar(50);comment:单次用法(例:口服)" json:"single_use"`
PackagingUnit string `gorm:"column:packaging_unit;type:varchar(20);comment:基本包装单位(例:盒/瓶)" json:"packaging_unit"`
FrequencyUse string `gorm:"column:frequency_use;type:varchar(50);comment:使用频率(例1天3次)" json:"frequency_use"`
AvailableDays float64 `gorm:"column:available_days;type:float(10,2);comment:可用天数(3)" json:"available_days"`
ProductRemarks string `gorm:"column:product_remarks;type:varchar(255);comment:商品备注" json:"product_remarks"`
ProductPlatformAmount *ProductPlatformAmount `gorm:"foreignKey:ProductPlatformId;references:product_platform_id" json:"product_platform_amount"` // 库存
Model
}

View File

@ -2,6 +2,7 @@ package requests
type ProductRequest struct {
GetPlatformProductPage // 获取平台商品列表-分页
GetProductPage // 获取系统商品列表-分页
}
// GetPlatformProductPage 获取平台商品列表-分页
@ -15,3 +16,19 @@ type GetPlatformProductPage struct {
LicenseNumber string `json:"license_number" form:"license_number" label:"批准文号"` // 批准文号
Manufacturer string `json:"manufacturer" form:"manufacturer" label:"生产厂家"` // 生产厂家
}
// GetProductPage 获取系统商品列表-分页
type GetProductPage struct {
Page int `json:"page" form:"page" label:"页码"`
PageSize int `json:"page_size" form:"page_size" label:"每页个数"`
ProductName string `json:"product_name" form:"product_name" label:"商品名称"` // 商品名称
CommonName string `json:"common_name" form:"common_name" label:"商品通用名"` // 商品通用名
MnemonicCode string `json:"mnemonic_code" form:"mnemonic_code" label:"商品助记码"` // 商品助记码(首字母简拼)
ProductType *int `json:"product_type" form:"product_type" label:"药品类型"` // 药品类型0:未知 1:中成药 2:西药)
ProductPlatformId string `json:"product_platform_id" form:"product_platform_id" label:"平台商品id"` // 处方平台商品id
ProductPlatformCode string `json:"product_platform_code" form:"product_platform_code" label:"处方平台编码"` // 处方平台商品编码
ProductPharmacyCode string `json:"product_pharmacy_code" form:"product_pharmacy_code" label:"药店编码"` // 第三方药店商品编码
LicenseNumber string `json:"license_number" form:"license_number" label:"批准文号"` // 批准文号
Manufacturer string `json:"manufacturer" form:"manufacturer" label:"生产厂家"` // 生产厂家
ProductRemarks string `json:"product_remarks" form:"product_remarks" label:"商品备注"` // 商品备注
}

View File

@ -655,6 +655,21 @@ func privateRouter(r *gin.Engine, api controller.Api) {
// 商品管理
productGroup := adminGroup.Group("/product")
{
// 获取系统商品列表-分页
productGroup.GET("", api.Product.GetProductPage)
// 系统商品详情
productGroup.GET("/:product_id", api.Product.GetProduct)
// 新增系统商品
productGroup.POST("", api.Dept.AddDept)
// 删除系统商品
productGroup.DELETE("", api.Dept.DeleteDept)
// 修改系统商品
productGroup.PUT("/:product_id", api.Dept.PutDept)
// 平台商品
platformGroup := productGroup.Group("/platform")
{
@ -662,26 +677,7 @@ func privateRouter(r *gin.Engine, api controller.Api) {
platformGroup.GET("", api.Product.GetPlatformProductPage)
// 平台商品详情
platformGroup.GET("/:product_platform_id", api.Product.GetPlatformProduct)
}
// 系统商品
systemGroup := productGroup.Group("/system")
{
// 获取系统商品列表-分页
systemGroup.GET("", api.Product.GetSystemProductPage)
// 系统商品详情
systemGroup.GET("/:product_id", api.OrderProduct.GetOrderProduct)
// 新增系统商品
systemGroup.POST("", api.Dept.AddDept)
// 删除系统商品
systemGroup.DELETE("", api.Dept.DeleteDept)
// 修改系统商品
systemGroup.PUT("/:product_id", api.Dept.PutDept)
platformGroup.GET("/:product_platform_id", api.Product.GetProductPlatform)
}
}
}

View File

@ -9,8 +9,8 @@ import (
type ProductService struct {
}
// GetPlatformProduct 平台商品详情
func (r *ProductService) GetPlatformProduct(productPlatformId int64) (g *dto.ProductPlatformDto, err error) {
// GetProductPlatform 平台商品详情
func (r *ProductService) GetProductPlatform(productPlatformId int64) (g *dto.ProductPlatformDto, err error) {
// 获取平台商品数据
productPlatformDao := dao.ProductPlatformDao{}
productPlatform, err := productPlatformDao.GetProductPlatformById(productPlatformId)
@ -23,3 +23,27 @@ func (r *ProductService) GetPlatformProduct(productPlatformId int64) (g *dto.Pro
return g, nil
}
// GetProduct 商品详情
func (r *ProductService) GetProduct(productId int64) (g *dto.ProductDto, err error) {
// 获取商品数据
productDao := dao.ProductDao{}
product, err := productDao.GetProductById(productId)
if err != nil || product == nil {
return nil, errors.New(err.Error())
}
// 获取商品库存数据
productPlatformAmountDao := dao.ProductPlatformAmountDao{}
productPlatformAmount, err := productPlatformAmountDao.GetProductPlatformAmountByProductPlatformId(product.ProductPlatformId)
// 处理返回值
g = dto.GetProductDto(product)
if productPlatformAmount != nil {
// 加载库存
g.LoadProductAmount(productPlatformAmount)
}
return g, nil
}