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.
201 lines
4.8 KiB
201 lines
4.8 KiB
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
|
|
}
|