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.
212 lines
4.4 KiB
212 lines
4.4 KiB
package jst
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"log"
|
|
"recook/internal/dbc"
|
|
order2 "recook/internal/v2/logic/manage/order"
|
|
"recook/internal/v2/model/gys/goods"
|
|
jst2 "recook/internal/v2/model/jst"
|
|
manage "recook/internal/v2/model/recook/order"
|
|
"recook/tools"
|
|
"strconv"
|
|
)
|
|
|
|
type jst struct {
|
|
Code int `json:"code"`
|
|
Msg string `json:"msg"`
|
|
}
|
|
|
|
var ok = jst{
|
|
0,
|
|
"执行成功",
|
|
}
|
|
|
|
var fail = jst{
|
|
-1,
|
|
"执行失败",
|
|
}
|
|
|
|
type query struct {
|
|
TS string `form:"ts"`
|
|
PartnerID string `form:"partnerid"`
|
|
Method string `form:"method"`
|
|
Sign string `form:"sign"`
|
|
}
|
|
|
|
type InventorySync struct {
|
|
Modified string `json:"modified" binding:"required"`
|
|
Qty uint `json:"qty" binding:"required"`
|
|
SkuID string `json:"sku_id" binding:"required"`
|
|
}
|
|
|
|
type logisticsSync struct {
|
|
Items []struct {
|
|
OuterOiID string `json:"outer_oi_id"`
|
|
Qty int64 `json:"qty"`
|
|
SkuID string `json:"sku_id"`
|
|
SoID string `json:"so_id"`
|
|
} `json:"items"`
|
|
LID string `json:"l_id"`
|
|
LcID string `json:"lc_id"`
|
|
LogisticsCompany string `json:"logistics_company"`
|
|
OID uint `json:"o_id"`
|
|
SendDate string `json:"send_date"`
|
|
SoID string `json:"so_id"`
|
|
}
|
|
|
|
func (l *logisticsSync) String() string {
|
|
b, err := json.Marshal(*l)
|
|
if err != nil {
|
|
return fmt.Sprintf("%+v", *l)
|
|
}
|
|
var out bytes.Buffer
|
|
err = json.Indent(&out, b, "", " ")
|
|
if err != nil {
|
|
return fmt.Sprintf("%+v", *l)
|
|
}
|
|
return out.String()
|
|
}
|
|
|
|
func validate(q *query, js *jst2.ShopModel) bool {
|
|
r := tools.MD5(q.Method+js.PartnerID+"ts"+q.TS+js.PartnerKey) == q.Sign
|
|
if !r {
|
|
log.Printf("参数校验失败: %+v, %+v\n", q, js)
|
|
}
|
|
return r
|
|
}
|
|
|
|
//CallBack 聚水潭消息推送callback.
|
|
func CallBack(c *gin.Context) {
|
|
fmt.Printf("接受的URL:%v\n", c.Request.URL.String())
|
|
var q = c.DefaultQuery("method", "null")
|
|
//if e := c.ShouldBindQuery(&q); e != nil {
|
|
// log.Println(e.Error())
|
|
// c.JSON(400, fail)
|
|
// return
|
|
//}
|
|
log.Printf("方法是%+v", q)
|
|
|
|
switch q {
|
|
case "logistics.upload":
|
|
var o logisticsSync
|
|
if e := c.ShouldBindJSON(&o); e != nil {
|
|
log.Println("bind logistics data error")
|
|
c.JSON(400, fail)
|
|
return
|
|
}
|
|
log.Printf("logistics jst_back: %+v\n", o.String())
|
|
handleLogisticsSyncCallback(&o)
|
|
case "inventory.upload":
|
|
var o []InventorySync
|
|
if e := c.ShouldBindJSON(&o); e != nil {
|
|
log.Println("bind inventory data error")
|
|
c.JSON(400, fail)
|
|
return
|
|
}
|
|
log.Printf("inventory jst_back: %+v\n", o)
|
|
handleInventorySyncCallback(o)
|
|
default:
|
|
|
|
}
|
|
c.JSON(200, ok)
|
|
}
|
|
|
|
//物流同步,消息回传
|
|
func handleLogisticsSyncCallback(o *logisticsSync) {
|
|
ogi, err := strconv.ParseInt(o.SoID, 10, 64)
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
//构建聚水潭,数据库查询店铺资料
|
|
j := &jst2.OrderModel{}
|
|
jo := j.FindByOrderID(uint(ogi))
|
|
|
|
jsm := &jst2.ShopModel{}
|
|
js := jsm.FindByID(jo.JSTShopID)
|
|
|
|
if js.ID == 0 {
|
|
return
|
|
}
|
|
|
|
og := &manage.RecookOrderGoodsDetailModel{}
|
|
data := og.FindByOrderId(jo.OrderID)
|
|
if len(data) == 0 {
|
|
return
|
|
}
|
|
//遍历聚水潭订单数据data
|
|
for _, v := range data {
|
|
|
|
for _, k := range o.Items {
|
|
if v.SkuCode == k.SkuID { //比较sku_code,相同则进行发货
|
|
je := jst2.ExpressModel{}
|
|
je = je.FindByLcID(o.LcID)
|
|
e := []order2.ExpressInfo{
|
|
{
|
|
o.LogisticsCompany,
|
|
o.LID,
|
|
},
|
|
}
|
|
if je.Id > 0 {
|
|
e = []order2.ExpressInfo{
|
|
{
|
|
je.Name,
|
|
o.LID,
|
|
},
|
|
}
|
|
}
|
|
//查询该子订单是否有过发货记录,有记录则把快递数据叠加
|
|
var ex []manage.RecookOrderGoodsExpressModel
|
|
dbc.DB.Table((&manage.RecookOrderGoodsExpressModel{}).TableName()).Find(&ex, "order_goods_id=?", v.Id)
|
|
if len(ex) > 0 {
|
|
for _, model := range ex {
|
|
e = append(e, order2.ExpressInfo{
|
|
ExpressCompName: model.ExpressCompName,
|
|
ExpressNo: model.ExpressNo,
|
|
})
|
|
}
|
|
|
|
}
|
|
fmt.Println(e)
|
|
_ = order2.Expresslogic.Express(v.VendorId, "jst", v, e)
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
//原代码
|
|
//je := jst2.ExpressModel{}
|
|
//je = je.FindByLcID(o.LcID)
|
|
//e := []order2.ExpressInfo{
|
|
// {
|
|
// o.LogisticsCompany,
|
|
// o.LID,
|
|
// },
|
|
//}
|
|
//if je.Id > 0 {
|
|
// e = []order2.ExpressInfo{
|
|
// {
|
|
// je.Name,
|
|
// o.LID,
|
|
// },
|
|
// }
|
|
//}
|
|
//for _, v := range data {
|
|
// _ = order2.Expresslogic.Express(v.VendorId, "jst", v, e)
|
|
//}
|
|
|
|
}
|
|
|
|
func handleInventorySyncCallback(o []InventorySync) {
|
|
|
|
for _, v := range o {
|
|
gg := &goods.GysGoodsSkuModel{}
|
|
gg.SetInventoryByCode(v.SkuID, v.Qty)
|
|
}
|
|
|
|
}
|