Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mall-server
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
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
yimu
mall-server
Commits
b12482f9
Commit
b12482f9
authored
Dec 23, 2021
by
wp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
外部token发布商品
parent
1deaa151
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
262 additions
and
14 deletions
+262
-14
NftEvm.java
...ava/com/fzm/mall/server/admin/block_chain/nft/NftEvm.java
+6
-3
ChainUtil.java
...com/fzm/mall/server/admin/block_chain/util/ChainUtil.java
+30
-0
SpuController.java
...l/server/admin/goods_center/controller/SpuController.java
+27
-0
GoodsSkuDTO.java
...all/server/admin/goods_center/entity/dto/GoodsSkuDTO.java
+3
-0
GoodsSpuDTO.java
...all/server/admin/goods_center/entity/dto/GoodsSpuDTO.java
+1
-1
GoodsSkuVO.java
.../mall/server/admin/goods_center/entity/vo/GoodsSkuVO.java
+1
-0
ExternalToken.java
...m/mall/server/admin/goods_center/model/ExternalToken.java
+3
-0
Sku.java
...ava/com/fzm/mall/server/admin/goods_center/model/Sku.java
+3
-1
ExternalTokenServiceImpl.java
...n/goods_center/service/impl/ExternalTokenServiceImpl.java
+2
-1
GoodsNftServiceImpl.java
.../admin/goods_center/service/impl/GoodsNftServiceImpl.java
+8
-0
SkuServiceImpl.java
...erver/admin/goods_center/service/impl/SkuServiceImpl.java
+70
-0
SpuServiceImpl.java
...erver/admin/goods_center/service/impl/SpuServiceImpl.java
+5
-4
UsuNftConfig.java
...all/server/admin/mq/config/goods_center/UsuNftConfig.java
+54
-0
NftConsumer.java
...ll/server/admin/mq/consumer/goods_center/NftConsumer.java
+33
-0
QueueTTLTypeEnum.java
.../com/fzm/mall/server/admin/mq/enums/QueueTTLTypeEnum.java
+3
-1
QueueTypeEnum.java
...ava/com/fzm/mall/server/admin/mq/enums/QueueTypeEnum.java
+3
-1
ExternalTokenMapper.xml
...ain/resources/mapper/goods_center/ExternalTokenMapper.xml
+1
-0
SkuMapper.xml
...dmin/src/main/resources/mapper/goods_center/SkuMapper.xml
+1
-0
mall_create.sql
mall-sql/mall_create.sql
+8
-2
No files found.
mall-server-admin/src/main/java/com/fzm/mall/server/admin/block_chain/nft/NftEvm.java
View file @
b12482f9
...
@@ -106,8 +106,9 @@ public class NftEvm {
...
@@ -106,8 +106,9 @@ public class NftEvm {
// System.err.println(hash);
// System.err.println(hash);
//发行NFT,本次发行的是ERC1155
//发行NFT,本次发行的是ERC1155
// String hash = ra.evmPublishToken(abi, cAddr, EvmTokenEnum.ERC1155, 0L, "1KzrvBBeVUavMjqnTVzzCygUVmPNk9vkra", null, 1631716701489L, 10000L, "publish", false);
String
hash
=
ra
.
evmPublishToken
(
abi
,
cAddr
,
EvmTokenEnum
.
ERC1155
,
0L
,
"1F5HWw8WB7iGat37RXqbfaQAcHUwpGedko"
,
"1F5HWw8WB7iGat37RXqbfaQAcHUwpGedko"
,
null
,
1631716701489L
,
10000L
,
"publish"
,
true
);
// System.err.println(hash);
System
.
err
.
println
(
hash
);
System
.
err
.
println
(
ra
.
cycleConfirmTxWithHash
(
hash
,
true
,
1000
).
getStatus
());
//NFT转账
//NFT转账
// String hash = ra.evmTransfer(abi, cAddr, EvmTokenEnum.ERC1155, 0L, to, tokenId, 100L, "transfer", publisher, null, false);
// String hash = ra.evmTransfer(abi, cAddr, EvmTokenEnum.ERC1155, 0L, to, tokenId, 100L, "transfer", publisher, null, false);
...
@@ -119,7 +120,9 @@ public class NftEvm {
...
@@ -119,7 +120,9 @@ public class NftEvm {
System.err.println("TRUE");
System.err.println("TRUE");
}*/
}*/
String
hash
=
ra
.
evmDeploy
(
code
,
abi
,
"MallNFT"
,
RpcConfig
.
TX_EVM_DEPLOY_FEE
,
"MallNFT"
,
null
,
tokenManager
,
tokenManagerKey
,
false
);
// String hash = ra.evmDeploy(code, abi, "MallNFT", RpcConfig.TX_EVM_DEPLOY_FEE, "MallNFT", null, tokenManager, tokenManagerKey, false);
// System.err.println(ra.walletCreateAccount("rressfe"));
}
}
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/block_chain/util/ChainUtil.java
View file @
b12482f9
...
@@ -129,6 +129,20 @@ public class ChainUtil {
...
@@ -129,6 +129,20 @@ public class ChainUtil {
return
hash
;
return
hash
;
}
}
//发行NFT,本次发行的是ERC1155 发行确认分体
public
String
evmPublishTokenSplitBatch
(
String
publisher
,
long
[]
tokenIds
,
long
[]
amounts
)
{
String
hash
=
null
;
switch
(
Objects
.
requireNonNull
(
ChainTypeEnum
.
getByType
(
type
)))
{
case
MAIN:
hash
=
mainClient
.
evmPublishTokenBatch
(
abi
,
cAddr
,
0L
,
publisher
,
publisher
,
null
,
tokenIds
,
amounts
,
"publish"
,
false
);
break
;
case
PARA:
hash
=
paraClient
.
evmPublishTokenBatch
(
abi
,
cAddr
,
0L
,
publisher
,
publisher
,
null
,
tokenIds
,
amounts
,
"publish"
,
true
);
break
;
}
return
hash
;
}
//NFT转账
//NFT转账
public
String
evmTransfer
(
String
to
,
String
publisher
,
long
tokenId
,
long
amount
)
{
public
String
evmTransfer
(
String
to
,
String
publisher
,
long
tokenId
,
long
amount
)
{
String
hash
=
null
;
String
hash
=
null
;
...
@@ -145,6 +159,22 @@ public class ChainUtil {
...
@@ -145,6 +159,22 @@ public class ChainUtil {
return
hash
;
return
hash
;
}
}
//NFT转账批量
public
String
evmTransferBatch
(
String
to
,
String
publisher
,
long
[]
tokenIds
,
long
[]
amounts
)
{
String
hash
=
null
;
switch
(
Objects
.
requireNonNull
(
ChainTypeEnum
.
getByType
(
type
)))
{
case
MAIN:
hash
=
mainClient
.
evmTransferBatch
(
abi
,
cAddr
,
EvmTokenEnum
.
ERC1155
,
0L
,
to
,
tokenIds
,
amounts
,
"transfer"
,
publisher
,
null
,
false
);
break
;
case
PARA:
hash
=
paraClient
.
evmTransferBatch
(
abi
,
cAddr
,
EvmTokenEnum
.
ERC1155
,
0L
,
to
,
tokenIds
,
amounts
,
"transfer"
,
publisher
,
null
,
true
);
break
;
}
return
hash
;
}
//查询NFT余额
//查询NFT余额
public
long
evmBalance
(
String
publisher
,
long
tokenId
)
{
public
long
evmBalance
(
String
publisher
,
long
tokenId
)
{
long
balance
=
0L
;
long
balance
=
0L
;
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/controller/SpuController.java
View file @
b12482f9
...
@@ -138,6 +138,33 @@ public class SpuController {
...
@@ -138,6 +138,33 @@ public class SpuController {
return
resFac
.
getSuccessResponseWithData
(
page
);
return
resFac
.
getSuccessResponseWithData
(
page
);
}
}
@ApiOperation
(
value
=
"分页查询-审核列表"
)
@GetMapping
(
"/goodsList/pagecheck"
)
public
ResponseVO
pageCheck
(
@ApiParam
(
name
=
"goodsId"
,
value
=
"商品编号"
)
@RequestParam
(
required
=
false
)
String
goodsId
,
@ApiParam
(
name
=
"goodsName"
,
value
=
"商品名称"
)
@RequestParam
(
required
=
false
)
String
goodsName
,
@ApiParam
(
name
=
"status"
,
value
=
"状态"
)
@RequestParam
(
required
=
false
)
Integer
status
,
@ApiParam
(
name
=
"addTimeHead"
,
value
=
"开始时间"
)
@RequestParam
(
required
=
false
)
Long
addTimeHead
,
@ApiParam
(
name
=
"addTimeTail"
,
value
=
"结束时间"
)
@RequestParam
(
required
=
false
)
Long
addTimeTail
,
@ApiParam
(
name
=
"goodsType"
,
value
=
"商品类型"
)
@RequestParam
(
required
=
false
)
Integer
goodsType
,
@ApiParam
(
name
=
"pageNum"
,
value
=
"当前页数"
)
@RequestParam
Integer
pageNum
,
@ApiParam
(
name
=
"pageSize"
,
value
=
"每页个数"
)
@RequestParam
Integer
pageSize
,
@ApiParam
(
name
=
"adminId"
,
value
=
"管理员id"
)
@RequestHeader
String
adminId
)
{
Admin
admin
=
adminService
.
getByAdminId
(
adminId
);
IPage
<
GoodsSpuVO
>
page
=
spuService
.
page
(
admin
.
getMerchantId
(),
admin
.
getType
(),
goodsId
,
goodsName
,
status
,
addTimeHead
,
addTimeTail
,
goodsType
,
pageNum
,
pageSize
);
return
resFac
.
getSuccessResponseWithData
(
page
);
}
//BUG
//BUG
@ApiOperation
(
value
=
"详情"
)
@ApiOperation
(
value
=
"详情"
)
@GetMapping
(
"/goodsList/detail"
)
@GetMapping
(
"/goodsList/detail"
)
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/entity/dto/GoodsSkuDTO.java
View file @
b12482f9
...
@@ -54,4 +54,7 @@ public class GoodsSkuDTO {
...
@@ -54,4 +54,7 @@ public class GoodsSkuDTO {
@ApiModelProperty
(
"是否重发"
)
@ApiModelProperty
(
"是否重发"
)
private
Boolean
republish
;
private
Boolean
republish
;
@ApiModelProperty
(
"nft销售方式(1.原商品销售 2.拷贝销售)"
)
private
Integer
nftSalesType
;
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/entity/dto/GoodsSpuDTO.java
View file @
b12482f9
...
@@ -67,7 +67,7 @@ public class GoodsSpuDTO {
...
@@ -67,7 +67,7 @@ public class GoodsSpuDTO {
// @NotBlank(message = MallResponseError.NULL_PARAM_ERROR)
// @NotBlank(message = MallResponseError.NULL_PARAM_ERROR)
// private String templateId;
// private String templateId;
@ApiModelProperty
(
"商品通证(0.否 1.是,自动生成Token 2.是,使用外部既有Token)"
)
@ApiModelProperty
(
"商品通证(0.否 1.是,自动生成Token 2.是,使用外部既有Token
3.外部token使用权
)"
)
// @NotNull(message = MallResponseError.NULL_PARAM_ERROR)
// @NotNull(message = MallResponseError.NULL_PARAM_ERROR)
private
Integer
commodityPass
;
private
Integer
commodityPass
;
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/entity/vo/GoodsSkuVO.java
View file @
b12482f9
...
@@ -24,5 +24,6 @@ public class GoodsSkuVO {
...
@@ -24,5 +24,6 @@ public class GoodsSkuVO {
private
BigDecimal
balanceNum
;
private
BigDecimal
balanceNum
;
private
List
<
SkuPropertyVO
>
propertyList
;
private
List
<
SkuPropertyVO
>
propertyList
;
private
Integer
status
;
private
Integer
status
;
private
Integer
nftSalesType
;
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/model/ExternalToken.java
View file @
b12482f9
...
@@ -85,4 +85,7 @@ public class ExternalToken implements Serializable {
...
@@ -85,4 +85,7 @@ public class ExternalToken implements Serializable {
@ApiModelProperty
(
value
=
"更新时间"
)
@ApiModelProperty
(
value
=
"更新时间"
)
@TableField
(
fill
=
FieldFill
.
INSERT_UPDATE
)
@TableField
(
fill
=
FieldFill
.
INSERT_UPDATE
)
private
Long
updateTime
;
private
Long
updateTime
;
@ApiModelProperty
(
value
=
"商户id"
)
private
String
hash
;
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/model/Sku.java
View file @
b12482f9
...
@@ -98,5 +98,7 @@ public class Sku implements Serializable {
...
@@ -98,5 +98,7 @@ public class Sku implements Serializable {
@TableField
(
value
=
"update_time"
,
fill
=
FieldFill
.
INSERT_UPDATE
)
@TableField
(
value
=
"update_time"
,
fill
=
FieldFill
.
INSERT_UPDATE
)
private
Long
updateTime
;
private
Long
updateTime
;
@ApiModelProperty
(
value
=
"nft销售方式(1.原商品销售 2.拷贝销售)"
)
@TableField
(
"nft_sales_type"
)
private
Integer
nftSalesType
;
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/service/impl/ExternalTokenServiceImpl.java
View file @
b12482f9
...
@@ -101,7 +101,6 @@ public class ExternalTokenServiceImpl extends ServiceImpl<ExternalTokenMapper, E
...
@@ -101,7 +101,6 @@ public class ExternalTokenServiceImpl extends ServiceImpl<ExternalTokenMapper, E
}
}
}
}
}
}
}
else
{
}
else
{
ExternalToken
externalToken
=
new
ExternalToken
();
ExternalToken
externalToken
=
new
ExternalToken
();
externalToken
.
setCommodityPassId
(
UUIDUtil
.
getUUID
());
externalToken
.
setCommodityPassId
(
UUIDUtil
.
getUUID
());
...
@@ -114,6 +113,8 @@ public class ExternalTokenServiceImpl extends ServiceImpl<ExternalTokenMapper, E
...
@@ -114,6 +113,8 @@ public class ExternalTokenServiceImpl extends ServiceImpl<ExternalTokenMapper, E
externalToken
.
setName
(
name
);
externalToken
.
setName
(
name
);
externalToken
.
setPublishTime
(
publishTime
);
externalToken
.
setPublishTime
(
publishTime
);
externalToken
.
setPublisher
(
publisher
);
externalToken
.
setPublisher
(
publisher
);
//TODO 唐拓接口
externalToken
.
setHash
(
"xxx"
);
save
(
externalToken
);
save
(
externalToken
);
}
}
}
}
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/service/impl/GoodsNftServiceImpl.java
View file @
b12482f9
...
@@ -58,6 +58,14 @@ public class GoodsNftServiceImpl extends ServiceImpl<GoodsNftMapper, GoodsNft> i
...
@@ -58,6 +58,14 @@ public class GoodsNftServiceImpl extends ServiceImpl<GoodsNftMapper, GoodsNft> i
//发行NFT
//发行NFT
hash
=
chainUtil
.
evmPublishTokenSplit
(
nftAddr
,
timestamp
,
nftdto
.
getNumber
());
hash
=
chainUtil
.
evmPublishTokenSplit
(
nftAddr
,
timestamp
,
nftdto
.
getNumber
());
System
.
err
.
println
(
"nftdto"
);
System
.
err
.
println
(
nftdto
);
System
.
err
.
println
(
goodsId
);
System
.
err
.
println
(
name
);
System
.
err
.
println
(
nftAddr
);
System
.
err
.
println
(
merchantId
);
System
.
err
.
println
(
hash
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"goodsId"
,
goodsId
);
map
.
put
(
"goodsId"
,
goodsId
);
map
.
put
(
"hash"
,
hash
);
map
.
put
(
"hash"
,
hash
);
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/service/impl/SkuServiceImpl.java
View file @
b12482f9
package
com
.
fzm
.
mall
.
server
.
admin
.
goods_center
.
service
.
impl
;
package
com
.
fzm
.
mall
.
server
.
admin
.
goods_center
.
service
.
impl
;
import
com.alibaba.fastjson.JSONArray
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.fzm.mall.server.admin.block_chain.util.ChainUtil
;
import
com.fzm.mall.server.admin.constant.MALLGlobalConfig
;
import
com.fzm.mall.server.admin.constant.MallResponseError
;
import
com.fzm.mall.server.admin.constant.MallResponseError
;
import
com.fzm.mall.server.admin.exception.MyException
;
import
com.fzm.mall.server.admin.exception.MyException
;
import
com.fzm.mall.server.admin.goods_center.entity.dto.GoodsSkuDTO
;
import
com.fzm.mall.server.admin.goods_center.entity.dto.GoodsSkuDTO
;
...
@@ -56,6 +59,8 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
...
@@ -56,6 +59,8 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
private
DozerBeanMapper
beanMapper
;
private
DozerBeanMapper
beanMapper
;
@Autowired
@Autowired
private
IExternalTokenService
externalTokenService
;
private
IExternalTokenService
externalTokenService
;
@Autowired
private
ChainUtil
chainUtil
;
@Override
@Override
public
void
add
(
List
<
GoodsSkuDTO
>
kDTOs
,
String
goodsId
,
String
goodsName
,
String
merchantId
,
Integer
commodityPass
,
Integer
pDTOType
)
{
public
void
add
(
List
<
GoodsSkuDTO
>
kDTOs
,
String
goodsId
,
String
goodsName
,
String
merchantId
,
Integer
commodityPass
,
Integer
pDTOType
)
{
...
@@ -109,6 +114,42 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
...
@@ -109,6 +114,42 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
uw
.
eq
(
ExternalToken:
:
getCommodityPassId
,
sku
.
getCommodityPassId
());
uw
.
eq
(
ExternalToken:
:
getCommodityPassId
,
sku
.
getCommodityPassId
());
externalTokenService
.
update
(
uw
);
externalTokenService
.
update
(
uw
);
}
}
if
(
commodityPass
.
equals
(
3
))
{
LambdaUpdateWrapper
<
ExternalToken
>
uw
=
new
LambdaUpdateWrapper
<>();
uw
.
set
(
ExternalToken:
:
getBindNumber
,
sku
.
getStock
());
uw
.
set
(
ExternalToken:
:
getGoodsId
,
goodsId
);
uw
.
set
(
ExternalToken:
:
getGoodsName
,
goodsName
);
uw
.
set
(
ExternalToken:
:
getStatus
,
1
);
uw
.
eq
(
ExternalToken:
:
getCommodityPassId
,
sku
.
getCommodityPassId
());
externalTokenService
.
update
(
uw
);
if
(
kDTO
.
getNftSalesType
().
equals
(
2
))
{
//发行NFT
ExternalToken
externalToken
=
externalTokenService
.
queryByLabelNameAndMerchantId
(
kDTO
.
getCoinName
(),
merchantId
);
String
tokenId
=
externalToken
.
getTokenId
().
toString
();
long
[]
tokenIds
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
long
[]
amounts
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
long
[]
nos
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
nos
[
0
]
=
0
;
for
(
int
i
=
0
;
i
<
kDTO
.
getStock
();
i
++)
{
tokenIds
[
i
]
=
Long
.
parseLong
(
tokenId
+
(
i
+
1
));
amounts
[
i
]
=
1
;
nos
[
i
+
1
]
=
i
+
1
;
}
String
hash
=
chainUtil
.
evmPublishTokenSplitBatch
(
merchant
.
getNftAddr
(),
tokenIds
,
amounts
);
System
.
err
.
println
(
"tokenIds:"
+
tokenIds
);
System
.
err
.
println
(
"amounts:"
+
amounts
);
System
.
err
.
println
(
"nos:"
+
nos
);
System
.
err
.
println
(
"hash:"
+
hash
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"goodsId"
,
goodsId
);
map
.
put
(
"hash"
,
hash
);
map
.
put
(
"prefix"
,
tokenId
);
map
.
put
(
"nos"
,
JSONArray
.
toJSON
(
nos
));
producer
.
sendTTL
(
map
,
QueueTTLTypeEnum
.
NFT_USU_TTL
,
10
*
1000
);
}
}
}
}
saveBatch
(
skus
);
saveBatch
(
skus
);
...
@@ -241,6 +282,35 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
...
@@ -241,6 +282,35 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
externalToken
.
setBindNumber
(
externalToken
.
getBindNumber
().
add
(
new
BigDecimal
(
kDTO
.
getStock
()
-
oldStock
)));
externalToken
.
setBindNumber
(
externalToken
.
getBindNumber
().
add
(
new
BigDecimal
(
kDTO
.
getStock
()
-
oldStock
)));
externalTokenService
.
updateById
(
externalToken
);
externalTokenService
.
updateById
(
externalToken
);
}
}
if
(
commodityPass
.
equals
(
3
))
{
if
(
kDTO
.
getNftSalesType
().
equals
(
2
))
{
//发行NFT
ExternalToken
externalToken
=
externalTokenService
.
queryByLabelNameAndMerchantId
(
kDTO
.
getCoinName
(),
merchantId
);
String
tokenId
=
externalToken
.
getTokenId
().
toString
();
long
[]
tokenIds
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
long
[]
amounts
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
long
[]
nos
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
nos
[
0
]
=
0
;
for
(
int
i
=
0
;
i
<
kDTO
.
getStock
();
i
++)
{
tokenIds
[
i
]
=
Long
.
parseLong
(
tokenId
+
(
i
+
1
));
amounts
[
i
]
=
1
;
nos
[
i
+
1
]
=
i
+
1
;
}
String
hash
=
chainUtil
.
evmPublishTokenSplitBatch
(
merchant
.
getNftAddr
(),
tokenIds
,
amounts
);
System
.
err
.
println
(
"tokenIds:"
+
tokenIds
);
System
.
err
.
println
(
"amounts:"
+
amounts
);
System
.
err
.
println
(
"nos:"
+
nos
);
System
.
err
.
println
(
"hash:"
+
hash
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"goodsId"
,
goodsId
);
map
.
put
(
"hash"
,
hash
);
map
.
put
(
"prefix"
,
tokenId
);
map
.
put
(
"nos"
,
JSONArray
.
toJSON
(
nos
));
producer
.
sendTTL
(
map
,
QueueTTLTypeEnum
.
NFT_USU_TTL
,
10
*
1000
);
}
}
updateById
(
one
);
updateById
(
one
);
}
else
{
}
else
{
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/service/impl/SpuServiceImpl.java
View file @
b12482f9
...
@@ -116,7 +116,8 @@ public class SpuServiceImpl extends ServiceImpl<SpuMapper, Spu> implements ISpuS
...
@@ -116,7 +116,8 @@ public class SpuServiceImpl extends ServiceImpl<SpuMapper, Spu> implements ISpuS
Spu
spu
=
beanMapper
.
map
(
pDTO
,
Spu
.
class
);
Spu
spu
=
beanMapper
.
map
(
pDTO
,
Spu
.
class
);
spu
.
setGoodsId
(
goodsId
);
spu
.
setGoodsId
(
goodsId
);
spu
.
setMerchantId
(
merchantId
);
spu
.
setMerchantId
(
merchantId
);
if
(
pDTO
.
getCommodityPass
()
==
null
||
pDTO
.
getCommodityPass
().
equals
(
0
)
||
pDTO
.
getCommodityPass
().
equals
(
2
))
{
if
(
pDTO
.
getCommodityPass
()
==
null
||
pDTO
.
getCommodityPass
().
equals
(
0
)
||
pDTO
.
getCommodityPass
().
equals
(
2
)
||
(
pDTO
.
getSkuList
().
get
(
0
)
!=
null
&&
pDTO
.
getSkuList
().
get
(
0
).
getNftSalesType
()
==
1
))
{
spu
.
setStatus
(
SpuStatusEnum
.
WAIT_CHECK
.
getStatus
());
spu
.
setStatus
(
SpuStatusEnum
.
WAIT_CHECK
.
getStatus
());
}
else
{
}
else
{
spu
.
setStatus
(
SpuStatusEnum
.
ISSUE
.
getStatus
());
spu
.
setStatus
(
SpuStatusEnum
.
ISSUE
.
getStatus
());
...
@@ -226,7 +227,8 @@ public class SpuServiceImpl extends ServiceImpl<SpuMapper, Spu> implements ISpuS
...
@@ -226,7 +227,8 @@ public class SpuServiceImpl extends ServiceImpl<SpuMapper, Spu> implements ISpuS
}
}
Spu
spu
=
beanMapper
.
map
(
eDTO
,
Spu
.
class
);
Spu
spu
=
beanMapper
.
map
(
eDTO
,
Spu
.
class
);
if
(
eDTO
.
getCommodityPass
()
==
null
||
eDTO
.
getCommodityPass
().
equals
(
0
)
||
eDTO
.
getCommodityPass
().
equals
(
2
)
||
type
.
equals
(
6
))
{
if
(
eDTO
.
getCommodityPass
()
==
null
||
eDTO
.
getCommodityPass
().
equals
(
0
)
||
eDTO
.
getCommodityPass
().
equals
(
2
)
||
type
.
equals
(
6
)
||
(
eDTO
.
getSkuList
().
get
(
0
)
!=
null
&&
eDTO
.
getSkuList
().
get
(
0
).
getNftSalesType
()
==
1
))
{
spu
.
setStatus
(
SpuStatusEnum
.
WAIT_CHECK
.
getStatus
());
spu
.
setStatus
(
SpuStatusEnum
.
WAIT_CHECK
.
getStatus
());
}
else
{
}
else
{
spu
.
setStatus
(
SpuStatusEnum
.
ISSUE
.
getStatus
());
spu
.
setStatus
(
SpuStatusEnum
.
ISSUE
.
getStatus
());
...
@@ -367,8 +369,7 @@ public class SpuServiceImpl extends ServiceImpl<SpuMapper, Spu> implements ISpuS
...
@@ -367,8 +369,7 @@ public class SpuServiceImpl extends ServiceImpl<SpuMapper, Spu> implements ISpuS
qw2
.
eq
(
ExternalToken:
:
getLabelName
,
sku
.
getCoinName
());
qw2
.
eq
(
ExternalToken:
:
getLabelName
,
sku
.
getCoinName
());
qw2
.
eq
(
ExternalToken:
:
getMerchantId
,
spu
.
getMerchantId
());
qw2
.
eq
(
ExternalToken:
:
getMerchantId
,
spu
.
getMerchantId
());
ExternalToken
externalToken
=
externalTokenService
.
getOne
(
qw2
);
ExternalToken
externalToken
=
externalTokenService
.
getOne
(
qw2
);
String
hash
=
chainUtil
.
getGoodsHash
(
externalToken
.
getTokenId
(),
merchantService
.
getByMerchantId
(
spu
.
getMerchantId
()).
getNftAddr
());
spu
.
setHash
(
externalToken
.
getHash
());
spu
.
setHash
(
hash
);
}
}
spu
.
setStatus
(
type
);
spu
.
setStatus
(
type
);
updateById
(
spu
);
updateById
(
spu
);
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/mq/config/goods_center/UsuNftConfig.java
0 → 100644
View file @
b12482f9
package
com
.
fzm
.
mall
.
server
.
admin
.
mq
.
config
.
goods_center
;
import
com.fzm.mall.server.admin.mq.enums.QueueTTLTypeEnum
;
import
com.fzm.mall.server.admin.mq.enums.QueueTypeEnum
;
import
org.springframework.amqp.core.*
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
/**
* @author wangp
* @description 批量发行使用权
* @date 2020/10/20 17:39
*/
@Configuration
public
class
UsuNftConfig
{
@Bean
DirectExchange
usuNftDirect
()
{
return
(
DirectExchange
)
ExchangeBuilder
.
directExchange
(
QueueTypeEnum
.
NFT_USU
.
getExchange
())
.
durable
(
true
).
build
();
}
@Bean
DirectExchange
usuNftTTLDirect
()
{
return
(
DirectExchange
)
ExchangeBuilder
.
directExchange
(
QueueTTLTypeEnum
.
NFT_USU_TTL
.
getExchange
())
.
durable
(
true
).
build
();
}
@Bean
public
Queue
usuNftQueue
()
{
return
new
Queue
(
QueueTypeEnum
.
NFT_USU
.
getQueue
());
}
@Bean
public
Queue
usuNftTTLQueue
()
{
return
QueueBuilder
.
durable
(
QueueTTLTypeEnum
.
NFT_USU_TTL
.
getQueue
())
// 配置到期后转发的交换
.
withArgument
(
"x-dead-letter-exchange"
,
QueueTypeEnum
.
NFT_USU
.
getExchange
())
// 配置到期后转发的路由键
.
withArgument
(
"x-dead-letter-routing-key"
,
QueueTypeEnum
.
NFT_USU
.
getQueueKey
()).
build
();
}
@Bean
Binding
usuNftBinding
(
DirectExchange
usuNftDirect
,
Queue
usuNftQueue
)
{
return
BindingBuilder
.
bind
(
usuNftQueue
).
to
(
usuNftDirect
).
with
(
QueueTypeEnum
.
NFT_USU
.
getQueueKey
());
}
@Bean
public
Binding
usuNftTTLBinding
(
Queue
usuNftTTLQueue
,
DirectExchange
usuNftTTLDirect
)
{
return
BindingBuilder
.
bind
(
usuNftTTLQueue
).
to
(
usuNftTTLDirect
)
.
with
(
QueueTTLTypeEnum
.
NFT_USU_TTL
.
getQueueKey
());
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/mq/consumer/goods_center/NftConsumer.java
View file @
b12482f9
...
@@ -2,8 +2,11 @@ package com.fzm.mall.server.admin.mq.consumer.goods_center;
...
@@ -2,8 +2,11 @@ package com.fzm.mall.server.admin.mq.consumer.goods_center;
import
cn.fzm.chain.simplesdk.constant.TxStatusEnum
;
import
cn.fzm.chain.simplesdk.constant.TxStatusEnum
;
import
cn.fzm.chain.simplesdk.model.TxResult
;
import
cn.fzm.chain.simplesdk.model.TxResult
;
import
com.alibaba.fastjson.JSONArray
;
import
com.fzm.mall.server.admin.block_chain.util.ChainUtil
;
import
com.fzm.mall.server.admin.block_chain.util.ChainUtil
;
import
com.fzm.mall.server.admin.goods_center.enums.status.SpuStatusEnum
;
import
com.fzm.mall.server.admin.goods_center.enums.status.SpuStatusEnum
;
import
com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct
;
import
com.fzm.mall.server.admin.goods_center.service.IGoodsSkuUsufructService
;
import
com.fzm.mall.server.admin.goods_center.service.ISkuService
;
import
com.fzm.mall.server.admin.goods_center.service.ISkuService
;
import
com.fzm.mall.server.admin.goods_center.service.ISpuService
;
import
com.fzm.mall.server.admin.goods_center.service.ISpuService
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
...
@@ -27,6 +30,7 @@ public class NftConsumer {
...
@@ -27,6 +30,7 @@ public class NftConsumer {
private
final
ISpuService
spuService
;
private
final
ISpuService
spuService
;
private
final
ChainUtil
chainUtil
;
private
final
ChainUtil
chainUtil
;
private
final
IGoodsSkuUsufructService
goodsSkuUsufructService
;
//发行
//发行
@RabbitListener
(
queues
=
"ly.issue.nft.queue"
)
@RabbitListener
(
queues
=
"ly.issue.nft.queue"
)
...
@@ -50,4 +54,33 @@ public class NftConsumer {
...
@@ -50,4 +54,33 @@ public class NftConsumer {
}
}
}
}
//发行
@RabbitListener
(
queues
=
"ly.usu.nft.queue"
)
public
void
usuCoinsPrice
(
Map
<
String
,
Object
>
obj
)
{
try
{
String
goodsId
=
obj
.
get
(
"goodsId"
)
+
""
;
String
hash
=
obj
.
get
(
"hash"
)
+
""
;
String
prefix
=
obj
.
get
(
"prefix"
)
+
""
;
String
nos
=
obj
.
get
(
"nos"
)
+
""
;
System
.
err
.
println
(
"obj:"
+
obj
);
//发行token
TxResult
tr
=
chainUtil
.
cycleConfirmTxWithHash
(
hash
);
log
.
info
(
"map========================="
+
tr
.
getStatus
());
if
(
tr
.
getStatus
()
!=
TxStatusEnum
.
SUCCESS
)
{
log
.
error
(
"NFT发行失败,交易HASH:{},失败原因:{}"
,
hash
,
tr
.
getErrMsg
());
spuService
.
updateStatus
(
goodsId
,
SpuStatusEnum
.
FAIL
.
getStatus
(),
tr
.
getErrMsg
().
getValue
());
// skuService.updateStatus(skuId, SkuStatusEnum.ISSUE_FAIL.getStatus(), tr.getErrMsg().getValue());
}
else
{
spuService
.
updateStatus
(
goodsId
,
SpuStatusEnum
.
WAIT_CHECK
.
getStatus
(),
""
);
GoodsSkuUsufruct
goodsSkuUsufruct
=
new
GoodsSkuUsufruct
();
goodsSkuUsufruct
.
setPrefix
(
prefix
);
goodsSkuUsufruct
.
setSerialNo
(
nos
.
toString
());
goodsSkuUsufructService
.
save
(
goodsSkuUsufruct
);
}
}
catch
(
Exception
e
)
{
return
;
}
}
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/mq/enums/QueueTTLTypeEnum.java
View file @
b12482f9
...
@@ -34,7 +34,9 @@ public enum QueueTTLTypeEnum {
...
@@ -34,7 +34,9 @@ public enum QueueTTLTypeEnum {
// 用户资产充值、扣除
// 用户资产充值、扣除
USER_ASSETS_RECHARGE_OR_DEDUCTION_TTL
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-user-assets-recharge-or-deduction-ttl-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".user.assets.recharge.or.deduction.ttl.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".user.assets.recharge.or.deduction.ttl.key"
),
USER_ASSETS_RECHARGE_OR_DEDUCTION_TTL
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-user-assets-recharge-or-deduction-ttl-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".user.assets.recharge.or.deduction.ttl.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".user.assets.recharge.or.deduction.ttl.key"
),
// 发行nft
// 发行nft
NFT_ISSUE_TTL
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-issue-nft-ttl-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".issue.nft.ttl.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".issue.nft.ttl.key"
);
NFT_ISSUE_TTL
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-issue-nft-ttl-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".issue.nft.ttl.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".issue.nft.ttl.key"
),
// 批量发行使用权
NFT_USU_TTL
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-usu-nft-ttl-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".usu.nft.ttl.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".usu.nft.ttl.key"
);
private
String
exchange
;
private
String
exchange
;
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/mq/enums/QueueTypeEnum.java
View file @
b12482f9
...
@@ -38,7 +38,9 @@ public enum QueueTypeEnum {
...
@@ -38,7 +38,9 @@ public enum QueueTypeEnum {
//用户支付有效订单后得7-8天内,发送升级积分
//用户支付有效订单后得7-8天内,发送升级积分
USER_MEMBER_UP
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-memberup-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".memberup.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".memberup.key"
),
USER_MEMBER_UP
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-memberup-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".memberup.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".memberup.key"
),
//发行nft
//发行nft
NFT_ISSUE
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-issue-nft-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".issue.nft.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".issue.nft.key"
);
NFT_ISSUE
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-issue-nft-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".issue.nft.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".issue.nft.key"
),
//批量发行使用权
NFT_USU
(
MALLGlobalConfig
.
PROJECT_PREFIX
+
"-usu-nft-exchange"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".usu.nft.queue"
,
MALLGlobalConfig
.
PROJECT_PREFIX
+
".usu.nft.key"
);
private
String
exchange
;
private
String
exchange
;
...
...
mall-server-admin/src/main/resources/mapper/goods_center/ExternalTokenMapper.xml
View file @
b12482f9
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
<result
column=
"type"
property=
"type"
/>
<result
column=
"type"
property=
"type"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"hash"
property=
"hash"
/>
</resultMap>
</resultMap>
<select
id=
"page"
resultType=
"com.fzm.mall.server.admin.goods_center.entity.dto.ExternalTokenDTO"
>
<select
id=
"page"
resultType=
"com.fzm.mall.server.admin.goods_center.entity.dto.ExternalTokenDTO"
>
...
...
mall-server-admin/src/main/resources/mapper/goods_center/SkuMapper.xml
View file @
b12482f9
...
@@ -21,6 +21,7 @@
...
@@ -21,6 +21,7 @@
<result
column=
"err_msg"
property=
"errMsg"
/>
<result
column=
"err_msg"
property=
"errMsg"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"nft_sales_type"
property=
"nftSalesType"
/>
</resultMap>
</resultMap>
</mapper>
</mapper>
mall-sql/mall_create.sql
View file @
b12482f9
...
@@ -2481,4 +2481,10 @@ ALTER TABLE `goods_spu`
...
@@ -2481,4 +2481,10 @@ ALTER TABLE `goods_spu`
ADD
COLUMN
`hash`
varchar
(
255
)
COLLATE
utf8mb4_unicode_ci
DEFAULT
NULL
COMMENT
'通邦nfthash'
,
AFTER
`nft_file`
;
ADD
COLUMN
`hash`
varchar
(
255
)
COLLATE
utf8mb4_unicode_ci
DEFAULT
NULL
COMMENT
'通邦nfthash'
,
AFTER
`nft_file`
;
ALTER
TABLE
`opration_function`
ALTER
TABLE
`opration_function`
ADD
COLUMN
`param`
varchar
(
500
)
NOT
NULL
DEFAULT
''
COMMENT
'功能区跳转参数'
;
ADD
COLUMN
`param`
varchar
(
500
)
NOT
NULL
DEFAULT
''
COMMENT
'功能区跳转参数'
;
\ No newline at end of file
ALTER
TABLE
`goods_sku`
ADD
COLUMN
`nft_sales_type`
tinyint
(
1
)
NOT
NULL
DEFAULT
'0'
COMMENT
'nft销售方式(1.原商品销售 2.拷贝销售)'
;
ALTER
TABLE
`external_token`
ADD
COLUMN
`hash`
varchar
(
255
)
COLLATE
utf8mb4_unicode_ci
DEFAULT
''
COMMENT
'外部hash表'
;
\ 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