记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
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
董敬伟
liquidnet-bus-v1
Commits
21ebe7a4
Commit
21ebe7a4
authored
Nov 09, 2022
by
张国柄
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
~api:店铺商品管理:批量导入数据;
parent
671ae42c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
302 additions
and
141 deletions
+302
-141
GoblinGoodsImportDto.java
...om/liquidnet/service/goblin/dto/GoblinGoodsImportDto.java
+3
-0
GoblinStoreMgtGoodsImportController.java
...ontroller/manage/GoblinStoreMgtGoodsImportController.java
+5
-5
GoblinStoreMgtGoodsImportService.java
...service/impl/manage/GoblinStoreMgtGoodsImportService.java
+294
-136
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/GoblinGoodsImportDto.java
View file @
21ebe7a4
...
...
@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.util.List
;
@Data
public
class
GoblinGoodsImportDto
{
...
...
@@ -13,8 +14,10 @@ public class GoblinGoodsImportDto {
private
String
spuName
;
@ExcelProperty
(
value
=
"商品图片"
)
private
String
spuImgs
;
private
List
<
String
>
spuImgList
;
@ExcelProperty
(
value
=
"商品规格"
)
private
String
skuSpec
;
private
List
<
GoblinGoodsSpecDto
>
skuSpecDtos
;
@ExcelProperty
(
value
=
"规格编码"
)
private
String
skuCode
;
@ExcelProperty
(
value
=
"价格"
)
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/controller/manage/GoblinStoreMgtGoodsImportController.java
View file @
21ebe7a4
...
...
@@ -34,9 +34,9 @@ public class GoblinStoreMgtGoodsImportController {
@PostMapping
(
"/upload"
)
@ApiOperation
(
value
=
"批量导入数据"
,
notes
=
""
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"File"
,
name
=
"file"
,
value
=
"文件"
,
required
=
true
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"Integer"
,
name
=
"dataType"
,
value
=
"导入数据类型[1-商品数据]"
,
example
=
"1"
),
@ApiImplicitParam
(
type
=
"form"
,
dataType
=
"String"
,
name
=
"storeId"
,
value
=
"店铺ID"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"File"
,
name
=
"file"
,
value
=
"文件"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"Integer"
,
name
=
"dataType"
,
value
=
"导入数据类型[1-商品数据]"
,
example
=
"1"
),
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"storeId"
,
value
=
"店铺ID"
),
})
public
ResponseDto
<
String
>
upload
(
@RequestParam
MultipartFile
file
,
@RequestParam
int
dataType
,
@RequestParam
@NotBlank
(
message
=
"店铺ID不能为空"
)
String
storeId
)
{
...
...
@@ -51,12 +51,12 @@ public class GoblinStoreMgtGoodsImportController {
break
;
case
2
:
default
:
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"
3
9001"
));
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"
14
9001"
));
}
}
catch
(
LiquidnetServiceException
e
)
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
catch
(
IOException
e
)
{
log
.
error
(
"店铺商品管理:批量导入数据:异常[UID={},dataType={},fileName={}]"
,
currentUid
,
dataType
,
file
.
getOriginalFilename
(),
e
);
log
.
warn
(
"店铺商品管理:批量导入数据:异常[UID={},dataType={},fileName={}]"
,
currentUid
,
dataType
,
file
.
getOriginalFilename
(),
e
);
return
ResponseDto
.
failure
(
"数据错误,解析失败"
);
}
return
ResponseDto
.
success
();
...
...
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/manage/GoblinStoreMgtGoodsImportService.java
View file @
21ebe7a4
...
...
@@ -2,13 +2,12 @@ package com.liquidnet.service.goblin.service.impl.manage;
import
com.alibaba.excel.EasyExcel
;
import
com.alibaba.excel.context.AnalysisContext
;
import
com.alibaba.excel.read.listener.PageReadListener
;
import
com.alibaba.excel.event.AnalysisEventListener
;
import
com.alibaba.excel.metadata.data.ReadCellData
;
import
com.liquidnet.common.exception.LiquidnetServiceException
;
import
com.liquidnet.commons.lang.util.CollectionUtil
;
import
com.liquidnet.commons.lang.util.IDGenerator
;
import
com.liquidnet.commons.lang.util.JsonUtils
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.goblin.dto.GoblinGoodsImportDto
;
import
com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto
;
import
com.liquidnet.service.goblin.dto.vo.GoblinGoodsInfoVo
;
...
...
@@ -48,150 +47,324 @@ public class GoblinStoreMgtGoodsImportService {
* 长度:0,50
*/
public
static
final
String
ALPHABET_NUMBER_UNDER_50
=
"^[a-zA-Z0-9]{0,50}$"
;
/**
* 大小字母 || 数字
* 长度:0,32
*/
public
static
final
String
ALPHABET_NUMBER_32
=
"^[a-zA-Z0-9]{0,32}$"
;
public
void
goodsInformationDataAnalysisProcessing
(
MultipartFile
file
,
String
uid
,
String
storeId
)
throws
IOException
{
ArrayList
<
String
>
skuBarCodeTmpList
=
CollectionUtil
.
arrayListString
();
ArrayList
<
GoblinGoodsInfoVo
>
goodsInfoVos
=
ObjectUtil
.
goblinGoodsInfoVoArrayList
();
ArrayList
<
GoblinGoodsSkuInfoVo
>
goodsSkuInfoVos
=
ObjectUtil
.
getGoblinGoodsSkuInfoVoArrayList
();
LinkedList
<
Object
[]>
initGoodsSkuObjs
=
CollectionUtil
.
linkedListObjectArr
();
EasyExcel
.
read
(
file
.
getInputStream
(),
GoblinGoodsImportDto
.
class
,
new
PageReadListener
<
GoblinGoodsImportDto
>(
dts
->
{
if
(
CollectionUtils
.
isEmpty
(
dts
))
{
throw
new
LiquidnetServiceException
(
"-1"
,
"无效操作,导入数据为空"
);
}
GoblinGoodsInfoVo
lastGoodsInfoVo
=
null
;
GoblinGoodsSkuInfoVo
lastGoodsSkuInfoVo
;
LocalDateTime
now
=
LocalDateTime
.
now
();
for
(
GoblinGoodsImportDto
dt
:
dts
)
{
log
.
debug
(
"dt1:{}"
,
dt
.
toString
());
if
(
StringUtils
.
isEmpty
(
dt
.
getSpuName
())
||
dt
.
getSpuName
().
length
()
>
100
||
StringUtils
.
isEmpty
(
dt
.
getSkuSpec
())
||
null
==
dt
.
getPrice
()
||
dt
.
getPrice
().
compareTo
(
BigDecimal
.
valueOf
(
0.01
))
<
0
||
dt
.
getPrice
().
compareTo
(
BigDecimal
.
valueOf
(
9999999
))
>
0
||
null
==
dt
.
getStock
()
||
dt
.
getStock
()
<
0
||
dt
.
getStock
()
>
9999999
)
{
// 数据不规范停止解析并提示用户
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【请核实必填项信息】"
);
private
void
goodsInformationDataAnalysisProcessingValid
(
GoblinGoodsImportDto
dto
,
List
<
String
>
skuBarCodeTmpList
)
{
/* 商品编码校验|------------------------------------------------------------------------------ */
if
(
StringUtils
.
isNotEmpty
(
dto
.
getSpuCode
())
&&
!
Pattern
.
matches
(
ALPHABET_NUMBER_UNDER_50
,
dto
.
getSpuCode
()))
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品编码有误】"
);
}
/* 商品名称校验|------------------------------------------------------------------------------ */
if
(
StringUtils
.
isEmpty
(
dto
.
getSpuName
())
||
dto
.
getSpuName
().
length
()
>
100
)
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品名称超出长度限制】"
);
}
/* 商品图片校验|------------------------------------------------------------------------------ */
if
(
StringUtils
.
isNotEmpty
(
dto
.
getSpuImgs
()))
{
if
(
dto
.
getSpuImgs
().
startsWith
(
"【图片链接】"
))
{
String
[]
spuImgsArr
=
dto
.
getSpuImgs
().
replace
(
"【图片链接】"
,
""
).
replace
(
";"
,
";"
).
split
(
";"
);
if
(
spuImgsArr
.
length
>
15
)
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品图片最多支持15张】"
);
}
ArrayList
<
String
>
spuImgList
=
CollectionUtil
.
arrayListString
();
for
(
String
spuImg
:
spuImgsArr
)
{
if
(
StringUtils
.
isNotBlank
(
spuImg
))
{
spuImgList
.
add
(
spuImg
);
}
}
if
(!
CollectionUtils
.
isEmpty
(
spuImgList
))
{
dto
.
setSpuImgList
(
spuImgList
);
}
}
else
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品图片格式有误】"
);
}
}
/* 商品规格校验|------------------------------------------------------------------------------ */
if
(
StringUtils
.
isEmpty
(
dto
.
getSkuSpec
()))
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品规格信息缺失】"
);
}
String
[]
skuSpecArr
=
dto
.
getSkuSpec
().
replace
(
":"
,
":"
).
replace
(
";"
,
";"
).
split
(
";"
);
List
<
GoblinGoodsSpecDto
>
skuSpecDtos
=
ObjectUtil
.
getGoblinGoodsSpecDtoArrayList
();
for
(
int
i
=
0
,
size
=
skuSpecArr
.
length
;
i
<
size
;
i
++)
{
String
skuSpec
=
skuSpecArr
[
i
];
if
(
StringUtils
.
isEmpty
(
skuSpec
))
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品规格信息有误】"
);
}
String
[]
specArr
=
skuSpec
.
split
(
":"
);
if
(
ArrayUtils
.
isEmpty
(
specArr
)
||
specArr
.
length
!=
2
||
specArr
[
0
].
length
()
>
5
||
specArr
[
1
].
length
()
>
40
)
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品规格信息有误】"
);
}
boolean
tobeNextSpuFlg
=
false
;
if
(
null
==
lastGoodsInfoVo
||
!
lastGoodsInfoVo
.
getName
().
equals
(
dt
.
getSpuName
()))
{
lastGoodsInfoVo
=
GoblinGoodsInfoVo
.
getNew
();
tobeNextSpuFlg
=
true
;
GoblinGoodsSpecDto
skuSpecDto
=
GoblinGoodsSpecDto
.
getNew
();
skuSpecDto
.
setSpecName
(
specArr
[
0
]);
skuSpecDto
.
setSpecVname
(
specArr
[
1
]);
skuSpecDtos
.
add
(
skuSpecDto
);
dto
.
setSkuSpecDtos
(
skuSpecDtos
);
}
/* 规格编码校验|------------------------------------------------------------------------------ */
if
(
StringUtils
.
isNotEmpty
(
dto
.
getSkuCode
())
&&
!
Pattern
.
matches
(
ALPHABET_NUMBER_UNDER_50
,
dto
.
getSkuCode
()))
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格编码格式有误】"
);
}
/* 价格校验|------------------------------------------------------------------------------ */
if
(
null
==
dto
.
getPrice
()
||
dto
.
getPrice
().
compareTo
(
BigDecimal
.
valueOf
(
0.01
))
<
0
||
dto
.
getPrice
().
compareTo
(
BigDecimal
.
valueOf
(
9999999
))
>
0
)
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【价格信息有误】"
);
}
/* 库存校验|------------------------------------------------------------------------------ */
if
(
null
==
dto
.
getStock
()
||
dto
.
getStock
()
<
0
||
dto
.
getStock
()
>
9999999
)
{
// 数据不规范停止解析并提示用户
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【库存信息有误】"
);
}
/* 规格图片校验|------------------------------------------------------------------------------ */
if
(
StringUtils
.
isNotEmpty
(
dto
.
getSkuImg
()))
{
if
(
dto
.
getSkuImg
().
startsWith
(
"【图片链接】"
))
{
String
[]
skuImgArr
=
dto
.
getSkuImg
().
replace
(
"【图片链接】"
,
""
).
replace
(
";"
,
";"
).
split
(
";"
);
if
(
skuImgArr
.
length
==
1
)
{
dto
.
setSkuImg
(
StringUtils
.
isNotBlank
(
skuImgArr
[
0
])
?
skuImgArr
[
0
]
:
null
);
}
else
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格图片仅支持1张】"
);
}
}
else
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格图片格式有误】"
);
}
}
/* 规格条码校验|------------------------------------------------------------------------------ */
if
(
StringUtils
.
isNotEmpty
(
dto
.
getSkuBarCode
()))
{
if
(
Pattern
.
matches
(
ALPHABET_NUMBER_32
,
dto
.
getSkuBarCode
()))
{
if
(
skuBarCodeTmpList
.
contains
(
dto
.
getSkuBarCode
()))
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【表格内规格条码重复】"
);
}
skuBarCodeTmpList
.
add
(
dto
.
getSkuBarCode
());
}
else
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格条码格式有误】"
);
}
}
/* 校验|------------------------------------------------------------------------------ */
/* 校验|------------------------------------------------------------------------------ */
/* 校验|------------------------------------------------------------------------------ */
}
public
void
goodsInformationDataAnalysisProcessing
(
MultipartFile
file
,
String
uid
,
String
storeId
)
throws
IOException
{
List
<
String
>
skuBarCodeTmpList
=
CollectionUtil
.
arrayListString
();
List
<
GoblinGoodsInfoVo
>
goodsInfoVos
=
ObjectUtil
.
goblinGoodsInfoVoArrayList
();
List
<
GoblinGoodsSkuInfoVo
>
goodsSkuInfoVos
=
ObjectUtil
.
getGoblinGoodsSkuInfoVoArrayList
();
LinkedList
<
Object
[]>
initGoodsSkuObjs
=
CollectionUtil
.
linkedListObjectArr
();
EasyExcel
.
read
(
file
.
getInputStream
(),
GoblinGoodsImportDto
.
class
,
new
AnalysisEventListener
<
GoblinGoodsImportDto
>()
{
if
(
tobeNextSpuFlg
)
{
lastGoodsInfoVo
.
setName
(
dt
.
getSpuName
());
//*
if
(
StringUtils
.
isNotEmpty
(
dt
.
getSpuCode
()))
{
if
(!
Pattern
.
matches
(
ALPHABET_NUMBER_UNDER_50
,
dt
.
getSpuCode
()))
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品编码格式错误】"
);
lastGoodsInfoVo
.
setSpuId
(
IDGenerator
.
nextMilliId2
()
+
dt
.
getSpuCode
());
//*
}
else
{
lastGoodsInfoVo
.
setSpuId
(
IDGenerator
.
nextMilliId2
());
//*
@Override
public
void
invokeHead
(
Map
<
Integer
,
ReadCellData
<?>>
headMap
,
AnalysisContext
context
)
{
Integer
approximateTotalRowNumber
=
context
.
readSheetHolder
().
getApproximateTotalRowNumber
();
if
(
approximateTotalRowNumber
>
501
)
{
log
.
warn
(
"店铺商品管理:批量导入数据:异常[UID={},storeId={},totalRowNumber={}]"
,
uid
,
storeId
,
approximateTotalRowNumber
);
throw
new
LiquidnetServiceException
(
"-1"
,
"超出总行数限制500"
);
}
super
.
invokeHead
(
headMap
,
context
);
}
// if (StringUtils.isNotEmpty(dt.getSpuBarCode())) {
// lastGoodsInfoVo.setSpuNo(dt.getSpuBarCode());//*
// } else
{
lastGoodsInfoVo
.
setSpuNo
(
lastGoodsInfoVo
.
getSpuId
());
//*
// }
if
(
StringUtils
.
isNotEmpty
(
dt
.
getSpuImgs
()))
{
if
(!
dt
.
getSkuImg
().
startsWith
(
"【图片链接】"
))
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品图片格式错误】"
);
String
[]
spuImgsArr
=
dt
.
getSpuImgs
().
replace
(
"【图片链接】"
,
""
).
replace
(
";"
,
";"
).
split
(
";"
);
if
(
spuImgsArr
.
length
>
15
)
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【商品图片最多支持15张】"
);
List
<
String
>
imageList
=
Arrays
.
asList
(
spuImgsArr
);
lastGoodsInfoVo
.
setImageList
(
imageList
);
lastGoodsInfoVo
.
setCoverPic
(
imageList
.
get
(
0
));
@Override
public
void
invoke
(
GoblinGoodsImportDto
dto
,
AnalysisContext
analysisContext
)
{
goodsInformationDataAnalysisProcessingValid
(
dto
,
skuBarCodeTmpList
);
GoblinGoodsInfoVo
lastGoodsInfoVo
=
CollectionUtils
.
isEmpty
(
goodsInfoVos
)
?
null
:
goodsInfoVos
.
get
(
goodsInfoVos
.
size
()
-
1
);
GoblinGoodsInfoVo
goodsInfoVo
=
goodsInformationDataAnalysisProcessingForSpu
(
dto
,
lastGoodsInfoVo
,
uid
,
storeId
,
LocalDateTime
.
now
(),
goodsSkuInfoVos
,
initGoodsSkuObjs
);
if
(
null
!=
goodsInfoVo
)
{
goodsInfoVos
.
add
(
goodsInfoVo
);
}
}
lastGoodsInfoVo
.
setDetails
(
lastGoodsInfoVo
.
getName
());
lastGoodsInfoVo
.
setSpuType
(
0
);
//*
lastGoodsInfoVo
.
setSpecMode
(
"1"
);
//*
lastGoodsInfoVo
.
setShelvesHandle
(
"1"
);
lastGoodsInfoVo
.
setVirtualFlg
(
"0"
);
lastGoodsInfoVo
.
setStatus
(
"3"
);
lastGoodsInfoVo
.
setShelvesStatus
(
"0"
);
lastGoodsInfoVo
.
setSpuAppear
(
"0"
);
//*
lastGoodsInfoVo
.
setSpuCanbuy
(
"1"
);
lastGoodsInfoVo
.
setDelFlg
(
"0"
);
lastGoodsInfoVo
.
setCreatedAt
(
now
);
lastGoodsInfoVo
.
setCreatedBy
(
uid
);
//*
lastGoodsInfoVo
.
setStoreId
(
storeId
);
//*
@Override
public
void
doAfterAllAnalysed
(
AnalysisContext
analysisContext
)
{
// 解析完成...
log
.
debug
(
"dt3-1:{}"
,
1
);
log
.
debug
(
"dt3-1:{}"
,
JsonUtils
.
toJson
(
goodsInfoVos
));
log
.
debug
(
"dt3-2:{}"
,
JsonUtils
.
toJson
(
goodsSkuInfoVos
));
lastGoodsSkuInfoVo
=
this
.
goodsInformationDataAnalysisProcessingForSku
(
dt
,
lastGoodsInfoVo
,
uid
,
storeId
,
now
,
true
,
goodsSkuInfoVos
,
initGoodsSkuObjs
);
if
(
goblinMongoUtils
.
countMgtGoodsSkuBySkuNoList
(
storeId
,
skuBarCodeTmpList
)
>
0
)
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格条码与已添加商品条码重复】"
);
}
goodsInfoVos
.
add
(
lastGoodsInfoVo
);
}
else
{
lastGoodsSkuInfoVo
=
this
.
goodsInformationDataAnalysisProcessingForSku
(
dt
,
lastGoodsInfoVo
,
uid
,
storeId
,
now
,
false
,
goodsSkuInfoVos
,
initGoodsSkuObjs
);
}
if
(
null
!=
lastGoodsSkuInfoVo
&&
skuBarCodeTmpList
.
contains
(
lastGoodsSkuInfoVo
.
getSkuNo
()))
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【表格内规格条码重复】"
);
// goblinMongoUtils.insertMgtGoodsInfoVos(goodsInfoVos);
// goblinMongoUtils.insertMgtGoodsSkuInfoVos(goodsSkuInfoVos);
// goodsSkuInfoVos.forEach(r -> goblinRedisUtils.setSkuStock(null, r.getSkuId(), r.getSkuStock()));
//
// LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
// toMqSqls.add(SqlMapping.get("goblin_goods.insert"));
// LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr();
// goodsInfoVos.forEach(r -> initGoodsObjs.add(new Object[]{
// r.getSpuId(), r.getSpuNo(), r.getName(), r.getSubtitle(), r.getSellPrice(),
// r.getPriceGe(), r.getPriceLe(), r.getIntro(), r.getDetails(), r.getCoverPic(),
// r.getVideo(), r.getSpecMode(), r.getStoreId(), r.getCateFid(), r.getCateSid(),
// r.getCateTid(), r.getStoreCateFid(), r.getStoreCateSid(), r.getStoreCateTid(), r.getBrandId(),
// r.getShelvesHandle(), r.getShelvesTime(), r.getSpuValidity(), r.getVirtualFlg(), r.getStatus(),
// r.getShelvesStatus(), r.getSpuAppear(), r.getShelvesAt(), r.getCreatedBy(), r.getCreatedAt(),
// r.getLogisticsTemplate()
// }));
// toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert"));
// queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsObjs, initGoodsSkuObjs));
}
}
log
.
debug
(
"dt2:{}"
,
lastGoodsInfoVo
);
}
log
.
debug
(
"dt3-1:{}"
,
JsonUtils
.
toJson
(
goodsInfoVos
));
log
.
debug
(
"dt3-2:{}"
,
JsonUtils
.
toJson
(
goodsSkuInfoVos
));
).
sheet
(
0
).
doReadSync
();
// EasyExcel.read(file.getInputStream(), GoblinGoodsImportDto.class, new PageReadListener<GoblinGoodsImportDto>(dts -> {
// GoblinGoodsInfoVo lastGoodsInfoVo = null;
// GoblinGoodsSkuInfoVo lastGoodsSkuInfoVo;
// LocalDateTime now = LocalDateTime.now();
// for (GoblinGoodsImportDto dt : dts) {
// log.debug("dt1:{}", dt.toString());
//
// boolean tobeNextSpuFlg = false;
// if (null == lastGoodsInfoVo || !lastGoodsInfoVo.getName().equals(dt.getSpuName())) {
// lastGoodsInfoVo = GoblinGoodsInfoVo.getNew();
// tobeNextSpuFlg = true;
// }
//
// if (tobeNextSpuFlg) {
// lastGoodsInfoVo.setName(dt.getSpuName());//*
// if (StringUtils.isNotEmpty(dt.getSpuCode())) {
// lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2() + dt.getSpuCode());//*
// } else {
// lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2());//*
// }
//// if (StringUtils.isNotEmpty(dt.getSpuBarCode())) {
//// lastGoodsInfoVo.setSpuNo(dt.getSpuBarCode());//*
//// } else {
// lastGoodsInfoVo.setSpuNo(lastGoodsInfoVo.getSpuId());//*
//// }
// if (!CollectionUtils.isEmpty(dt.getSpuImgList())) {
// lastGoodsInfoVo.setImageList(dt.getSpuImgList());
// lastGoodsInfoVo.setCoverPic(lastGoodsInfoVo.getImageList().get(0));
// }
//
// lastGoodsInfoVo.setDetails(lastGoodsInfoVo.getName());
// lastGoodsInfoVo.setSpuType(0);//*
// lastGoodsInfoVo.setSpecMode("1");//*
// lastGoodsInfoVo.setShelvesHandle("1");
// lastGoodsInfoVo.setVirtualFlg("0");
// lastGoodsInfoVo.setStatus("3");
// lastGoodsInfoVo.setShelvesStatus("0");
// lastGoodsInfoVo.setSpuAppear("0");//*
// lastGoodsInfoVo.setSpuCanbuy("1");
// lastGoodsInfoVo.setDelFlg("0");
// lastGoodsInfoVo.setCreatedAt(now);
// lastGoodsInfoVo.setCreatedBy(uid);//*
// lastGoodsInfoVo.setStoreId(storeId);//*
//
// lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, true, goodsSkuInfoVos, initGoodsSkuObjs);
//
// goodsInfoVos.add(lastGoodsInfoVo);
// } else {
// lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, false, goodsSkuInfoVos, initGoodsSkuObjs);
// }
//// log.debug("dt2:{}", lastGoodsInfoVo);
// }
// log.debug("dt3-1:{}", 1);
//// log.debug("dt3-1:{}", JsonUtils.toJson(goodsInfoVos));
//// log.debug("dt3-2:{}", JsonUtils.toJson(goodsSkuInfoVos));
//
//// if (goblinMongoUtils.countMgtGoodsSkuBySkuNoList(storeId, skuBarCodeTmpList) > 0) {
//// throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码与已添加商品条码重复】");
//// }
////
//// goblinMongoUtils.insertMgtGoodsInfoVos(goodsInfoVos);
//// goblinMongoUtils.insertMgtGoodsSkuInfoVos(goodsSkuInfoVos);
//// goodsSkuInfoVos.forEach(r -> goblinRedisUtils.setSkuStock(null, r.getSkuId(), r.getSkuStock()));
////
//// LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
//// toMqSqls.add(SqlMapping.get("goblin_goods.insert"));
//// LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr();
//// goodsInfoVos.forEach(r -> initGoodsObjs.add(new Object[]{
//// r.getSpuId(), r.getSpuNo(), r.getName(), r.getSubtitle(), r.getSellPrice(),
//// r.getPriceGe(), r.getPriceLe(), r.getIntro(), r.getDetails(), r.getCoverPic(),
//// r.getVideo(), r.getSpecMode(), r.getStoreId(), r.getCateFid(), r.getCateSid(),
//// r.getCateTid(), r.getStoreCateFid(), r.getStoreCateSid(), r.getStoreCateTid(), r.getBrandId(),
//// r.getShelvesHandle(), r.getShelvesTime(), r.getSpuValidity(), r.getVirtualFlg(), r.getStatus(),
//// r.getShelvesStatus(), r.getSpuAppear(), r.getShelvesAt(), r.getCreatedBy(), r.getCreatedAt(),
//// r.getLogisticsTemplate()
//// }));
//// toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert"));
//// queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsObjs, initGoodsSkuObjs));
// }) {
//
// @Override
// public void invoke(GoblinGoodsImportDto dto, AnalysisContext context) {
// super.invoke(dto, context);
// }
// }).sheet().doReadSync();
}
private
GoblinGoodsInfoVo
goodsInformationDataAnalysisProcessingForSpu
(
GoblinGoodsImportDto
dt
,
GoblinGoodsInfoVo
lastGoodsInfoVo
,
String
uid
,
String
storeId
,
LocalDateTime
now
,
List
<
GoblinGoodsSkuInfoVo
>
goodsSkuInfoVos
,
LinkedList
<
Object
[]>
initGoodsSkuObjs
)
{
log
.
debug
(
"dt1:{}"
,
dt
.
toString
());
if
(
goblinMongoUtils
.
countMgtGoodsSkuBySkuNoList
(
storeId
,
skuBarCodeTmpList
)
>
0
)
{
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格条码与已添加商品条码重复】"
);
boolean
tobeNextSpuFlg
=
false
;
if
(
null
==
lastGoodsInfoVo
||
!
lastGoodsInfoVo
.
getName
().
equals
(
dt
.
getSpuName
()))
{
lastGoodsInfoVo
=
GoblinGoodsInfoVo
.
getNew
();
tobeNextSpuFlg
=
true
;
}
GoblinGoodsSkuInfoVo
skuInfoVo
;
if
(
tobeNextSpuFlg
)
{
lastGoodsInfoVo
.
setName
(
dt
.
getSpuName
());
//*
if
(
StringUtils
.
isNotEmpty
(
dt
.
getSpuCode
()))
{
lastGoodsInfoVo
.
setSpuId
(
IDGenerator
.
nextMilliId2
()
+
dt
.
getSpuCode
());
//*
}
else
{
lastGoodsInfoVo
.
setSpuId
(
IDGenerator
.
nextMilliId2
());
//*
}
// if (StringUtils.isNotEmpty(dt.getSpuBarCode())) {
// lastGoodsInfoVo.setSpuNo(dt.getSpuBarCode());//*
// } else {
lastGoodsInfoVo
.
setSpuNo
(
lastGoodsInfoVo
.
getSpuId
());
//*
// }
if
(!
CollectionUtils
.
isEmpty
(
dt
.
getSpuImgList
()))
{
lastGoodsInfoVo
.
setImageList
(
dt
.
getSpuImgList
());
lastGoodsInfoVo
.
setCoverPic
(
lastGoodsInfoVo
.
getImageList
().
get
(
0
));
}
goblinMongoUtils
.
insertMgtGoodsInfoVos
(
goodsInfoVos
);
goblinMongoUtils
.
insertMgtGoodsSkuInfoVos
(
goodsSkuInfoVos
);
goodsSkuInfoVos
.
forEach
(
r
->
goblinRedisUtils
.
setSkuStock
(
null
,
r
.
getSkuId
(),
r
.
getSkuStock
()));
lastGoodsInfoVo
.
setDetails
(
lastGoodsInfoVo
.
getName
());
lastGoodsInfoVo
.
setSpuType
(
0
);
//*
lastGoodsInfoVo
.
setSpecMode
(
"1"
);
//*
lastGoodsInfoVo
.
setShelvesHandle
(
"1"
);
lastGoodsInfoVo
.
setVirtualFlg
(
"0"
);
lastGoodsInfoVo
.
setStatus
(
"3"
);
lastGoodsInfoVo
.
setShelvesStatus
(
"0"
);
lastGoodsInfoVo
.
setSpuAppear
(
"0"
);
//*
lastGoodsInfoVo
.
setSpuCanbuy
(
"1"
);
lastGoodsInfoVo
.
setDelFlg
(
"0"
);
lastGoodsInfoVo
.
setCreatedAt
(
now
);
lastGoodsInfoVo
.
setCreatedBy
(
uid
);
//*
lastGoodsInfoVo
.
setStoreId
(
storeId
);
//*
LinkedList
<
String
>
toMqSqls
=
CollectionUtil
.
linkedListString
();
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods.insert"
));
LinkedList
<
Object
[]>
initGoodsObjs
=
CollectionUtil
.
linkedListObjectArr
();
goodsInfoVos
.
forEach
(
r
->
initGoodsObjs
.
add
(
new
Object
[]{
r
.
getSpuId
(),
r
.
getSpuNo
(),
r
.
getName
(),
r
.
getSubtitle
(),
r
.
getSellPrice
(),
r
.
getPriceGe
(),
r
.
getPriceLe
(),
r
.
getIntro
(),
r
.
getDetails
(),
r
.
getCoverPic
(),
r
.
getVideo
(),
r
.
getSpecMode
(),
r
.
getStoreId
(),
r
.
getCateFid
(),
r
.
getCateSid
(),
r
.
getCateTid
(),
r
.
getStoreCateFid
(),
r
.
getStoreCateSid
(),
r
.
getStoreCateTid
(),
r
.
getBrandId
(),
r
.
getShelvesHandle
(),
r
.
getShelvesTime
(),
r
.
getSpuValidity
(),
r
.
getVirtualFlg
(),
r
.
getStatus
(),
r
.
getShelvesStatus
(),
r
.
getSpuAppear
(),
r
.
getShelvesAt
(),
r
.
getCreatedBy
(),
r
.
getCreatedAt
(),
r
.
getLogisticsTemplate
()
}));
toMqSqls
.
add
(
SqlMapping
.
get
(
"goblin_goods_sku.insert"
));
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_GOODS
.
getKey
(),
SqlMapping
.
gets
(
toMqSqls
,
initGoodsObjs
,
initGoodsSkuObjs
));
})
{
@Override
public
void
invoke
(
GoblinGoodsImportDto
data
,
AnalysisContext
context
)
{
Integer
approximateTotalRowNumber
=
context
.
readSheetHolder
().
getApproximateTotalRowNumber
();
if
(
approximateTotalRowNumber
>
501
)
{
log
.
error
(
"店铺商品管理:批量导入数据:异常[UID={},storeId={},totalRowNumber={}]"
,
uid
,
storeId
,
approximateTotalRowNumber
);
throw
new
LiquidnetServiceException
(
"-1"
,
"超出总行数限制500"
);
}
super
.
invoke
(
data
,
context
);
}
}).
sheet
().
doReadSync
();
skuInfoVo
=
this
.
goodsInformationDataAnalysisProcessingForSku
(
dt
,
lastGoodsInfoVo
,
uid
,
storeId
,
now
,
true
);
}
else
{
skuInfoVo
=
this
.
goodsInformationDataAnalysisProcessingForSku
(
dt
,
lastGoodsInfoVo
,
uid
,
storeId
,
now
,
false
);
}
goodsSkuInfoVos
.
add
(
skuInfoVo
);
initGoodsSkuObjs
.
add
(
new
Object
[]{
skuInfoVo
.
getSkuId
(),
skuInfoVo
.
getSpuId
(),
skuInfoVo
.
getSkuNo
(),
skuInfoVo
.
getName
(),
skuInfoVo
.
getSubtitle
(),
skuInfoVo
.
getSellPrice
(),
skuInfoVo
.
getSkuPic
(),
skuInfoVo
.
getSkuIsbn
(),
skuInfoVo
.
getStock
(),
skuInfoVo
.
getSkuStock
(),
skuInfoVo
.
getWarningStock
(),
skuInfoVo
.
getPrice
(),
skuInfoVo
.
getPriceMember
(),
skuInfoVo
.
getWeight
(),
skuInfoVo
.
getBuyFactor
(),
skuInfoVo
.
getBuyRoster
(),
skuInfoVo
.
getBuyLimit
(),
skuInfoVo
.
getStoreId
(),
skuInfoVo
.
getSkuValidity
(),
skuInfoVo
.
getVirtualFlg
(),
skuInfoVo
.
getStatus
(),
skuInfoVo
.
getShelvesStatus
(),
skuInfoVo
.
getSkuAppear
(),
skuInfoVo
.
getShelvesAt
(),
uid
,
now
,
skuInfoVo
.
getLogisticsTemplate
()
});
log
.
debug
(
"dt2:{}"
,
lastGoodsInfoVo
);
return
tobeNextSpuFlg
?
lastGoodsInfoVo
:
null
;
}
private
GoblinGoodsSkuInfoVo
goodsInformationDataAnalysisProcessingForSku
(
GoblinGoodsImportDto
dt
,
GoblinGoodsInfoVo
lastGoodsInfoVo
,
String
uid
,
String
storeId
,
LocalDateTime
now
,
boolean
hasNextSpuFlg
,
List
<
GoblinGoodsSkuInfoVo
>
goodsSkuInfoVos
,
LinkedList
<
Object
[]>
initGoodsSkuObjs
)
{
String
uid
,
String
storeId
,
LocalDateTime
now
,
boolean
hasNextSpuFlg
)
{
GoblinGoodsSkuInfoVo
skuInfoVo
=
GoblinGoodsSkuInfoVo
.
getNew
();
skuInfoVo
.
setName
(
""
);
String
[]
skuSpecArr
=
dt
.
getSkuSpec
().
replace
(
":"
,
":"
).
replace
(
";"
,
";"
).
split
(
";"
);
List
<
GoblinGoodsSpecDto
>
skuSpecDtos
=
dt
.
getSkuSpecDtos
(
);
List
<
GoblinGoodsSpecVo
>
spuSpecVos
=
hasNextSpuFlg
?
ObjectUtil
.
getGoblinGoodsSpecVoArrayList
()
:
lastGoodsInfoVo
.
getSpecVoList
();
List
<
GoblinGoodsSpecDto
>
skuSpecDtos
=
ObjectUtil
.
getGoblinGoodsSpecDtoArrayList
();
for
(
int
i
=
0
,
size
=
skuSpecArr
.
length
;
i
<
size
;
i
++)
{
String
skuSpec
=
skuSpecArr
[
i
];
if
(
StringUtils
.
isEmpty
(
skuSpec
))
{
// 数据不规范停止解析并提示用户
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【请核实商品规格信息】"
);
}
String
[]
specArr
=
skuSpec
.
split
(
":"
);
if
(
ArrayUtils
.
isEmpty
(
specArr
)
||
specArr
.
length
!=
2
||
specArr
[
0
].
length
()
>
5
||
specArr
[
1
].
length
()
>
40
)
{
// 数据不规范停止解析并提示用户
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【请核实商品规格信息】"
);
}
GoblinGoodsSpecDto
skuSpecDto
=
GoblinGoodsSpecDto
.
getNew
();
skuSpecDto
.
setSpecName
(
specArr
[
0
]);
skuSpecDto
.
setSpecVname
(
specArr
[
1
]);
skuSpecDtos
.
add
(
skuSpecDto
);
for
(
int
i
=
0
,
size
=
skuSpecDtos
.
size
();
i
<
size
;
i
++)
{
GoblinGoodsSpecDto
skuSpecDto
=
skuSpecDtos
.
get
(
i
);
skuInfoVo
.
setName
(
skuInfoVo
.
getName
().
concat
(
skuSpecDto
.
getSpecVname
()));
...
...
@@ -224,21 +397,16 @@ public class GoblinStoreMgtGoodsImportService {
skuInfoVo
.
setPrice
(
dt
.
getPrice
());
//*
skuInfoVo
.
setPriceMember
(
dt
.
getPrice
());
//*
if
(
StringUtils
.
isNotEmpty
(
dt
.
getSkuCode
()))
{
if
(!
Pattern
.
matches
(
ALPHABET_NUMBER_UNDER_50
,
dt
.
getSkuCode
()))
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格编码格式错误】"
);
skuInfoVo
.
setSkuId
(
lastGoodsInfoVo
.
getSpuId
().
concat
(
dt
.
getSkuCode
()).
concat
(
StringUtils
.
right
(
String
.
valueOf
(
System
.
nanoTime
()),
5
)));
//*
}
else
{
skuInfoVo
.
setSkuId
(
lastGoodsInfoVo
.
getSpuId
().
concat
(
StringUtils
.
right
(
String
.
valueOf
(
System
.
nanoTime
()),
5
)));
//*
}
if
(
StringUtils
.
isNotEmpty
(
dt
.
getSkuImg
()))
{
if
(!
dt
.
getSkuImg
().
startsWith
(
"【图片链接】"
))
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格图片格式错误】"
);
String
[]
skuImgArr
=
dt
.
getSkuImg
().
replace
(
"【图片链接】"
,
""
).
replace
(
";"
,
";"
).
split
(
";"
);
if
(
skuImgArr
.
length
>
1
)
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格图片仅支持1张】"
);
skuInfoVo
.
setSkuPic
(
skuImgArr
[
0
]);
skuInfoVo
.
setSkuPic
(
dt
.
getSkuImg
());
}
else
{
// skuInfoVo.setSkuPic("");// 设置默认图片
}
if
(
StringUtils
.
isNotEmpty
(
dt
.
getSkuBarCode
()))
{
if
(!
Pattern
.
matches
(
ALPHABET_NUMBER_32
,
dt
.
getSkuCode
()))
throw
new
LiquidnetServiceException
(
"-1"
,
"数据内容不规范【规格条码格式错误】"
);
skuInfoVo
.
setSkuNo
(
dt
.
getSkuBarCode
());
//*
}
else
{
skuInfoVo
.
setSkuNo
(
lastGoodsInfoVo
.
getSpuNo
());
//*
...
...
@@ -259,16 +427,6 @@ public class GoblinStoreMgtGoodsImportService {
skuInfoVo
.
setStoreId
(
storeId
);
skuInfoVo
.
setSkuSpecList
(
skuSpecDtos
);
goodsSkuInfoVos
.
add
(
skuInfoVo
);
initGoodsSkuObjs
.
add
(
new
Object
[]{
skuInfoVo
.
getSkuId
(),
skuInfoVo
.
getSpuId
(),
skuInfoVo
.
getSkuNo
(),
skuInfoVo
.
getName
(),
skuInfoVo
.
getSubtitle
(),
skuInfoVo
.
getSellPrice
(),
skuInfoVo
.
getSkuPic
(),
skuInfoVo
.
getSkuIsbn
(),
skuInfoVo
.
getStock
(),
skuInfoVo
.
getSkuStock
(),
skuInfoVo
.
getWarningStock
(),
skuInfoVo
.
getPrice
(),
skuInfoVo
.
getPriceMember
(),
skuInfoVo
.
getWeight
(),
skuInfoVo
.
getBuyFactor
(),
skuInfoVo
.
getBuyRoster
(),
skuInfoVo
.
getBuyLimit
(),
skuInfoVo
.
getStoreId
(),
skuInfoVo
.
getSkuValidity
(),
skuInfoVo
.
getVirtualFlg
(),
skuInfoVo
.
getStatus
(),
skuInfoVo
.
getShelvesStatus
(),
skuInfoVo
.
getSkuAppear
(),
skuInfoVo
.
getShelvesAt
(),
uid
,
now
,
skuInfoVo
.
getLogisticsTemplate
()
});
if
(
hasNextSpuFlg
)
{
List
<
String
>
skuIdList
=
CollectionUtil
.
arrayListString
();
skuIdList
.
add
(
skuInfoVo
.
getSkuId
());
...
...
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