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

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 + "&param=" + 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)
}