Merge branch 'jdshop' of https://e.coding.net/rosydev/jx-callback into jdshop

This commit is contained in:
richboo111
2023-05-05 14:48:58 +08:00
3 changed files with 106 additions and 41 deletions

View File

@@ -230,7 +230,7 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s
) )
waybills, _ := dao.GetWaybills(db, order.VendorOrderID) waybills, _ := dao.GetWaybills(db, order.VendorOrderID)
//美团的订单如果是同意全部退款,要取消所有三方运单并停止调度 //美团的订单如果是同意全部退款,要取消所有三方运单并停止调度
if order.VendorID == model.VendorIDMTWM || order.VendorID == model.VendorIDJX { if order.VendorID == model.VendorIDMTWM || order.VendorID == model.VendorIDJX || order.VendorID == model.VendorIDEBAI {
var ( var (
afsCount, orderCount int afsCount, orderCount int
) )
@@ -255,6 +255,16 @@ func (c *BaseScheduler) AgreeOrRefuseRefund(ctx *jxcontext.Context, afsOrderID s
order.VendorStatus = utils.Int2Str(model.OrderStatusCanceled) order.VendorStatus = utils.Int2Str(model.OrderStatusCanceled)
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag", "Status", "VendorStatus"}) partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag", "Status", "VendorStatus"})
} }
if afsCount == orderCount && order.VendorID == model.VendorIDEBAI {
order.DeliveryFlag |= model.OrderDeliveryFlagMaskScheduleDisabled
order.Status = model.OrderStatusCanceled
order.VendorStatus = "10" // 饿百取消订单
partner.CurOrderManager.UpdateOrderFields(order, []string{"DeliveryFlag", "Status", "VendorStatus"})
for _, v := range waybills {
c.CancelWaybill(v, partner.CancelWaybillReasonOther, partner.CancelWaybillReasonStrActive)
}
}
} }
if order.EarningType == model.EarningTypePoints { if order.EarningType == model.EarningTypePoints {
var ( var (

View File

@@ -222,9 +222,9 @@ func Init() {
// 每天更新美团门当的结算信息和配送费等等 // 每天更新美团门当的结算信息和配送费等等
ScheduleTimerFunc("LoadingStoreOrderSettleAmount", func() { ScheduleTimerFunc("LoadingStoreOrderSettleAmount", func() {
// delivery.LoadingStoreOrderSettleAmount(0, 0, nil) delivery.LoadingStoreOrderSettleAmount(0, 0, nil)
}, []string{ }, []string{
"04:50:00", "19:50:00",
}) })
// 定时任务更新昨天的都要商品和本地商品id的映射关系 // 定时任务更新昨天的都要商品和本地商品id的映射关系

View File

@@ -20,6 +20,33 @@ import (
"git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals"
) )
var (
// 换成京西结算账号
jxSettleIdMap = map[int64]bool{
// 菜市
7030017: true,
7974502: true,
100639968: true,
100715370: true,
100822700: true,
101093797: true,
102715080: true,
102114997: true,
102641826: true,
102651220: true,
// 果园啊
6572945: true,
6772759: true,
101968432: true,
102101411: true,
102176700: true,
102369597: true,
102416681: true,
102924441: true,
103376926: true,
}
)
// 订单骑手信息推送:将获取到的三方配送订单,且订单状态为配送中的订单,将配送人员的信息返回给订单方 // 订单骑手信息推送:将获取到的三方配送订单,且订单状态为配送中的订单,将配送人员的信息返回给订单方
// 该方法为定时任务,没五分钟推送一次订单消息,订单状态发生变化时 // 该方法为定时任务,没五分钟推送一次订单消息,订单状态发生变化时
//配送状态code如下提供配送状态枚举值 //配送状态code如下提供配送状态枚举值
@@ -62,6 +89,12 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
if orderId == "" && v.VendorID == model.VendorIDDD { // 抖音门店订单除了三方配送回调时推送,不在主动推送配送消息 if orderId == "" && v.VendorID == model.VendorIDDD { // 抖音门店订单除了三方配送回调时推送,不在主动推送配送消息
continue continue
} }
// 平台自配送
if v.WaybillVendorID == model.YES {
continue
}
if orderId == "" { // 订单id为空是,是定时轮询操作,不做此状态 if orderId == "" { // 订单id为空是,是定时轮询操作,不做此状态
waybillList, _ := dao.GetWaybills(dao.GetDB(), v.VendorOrderID) waybillList, _ := dao.GetWaybills(dao.GetDB(), v.VendorOrderID)
if len(waybillList) > 0 && waybillList[0].Status > model.WaybillStatusEndBegin { if len(waybillList) > 0 && waybillList[0].Status > model.WaybillStatusEndBegin {
@@ -87,16 +120,11 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
} }
} }
if riderInfo == nil || wayBillStatus == model.OrderStatusNew || wayBillStatus == model.OrderStatusCanceled || (riderInfo.CourierName == "" && v.WaybillVendorID == -1 && v.DeliveryType == "store") { // 真商家自送 if wayBillStatus == model.OrderStatusNew || wayBillStatus == model.OrderStatusCanceled || (v.WaybillVendorID == -1 && v.DeliveryType == "store") { // 真商家自送
riderInfo.OrderId = v.VendorOrderID riderInfo.OrderId = v.VendorOrderID
riderInfo.CourierName = "门店老板" riderInfo.CourierName = "门店老板"
riderInfo.CourierPhone = "18048531223"
riderInfo.LogisticsProviderCode = "10017" riderInfo.LogisticsProviderCode = "10017"
riderInfo.LogisticsStatus = v.Status riderInfo.LogisticsStatus = v.Status
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), v.JxStoreID, 0, "")
if err != nil {
riderInfo.CourierPhone = storeDetail.Tel1
}
} }
switch riderInfo.LogisticsStatus { switch riderInfo.LogisticsStatus {
@@ -104,7 +132,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
riderInfo.LogisticsStatus = 0 riderInfo.LogisticsStatus = 0
riderInfo.OpCode = tiktok_api.TiktokLogisticsStatusCALLRIDER riderInfo.OpCode = tiktok_api.TiktokLogisticsStatusCALLRIDER
case 12: // 骑手接单 case 12: // 骑手接单
riderInfo.LogisticsStatus = 12 riderInfo.LogisticsStatus = 10
riderInfo.OpCode = tiktok_api.TiktokLogisticsORDERRECEIVED riderInfo.OpCode = tiktok_api.TiktokLogisticsORDERRECEIVED
case 15: // 到店 case 15: // 到店
riderInfo.LogisticsStatus = 15 riderInfo.LogisticsStatus = 15
@@ -136,13 +164,27 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
if riderInfo.Latitude == "" { if riderInfo.Latitude == "" {
riderInfo.Latitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLat) / 1000000) riderInfo.Latitude = utils.Float64ToStr(utils.Int2Float64(v.ConsigneeLat) / 1000000)
} }
if riderInfo.CourierPhone == "" {
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), v.JxStoreID, 0, "")
if err != nil {
riderInfo.CourierPhone = storeDetail.Tel1
}
riderInfo.CourierName = "老板"
}
if riderInfo.CourierPhone == "" {
riderInfo.CourierName = "石锋"
riderInfo.CourierPhone = "18048531223"
}
if riderInfo.ThirdCarrierOrderId == "" {
riderInfo.ThirdCarrierOrderId = riderInfo.OrderId + "_fake"
}
// 目前只推送美团骑手信息 // 目前只推送美团骑手信息
switch v.VendorID { switch v.VendorID {
case model.VendorIDMTWM: // 美团订单 case model.VendorIDMTWM: // 美团订单
paramsMap := utils.Struct2Map(riderInfo, "", true)
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil { if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, paramsMap); err != nil { if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, utils.Struct2Map(riderInfo, "", true)); err != nil {
globals.SugarLogger.Errorf("Error pushing meituan rider information :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err) globals.SugarLogger.Errorf("Error pushing meituan rider information :%s--%s--%v", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
} }
} }
case model.VendorIDELM: // 饿了么 case model.VendorIDELM: // 饿了么
@@ -162,7 +204,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
case model.VendorIDDD: // 抖店小时达 case model.VendorIDDD: // 抖店小时达
continue continue
default: default:
globals.SugarLogger.Errorf("Order source error, non system order") globals.SugarLogger.Errorf("Order source error, non system order: %s", v.VendorOrderID)
continue continue
} }
} }
@@ -368,7 +410,7 @@ func LoadingStoreOrderSettleAmount(startTime, endTime int64, jxStoreId []int) er
var ( var (
db = dao.GetDB() db = dao.GetDB()
now = time.Now() now = time.Now()
from = time.Date(now.Year(), now.Month(), now.Day()-2, 0, 0, 0, 0, time.Local).Unix() from = time.Date(now.Year(), now.Month(), now.Day()-4, 0, 0, 0, 0, time.Local).Unix()
to = time.Date(now.Year(), now.Month(), now.Day()-1, 23, 59, 59, 59, time.Local).Unix() to = time.Date(now.Year(), now.Month(), now.Day()-1, 23, 59, 59, 59, time.Local).Unix()
) )
@@ -376,45 +418,58 @@ func LoadingStoreOrderSettleAmount(startTime, endTime int64, jxStoreId []int) er
from = startTime from = startTime
to = endTime to = endTime
} }
storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDMTWM}, jxStoreId, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, model.StoreStatusAll, 0, "", "", "") storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDMTWM}, jxStoreId, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, model.StoreStatusAll, model.StoreIsSyncAll, "", "", "")
if err != nil || len(storeMapList) == model.NO { if err != nil || len(storeMapList) == model.NO {
globals.SugarLogger.Errorf("获取美团门店列表异常: %v", err) globals.SugarLogger.Errorf("获取美团门店列表异常: %v", err)
return err return err
} }
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeListValue := batchItemList[0].([]*model.StoreMap) storeListValue := batchItemList[0].(*model.StoreMap)
for _, v := range storeListValue { billListParam := &mtwmapi.Bill{
storeOrder, err := mtwm.GetAPI(v.VendorOrgCode, v.StoreID, v.VendorStoreID).GetStoreBillList(&mtwmapi.Bill{ AppPoiCode: storeListValue.VendorStoreID,
AppPoiCode: v.VendorStoreID, StartDate: from,
StartDate: from, EndDate: to,
EndDate: to, Offset: 0,
Offset: 0, Limit: 200,
Limit: 200, }
}) storeOrder, settleId, err := mtwm.GetAPI(storeListValue.VendorOrgCode, storeListValue.StoreID, storeListValue.VendorStoreID).GetStoreBillList(billListParam)
if err != nil { if err != nil {
return nil, err globals.SugarLogger.Debugf("GetStoreBillList err : %v", err)
return nil, err
}
// 如果收款账户为京西的收款账户,则此门店不是服务商(否则是服务商,使用门店发单[需要自己的账户充值金额才行]!)
if settleId != model.NO && jxSettleIdMap[settleId] {
brandSql := `UPDATE store_map s SET s.create_delivery_type = ?,s.is_service = ? WHERE s.vendor_store_id = ? AND s.deleted_at = ?`
if _, err := dao.ExecuteSQL(db, brandSql, []interface{}{model.NO, model.NO, storeListValue.VendorStoreID, utils.DefaultTimeValue}...); err != nil {
globals.SugarLogger.Debugf("将门店修改为非服务商和系统发单: %v", err)
} }
} else {
brandSql := `UPDATE store_map s SET s.create_delivery_type = ?,s.is_service = ? WHERE s.vendor_store_id = ? AND s.deleted_at = ?`
if _, err := dao.ExecuteSQL(db, brandSql, []interface{}{model.YES, model.YES, storeListValue.VendorStoreID, utils.DefaultTimeValue}...); err != nil {
globals.SugarLogger.Debugf("将门店修改为服务商和门店发单: %v", err)
}
}
for _, so := range storeOrder { for _, so := range storeOrder {
// 更新订单的结算信息 // 更新订单的结算信息
if so.PlatformSettlement > 0 { if so.PlatformSettlement > 0 {
goodsOrderSql := `UPDATE goods_order g SET g.total_shop_money = ? WHERE g.vendor_order_id = ? ` goodsOrderSql := `UPDATE goods_order g SET g.total_shop_money = ? WHERE g.vendor_order_id = ? `
if _, err := dao.ExecuteSQL(db, goodsOrderSql, []interface{}{so.PlatformSettlement + so.TimingFee + so.DeliveryFee, so.OrderId}...); err != nil { if _, err := dao.ExecuteSQL(db, goodsOrderSql, []interface{}{so.PlatformSettlement + so.TimingFee + so.DeliveryFee, so.OrderId}...); err != nil {
globals.SugarLogger.Debugf("更新订单结算信息错误: %v", err) globals.SugarLogger.Debugf("更新订单结算信息错误: %v", err)
}
} }
// 更新订单的配送信息 }
if so.TimingFee != 0 || so.DeliveryFee != 0 { // 更新订单的配送信息
wayBillSql := `UPDATE waybill w SET w.desired_fee = ?,w.punctual_fee = ? WHERE g.vendor_order_id = ? AND g.vendor_waybill_id = ? ` if so.TimingFee != 0 || so.DeliveryFee != 0 {
if _, err := dao.ExecuteSQL(db, wayBillSql, []interface{}{so.DeliveryFee * -1, so.TimingFee * -1, so.OrderId, so.OrderId}...); err != nil { wayBillSql := `UPDATE waybill w SET w.desired_fee = ?,w.punctual_fee = ? WHERE w.vendor_order_id = ? AND w.vendor_waybill_id = ? `
globals.SugarLogger.Debugf("更新订单物流结算信息错误: %v", err) if _, err := dao.ExecuteSQL(db, wayBillSql, []interface{}{so.DeliveryFee, so.TimingFee, so.OrderId, so.OrderId}...); err != nil {
} globals.SugarLogger.Debugf("更新订单物流结算信息错误: %v", err)
} }
} }
} }
return retVal, err return retVal, err
} }
task := tasksch.NewParallelTask("更新美团订单配送费/保险费/结算信息", tasksch.NewParallelConfig().SetParallelCount(4), jxcontext.AdminCtx, taskFunc, storeMapList) task := tasksch.NewParallelTask("更新美团订单配送费/保险费/结算信息", tasksch.NewParallelConfig().SetParallelCount(4), jxcontext.AdminCtx, taskFunc, storeMapList)