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

@@ -20,6 +20,33 @@ import (
"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如下提供配送状态枚举值
@@ -62,6 +89,12 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
if orderId == "" && v.VendorID == model.VendorIDDD { // 抖音门店订单除了三方配送回调时推送,不在主动推送配送消息
continue
}
// 平台自配送
if v.WaybillVendorID == model.YES {
continue
}
if orderId == "" { // 订单id为空是,是定时轮询操作,不做此状态
waybillList, _ := dao.GetWaybills(dao.GetDB(), v.VendorOrderID)
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.CourierName = "门店老板"
riderInfo.CourierPhone = "18048531223"
riderInfo.LogisticsProviderCode = "10017"
riderInfo.LogisticsStatus = v.Status
storeDetail, err := dao.GetStoreDetail(dao.GetDB(), v.JxStoreID, 0, "")
if err != nil {
riderInfo.CourierPhone = storeDetail.Tel1
}
}
switch riderInfo.LogisticsStatus {
@@ -104,7 +132,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
riderInfo.LogisticsStatus = 0
riderInfo.OpCode = tiktok_api.TiktokLogisticsStatusCALLRIDER
case 12: // 骑手接单
riderInfo.LogisticsStatus = 12
riderInfo.LogisticsStatus = 10
riderInfo.OpCode = tiktok_api.TiktokLogisticsORDERRECEIVED
case 15: // 到店
riderInfo.LogisticsStatus = 15
@@ -136,13 +164,27 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
if riderInfo.Latitude == "" {
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 {
case model.VendorIDMTWM: // 美团订单
paramsMap := utils.Struct2Map(riderInfo, "", true)
if handler := partner.GetPurchaseOrderHandlerFromVendorID(v.VendorID); handler != nil {
if err := handler.GetOrderRider(v.VendorOrgCode, v.VendorStoreID, paramsMap); err != nil {
globals.SugarLogger.Errorf("Error pushing meituan rider information :%s--%s--%v", riderInfo.OrderId, riderInfo.ThirdCarrierOrderId, err)
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", v.VendorOrderID, utils.Format4Output(riderInfo, false), err)
}
}
case model.VendorIDELM: // 饿了么
@@ -162,7 +204,7 @@ func GetOrderRiderInfoToPlatform(orderId string, wayBillStatus int) {
case model.VendorIDDD: // 抖店小时达
continue
default:
globals.SugarLogger.Errorf("Order source error, non system order")
globals.SugarLogger.Errorf("Order source error, non system order: %s", v.VendorOrderID)
continue
}
}
@@ -368,7 +410,7 @@ func LoadingStoreOrderSettleAmount(startTime, endTime int64, jxStoreId []int) er
var (
db = dao.GetDB()
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()
)
@@ -376,45 +418,58 @@ func LoadingStoreOrderSettleAmount(startTime, endTime int64, jxStoreId []int) er
from = startTime
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 {
globals.SugarLogger.Errorf("获取美团门店列表异常: %v", err)
return err
}
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeListValue := batchItemList[0].([]*model.StoreMap)
for _, v := range storeListValue {
storeOrder, err := mtwm.GetAPI(v.VendorOrgCode, v.StoreID, v.VendorStoreID).GetStoreBillList(&mtwmapi.Bill{
AppPoiCode: v.VendorStoreID,
StartDate: from,
EndDate: to,
Offset: 0,
Limit: 200,
})
if err != nil {
return nil, err
storeListValue := batchItemList[0].(*model.StoreMap)
billListParam := &mtwmapi.Bill{
AppPoiCode: storeListValue.VendorStoreID,
StartDate: from,
EndDate: to,
Offset: 0,
Limit: 200,
}
storeOrder, settleId, err := mtwm.GetAPI(storeListValue.VendorOrgCode, storeListValue.StoreID, storeListValue.VendorStoreID).GetStoreBillList(billListParam)
if err != nil {
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 {
// 更新订单的结算信息
if so.PlatformSettlement > 0 {
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 {
globals.SugarLogger.Debugf("更新订单结算信息错误: %v", err)
}
for _, so := range storeOrder {
// 更新订单的结算信息
if so.PlatformSettlement > 0 {
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 {
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 _, err := dao.ExecuteSQL(db, wayBillSql, []interface{}{so.DeliveryFee * -1, so.TimingFee * -1, so.OrderId, so.OrderId}...); err != nil {
globals.SugarLogger.Debugf("更新订单物流结算信息错误: %v", err)
}
}
// 更新订单的配送信息
if so.TimingFee != 0 || so.DeliveryFee != 0 {
wayBillSql := `UPDATE waybill w SET w.desired_fee = ?,w.punctual_fee = ? WHERE w.vendor_order_id = ? AND w.vendor_waybill_id = ? `
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
}
task := tasksch.NewParallelTask("更新美团订单配送费/保险费/结算信息", tasksch.NewParallelConfig().SetParallelCount(4), jxcontext.AdminCtx, taskFunc, storeMapList)