package erp import ( "context" "git.kumo.work/shama/service/client" product2 "git.kumo.work/shama/service/erp/product" "git.kumo.work/shama/service/lib/bean" "github.com/shopspring/decimal" "time" ) type product struct { product2.Product } type ArgsProductList struct { Page bean.Page Search ProductSearch } type ProductSearch struct { CategoryId int64 // 分类id Serial string // 产品货号 CustomSerial string // 客户货号 Type string // 产品类型 Mold int64 // 组成方式 1=单件 2=套件 CreatedStaffIds []int64 // 录入人 CreatedDepartmentIds []int64 // 归属部门 BanFlag int64 // 禁用标记 1=禁用 2=可用 Name string // 中文品名 CreatedAtStart *time.Time // 录入开始时间 CreatedAtEnd *time.Time // 录入结束时间 ParentIds []int64 // 上级id } type ProductItem struct { Id int64 `json:"id"` Mold int64 `json:"mold"` Serial string `json:"serial"` CustomSerial string `json:"customSerial"` Name string `json:"name"` EngName string `json:"engName"` ImgFilePaths []string `json:"imgFilePaths"` CategoryId *int64 `json:"categoryId"` CategoryName string `json:"categoryName"` Weight *decimal.Decimal `json:"weight"` Texture string `json:"texture"` SalePrice *decimal.Decimal `json:"salePrice"` BanFlag int64 `json:"banFlag"` Type string `json:"type"` Barcode string `json:"barcode"` SellCountry string `json:"sellCountry"` Info string `json:"info"` CreatedStaffId int64 `json:"createdStaffId"` DepartmentId int64 `json:"departmentId"` CreatedAt *time.Time `json:"createdAt"` UpdatedAt *time.Time `json:"updatedAt"` } type ReplyProductList struct { List []ProductItem `json:"list"` Total int64 `json:"total"` } // List @TITLE 产品列表 func (p *product) List(ctx context.Context, args ArgsProductList) (reply ReplyProductList, err error) { xClient, err := client.GetClient(p) if err != nil { return } err = xClient.Call(ctx, "List", args, &reply) return } type ArgsProductAdd struct { StaffId int64 // 员工id ProductAdd } type ProductAdd struct { Serial string // 货号 CustomSerial string // 客户货号 Name string // 中文品名 EngName string // 英文品名 CategoryId *int64 // 类目ID Weight *decimal.Decimal // 重量 Texture string // 材质 SalePrice *decimal.Decimal // 销售单价 BanFlag int64 // 禁用标记 1=禁用,2=可用 Mold int64 // 组成类型 1=单件 2=套件 ParentId int64 // 子套件父级ID Type string // 产品类型 Barcode string // 条形码 SellCountry string // 销售国家 Info string // 备注 Description string // 中文描述 EngDescription string // 英文描述 PackageDescription string // 包装中文描述 PackageEngDescription string // 包装英文描述 PackageInfoFile string // 包装描述文件 Packages []ProductPackage // 包装 Customs ProductCustoms // 海关 Quotes []product2.ArgsQuoteAdd // 工厂报价 ImgFilePaths []string // 图片地址集合 } type ProductCustoms struct { Serial string // 海关编码 Name string // 中文报关名称 DomesticSupply string // 境内货源地 AddTaxRate *decimal.Decimal // 增值税率 MinusTaxRate *decimal.Decimal // 退税率 MeasureUnit string // 报关单位 InvoiceUnit string // 开票单位 Info string // 备注 HsSerial int64 // 是否商检 1=商检 2=未商检 Brand string // 品牌 Detail string // 报关要素 } type ProductPackage struct { Type int64 // 包装类型 1=内盒 2=外箱 Material string // 材质 Num *int64 // 入数 Length *decimal.Decimal // 长 Width *decimal.Decimal // 宽 Height *decimal.Decimal // 高 GrossWeight *decimal.Decimal // 毛重 NetWeight *decimal.Decimal // 净重 Info string // 包装备注 } // Add @TITLE 添加商品 func (p *product) Add(ctx context.Context, args ArgsProductAdd) (productId int64, err error) { xClient, err := client.GetClient(p) if err != nil { return } err = xClient.Call(ctx, "Add", args, &productId) return } type ProductCustomsInfo struct { Id int64 `json:"id"` Serial string `json:"serial"` Name string `json:"name"` DomesticSupply string `json:"domesticSupply"` AddTaxRate *decimal.Decimal `json:"addTaxRate"` MinusTaxRate *decimal.Decimal `json:"minusTaxRate"` MeasureUnit string `json:"measureUnit"` InvoiceUnit string `json:"invoiceUnit"` Info string `json:"info"` HsSerial int64 `json:"hsSerial"` Brand string `json:"brand"` Detail string `json:"detail"` } type ReplyProductInfo struct { Id int64 `json:"id"` Mold int64 `json:"mold"` Serial string `json:"serial"` CustomSerial string `json:"customSerial"` Name string `json:"name"` EngName string `json:"engName"` ImgFilePaths []string `json:"imgFilePaths"` CategoryId *int64 `json:"categoryId"` CategoryName string `json:"categoryName"` Weight *decimal.Decimal `json:"weight"` Texture string `json:"texture"` SalePrice *decimal.Decimal `json:"salePrice"` BanFlag int64 `json:"banFlag"` Type string `json:"type"` Barcode string `json:"barcode"` SellCountry string `json:"sellCountry"` Info string `json:"info"` Description string `json:"description"` EngDescription string `json:"engDescription"` PackageDescription string `json:"packageDescription"` PackageEngDescription string `json:"packageEngDescription"` PackageInfoFile string `json:"packageInfoFile"` CreatedStaffId int64 `json:"createdStaffId"` DepartmentId int64 `json:"departmentId"` CreatedAt *time.Time `json:"createdAt"` UpdatedAt *time.Time `json:"updatedAt"` Packages []ProductPackageInfo `json:"packages"` Customs ProductCustomsInfo `json:"customs"` Quotes []ProductQuoteInfo `json:"quotes"` Children []ReplyProductInfo `json:"children"` // 子组件 } type ProductPackageInfo struct { Type int64 `json:"type"` Material string `json:"material"` Num *int64 `json:"num"` Length *decimal.Decimal `json:"length"` Width *decimal.Decimal `json:"width"` Height *decimal.Decimal `json:"height"` Volume *decimal.Decimal `json:"volume"` GrossWeight *decimal.Decimal `json:"grossWeight"` NetWeight *decimal.Decimal `json:"netWeight"` Info string `json:"info"` } type ProductQuoteInfo struct { Id int64 `json:"id"` FactorySerial string `json:"factorySerial"` FactoryId int64 `json:"factoryId"` FactoryName string `json:"factoryName"` Price *decimal.Decimal `json:"price"` StartNum *int64 `json:"startNum"` MeasureUnit string `json:"measureUnit"` Currency string `json:"currency"` CurrencyName string `json:"currencyName"` CurrencySymbol string `json:"currencySymbol"` CurrencyRate *decimal.Decimal `json:"currencyRate"` MainFlag int64 `json:"mainFlag"` CreatedAt *time.Time `json:"createdAt"` UpdatedAt *time.Time `json:"updatedAt"` } // Info @TITLE 产品详情 func (p *product) Info(ctx context.Context, productId int64) (reply ReplyProductInfo, err error) { xClient, err := client.GetClient(p) if err != nil { return } err = xClient.Call(ctx, "Info", productId, &reply) return } // Infos @TITLE 产品详情 func (p *product) Infos(ctx context.Context, productIds []int64) (reply []ReplyProductInfo, err error) { xClient, err := client.GetClient(p) if err != nil { return } err = xClient.Call(ctx, "Infos", productIds, &reply) return } type ArgsProductEdit struct { ProductId int64 // 产品ID ProductAdd } // Edit @TITLE 编辑产品 func (p *product) Edit(ctx context.Context, args ArgsProductEdit) (err error) { xClient, err := client.GetClient(p) if err != nil { return } reply := 0 return xClient.Call(ctx, "Edit", args, &reply) } // Delete @TITLE 删除产品 func (p *product) Delete(ctx context.Context, productIds []int64) (err error) { xClient, err := client.GetClient(p) if err != nil { return } reply := 0 return xClient.Call(ctx, "Delete", productIds, &reply) }