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
c2fa5543
Commit
c2fa5543
authored
Dec 27, 2021
by
wlx@33.cn
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' of
https://gitlab.33.cn/yimu/mall-server
into dev
parents
32a6cd1d
ea496bd7
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
90 additions
and
43 deletions
+90
-43
RechargeTask.java
.../fzm/mall/server/admin/block_chain/task/RechargeTask.java
+19
-19
SlcRechargeTask.java
...m/mall/server/admin/block_chain/task/SlcRechargeTask.java
+32
-3
GoodsSkuUsufruct.java
...all/server/admin/goods_center/model/GoodsSkuUsufruct.java
+8
-3
ExternalTokenServiceImpl.java
...n/goods_center/service/impl/ExternalTokenServiceImpl.java
+2
-2
SkuServiceImpl.java
...erver/admin/goods_center/service/impl/SkuServiceImpl.java
+18
-13
NftConsumer.java
...ll/server/admin/mq/consumer/goods_center/NftConsumer.java
+4
-0
GoodsSkuUsufructMapper.xml
.../resources/mapper/goods_center/GoodsSkuUsufructMapper.xml
+1
-0
ShopNavigationController.java
...rver/front/goods/controller/ShopNavigationController.java
+4
-1
mall_create.sql
mall-sql/mall_create.sql
+2
-2
No files found.
mall-server-admin/src/main/java/com/fzm/mall/server/admin/block_chain/task/RechargeTask.java
View file @
c2fa5543
...
...
@@ -245,7 +245,7 @@
// // log.info("【平行链充值程序】充值交易查询开始,当前确认高度:" + current_height + ",链上高度:" +
// // leastHeight);
// }
// if (current_height >
=
leastHeight) { // 如果已经确认到最新高度,那么稍等一会再确认
// if (current_height > leastHeight) { // 如果已经确认到最新高度,那么稍等一会再确认
// try {
// Thread.sleep(10 * 1000);
// } catch (InterruptedException ie) {
...
...
@@ -272,7 +272,7 @@
// continue;
// }
//
// // 判断币的类型 COINS
// /
*/
/ 判断币的类型 COINS
// if ((adminProperties.getTitle() + CHAIN33_COINS).equals(execer)) {
// log.info("【平行链充值程序】解析到COINS交易,区块高度:{},Hash:{},详情:{}", current_height, txHash,
// JSON.toJSONString(txDetail));
...
...
@@ -301,7 +301,7 @@
// Merchant fromUserAddress = merchantService.queryByAddress(fromAddr, false);
// if (fromUserAddress != null && !StringUtil.isNullOrEmpty(fromUserAddress.getMerchantId())) {
// // 检索提币交易记录的hash是否包含当前hash以及代扣hash
// /*ArrayList<String> hashList = Lists.newArrayList();
//
*/
/*ArrayList<String> hashList = Lists.newArrayList();
// hashList.add(txDetail.getHash());
// String grpTxHash = paraClient.getGrpTxHashFromReal(txDetail.getHash());
// if (!StringUtil.isNullOrEmpty(grpTxHash)) {
...
...
@@ -311,7 +311,7 @@
// if (hashCount <= 0) {
// log.info("【平行链充值程序】-EVM-系统内部非提币交易的Hash,过滤");
// continue;
// }*/
// }*/
/*
// log.info("【平行链充值程序】-COINS-系统内部提币交易的Hash,过滤");
// }
//
...
...
@@ -321,8 +321,8 @@
//
// merchantAssetsService.updateAssets(toUserAddress.getMerchantId(), toUserAddress.getExternalTokenAddr(),
// txDetail.getAssetType(), amount);
// /*coinService.addUserCoin(toUserAddress.getUid(), 1, txDetail.getAssetType(), 1,
// amount.toPlainString(), 4, fromAddr);*/
//
*/
/*coinService.addUserCoin(toUserAddress.getUid(), 1, txDetail.getAssetType(), 1,
// amount.toPlainString(), 4, fromAddr);*/
/*
// merchantAssetsFlowService.saveOutRecharge(toUserAddress.getMerchantId(), txDetail.getAssetType(),
// amount, 20, fromAddr);
//
...
...
@@ -340,7 +340,7 @@
// externalTokenTradeService.addTrade(commodityPassId, fromAddr, amount);
//
// // 添加进当前高度的充值集合
// /*TxInfoByBlock txinfo = new TxInfoByBlock();
//
*/
/*TxInfoByBlock txinfo = new TxInfoByBlock();
// txinfo.setFrom(txDetail.getFrom());
// txinfo.setBlocktime(txDetail.getBlocktime() + "");
// txinfo.setHash(txDetail.getHash());
...
...
@@ -352,15 +352,15 @@
// txinfo.setTxIndex(txDetail.getIndex());
// txinfo.setValue(
// txDetail.getAmount().divide(BigDecimal.valueOf(100000000L)).toPlainString());
// list.add(txinfo);*/
// list.add(txinfo);*/
/*
//
// // 发起转币 ===> 系统账户
// /*String hash = paraClient.localTran(RC4Util.decrypt(toUserAddress.getPrivateKey(), null),
//
*/
/*String hash = paraClient.localTran(RC4Util.decrypt(toUserAddress.getPrivateKey(), null),
// adminProperties.getAddr(),
// (amount.multiply(BigDecimal.valueOf(100000000L))), "", false,
// txDetail.getAssetType(), false);
// log.info("【平行链充值程序】将用户地址的充值资产转入系统账户 UID:{},数量:{},Hash:{}", toUserAddress.getUid(), amount,
// hash);*/
// hash);*/
/*
//
// }
//
...
...
@@ -393,7 +393,7 @@
// Merchant fromUserAddress = merchantService.queryByAddress(fromAddr, false);
// if (fromUserAddress != null && !StringUtil.isNullOrEmpty(fromUserAddress.getMerchantId())) {
// // 检索提币交易记录的hash是否包含当前hash以及代扣hash
// /*ArrayList<String> hashList = Lists.newArrayList();
//
*/
/*ArrayList<String> hashList = Lists.newArrayList();
// hashList.add(txDetail.getHash());
// String grpTxHash = paraClient.getGrpTxHashFromReal(txDetail.getHash());
// if (!StringUtil.isNullOrEmpty(grpTxHash)) {
...
...
@@ -403,7 +403,7 @@
// if (hashCount <= 0) {
// log.info("【平行链充值程序】-EVM-系统内部非提币交易的Hash,过滤");
// continue;
// }*/
// }*/
/*
// log.info("【平行链充值程序】-TOKEN-系统内部提币交易的Hash,过滤");
// }
//
...
...
@@ -413,8 +413,8 @@
//
// merchantAssetsService.updateAssets(toUserAddress.getMerchantId(), toUserAddress.getExternalTokenAddr(),
// txDetail.getAssetType(), amount);
// /*coinService.addUserCoin(toUserAddress.getUid(), 1, txDetail.getAssetType(), 1,
// amount.toPlainString(), 4, fromAddr);*/
//
*/
/*coinService.addUserCoin(toUserAddress.getUid(), 1, txDetail.getAssetType(), 1,
// amount.toPlainString(), 4, fromAddr);*/
/*
// merchantAssetsFlowService.saveOutRecharge(toUserAddress.getMerchantId(), txDetail.getAssetType(),
// amount, 19, fromAddr);
//
...
...
@@ -432,7 +432,7 @@
// externalTokenTradeService.addTrade(commodityPassId, fromAddr, amount);
//
// // 添加进当前高度的充值集合
// /*TxInfoByBlock txinfo = new TxInfoByBlock();
//
*/
/*TxInfoByBlock txinfo = new TxInfoByBlock();
// txinfo.setFrom(txDetail.getFrom());
// txinfo.setBlocktime(txDetail.getBlocktime() + "");
// txinfo.setHash(txDetail.getHash());
...
...
@@ -444,16 +444,16 @@
// txinfo.setTxIndex(txDetail.getIndex());
// txinfo.setValue(
// txDetail.getAmount().divide(BigDecimal.valueOf(100000000L)).toPlainString());
// list.add(txinfo);*/
// list.add(txinfo);*/
/*
//
// // 发起转币 ===> 系统账户
// /*String hash = paraClient.localTran(RC4Util.decrypt(toUserAddress.getPrivateKey(), null),
//
*/
/*String hash = paraClient.localTran(RC4Util.decrypt(toUserAddress.getPrivateKey(), null),
// adminProperties.getAddr(),
// (amount.multiply(BigDecimal.valueOf(100000000L))), "", true,
// txDetail.getAssetType(), false);
// log.info("【平行链充值程序】将用户地址的充值资产转入系统账户 UID:{},数量:{},Hash:{}", toUserAddress.getUid(), amount,
// hash);*/
// }
// hash);*/
/*
// }
*/
//
// // EVM NFT
// if ((adminProperties.getTitle() + CHAIN33_EVM).equals(execer) &&
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/block_chain/task/SlcRechargeTask.java
View file @
c2fa5543
...
...
@@ -281,10 +281,10 @@ public class SlcRechargeTask {
continue
;
}
//
TxDetail txDetail = paraClient.queryTxDetailByHash(txHash);
TxDetail
txDetail
=
paraClient
.
queryTxDetailByHash
(
txHash
);
// System.err.println(txHash);
// System.err.println(paraClient.queryTxDetailByHash(txHash));
TxDetail
txDetail
=
paraClient
.
evmQueryTxByRealhash
(
txHash
,
"1MbJCfsBwEkTJhfbEgQ5ScHYTMPL3Nf8KF"
,
"0xdefc650e"
,
true
);
//
TxDetail txDetail = paraClient.evmQueryTxByRealhash(txHash, "1MbJCfsBwEkTJhfbEgQ5ScHYTMPL3Nf8KF", "0xdefc650e", true);
log
.
info
(
"【平行链充值程序】-txDetail:"
+
txDetail
);
if
(
txDetail
==
null
)
{
continue
;
...
...
@@ -565,7 +565,7 @@ public class SlcRechargeTask {
// 转给商户
if
(
toMerchant
!=
null
)
{
for
(
int
i
=
0
;
i
<
txDetail
.
getTokenIds
().
length
;
i
++)
{
/*
for (int i = 0; i < txDetail.getTokenIds().length; i++) {
merchantAssetsService.updateAssets(toMerchant.getMerchantId(), toMerchant.getTokenIssueAddr(),
chainUtil.getGoodsAttribute(txDetail.getTokenIds()[i], toAddr)[6], new BigDecimal(txDetail.getAmounts()[i]));
merchantAssetsFlowService.saveOutRecharge(toMerchant.getMerchantId(), chainUtil.getGoodsAttribute(txDetail.getTokenIds()[i], toAddr)[6],
...
...
@@ -592,7 +592,36 @@ public class SlcRechargeTask {
commodityPassId = UUIDUtil.getUUID();
}
externalTokenTradeService.addTrade(commodityPassId, fromAddr, new BigDecimal(txDetail.getAmounts()[i]));
}*/
merchantAssetsService
.
updateAssets
(
toMerchant
.
getMerchantId
(),
toMerchant
.
getTokenIssueAddr
(),
"NFT-"
+
txDetail
.
getTokenId
(),
amount
);
/*coinService.addUserCoin(toUserAddress.getUid(), 1, txDetail.getAssetType(), 1,
amount.toPlainString(), 4, fromAddr);*/
merchantAssetsFlowService
.
saveOutRecharge
(
toMerchant
.
getMerchantId
(),
"NFT-"
+
txDetail
.
getTokenId
(),
amount
,
18
,
fromAddr
);
log
.
info
(
"【平行链充值程序】解析到一条充值记录,UID:{},资产类型:{},数量:{}"
,
toMerchant
.
getMerchantId
(),
txDetail
.
getTokenId
(),
amount
);
externalTokenService
.
addToken
(
toMerchant
.
getMerchantId
(),
"NFT-"
+
txDetail
.
getTokenId
(),
txDetail
.
getTokenId
(),
0
,
""
,
amount
,
3
,
0L
,
""
);
ExternalToken
externalToken
=
externalTokenService
.
queryByLabelNameAndMerchantId
(
"NFT-"
+
txDetail
.
getTokenId
(),
toMerchant
.
getMerchantId
());
String
commodityPassId
;
if
(
externalToken
!=
null
)
{
commodityPassId
=
externalToken
.
getCommodityPassId
();
}
else
{
commodityPassId
=
UUIDUtil
.
getUUID
();
}
externalTokenTradeService
.
addTrade
(
commodityPassId
,
fromAddr
,
amount
);
}
// 转给用户
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/model/GoodsSkuUsufruct.java
View file @
c2fa5543
...
...
@@ -3,6 +3,7 @@ package com.fzm.mall.server.admin.goods_center.model;
import
com.baomidou.mybatisplus.annotation.*
;
import
java.io.Serializable
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -19,7 +20,7 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@TableName
(
"goods_sku_usufruct"
)
@ApiModel
(
value
=
"GoodsSkuUsufruct对象"
,
description
=
"使用权"
)
@ApiModel
(
value
=
"GoodsSkuUsufruct对象"
,
description
=
"使用权"
)
public
class
GoodsSkuUsufruct
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
...
...
@@ -33,6 +34,12 @@ public class GoodsSkuUsufruct implements Serializable {
@ApiModelProperty
(
value
=
"序列号"
)
private
String
serialNo
;
@ApiModelProperty
(
value
=
"外部通证编号"
)
private
String
commodityPassId
;
@ApiModelProperty
(
value
=
"商户号"
)
private
String
merchantId
;
@ApiModelProperty
(
value
=
"创建时间"
)
@TableField
(
fill
=
FieldFill
.
INSERT
)
private
Long
createTime
;
...
...
@@ -41,6 +48,4 @@ public class GoodsSkuUsufruct implements Serializable {
@TableField
(
fill
=
FieldFill
.
INSERT_UPDATE
)
private
Long
updateTime
;
@ApiModelProperty
(
value
=
"卖家编号"
)
private
String
merchantId
;
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/service/impl/ExternalTokenServiceImpl.java
View file @
c2fa5543
...
...
@@ -117,13 +117,13 @@ public class ExternalTokenServiceImpl extends ServiceImpl<ExternalTokenMapper, E
externalToken
.
setPublishTime
(
publishTime
);
externalToken
.
setPublisher
(
publisher
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
/*
Map<String, Object> map = new HashMap<>();
map.put("tokenId", tokenId);
String httpGet = HttpUtil.httpGet(url, map);
JSONObject json = JSONObject.parseObject(httpGet);
if (json.getString("code").equals("200")) {
externalToken.setHash(json.getString("data"));
}
}
*/
//TODO 唐拓接口
save
(
externalToken
);
}
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/service/impl/SkuServiceImpl.java
View file @
c2fa5543
...
...
@@ -87,6 +87,7 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
sku
.
setSkuId
(
skuId
);
sku
.
setGoodsId
(
goodsId
);
sku
.
setCoinName
(
coinName
);
sku
.
setCirculation
(
kDTO
.
getStock
());
if
(
commodityPass
.
equals
(
1
)
&&
!
pDTOType
.
equals
(
6
))
{
//发行商品币
...
...
@@ -124,16 +125,16 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
if
(
kDTO
.
getNftSalesType
().
equals
(
2
))
{
//发行NFT
System
.
err
.
println
(
kDTO
.
getCoinName
());
ExternalToken
externalToken
=
externalTokenService
.
queryByLabelNameAndMerchantId
(
kDTO
.
getCoinName
(),
merchantId
);
String
tokenId
=
externalToken
.
getTokenId
().
toString
();
long
[]
nos
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
()
+
1
)];
long
[]
nos
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
String
[]
hashs
=
new
String
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
nos
[
0
]
=
0
;
for
(
int
i
=
0
;
i
<
kDTO
.
getStock
();
i
++)
{
String
hash
=
chainUtil
.
evmPublishTokenSplit
(
merchant
.
getTokenIssueAddr
(),
Long
.
parseLong
(
tokenId
+
(
i
+
1
)),
1L
);
nos
[
i
+
1
]
=
1
;
String
suffix
=
i
+
1
+
""
;
Long
suffixAll
=
Long
.
parseLong
(
tokenId
+
"00000000"
.
substring
(
0
,
8
-
suffix
.
length
())
+
suffix
);
String
hash
=
chainUtil
.
evmPublishTokenSplit
(
merchant
.
getTokenIssueAddr
(),
Long
.
parseLong
(
tokenId
+
suffixAll
),
1L
);
nos
[
i
]
=
suffixAll
;
hashs
[
i
]
=
hash
;
}
...
...
@@ -141,6 +142,8 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
map
.
put
(
"goodsId"
,
goodsId
);
map
.
put
(
"hashs"
,
hashs
);
map
.
put
(
"prefix"
,
tokenId
);
map
.
put
(
"merchantId"
,
merchantId
);
map
.
put
(
"commodityPassId"
,
externalToken
.
getCommodityPassId
());
map
.
put
(
"nos"
,
JSONArray
.
toJSON
(
nos
));
producer
.
sendTTL
(
map
,
QueueTTLTypeEnum
.
NFT_USU_TTL
,
10
*
1000
);
}
...
...
@@ -167,6 +170,7 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
Long
oldStock
=
one
.
getStock
();
one
.
setOriginalPrice
(
kDTO
.
getOriginalPrice
());
one
.
setStock
(
kDTO
.
getStock
());
one
.
setCirculation
(
one
.
getCirculation
()
+
kDTO
.
getStock
()
-
oldStock
);
one
.
setWeight
(
kDTO
.
getWeight
());
skus
.
add
(
one
);
...
...
@@ -298,23 +302,24 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
if
(
kDTO
.
getNftSalesType
().
equals
(
2
))
{
//发行NFT
ExternalToken
externalToken
=
externalTokenService
.
queryByLabelNameAndMerchantId
(
kDTO
.
getCoinName
(),
merchantId
);
String
tokenId
=
externalToken
.
getTokenId
().
toString
();
long
[]
nos
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
()
+
1
)];
long
[]
nos
=
new
long
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
String
[]
hashs
=
new
String
[
Math
.
toIntExact
(
kDTO
.
getStock
())];
nos
[
0
]
=
0
;
for
(
int
i
=
0
;
i
<
kDTO
.
getStock
();
i
++)
{
long
balance
=
chainUtil
.
evmBalance
(
merchant
.
getTokenIssueAddr
(),
Long
.
parseLong
(
tokenId
+
(
i
+
1
)));
if
(
balance
!=
0
)
{
String
hash
=
chainUtil
.
evmPublishTokenSplit
(
merchant
.
getTokenIssueAddr
(),
Long
.
parseLong
(
tokenId
+
(
i
+
1
)),
1L
);
hashs
[
i
]
=
hash
;
}
nos
[
i
+
1
]
=
1
;
String
suffix
=
i
+
1
+
""
;
Long
suffixAll
=
Long
.
parseLong
(
tokenId
+
"00000000"
.
substring
(
0
,
8
-
suffix
.
length
())
+
suffix
);
String
hash
=
chainUtil
.
evmPublishTokenSplit
(
merchant
.
getTokenIssueAddr
(),
Long
.
parseLong
(
tokenId
+
suffixAll
),
1L
);
nos
[
i
]
=
suffixAll
;
hashs
[
i
]
=
hash
;
}
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"goodsId"
,
goodsId
);
map
.
put
(
"hashs"
,
hashs
);
map
.
put
(
"prefix"
,
tokenId
);
map
.
put
(
"merchantId"
,
merchantId
);
map
.
put
(
"commodityPassId"
,
externalToken
.
getCommodityPassId
());
map
.
put
(
"nos"
,
JSONArray
.
toJSON
(
nos
));
producer
.
sendTTL
(
map
,
QueueTTLTypeEnum
.
NFT_USU_TTL
,
10
*
1000
);
}
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/mq/consumer/goods_center/NftConsumer.java
View file @
c2fa5543
...
...
@@ -63,6 +63,8 @@ public class NftConsumer {
String
[]
hashs
=
(
String
[])
obj
.
get
(
"hashs"
);
String
prefix
=
obj
.
get
(
"prefix"
)
+
""
;
String
nos
=
obj
.
get
(
"nos"
)
+
""
;
String
merchantId
=
obj
.
get
(
"merchantId"
)
+
""
;
String
commodityPassId
=
obj
.
get
(
"commodityPassId"
)
+
""
;
System
.
err
.
println
(
"obj:"
+
obj
);
int
length
=
hashs
.
length
;
...
...
@@ -87,6 +89,8 @@ public class NftConsumer {
GoodsSkuUsufruct
goodsSkuUsufruct
=
new
GoodsSkuUsufruct
();
goodsSkuUsufruct
.
setPrefix
(
prefix
);
goodsSkuUsufruct
.
setSerialNo
(
nos
.
toString
());
goodsSkuUsufruct
.
setCommodityPassId
(
commodityPassId
);
goodsSkuUsufruct
.
setMerchantId
(
merchantId
);
goodsSkuUsufructService
.
save
(
goodsSkuUsufruct
);
}
}
...
...
mall-server-admin/src/main/resources/mapper/goods_center/GoodsSkuUsufructMapper.xml
View file @
c2fa5543
...
...
@@ -7,6 +7,7 @@
<id
column=
"id"
property=
"id"
/>
<result
column=
"prefix"
property=
"prefix"
/>
<result
column=
"serial_no"
property=
"serialNo"
/>
<result
column=
"commodity_pass_id"
property=
"commodityPassId"
/>
<result
column=
"merchant_id"
property=
"merchantId"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
...
...
mall-server-front/src/main/java/com/fzm/mall/server/front/goods/controller/ShopNavigationController.java
View file @
c2fa5543
...
...
@@ -15,6 +15,9 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping
(
"/shop-navigation"
)
public
class
ShopNavigationController
{
public
class
ShopNavigationController
{
}
mall-sql/mall_create.sql
View file @
c2fa5543
...
...
@@ -2512,4 +2512,5 @@ CREATE TABLE `goods_sku_usufruct` (
`commodity_pass_id`
varchar
(
32
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'编号'
,
`merchant_id`
varchar
(
32
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
DEFAULT
''
COMMENT
'商户号'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
1
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
ROW_FORMAT
=
DYNAMIC
COMMENT
=
'使用权'
;
\ No newline at end of file
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
1
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
ROW_FORMAT
=
DYNAMIC
COMMENT
=
'使用权'
;
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