更新
This commit is contained in:
287
erp/sale/product.go
Normal file
287
erp/sale/product.go
Normal file
@@ -0,0 +1,287 @@
|
||||
package sale
|
||||
|
||||
import (
|
||||
"context"
|
||||
"git.kumo.work/shama/service/client"
|
||||
product2 "git.kumo.work/shama/service/erp/product"
|
||||
"github.com/shopspring/decimal"
|
||||
"time"
|
||||
)
|
||||
|
||||
type product struct {
|
||||
product2.Product
|
||||
}
|
||||
type ProductItem struct {
|
||||
Id int64 `json:"id"`
|
||||
Mold int64 `json:"mold"`
|
||||
ParentId int64 `json:"parentId"`
|
||||
Serial string `json:"serial"`
|
||||
Po string `json:"po"`
|
||||
CustomSerial string `json:"customSerial"`
|
||||
Name string `json:"name"`
|
||||
EngName string `json:"engName"`
|
||||
ImgFilePaths []string `json:"imgFilePaths"`
|
||||
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"`
|
||||
Sort int64 `json:"sort"`
|
||||
SaleCount int64 `json:"saleCount"`
|
||||
SaleAmount decimal.Decimal `json:"saleAmount"`
|
||||
BoxCount int64 `json:"boxCount"`
|
||||
QuotePrice decimal.Decimal `json:"quotePrice"`
|
||||
QuoteFactorySerial string `json:"quoteFactorySerial"`
|
||||
QuoteFactoryID int64 `json:"quoteFactoryID"`
|
||||
QuoteFactoryName string `json:"quoteFactoryName"`
|
||||
QuoteStartNum int64 `json:"quoteStartNum"`
|
||||
QuoteMeasureUnit string `json:"quoteMeasureUnit"`
|
||||
CreatedAt *time.Time `json:"createdAt"`
|
||||
UpdatedAt *time.Time `json:"updatedAt"`
|
||||
Children []*ProductItem `json:"children"`
|
||||
}
|
||||
|
||||
// All @TITLE 获取产品
|
||||
func (p *product) All(ctx context.Context, saleId int64) (reply []ProductItem, err error) {
|
||||
xClient, err := client.GetClient(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = xClient.Call(ctx, "All", saleId, &reply)
|
||||
return
|
||||
}
|
||||
|
||||
type ArgsProductAdd struct {
|
||||
SaleId int64 // 销售合同id
|
||||
ProductAdds []ProductAdd // 产品数组
|
||||
}
|
||||
type ProductAdd struct {
|
||||
ProductId int64 // 产品id
|
||||
Serial string // 货号
|
||||
CustomSerial string // 客户货号
|
||||
Name string // 中文品名
|
||||
EngName string // 英文品名
|
||||
Weight *decimal.Decimal // 重量
|
||||
Texture string // 材质
|
||||
SalePrice decimal.Decimal // 销售单价
|
||||
BanFlag int64 // 禁用标记 1=禁用,2=可用
|
||||
Mold int64 // 组成类型 1=单件 2=套件
|
||||
Type string // 产品类型
|
||||
Barcode string // 条形码
|
||||
SellCountry string // 销售国家
|
||||
Info string // 备注
|
||||
Description string // 中文描述
|
||||
EngDescription string // 英文描述
|
||||
PackageDescription string // 包装中文描述
|
||||
PackageEngDescription string // 包装英文描述
|
||||
PackageInfoFile string // 包装描述文件
|
||||
Sort int64 // 排序
|
||||
SaleCount int64 // 销售数量/合同数量
|
||||
Packages []ProductPackage // 包装
|
||||
Customs ProductCustoms // 海关
|
||||
Quote ProductQuote // 工厂报价
|
||||
ImgFilePaths []string // 图片地址集合
|
||||
Children []ProductAdd // 子组件
|
||||
}
|
||||
|
||||
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 // 包装备注
|
||||
}
|
||||
|
||||
type ProductQuote struct {
|
||||
FactorySerial string // 工厂货号
|
||||
FactoryId int64 // 工厂id
|
||||
FactoryName string // 工厂名称
|
||||
Price decimal.Decimal // 采购单价
|
||||
StartNum int64 // 起订量
|
||||
MeasureUnit string // 数量单位
|
||||
Currency string // 币种
|
||||
CurrencyName string // 币种名称
|
||||
CurrencySymbol string // 币种符号
|
||||
CurrencyRate decimal.Decimal // 币种汇率
|
||||
}
|
||||
|
||||
// Add @TITLE 添加商品
|
||||
func (p *product) Add(ctx context.Context, args ArgsProductAdd) (err error) {
|
||||
xClient, err := client.GetClient(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
reply := 0
|
||||
return xClient.Call(ctx, "Add", args, &reply)
|
||||
}
|
||||
|
||||
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"`
|
||||
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"`
|
||||
CreatedAt *time.Time `json:"createdAt"`
|
||||
UpdatedAt *time.Time `json:"updatedAt"`
|
||||
Packages []ProductPackageInfo `json:"packages"`
|
||||
Customs ProductCustomsInfo `json:"customs"`
|
||||
Quote ProductQuoteInfo `json:"quotes"`
|
||||
}
|
||||
|
||||
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"`
|
||||
CreatedAt *time.Time `json:"createdAt"`
|
||||
UpdatedAt *time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
// Info @TITLE 产品详情
|
||||
func (p *product) Info(ctx context.Context, saleProductId int64) (reply ReplyProductInfo, err error) {
|
||||
xClient, err := client.GetClient(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = xClient.Call(ctx, "Info", saleProductId, &reply)
|
||||
return
|
||||
}
|
||||
|
||||
type ArgsProductEdit struct {
|
||||
SaleProductId int64 // 产品ID
|
||||
ProductEdit
|
||||
}
|
||||
|
||||
type ProductEdit struct {
|
||||
Serial string // 货号
|
||||
CustomSerial string // 客户货号
|
||||
Name string // 中文品名
|
||||
EngName string // 英文品名
|
||||
Weight *decimal.Decimal // 重量
|
||||
Texture string // 材质
|
||||
SalePrice decimal.Decimal // 销售单价
|
||||
BanFlag int64 // 禁用标记 1=禁用,2=可用
|
||||
Mold int64 // 组成类型 1=单件 2=套件
|
||||
Type string // 产品类型
|
||||
Barcode string // 条形码
|
||||
SellCountry string // 销售国家
|
||||
Info string // 备注
|
||||
Description string // 中文描述
|
||||
EngDescription string // 英文描述
|
||||
PackageDescription string // 包装中文描述
|
||||
PackageEngDescription string // 包装英文描述
|
||||
PackageInfoFile string // 包装描述文件
|
||||
Packages []ProductPackage // 包装
|
||||
Customs ProductCustoms // 海关
|
||||
Quote ProductQuote // 工厂报价
|
||||
ImgFilePaths []string // 图片地址集合
|
||||
}
|
||||
|
||||
// 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)
|
||||
}
|
||||
|
||||
type MultiData struct {
|
||||
SaleProductId int64 // 产品id
|
||||
PO string // PO
|
||||
QuotePrice decimal.Decimal // 采购单价
|
||||
SalePrice decimal.Decimal // 销售单价
|
||||
SaleCount int64 // 销售数量
|
||||
Info string // 备注
|
||||
}
|
||||
|
||||
// MultiEdit @TITLE 批量编辑
|
||||
func (p *product) MultiEdit(ctx context.Context, args []MultiData) (err error) {
|
||||
xClient, err := client.GetClient(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
reply := 0
|
||||
return xClient.Call(ctx, "MultiEdit", args, &reply)
|
||||
}
|
||||
|
||||
// Delete @TITLE 删除产品
|
||||
func (p *product) Delete(ctx context.Context, saleProductIds []int64) (err error) {
|
||||
xClient, err := client.GetClient(p)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
reply := 0
|
||||
return xClient.Call(ctx, "Delete", saleProductIds, &reply)
|
||||
}
|
||||
Reference in New Issue
Block a user