260 lines
10 KiB
Go
260 lines
10 KiB
Go
|
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)
|
|||
|
}
|