280 lines
9.5 KiB
Go
280 lines
9.5 KiB
Go
package controller
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"git.rosy.net.cn/baseapi"
|
|
"git.rosy.net.cn/baseapi/utils"
|
|
"git.rosy.net.cn/jx-callback/business/jxutils"
|
|
"git.rosy.net.cn/jx-callback/business/legacyorder"
|
|
"git.rosy.net.cn/jx-callback/business/model"
|
|
"git.rosy.net.cn/jx-callback/globals"
|
|
"github.com/astaxie/beego/orm"
|
|
)
|
|
|
|
// legacy
|
|
const (
|
|
JX_ORDER_STATUS_WAIT_TO_ACCEPT = -1 //未接单(41000)
|
|
JX_ORDER_STATUS_PICKING = 0 //拣货(32000->或定时召唤达达)
|
|
JX_ORDER_STATUS_WAIT_FOR_DELIVERY = 1 //待配送(2->或转商家自送)
|
|
JX_ORDER_STATUS_DELIVERING = 2 //配送中(33040)
|
|
JX_ORDER_STATUS_DELIVERY_DONE = 3 //已完成(33060->90000)
|
|
JX_ORDER_STATUS_EXCEPTION_APPLY = 4 //异常申请
|
|
JX_ORDER_STATUS_NOT_DELIVER = 5 //不配送
|
|
JX_ORDER_STATUS_AFTER_SALE = 6 //售后单
|
|
JX_ORDER_STATUS_CANCEL = 7 //已取消
|
|
JX_ORDER_STATUS_ADJUST = 8 //调整单
|
|
|
|
JX_DELIVERY_STATUS_NOT_DELIVERY = -1 //尚未申请配送
|
|
JX_DELIVERY_STATUS_WAIT_TO_GRAB = 0 //等待抢单
|
|
JX_DELIVERY_STATUS_GRAB_DONE = 1 //已抢单
|
|
JX_DELIVERY_STATUS_FAIL_TO_GET_GOODS = 2 //取货失败
|
|
JX_DELIVERY_STATUS_FAIL_TO_GET_GOODS_WAIT_TO_CONFIRM = 3 //取货失败待审核
|
|
JX_DELIVERY_STATUS_GET_GOODS_DONE = 4 //取货完成
|
|
JX_DELIVERY_STATUS_DELIVERY_FAIL = 5 //投递失败
|
|
JX_DELIVERY_STATUS_DELIVERY_DONE = 6 //已完成
|
|
JX_DELIVERY_STATUS_DELIVERY_CANCEL = 7 //已取消
|
|
)
|
|
|
|
const (
|
|
DD_CARRIER_NO = "9966"
|
|
SELLER_CARRIER_NO = "2938"
|
|
MTPS_CARRIER_NO = "1123"
|
|
DDDELIVERY_CARRIER_NO = "3465"
|
|
EME_SELF_CARRIER_NO = "9999"
|
|
)
|
|
|
|
var (
|
|
VENDOR_ID2CARRIER_NO = map[int]string{
|
|
model.VendorIDJD: DD_CARRIER_NO,
|
|
model.VendorIDELM: EME_SELF_CARRIER_NO,
|
|
model.VendorIDDada: DDDELIVERY_CARRIER_NO,
|
|
model.VendorIDMTPS: MTPS_CARRIER_NO,
|
|
}
|
|
|
|
CARRIERS_NAMES = map[string]string{
|
|
DD_CARRIER_NO: "达达专送",
|
|
SELLER_CARRIER_NO: "门店自送",
|
|
MTPS_CARRIER_NO: "美团配送",
|
|
DDDELIVERY_CARRIER_NO: "达达众包",
|
|
EME_SELF_CARRIER_NO: "饿了么蜂鸟",
|
|
}
|
|
|
|
BUSINESS_TAGS_MAP = map[string]string{
|
|
"one_dingshida": "0",
|
|
"dj_aging_nextday": "1",
|
|
"dj_aging_immediately": "2",
|
|
"lengcang": "3",
|
|
"lengdong": "3",
|
|
}
|
|
)
|
|
|
|
func legacyMapCoordinateType(coordType int) (jxorderCoordType int) {
|
|
if coordType == model.CoordinateTypeMars {
|
|
return 2
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func legacyMapOrderStatus(orderStatus int) (retVal int8) {
|
|
switch orderStatus {
|
|
case model.OrderStatusNew:
|
|
retVal = JX_ORDER_STATUS_WAIT_TO_ACCEPT
|
|
case model.OrderStatusAccepted:
|
|
retVal = JX_ORDER_STATUS_PICKING
|
|
case model.OrderStatusDelivering:
|
|
retVal = JX_ORDER_STATUS_DELIVERING
|
|
case model.OrderStatusDelivered:
|
|
retVal = JX_ORDER_STATUS_DELIVERY_DONE
|
|
case model.OrderStatusAdjust:
|
|
retVal = JX_ORDER_STATUS_ADJUST
|
|
case model.OrderStatusApplyCancel:
|
|
retVal = JX_ORDER_STATUS_EXCEPTION_APPLY
|
|
case model.OrderStatusCanceled:
|
|
retVal = JX_ORDER_STATUS_CANCEL
|
|
}
|
|
return retVal
|
|
}
|
|
|
|
func legacyMapWaybillStatus(status int) (retVal int8) {
|
|
switch status {
|
|
case model.WaybillStatusNew:
|
|
retVal = JX_DELIVERY_STATUS_WAIT_TO_GRAB
|
|
case model.WaybillStatusAccepted:
|
|
retVal = JX_DELIVERY_STATUS_GRAB_DONE
|
|
case model.WaybillStatusCourierArrived:
|
|
retVal = JX_DELIVERY_STATUS_GET_GOODS_DONE
|
|
case model.WaybillStatusDelivering:
|
|
retVal = JX_DELIVERY_STATUS_GET_GOODS_DONE
|
|
case model.WaybillStatusDelivered:
|
|
retVal = JX_DELIVERY_STATUS_DELIVERY_DONE
|
|
case model.WaybillStatusCanceled:
|
|
retVal = JX_DELIVERY_STATUS_DELIVERY_CANCEL
|
|
case model.WaybillStatusFailed:
|
|
retVal = JX_DELIVERY_STATUS_DELIVERY_FAIL
|
|
}
|
|
return retVal
|
|
}
|
|
|
|
func (c *OrderController) legacyWriteJxOrder(order *model.GoodsOrder, db orm.Ormer, isDelFirst bool) (err error) {
|
|
var result map[string]interface{}
|
|
businessTags := ""
|
|
if order.VendorID == model.VendorIDJD && utils.UnmarshalUseNumber([]byte(order.OriginalData), &result) == nil {
|
|
tagList := strings.Split(result["businessTag"].(string), ";")
|
|
list := []string{}
|
|
for _, v := range tagList {
|
|
if tag, ok := BUSINESS_TAGS_MAP[v]; ok {
|
|
list = append(list, tag)
|
|
}
|
|
}
|
|
businessTags = strings.Join(list, "|") + "|"
|
|
}
|
|
|
|
db.Begin()
|
|
if isDelFirst {
|
|
db.Raw("DELETE FROM jxorder2 WHERE order_id = ?", utils.Str2Int64(order.VendorOrderID))
|
|
db.Raw("DELETE FROM jxordersku2 WHERE order_id = ?", utils.Str2Int64(order.VendorOrderID))
|
|
}
|
|
|
|
jxorder := &legacyorder.Jxorder2{
|
|
VenderId: int8(order.VendorID),
|
|
OrderId: utils.Str2Int64(order.VendorOrderID),
|
|
JxStoreId: utils.Int2Str(jxutils.GetJxStoreIDFromOrder(order)),
|
|
JxStoreName: order.StoreName,
|
|
OrderNum: order.OrderSeq,
|
|
OrderStatus: legacyMapOrderStatus(order.Status),
|
|
OrderStatusTime: utils.Time2Str(order.OrderCreatedAt),
|
|
BusinessTag: businessTags,
|
|
SkuCount: order.SkuCount,
|
|
OrderBuyerRemark: order.BuyerComment,
|
|
BuyerFullName: order.ConsigneeName,
|
|
BuyerFullAddress: order.ConsigneeAddress,
|
|
BuyerMobile: order.ConsigneeMobile,
|
|
BuyerCoordType: legacyMapCoordinateType(order.CoordinateType),
|
|
BuyerLng: IntCoordinate2Standard(order.ConsigneeLng),
|
|
BuyerLat: IntCoordinate2Standard(order.ConsigneeLat),
|
|
CityName: "all",
|
|
OrderStartTime: utils.Time2Str(order.OrderCreatedAt),
|
|
JdStoreId: order.VendorStoreID,
|
|
// DeliveryPackageWeight: float64(order.Weight) / 1000,
|
|
}
|
|
|
|
if order.ExpectedDeliveredTime.Sub(utils.DefaultTimeValue) > 0 {
|
|
jxorder.OrderPreEndDelivTime = utils.Time2Str(order.ExpectedDeliveredTime)
|
|
}
|
|
|
|
_, err = db.Insert(jxorder)
|
|
if err != nil {
|
|
db.Rollback()
|
|
globals.SugarLogger.Infof("insert jxorder error:%v", err)
|
|
return err
|
|
}
|
|
sql := "INSERT INTO jxordersku2(vender_id, order_id, jx_sku_id, sku_name, jx_store_id, sku_price, sku_count, is_gift, promotion_type, sku_plat_discount, sku_vender_discount, sku_img) VALUES"
|
|
params := []interface{}{}
|
|
for _, sku := range order.Skus {
|
|
sql += "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?),"
|
|
params = append(params, sku.VendorID, sku.VendorOrderID, sku.JxSkuID, sku.SkuName, jxutils.GetJxStoreIDFromOrder(order), sku.SalePrice, sku.Count, sku.SkuType, sku.PromotionType, 0, 0, "")
|
|
}
|
|
sql = sql[:len(sql)-1] + ";"
|
|
if _, err = db.Raw(sql, params...).Exec(); err != nil {
|
|
db.Rollback()
|
|
baseapi.SugarLogger.Infof("insert jxordersku error:%v", err)
|
|
} else {
|
|
db.Commit()
|
|
vendorOrderID := utils.Str2Int64(order.VendorOrderID)
|
|
utils.CallFuncLogError(func() error {
|
|
_, err = db.Raw(`
|
|
UPDATE jxorder2 t1
|
|
JOIN jxstore t2 ON t2.storeid = t1.jx_store_id
|
|
SET t1.store_lng = t2.lng,
|
|
t1.store_lat = t2.lat
|
|
WHERE t1.order_id = ?;
|
|
`, vendorOrderID /*, vendorOrderID*/).Exec()
|
|
return err
|
|
}, "update jxorder")
|
|
|
|
utils.CallFuncLogError(func() error {
|
|
_, err = db.Raw(`
|
|
UPDATE jxordersku2 t1
|
|
JOIN jx_sku t2 ON t2.id = t1.jx_sku_id
|
|
JOIN jx_sku_name t3 ON t3.id = t2.nameid
|
|
SET t1.sku_img = t3.img
|
|
WHERE t1.order_id = ?;
|
|
`, vendorOrderID /*, vendorOrderID*/).Exec()
|
|
return err
|
|
}, "update jxordersku")
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (c *OrderController) legacyJxOrderStatusChanged(status *model.OrderStatus, db orm.Ormer) (err error) {
|
|
if db == nil {
|
|
db = orm.NewOrm()
|
|
}
|
|
jxorder := &legacyorder.Jxorder2{
|
|
OrderId: utils.Str2Int64(status.VendorOrderID),
|
|
}
|
|
if err = db.Read(jxorder, "OrderId"); err == nil {
|
|
utils.CallFuncLogError(func() error {
|
|
jxorder.OrderStatus = legacyMapOrderStatus(status.Status)
|
|
jxorder.OrderStatusTime = utils.Time2Str(status.StatusTime)
|
|
updateFields := []string{
|
|
"OrderStatus",
|
|
"OrderStatusTime",
|
|
}
|
|
if status.Status >= model.OrderStatusEndBegin {
|
|
jxorder.DeliveryFinishTime = utils.Time2Str(status.StatusTime)
|
|
updateFields = append(updateFields, "DeliveryFinishTime")
|
|
}
|
|
_, err = db.Update(jxorder, updateFields...)
|
|
return err
|
|
}, "legacyJxOrderStatusChanged")
|
|
} else {
|
|
globals.SugarLogger.Infof("read legacyJxOrder error:%v, orderID:%d", err, jxorder.OrderId)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (c *WaybillController) legacyWaybillStatusChanged(bill *model.Waybill, db orm.Ormer) (err error) {
|
|
if db == nil {
|
|
db = orm.NewOrm()
|
|
}
|
|
jxorder := &legacyorder.Jxorder2{
|
|
OrderId: utils.Str2Int64(bill.VendorOrderID),
|
|
}
|
|
if err = db.Read(jxorder, "OrderId"); err == nil {
|
|
utils.CallFuncLogError(func() error {
|
|
updateFields := []string{
|
|
"DeliveryCarrierNo",
|
|
"DeliveryCarrierName",
|
|
"DeliveryManNo",
|
|
"DeliveryManName",
|
|
"DeliveryManPhone",
|
|
"DeliveryBillNo",
|
|
"DeliveryStatus",
|
|
}
|
|
// jxorder.DeliveryPackageWeight
|
|
jxorder.DeliveryCarrierNo = VENDOR_ID2CARRIER_NO[bill.WaybillVendorID]
|
|
jxorder.DeliveryCarrierName = CARRIERS_NAMES[jxorder.DeliveryCarrierNo]
|
|
jxorder.DeliveryManNo = bill.CourierMobile
|
|
jxorder.DeliveryManName = bill.CourierName
|
|
jxorder.DeliveryManPhone = bill.CourierMobile
|
|
jxorder.DeliveryBillNo = bill.VendorWaybillID
|
|
jxorder.DeliveryStatus = legacyMapWaybillStatus(bill.Status)
|
|
// jxorder.DeliveryConfirmTime
|
|
if bill.Status == model.WaybillStatusNew {
|
|
updateFields = append(updateFields, "DeliveryStartTime")
|
|
jxorder.DeliveryStartTime = utils.Time2Str(bill.WaybillCreatedAt)
|
|
} else if bill.Status >= model.WaybillStatusEndBegin {
|
|
jxorder.DeliveryFinishTime = utils.Time2Str(bill.WaybillCreatedAt)
|
|
updateFields = append(updateFields, "DeliveryFinishTime")
|
|
}
|
|
_, err = db.Update(jxorder, updateFields...)
|
|
return err
|
|
}, "legacyJxOrderStatusChanged")
|
|
} else {
|
|
globals.SugarLogger.Infof("read legacyJxOrder error:%v, orderID:%d", err, jxorder.OrderId)
|
|
}
|
|
return err
|
|
}
|