This commit is contained in:
邹宗楠
2025-02-19 14:19:18 +08:00
parent e6153738c9
commit 902ce6e150
4 changed files with 70 additions and 50 deletions

View File

@@ -7,6 +7,7 @@ import (
"git.rosy.net.cn/baseapi/platformapi/mtwmapi" "git.rosy.net.cn/baseapi/platformapi/mtwmapi"
"git.rosy.net.cn/baseapi/platformapi/tao_vegetable" "git.rosy.net.cn/baseapi/platformapi/tao_vegetable"
"git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api" "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/tiktok_api"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm" "git.rosy.net.cn/jx-callback/business/partner/purchase/mtwm"
"math" "math"
"strconv" "strconv"
@@ -456,7 +457,7 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
// 宠物会出现美团多门店对应京西一个门店的库存数,即同一老板开多家店,单只有一个库存门店, // 宠物会出现美团多门店对应京西一个门店的库存数,即同一老板开多家店,单只有一个库存门店,
// 所以不同门店同一品牌,最终商品库存只扣除门店ID最小的商品库存(最早创建门店,主店) // 所以不同门店同一品牌,最终商品库存只扣除门店ID最小的商品库存(最早创建门店,主店)
// 最好商品由主店创建,复制到分店,分店本地同步状态不在打开 // 最好商品由主店创建,复制到分店,分店本地同步状态不在打开
err = ModifyOrderSkusStock(db, order, false) err = ModifyPetOrderSkusStock(db, order, false)
} }
} }
if err == nil { if err == nil {
@@ -520,38 +521,57 @@ func ModifyPetOrderSkusStock(db *dao.DaoDB, order *model.GoodsOrder, isAdd bool)
globals.SugarLogger.Errorf("根据品牌获取门店信息异常,未获取到门店列表[storeID:%d,brandID:%d]", store.ID, store.BrandID) globals.SugarLogger.Errorf("根据品牌获取门店信息异常,未获取到门店列表[storeID:%d,brandID:%d]", store.ID, store.BrandID)
return nil return nil
} }
storeIdList := make([]int, 0, len(storeList))
for _, v := range storeList {
storeIdList = append(storeIdList, v.ID)
}
skus := order.Skus skus := order.Skus
skuIDList := make([]int, 0, len(skus))
for _, sku := range skus { for _, sku := range skus {
storeSkus, _ := dao.GetStoresSkusInfo(db, []int{storeList[0].ID}, []int{sku.SkuID}) storeSkus, _ := dao.GetStoresSkusInfo(db, storeIdList, []int{sku.SkuID})
if len(storeSkus) == 0 { if len(storeSkus) == 0 {
continue continue
} }
storeSku, stock := storeSkus[0], 0 storeSku, stock := storeSkus[0], 0
if storeSku.Stock == 0 { for _, ss := range storeSkus {
continue if ss.StoreID == storeList[0].ID {
storeSku = ss
stock = ss.Stock
break
}
} }
if isAdd { if isAdd {
stock = storeSku.Stock + sku.Count stock = storeSku.Stock + sku.Count
} else { } else {
stock = storeSku.Stock - sku.Count stock = storeSku.Stock - sku.Count
//如果是进货的订单,进货方门店对应商品要加上这么多库存
if order.OrderType == model.OrderTypeSupplyGoods {
storeSkus2, _ := dao.GetStoresSkusInfo(db, []int{order.FromStoreID}, []int{sku.SkuID})
if len(storeSkus2) > 0 {
storeSku3 := storeSkus2[0]
storeSku3.Stock = storeSku3.Stock + sku.Count
db.Db.Update(storeSku3, "Stock")
} }
//if isAdd {
// stock = storeSku.Stock + sku.Count
//} else {
// stock = storeSku.Stock - sku.Count
// //如果是进货的订单,进货方门店对应商品要加上这么多库存
// //if order.OrderType == model.OrderTypeSupplyGoods {
// // storeSkus2, _ := dao.GetStoresSkusInfo(db, []int{order.FromStoreID}, []int{sku.SkuID})
// // if len(storeSkus2) > 0 {
// // storeSku3 := storeSkus2[0]
// // storeSku3.Stock = storeSku3.Stock + sku.Count
// // db.Db.Update(storeSku3, "Stock")
// // }
// //}
// //realStock := checkPriceDefendOrderByStock(db, jxutils.GetSaleStoreIDFromOrder(order), sku.SkuID, stock, storeSku.JxPrice)
// //if realStock != -1 {
// // stock = realStock
// //}
//}
if stock <= model.NO {
stock = 0
} }
realStock := checkPriceDefendOrderByStock(db, jxutils.GetSaleStoreIDFromOrder(order), sku.SkuID, stock, storeSku.JxPrice) skuIDList = append(skuIDList, sku.SkuID)
if realStock != -1 { dao.ExecuteSQL(db, `UPDATE thing_map SET sync_status = 1 WHERE vendor_thing_id = ?`, sku.SkuID)
stock = realStock
}
}
storeSku.Stock = stock
db.Db.Update(storeSku, "Stock")
} }
_, err = cms.CurVendorSync.SyncStoresSkus2(jxcontext.AdminCtx, nil, 0, db, nil, storeIdList, false, skuIDList, nil, model.SyncFlagStoreSkuModifiedMask, true, true)
_, err = cms.SyncSkus(jxcontext.AdminCtx, nil, nil, []string{"309558"}, nil, skuIDList, true)
return err return err
} }

