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/tao_vegetable"
"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"
"math"
"strconv"
@@ -456,7 +457,7 @@ func (c *OrderManager) SaveOrder(order *model.GoodsOrder, isAdjust bool, db *dao
// 宠物会出现美团多门店对应京西一个门店的库存数,即同一老板开多家店,单只有一个库存门店,
// 所以不同门店同一品牌,最终商品库存只扣除门店ID最小的商品库存(最早创建门店,主店)
// 最好商品由主店创建,复制到分店,分店本地同步状态不在打开
err = ModifyOrderSkusStock(db, order, false)
err = ModifyPetOrderSkusStock(db, order, false)
}
}
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)
return nil
}
storeIdList := make([]int, 0, len(storeList))
for _, v := range storeList {
storeIdList = append(storeIdList, v.ID)
}
skus := order.Skus
skuIDList := make([]int, 0, len(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 {
continue
}
storeSku, stock := storeSkus[0], 0
if storeSku.Stock == 0 {
continue
for _, ss := range storeSkus {
if ss.StoreID == storeList[0].ID {
storeSku = ss
stock = ss.Stock
break
}
}
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
}
}
storeSku.Stock = stock
db.Db.Update(storeSku, "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
}
skuIDList = append(skuIDList, sku.SkuID)
dao.ExecuteSQL(db, `UPDATE thing_map SET sync_status = 1 WHERE vendor_thing_id = ?`, sku.SkuID)
}
_, 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
}

View File

@@ -2,6 +2,7 @@ package orderman
import (
"encoding/json"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"math/rand"
"time"
@@ -16,23 +17,6 @@ import (
"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 {
DelayGapBegin int `json:"delayGapBegin"`
DelayGapEnd int `json:"delayGapEnd"`
@@ -84,13 +68,13 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
isNewComment = true
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.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)
}
}
}
}
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 {
comment2.Createtime = utils.Time2Str(orderComment.CommentCreatedAt)
comment2.Score = int(orderComment.Score)
@@ -98,7 +82,7 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
comment2.Vendertags = orderComment.TagList
comment2.Msg = orderComment.OriginalMsg
comment2.Status = COMMENT_NOT_RESOLVED
comment2.Status = cms.COMMENT_NOT_RESOLVED
comment2.OrderFlag = utils.Int2Str(orderComment.VendorID)
comment2.Maxmodifytime = int(orderComment.ModifyDuration)
comment2.VendorOrderId = orderComment.VendorOrderID2
@@ -132,10 +116,10 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
comment2.Jxstoreid = utils.Int2Str(orderComment.StoreID)
}
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.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
//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.UpdatedScorecontent = orderComment.Content
comment2.UpdatedVendertags = orderComment.TagList
comment2.Status = COMMENT_RESOLVED
comment2.Status = cms.COMMENT_RESOLVED
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.PushNo++
@@ -165,7 +149,7 @@ func (c *OrderManager) OnOrderComments(orderCommentList []*model.OrderComment) (
} else {
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"
"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/jdapi"
"git.rosy.net.cn/baseapi/utils"
"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/ddmsg"
"git.rosy.net.cn/jx-callback/business/jxutils/excel"
@@ -72,6 +70,23 @@ const (
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 {
model.Store
@@ -2027,7 +2042,7 @@ func TmpGetJxBadCommentsNo(ctx *jxcontext.Context, storeID int) (count int, err
SELECT COUNT(*) ct
FROM jx_bad_comments
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
}
return count, err
@@ -2091,9 +2106,9 @@ func TmpGetJxBadCommentsByStoreId(ctx *jxcontext.Context, keyword string, storeI
sql += " AND t1.status = ?"
if commentType == GET_BAD_COMMENTS_TYPE {
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 {
sqlParams = append(sqlParams, orderman.COMMENT_RESOLVED)
sqlParams = append(sqlParams, COMMENT_RESOLVED)
}
}
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 == "" {
hint = utils.Int64ToStr(num)
}
AddEventDetail(db, ctx, model.OperateUpdate, model.VendorIDUnknown, model.ThingTypeSku, storeIDs[0], "", "商品操作记录:"+utils.Format4Output(skuBindInfos, false))
}
}
return hint, err