Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
黄成意
/
go_sku_server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
56c2b210
authored
Sep 05, 2023
by
杨树贤
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'ysx-商品活动价逻辑修改-20230823'
parents
94765a4c
0481f707
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
61 additions
and
15 deletions
model/activity.go
service/service_activity.go
service/service_ly.go
service/service_ly_common.go
service/service_price.go
service/service_zy_common.go
model/activity.go
View file @
56c2b210
...
...
@@ -44,6 +44,7 @@ type Activity struct {
ExcludeStandardBrandIdList
[]
string
CurrencyRmb
int
`json:"currency_rmb"`
CurrencyUs
int
`json:"currency_us"`
UseType
int
`json:"use_type"`
}
type
ActivityItem
struct
{
...
...
@@ -58,9 +59,10 @@ type ActivityItem struct {
AddTime
int
`json:"add_time"`
}
//用于检查是否有活动情况的结构体
//
用于检查是否有活动情况的结构体
type
ActivityCheckData
struct
{
SupplierId
int
GoodsName
string
BrandId
int
StandardBrandId
int
GoodsId
string
...
...
service/service_activity.go
View file @
56c2b210
...
...
@@ -5,6 +5,7 @@ import (
"fmt"
"go_sku_server/model"
"go_sku_server/pkg/gredis"
"strconv"
"strings"
"time"
...
...
@@ -16,7 +17,7 @@ import (
type
ActivityService
struct
{
}
//
获取活动信息,目前是包括促销活动(系数打折)以及满赠活动
//
获取活动信息,目前是包括促销活动(系数打折)以及满赠活动
func
(
as
*
ActivityService
)
GetActivityData
(
checkData
model
.
ActivityCheckData
)
(
priceActivity
model
.
PriceActivity
,
giftActivity
model
.
GiftActivity
)
{
supplierId
:=
checkData
.
SupplierId
redisCon
:=
gredis
.
Conn
(
"default_r"
)
...
...
@@ -36,7 +37,7 @@ func (as *ActivityService) GetActivityData(checkData model.ActivityCheckData) (p
return
}
//
获取满赠活动信息
//
获取满赠活动信息
func
(
as
*
ActivityService
)
GetGiftActivity
(
checkData
model
.
ActivityCheckData
,
activities
[]
model
.
Activity
)
(
giftActivity
model
.
GiftActivity
)
{
var
hasActivity
bool
nowTimestamp
:=
int
(
time
.
Now
()
.
Unix
())
...
...
@@ -105,6 +106,8 @@ func (as *ActivityService) GetGiftActivity(checkData model.ActivityCheckData, ac
}
func
(
as
*
ActivityService
)
GetPriceActivity
(
checkData
model
.
ActivityCheckData
,
activities
[]
model
.
Activity
)
(
priceActivity
model
.
PriceActivity
)
{
redisConn
:=
gredis
.
Conn
(
"default_r"
)
defer
redisConn
.
Close
()
var
hasActivity
bool
nowTimestamp
:=
int
(
time
.
Now
()
.
Unix
())
for
_
,
activity
:=
range
activities
{
...
...
@@ -128,7 +131,23 @@ func (as *ActivityService) GetPriceActivity(checkData model.ActivityCheckData, a
//如果是专卖,则要去判断canal,如果是自营,则去判断分类
if
checkData
.
SupplierId
==
17
{
if
as
.
CheckCanal
(
checkData
.
Canal
,
activity
)
{
if
checkData
.
Canal
!=
""
{
if
!
as
.
CheckCanal
(
checkData
.
Canal
,
activity
)
{
continue
}
}
if
activity
.
UseType
==
2
{
//判断商品名称是否在redis
redisKey
:=
"lie_activity_and_coupon_sku_"
+
strconv
.
Itoa
(
activity
.
ActivityId
)
exists
,
_
:=
redis
.
Bool
(
redisConn
.
Do
(
"hexists"
,
redisKey
,
checkData
.
GoodsName
))
//fmt.Println(checkData.GoodsName)
//fmt.Println(exists)
if
exists
{
hasActivity
=
true
goto
INFO
}
}
else
{
//不等于2都是根据品牌来,因为老数据以前也只有品牌,0和1都是品牌
//品牌不为空,还要去判断品牌,是同时满足的关系
if
activity
.
StandardBrandIds
!=
""
{
//判断是否是搞活动的品牌
...
...
@@ -141,6 +160,7 @@ func (as *ActivityService) GetPriceActivity(checkData model.ActivityCheckData, a
goto
INFO
}
}
}
else
if
checkData
.
SupplierId
==
10000
{
//自营活动特殊判断
//判断活动指定的渠道编码,品牌,分类id,如果都为空,那么这个活动可以理解为整个供应商了,上面的排除已经会提前去判断了
...
...
@@ -162,11 +182,30 @@ func (as *ActivityService) GetPriceActivity(checkData model.ActivityCheckData, a
}
}
}
else
{
//这是针对代购的
//判断是否是搞活动的品牌
if
activity
.
UseType
==
2
{
//判断商品名称是否在redis
redisKey
:=
"lie_activity_and_coupon_sku_"
+
strconv
.
Itoa
(
activity
.
ActivityId
)
exists
,
_
:=
redis
.
Bool
(
redisConn
.
Do
(
"hexists"
,
redisKey
,
checkData
.
GoodsName
))
if
exists
{
hasActivity
=
true
goto
INFO
}
}
else
{
//不等于2都是根据品牌来,因为老数据以前也只有品牌,0和1都是品牌
//品牌不为空,还要去判断品牌,是同时满足的关系
if
activity
.
StandardBrandIds
!=
""
{
//判断是否是搞活动的品牌
if
as
.
CheckStandardBrand
(
checkData
.
StandardBrandId
,
activity
)
{
hasActivity
=
true
goto
INFO
}
}
else
{
hasActivity
=
true
goto
INFO
}
}
}
INFO
:
if
hasActivity
{
...
...
@@ -203,7 +242,7 @@ func (as *ActivityService) GetPriceActivity(checkData model.ActivityCheckData, a
return
}
//
检查是否属于被排除的品牌
//
检查是否属于被排除的品牌
func
(
as
*
ActivityService
)
CheckExcludeBrand
(
brandId
int
,
activity
model
.
Activity
)
bool
{
if
brandId
==
0
{
return
false
...
...
@@ -218,7 +257,7 @@ func (as *ActivityService) CheckExcludeBrand(brandId int, activity model.Activit
return
false
}
//
检查是否属于被排除的标准品牌
//
检查是否属于被排除的标准品牌
func
(
as
*
ActivityService
)
CheckExcludeStandardBrand
(
standardBrandId
int
,
activity
model
.
Activity
)
bool
{
if
standardBrandId
==
0
{
return
false
...
...
@@ -233,7 +272,7 @@ func (as *ActivityService) CheckExcludeStandardBrand(standardBrandId int, activi
return
false
}
//
检查是否属于被排除的sku
//
检查是否属于被排除的sku
func
(
as
*
ActivityService
)
CheckExcludeSku
(
skuId
string
,
activity
model
.
Activity
)
bool
{
if
skuId
==
""
{
return
false
...
...
@@ -247,7 +286,7 @@ func (as *ActivityService) CheckExcludeSku(skuId string, activity model.Activity
return
false
}
//
检查是否属于活动分类(只有自营需要判断)
//
检查是否属于活动分类(只有自营需要判断)
func
(
as
*
ActivityService
)
CheckClass
(
classId
int
,
activity
model
.
Activity
)
bool
{
if
classId
==
0
{
return
false
...
...
@@ -262,7 +301,7 @@ func (as *ActivityService) CheckClass(classId int, activity model.Activity) bool
return
false
}
//
检查是否属于活动品牌
//
检查是否属于活动品牌
func
(
as
*
ActivityService
)
CheckBrand
(
brandId
int
,
activity
model
.
Activity
)
bool
{
if
brandId
==
0
{
return
false
...
...
@@ -277,7 +316,7 @@ func (as *ActivityService) CheckBrand(brandId int, activity model.Activity) bool
return
false
}
//
检测是否属于活动标准品牌
//
检测是否属于活动标准品牌
func
(
as
*
ActivityService
)
CheckStandardBrand
(
standardBrandId
int
,
activity
model
.
Activity
)
bool
{
if
standardBrandId
==
0
{
return
false
...
...
@@ -292,7 +331,7 @@ func (as *ActivityService) CheckStandardBrand(standardBrandId int, activity mode
return
false
}
//
检查是否属于供应商渠道
//
检查是否属于供应商渠道
func
(
as
*
ActivityService
)
CheckCanal
(
canal
string
,
activity
model
.
Activity
)
bool
{
if
canal
==
""
{
return
false
...
...
service/service_ly.go
View file @
56c2b210
...
...
@@ -211,6 +211,7 @@ func (ls *LyService) GetActivity(sku model.LySku) model.LySku {
GoodsId
:
sku
.
GoodsId
,
Canal
:
sku
.
Canal
,
ClassId
:
sku
.
ClassID2
,
GoodsName
:
sku
.
GoodsName
,
}
var
activityService
ActivityService
priceActivity
,
giftActivity
:=
activityService
.
GetActivityData
(
checkData
)
...
...
service/service_ly_common.go
View file @
56c2b210
...
...
@@ -294,11 +294,14 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
priceUs
:=
c
.
MyRound
(
price
.
PriceUs
,
4
)
priceUs
=
c
.
MyRound
(
c
.
MulFloat
(
price
.
PriceUs
,
sku
.
DiscountRatio
.
RatioUsd
),
4
)
data
[
key
]
.
PriceUs
=
priceUs
price
.
PriceAcUs
=
priceUs
}
if
price
.
PriceCn
!=
0
{
priceCn
:=
c
.
MyRound
(
price
.
PriceCn
,
4
)
priceCn
=
c
.
MyRound
(
c
.
MulFloat
(
price
.
PriceCn
,
sku
.
DiscountRatio
.
Ratio
),
4
)
data
[
key
]
.
PriceCn
=
priceCn
price
.
PriceCn
=
priceCn
}
//专卖成本价
...
...
service/service_price.go
View file @
56c2b210
...
...
@@ -93,6 +93,7 @@ func (ps *PriceService) GenerateLadderPrice(sku model.LySku) model.LySku {
if
brandIds
!=
""
{
hasSpecialCheck
=
true
standardBrandIdList
:=
strings
.
Split
(
brandIds
,
","
)
//fmt.Println(standardBrandIdList)
standardBrandId
:=
strconv
.
Itoa
(
sku
.
StandardBrand
.
StandardBrandId
)
//找到有对应的品牌,那么优先级肯定是最高的了
if
php2go
.
InArray
(
standardBrandId
,
standardBrandIdList
)
{
...
...
service/service_zy_common.go
View file @
56c2b210
...
...
@@ -38,7 +38,7 @@ func (qs *ZiyingService) skuLockNum(c *redis.Conn, goodsId string) int64 {
}
/*
获取自营活动价
获取自营活动价
*/
func
(
qs
*
ZiyingService
)
ActivityPrice
(
ctx
*
gin
.
Context
,
SkuInfo
string
)
*
orderedmap
.
OrderedMap
{
data
:=
qs
.
HDActivityPrice
(
SkuInfo
)
...
...
@@ -48,7 +48,7 @@ func (qs *ZiyingService) ActivityPrice(ctx *gin.Context, SkuInfo string) *ordere
return
nil
}
//获取活动相关信息
//
获取活动相关信息
func
(
qs
*
ZiyingService
)
GetActivity
(
skuInfo
string
)
(
priceActivity
model
.
PriceActivity
,
giftActivity
model
.
GiftActivity
)
{
//去判断是否有活动(促销打折活动和满赠活动)
var
standardBrandId
int
...
...
@@ -72,6 +72,7 @@ func (qs *ZiyingService) GetActivity(skuInfo string) (priceActivity model.PriceA
StandardBrandId
:
standardBrandId
,
GoodsId
:
gjson
.
Get
(
skuInfo
,
"goods_id"
)
.
String
(),
ClassId
:
int
(
gjson
.
Get
(
skuInfo
,
"class_id2"
)
.
Int
()),
GoodsName
:
gjson
.
Get
(
skuInfo
,
"goods_name"
)
.
String
(),
}
var
activityService
ActivityService
priceActivity
,
giftActivity
=
activityService
.
GetActivityData
(
checkData
)
...
...
@@ -85,7 +86,6 @@ ac_type说明: 0 没有活动
活动名称 ac_type 类型
自营系数 6 自营
折扣(系数)活动 10 自营/联营
*/
func
(
qs
*
ZiyingService
)
HDActivityPrice
(
SkuInfo
string
)
*
orderedmap
.
OrderedMap
{
priceActivity
,
giftActivity
:=
qs
.
GetActivity
(
SkuInfo
)
...
...
@@ -132,7 +132,7 @@ func (qs *ZiyingService) HDActivityPrice(SkuInfo string) *orderedmap.OrderedMap
}
/*
获取当前锁住的库存
获取当前锁住的库存
*/
func
(
qs
*
ZiyingService
)
HDGoodsLimit
(
SkuID
string
,
Stock
string
,
c
*
redis
.
Conn
)
*
orderedmap
.
OrderedMap
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment