Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
colorway
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
golang
colorway
Commits
d35447e2
Commit
d35447e2
authored
Jul 02, 2025
by
zhengyaoqiu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(colorway): 商品上传接口
parent
a8ff01a5
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
77 additions
and
11 deletions
+77
-11
colorspu.go
internal/pkg/database/model/colorspu.go
+1
-1
image.go
internal/pkg/database/model/image.go
+1
-1
sku.go
internal/pkg/database/model/sku.go
+1
-1
completespu.go
internal/pkg/database/repository/completespu.go
+73
-8
dev.yaml
internal/rpc/etc/dev.yaml
+1
-0
No files found.
internal/pkg/database/model/colorspu.go
View file @
d35447e2
...
...
@@ -5,7 +5,7 @@ import "gorm.io/gorm"
type
ColorSpu
struct
{
gorm
.
Model
CompleteSpuStyleNumber
string
`gorm:"uniqueIndex:style; size:50; not null"`
ColorCode
string
`gorm:"uniqueIndex:style; size:50;
not null
"`
ColorCode
string
`gorm:"uniqueIndex:style; size:50;"`
Color
Color
`gorm:"embedded;embeddedPrefix:color_"`
InfoSelect
string
`gorm:"not null; size:24"`
// 商品信息默认选择哪个商品
...
...
internal/pkg/database/model/image.go
View file @
d35447e2
...
...
@@ -5,7 +5,7 @@ import "gorm.io/gorm"
type
Image
struct
{
gorm
.
Model
ColorSpuStyleNumber
string
`gorm:"index:style; size:50; not null"`
ColorSpuColorCode
string
`gorm:"index:style; size:50
; not null
"`
ColorSpuColorCode
string
`gorm:"index:style; size:50"`
Url
string
`gorm:"uniqueIndex; size:256"`
}
...
...
internal/pkg/database/model/sku.go
View file @
d35447e2
...
...
@@ -7,7 +7,7 @@ type Sku struct {
Pc3SkuId
string
`gorm:"uniqueIndex; not null; size:24"`
Pc3ProductId
string
`gorm:"not null; size:24"`
ColorSpuStyleNumber
string
`gorm:"index: style; size:50; not null"`
ColorSpuColorCode
string
`gorm:"index: style; size:50
; not null
"`
ColorSpuColorCode
string
`gorm:"index: style; size:50"`
SourceId
string
`gorm:"size:50; not null"`
SiteId
string
`gorm:"size:50; not null"`
Size
string
`gorm:"size:50; not null"`
...
...
internal/pkg/database/repository/completespu.go
View file @
d35447e2
package
repository
import
(
"fmt"
"git.chillcy.com/golang/colorway/internal/pkg/database/model"
"gorm.io/gorm"
"gorm.io/gorm/clause"
...
...
@@ -37,6 +38,21 @@ func upsertCompleteSpus(db *gorm.DB, completeSpus model.CompleteSpus) error {
return
result
.
Error
}
// OnConflict 导致的更新操作不会回填 ID,即使外键 StyleNumber 存在,也会报错 WHERE conditions required,所以重新读取出来
styleNumbers
:=
completeSpus
.
GetStyleNumbers
()
var
reloadedSpus
[]
model
.
CompleteSpu
err
:=
db
.
Where
(
"style_number IN ?"
,
styleNumbers
)
.
Find
(
&
reloadedSpus
)
.
Error
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to reload CompleteSpus: %v"
,
err
)
}
for
_
,
reloadSpu
:=
range
reloadedSpus
{
for
i
:=
range
completeSpus
{
if
reloadSpu
.
StyleNumber
==
completeSpus
[
i
]
.
StyleNumber
{
completeSpus
[
i
]
.
ID
=
reloadSpu
.
ID
}
}
}
for
_
,
spu
:=
range
completeSpus
{
err
:=
upsertCompleteSpu
(
db
,
spu
)
if
err
!=
nil
{
...
...
@@ -49,37 +65,86 @@ func upsertCompleteSpus(db *gorm.DB, completeSpus model.CompleteSpus) error {
func
upsertCompleteSpu
(
db
*
gorm
.
DB
,
completeSpu
model
.
CompleteSpu
)
error
{
// 处理关联关系
err
:=
db
.
Model
(
&
completeSpu
)
.
Association
(
"ColorSpus"
)
.
Replace
(
completeSpu
.
ColorSpus
)
// 不能直接 relapce 因为 ColorSpu CompleteSpuStyleNumber not null replace 会先将外键设置为 null 导致报错
err
:=
db
.
Model
(
&
completeSpu
)
.
Association
(
"ColorSpus"
)
.
Delete
()
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"ColorSpus"
)
.
Append
(
completeSpu
.
ColorSpus
)
if
err
!=
nil
{
return
err
}
styles
:=
completeSpu
.
ColorSpus
.
GetStyles
()
var
reloadedColorSpus
model
.
ColorSpus
err
=
db
.
Where
(
"(complete_spu_style_number, color_code) IN ?"
,
styles
)
.
Find
(
&
reloadedColorSpus
)
.
Error
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to reload ColorSpus: %v"
,
err
)
}
for
_
,
reloadColorSpu
:=
range
reloadedColorSpus
{
for
i
:=
range
completeSpu
.
ColorSpus
{
if
completeSpu
.
ColorSpus
[
i
]
.
CompleteSpuStyleNumber
==
reloadColorSpu
.
CompleteSpuStyleNumber
&&
completeSpu
.
ColorSpus
[
i
]
.
ColorCode
==
reloadColorSpu
.
ColorCode
{
completeSpu
.
ColorSpus
[
i
]
.
ID
=
reloadColorSpu
.
ID
}
}
}
for
_
,
colorSpu
:=
range
completeSpu
.
ColorSpus
{
err
=
db
.
Model
(
&
colorSpu
)
.
Association
(
"Skus"
)
.
Replace
(
colorSpu
.
Skus
)
err
=
db
.
Model
(
&
colorSpu
)
.
Association
(
"Skus"
)
.
Delete
(
)
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
colorSpu
)
.
Association
(
"
Images"
)
.
Replace
(
colorSpu
.
Image
s
)
err
=
db
.
Model
(
&
colorSpu
)
.
Association
(
"
Skus"
)
.
Append
(
colorSpu
.
Sku
s
)
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
colorSpu
)
.
Association
(
"Images"
)
.
Delete
()
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
colorSpu
)
.
Association
(
"Images"
)
.
Append
(
colorSpu
.
Images
)
if
err
!=
nil
{
return
err
}
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"Compositions"
)
.
Delete
()
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"Compositions"
)
.
Append
(
completeSpu
.
Compositions
)
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"Models"
)
.
Delete
()
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"Models"
)
.
Append
(
completeSpu
.
Models
)
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"Fits"
)
.
Delete
()
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"
Compositions"
)
.
Replace
(
completeSpu
.
Composition
s
)
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"
Fits"
)
.
Append
(
completeSpu
.
Fit
s
)
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"
Models"
)
.
Replace
(
completeSpu
.
Models
)
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"
Genders"
)
.
Delete
(
)
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"
Fits"
)
.
Replace
(
completeSpu
.
Fit
s
)
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"
Genders"
)
.
Append
(
completeSpu
.
Gender
s
)
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"
Genders"
)
.
Replace
(
completeSpu
.
Genders
)
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"
Categories"
)
.
Delete
(
)
if
err
!=
nil
{
return
err
}
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"Categories"
)
.
Replace
(
completeSpu
.
Categories
)
err
=
db
.
Model
(
&
completeSpu
)
.
Association
(
"Categories"
)
.
Append
(
completeSpu
.
Categories
)
if
err
!=
nil
{
return
err
}
...
...
internal/rpc/etc/dev.yaml
View file @
d35447e2
Name
:
colorway.rpc
ListenOn
:
0.0.0.0:5200
Mode
:
dev
Timeout
:
30000
\ No newline at end of file
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