对接旺店通查询供应商列表接口、查询仓库列表接口、查询货品列表接口
This commit is contained in:
parent
aa22953f2f
commit
27a28823bb
@ -63,6 +63,12 @@ external_api:
|
||||
wangdian:
|
||||
url: "https://api.wangdian.cn/openapi2/purchase_order_push.php"
|
||||
sandbox_url: "https://sandbox.wangdian.cn/openapi2/purchase_order_push.php"
|
||||
provider_query_url: "https://api.wangdian.cn/openapi2/purchase_provider_query.php"
|
||||
provider_query_sandbox: "https://sandbox.wangdian.cn/openapi2/purchase_provider_query.php"
|
||||
warehouse_query_url: "https://api.wangdian.cn/openapi2/warehouse_query.php"
|
||||
warehouse_query_sandbox: "https://sandbox.wangdian.cn/openapi2/warehouse_query.php"
|
||||
goods_query_url: "https://api.wangdian.cn/openapi2/goods_query.php"
|
||||
goods_query_sandbox: "https://sandbox.wangdian.cn/openapi2/goods_query.php"
|
||||
sandbox: true
|
||||
sid: "apidevnew2"
|
||||
appkey: "skxz2-test"
|
||||
|
||||
@ -76,13 +76,19 @@ type ExternalAPIConfig struct {
|
||||
}
|
||||
|
||||
type WangdianConfig struct {
|
||||
URL string `yaml:"url"`
|
||||
SandboxURL string `yaml:"sandbox_url"`
|
||||
Sandbox bool `yaml:"sandbox"`
|
||||
Sid string `yaml:"sid"`
|
||||
AppKey string `yaml:"appkey"`
|
||||
AppSecret string `yaml:"appsecret"`
|
||||
Timeout int `yaml:"timeout"`
|
||||
URL string `yaml:"url"`
|
||||
SandboxURL string `yaml:"sandbox_url"`
|
||||
ProviderQueryURL string `yaml:"provider_query_url"`
|
||||
ProviderQuerySandbox string `yaml:"provider_query_sandbox"`
|
||||
WarehouseQueryURL string `yaml:"warehouse_query_url"`
|
||||
WarehouseQuerySandbox string `yaml:"warehouse_query_sandbox"`
|
||||
GoodsQueryURL string `yaml:"goods_query_url"`
|
||||
GoodsQuerySandbox string `yaml:"goods_query_sandbox"`
|
||||
Sandbox bool `yaml:"sandbox"`
|
||||
Sid string `yaml:"sid"`
|
||||
AppKey string `yaml:"appkey"`
|
||||
AppSecret string `yaml:"appsecret"`
|
||||
Timeout int `yaml:"timeout"`
|
||||
}
|
||||
|
||||
var AppConfig *Config
|
||||
|
||||
@ -35,3 +35,81 @@ func (i *WangdianApi) CreatePurchaseOrder(c *gin.Context) {
|
||||
"message": resp.Message,
|
||||
})
|
||||
}
|
||||
|
||||
func (i *WangdianApi) QueryProvider(c *gin.Context) {
|
||||
column := c.Query("column")
|
||||
providerNo := c.Query("provider_no")
|
||||
providerName := c.Query("provider_name")
|
||||
pageSizeStr := c.Query("page_size")
|
||||
pageNoStr := c.Query("page_no")
|
||||
|
||||
pageSize, _ := strconv.Atoi(pageSizeStr)
|
||||
pageNo, _ := strconv.Atoi(pageNoStr)
|
||||
|
||||
resp, err := service.QueryProvider(column, providerNo, providerName, pageSize, pageNo)
|
||||
if err != nil {
|
||||
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询旺店通供应商失败: "+err.Error(), err, c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": resp.Code,
|
||||
"message": resp.Message,
|
||||
"total_count": resp.TotalCount,
|
||||
"provider_list": resp.ProviderList,
|
||||
})
|
||||
}
|
||||
|
||||
func (i *WangdianApi) QueryWarehouse(c *gin.Context) {
|
||||
warehouseNo := c.Query("warehouse_no")
|
||||
pageSizeStr := c.Query("page_size")
|
||||
pageNoStr := c.Query("page_no")
|
||||
isDisabled := c.Query("is_disabled")
|
||||
|
||||
pageSize, _ := strconv.Atoi(pageSizeStr)
|
||||
pageNo, _ := strconv.Atoi(pageNoStr)
|
||||
|
||||
resp, err := service.QueryWarehouse(warehouseNo, 0, 0, pageSize, pageNo, isDisabled)
|
||||
if err != nil {
|
||||
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询旺店通仓库失败: "+err.Error(), err, c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": resp.Code,
|
||||
"message": resp.Message,
|
||||
"total_count": resp.TotalCount,
|
||||
"warehouses": resp.Warehouses,
|
||||
})
|
||||
}
|
||||
|
||||
func (i *WangdianApi) QueryGoods(c *gin.Context) {
|
||||
specNo := c.Query("spec_no")
|
||||
goodsNo := c.Query("goods_no")
|
||||
brandNo := c.Query("brand_no")
|
||||
className := c.Query("class_name")
|
||||
barcode := c.Query("barcode")
|
||||
startTime := c.Query("start_time")
|
||||
endTime := c.Query("end_time")
|
||||
pageSizeStr := c.Query("page_size")
|
||||
pageNoStr := c.Query("page_no")
|
||||
|
||||
pageSize, _ := strconv.Atoi(pageSizeStr)
|
||||
if pageSize <= 0 {
|
||||
pageSize = 40
|
||||
}
|
||||
pageNo, _ := strconv.Atoi(pageNoStr)
|
||||
|
||||
resp, err := service.QueryGoods(specNo, goodsNo, brandNo, className, barcode, startTime, endTime, 0, pageSize, pageNo)
|
||||
if err != nil {
|
||||
utils.FailWithRequestLog(constant.LoggerChannelWork, "查询旺店通商品失败: "+err.Error(), err, c, nil)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"code": resp.Code,
|
||||
"message": resp.Message,
|
||||
"total_count": resp.TotalCount,
|
||||
"goods_list": resp.GoodsList,
|
||||
})
|
||||
}
|
||||
|
||||
@ -112,6 +112,9 @@ func initRouter() (r *gin.Engine) {
|
||||
authOnly.Use(middleware.JWTAuth())
|
||||
{
|
||||
authOnly.POST("/wangdian/purchase-order-push", wangdianApi.CreatePurchaseOrder) // 推送采购单到旺店通
|
||||
authOnly.GET("/wangdian/query-provider", wangdianApi.QueryProvider) // 查询旺店通供应商
|
||||
authOnly.GET("/wangdian/query-warehouse", wangdianApi.QueryWarehouse) // 查询旺店通仓库
|
||||
authOnly.GET("/wangdian/query-goods", wangdianApi.QueryGoods) // 查询旺店通商品
|
||||
}
|
||||
|
||||
// 需要认证的接口
|
||||
|
||||
@ -53,6 +53,208 @@ type WangdianPurchasePushResponse struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
type WangdianProviderQueryResponse struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
TotalCount int `json:"total_count"`
|
||||
ProviderList []map[string]interface{} `json:"provider_list"`
|
||||
}
|
||||
|
||||
type WangdianWarehouseQueryResponse struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
TotalCount int `json:"total_count"`
|
||||
Warehouses []map[string]interface{} `json:"warehouses"`
|
||||
}
|
||||
|
||||
func wangdianURL(sandboxURL, productionURL string) string {
|
||||
cfg := config.AppConfig.Wangdian
|
||||
if cfg.Sandbox && sandboxURL != "" {
|
||||
return sandboxURL
|
||||
}
|
||||
if productionURL != "" {
|
||||
return productionURL
|
||||
}
|
||||
return productionURL
|
||||
}
|
||||
|
||||
// QueryProvider 查询旺店通供应商
|
||||
func QueryProvider(column, providerNo, providerName string, pageSize, pageNo int) (*WangdianProviderQueryResponse, error) {
|
||||
cfg := config.AppConfig.Wangdian
|
||||
if cfg.Sid == "" || cfg.AppKey == "" || cfg.AppSecret == "" {
|
||||
return nil, fmt.Errorf("旺店通接口配置不完整(sid/appkey/appsecret)")
|
||||
}
|
||||
|
||||
params := map[string]string{
|
||||
"sid": cfg.Sid,
|
||||
"appkey": cfg.AppKey,
|
||||
"timestamp": strconv.FormatInt(time.Now().Unix(), 10),
|
||||
}
|
||||
if column != "" {
|
||||
params["column"] = column
|
||||
}
|
||||
if providerNo != "" {
|
||||
params["provider_no"] = providerNo
|
||||
}
|
||||
if providerName != "" {
|
||||
params["provider_name"] = providerName
|
||||
}
|
||||
if pageSize > 0 {
|
||||
params["page_size"] = strconv.Itoa(pageSize)
|
||||
}
|
||||
if pageNo > 0 {
|
||||
params["page_no"] = strconv.Itoa(pageNo)
|
||||
}
|
||||
params["sign"] = utils.WangdianSign(params, cfg.AppSecret)
|
||||
|
||||
url := wangdianURL(cfg.ProviderQuerySandbox, cfg.ProviderQueryURL)
|
||||
if url == "" {
|
||||
url = "https://api.wangdian.cn/openapi2/purchase_provider_query.php"
|
||||
}
|
||||
|
||||
timeout := cfg.Timeout
|
||||
if timeout <= 0 {
|
||||
timeout = 30
|
||||
}
|
||||
|
||||
log.Printf("[旺店通供应商查询] 请求URL: %s (sandbox=%v), 参数: sid=%s appkey=%s timestamp=%s sign=%s", url, cfg.Sandbox, cfg.Sid, cfg.AppKey, params["timestamp"], params["sign"])
|
||||
|
||||
respBody, err := utils.SubmitFormDataWithTimeout(url, params, timeout)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询请求失败: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("[旺店通供应商查询] 返回信息: %s", string(respBody))
|
||||
|
||||
var resp WangdianProviderQueryResponse
|
||||
if err := json.Unmarshal([]byte(respBody), &resp); err != nil {
|
||||
return nil, fmt.Errorf("解析响应失败(raw=%s): %v", respBody, err)
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
|
||||
// QueryWarehouse 查询旺店通仓库
|
||||
func QueryWarehouse(warehouseNo string, warehouseType int, subType int, pageSize, pageNo int, isDisabled string) (*WangdianWarehouseQueryResponse, error) {
|
||||
cfg := config.AppConfig.Wangdian
|
||||
if cfg.Sid == "" || cfg.AppKey == "" || cfg.AppSecret == "" {
|
||||
return nil, fmt.Errorf("旺店通接口配置不完整(sid/appkey/appsecret)")
|
||||
}
|
||||
|
||||
params := map[string]string{
|
||||
"sid": cfg.Sid,
|
||||
"appkey": cfg.AppKey,
|
||||
"timestamp": strconv.FormatInt(time.Now().Unix(), 10),
|
||||
}
|
||||
if warehouseNo != "" {
|
||||
params["warehouse_no"] = warehouseNo
|
||||
}
|
||||
if pageSize > 0 {
|
||||
params["page_size"] = strconv.Itoa(pageSize)
|
||||
}
|
||||
if pageNo > 0 {
|
||||
params["page_no"] = strconv.Itoa(pageNo)
|
||||
}
|
||||
if isDisabled != "" {
|
||||
params["is_disabled"] = isDisabled
|
||||
}
|
||||
params["sign"] = utils.WangdianSign(params, cfg.AppSecret)
|
||||
|
||||
url := wangdianURL(cfg.WarehouseQuerySandbox, cfg.WarehouseQueryURL)
|
||||
if url == "" {
|
||||
url = "https://api.wangdian.cn/openapi2/warehouse_query.php"
|
||||
}
|
||||
|
||||
timeout := cfg.Timeout
|
||||
if timeout <= 0 {
|
||||
timeout = 30
|
||||
}
|
||||
|
||||
log.Printf("[旺店通仓库查询] 请求URL: %s (sandbox=%v), 参数: sid=%s appkey=%s timestamp=%s sign=%s", url, cfg.Sandbox, cfg.Sid, cfg.AppKey, params["timestamp"], params["sign"])
|
||||
|
||||
respBody, err := utils.SubmitFormDataWithTimeout(url, params, timeout)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询请求失败: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("[旺店通仓库查询] 返回信息: %s", string(respBody))
|
||||
|
||||
var resp WangdianWarehouseQueryResponse
|
||||
if err := json.Unmarshal([]byte(respBody), &resp); err != nil {
|
||||
return nil, fmt.Errorf("解析响应失败(raw=%s): %v", respBody, err)
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
|
||||
type WangdianGoodsQueryResponse struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
TotalCount int `json:"total_count"`
|
||||
GoodsList []map[string]interface{} `json:"goods_list"`
|
||||
}
|
||||
|
||||
// QueryGoods 查询旺店通商品
|
||||
func QueryGoods(specNo, goodsNo, brandNo, className, barcode, startTime, endTime string, deleted int, pageSize, pageNo int) (*WangdianGoodsQueryResponse, error) {
|
||||
cfg := config.AppConfig.Wangdian
|
||||
if cfg.Sid == "" || cfg.AppKey == "" || cfg.AppSecret == "" {
|
||||
return nil, fmt.Errorf("旺店通接口配置不完整(sid/appkey/appsecret)")
|
||||
}
|
||||
|
||||
params := map[string]string{
|
||||
"sid": cfg.Sid,
|
||||
"appkey": cfg.AppKey,
|
||||
"timestamp": strconv.FormatInt(time.Now().Unix(), 10),
|
||||
}
|
||||
if specNo != "" {
|
||||
params["spec_no"] = specNo
|
||||
}
|
||||
if goodsNo != "" {
|
||||
params["goods_no"] = goodsNo
|
||||
}
|
||||
if brandNo != "" {
|
||||
params["brand_no"] = brandNo
|
||||
}
|
||||
if className != "" {
|
||||
params["class_name"] = className
|
||||
}
|
||||
if barcode != "" {
|
||||
params["barcode"] = barcode
|
||||
}
|
||||
if startTime != "" {
|
||||
params["start_time"] = startTime
|
||||
}
|
||||
if endTime != "" {
|
||||
params["end_time"] = endTime
|
||||
}
|
||||
params["page_size"] = strconv.Itoa(pageSize)
|
||||
params["page_no"] = strconv.Itoa(pageNo)
|
||||
params["sign"] = utils.WangdianSign(params, cfg.AppSecret)
|
||||
|
||||
url := wangdianURL(cfg.GoodsQuerySandbox, cfg.GoodsQueryURL)
|
||||
if url == "" {
|
||||
url = "https://api.wangdian.cn/openapi2/goods_query.php"
|
||||
}
|
||||
|
||||
timeout := cfg.Timeout
|
||||
if timeout <= 0 {
|
||||
timeout = 30
|
||||
}
|
||||
|
||||
log.Printf("[旺店通商品查询] 请求URL: %s (sandbox=%v), 参数: sid=%s appkey=%s timestamp=%s sign=%s", url, cfg.Sandbox, cfg.Sid, cfg.AppKey, params["timestamp"], params["sign"])
|
||||
|
||||
respBody, err := utils.SubmitFormDataWithTimeout(url, params, timeout)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询请求失败: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("[旺店通商品查询] 返回信息: %s", string(respBody))
|
||||
|
||||
var resp WangdianGoodsQueryResponse
|
||||
if err := json.Unmarshal([]byte(respBody), &resp); err != nil {
|
||||
return nil, fmt.Errorf("解析响应失败(raw=%s): %v", respBody, err)
|
||||
}
|
||||
return &resp, nil
|
||||
}
|
||||
|
||||
func PushPurchaseOrder(purchaseOrderID int64, db ...*gorm.DB) (*WangdianPurchasePushResponse, error) {
|
||||
databaseConn := database.OptionalDB(db...)
|
||||
|
||||
@ -157,10 +359,7 @@ func PushPurchaseOrder(purchaseOrderID int64, db ...*gorm.DB) (*WangdianPurchase
|
||||
params["sign"] = utils.WangdianSign(params, cfg.AppSecret)
|
||||
|
||||
// 9. 提交请求
|
||||
url := cfg.URL
|
||||
if cfg.Sandbox && cfg.SandboxURL != "" {
|
||||
url = cfg.SandboxURL
|
||||
}
|
||||
url := wangdianURL(cfg.SandboxURL, cfg.URL)
|
||||
if url == "" {
|
||||
url = "https://api.wangdian.cn/openapi2/purchase_order_push.php"
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user