package _type import ( "encoding/json" "fmt" "strconv" "sync/atomic" "time" ) // 任务结构体 // Task 关键数据结构 type Task struct { Header TaskHeader `json:"header"` // 任务头 BodyWait TaskBody `json:"body_wait"` // 任务队列 BodyOver TaskBody `json:"body_over"` // 已完成任务队列 Footer TaskFooter `json:"footer"` // 任务尾 } // TaskHeader 任务头结构 type TaskHeader struct { TaskId string `json:"task_id"` // 任务 ID TaskType int64 `json:"task_type"` // 任务类型 ShopId string `json:"shop_id"` // 店铺 ID ShopName string `json:"shop_name"` // 店铺名称 ShopType string `json:"shop_type"` // 店铺类型 ShopMsg ShopMsg `json:"shop_msg"` // 店铺信息 PriceMod []PriceMod `json:"price_mod"` // 价格模版 PriceType string `json:"price_type"` // 价格类型 ShipPriceMod string `json:"ship_price_mod"` // 运费模版 TaskCount int64 `json:"task_count"` // 任务数量 TaskCountTrue int64 `json:"task_count_true"` // 任务数量(真实) TaskCountWait int64 `json:"task_count_wait"` // 任务数量(等待) TaskCountOver int64 `json:"task_count_over"` // 任务数量(结束) TaskCountSuccess int64 `json:"task_count_success"` // 任务数量(成功) TaskCountError int64 `json:"task_count_error"` // 任务数量(错误) Status TaskStatus `json:"status"` // 任务状态 TaskQpm int64 `json:"task_qpm"` // 任务 QPM TaskCreateAt int64 `json:"task_create_at"` // 任务创建时间 TaskOverAt int64 `json:"task_over_at"` // 任务结束时间 LastIndex int64 `json:"last_index"` // 最后任务索引(记录程序集错误 10001=body_wait中没有数据一致读取,11002=店铺发布商品已达到上限,10003=过滤关键词异常) ImgType int64 `json:"img_type"` // 图片类型 1仅官图 2 实拍图 3 优先官图 4 优先实拍图 UpdateType int64 `json:"update_type"` // 更新方式(仅核价发布或核价表格发布使用) 1 过滤重复 2 全新上传 Pool PoolConfig `json:"pool"` // 线程池配置 } // TaskBody 任务主体结构 type TaskBody struct { BookInfo BookInfo `json:"book_info"` Detail TaskDetail `json:"detail"` Publishing Publishing `json:"publishing"` //出版社信息 } // BookInfo 书籍信息结构 type BookInfo struct { Isbn string `json:"isbn"` // ISBN BookName string `json:"book_name"` // 书名 Author string `json:"author"` // 作者 Publishing string `json:"publishing"` // 出版社 PublicationDate string `json:"publication_date"` // 出版时间 Binding string `json:"binding"` // 装帧 PagesCount int64 `json:"pages_count"` // 页数 WordsCount int64 `json:"words_count"` // 字数 Format int64 `json:"format"` // 开本 ImageObject ImageObject `json:"image_object"` // 图片 Price int64 `json:"price"` // 售价 CatIdObject CatIdObject `json:"cat_id"` // 分类 (冗余 保留下原始字符串) } // TaskFooter 任务项结构 type TaskFooter struct { TaskCount int64 `json:"task_count"` // 任务数量 TaskCountTrue int64 `json:"task_count_true"` // 任务数量(真实) TaskCountWait atomic.Int64 `json:"task_count_wait"` // 任务数量(等待) TaskCountOver atomic.Int64 `json:"task_count_over"` // 任务数量(结束) TaskCountSuccess atomic.Int64 `json:"task_count_success"` // 任务数量(成功) TaskCountError atomic.Int64 `json:"task_count_error"` // 任务数量(错误) TaskQpm int64 `json:"task_qpm"` // 任务 QPM LastIndex int64 `json:"last_index"` // 最后任务索引 } // ShopMsg 店铺信息结构体 type ShopMsg struct { ID string `json:"id"` ShopAliasName string `json:"shop_alias_name"` ShopName string `json:"shop_name"` Token string `json:"token"` //店铺 token 店铺类型=拼多多店铺,此token则是常规token 店铺类型=咸鱼店铺,此token则是【应用Id:应用密钥】 GoodsNamePrefix string `json:"goods_name_prefix"` //店铺名称前缀 GoodsNameSuffix string `json:"goods_name_suffix"` //店铺名称后缀 TitleConsistOf string `json:"title_consist_of"` //标题包含信息 如:作者、出版社等等 SpaceCharacter string `json:"space_character"` //是否使用空格 1为使用 WatermarkImgUrl string `json:"watermark_img_url"` //水印图片链接 WatermarkPosition string `json:"watermark_position"` //水印位置 水印位置 0全部 1第一张 CarouseLastImgUrlArray []string `json:"carouse_last_img_url_array"` //轮播图最后图片 GoodsDetailFirstImgUrlArray []string `json:"goods_detail_first_img_url_array"` //商品详情首图 URL 数组 GoodsDetailLastImgUrlArray []string `json:"goods_detail_last_img_url_array"` //商品详情最后图片 URL 数组 SpecName string `json:"spec_name"` //规格名称 SpecId int64 `json:"spec_id"` //规格 ID SpecChildName string `json:"spec_child_name"` //子规格名称 SpecCompose string `json:"spec_compose"` //规格组合类型 0=自定义 1=Isbn 2=书名 3=货号 IsFolt bool `json:"is_fotl"` //是否支持假一赔十,false-不支持,true-支持 SpecPrefix string `json:"spec_prefix"` //规格前缀 SpecSuffix string `json:"spec_suffix"` //规格后缀 PublishType string `json:"publish_type"` //发布方式 0=24(图书类目) 1=99(其他类目)【限闲鱼店铺使用】 CategoryId string `json:"category_id"` //类目 ID【限闲鱼店铺使用】 IsPreSale bool `json:"is_pre_sale"` //是否预售,true-预售商品,false-非预售商品 IsRefundable bool `json:"is_refundable"` //是否7天无理由退换货,true-支持,false-不支持 IsSecondHand bool `json:"is_second_hand"` //是否二手 true -二手商品 ,false-全新商品 ShipmentLimitSecond int64 `json:"shipment_limit_second"` //承诺发货时间(秒) CostTemplateId string `json:"cost_template_id"` //物流运费模板 ID DefStock int32 `json:"def_stock"` // 默认库存 TwoDiscount int64 `json:"two_discount"` // 两件折扣 DistrictMsg DistrictMsg `json:"district_msg"` // 地区信息【限闲鱼使用】 ShopContext string `json:"shop_context"` // 店铺描述 SkuWatermarkImgUrl string `json:"sku_watermark_img_url"` //sku 水印图片链接 IsParcel string `json:"is_parcel"` //是否包邮 0不包邮 1 包邮【限孔夫子使用】 BookWeight int64 `json:"book_weight"` //图书重量【限孔夫子使用】 StandardNumber int64 `json:"standard_number"` //商品标准本数【限孔夫子使用】 ConditionDef int64 `json:"condition_def"` // 默认品相【限孔夫子使用】 SpecCodeCompose string `json:"spec_code_compose"` //规格编码组合类型 0=货号 1=Isbn } // PriceMod 价格模版结构体 type PriceMod struct { Min int64 `json:"min"` // 价格区间最小值 Max int64 `json:"max"` // 价格区间最大值 MarkupRate int64 `json:"markup_rate"` // 加价比例 MarkupValue int64 `json:"markup_value"` // 价格区间加价值 } // TaskStatus 任务状态 type TaskStatus int64 const ( TaskStatusRunning TaskStatus = 1 // 运行中 TaskStatusPaused TaskStatus = 2 // 已暂停 TaskStatusStopped TaskStatus = 3 // 已停止 TaskStatusOver TaskStatus = 4 // 已完成 TaskStatusPushTaskStatus = 10 // 推送中(拉取任务) ) // TaskDetail 详情结构 type TaskDetail struct { Condition int64 `json:"condition"` // 品相 Price int64 `json:"price"` // 价格 Stock int32 `json:"stock"` // 库存 Status int64 `json:"status"` // 状态 0=失败 1=成功 Error string `json:"error"` // 错误信息 GoodsId int64 `json:"goods_id"` // 商品 ID ReturnId int64 `json:"return_id"` // 拼多多返回 ID SkuCode string `json:"sku_code"` // 规格编码(sku维度) SkuId int64 `json:"sku_id"` // sku 编码(货号) Img string `json:"img"` // 图片 OutGoodsId string `json:"out_goods_id"` // 商品编码 GoodsName string `json:"goods_name"` // 商品名称 IsOnsale int64 `json:"is_onsale"` // 是否上架 0=上架状态,1=下架状态 ShippingCost int64 `json:"shipping_cost"` // 运费 Msg string `json:"msg"` // 消息 } // ImageObject 图片对象结构 type ImageObject struct { CarouselUrlArray []string `json:"carousel_url_array"` // 轮播图 WhiteBackgroundUrl string `json:"white_background_url"` // 白底图 DetailUrlObject DetailImageObject `json:"detail_url_object"` // 详情对象 DefaultImageUrl string `json:"default_image_url"` // 默认图 } // CatIdObject 平台分类结构 type CatIdObject struct { PinDuoDuoCatId FlexibleStr `json:"pin_duo_duo_cat_id"` // 拼多多分类 ID KongFuZiCatId FlexibleStr `json:"kong_fu_zi_cat_id"` // 孔夫子分类 ID XianYuCatId FlexibleStr `json:"xian_yu_cat_id"` // 闲鱼分类 ID } // FlexibleInt64 ====================== 临时 ====================== type FlexibleStr string // UnmarshalJSON 反序列化:接受数字、布尔值、字符串等任意类型,都转换为字符串 func (fi *FlexibleStr) UnmarshalJSON(data []byte) error { // 1. 尝试直接解析为字符串 var s string if err := json.Unmarshal(data, &s); err == nil { *fi = FlexibleStr(s) return nil } // 2. 尝试解析为数字 var num json.Number if err := json.Unmarshal(data, &num); err == nil { *fi = FlexibleStr(num.String()) return nil } // 3. 尝试解析为布尔值 var b bool if err := json.Unmarshal(data, &b); err == nil { *fi = FlexibleStr(strconv.FormatBool(b)) return nil } // 4. 其他任意类型 var any interface{} if err := json.Unmarshal(data, &any); err != nil { return err } // 将任意类型转为字符串 *fi = FlexibleStr(fmt.Sprintf("%v", any)) return nil } // MarshalJSON 序列化:总是输出为字符串 func (fi FlexibleStr) MarshalJSON() ([]byte, error) { return json.Marshal(string(fi)) } // String 实现 Stringer 接口 func (fi FlexibleStr) String() string { return string(fi) } // ToInt64 如果需要转换为 int64 func (fi FlexibleStr) ToInt64() (int64, error) { return strconv.ParseInt(string(fi), 10, 64) } // ToFloat64 如果需要转换为 float64 func (fi FlexibleStr) ToFloat64() (float64, error) { return strconv.ParseFloat(string(fi), 64) } // ToBool 如果需要转换为 bool func (fi FlexibleStr) ToBool() (bool, error) { return strconv.ParseBool(string(fi)) } // FlexibleInt64 ====================== 临时 ====================== // DetailImageObject 详情图片对象结构 type DetailImageObject struct { IntroductionUrl []string `json:"introduction_url"` // 简介图 CatalogueUrl []string `json:"catalogue_url"` // 目录图 LiveShootingUrl []string `json:"live_shooting_url"` // 实拍图 OtherUrl []string `json:"other_url"` // 其他图 } // PriceRange 价格区间 type PriceRange struct { MinPrice int64 `json:"minPrice"` MaxPrice int64 `json:"maxPrice"` AdjustPercent interface{} `json:"adjustPercent"` // 可能是 int 或 string AdjustAmount int64 `json:"adjustAmount"` } // DistrictMsg 地区信息 type DistrictMsg struct { DistrictId int64 `json:"district_id"` DistrictType string `json:"district_type"` } // Publishing Redis中存储的出版社信息结构体 type Publishing struct { Value string `json:"value"` Vid int64 `json:"vid"` } type GetSubscriptionExpirationDateUrl struct { Code int `json:"code"` Message string `json:"message"` Data GetSubscriptionExpirationDateUrlData `json:"data"` Timestamp time.Time `json:"timestamp"` // 也可使用 time.Time 类型,根据实际需要选择 } type GetSubscriptionExpirationDateUrlData struct { ExpirationDate int64 `json:"expirationDate"` IsVip bool `json:"isVip"` }