修改bug

This commit is contained in:
邹宗楠
2022-03-15 11:46:51 +08:00
parent 39a3a636db
commit eaca4b3275
10 changed files with 107 additions and 60 deletions

View File

@@ -749,25 +749,34 @@ func (s *DefScheduler) OnWaybillStatusChanged(bill *model.Waybill, isPending boo
}
func (s *DefScheduler) cancelWaybillNotInStoreOpentime(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) (err error) {
if savedOrderInfo != nil {
//TODO 2020-09-07 不在门店的营业时间内取消运单
//TODO 2021-07-26 实时取门店营业时间,运营可能在订单来之后修改门店营业时间
storeDetail, _ := partner.CurOrderManager.LoadStoreDetail(jxutils.GetSaleStoreIDFromOrder(savedOrderInfo.order), savedOrderInfo.order.VendorID)
if storeDetail != nil {
if storeDetail.OpenTime1 != 0 && storeDetail.CloseTime1 != 0 {
time1 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime1, time.Now())
time2 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, time.Now())
if time.Now().Sub(time1) < 0 || time.Now().Sub(time2.Add(time.Minute*30)) > 0 {
if storeDetail.OpenTime2 != 0 && storeDetail.CloseTime2 != 0 {
time3 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime2, time.Now())
time4 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime2, time.Now())
if time.Now().Sub(time3) < 0 || time.Now().Sub(time4.Add(time.Minute*30)) > 0 {
s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonNotInStoreOpenTime)
}
} else {
s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonNotInStoreOpenTime)
}
if savedOrderInfo == nil {
return nil
}
//TODO 2020-09-07 不在门店的营业时间内取消运单
//TODO 2021-07-26 实时取门店营业时间,运营可能在订单来之后修改门店营业时间
storeDetail, _ := partner.CurOrderManager.LoadStoreDetail(jxutils.GetSaleStoreIDFromOrder(savedOrderInfo.order), savedOrderInfo.order.VendorID)
if storeDetail == nil {
return nil
}
// 系统手动发单,不做营业时间校验
if storeDetail.SendOrderType == 1 {
return nil
}
if storeDetail.OpenTime1 != 0 && storeDetail.CloseTime1 != 0 {
time1 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime1, time.Now())
time2 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, time.Now())
if time.Now().Sub(time1) < 0 || time.Now().Sub(time2.Add(time.Minute*30)) > 0 { // 营业时间
if storeDetail.OpenTime2 != 0 && storeDetail.CloseTime2 != 0 { // 休息时间
time3 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime2, time.Now())
time4 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime2, time.Now())
if time.Now().Sub(time3) < 0 || time.Now().Sub(time4.Add(time.Minute*30)) > 0 {
s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonNotInStoreOpenTime)
}
} else {
s.CancelWaybill(bill, partner.CancelWaybillReasonNotAcceptIntime, partner.CancelWaybillReasonNotInStoreOpenTime)
}
}
}

View File

@@ -194,13 +194,15 @@ func (s *DefScheduler) CreateWaybillOnProviders4SavedOrder(ctx *jxcontext.Contex
func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendorOrderID string, vendorID int, courierVendorIDs []int, forceCreate bool, maxDeliveryFee int64) (bills []*model.Waybill, errCode string, err error) {
savedOrderInfo := s.loadSavedOrderByID(vendorOrderID, vendorID, true)
if savedOrderInfo != nil {
savedOrderInfo.storeDetail.SendOrderType = 1 // 设置为手动创建订单
order := savedOrderInfo.order
//1表示为门店发单需要验证门店账户余额情况
if errCode, err = s.CheckStoreBalance(ctx, order, courierVendorIDs); err != nil {
return nil, errCode, err
}
}
jxutils.CallMsgHandler(func() {
billFunc := func() {
bills, err = func() (bills []*model.Waybill, err error) {
userName := ctx.GetUserName()
globals.SugarLogger.Debugf("CreateWaybillOnProvidersEx orderID:%s userName:%s", vendorOrderID, userName)
@@ -235,7 +237,9 @@ func (s *DefScheduler) CreateWaybillOnProvidersEx(ctx *jxcontext.Context, vendor
globals.SugarLogger.Infof("CreateWaybillOnProvidersEx orderID:%s userName:%s error:%v", vendorOrderID, userName, err)
return bills, err
}()
}, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID))
}
jxutils.CallMsgHandler(billFunc, jxutils.ComposeUniversalOrderID(vendorOrderID, vendorID))
return bills, errCode, err
}