View File

@@ -2,6 +2,7 @@ package orderman
import ( import (
"encoding/json" "encoding/json"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"math/rand" "math/rand"
"time" "time"
@@ -16,23 +17,6 @@ import (
"git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals"
) )
const (
COMMENT_NOT_RESOLVED = 0 //未解决的差评状态
COMMENT_RESOLVED = 1 //已解决的差评状态
JX_BAD_COMMENTS_MAX_LEVEL = 2 // 差评最大分
JX_MIDDLE_COMMENTS_MAX_LEVEL = 4 // 中评最大分
COMMENTS_SCORE_ONE_ORTWO_BEGIN_DELAY_TIME = 1 * 60 //评论回复一星或二星回复延迟开始时间区间
COMMENTS_SCORE_ONE_ORTWO_END_DELAY_TIME = 3 * 60 //评论回复一星或二星回复延迟结束时间区间
COMMENTS_SCORE_THREE_BEGIN_DELAY_TIME = 2 * 60 //评论回复三星回复延迟开始时间区间
COMMENTS_SCORE_THREE_END_DELAY_TIME = 4 * 60 //评论回复三星回复延迟结束时间区间
COMMENTS_SCORE_FOUR_ORFIVE_BEGIN_DELAY_TIME = 2 * 60 //评论回复四星或五星回复延迟开始时间区间
COMMENTS_SCORE_FOUR_ORFIVE_END_DELAY_TIME = 5 * 60 //评论回复四星或五星回复延迟结束时间区间
MAX_REAPLY_TIME = 18 * time.Hour
)
type tReplyConfig struct { type tReplyConfig struct {
DelayGapBegin int `json:"delayGapBegin"` DelayGapBegin int `json:"delayGapBegin"`
DelayGapEnd int `json:"delayGapEnd"` DelayGapEnd int `json:"delayGapEnd"`
@@ -84,13 +68,13 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
isNewComment = true isNewComment = true
if orderComment.IsReplied == 0 && time.Now().Sub(orderComment.CommentCreatedAt) < time.Duration(orderComment.ModifyDuration)*time.Hour { if orderComment.IsReplied == 0 && time.Now().Sub(orderComment.CommentCreatedAt) < time.Duration(orderComment.ModifyDuration)*time.Hour {
if storeDetail, err2 := dao.GetStoreDetail(db, orderComment.StoreID, orderComment.VendorID, ""); err2 == nil { if storeDetail, err2 := dao.GetStoreDetail(db, orderComment.StoreID, orderComment.VendorID, ""); err2 == nil {
if storeDetail.AutoReplyType == model.AutoReplyAll || orderComment.Score > JX_BAD_COMMENTS_MAX_LEVEL && storeDetail.AutoReplyType == model.AutoReplyGoodComment { if storeDetail.AutoReplyType == model.AutoReplyAll || orderComment.Score > cms.JX_BAD_COMMENTS_MAX_LEVEL && storeDetail.AutoReplyType == model.AutoReplyGoodComment {
c.replyOrderComment(storeDetail.VendorOrgCode, orderComment) c.replyOrderComment(storeDetail.VendorOrgCode, orderComment)
} }
} }
} }
} }
if isNewComment /*&& orderComment.Score <= JX_BAD_COMMENTS_MAX_LEVEL*/ || !isNewComment && orderComment.Score > JX_BAD_COMMENTS_MAX_LEVEL { // 如果是直接非差评,或补评仍然是差评,忽略 if isNewComment /*&& orderComment.Score <= JX_BAD_COMMENTS_MAX_LEVEL*/ || !isNewComment && orderComment.Score > cms.JX_BAD_COMMENTS_MAX_LEVEL { // 如果是直接非差评,或补评仍然是差评,忽略
if isNewComment { if isNewComment {
comment2.Createtime = utils.Time2Str(orderComment.CommentCreatedAt) comment2.Createtime = utils.Time2Str(orderComment.CommentCreatedAt)
comment2.Score = int(orderComment.Score) comment2.Score = int(orderComment.Score)
@@ -98,7 +82,7 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
comment2.Vendertags = orderComment.TagList comment2.Vendertags = orderComment.TagList
comment2.Msg = orderComment.OriginalMsg comment2.Msg = orderComment.OriginalMsg
comment2.Status = COMMENT_NOT_RESOLVED comment2.Status = cms.COMMENT_NOT_RESOLVED
comment2.OrderFlag = utils.Int2Str(orderComment.VendorID) comment2.OrderFlag = utils.Int2Str(orderComment.VendorID)
comment2.Maxmodifytime = int(orderComment.ModifyDuration) comment2.Maxmodifytime = int(orderComment.ModifyDuration)
comment2.VendorOrderId = orderComment.VendorOrderID2 comment2.VendorOrderId = orderComment.VendorOrderID2
@@ -132,10 +116,10 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
comment2.Jxstoreid = utils.Int2Str(orderComment.StoreID) comment2.Jxstoreid = utils.Int2Str(orderComment.StoreID)
} }
comment2.Userphone = orderComment.ConsigneeMobile comment2.Userphone = orderComment.ConsigneeMobile
if comment2.Jxstoreid != "" && orderComment.Score <= JX_MIDDLE_COMMENTS_MAX_LEVEL && time.Now().Sub(orderComment.CommentCreatedAt) < MAX_REAPLY_TIME && order != nil { if comment2.Jxstoreid != "" && orderComment.Score <= cms.JX_MIDDLE_COMMENTS_MAX_LEVEL && time.Now().Sub(orderComment.CommentCreatedAt) < cms.MAX_REAPLY_TIME && order != nil {
comment2.LastPushTime = utils.Time2Str(time.Now()) comment2.LastPushTime = utils.Time2Str(time.Now())
comment2.PushNo = 1 comment2.PushNo = 1
weixinmsg.PushJDBadCommentToWeiXin(comment2, orderComment.Score <= JX_BAD_COMMENTS_MAX_LEVEL, order) weixinmsg.PushJDBadCommentToWeiXin(comment2, orderComment.Score <= cms.JX_BAD_COMMENTS_MAX_LEVEL, order)
} }
} else { // 修改评价高于JX_BAD_COMMENTS_MAX_LEVEL } else { // 修改评价高于JX_BAD_COMMENTS_MAX_LEVEL
//if orderComment.CommentCreatedAt.Sub(str2Time(comment2.Createtime)) == 0 || //if orderComment.CommentCreatedAt.Sub(str2Time(comment2.Createtime)) == 0 ||
@@ -147,9 +131,9 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
comment2.UpdatedScore = int(orderComment.Score) comment2.UpdatedScore = int(orderComment.Score)
comment2.UpdatedScorecontent = orderComment.Content comment2.UpdatedScorecontent = orderComment.Content
comment2.UpdatedVendertags = orderComment.TagList comment2.UpdatedVendertags = orderComment.TagList
comment2.Status = COMMENT_RESOLVED comment2.Status = cms.COMMENT_RESOLVED
comment2.VendorOrderId = orderComment.VendorOrderID2 comment2.VendorOrderId = orderComment.VendorOrderID2
if comment2.Jxstoreid != "" && orderComment.Score <= JX_MIDDLE_COMMENTS_MAX_LEVEL && time.Now().Sub(orderComment.CommentCreatedAt) < MAX_REAPLY_TIME { if comment2.Jxstoreid != "" && orderComment.Score <= cms.JX_MIDDLE_COMMENTS_MAX_LEVEL && time.Now().Sub(orderComment.CommentCreatedAt) < cms.MAX_REAPLY_TIME {
comment2.LastPushTime = utils.Time2Str(time.Now()) comment2.LastPushTime = utils.Time2Str(time.Now())
comment2.PushNo++ comment2.PushNo++
@@ -165,7 +149,7 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
} else { } else {
order, _ = partner.CurOrderManager.LoadOrder(orderComment.VendorOrderID, orderComment.VendorID) order, _ = partner.CurOrderManager.LoadOrder(orderComment.VendorOrderID, orderComment.VendorID)
} }
weixinmsg.PushJDBadCommentToWeiXin(&comment3, orderComment.Score <= JX_BAD_COMMENTS_MAX_LEVEL, order) weixinmsg.PushJDBadCommentToWeiXin(&comment3, orderComment.Score <= cms.JX_BAD_COMMENTS_MAX_LEVEL, order)
} }
//} //}
} }

