Files
jx-callback/business/controller/order_legacy.go
2018-07-18 22:52:30 +08:00

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
}