View File

@@ -1083,6 +1083,7 @@ func UpdateStore(ctx *jxcontext.Context, storeID int, payload map[string]interfa
TryAddStoreBossRole4StoreByMobile(ctx, store.ID, []string{utils.Interface2String(valid["tel1"]), utils.Interface2String(valid["tel2"])})
}
if syncStatus&model.SyncFlagStoreAddress != 0 || valid["tel1"] != nil || valid["payeeName"] != nil {
// 修改门店信息(第三方平台同步)
updateCourierStores(ctx, storeID)
}
}
@@ -1249,6 +1250,7 @@ func CreateStore(ctx *jxcontext.Context, storeExt *StoreExt, userName string) (i
if globals.IsAddEvent {
err = AddEventDetail(db, ctx, model.OperateAdd, store.ID, model.ThingTypeStore, store.ID, "", "")
}
// 同步门店信息
UpdateOrCreateCourierStores(ctx, store.ID, false, false, false)
TryAddStoreBossRole4StoreByMobile(ctx, storeExt.ID, []string{storeExt.Tel1, storeExt.Tel2})
// InsertStoreCategories(ctx, db, store.ID)
@@ -1940,17 +1942,26 @@ func updateCourierStore(ctx *jxcontext.Context, storeDetail *dao.StoreDetail2) (
return err
}
// 更新门店信息
//VendorIDDada = 101 // 达达配送
//VendorIDMTPS = 102 // 美团配送
//VendorIDFengNiao = 103 // 蜂鸟配送
func updateCourierStores(ctx *jxcontext.Context, storeID int) (err error) {
globals.SugarLogger.Debugf("updateCourierStores storeID:%d", storeID)
db := dao.GetDB()
errList := errlist.New()
for k, v := range partner.DeliveryPlatformHandlers {
fmt.Println("k===================", k)
if v.Use4CreateWaybill {
if _, ok := v.Handler.(partner.IDeliveryUpdateStoreHandler); ok {
storeDetail, err2 := dao.GetStoreDetail2(db, storeID, "", k)
fmt.Println("storeDetail.VendorID===================", storeDetail.VendorID)
fmt.Println("storeDetail.AuditStatus===================", storeDetail.AuditStatus)
fmt.Println("storeDetail.VendorStoreID===================", storeDetail.VendorStoreID)
if err = err2; err2 == nil {
if storeDetail.VendorStoreID != "" && storeDetail.AuditStatus == model.StoreAuditStatusOnline {
// 同步更新门店信息
err = updateCourierStore(ctx, storeDetail)
if err == nil {
//美团配送修改门店信息后要待审核
@@ -1970,6 +1981,7 @@ func updateCourierStores(ctx *jxcontext.Context, storeID int) (err error) {
return errList.GetErrListAsOne()
}
// ====================================第三方店铺创建=============================
func updateOrCreateCourierStore(ctx *jxcontext.Context, storeDetail *dao.StoreDetail2) (isCreated bool, err error) {
globals.SugarLogger.Debugf("updateOrCreateCourierStore %s, storeID:%d, vendorStoreID:%s", model.VendorChineseNames[storeDetail.VendorID], storeDetail.ID, storeDetail.VendorStoreID)
@@ -1985,6 +1997,7 @@ func updateOrCreateCourierStore(ctx *jxcontext.Context, storeDetail *dao.StoreDe
remoteStoreDetail, err2 := handlerInfo.Handler.GetStore(ctx, 0, storeDetail.VendorStoreID)
if err = err2; err != nil {
if handlerInfo.Handler.IsErrStoreNotExist(err) {
// 本地门店同步第三方平台
storeDetail.VendorStoreID, storeDetail.AuditStatus, err = handlerInfo.Handler.CreateStore(ctx, storeDetail)
if err == nil {
isCreated = true
@@ -2029,6 +2042,7 @@ func UpdateOrCreateCourierStores(ctx *jxcontext.Context, storeID int, isForceUpd
}
}
// 定时任务更新或者创建时修改东西
task := tasksch.NewParallelTask("UpdateOrCreateCourierStores", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
var resultList []interface{}

View File

@@ -67,6 +67,8 @@ type StoreDetail struct {
BrandLogo string `json:"brandLogo"`
BrandIsOpen int `json:"brandIsOpen"`
BrandIsPrint int `json:"brandIsPrint"`
SendOrderType int `orm:"-" json:"-"` // 临时变量发单类型 1-系统手动发单
}
// 带快递门店信息的

View File

@@ -73,14 +73,13 @@ type ModelIDCULD struct {
// 同步标识掩码
const (
// general
SyncFlagModifiedMask = 1
SyncFlagNewMask = 2
SyncFlagDeletedMask = 4
SyncFlagModifiedMask = 1 // 同步标志修改掩码
SyncFlagNewMask = 2 // 同步标记新掩码
SyncFlagDeletedMask = 4 // 同步标志删除掩码
// store only
SyncFlagStoreName = 8
SyncFlagStoreAddress = 16
SyncFlagStoreStatus = 32
SyncFlagStoreName = 8 // 同步标志存储名称
SyncFlagStoreAddress = 16 // 同步标志存储地址
SyncFlagStoreStatus = 32 // 同步标志存储状态
// sku only
SyncFlagSpecMask = 64 // 规格修改原值32

View File

@@ -6,32 +6,55 @@ import (
"git.rosy.net.cn/jx-callback/business/model"
)
func OnCallbackMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
if CurPurchaseHandler != nil {
if msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged || msg.Cmd == mtwmapi.MsgTypeStoreAuditStatusChanged {
response = CurPurchaseHandler.onStoreStatusChanged(msg)
} else if msg.Cmd == mtwmapi.MsgTypePrivateNumberDowngrade {
response = CurPurchaseHandler.onNumberDowngrade(msg)
} else if msg.Cmd == mtwmapi.MsgTypeStoreBind {
//
//if msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged || msg.Cmd == mtwmapi.MsgTypeStoreAuditStatusChanged {
//response = CurPurchaseHandler.onStoreStatusChanged(msg)
//} else if msg.Cmd == mtwmapi.MsgTypePrivateNumberDowngrade {
//response = CurPurchaseHandler.onNumberDowngrade(msg)
//} else if msg.Cmd == mtwmapi.MsgTypeStoreBind {
//
//} else {
//if orderID := GetOrderIDFromMsg(msg); orderID != "" {
//jxutils.CallMsgHandler(func() {
//switch msg.Cmd {
//case mtwmapi.MsgTypeWaybillStatus:
//response = CurPurchaseHandler.onWaybillMsg(msg)
//default:
//response = CurPurchaseHandler.onOrderMsg(msg)
//}
//}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM))
//}
///*if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
// utils.CallFuncAsync(func() {
// OnFinancialMsg(msg)
// })
//} */
//}
} else {
if orderID := GetOrderIDFromMsg(msg); orderID != "" {
jxutils.CallMsgHandler(func() {
switch msg.Cmd {
case mtwmapi.MsgTypeWaybillStatus:
response = CurPurchaseHandler.onWaybillMsg(msg)
default:
response = CurPurchaseHandler.onOrderMsg(msg)
}
}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM))
}
/*if msg.Cmd == mtwmapi.MsgTypeOrderRefund || msg.Cmd == mtwmapi.MsgTypeOrderPartialRefund {
utils.CallFuncAsync(func() {
OnFinancialMsg(msg)
})
} */
}
func OnCallbackMsg(msg *mtwmapi.CallbackMsg) (response *mtwmapi.CallbackResponse) {
if CurPurchaseHandler == nil {
return &mtwmapi.CallbackResponse{Data: "CurPurchaseHandler init fail"}
}
// 获取orderId
orderID := GetOrderIDFromMsg(msg)
switch {
case msg.Cmd == mtwmapi.MsgTypeStoreStatusChanged || msg.Cmd == mtwmapi.MsgTypeStoreAuditStatusChanged:
response = CurPurchaseHandler.onStoreStatusChanged(msg)
case msg.Cmd == mtwmapi.MsgTypePrivateNumberDowngrade:
response = CurPurchaseHandler.onNumberDowngrade(msg)
case msg.Cmd == mtwmapi.MsgTypeStoreBind:
break
case orderID != "" && msg.Cmd == mtwmapi.MsgTypeWaybillStatus:
jxutils.CallMsgHandler(func() {
if msg.Cmd == mtwmapi.MsgTypeWaybillStatus {
response = CurPurchaseHandler.onWaybillMsg(msg)
} else {
response = CurPurchaseHandler.onOrderMsg(msg)
}
}, jxutils.ComposeUniversalOrderID(orderID, model.VendorIDMTWM))
}
return response
}

View File

@@ -299,6 +299,7 @@ pushMasterSecret= "dGZcR0XGGg7H5Pd7FR3n47"
fnAppID = "6a3e2073-1850-413b-9eb7-6c342ec36e1c"
fnAppSecret = "a8248088-a742-4c33-a0db-03aeae00ca7d"
fnMerchantId = "20200818"
fnCallbackURL = "http://callback.jxc4.com/fn/msg"
jxPrintAppID = "1000"
@@ -387,6 +388,7 @@ jdShopAppSecret2 = "71e1061ac2f246f6ac27efb900edba12"
fnAppID = "6a3e2073-1850-413b-9eb7-6c342ec36e1c"
fnAppSecret = "a8248088-a742-4c33-a0db-03aeae00ca7d"
fnMerchantId = "20200818"
fnCallbackURL = "http://callback-jxgy.jxc4.com/fn/msg"
jxPrintAppID = "1000"
@@ -562,6 +564,7 @@ pushMasterSecret= "dGZcR0XGGg7H5Pd7FR3n47"
fnAppID = "6a3e2073-1850-413b-9eb7-6c342ec36e1c"
fnAppSecret = "a8248088-a742-4c33-a0db-03aeae00ca7d"
fnMerchantId = "20200818"
fnCallbackURL = "http://callback.beta.jxc4.com/fn/msg"
jxPrintAppID = "1000"

View File

@@ -368,7 +368,7 @@ func (c *Auth2Controller) ChangePassword() {
})
}
// @Title 清除除参数token以外的这个人的token
// @Title 清除除参数token以外的这个人的tokenSendStoreMessage
// @Description 清除除参数token以外的这个人的token
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult

View File

@@ -2,9 +2,7 @@ package controllers
import (
"git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
"github.com/astaxie/beego/server/web"
)
@@ -14,14 +12,9 @@ type MtwmController struct {
}
func (c *MtwmController) onCallbackMsg(msgType string) {
c.Data["json"] = mtwmapi.Err2CallbackResponse(nil, "")
msg, callbackResponse := api.MtwmAPI.GetCallbackMsg(c.Ctx.Request)
globals.SugarLogger.Debug(utils.Format4Output(msg, true))
if callbackResponse == nil {
callbackResponse = mtwm.OnCallbackMsg(msg)
if callbackResponse == nil {
callbackResponse = mtwmapi.Err2CallbackResponse(nil, "")
}
}
c.Data["json"] = callbackResponse
c.ServeJSON()

View File

@@ -273,7 +273,7 @@ func Init() {
AliPayAPI = alipayapi.New(alipayAppID, []byte(beego.AppConfig.DefaultString("alipayPrivateKey", "")))
}
FnAPI = fnpsapi.New(beego.AppConfig.DefaultString("fnAppID", ""), beego.AppConfig.DefaultString("fnAppSecret", ""))
FnAPI = fnpsapi.New(beego.AppConfig.DefaultString("fnAppID", ""), beego.AppConfig.DefaultString("fnAppSecret", ""), beego.AppConfig.DefaultString("fnMerchantId", ""))
FeieAPI = feieapi.New(beego.AppConfig.DefaultString("feieUser", ""), beego.AppConfig.DefaultString("feieKey", ""))
XiaoWMAPI = xiaowmapi.New(beego.AppConfig.DefaultInt("xiaoWMAppID", 0), beego.AppConfig.DefaultString("xiaoWMAppKey", ""))
YilianyunAPI = yilianyunapi.New(beego.AppConfig.DefaultString("yilianyunClientID", ""), beego.AppConfig.DefaultString("yilianyunClientSecret", ""))