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
499520f5
authored
Oct 09, 2023
by
杨树贤
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'ysx-魔方活动价判断优先级-20230928' into dev
parents
c74b426d
69fd239d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
65 additions
and
29 deletions
service/service_activity.go
service/service_ly_common.go
service/service_price.go
service/sorter/activity.go
service/service_activity.go
View file @
499520f5
...
@@ -5,6 +5,8 @@ import (
...
@@ -5,6 +5,8 @@ import (
"fmt"
"fmt"
"go_sku_server/model"
"go_sku_server/model"
"go_sku_server/pkg/gredis"
"go_sku_server/pkg/gredis"
"go_sku_server/service/sorter"
"sort"
"strconv"
"strconv"
"strings"
"strings"
"time"
"time"
...
@@ -30,6 +32,8 @@ func (as *ActivityService) GetActivityData(checkData model.ActivityCheckData) (p
...
@@ -30,6 +32,8 @@ func (as *ActivityService) GetActivityData(checkData model.ActivityCheckData) (p
if
err
!=
nil
{
if
err
!=
nil
{
fmt
.
Println
(
err
)
fmt
.
Println
(
err
)
}
}
//对活动进行创建时间逆序排序,因为要以创建时间靠后的优先级最高
sort
.
Sort
(
sorter
.
ActivitySorter
(
activities
))
if
len
(
activities
)
!=
0
{
if
len
(
activities
)
!=
0
{
priceActivity
=
as
.
GetPriceActivity
(
checkData
,
activities
)
priceActivity
=
as
.
GetPriceActivity
(
checkData
,
activities
)
}
}
...
@@ -140,6 +144,8 @@ func (as *ActivityService) GetPriceActivity(checkData model.ActivityCheckData, a
...
@@ -140,6 +144,8 @@ func (as *ActivityService) GetPriceActivity(checkData model.ActivityCheckData, a
//判断商品名称是否在redis
//判断商品名称是否在redis
redisKey
:=
"lie_activity_and_coupon_sku_"
+
strconv
.
Itoa
(
activity
.
ActivityId
)
redisKey
:=
"lie_activity_and_coupon_sku_"
+
strconv
.
Itoa
(
activity
.
ActivityId
)
exists
,
_
:=
redis
.
Bool
(
redisConn
.
Do
(
"hexists"
,
redisKey
,
checkData
.
GoodsName
))
exists
,
_
:=
redis
.
Bool
(
redisConn
.
Do
(
"hexists"
,
redisKey
,
checkData
.
GoodsName
))
//fmt.Println(checkData.GoodsName)
//fmt.Println(exists)
if
exists
{
if
exists
{
hasActivity
=
true
hasActivity
=
true
goto
INFO
goto
INFO
...
@@ -161,12 +167,23 @@ func (as *ActivityService) GetPriceActivity(checkData model.ActivityCheckData, a
...
@@ -161,12 +167,23 @@ func (as *ActivityService) GetPriceActivity(checkData model.ActivityCheckData, a
}
else
if
checkData
.
SupplierId
==
10000
{
}
else
if
checkData
.
SupplierId
==
10000
{
//自营活动特殊判断
//自营活动特殊判断
//判断活动指定的渠道编码,品牌,分类id,如果都为空,那么这个活动可以理解为整个供应商了,上面的排除已经会提前去判断了
//fmt.Println(activity.ClassIds)
if
activity
.
StandardBrandIds
==
""
&&
activity
.
ClassIds
==
""
{
//fmt.Println(activity.UseType)
hasActivity
=
true
if
activity
.
ClassIds
!=
""
{
goto
INFO
if
!
as
.
CheckClass
(
checkData
.
ClassId
,
activity
)
{
continue
}
}
}
if
as
.
CheckClass
(
checkData
.
ClassId
,
activity
)
{
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
activity
.
StandardBrandIds
!=
""
{
//判断是否是搞活动的品牌
//判断是否是搞活动的品牌
...
...
service/service_ly_common.go
View file @
499520f5
...
@@ -266,7 +266,7 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
...
@@ -266,7 +266,7 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
return
sku
return
sku
}
}
priceService
:=
PriceService
{}
priceService
:=
PriceService
{}
flag
:=
0
//
flag := 0
var
data
[]
model
.
LadderPrice
var
data
[]
model
.
LadderPrice
var
originalPrice
[]
model
.
OriginPrice
var
originalPrice
[]
model
.
OriginPrice
sort
.
Sort
(
sorter
.
OriginPriceSorter
(
sku
.
OriginalPrice
))
sort
.
Sort
(
sorter
.
OriginPriceSorter
(
sku
.
OriginalPrice
))
...
@@ -316,19 +316,20 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
...
@@ -316,19 +316,20 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
if
(
sku
.
GoodsType
==
1
||
sku
.
GoodsType
==
2
||
sku
.
GoodsType
==
6
)
&&
sku
.
AcType
>
1
&&
sku
.
Ratio
>
0
{
if
(
sku
.
GoodsType
==
1
||
sku
.
GoodsType
==
2
||
sku
.
GoodsType
==
6
)
&&
sku
.
AcType
>
1
&&
sku
.
Ratio
>
0
{
tempAcPrice
:=
c
.
MyRound
(
c
.
MulFloat
(
price
.
PriceCn
,
sku
.
Ratio
/
100
),
4
)
tempAcPrice
:=
c
.
MyRound
(
c
.
MulFloat
(
price
.
PriceCn
,
sku
.
Ratio
/
100
),
4
)
data
[
key
]
.
PriceAc
=
tempAcPrice
data
[
key
]
.
PriceAc
=
tempAcPrice
data
[
key
]
.
PriceAcUs
=
c
.
MyRound
(
c
.
MulFloat
(
price
.
PriceUs
,
sku
.
RatioUs
/
100
),
4
)
priceAcUs
:=
c
.
MyRound
(
c
.
MulFloat
(
price
.
PriceUs
,
sku
.
RatioUs
/
100
),
4
)
data
[
key
]
.
PriceAcUs
=
priceAcUs
//优惠价后等于0,就代表没有搞活动
//优惠价后等于0,就代表没有搞活动
if
tempAcPrice
<=
0
{
if
tempAcPrice
<=
0
&&
priceAcUs
<=
0
{
sku
.
AcType
=
0
sku
.
AcType
=
0
}
}
//价格与原价一样
//价格与原价一样
if
data
[
key
]
.
PriceCn
==
tempAcPrice
&&
key
<
2
{
//
if data[key].PriceCn == tempAcPrice && key < 2 {
flag
++
//
flag++
if
flag
>=
2
||
(
len
(
ladderPrice
)
<
2
)
{
//
if flag >= 2 || (len(ladderPrice) < 2) {
sku
.
AcType
=
0
//
sku.AcType = 0
}
//
}
}
//
}
}
}
}
}
}
else
{
}
else
{
...
@@ -465,12 +466,13 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
...
@@ -465,12 +466,13 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
if
(
sku
.
GoodsType
==
1
||
sku
.
GoodsType
==
2
||
sku
.
GoodsType
==
6
)
&&
sku
.
AcType
>
1
&&
sku
.
Ratio
>
0
{
if
(
sku
.
GoodsType
==
1
||
sku
.
GoodsType
==
2
||
sku
.
GoodsType
==
6
)
&&
sku
.
AcType
>
1
&&
sku
.
Ratio
>
0
{
priceAc
:=
c
.
MyRound
(
c
.
MulFloat
(
data
[
key
]
.
PriceCn
,
(
sku
.
Ratio
/
100
)),
4
)
priceAc
:=
c
.
MyRound
(
c
.
MulFloat
(
data
[
key
]
.
PriceCn
,
(
sku
.
Ratio
/
100
)),
4
)
data
[
key
]
.
PriceAc
=
priceAc
data
[
key
]
.
PriceAc
=
priceAc
var
priceAcUs
float64
if
sku
.
RatioUs
>
0
{
if
sku
.
RatioUs
>
0
{
priceAcUs
:
=
c
.
MyRound
(
c
.
MulFloat
(
data
[
key
]
.
PriceUs
,
(
sku
.
RatioUs
/
100
)),
4
)
priceAcUs
=
c
.
MyRound
(
c
.
MulFloat
(
data
[
key
]
.
PriceUs
,
(
sku
.
RatioUs
/
100
)),
4
)
data
[
key
]
.
PriceAcUs
=
priceAcUs
data
[
key
]
.
PriceAcUs
=
priceAcUs
}
}
if
priceAc
<=
0
{
if
priceAc
<=
0
&&
priceAcUs
<=
0
{
sku
.
AcType
=
0
sku
.
AcType
=
0
break
break
}
else
{
}
else
{
...
@@ -481,17 +483,17 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
...
@@ -481,17 +483,17 @@ func (ls *LyService) GetCoefficientAndPrice(sku model.LySku) model.LySku {
}
}
//为什么$kp < 2,如果第一阶梯或第二阶梯价格和活动价一样,就不输出活动价了
//为什么$kp < 2,如果第一阶梯或第二阶梯价格和活动价一样,就不输出活动价了
//活动价都是有样式的和平时不一样,如果价格一样,但是样子是活动价,客户会迷惑,所以不输出即可,保持原来的样式
//活动价都是有样式的和平时不一样,如果价格一样,但是样子是活动价,客户会迷惑,所以不输出即可,保持原来的样式
if
data
[
key
]
.
PriceCn
==
priceAc
&&
key
<
2
{
//
if data[key].PriceCn == priceAc && key < 2 {
flag
++
//
flag++
if
flag
>=
2
{
//
if flag >= 2 {
sku
.
AcType
=
0
//
sku.AcType = 0
}
//
}
if
len
(
data
)
>
1
{
//
if len(data) > 1 {
if
data
[
1
]
.
PriceCn
==
0
{
//
if data[1].PriceCn == 0 {
sku
.
AcType
=
0
//
sku.AcType = 0
}
//
}
}
//
}
}
//
}
}
}
}
}
//判断原始价格有变化,那就要覆盖
//判断原始价格有变化,那就要覆盖
...
...
service/service_price.go
View file @
499520f5
package
service
package
service
import
(
import
(
"fmt"
"github.com/gomodule/redigo/redis"
"github.com/gomodule/redigo/redis"
"github.com/syyongx/php2go"
"github.com/syyongx/php2go"
"github.com/tidwall/gjson"
"github.com/tidwall/gjson"
...
@@ -94,7 +93,7 @@ func (ps *PriceService) GenerateLadderPrice(sku model.LySku) model.LySku {
...
@@ -94,7 +93,7 @@ func (ps *PriceService) GenerateLadderPrice(sku model.LySku) model.LySku {
if
brandIds
!=
""
{
if
brandIds
!=
""
{
hasSpecialCheck
=
true
hasSpecialCheck
=
true
standardBrandIdList
:=
strings
.
Split
(
brandIds
,
","
)
standardBrandIdList
:=
strings
.
Split
(
brandIds
,
","
)
fmt
.
Println
(
standardBrandIdList
)
//
fmt.Println(standardBrandIdList)
standardBrandId
:=
strconv
.
Itoa
(
sku
.
StandardBrand
.
StandardBrandId
)
standardBrandId
:=
strconv
.
Itoa
(
sku
.
StandardBrand
.
StandardBrandId
)
//找到有对应的品牌,那么优先级肯定是最高的了
//找到有对应的品牌,那么优先级肯定是最高的了
if
php2go
.
InArray
(
standardBrandId
,
standardBrandIdList
)
{
if
php2go
.
InArray
(
standardBrandId
,
standardBrandIdList
)
{
...
...
service/sorter/activity.go
0 → 100644
View file @
499520f5
package
sorter
import
"go_sku_server/model"
// 阶梯价格排序算法
type
ActivitySorter
[]
model
.
Activity
func
(
a
ActivitySorter
)
Len
()
int
{
return
len
(
a
)
}
func
(
a
ActivitySorter
)
Swap
(
i
,
j
int
)
{
a
[
i
],
a
[
j
]
=
a
[
j
],
a
[
i
]
}
func
(
a
ActivitySorter
)
Less
(
i
,
j
int
)
bool
{
return
a
[
j
]
.
AddTime
<
a
[
i
]
.
AddTime
}
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