Accept Merge Request #170: (su -> mark)
Merge Request: 报警汇总,同步错误返回修改 Created By: @苏尹岚 Accepted By: @苏尹岚 URL: https://rosydev.coding.net/p/jx-callback/d/jx-callback/git/merge/170
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -89,7 +89,7 @@ var (
|
||||
"00:01:00",
|
||||
}
|
||||
sendSecKillWarnList = []string{
|
||||
"8:30:00",
|
||||
"9:00:00",
|
||||
}
|
||||
|
||||
autoSaleStoreSkuTimeList = []string{
|
||||
|
||||
@@ -51,7 +51,7 @@ const (
|
||||
|
||||
var (
|
||||
scoreStoreTimeList = []string{
|
||||
"22:00:00",
|
||||
"23:00:00",
|
||||
}
|
||||
scoreStoreCheckTimeEnd = "23:30:00"
|
||||
fullVendorList = map[int]bool{
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user