You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.1 KiB
128 lines
3.1 KiB
package kuaidi100
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
jsoniter "github.com/json-iterator/go"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"recook/internal/back"
|
|
"recook/internal/dbc"
|
|
"recook/internal/model/order"
|
|
"recook/tools"
|
|
"strings"
|
|
)
|
|
|
|
type queryExpressParam struct {
|
|
UserID uint `json:"userId"`
|
|
OrderID uint `json:"orderId" validate:"required"`
|
|
}
|
|
|
|
type packet struct {
|
|
PicUrls []string `json:"picUrls"`
|
|
Name string `json:"name"`
|
|
No string `json:"no"`
|
|
Process []process `json:"data"`
|
|
}
|
|
|
|
type process struct {
|
|
Context string `json:"context"`
|
|
Time string `json:"ftime"`
|
|
}
|
|
|
|
const (
|
|
key = "EcrXiVGj6488"
|
|
customer = "8547631AFB44524C4AB3F88557444A5D"
|
|
url = "https://poll.kuaidi100.com/poll/query.do?customer=" + customer
|
|
)
|
|
|
|
func newRequestParam(phone string, code string, no string) string {
|
|
type param struct {
|
|
Com string `json:"com"`
|
|
Num string `json:"num"`
|
|
Phone string `json:"phone"`
|
|
}
|
|
|
|
p := param{
|
|
code,
|
|
no,
|
|
phone,
|
|
}
|
|
|
|
s, _ := jsoniter.Marshal(&p)
|
|
sign := strings.ToUpper(tools.MD5(string(s) + key + customer))
|
|
|
|
return "&sign=" + sign + "¶m=" + string(s)
|
|
}
|
|
|
|
func QueryExpress(c *gin.Context) {
|
|
var p queryExpressParam
|
|
err := tools.ParseParams(&p, c)
|
|
if err != nil {
|
|
back.Fail(c, err.Error())
|
|
return
|
|
}
|
|
|
|
var goodsList order.GoodsDetail
|
|
//dbc.DB.Select("order_id, main_photo_url, express_comp_name, express_comp_code, express_no").Find(&goodsList, "order_id = ?", p.OrderID)//获取了主记录
|
|
//获取这个订单下面的物流记录
|
|
var expressData []order.GoodsExpress
|
|
dbc.DB.Select("order_id, order_goods_id, express_comp_name, express_comp_code, express_no").Find(&expressData, "order_id = ?", p.OrderID) //获取了主记录
|
|
var addr order.Addr
|
|
dbc.DB.Select("mobile").First(&addr, "order_id = ?", p.OrderID) //获取了收货手机号
|
|
|
|
m := map[string]order.GoodsExpress{} //定义了一个集合
|
|
// 计算有几个包裹
|
|
for i, v := range expressData {
|
|
//获取主图
|
|
dbc.DB.Select(" main_photo_url").Find(&goodsList, "id = ?", v.OrderGoodsID)
|
|
expressData[i].MainPhotoURL = goodsList.MainPhotoURL
|
|
if len(v.ExpressNo) > 0 { //发货的数据加入到集合里面,用单号作为下标,对应的内容是详情
|
|
m[v.ExpressNo] = expressData[i]
|
|
}
|
|
|
|
}
|
|
|
|
list := make([]packet, 0, 0) //声明一个二维切片
|
|
for _, v := range m {
|
|
client := &http.Client{}
|
|
request, err := http.NewRequest("POST", url+newRequestParam(addr.Mobile, v.ExpressCompCode, v.ExpressNo), nil)
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
|
|
response, err := client.Do(request)
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
|
|
result, err := ioutil.ReadAll(response.Body)
|
|
if err != nil {
|
|
back.Err(c, err.Error())
|
|
return
|
|
}
|
|
_ = response.Body.Close()
|
|
|
|
var pac packet
|
|
_ = jsoniter.Unmarshal(result, &pac)
|
|
pac.Name = v.ExpressCompName
|
|
pac.No = v.ExpressNo
|
|
|
|
for _, g := range expressData {
|
|
if g.ExpressNo == v.ExpressNo {
|
|
pac.PicUrls = append(pac.PicUrls, g.MainPhotoURL)
|
|
}
|
|
}
|
|
|
|
if len(pac.Process) == 0 {
|
|
log.Println(string(result))
|
|
pac.Process = []process{}
|
|
}
|
|
|
|
list = append(list, pac)
|
|
}
|
|
back.Suc(c, "", list)
|
|
}
|