diff --git a/business/jxcallback/orderman/order_afs.go b/business/jxcallback/orderman/order_afs.go index 166057e0c..dbb58cae3 100644 --- a/business/jxcallback/orderman/order_afs.go +++ b/business/jxcallback/orderman/order_afs.go @@ -8,6 +8,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils" "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" "github.com/astaxie/beego/orm" ) @@ -49,6 +50,18 @@ func (c *OrderManager) onAfsOrderNew(afsOrder *model.AfsOrder, orderStatus *mode afsOrder.Status = orderStatus.Status } globals.SugarLogger.Debugf("onAfsOrderNew2 orderID:%s", afsOrder.VendorOrderID) + // + if order, _ := c.LoadOrder(afsOrder.VendorOrderID, afsOrder.VendorID); order != nil { + if order.ConsigneeMobile2 == "" { + if handler := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID); handler != nil { + if order2, _ := handler.GetOrder(order.VendorOrgCode, order.VendorOrderID); order2 != nil && order.ConsigneeMobile != order2.ConsigneeMobile { + order.ConsigneeMobile = order2.ConsigneeMobile + c.UpdateOrderFields(order, []string{"ConsigneeMobile"}) + } + } + } + } + // dao.Begin(db) defer func() { if r := recover(); r != nil || err != nil { diff --git a/business/jxcallback/orderman/order_comment.go b/business/jxcallback/orderman/order_comment.go index 079ed953d..a5b4ffa87 100644 --- a/business/jxcallback/orderman/order_comment.go +++ b/business/jxcallback/orderman/order_comment.go @@ -110,6 +110,12 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) ( if order.ConsigneeMobile2 != "" { orderComment.ConsigneeMobile = order.ConsigneeMobile2 } else { + if handler := partner.GetPurchaseOrderHandlerFromVendorID(order.VendorID); handler != nil { + if order2, _ := handler.GetOrder(order.VendorOrgCode, order.VendorOrderID); order2 != nil && order.ConsigneeMobile != order2.ConsigneeMobile { + order.ConsigneeMobile = order2.ConsigneeMobile + partner.CurOrderManager.UpdateOrderFields(order, []string{"ConsigneeMobile"}) + } + } orderComment.ConsigneeMobile = order.ConsigneeMobile } } else { diff --git a/business/jxcallback/orderman/orderman.go b/business/jxcallback/orderman/orderman.go index f66f1528a..e6c385406 100644 --- a/business/jxcallback/orderman/orderman.go +++ b/business/jxcallback/orderman/orderman.go @@ -81,6 +81,7 @@ func addOrderOrWaybillStatus(status *model.OrderStatus, db *dao.DaoDB) (isDuplic } }() status.ID = 0 + status.Remark = utils.LimitUTF8StringLen(status.Remark, 255) created, _, err := db.Db.ReadOrCreate(status, "VendorOrderID", "VendorID", "OrderType", "Status", "VendorStatus", "StatusTime") if err == nil { if !created { diff --git a/business/jxcallback/scheduler/defsch/defsch.go b/business/jxcallback/scheduler/defsch/defsch.go index 407a23f7c..5af23c02d 100644 --- a/business/jxcallback/scheduler/defsch/defsch.go +++ b/business/jxcallback/scheduler/defsch/defsch.go @@ -292,7 +292,7 @@ func init() { return sch.createWaybillOn3rdProviders(savedOrderInfo, 0, nil) }, ShouldSetTimer: func(savedOrderInfo *WatchOrderInfo, bill *model.Waybill) bool { - return model.IsOrderDeliveryByStore(savedOrderInfo.order) // 自配送商家使用 + return savedOrderInfo.isDeliveryCompetition && model.IsOrderDeliveryByStore(savedOrderInfo.order) // 自配送商家使用 }, }, }, @@ -697,6 +697,9 @@ func (s *DefScheduler) createWaybillOn3rdProviders(savedOrderInfo *WatchOrderInf if maxDeliveryFee == 0 { maxDeliveryFee = getMaxDeliveryFee(order) } + if !savedOrderInfo.isDeliveryCompetition { + globals.SugarLogger.Debugf("createWaybillOn3rdProviders orderID:%s门店没有设置配送竞争", order.VendorOrderID) + } globals.SugarLogger.Debugf("createWaybillOn3rdProviders, orderID:%s, status:%d, maxDeliveryFee:%d, excludeBill:%v", order.VendorOrderID, order.Status, maxDeliveryFee, excludeBill) if err = s.canOrderCreateWaybillNormally(order); err == nil { if (order.DeliveryFlag & model.OrderDeliveryFlagMaskScheduleDisabled) == 0 { diff --git a/business/jxstore/cms/cms.go b/business/jxstore/cms/cms.go index f61780c34..781aa09fb 100644 --- a/business/jxstore/cms/cms.go +++ b/business/jxstore/cms/cms.go @@ -328,7 +328,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { db := dao.GetDB() switch configType { case model.ConfigTypePricePack: - storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) + storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) if err = err2; err == nil { var storeInfo []string for _, v := range storeMapList { @@ -339,7 +339,7 @@ func DeleteConfig(ctx *jxcontext.Context, key, configType string) (err error) { } } case model.ConfigTypeFreightPack: - storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err2 := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err = err2; err == nil { var storeInfo []string for _, v := range storeMapList { @@ -419,7 +419,7 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s } switch configType { case model.ConfigTypePricePack: - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, key) if err != nil { dao.Rollback(db) return "", err @@ -438,7 +438,7 @@ func UpdateConfig(ctx *jxcontext.Context, key, configType, value string) (hint s } case model.ConfigTypeFreightPack: dao.Commit(db) - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return "", err } diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 474284165..8be4eedba 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -110,6 +110,9 @@ func (x Store4UserList) Len() int { } func (x Store4UserList) Less(i, j int) bool { + if x[i].Status != x[j].Status { + return x[i].Status > x[j].Status + } if x[i].WalkDistance != x[j].WalkDistance { return x[i].WalkDistance < x[j].WalkDistance } @@ -398,7 +401,7 @@ func getStoresSql(ctx *jxcontext.Context, keyword string, params map[string]inte } func setStoreMapInfo(ctx *jxcontext.Context, db *dao.DaoDB, storesInfo *StoresInfo, storeIDs []int, briefLevel int) (err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } @@ -1661,7 +1664,7 @@ func formalizeStore4Courier(storeDetail *dao.StoreDetail2) *dao.StoreDetail2 { func ExportShopsHealthInfo(ctx *jxcontext.Context, vendorIDs, storeIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { db := dao.GetDB() vendorID := model.VendorIDEBAI - storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return "", err } @@ -1749,7 +1752,7 @@ func GetCorporationInfo(ctx *jxcontext.Context, licenceCode string) (corporation func GetStoresVendorSnapshot(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorIDs, storeIDs []int) (vendorStoreSnapshotList []*model.VendorStoreSnapshot, err error) { db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return nil, err } @@ -1796,7 +1799,7 @@ func getCurrentSnapshotAt(now time.Time) (snapshotAt time.Time) { } func updateVendorStoreStatusBySnapshot(db *dao.DaoDB, curSnapshotList []*model.VendorStoreSnapshot) (err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, nil, nil, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } @@ -2324,6 +2327,7 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi FROM store t1 JOIN place city ON city.code = t1.city_code WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ? + ORDER BY t1.id ` sqlParams := []interface{}{ utils.DefaultTimeValue, @@ -2344,6 +2348,22 @@ func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, needWalkDi } } + // 为了审核用 + if len(storeList2) == 0 { + sqlParams = []interface{}{ + utils.DefaultTimeValue, + model.StoreStatusDisabled, + jxutils.StandardCoordinate2Int(0), + jxutils.StandardCoordinate2Int(10000), + jxutils.StandardCoordinate2Int(0), + jxutils.StandardCoordinate2Int(10000), + } + dao.GetRows(dao.GetDB(), &storeList2, sql, sqlParams...) + if len(storeList2) > 1 { + storeList2 = storeList2[:1] + } + } + // 如果要求以步行距离来算 if needWalkDistance { var coordList []*autonavi.Coordinate @@ -2380,7 +2400,7 @@ func JdStoreInfoCoordinateRecover(ctx *jxcontext.Context, vendorOrgCode string, defer file1.Close() db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err == nil { var validStoreList []*dao.StoreDetail for _, v := range storeList { @@ -2645,7 +2665,7 @@ func CreateStorePriceScore(ctx *jxcontext.Context) (err error) { func RefreshJdLevel(ctx *jxcontext.Context) (err error) { db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusOpened, -1, "") + storeMapList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusOpened, -1, "") if len(storeMapList) > 0 { dao.Begin(db) defer func() { diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index 92fa2f3f2..9a245b064 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -169,10 +169,13 @@ type tUpdateStoresSkus struct { } type tStoreSkusSecKill struct { - StoreID int `orm:"column(store_id)"` - VendorID int `orm:"column(vendor_id)"` - SecKillCount int - SecKillCount2 int + StoreID int `orm:"column(store_id)"` + VendorID int `orm:"column(vendor_id)"` + SecKillCount int + SecKillCount2 int + OperatorPhone string + MarketManPhone string + NoticeMsg string } const ( @@ -656,7 +659,7 @@ func updateSaleInfo4StoreSkuName(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs } func getValidStoreVendorMap(db *dao.DaoDB, storeIDs []int) (realVendorMap map[int]int, err error) { - storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err != nil { return nil, err } @@ -1982,7 +1985,7 @@ func RefreshStoresSkuByVendor(ctx *jxcontext.Context, storeIDs []int, vendorID i return "", fmt.Errorf("此功能当前只支持京东到家平台") } db := dao.GetDB() - storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := dao.GetStoresMapList(db, []int{vendorID}, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return "", err } @@ -3352,50 +3355,54 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i // 1. 如果爆品低于8个,报警 type1 // 2. 爆品价格低于1元商品小于5个,报警 type2 var ( - type1Count = 8 - type2Count = 5 + type1Count = 8 + type2Count = 5 + ddMsgresult []interface{} ) db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, vendorIDs, nil, model.StoreStatusOpened, model.StoreIsSyncAll, "") - pTask := tasksch.NewParallelTask("SendSeckillSkusCountMsg", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - store := batchItemList[0].(*model.StoreMap) - var type1, type2 int - switch store.VendorID { - case model.VendorIDEBAI: - result, _ := api.EbaiAPI.GetStoresShowWindowSkus(utils.Str2Int64(store.VendorStoreID)) - for _, v := range result { - type1++ - if v.SalePrice < 1 { - type2++ - } - } - case model.VendorIDMTWM: - handler := partner.GetPurchasePlatformFromVendorID(store.VendorID).(partner.ISingleStoreStoreSkuHandler) - remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, store.StoreID, store.VendorStoreID, nil) - if err != nil { - return retVal, err - } - for _, v := range remoteSkuList { - for _, vv := range v.SkuList { - if vv.IsSpecialty == 1 { - type1++ - } - if vv.IsSpecialty == 1 && vv.VendorPrice < 100 { + storeList, err := dao.GetStoresMapList(db, vendorIDs, nil, []int{model.StoreStatusClosed, model.StoreStatusHaveRest, model.StoreStatusOpened}, model.StoreStatusOpened, model.StoreIsSyncAll, "") + taskSeqFunc := func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + store := batchItemList[0].(*model.StoreMap) + var type1, type2 int + switch store.VendorID { + case model.VendorIDEBAI: + result, _ := api.EbaiAPI.GetStoresShowWindowSkus(utils.Str2Int64(store.VendorStoreID)) + for _, v := range result { + type1++ + if v.SalePrice < 1 { type2++ } } - } - case model.VendorIDJD: - var storeSecKill []*tStoreSkusSecKill - sql := ` + case model.VendorIDMTWM: + handler := partner.GetPurchasePlatformFromVendorID(store.VendorID).(partner.ISingleStoreStoreSkuHandler) + remoteSkuList, err := handler.GetStoreSkusFullInfo(ctx, nil, store.StoreID, store.VendorStoreID, nil) + if err != nil { + return retVal, err + } + for _, v := range remoteSkuList { + for _, vv := range v.SkuList { + if vv.IsSpecialty == 1 { + type1++ + } + if vv.IsSpecialty == 1 && vv.VendorPrice < 100 { + type2++ + } + } + } + case model.VendorIDJD: + var storeSecKill []*tStoreSkusSecKill + sql := ` SELECT t1.store_id,count(*) sec_kill_count, count(t1.price < 100 or NULL) sec_kill_count2 FROM( - SELECT a.store_id, a.sku_id, d.type, MIN(b.act_price) price + SELECT a.store_id, a.sku_id, d.type, MIN(e.actual_act_price) price FROM store_sku_bind a LEFT JOIN act_store_sku b ON a.store_id = b.store_id AND b.sku_id = a.sku_id LEFT JOIN act_map c ON c.act_id = b.act_id LEFT JOIN act d ON d.id = c.act_id + LEFT JOIN act_store_sku_map e ON e.store_id = a.store_id AND e.sku_id = a.sku_id AND e.vendor_id = c.vendor_id AND e.act_id = d.id WHERE 1=1 AND a.store_id = ? AND c.vendor_id = ? @@ -3403,63 +3410,106 @@ func SendSeckillSkusCountMsg(ctx *jxcontext.Context, vendorIDs []int, isAsync, i AND d.type = ? AND a.status = ? AND a.deleted_at = ? + AND e.actual_act_price <> 0 GROUP BY 1,2,3)t1 GROUP BY 1 ` - sqlParams := []interface{}{ - store.StoreID, store.VendorID, - model.ActSkuSecKill, model.StoreSkuBindStatusNormal, - utils.DefaultTimeValue, + sqlParams := []interface{}{ + store.StoreID, store.VendorID, + model.ActSkuSecKill, model.StoreSkuBindStatusNormal, + utils.DefaultTimeValue, + } + err = dao.GetRows(db, &storeSecKill, sql, sqlParams...) + if len(storeSecKill) > 0 { + type1 = storeSecKill[0].SecKillCount + type2 = storeSecKill[0].SecKillCount2 + } else { + type1 = 0 + type2 = 0 + } } - err = dao.GetRows(db, &storeSecKill, sql, sqlParams...) - if len(storeSecKill) > 0 { - type1 = storeSecKill[0].SecKillCount - type2 = storeSecKill[0].SecKillCount2 + if type1 < type1Count || type2 < type2Count { + storeDetail, _ := dao.GetStoreDetail(db, store.StoreID, store.VendorID) + var ( + operatorName string + operatorPhone string + type1Str = "爆品数量低于8个!" + type2Str = "爆品价格小于1元的爆品数量低于5个!" + typeResult = "" + ) + if storeDetail.OperatorPhone != "" { + operatorName = storeDetail.OperatorName + operatorPhone = storeDetail.OperatorPhone + } else if storeDetail.OperatorPhone2 != "" { + operatorName = storeDetail.OperatorName2 + operatorPhone = storeDetail.OperatorPhone2 + } + if type1 < type1Count { + typeResult += type1Str + } + if type2 < type2Count { + typeResult += type2Str + } + var result = &tStoreSkusSecKill{} + noticeMsg := fmt.Sprintf("运营负责人:[%v],市场负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],平台:[%v],警告类型:[%v]\n", operatorName, storeDetail.MarketManName, store.StoreID, storeDetail.VendorStoreID, store.StoreName, model.VendorChineseNames[store.VendorID], typeResult) + result.OperatorPhone = operatorPhone + result.MarketManPhone = storeDetail.MarketManPhone + result.NoticeMsg = noticeMsg + retVal = []*tStoreSkusSecKill{result} + } + return retVal, err + } + taskParallel := tasksch.NewParallelTask("获取各平台爆品数量", tasksch.NewParallelConfig().SetParallelCount(parallelCount), ctx, taskFunc, storeList) + tasksch.HandleTask(taskParallel, task, true).Run() + ddMsgresult, err = taskParallel.GetResult(0) + case 1: + var ( + operaterMap = make(map[string]string) + marketMap = make(map[string]string) + ) + for _, v := range ddMsgresult { + ddm := v.(*tStoreSkusSecKill) + if operaterMap[ddm.OperatorPhone] != "" { + operaterMap[ddm.OperatorPhone] += ddm.NoticeMsg } else { - type1 = 0 - type2 = 0 + operaterMap[ddm.OperatorPhone] = ddm.NoticeMsg + } + if marketMap[ddm.MarketManPhone] != "" { + marketMap[ddm.MarketManPhone] += ddm.NoticeMsg + } else { + marketMap[ddm.MarketManPhone] = ddm.NoticeMsg } } - if type1 < type1Count || type2 < type2Count { - storeDetail, _ := dao.GetStoreDetail(db, store.StoreID, store.VendorID) - var ( - operatorName string - operatorPhone string - type1Str = "爆品数量低于8个!" - type2Str = "爆品价格小于1元的爆品数量低于5个!" - typeResult = "" - ) - if storeDetail.OperatorPhone != "" { - operatorName = storeDetail.OperatorName - operatorPhone = storeDetail.OperatorPhone - } else if storeDetail.OperatorPhone2 != "" { - operatorName = storeDetail.OperatorName2 - operatorPhone = storeDetail.OperatorPhone2 + for k, v := range operaterMap { + if marketMap[k] != "" { + continue } - if type1 < type1Count { - typeResult += type1Str - } - if type2 < type2Count { - typeResult += type2Str - } - noticeMsg := fmt.Sprintf("运营负责人:[%v],市场负责人:[%v],门店ID:[%v],平台门店ID[%v],门店名:[%v],平台:[%v],警告类型:[%v]", operatorName, storeDetail.MarketManName, store.StoreID, storeDetail.VendorStoreID, store.StoreName, model.VendorChineseNames[store.VendorID], typeResult) - globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", noticeMsg) - user, err := dao.GetUserByID(db, "mobile", operatorPhone) + user, err := dao.GetUserByID(db, "mobile", k) if user != nil && err == nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", noticeMsg) - } - user2, err := dao.GetUserByID(db, "mobile", storeDetail.MarketManPhone) - if err == nil && user2 != nil { - ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user2.UserID, "警告!门店爆品数量异常!", noticeMsg) + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) } + globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) } - return retVal, err - }, storeList) - tasksch.HandleTask(pTask, nil, true).Run() + for k, v := range marketMap { + if operaterMap[k] != "" { + continue + } + user, err := dao.GetUserByID(db, "mobile", k) + if user != nil && err == nil { + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "警告!门店爆品数量异常!", v) + } + globals.SugarLogger.Debugf("SendSeckillSkusCountMsg: [%v]", v) + } + } + return result, err + } + taskSeq := tasksch.NewSeqTask2("爆品预警", ctx, isContinueWhenError, taskSeqFunc, 2) + tasksch.HandleTask(taskSeq, nil, true).Run() if !isAsync { - _, err = pTask.GetResult(0) + _, err = taskSeq.GetResult(0) + hint = "1" } else { - hint = pTask.GetID() + hint = taskSeq.GetID() } return hint, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 99d8c8b0c..31ac7696d 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -598,7 +598,7 @@ func (v *VendorSync) AmendAndPruneStoreStuff(ctx *jxcontext.Context, vendorIDs [ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, taskName string, isAsync, isManageIt bool, vendorIDs []int, storeIDs []int, mustDirty bool, handler tasksch.WorkFunc, isContinueWhenError bool) (task tasksch.ITask, hint string, err error) { var storeMapList []*model.StoreMap - if storeMapList, err = dao.GetStoresMapList2(db, vendorIDs, storeIDs, model.StoreStatusAll, model.StoreIsSyncYes, "", mustDirty); err != nil { + if storeMapList, err = dao.GetStoresMapList2(db, vendorIDs, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncYes, "", mustDirty); err != nil { return nil, "", err } if len(storeMapList) == 0 { @@ -646,20 +646,26 @@ func (v *VendorSync) LoopStoresMap2(ctx *jxcontext.Context, parentTask tasksch.I func buildSetFinishHook(task tasksch.ITask, ctx *jxcontext.Context) { task.SetFinishHook(func(task tasksch.ITask) { - var noticeMsg string + var noticeMsg = "您此次的同步任务错误详情返回如下: \n" if ctx.GetUserName() != "jxadmin" { if len(task.GetFailedList()) > 10 { downloadURL, _, _ := WirteToExcelBySyncFailed(task) - noticeMsg = "您此次的同步任务错误详情返回如下: " noticeMsg += fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL) } else if len(task.GetFailedList()) > 0 && len(task.GetFailedList()) <= 10 { if task.GetErr() != nil { - noticeMsg = utils.Format4Output(buildErrMsgJson(task), true) + noticeMsg += utils.Format4Output(buildErrMsgJson(task), true) } } if authInfo, err := ctx.GetV2AuthInfo(); err == nil { ddmsg.SendUserMessage(dingdingapi.MsgTyeText, authInfo.UserID, "同步错误返回", noticeMsg) } + } else { + downloadURL, _, _ := WirteToExcelBySyncFailed(task) + user, err := dao.GetUserByID(dao.GetDB(), "mobile", "18160030913") + noticeMsg += fmt.Sprintf("[详情点我]%s/billshow/?normal=true&path=%s \n", globals.BackstageHost, downloadURL) + if user != nil && err == nil { + ddmsg.SendUserMessage(dingdingapi.MsgTyeText, user.UserID, "同步错误返回", noticeMsg) + } } }) } diff --git a/business/jxstore/cms/sync_store.go b/business/jxstore/cms/sync_store.go index 311b34ed3..dcb95dc1d 100644 --- a/business/jxstore/cms/sync_store.go +++ b/business/jxstore/cms/sync_store.go @@ -16,7 +16,7 @@ func OpenRemoteStoreByJxStatus(ctx *jxcontext.Context, vendorIDs, storeIDs []int if !isForce { status = model.StoreStatusClosed } - storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, status, model.StoreIsSyncYes, "") + storeMapList, err := dao.GetStoresMapList(db, vendorIDs, storeIDs, nil, status, model.StoreIsSyncYes, "") if err != nil { return "", err } diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index ebe768676..9848d7155 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -1,6 +1,7 @@ package cms import ( + "errors" "fmt" "regexp" "sort" @@ -500,6 +501,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag err = nil failedList = nil // 因为batchSize为1,可以这样处理 } + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "删除门店商品") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -534,6 +536,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag failedList = append(failedList, putils.GetErrMsg2FailedSingleList(batchedStoreSkuList, err2, storeID, vendorID, "查询是否有该商品")...) } } + failedList, err = buildFailedListAndErr(failedList, err, nil, batchedStoreSkuList, storeID, vendorID, "创建门店商品") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -555,6 +558,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuSyncInfo("更新门店商品基础信息", func(task tasksch.ITask, batchedStoreSkuList []*dao.StoreSkuSyncInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = singleStoreHandler.UpdateStoreSkus(ctx, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, nil, batchedStoreSkuList, storeID, vendorID, "更新门店商品基础信息") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -571,6 +575,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuInfo("更新门店商品库存", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusStock(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品库存") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -595,6 +600,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag _, err = putils.FreeBatchStoreSkuInfo(name, func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) { var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusStatus(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList, status) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品状态") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -613,6 +619,7 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag } var failedList []*partner.StoreSkuInfoWithErr failedList, err = storeSkuHandler.UpdateStoreSkusPrice(ctx, storeDetail.VendorOrgCode, storeID, vendorStoreID, batchedStoreSkuList) + failedList, err = buildFailedListAndErr(failedList, err, batchedStoreSkuList, nil, storeID, vendorID, "更新门店商品价格") if len(failedList) > 0 { task.AddFailedList(failedList) } @@ -657,6 +664,54 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, causeFlag return err } +func buildFailedListAndErr(failedList []*partner.StoreSkuInfoWithErr, err error, list1 []*partner.StoreSkuInfo, list2 []*dao.StoreSkuSyncInfo, storeID, vendorID int, syncType string) (result []*partner.StoreSkuInfoWithErr, err2 error) { + if err != nil && len(failedList) == 0 { + if list1 != nil { + for _, v := range list1 { + failed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: v, + VendoreID: vendorID, + StoreID: storeID, + SyncType: syncType, + ErrMsg: err.Error(), + } + failedList = append(failedList, failed) + } + } + if list2 != nil { + for _, v := range list2 { + storeSkuInfo := &partner.StoreSkuInfo{ + SkuID: v.SkuID, + VendorSkuID: v.VendorSkuID, + NameID: v.NameID, + VendorNameID: v.VendorNameID, + VendorPrice: v.VendorPrice, + Status: v.Status, + } + failed := &partner.StoreSkuInfoWithErr{ + StoreSkuInfo: storeSkuInfo, + VendoreID: vendorID, + StoreID: storeID, + SyncType: syncType, + ErrMsg: err.Error(), + } + failedList = append(failedList, failed) + } + } + return failedList, err + } else if err == nil && len(failedList) > 0 { + var errMsgList []string + for _, v := range failedList { + errMsgList = append(errMsgList, utils.Int2Str(v.StoreID)) + errMsgList = append(errMsgList, utils.Int2Str(v.StoreSkuInfo.SkuID)) + errMsgList = append(errMsgList, v.ErrMsg) + } + err2 := errors.New(strings.Join(errMsgList, ",")) + return failedList, err2 + } + return failedList, err +} + func isNeedHandleAct(causeFlag int) bool { return globals.IsStoreSkuAct && (causeFlag&model.SyncFlagPriceMask != 0) } diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 7b2b681ef..8b7ec64b2 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -591,6 +591,7 @@ func getAddressInfoFromCoord(db *dao.DaoDB, lng, lat float64) (formattedAddress } func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryAddress) (outAddress *model.UserDeliveryAddress, err error) { + globals.SugarLogger.Debugf("AddUserDeliveryAddress1 address:%s", utils.Format4Output(address, true)) if address.UserID == "" { return nil, fmt.Errorf("操作用户配送地址时必须指定UserID") } @@ -599,6 +600,7 @@ func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryA lat := address.Lat address.AutoAddress, address.DistrictCode, address.CityCode, err = getAddressInfoFromCoord(db, lng, lat) if err == nil { + globals.SugarLogger.Debugf("AddUserDeliveryAddress2 address:%s", utils.Format4Output(address, true)) dao.Begin(db) defer func() { if r := recover(); r != nil { @@ -620,12 +622,16 @@ func AddUserDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryA dao.Rollback(db) } } + globals.SugarLogger.Debugf("AddUserDeliveryAddress3 address:%s", utils.Format4Output(address, true)) return outAddress, err } func AddMyDeliveryAddress(ctx *jxcontext.Context, address *model.UserDeliveryAddress) (outAddress *model.UserDeliveryAddress, err error) { + globals.SugarLogger.Debugf("AddMyDeliveryAddress address:%s", utils.Format4Output(address, true)) _, address.UserID = ctx.GetMobileAndUserID() - return AddUserDeliveryAddress(ctx, address) + outAddress, err = AddUserDeliveryAddress(ctx, address) + globals.SugarLogger.Debugf("AddMyDeliveryAddress2 address:%s, err:%v", utils.Format4Output(address, true), err) + return outAddress, err } func DeleteUserDeliveryAddress(ctx *jxcontext.Context, userID string, addressID int) (err error) { diff --git a/business/jxstore/misc/misc.go b/business/jxstore/misc/misc.go index a35780744..9236e3463 100644 --- a/business/jxstore/misc/misc.go +++ b/business/jxstore/misc/misc.go @@ -89,7 +89,7 @@ var ( "00:01:00", } sendSecKillWarnList = []string{ - "8:30:00", + "9:00:00", } autoSaleStoreSkuTimeList = []string{ diff --git a/business/jxstore/misc/store_score.go b/business/jxstore/misc/store_score.go index cf3752bf4..269467ba8 100644 --- a/business/jxstore/misc/store_score.go +++ b/business/jxstore/misc/store_score.go @@ -51,7 +51,7 @@ const ( var ( scoreStoreTimeList = []string{ - "22:00:00", + "23:00:00", } scoreStoreCheckTimeEnd = "23:30:00" fullVendorList = map[int]bool{ diff --git a/business/jxstore/tempop/tempop.go b/business/jxstore/tempop/tempop.go index afd9ca273..1b6d6078a 100644 --- a/business/jxstore/tempop/tempop.go +++ b/business/jxstore/tempop/tempop.go @@ -1234,7 +1234,7 @@ func FixMtwmCategory(ctx *jxcontext.Context, mtwmStoreIDs []int, isAsync, isCont func JdStoreInfo1125() (hint string, err error) { fileName := "/Users/xujianhua/Downloads/老格恢复拓店进度.xlsx" db := dao.GetDB() - storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeList, err := dao.GetStoresMapList(db, []int{model.VendorIDJD}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err == nil { var validStoreList []*dao.StoreDetail for _, v := range storeList { diff --git a/business/model/dao/dao_order.go b/business/model/dao/dao_order.go index 38895b91d..6944301f9 100644 --- a/business/model/dao/dao_order.go +++ b/business/model/dao/dao_order.go @@ -1162,3 +1162,28 @@ func GetOrdersSupplementNoPage(db *DaoDB, ID int, storIDs, vendorIDs, statuss [] err = GetRows(db, &orderSupplementFee, sql, sqlParams...) return orderSupplementFee, err } + +func GetJxOrderCount(db *DaoDB, storeID int, orderID string, date time.Time) (count int, err error) { + if utils.IsTimeZero(date) { + date = time.Now() + } + sql := ` + SELECT COUNT(*) ct + FROM goods_order t1 + WHERE t1.vendor_id = ? AND t1.jx_store_id = ? AND (t1.status >= ? OR t1.order_seq > 0) AND t1.order_created_at >= ? AND t1.order_created_at < ? + ` + sqlParams := []interface{}{ + model.VendorIDJX, + storeID, + model.OrderStatusNew, + utils.Time2Date(date), + utils.Time2Date(date).Add(24 * time.Hour), + } + + if orderID != "" { + sql += " AND t1.vendor_order_id = ?" + sqlParams = append(sqlParams, orderID) + } + err = GetRow(db, &count, sql, sqlParams...) + return count, err +} diff --git a/business/model/dao/dao_order_test.go b/business/model/dao/dao_order_test.go index f1a1ee5ff..a30eed64a 100644 --- a/business/model/dao/dao_order_test.go +++ b/business/model/dao/dao_order_test.go @@ -47,3 +47,11 @@ func TestGetPendingFakeOrders(t *testing.T) { } t.Log(len(orderList)) } + +func TestGetJxOrderSeq(t *testing.T) { + count, err := GetJxOrderCount(GetDB(), 100118, "23423", time.Now()) + if err != nil { + t.Fatal(err) + } + t.Log(count) +} diff --git a/business/model/dao/event.go b/business/model/dao/event.go index 3ac394be5..a66d75978 100644 --- a/business/model/dao/event.go +++ b/business/model/dao/event.go @@ -95,6 +95,9 @@ func GetOperateEvents(db *DaoDB, name string, apiFunctions []string, operateType for _, v := range operateEventExt { accessUUidList = append(accessUUidList, v.AccessUUID) } + if len(accessUUidList) == 0 { + return operateEventExt, totalCount, err + } sql2 := ` SELECT * FROM operate_event_detail diff --git a/business/model/dao/store.go b/business/model/dao/store.go index 28cf4cd52..3d6e42a8b 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -211,7 +211,7 @@ func GetStoreCourierList(db *DaoDB, storeIDs []int, status, auditStatus int) (co return nil, err } -func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, pricePack string, mustDirty bool) (storeMapList []*model.StoreMap, err error) { +func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs, storeStatuss []int, status, isSync int, pricePack string, mustDirty bool) (storeMapList []*model.StoreMap, err error) { sql := ` SELECT t1.* FROM store_map t1 @@ -230,6 +230,10 @@ func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, sql += " AND t1.store_id IN (" + GenQuestionMarks(len(storeIDs)) + ")" sqlParams = append(sqlParams, storeIDs) } + if len(storeStatuss) > 0 { + sql += " AND t2.status IN (" + GenQuestionMarks(len(storeStatuss)) + ")" + sqlParams = append(sqlParams, storeStatuss) + } if status != model.StoreStatusAll { sql += " AND t1.status = ?" sqlParams = append(sqlParams, status) @@ -252,8 +256,8 @@ func GetStoresMapList2(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, return nil, err } -func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int, pricePack string) (storeMapList []*model.StoreMap, err error) { - return GetStoresMapList2(db, vendorIDs, storeIDs, status, isSync, pricePack, false) +func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs, storeStatuss []int, status, isSync int, pricePack string) (storeMapList []*model.StoreMap, err error) { + return GetStoresMapList2(db, vendorIDs, storeIDs, storeStatuss, status, isSync, pricePack, false) } func StoreMapList2Map(storeMapList []*model.StoreMap) (storeMapMap map[int][]*model.StoreMap) { diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index 9c41860d6..d6bbafb11 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -1253,7 +1253,7 @@ func UpdateActPrice4StoreSkuNameNew(db *DaoDB, storeIDs, skuIDs []int, skuNamesI vendorIDs = []int{actVendorID} } } else { - storeMapList, err := GetStoresMapList(db, nil, storeIDs, model.StoreStatusAll, model.StoreIsSyncAll, "") + storeMapList, err := GetStoresMapList(db, nil, storeIDs, nil, model.StoreStatusAll, model.StoreIsSyncAll, "") if err != nil { return err } diff --git a/business/model/dao/store_test.go b/business/model/dao/store_test.go index 7ed727a21..b77ffffba 100644 --- a/business/model/dao/store_test.go +++ b/business/model/dao/store_test.go @@ -40,7 +40,7 @@ func TestGetStoreList4Role(t *testing.T) { } func TestGetStoresMapList(t *testing.T) { - storeList, err := GetStoresMapList(GetDB(), nil, nil, model.StoreStatusClosed, model.StoreIsSyncYes, "") + storeList, err := GetStoresMapList(GetDB(), nil, nil, nil, model.StoreStatusClosed, model.StoreIsSyncYes, "") t.Log(utils.Format4Output(storeList, false)) if err != nil { t.Fatal(err) diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index b52033147..958326071 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -129,6 +129,7 @@ func (p *PurchaseHandler) updateStoreSkus(ctx *jxcontext.Context, storeID int, v api.EbaiAPI.SkuShopCategoryMap(strStoreID, utils.Str2Int64(storeSku.VendorSkuID), "", utils.Str2Int64(storeSku.VendorCatID), genSkuCatRank(storeSku)) }) } + err = nil } return failedList, err } @@ -157,6 +158,7 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v } else { vendorSkuID = jxutils.GenFakeID() } + err = nil storeSku.VendorSkuID = utils.Int64ToStr(vendorSkuID) return failedList, err } @@ -179,6 +181,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) // } } + err = nil } return failedList, err } @@ -193,7 +196,6 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr } else if len(vendorSkuIDs) == 1 { err = api.EbaiAPI.SkuOnlineOne(ctx.GetTrackInfo(), utils.Int2Str(storeID), vendorSkuIDs[0], "", "") if err != nil { - failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品状态") } return failedList, err @@ -213,6 +215,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr failedList = SelectStoreSkuListByOpResult(storeSkuList, opResult, storeID, model.VendorIDEBAI, "更新商品状态") // failedList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorSkuIDsFromOpResult(opResult)) } + err = nil } return failedList, err } @@ -243,6 +246,7 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品价格") } } + err = nil } return failedList, err } @@ -261,6 +265,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg failedList = putils.GetErrMsg2FailedSingleList(storeSkuList, err, storeID, model.VendorIDEBAI, "更新商品库存") } } + err = nil } return failedList, err } diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index d438c51dc..ec0e514bc 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -130,11 +130,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr } else { responseList, err2 = getAPI(vendorOrgCode).FakeBatchUpdateVendibility(ctx.GetTrackInfo(), "", vendorStoreID, skuVendibilityList, ctx.GetUserName()) } - if err = err2; isErrPartialFailed(err) { + if err = err2; err != nil { failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品状态") // successList = putils.UnselectStoreSkuListBySkuIDs(storeSkuList, utils.StringSlice2Int(getStrOutSkuIDs(responseList, false))) } } + err = nil return failedList, err } @@ -160,11 +161,12 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg } else { responseList, err2 = getAPI(vendorOrgCode).FakeUpdateVendorStationPrice(ctx.GetTrackInfo(), "", vendorStoreID, skuPriceInfoList) } - if err = err2; isErrPartialFailed(err) { + if err = err2; err != nil { failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品价格") } } } + err = nil return failedList, err } @@ -190,12 +192,13 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg } else { responseList, err2 = getAPI(vendorOrgCode).FakeBatchUpdateCurrentQtys(ctx.GetTrackInfo(), "", vendorStoreID, skuStockList, ctx.GetUserName()) } - if err = err2; isErrPartialFailed(err) { + if err = err2; err != nil { failedList = SelectStoreSkuListByResponseList(storeSkuList, responseList, storeID, model.VendorIDJD, "更新商品库存") // successList = putils.UnselectStoreSkuListBySkuIDs(storeSkuList, utils.StringSlice2Int(getStrOutSkuIDs(responseList, false))) } } } + err = nil return failedList, err } diff --git a/business/partner/purchase/jx/localjx/order.go b/business/partner/purchase/jx/localjx/order.go index 334a5a492..555dd753b 100644 --- a/business/partner/purchase/jx/localjx/order.go +++ b/business/partner/purchase/jx/localjx/order.go @@ -24,6 +24,8 @@ const ( PayWaitingTime = 10 * time.Minute // 等待支付的最长时间 DingShiDaMinTime = 1 * time.Hour + + specialStoreID = 100274 ) type JxSkuInfo struct { @@ -210,6 +212,10 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL now := time.Now() beginDate := utils.Time2Date(now) minDingShiDaTime := now.Add(DingShiDaMinTime) + viewShippingFee := "约6.6元配送费" + if storeID == specialStoreID { + viewShippingFee = "免费配送" + } for i := 0; i < 2; i++ { openTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.OpenTime1, beginDate) closeTime1 := jxutils.JxOperationTime2TimeByDate(storeDetail.CloseTime1, beginDate) @@ -222,7 +228,7 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{ ViewTime: "立即送出", UnixTime: 0, - ViewShippingFee: "约6.6元配送费", + ViewShippingFee: viewShippingFee, }) } deliverTimerList = append(deliverTimerList, timeInfo) @@ -234,7 +240,7 @@ func GetAvailableDeliverTime(ctx *jxcontext.Context, storeID int) (deliverTimerL timeInfo.TimeList = append(timeInfo.TimeList, &DeliveryTimeItem{ ViewTime: time2ShortTimeStr(deliveryTime), UnixTime: deliveryTime.Unix(), - ViewShippingFee: "约6.6元配送费", + ViewShippingFee: viewShippingFee, }) } } @@ -249,6 +255,10 @@ func OnPayFinished(orderPay *model.OrderPay) (err error) { if err == nil { db := dao.GetDB() dao.UpdateEntity(db, orderPay) + if count, err2 := dao.GetJxOrderCount(db, jxutils.GetSaleStoreIDFromOrder(order), order.VendorOrderID, order.OrderCreatedAt); err2 == nil { + order.OrderSeq = count + 1 + partner.CurOrderManager.UpdateOrderFields(order, []string{"OrderSeq"}) + } order.Status = model.OrderStatusNew order.VendorStatus = utils.Int2Str(model.OrderStatusNew) order.StatusTime = *orderPay.PayFinishedAt @@ -438,6 +448,9 @@ func generateOrder(ctx *jxcontext.Context, jxOrder *JxOrderInfo, addressID int64 outJxOrder.FreightPrice, _, err = delivery.CalculateDeliveryFee(dao.GetDB(), jxOrder.StoreID, "", jxutils.StandardCoordinate2Int(deliveryAddress.Lng), jxutils.StandardCoordinate2Int(deliveryAddress.Lat), model.CoordinateTypeMars, outJxOrder.Weight, checkTime) + if jxOrder.StoreID == specialStoreID { + outJxOrder.FreightPrice = 0 + } } else { outJxOrder.FreightPrice = 0 } diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 5c74f41a3..82d9e8e5d 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -393,7 +393,7 @@ func (c *PurchaseHandler) callbackMsg2Status(msg *mtwmapi.CallbackMsg) (orderSta } else if msg.Cmd == mtwmapi.MsgTypeOrderRefund { if notifyType == mtwmapi.NotifyTypeApply { vendorStatus = fakeUserApplyCancel - } else if notifyType == mtwmapi.NotifyTypeCancelRefund { + } else if notifyType == mtwmapi.NotifyTypeCancelRefund || notifyType == mtwmapi.NotifyTypeCancelRefundComplaint { vendorStatus = fakeUserUndoApplyCancel } else if notifyType == mtwmapi.NotifyTypeReject { vendorStatus = fakeRefuseUserApplyCancel diff --git a/business/partner/purchase/mtwm/order_comment.go b/business/partner/purchase/mtwm/order_comment.go index 4d3056ea5..5fbc55e7e 100644 --- a/business/partner/purchase/mtwm/order_comment.go +++ b/business/partner/purchase/mtwm/order_comment.go @@ -44,7 +44,7 @@ func formalizeTagList(mtwmTagList string) (outTagList string) { } func (c *PurchaseHandler) RefreshComment(fromTime, toTime time.Time) (err error) { - storeMapList, err2 := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDMTWM}, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") + storeMapList, err2 := dao.GetStoresMapList(dao.GetDB(), []int{model.VendorIDMTWM}, nil, nil, model.StoreStatusAll, model.StoreIsSyncYes, "") if err = err2; err != nil { return err } diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index 320260e29..0ec935cf4 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -314,6 +314,12 @@ func (p *PurchaseHandler) createOrUpdateStoreSkus(ctx *jxcontext.Context, storeI failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, syncType) // successList = putils.UnselectStoreSkuSyncListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, syncType) + } + err = nil } } } @@ -348,6 +354,7 @@ func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, v failedList = SelectStoreSkuListByFoodList(storeSkuList, myMap["retail_error_list"], storeID, model.VendorIDMTWM, "批量删除商品") } } + err = nil } } return failedList, err @@ -389,6 +396,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, vendorOr failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品状态") // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品状态") + } + err = nil } } return failedList, err @@ -402,6 +415,12 @@ func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, vendorOrg if len(failedFoodList) > 0 { failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品价格") } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品价格") + } + err = nil } } return failedList, err @@ -418,6 +437,12 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg //if err = putils.GenPartialFailedErr(failedFoodList, len(failedFoodList)); err != nil { // successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getAppFoodCodeList(failedFoodList)) // } + } else if err2 != nil && len(failedFoodList) == 0 { + if errExt, ok := err2.(*utils.ErrorWithCode); ok { + err = utils.UnmarshalUseNumber([]byte(errExt.ErrMsg()), &failedFoodList) + failedList = SelectStoreSkuListByFoodList(storeSkuList, failedFoodList, storeID, model.VendorIDMTWM, "更新商品库存") + } + err = nil } } return failedList, err diff --git a/controllers/auth2.go b/controllers/auth2.go index 7bd189d9d..c9ce8311a 100644 --- a/controllers/auth2.go +++ b/controllers/auth2.go @@ -97,7 +97,14 @@ func (c *Auth2Controller) Login() { params.AuthSecret = GetComposedCode(&c.Controller, params.AuthSecret) } ctx := auth2.NewContext(c.Ctx.ResponseWriter, c.Ctx.Request) - retVal, err = auth2.Login(ctx, params.AuthType, params.AuthID, params.AuthIDType, params.AuthSecret) + authInfo, err := auth2.Login(ctx, params.AuthType, params.AuthID, params.AuthIDType, params.AuthSecret) + // TODO 兼容没有取到authid2的错误 + if err == nil && authInfo.AuthBindInfo != nil { + if authInfo.AuthBindInfo.AuthID2 == "" { + authInfo.AuthBindInfo.AuthID2 = authInfo.AuthBindInfo.AuthID + } + retVal = authInfo + } return retVal, "", err }) } diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index cfbb04f7d..62b064f54 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -9,6 +9,7 @@ import ( "git.rosy.net.cn/jx-callback/business/authz/autils" "git.rosy.net.cn/jx-callback/business/jxstore/cms" "git.rosy.net.cn/jx-callback/business/jxutils" + "git.rosy.net.cn/jx-callback/business/jxutils/jsonerr" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "github.com/astaxie/beego" @@ -273,10 +274,22 @@ func (c *User2Controller) TransferLegacyWeixins() { // @router /AddMyDeliveryAddress [post] func (c *User2Controller) AddMyDeliveryAddress() { c.callAddMyDeliveryAddress(func(params *tUser2AddMyDeliveryAddressParams) (retVal interface{}, errCode string, err error) { - var address *model.UserDeliveryAddress - if err = utils.Map2StructByJson(params.MapData, &address, true); err == nil { - retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address) + // var address *model.UserDeliveryAddress + // if err = utils.Map2StructByJson(params.MapData, &address, true); err == nil { + // retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address) + // } + address := &model.UserDeliveryAddress{ + ConsigneeName: params.ConsigneeName, + ConsigneeMobile: params.ConsigneeMobile, + Address: params.Address, + DetailAddress: params.DetailAddress, + Lng: params.Lng, + Lat: params.Lat, + Tag: params.Tag, + Remark: params.Remark, + IsDefault: int8(params.IsDefault), } + retVal, err = cms.AddMyDeliveryAddress(params.Ctx, address) return retVal, "", err }) } @@ -406,7 +419,12 @@ func (c *Auth2Controller) UpdateUserByMiniInfo() { if userInfo.PurePhoneNumber != "" { user.Mobile = utils.String2Pointer(userInfo.PurePhoneNumber) } - dao.UpdateEntity(dao.GetDB(), user) + _, err = dao.UpdateEntity(dao.GetDB(), user) + if err != nil && dao.IsDuplicateError(err) { + if mobileAuth, err2 := auth2.LoginInternal(params.Ctx.Context, auth2.AuthTypeMobile, userInfo.PurePhoneNumber, auth2.UserIDMobile, auth2.InternalAuthSecret); err2 == nil { + err = jsonerr.New(mobileAuth, model.ErrCodeJsonUserAlreadyExist) + } + } } } }