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
5d85b2b6
Commit
5d85b2b6
authored
Dec 21, 2021
by
wlx@33.cn
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
兼容nft使用权
parent
a19fe432
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
286 additions
and
22 deletions
+286
-22
MALLGlobalConfig.java
.../com/fzm/mall/server/admin/constant/MALLGlobalConfig.java
+9
-2
GoodsSkuUsufructController.java
...n/goods_center/controller/GoodsSkuUsufructController.java
+20
-0
GoodsSpuVO.java
.../mall/server/admin/goods_center/entity/vo/GoodsSpuVO.java
+7
-3
GoodsSkuUsufructMapper.java
...ver/admin/goods_center/mapper/GoodsSkuUsufructMapper.java
+18
-0
GoodsSkuUsufruct.java
...all/server/admin/goods_center/model/GoodsSkuUsufruct.java
+46
-0
Spu.java
...ava/com/fzm/mall/server/admin/goods_center/model/Spu.java
+7
-0
IGoodsSkuUsufructService.java
.../admin/goods_center/service/IGoodsSkuUsufructService.java
+16
-0
GoodsSkuUsufructServiceImpl.java
...oods_center/service/impl/GoodsSkuUsufructServiceImpl.java
+20
-0
OrderDetail.java
...va/com/fzm/mall/server/admin/order/model/OrderDetail.java
+2
-1
DeliveryServiceImpl.java
.../server/admin/order/service/impl/DeliveryServiceImpl.java
+60
-6
AssetServiceImpl.java
...mall/server/admin/user/service/impl/AssetServiceImpl.java
+65
-8
GoodsSkuUsufructMapper.xml
.../resources/mapper/goods_center/GoodsSkuUsufructMapper.xml
+14
-0
SpuMapper.xml
...dmin/src/main/resources/mapper/goods_center/SpuMapper.xml
+2
-2
No files found.
mall-server-admin/src/main/java/com/fzm/mall/server/admin/constant/MALLGlobalConfig.java
View file @
5d85b2b6
package
com
.
fzm
.
mall
.
server
.
admin
.
constant
;
package
com
.
fzm
.
mall
.
server
.
admin
.
constant
;
import
java.util.Locale
;
/**
/**
* @author lyz
* @author lyz
* @mail lyz@disanbo.com
* @mail lyz@disanbo.com
...
@@ -142,4 +140,13 @@ public class MALLGlobalConfig {
...
@@ -142,4 +140,13 @@ public class MALLGlobalConfig {
//NFT 前缀
//NFT 前缀
public
static
final
String
NFT_PREFIX
=
"NFT-"
;
public
static
final
String
NFT_PREFIX
=
"NFT-"
;
/**
* 无效的序列号标识
*/
public
static
final
Integer
SERIAL_NO_INVALID
=
0
;
/**
* 有效的序列号标识
*/
public
static
final
Integer
SERIAL_NO_VALID
=
1
;
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/controller/GoodsSkuUsufructController.java
0 → 100644
View file @
5d85b2b6
package
com
.
fzm
.
mall
.
server
.
admin
.
goods_center
.
controller
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 使用权 前端控制器
* </p>
*
* @author fzm
* @since 2021-12-21
*/
@RestController
@RequestMapping
(
"/goods-sku-usufruct"
)
public
class
GoodsSkuUsufructController
{
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/entity/vo/GoodsSpuVO.java
View file @
5d85b2b6
...
@@ -53,11 +53,15 @@ public class GoodsSpuVO {
...
@@ -53,11 +53,15 @@ public class GoodsSpuVO {
@TableField
(
exist
=
false
)
@TableField
(
exist
=
false
)
private
Integer
coinType
;
private
Integer
coinType
;
@ApiModelProperty
(
value
=
"nft销售方式(1.原商品销售 2.拷贝销售)"
)
@TableField
(
exist
=
false
)
private
Integer
nftSalesType
;
public
void
initTokenId
()
{
public
void
initTokenId
()
{
if
(
commodityPass
.
equals
(
COMMODITY_PASS_OUT
)){
if
(
commodityPass
.
equals
(
COMMODITY_PASS_OUT
))
{
setTokenId
(
Long
.
valueOf
(
tokenIdStr
));
setTokenId
(
Long
.
valueOf
(
tokenIdStr
));
}
else
if
(
commodityPass
.
equals
(
COMMODITY_PASS_AUTO
)
&&
type
==
6
)
{
}
else
if
(
commodityPass
.
equals
(
COMMODITY_PASS_AUTO
)
&&
type
==
6
)
{
setTokenId
(
Long
.
valueOf
(
getTokenIdStr
().
replace
(
MALLGlobalConfig
.
NFT_PREFIX
,
""
)));
setTokenId
(
Long
.
valueOf
(
getTokenIdStr
().
replace
(
MALLGlobalConfig
.
NFT_PREFIX
,
""
)));
}
}
}
}
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/mapper/GoodsSkuUsufructMapper.java
0 → 100644
View file @
5d85b2b6
package
com
.
fzm
.
mall
.
server
.
admin
.
goods_center
.
mapper
;
import
com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* <p>
* 使用权 Mapper 接口
* </p>
*
* @author fzm
* @since 2021-12-21
*/
@Mapper
public
interface
GoodsSkuUsufructMapper
extends
BaseMapper
<
GoodsSkuUsufruct
>
{
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/model/GoodsSkuUsufruct.java
0 → 100644
View file @
5d85b2b6
package
com
.
fzm
.
mall
.
server
.
admin
.
goods_center
.
model
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.FieldFill
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
java.io.Serializable
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 使用权
* </p>
*
* @author fzm
* @since 2021-12-21
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ApiModel
(
value
=
"GoodsSkuUsufruct对象"
,
description
=
"使用权"
)
public
class
GoodsSkuUsufruct
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
@ApiModelProperty
(
value
=
"使用权前缀"
)
private
String
prefix
;
@ApiModelProperty
(
value
=
"序列号"
)
private
String
serialNo
;
@ApiModelProperty
(
value
=
"创建时间"
)
@TableField
(
fill
=
FieldFill
.
INSERT
)
private
Long
createTime
;
@ApiModelProperty
(
value
=
"更新时间"
)
@TableField
(
fill
=
FieldFill
.
INSERT_UPDATE
)
private
Long
updateTime
;
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/model/Spu.java
View file @
5d85b2b6
...
@@ -44,6 +44,13 @@ public class Spu implements Serializable {
...
@@ -44,6 +44,13 @@ public class Spu implements Serializable {
public
static
final
Integer
COMMODITY_PASS_OUT
=
2
;
public
static
final
Integer
COMMODITY_PASS_OUT
=
2
;
/**
* nft销售方式(1.原商品销售 2.拷贝销售)
*/
public
static
final
Integer
NFT_SALES_TYPE_DEFAULT
=
1
;
public
static
final
Integer
NFT_SALES_TYPE_COPY
=
2
;
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
...
...
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/service/IGoodsSkuUsufructService.java
0 → 100644
View file @
5d85b2b6
package
com
.
fzm
.
mall
.
server
.
admin
.
goods_center
.
service
;
import
com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct
;
import
com.baomidou.mybatisplus.extension.service.IService
;
/**
* <p>
* 使用权 服务类
* </p>
*
* @author fzm
* @since 2021-12-21
*/
public
interface
IGoodsSkuUsufructService
extends
IService
<
GoodsSkuUsufruct
>
{
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/goods_center/service/impl/GoodsSkuUsufructServiceImpl.java
0 → 100644
View file @
5d85b2b6
package
com
.
fzm
.
mall
.
server
.
admin
.
goods_center
.
service
.
impl
;
import
com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct
;
import
com.fzm.mall.server.admin.goods_center.mapper.GoodsSkuUsufructMapper
;
import
com.fzm.mall.server.admin.goods_center.service.IGoodsSkuUsufructService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 使用权 服务实现类
* </p>
*
* @author fzm
* @since 2021-12-21
*/
@Service
public
class
GoodsSkuUsufructServiceImpl
extends
ServiceImpl
<
GoodsSkuUsufructMapper
,
GoodsSkuUsufruct
>
implements
IGoodsSkuUsufructService
{
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/order/model/OrderDetail.java
View file @
5d85b2b6
...
@@ -71,5 +71,6 @@ public class OrderDetail implements Serializable {
...
@@ -71,5 +71,6 @@ public class OrderDetail implements Serializable {
@TableField
(
fill
=
FieldFill
.
INSERT_UPDATE
)
@TableField
(
fill
=
FieldFill
.
INSERT_UPDATE
)
private
Long
updateTime
;
private
Long
updateTime
;
@ApiModelProperty
(
value
=
"序列号"
)
private
String
serialNo
;
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/order/service/impl/DeliveryServiceImpl.java
View file @
5d85b2b6
...
@@ -9,12 +9,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...
@@ -9,12 +9,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.block_chain.util.ChainUtil
;
import
com.fzm.mall.server.admin.config.Redis
;
import
com.fzm.mall.server.admin.config.Redis
;
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.distribution.mapper.ParcelCenterMapper
;
import
com.fzm.mall.server.admin.distribution.mapper.ParcelCenterMapper
;
import
com.fzm.mall.server.admin.distribution.service.IExpressService
;
import
com.fzm.mall.server.admin.distribution.service.IExpressService
;
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.vo.GoodsSpuVO
;
import
com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO
;
import
com.fzm.mall.server.admin.goods_center.mapper.GoodsSkuUsufructMapper
;
import
com.fzm.mall.server.admin.goods_center.mapper.SpuMapper
;
import
com.fzm.mall.server.admin.goods_center.mapper.SpuMapper
;
import
com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct
;
import
com.fzm.mall.server.admin.goods_center.model.Spu
;
import
com.fzm.mall.server.admin.goods_center.model.Spu
;
import
com.fzm.mall.server.admin.home_page.model.Merchant
;
import
com.fzm.mall.server.admin.home_page.model.Merchant
;
import
com.fzm.mall.server.admin.home_page.service.IMerchantService
;
import
com.fzm.mall.server.admin.home_page.service.IMerchantService
;
...
@@ -26,6 +29,7 @@ import com.fzm.mall.server.admin.order.mapper.DeliveryMapper;
...
@@ -26,6 +29,7 @@ import com.fzm.mall.server.admin.order.mapper.DeliveryMapper;
import
com.fzm.mall.server.admin.order.model.Config
;
import
com.fzm.mall.server.admin.order.model.Config
;
import
com.fzm.mall.server.admin.order.model.Delivery
;
import
com.fzm.mall.server.admin.order.model.Delivery
;
import
com.fzm.mall.server.admin.order.model.DeliveryLog
;
import
com.fzm.mall.server.admin.order.model.DeliveryLog
;
import
com.fzm.mall.server.admin.order.model.OrderDetail
;
import
com.fzm.mall.server.admin.order.service.IDeliveryLogService
;
import
com.fzm.mall.server.admin.order.service.IDeliveryLogService
;
import
com.fzm.mall.server.admin.order.service.IDeliveryRefundService
;
import
com.fzm.mall.server.admin.order.service.IDeliveryRefundService
;
import
com.fzm.mall.server.admin.order.service.IDeliveryService
;
import
com.fzm.mall.server.admin.order.service.IDeliveryService
;
...
@@ -39,9 +43,12 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -39,9 +43,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
/**
/**
...
@@ -72,6 +79,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
...
@@ -72,6 +79,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
private
final
IMerchantService
merchantService
;
private
final
IMerchantService
merchantService
;
private
final
ChainUtil
chainUtil
;
private
final
ChainUtil
chainUtil
;
private
final
SpuMapper
spuMapper
;
private
final
SpuMapper
spuMapper
;
private
final
GoodsSkuUsufructMapper
goodsSkuUsufructMapper
;
@Override
@Override
public
void
send
(
String
adminId
,
String
orderDeliveryId
,
String
expressType
,
String
expressNo
,
Long
updateTime
)
{
public
void
send
(
String
adminId
,
String
orderDeliveryId
,
String
expressType
,
String
expressNo
,
Long
updateTime
)
{
...
@@ -219,6 +227,13 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
...
@@ -219,6 +227,13 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
* @param delivery
* @param delivery
*/
*/
private
void
refundCoinOnChain
(
Delivery
delivery
)
{
private
void
refundCoinOnChain
(
Delivery
delivery
)
{
//判断商品是否为NFT
GoodsSpuVO
goodsSpu
=
spuMapper
.
readByCoin
(
delivery
.
getCoin
());
boolean
isSalesNFTCopy
=
goodsSpu
.
getNftSalesType
().
equals
(
Spu
.
NFT_SALES_TYPE_COPY
);
/**
* NFT商品为“使用权销售时”,根据订单购买的编号重置为未使用
*/
updateSkuSerialNo
(
null
,
delivery
.
getCoin
(),
isSalesNFTCopy
);
//根据开关判断是否走链,默认不走链
//根据开关判断是否走链,默认不走链
if
(
payInChain
)
{
if
(
payInChain
)
{
User
user
=
userService
.
getOne
(
new
QueryWrapper
<
User
>().
eq
(
"uid"
,
delivery
.
getUid
()));
User
user
=
userService
.
getOne
(
new
QueryWrapper
<
User
>().
eq
(
"uid"
,
delivery
.
getUid
()));
...
@@ -231,21 +246,60 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
...
@@ -231,21 +246,60 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
tranDto
.
setAmount
(
new
BigDecimal
(
delivery
.
getNumber
()));
tranDto
.
setAmount
(
new
BigDecimal
(
delivery
.
getNumber
()));
tranDto
.
setTableId
(
delivery
.
getOrderDeliveryId
());
tranDto
.
setTableId
(
delivery
.
getOrderDeliveryId
());
tranDto
.
setTableType
(
TranDto
.
TABLE_TYPE_DELIVERY
);
tranDto
.
setTableType
(
TranDto
.
TABLE_TYPE_DELIVERY
);
//判断商品是否为NFT
GoodsSpuVO
goodsSpu
=
spuMapper
.
readByCoin
(
delivery
.
getCoin
());
goodsSpu
.
initTokenId
();
goodsSpu
.
initTokenId
();
String
hash
;
String
hash
;
if
(
goodsSpu
.
getCommodityPass
().
equals
(
Spu
.
COMMODITY_PASS_OUT
))
{
boolean
doEvmTransfer
=
true
;
/**
* 商品为外部导入或者NFT销售类型为“原商品销售”,用外部NFT转账合约
*/
if
(
goodsSpu
.
getCommodityPass
().
equals
(
Spu
.
COMMODITY_PASS_OUT
)
||
goodsSpu
.
getNftSalesType
().
equals
(
Spu
.
NFT_SALES_TYPE_DEFAULT
))
{
doEvmTransfer
=
false
;
}
if
(
doEvmTransfer
){
/**
* 内部nft操作
*/
hash
=
chainUtil
.
evmTransfer
(
tranDto
.
getToAddr
(),
tranDto
.
getFromAddr
(),
goodsSpu
.
getTokenId
(),
tranDto
.
getAmount
().
longValue
());
tranDto
.
setCoinType
(
TranDto
.
COIN_TYPE_NFT_IN
);
}
else
{
long
[]
tokenIds
=
new
long
[]{
goodsSpu
.
getTokenId
()};
long
[]
tokenIds
=
new
long
[]{
goodsSpu
.
getTokenId
()};
long
[]
amounts
=
new
long
[]{
tranDto
.
getAmount
().
longValue
()};
long
[]
amounts
=
new
long
[]{
tranDto
.
getAmount
().
longValue
()};
hash
=
chainUtil
.
evmExec
(
tokenIds
,
amounts
,
tranDto
.
getFromAddr
(),
tranDto
.
getToAddr
());
hash
=
chainUtil
.
evmExec
(
tokenIds
,
amounts
,
tranDto
.
getFromAddr
(),
tranDto
.
getToAddr
());
tranDto
.
setCoinType
(
TranDto
.
COIN_TYPE_NFT_OUT
);
tranDto
.
setCoinType
(
TranDto
.
COIN_TYPE_NFT_OUT
);
}
else
{
hash
=
chainUtil
.
evmTransfer
(
tranDto
.
getToAddr
(),
tranDto
.
getFromAddr
(),
goodsSpu
.
getTokenId
(),
tranDto
.
getAmount
().
longValue
());
tranDto
.
setCoinType
(
TranDto
.
COIN_TYPE_NFT_IN
);
}
}
tranDto
.
setHash
(
hash
);
tranDto
.
setHash
(
hash
);
producer
.
sendTTL
(
JSON
.
toJSONString
(
tranDto
),
QueueTTLTypeEnum
.
ORDER_REFUND_COINS_TTL
,
5
*
1000
);
producer
.
sendTTL
(
JSON
.
toJSONString
(
tranDto
),
QueueTTLTypeEnum
.
ORDER_REFUND_COINS_TTL
,
5
*
1000
);
}
}
}
}
/**
* 商品为“使用权”时,退款和退货,需要重置已使用的编号
* @param serialNo
* @param coin
* @param isSalesNFTCopy
*/
private
void
updateSkuSerialNo
(
String
serialNo
,
String
coin
,
boolean
isSalesNFTCopy
)
{
if
(!
isSalesNFTCopy
)
{
return
;
}
if
(
StringUtils
.
isEmpty
(
serialNo
))
{
return
;
}
List
<
Integer
>
serialNoList
=
JSON
.
parseArray
(
serialNo
,
int
.
class
);
if
(
CollectionUtils
.
isEmpty
(
serialNoList
))
{
return
;
}
QueryWrapper
<
GoodsSkuUsufruct
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"prefix"
,
coin
);
GoodsSkuUsufruct
skuUsufruct
=
goodsSkuUsufructMapper
.
selectOne
(
queryWrapper
);
if
(
skuUsufruct
==
null
)
{
return
;
}
List
<
Integer
>
dataSerialNoList
=
JSON
.
parseArray
(
skuUsufruct
.
getSerialNo
(),
int
.
class
);
serialNoList
.
forEach
(
index
->
{
dataSerialNoList
.
set
(
index
,
MALLGlobalConfig
.
SERIAL_NO_VALID
);
});
}
}
}
mall-server-admin/src/main/java/com/fzm/mall/server/admin/user/service/impl/AssetServiceImpl.java
View file @
5d85b2b6
...
@@ -10,7 +10,9 @@ import com.fzm.mall.server.admin.constant.MALLGlobalConfig;
...
@@ -10,7 +10,9 @@ 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.vo.GoodsSpuVO
;
import
com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO
;
import
com.fzm.mall.server.admin.goods_center.mapper.GoodsSkuUsufructMapper
;
import
com.fzm.mall.server.admin.goods_center.mapper.SpuMapper
;
import
com.fzm.mall.server.admin.goods_center.mapper.SpuMapper
;
import
com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct
;
import
com.fzm.mall.server.admin.goods_center.model.Spu
;
import
com.fzm.mall.server.admin.goods_center.model.Spu
;
import
com.fzm.mall.server.admin.home_page.model.Merchant
;
import
com.fzm.mall.server.admin.home_page.model.Merchant
;
import
com.fzm.mall.server.admin.home_page.service.IMerchantService
;
import
com.fzm.mall.server.admin.home_page.service.IMerchantService
;
...
@@ -27,11 +29,13 @@ import com.fzm.mall.server.admin.user.service.IAssetService;
...
@@ -27,11 +29,13 @@ import com.fzm.mall.server.admin.user.service.IAssetService;
import
com.fzm.mall.server.admin.user_center.model.User
;
import
com.fzm.mall.server.admin.user_center.model.User
;
import
com.fzm.mall.server.admin.user_center.service.IUserService
;
import
com.fzm.mall.server.admin.user_center.service.IUserService
;
import
com.fzm.mall.server.admin.util.WxPayUtil
;
import
com.fzm.mall.server.admin.util.WxPayUtil
;
import
lombok.RequiredArgsConstructor
;
import
com.google.gson.JsonObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.StringUtils
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.List
;
import
java.util.List
;
...
@@ -46,7 +50,6 @@ import java.util.List;
...
@@ -46,7 +50,6 @@ import java.util.List;
*/
*/
@Service
@Service
@Transactional
@Transactional
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
AssetServiceImpl
extends
ServiceImpl
<
AssetMapper
,
Asset
>
implements
IAssetService
{
public
class
AssetServiceImpl
extends
ServiceImpl
<
AssetMapper
,
Asset
>
implements
IAssetService
{
@Value
(
"${pay.pay-in-chain}"
)
@Value
(
"${pay.pay-in-chain}"
)
...
@@ -68,6 +71,8 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
...
@@ -68,6 +71,8 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
private
PayMapper
payMapper
;
private
PayMapper
payMapper
;
@Autowired
@Autowired
private
WxPayUtil
wxPayUtil
;
private
WxPayUtil
wxPayUtil
;
@Autowired
private
GoodsSkuUsufructMapper
goodsSkuUsufructMapper
;
/**
/**
* 商品订单退款-积分还原,商品币还原
* 商品订单退款-积分还原,商品币还原
...
@@ -192,6 +197,14 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
...
@@ -192,6 +197,14 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
}
}
private
void
refundOrderDetailCoin
(
String
uid
,
String
merchantId
,
OrderDetail
orderDetail
)
{
private
void
refundOrderDetailCoin
(
String
uid
,
String
merchantId
,
OrderDetail
orderDetail
)
{
//判断商品是否为NFT
GoodsSpuVO
goodsSpu
=
spuMapper
.
readByCoin
(
orderDetail
.
getCoin
());
boolean
isSalesNFTCopy
=
goodsSpu
.
getNftSalesType
().
equals
(
Spu
.
NFT_SALES_TYPE_COPY
);
/**
* NFT商品为“使用权销售时”,根据订单购买的编号重置为未使用
*/
updateSkuSerialNo
(
orderDetail
.
getSerialNo
(),
orderDetail
.
getCoin
(),
isSalesNFTCopy
);
//根据开关判断是否走链,默认不走链
//根据开关判断是否走链,默认不走链
if
(
payInChain
)
{
if
(
payInChain
)
{
User
user
=
userService
.
getOne
(
new
QueryWrapper
<
User
>().
eq
(
"uid"
,
uid
));
User
user
=
userService
.
getOne
(
new
QueryWrapper
<
User
>().
eq
(
"uid"
,
uid
));
...
@@ -205,21 +218,65 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
...
@@ -205,21 +218,65 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
tranDto
.
setTableId
(
orderDetail
.
getOid
());
tranDto
.
setTableId
(
orderDetail
.
getOid
());
tranDto
.
setTableType
(
TranDto
.
TABLE_TYPE_ORDER_INFO
);
tranDto
.
setTableType
(
TranDto
.
TABLE_TYPE_ORDER_INFO
);
//判断商品是否为NFT
GoodsSpuVO
goodsSpu
=
spuMapper
.
readByCoin
(
orderDetail
.
getCoin
());
goodsSpu
.
initTokenId
();
goodsSpu
.
initTokenId
();
String
hash
;
String
hash
;
if
(
goodsSpu
.
getCommodityPass
().
equals
(
Spu
.
COMMODITY_PASS_OUT
))
{
boolean
doEvmTransfer
=
true
;
/**
* 商品为外部导入或者NFT销售类型为“原商品销售”,用外部NFT转账合约
*/
if
(
goodsSpu
.
getCommodityPass
().
equals
(
Spu
.
COMMODITY_PASS_OUT
)
||
goodsSpu
.
getNftSalesType
().
equals
(
Spu
.
NFT_SALES_TYPE_DEFAULT
))
{
doEvmTransfer
=
false
;
}
if
(
doEvmTransfer
)
{
/**
* 内部nft操作
*/
hash
=
chainUtil
.
evmTransfer
(
tranDto
.
getToAddr
(),
tranDto
.
getFromAddr
(),
goodsSpu
.
getTokenId
(),
tranDto
.
getAmount
().
longValue
());
tranDto
.
setCoinType
(
TranDto
.
COIN_TYPE_NFT_IN
);
}
else
{
long
[]
tokenIds
=
new
long
[]{
goodsSpu
.
getTokenId
()};
long
[]
tokenIds
=
new
long
[]{
goodsSpu
.
getTokenId
()};
long
[]
amounts
=
new
long
[]{
tranDto
.
getAmount
().
longValue
()};
long
[]
amounts
=
new
long
[]{
tranDto
.
getAmount
().
longValue
()};
hash
=
chainUtil
.
evmExec
(
tokenIds
,
amounts
,
tranDto
.
getFromAddr
(),
tranDto
.
getToAddr
());
hash
=
chainUtil
.
evmExec
(
tokenIds
,
amounts
,
tranDto
.
getFromAddr
(),
tranDto
.
getToAddr
());
tranDto
.
setCoinType
(
TranDto
.
COIN_TYPE_NFT_OUT
);
tranDto
.
setCoinType
(
TranDto
.
COIN_TYPE_NFT_OUT
);
}
else
{
hash
=
chainUtil
.
evmTransfer
(
tranDto
.
getToAddr
(),
tranDto
.
getFromAddr
(),
goodsSpu
.
getTokenId
(),
tranDto
.
getAmount
().
longValue
());
tranDto
.
setCoinType
(
TranDto
.
COIN_TYPE_NFT_IN
);
}
}
tranDto
.
setHash
(
hash
);
tranDto
.
setHash
(
hash
);
producer
.
sendTTL
(
JSON
.
toJSONString
(
tranDto
),
QueueTTLTypeEnum
.
ORDER_REFUND_COINS_TTL
,
5
*
1000
);
producer
.
sendTTL
(
JSON
.
toJSONString
(
tranDto
),
QueueTTLTypeEnum
.
ORDER_REFUND_COINS_TTL
,
5
*
1000
);
}
}
}
}
/**
* 商品为“使用权”时,退款和退货,需要重置已使用的编号
* @param serialNo
* @param coin
* @param isSalesNFTCopy
*/
private
void
updateSkuSerialNo
(
String
serialNo
,
String
coin
,
boolean
isSalesNFTCopy
)
{
if
(!
isSalesNFTCopy
)
{
return
;
}
if
(
StringUtils
.
isEmpty
(
serialNo
))
{
return
;
}
List
<
Integer
>
serialNoList
=
JSON
.
parseArray
(
serialNo
,
int
.
class
);
if
(
CollectionUtils
.
isEmpty
(
serialNoList
))
{
return
;
}
QueryWrapper
<
GoodsSkuUsufruct
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"prefix"
,
coin
);
GoodsSkuUsufruct
skuUsufruct
=
goodsSkuUsufructMapper
.
selectOne
(
queryWrapper
);
if
(
skuUsufruct
==
null
)
{
return
;
}
List
<
Integer
>
dataSerialNoList
=
JSON
.
parseArray
(
skuUsufruct
.
getSerialNo
(),
int
.
class
);
serialNoList
.
forEach
(
index
->
{
dataSerialNoList
.
set
(
index
,
MALLGlobalConfig
.
SERIAL_NO_VALID
);
});
skuUsufruct
.
setSerialNo
(
JSON
.
toJSONString
(
dataSerialNoList
));
UpdateWrapper
<
GoodsSkuUsufruct
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"prefix"
,
coin
);
goodsSkuUsufructMapper
.
update
(
skuUsufruct
,
updateWrapper
);
}
}
}
mall-server-admin/src/main/resources/mapper/goods_center/GoodsSkuUsufructMapper.xml
0 → 100644
View file @
5d85b2b6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.fzm.mall.server.admin.goods_center.mapper.GoodsSkuUsufructMapper"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.fzm.mall.server.admin.goods_center.model.GoodsSkuUsufruct"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"prefix"
property=
"prefix"
/>
<result
column=
"serial_no"
property=
"serialNo"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
</resultMap>
</mapper>
mall-server-admin/src/main/resources/mapper/goods_center/SpuMapper.xml
View file @
5d85b2b6
...
@@ -130,11 +130,11 @@
...
@@ -130,11 +130,11 @@
</select>
</select>
<select
id=
"readByCoin"
resultType=
"com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO"
>
<select
id=
"readByCoin"
resultType=
"com.fzm.mall.server.admin.goods_center.entity.vo.GoodsSpuVO"
>
select sp.type, sp.commodity_pass, IFNULL(n.token_id, t.token_id) tokenIdStr
select sp.type, sp.commodity_pass, IFNULL(n.token_id, t.token_id) tokenIdStr
, s.nft_sales_type
from goods_sku s
from goods_sku s
left join goods_spu sp on s.goods_id = sp.goods_id
left join goods_spu sp on s.goods_id = sp.goods_id
left join goods_nft n on sp.commodity_pass = 1 and sp.type = 6 and sp.goods_id = n.goods_id
left join goods_nft n on sp.commodity_pass = 1 and sp.type = 6 and sp.goods_id = n.goods_id
left join external_token t on sp.commodity_pass = 2 and s.co
in_name = t.label_name
left join external_token t on sp.commodity_pass = 2 and s.co
mmodity_pass_id = t.commodity_pass_id
where s.status = 1
where s.status = 1
and s.coin_name = #{coin}
and s.coin_name = #{coin}
</select>
</select>
...
...
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