View File

@@ -43,13 +43,11 @@ import (
"github.com/360EntSecGroup-Skylar/excelize" "github.com/360EntSecGroup-Skylar/excelize"
"git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi"
"git.rosy.net.cn/jx-callback/business/authz/autils"
"git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
"git.rosy.net.cn/baseapi/platformapi/dingdingapi" "git.rosy.net.cn/baseapi/platformapi/dingdingapi"
"git.rosy.net.cn/baseapi/platformapi/jdapi" "git.rosy.net.cn/baseapi/platformapi/jdapi"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/baseapi/utils/errlist" "git.rosy.net.cn/baseapi/utils/errlist"
"git.rosy.net.cn/jx-callback/business/authz/autils"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/jxutils/ddmsg" "git.rosy.net.cn/jx-callback/business/jxutils/ddmsg"
"git.rosy.net.cn/jx-callback/business/jxutils/excel" "git.rosy.net.cn/jx-callback/business/jxutils/excel"
@@ -72,6 +70,23 @@ const (
GET_FIXED_COMMENTS_TYPE = 2 //获取已解决评论的标志 GET_FIXED_COMMENTS_TYPE = 2 //获取已解决评论的标志
) )
const (
COMMENT_NOT_RESOLVED = 0 //未解决的差评状态
COMMENT_RESOLVED = 1 //已解决的差评状态
JX_BAD_COMMENTS_MAX_LEVEL = 2 // 差评最大分
JX_MIDDLE_COMMENTS_MAX_LEVEL = 4 // 中评最大分
COMMENTS_SCORE_ONE_ORTWO_BEGIN_DELAY_TIME = 1 * 60 //评论回复一星或二星回复延迟开始时间区间
COMMENTS_SCORE_ONE_ORTWO_END_DELAY_TIME = 3 * 60 //评论回复一星或二星回复延迟结束时间区间
COMMENTS_SCORE_THREE_BEGIN_DELAY_TIME = 2 * 60 //评论回复三星回复延迟开始时间区间
COMMENTS_SCORE_THREE_END_DELAY_TIME = 4 * 60 //评论回复三星回复延迟结束时间区间
COMMENTS_SCORE_FOUR_ORFIVE_BEGIN_DELAY_TIME = 2 * 60 //评论回复四星或五星回复延迟开始时间区间
COMMENTS_SCORE_FOUR_ORFIVE_END_DELAY_TIME = 5 * 60 //评论回复四星或五星回复延迟结束时间区间
MAX_REAPLY_TIME = 18 * time.Hour
)
type StoreExt struct { type StoreExt struct {
model.Store model.Store
@@ -2027,7 +2042,7 @@ func TmpGetJxBadCommentsNo(ctx *jxcontext.Context, storeID int) (count int, err
SELECT COUNT(*) ct SELECT COUNT(*) ct
FROM jx_bad_comments FROM jx_bad_comments
WHERE status = ? AND jxstoreid = ? AND score <= ? WHERE status = ? AND jxstoreid = ? AND score <= ?
`, orderman.COMMENT_NOT_RESOLVED, utils.Int2Str(storeID), orderman.JX_BAD_COMMENTS_MAX_LEVEL); err == nil { `, COMMENT_NOT_RESOLVED, utils.Int2Str(storeID), JX_BAD_COMMENTS_MAX_LEVEL); err == nil {
count = ctInfo.Ct count = ctInfo.Ct
} }
return count, err return count, err
@@ -2091,9 +2106,9 @@ func TmpGetJxBadCommentsByStoreId(ctx *jxcontext.Context, keyword string, storeI
sql += " AND t1.status = ?" sql += " AND t1.status = ?"
if commentType == GET_BAD_COMMENTS_TYPE { if commentType == GET_BAD_COMMENTS_TYPE {
sql += " AND t1.score <= ?" sql += " AND t1.score <= ?"
sqlParams = append(sqlParams, orderman.COMMENT_NOT_RESOLVED, orderman.JX_BAD_COMMENTS_MAX_LEVEL) sqlParams = append(sqlParams, COMMENT_NOT_RESOLVED, JX_BAD_COMMENTS_MAX_LEVEL)
} else { } else {
sqlParams = append(sqlParams, orderman.COMMENT_RESOLVED) sqlParams = append(sqlParams, COMMENT_RESOLVED)
} }
} }
if !utils.IsTimeZero(fromTime) { if !utils.IsTimeZero(fromTime) {

View File

@@ -1770,6 +1770,7 @@ func UpdateStoresSkus(ctx *jxcontext.Context, causeFlag int, storeIDs []int, sku
if num == 0 || !isAsync || hint == "" { if num == 0 || !isAsync || hint == "" {
hint = utils.Int64ToStr(num) hint = utils.Int64ToStr(num)
} }
AddEventDetail(db, ctx, model.OperateUpdate, model.VendorIDUnknown, model.ThingTypeSku, storeIDs[0], "", "商品操作记录:"+utils.Format4Output(skuBindInfos, false))
} }
} }
return hint, err return hint, err