package order import ( "git.oa00.com/go/mysql" "github.com/gin-gonic/gin" "github.com/golangkit/formatime" "github.com/json-iterator/go" "log" "recook/internal/back" "recook/internal/dbc" "recook/internal/model/aftersales" "recook/internal/model/official" "recook/internal/model/order" "recook/internal/service" "recook/internal/v2/hook" "recook/internal/v2/model/recook/after" "recook/tools" "strings" ) type queryExpressParam struct { OrderID uint `json:"orderId" validate:"required"` } const ( key = "EcrXiVGj6488" customer = "8547631AFB44524C4AB3F88557444A5D" url = "https://poll.kuaidi100.com/poll/query.do" ) 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 "customer=" + customer + "&sign=" + sign + "¶m=" + string(s) } func QueryPackage(c *gin.Context) { var p queryExpressParam err := tools.Params(&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 addr order.Addr dbc.DB.Select("mobile").First(&addr, "order_id = ?", p.OrderID) var goodsExpress []order.GoodsExpress dbc.DB.Select("order_id, express_comp_name, express_comp_code, express_no").Find(&goodsExpress, "order_goods_id = ?", p.OrderID) m := map[string]order.GoodsExpress{} // 计算有几个包裹 for i, v := range goodsExpress { if len(v.ExpressNo) > 0 { m[v.ExpressNo] = goodsExpress[i] } } list := make([]service.Packet, 0, 0) for _, v := range m { var pac service.Packet pac, err := service.QueryPackage(addr.Mobile, v.ExpressCompCode, v.ExpressNo) if err != nil { back.Err(c, err.Error()) return } pac.Name = v.ExpressCompName pac.No = v.ExpressNo for _, g := range goodsList { if g.ExpressNo == v.ExpressNo { pac.PicUrls = append(pac.PicUrls, g.MainPhotoURL) } } if len(pac.Process) == 0 { log.Println(pac) pac.Process = []service.Process{} } list = append(list, pac) } back.Suc(c, "", list) } type QueryAfterExpress struct { AfterSaleOrderID uint `json:"afterSaleOrderID"` } type QueryAfterClos struct { AfterSaleOrderID uint `json:"afterSaleOrderID"` Img []ImgList `json:"img"` DetailInfo string `json:"detailInfo"` } type ImgList struct { Url string `json:"url"` } func QueryAfterSalesGoodscolors(c *gin.Context) { var p QueryAfterClos if err := tools.Params(&p, c); err != nil { back.Fail(c, err.Error()) return } //p.AfterSaleOrderID=2136 //p.DetailInfo="" var afterSaleOrder after.RecookAfterSalesGoodsModel afterSaleOrder.Id = p.AfterSaleOrderID if err := dbc.DB.Find(&afterSaleOrder).Error; err != nil { back.Fail(c, err.Error()) return } var goodsDetail order.GoodsDetail if err := dbc.DB.First(&goodsDetail, afterSaleOrder.OrderGoodsId).Error; err != nil { back.Err(c, err.Error()) return } tx := mysql.Db.Begin() if err := tx.Model(&afterSaleOrder).Updates(aftersales.Goods{ IsClosed: 1, ReturnStatus: 6, RejectReason: "售后被关闭", FinishTime: formatime.NewSecondNow(), }).Error; err != nil { tx.Rollback() back.Err(c, err.Error()) return } for _, _info := range p.Img { if err := tx.Create(&aftersales.GoodsImg{ Url: _info.Url, AsID: afterSaleOrder.Id, }).Error; err != nil { back.Err(c, err.Error()) tx.Rollback() return } } if err := hook.AfterHook.Close(&afterSaleOrder); err != nil { back.Err(c, err.Error()) tx.Rollback() return } if err := tx.Model(&goodsDetail).Updates(map[string]interface{}{ "ass_type": 0, "is_closed": 1, "detail_info": p.DetailInfo, }).Error; err != nil { tx.Rollback() back.Err(c, err.Error()) return } tx.Commit() back.Suc(c, "", &goodsDetail) } // 售后退货的物流信息 func QueryAfterSalesExpress(c *gin.Context) { var p QueryAfterExpress if err := tools.Params(&p, c); err != nil { back.Fail(c, err.Error()) return } var afterSaleOrder aftersales.Goods afterSaleOrder.ID = p.AfterSaleOrderID if err := dbc.DB.Find(&afterSaleOrder).Error; err != nil { back.Fail(c, err.Error()) return } // todo 这里有个坑点,现在的涉及以后可能会引发查不到快递,有可能是因为收获人的手机变了 在recook_official_return_address表中 var addr official.ReturnAddress dbc.DB.Last(&addr) pac, err := service.QueryPackage(addr.Mobile, afterSaleOrder.ExpressCompCode, afterSaleOrder.ExpressNo) if err != nil { back.Fail(c, err.Error()) return } back.Suc(c, "查询成功", &pac) return }