gome_refund.go 7.3 KB
package gome

import (
	"context"
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/frame/g"
)

type refundGome struct {
}

var Refund = refundGome{}

type ReturnCountReq struct {
	DeliveryId   string `json:"deliveryId"`
	OuterOrderId string `json:"outerOrderId"`
	SkuItemId    string `json:"skuItemId"`
	MchSkuId     string `json:"mchSkuId"`
}

type ReturnCountRes struct {
	*CommonRes
	Data struct {
		ReturnableQuantity int `json:"returnableQuantity"`
	} `json:"data"`
}
type ServiceTypeReq struct {
	DeliveryId   string `json:"deliveryId"`
	AddrCode     string `json:"addrCode"`
	SkuItemId    string `json:"skuItemId"`
	MchSkuId     string `json:"mchSkuId"`
	OuterOrderId string `json:"outerOrderId"`
}

type ServiceTypeRes struct {
	*CommonRes
	Data struct {
		AfterServiceTypes []struct {
			Code int    `json:"code"`
			Name string `json:"name"`
		} `json:"afterServiceTypes"`
		ReturnWareTypes []struct {
			Code int    `json:"code"`
			Name string `json:"name"`
		} `json:"returnWareTypes"`
	} `json:"data"`
}

type RefundCreateReq struct {
	AfterServiceType     string `json:"afterServiceType"`
	OuterAfterServiceId  string `json:"outerAfterServiceId"`
	SubmitTime           string `json:"submitTime"`
	OriginalOuterOrderId string `json:"originalOuterOrderId"`
	OuterOrderId         string `json:"outerOrderId"`
	OriginalDeliveryId   string `json:"originalDeliveryId"`
	ReturnType           string `json:"returnType"`
	ReturnWareType       string `json:"returnWareType"`
	RefundAmount         string `json:"refundAmount"`
	PickWareInfo         string `json:"pickWareInfo"`
	PickWareTime         string `json:"pickWareTime"`
	Name                 string `json:"name"`
	Phone                string `json:"phone"`
	Address              string `json:"address"`
	AddressCode          string `json:"addressCode"`
	AddressDetail        string `json:"addressDetail"`
	Address1             string `json:"address1"`
	Address2             string `json:"address2"`
	Address3             string `json:"address3"`
	Address4             string `json:"address4"`
	SkuItems             struct {
		OuterSkuItemId    string `json:"outerSkuItemId"`
		OriginalSkuItemId string `json:"originalSkuItemId"`
		MchSkuId          string `json:"mchSkuId"`
		SkuQuantity       string `json:"skuQuantity"`
		SkuName           string `json:"skuName"`
		DealPrice         string `json:"dealPrice"`
	} `json:"skuItems"`
	AfterSaleImages struct {
		ImageInx  string `json:"imageInx"`
		ImageType string `json:"imageType"`
		ImageUrl  string `json:"imageUrl"`
	} `json:"afterSaleImages"`
}

type RefundCreateRes struct {
	*CommonRes
	Data struct {
		AfterServiceId string `json:"afterServiceId"`
	} `json:"data"`
}
type RefundCancelReq struct {
	AfterServiceType string `json:"afterServiceType"`
	OutOrderId       string `json:"outOrderId"`
	CancelTime       string `json:"cancelTime"`
	CancelReasonType string `json:"cancelReasonType"`
	CancelReasonDesc string `json:"cancelReasonDesc"`
}

type RefundAuditResultReq struct {
}

type RefundAuditResultRes struct {
	*CommonRes
	Data struct {
		GomeAfterServiceId string `json:"gomeAfterServiceId"`
		AuditPassed        int    `json:"auditPassed"`
		AuditTime          string `json:"auditTime"`
		RejectedReasonType string `json:"rejectedReasonType"`
		RejectedReasonDesc string `json:"rejectedReasonDesc"`
		ReturnWareType     string `json:"returnWareType"`
		ServiceAddressInfo struct {
			Address string `json:"address"`
			Linkman string `json:"linkman"`
			Phone   string `json:"phone"`
		} `json:"serviceAddressInfo"`
	} `json:"data"`
}
type RefundSendReq struct {
	AfterServiceId      string `json:"afterServiceId"`
	OuterOrderId        string `json:"outerOrderId"`
	DeliveryCompanyCode string `json:"deliveryCompanyCode"`
	DeliveryCompanyName string `json:"deliveryCompanyName"`
	WaybillCode         string `json:"waybillCode"`
}

