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

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