Files
jx-callback/business/bidding/logistics_Loading.go
邹宗楠 c1e9d7347b 1
2026-03-17 11:47:21 +08:00

243 lines
9.4 KiB
Go

package bidding
import (
"git.rosy.net.cn/baseapi/platformapi/ali_logistics_query"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals"
"time"
)
func LoadingLogistics(paramLogistic []*model.UpdateMaterialLogistic) []error {
var param []*model.UpdateMaterialLogistic
if len(paramLogistic) == 0 || paramLogistic == nil {
param = GetLogisticOrder()
} else {
param = paramLogistic
}
var db = dao.GetDB()
var errList = make([]error, 0, 0)
for _, v := range param {
// 更新订单状态
goodsOrder, err := partner.CurOrderManager.LoadOrder(v.OrderId, model.VendorIDJX)
if err != nil {
errList = append(errList, err)
continue
}
if time.Since(goodsOrder.CreatedAt) >= 3*24*time.Hour {
goodsOrder.Status = model.OrderStatusFinished
goodsOrder.VendorStatus = utils.Int2Str(model.WaybillStatusDelivered)
goodsOrder.StatusTime = time.Now()
goodsOrder.OrderFinishedAt = time.Now()
if _, err := dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus", "StatusTime", "OrderFinishedAt"); err != nil {
errList = append(errList, err)
continue
}
}
}
return nil
// GetLogisticsInfo 免费物流查询资源不可用,暂时不管
//for _, logistics := range param {
// // 获取当前订单物流状态
// statusList, err := orderman.FixedOrderManager.GetLogisticsOrderStatusList(logistics.OrderId, logistics.LogisticId, 9)
// if err != nil {
// errList = append(errList, err)
// continue
// }
//
// // 获取当前订单三方配送物流
// logisticsList, err := api.LogisticsApi.GetLogisticsInfo(logistics.LogisticId)
// if err != nil {
// errList = append(errList, err)
// continue
// }
//
// // 新订单,本地暂无物流信息,全部更新远端物流信息到本地
// if len(logisticsList.Info[0].LogisticsTraceDetailList) == model.NO {
// errList = append(errList, errors.New("运单号[%s]:已经过期/新订单暂无物流推送信息"))
// continue
// }
// var orderStatus = make([]*model.OrderStatus, 0, 0)
// goodsOrderStatus := 0
// for _, v := range logisticsList.Info[0].LogisticsTraceDetailList {
// orderStatusToLocal := &model.OrderStatus{
// VendorOrderID: logisticsList.Info[0].MailNo,
// VendorID: model.VendorIDTotalWl,
// OrderType: model.OrderTypeWaybill,
// RefVendorOrderID: logistics.OrderId,
// RefVendorID: model.VendorIDJX,
// VendorStatus: v.SubLogisticsStatus,
// StatusTime: time.Time{},
// DuplicatedCount: 0,
// Remark: v.Desc,
// ModelTimeInfo: model.ModelTimeInfo{CreatedAt: time.Now(), UpdatedAt: time.Now()},
// }
//
// switch v.SubLogisticsStatus {
// case ali_logistics_query.LogisticsStatusRECEVIE:
// orderStatusToLocal.Status = model.WaybillStatusNew // 新订单
// goodsOrderStatus = model.OrderStatusNew // 新订单
// case ali_logistics_query.LogisticsStatusWAIT_ACCEPT:
// orderStatusToLocal.Status = model.WaybillStatusAccepted // 分配骑手
// goodsOrderStatus = model.OrderStatusAccepted // 拣货完成等待骑手
// case ali_logistics_query.LogisticsStatusACCEPT:
// orderStatusToLocal.Status = model.WaybillStatusCourierArrived // 兼容骑手取货状态
// goodsOrderStatus = model.OrderStatusFinishedPickup
// case ali_logistics_query.LogisticsStatusTRANSPORT, ali_logistics_query.LogisticsStatusSEND_ON, ali_logistics_query.LogisticsStatusARRIVE_CITY, ali_logistics_query.LogisticsStatusDELIVERING:
// orderStatusToLocal.Status = model.WaybillStatusDelivering // 配送中
// goodsOrderStatus = model.OrderStatusDelivering
// case ali_logistics_query.LogisticsStatusAGENT_SIGN, ali_logistics_query.LogisticsStatusSIGN, ali_logistics_query.LogisticsStatusSTA_SIGN:
// orderStatusToLocal.Status = model.WaybillStatusDelivered // 配送结束
// goodsOrderStatus = model.OrderStatusFinished
// default: // 剩余状态全部为异常状态,除非新加状态
// orderStatusToLocal.Status = model.WaybillStatusUnknown // 异常配送
// goodsOrderStatus = model.OrderStatusDeliverFailed // 投递失败
// }
// orderStatusToLocal.StatusTime = utils.Timestamp2Time(v.Time)
// orderStatus = append(orderStatus, orderStatusToLocal)
// }
//
// if len(statusList) == 0 || statusList == nil { // 本地订单状态为空不存在
// for _, v := range orderStatus {
// if err := dao.CreateEntity(db, v); err != nil {
// errList = append(errList, err)
// continue
// }
// }
// } else {
// for _, v := range orderStatus {
// if statusList[len(statusList)-1].StatusTime.Unix() > v.StatusTime.Unix() && checkOrderStatus(statusList[len(statusList)-1].VendorStatus) {
// continue
// }
// if err := dao.CreateEntity(db, v); err != nil {
// errList = append(errList, err)
// continue
// }
// }
// }
//
// // 获取当前订单运单状态
// wayBill, err := dao.GetWaybills(db, logistics.OrderId, nil)
// if err != nil {
// errList = append(errList, err)
// continue
// }
// status := orderStatus[len(orderStatus)-1].Status
// vendorStatus := orderStatus[len(orderStatus)-1].VendorStatus
// statusTime := orderStatus[len(orderStatus)-1].StatusTime
// if len(wayBill) == 0 || wayBill == nil {
// wayBillObj := &model.Waybill{
// VendorWaybillID: logistics.LogisticId,
// WaybillVendorID: model.VendorIDTotalWl,
// VendorOrderID: logistics.OrderId,
// OrderVendorID: model.VendorIDJX,
// CourierName: logisticsList.Info[0].Courier,
// CourierMobile: logisticsList.Info[0].CourierPhone,
// Status: status,
// VendorStatus: vendorStatus,
// ActualFee: logistics.LogisticFee,
// DesiredFee: logistics.LogisticFee,
// DeliveryFlag: model.OrderDeliveryFlagMaskScheduleDisabled,
// WaybillCreatedAt: time.Now(),
// StatusTime: statusTime,
// ModelTimeInfo: model.ModelTimeInfo{CreatedAt: time.Now(), UpdatedAt: time.Now()},
// WaybillFinishedAt: time.Now(),
// }
// if err := dao.CreateEntity(db, wayBillObj); err != nil {
// errList = append(errList, err)
// continue
// }
// } else {
// wayBill[0].UpdatedAt = time.Now()
// wayBill[0].Status = status
// wayBill[0].VendorStatus = vendorStatus
// wayBill[0].StatusTime = statusTime
// wayBill[0].WaybillFinishedAt = time.Now()
// if _, err := dao.UpdateEntity(db, wayBill[0], "Status", "UpdatedAt", "VendorStatus", "StatusTime"); err != nil {
// errList = append(errList, err)
// continue
// }
// }
//
// // 更新订单状态
// goodsOrder, err := partner.CurOrderManager.LoadOrder(logistics.OrderId, model.VendorIDJX)
// if err != nil {
// errList = append(errList, err)
// continue
// }
// goodsOrder.Status = goodsOrderStatus
// goodsOrder.VendorStatus = vendorStatus
// goodsOrder.StatusTime = statusTime
// if orderStatus[len(orderStatus)-1].Status >= model.OrderStatusEndBegin {
// goodsOrder.OrderFinishedAt = time.Now()
// }
// if _, err := dao.UpdateEntity(db, goodsOrder, "Status", "VendorStatus", "StatusTime", "OrderFinishedAt"); err != nil {
// errList = append(errList, err)
// continue
// }
//}
//
//return errList
}
func checkOrderStatus(orderStatus string) bool {
switch orderStatus {
case ali_logistics_query.LogisticsStatusRECEVIE:
return true
case ali_logistics_query.LogisticsStatusWAIT_ACCEPT:
return true
case ali_logistics_query.LogisticsStatusACCEPT:
return true
case ali_logistics_query.LogisticsStatusTRANSPORT, ali_logistics_query.LogisticsStatusSEND_ON, ali_logistics_query.LogisticsStatusARRIVE_CITY, ali_logistics_query.LogisticsStatusDELIVERING:
return true
case ali_logistics_query.LogisticsStatusAGENT_SIGN, ali_logistics_query.LogisticsStatusSIGN, ali_logistics_query.LogisticsStatusSTA_SIGN:
return true
case ali_logistics_query.LogisticsStatusSTA_INBOUND, ali_logistics_query.LogisticsStatusRETURN_SIGN, ali_logistics_query.LogisticsStatusFAILED, ali_logistics_query.LogisticsStatusREFUSE_SIGN, ali_logistics_query.LogisticsStatusDELIVER_ABNORMAL:
return true
case ali_logistics_query.LogisticsStatusRETENTION, ali_logistics_query.LogisticsStatusISSUE, ali_logistics_query.LogisticsStatusRETURN, ali_logistics_query.LogisticsStatusDAMAGE, ali_logistics_query.LogisticsStatusCANCEL_ORDER:
return true
default:
return false
}
}
// GetLogisticOrder 查询未完成的物料订单,更新物流信息
func GetLogisticOrder() []*model.UpdateMaterialLogistic {
var (
timeNow = time.Now()
startTime = timeNow.AddDate(0, -1, 0)
endTime = timeNow
goodsList = make([]*model.GoodsOrder, 0, 0)
)
sql := ` SELECT * FROM goods_order g WHERE g.order_created_at >= ? AND g.order_created_at < ? AND g.store_id = ? AND order_type = ? AND g.status < ? ` // 一个月内状态未完成的订单
sqlParam := []interface{}{
startTime, endTime, "666666", 1, model.OrderStatusEndBegin,
}
if err := dao.GetRows(dao.GetDB(), &goodsList, sql, sqlParam...); err != nil {
globals.SugarLogger.Debugf("loading jx material order err :%s", err)
return nil
}
if len(goodsList) == 0 {
return nil
}
logisticsList := make([]*model.UpdateMaterialLogistic, 0, len(goodsList))
for _, v := range goodsList {
logistics := &model.UpdateMaterialLogistic{
OrderId: v.VendorOrderID,
LogisticId: v.VendorWaybillID,
LogisticFee: v.BaseFreightMoney,
}
logisticsList = append(logisticsList, logistics)
}
return logisticsList
}