type RefundStatusRes struct {
	*CommonRes
	Data struct {
		AfterServiceId    string      `json:"afterServiceId"`
		CurrentStatus     string      `json:"currentStatus"`
		CurrentStatusTime interface{} `json:"currentStatusTime"`
		PastStatuses      []struct {
			Status     string `json:"status"`
			StatusTime string `json:"statusTime"`
		} `json:"pastStatuses"`
	} `json:"data"`
}

type RefundLogisticsRes struct {
	*CommonRes
	Data struct {
		AfterServiceId string `json:"afterServiceId"`
		CompanyCode    string `json:"companyCode"`
		CompanyName    string `json:"companyName"`
		CompanyPhone   string `json:"companyPhone"`
		WaybillCode    string `json:"waybillCode"`
		CourierName    string `json:"courierName"`
		CourierPhone   string `json:"courierPhone"`
		Tracks         []struct {
			TrackTime   string `json:"trackTime"`
			Description string `json:"description"`
		} `json:"tracks"`
	} `json:"data"`
}

//ReturnCount 商品可退货数量
func (refundGome) ReturnCount(ctx context.Context, req *ReturnCountReq) (res *ReturnCountRes, err error) {
	method := "alamein.afterSale.read.queryCanReturnCount"

	result, err := server.requestApi(ctx, method, req)
	if err != nil {
		return
	}
	_ = gjson.New(result).Scan(&res)
	return
}

//ServiceType 查询可服务类型及退回方式
func (refundGome) ServiceType(ctx context.Context, req *ServiceTypeReq) (res *ServiceTypeRes, err error) {
	method := "alamein.afterSale.read.queryCanServiceTypeAndReturnType"
	result, err := server.requestApi(ctx, method, req)
	if err != nil {
		return
	}
	_ = gjson.New(result).Scan(&res)
	return
}

//Create 申请
func (refundGome) Create(ctx context.Context, req *RefundCreateReq) (res *RefundCreateRes, err error) {
	method := "alamein.afterSale.write.submit"
	result, err := server.requestApi(ctx, method, req)
	if err != nil {
		return
	}
	_ = gjson.New(result).Scan(&res)
	return
}

//Cancel 取消售后订单
func (refundGome) Cancel(ctx context.Context, req *RefundCancelReq) (res *CommonRes, err error) {
	method := "alamein.afterSale.write.cancel"
	result, err := server.requestApi(ctx, method, req)
	if err != nil {
		return
	}
	_ = gjson.New(result).Scan(&res)
	return
}
func (refundGome) AuditResult(ctx context.Context, refundSn string) (res *RefundAuditResultRes, err error) {
	method := "alamein.afterSale.read.queryAuditResult"

	var req = g.Map{
		"afterServiceId": refundSn,
	}
	result, err := server.requestApi(ctx, method, req)
	if err != nil {
		return
	}
	_ = gjson.New(result).Scan(&res)
	return
}

//Send 顾客邮寄运单信息填写
func (refundGome) Send(ctx context.Context, req *RefundSendReq) (res *RefundSendReq, err error) {
	method := "alamein.afterSale.write.deliveryByCustomer"
	result, err := server.requestApi(ctx, method, req)
	if err != nil {
		return
	}
	_ = gjson.New(result).Scan(&res)
	return
}

//Status 状态查询
func (refundGome) Status(ctx context.Context, refundSn string) (res *RefundStatusRes, err error) {
	method := "alamein.afterSale.read.queryKeyStatus"

	var req = g.Map{
		"afterServiceId": refundSn,
	}
	result, err := server.requestApi(ctx, method, req)
	if err != nil {
		return
	}
	_ = gjson.New(result).Scan(&res)
	return
}

//Logistics 接收售后订单商品验货信息
func (refundGome) Logistics(ctx context.Context, refundSn string) (res *RefundLogisticsRes, err error) {
	method := "alamein.afterSale.read.queryLogisticsTrack"

	var req = g.Map{
		"afterServiceId": refundSn,
	}
	result, err := server.requestApi(ctx, method, req)
	if err != nil {
		return
	}
	_ = gjson.New(result).Scan(&res)
	return
}