Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fzm-joying
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
lei
fzm-joying
Commits
1faa50c7
Commit
1faa50c7
authored
Jan 25, 2022
by
tangtuo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
收费管理
parent
83c576d0
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
38 changed files
with
619 additions
and
128 deletions
+619
-128
pom.xml
joying-admin/pom.xml
+1
-1
ChargeController.java
.../main/java/com/fzm/admin/controller/ChargeController.java
+40
-0
Charge.java
...ng-common/src/main/java/com/fzm/common/entity/Charge.java
+25
-0
Nft.java
joying-common/src/main/java/com/fzm/common/entity/Nft.java
+3
-0
Payment.java
...g-common/src/main/java/com/fzm/common/entity/Payment.java
+3
-3
Refund.java
...ng-common/src/main/java/com/fzm/common/entity/Refund.java
+43
-0
OrderProcessMsg.java
.../main/java/com/fzm/common/entity/dto/OrderProcessMsg.java
+2
-0
OrderVo.java
...ommon/src/main/java/com/fzm/common/entity/vo/OrderVo.java
+12
-0
PublishStatus.java
...mon/src/main/java/com/fzm/common/enums/PublishStatus.java
+28
-0
RefundStatus.java
...mmon/src/main/java/com/fzm/common/enums/RefundStatus.java
+21
-0
WxPayStatus.java
...ommon/src/main/java/com/fzm/common/enums/WxPayStatus.java
+32
-0
ChargeMapper.java
...mon/src/main/java/com/fzm/common/mapper/ChargeMapper.java
+13
-0
RefundMapper.java
...mon/src/main/java/com/fzm/common/mapper/RefundMapper.java
+13
-0
ChargeService.java
...n/src/main/java/com/fzm/common/service/ChargeService.java
+19
-0
CopyrightApplyService.java
...in/java/com/fzm/common/service/CopyrightApplyService.java
+1
-1
NftService.java
...mmon/src/main/java/com/fzm/common/service/NftService.java
+6
-0
OrderService.java
...on/src/main/java/com/fzm/common/service/OrderService.java
+23
-2
PaymentService.java
.../src/main/java/com/fzm/common/service/PaymentService.java
+2
-0
RefundService.java
...n/src/main/java/com/fzm/common/service/RefundService.java
+11
-0
WxPayService.java
...on/src/main/java/com/fzm/common/service/WxPayService.java
+3
-3
ChargeServiceImpl.java
...n/java/com/fzm/common/service/impl/ChargeServiceImpl.java
+25
-0
CopyrightApplyServiceImpl.java
...om/fzm/common/service/impl/CopyrightApplyServiceImpl.java
+3
-2
NftServiceImpl.java
...main/java/com/fzm/common/service/impl/NftServiceImpl.java
+0
-0
OrderServiceImpl.java
...in/java/com/fzm/common/service/impl/OrderServiceImpl.java
+54
-6
PaymentServiceImpl.java
.../java/com/fzm/common/service/impl/PaymentServiceImpl.java
+8
-0
RefundServiceImpl.java
...n/java/com/fzm/common/service/impl/RefundServiceImpl.java
+17
-0
WxPayServiceImpl.java
...in/java/com/fzm/common/service/impl/WxPayServiceImpl.java
+74
-40
TestController.java
...g-portal/src/main/java/com/fzm/portal/TestController.java
+0
-32
ChargeController.java
...main/java/com/fzm/portal/controller/ChargeController.java
+34
-0
CopyrightApplyController.java
...a/com/fzm/portal/controller/CopyrightApplyController.java
+1
-1
OrderController.java
.../main/java/com/fzm/portal/controller/OrderController.java
+21
-2
WxPayController.java
.../main/java/com/fzm/portal/controller/WxPayController.java
+6
-0
NftListener.java
...al/src/main/java/com/fzm/portal/listener/NftListener.java
+47
-22
OrderListener.java
.../src/main/java/com/fzm/portal/listener/OrderListener.java
+17
-7
application-nj.yml
joying-portal/src/main/resources/application-nj.yml
+2
-2
WxPayTest.java
joying-portal/src/test/java/com/fzm/portal/WxPayTest.java
+2
-2
logback.2022-01-24.0.log
logs/logback.2022-01-24.0.log
+0
-0
joying.sql
sql/joying.sql
+7
-2
No files found.
joying-admin/pom.xml
View file @
1faa50c7
...
...
@@ -5,7 +5,7 @@
<parent>
<artifactId>
fzm-joying
</artifactId>
<groupId>
com.fzm
</groupId>
<version>
1.
0
.0
</version>
<version>
1.
1
.0
</version>
</parent>
<artifactId>
joying-admin
</artifactId>
...
...
joying-admin/src/main/java/com/fzm/admin/controller/ChargeController.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
admin
.
controller
;
import
com.fzm.common.annotation.Authentication
;
import
com.fzm.common.entity.Charge
;
import
com.fzm.common.model.ResponseModel
;
import
com.fzm.common.service.ChargeService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
/**
* @author tangtuo
* @date 2022/1/25 10:13
*/
@Authentication
@RestController
@RequestMapping
(
value
=
"/charge"
)
@Api
(
tags
=
"收费管理"
)
public
class
ChargeController
{
@Resource
private
ChargeService
chargeService
;
@PostMapping
(
"/update"
)
@ApiOperation
(
"编辑"
)
public
ResponseModel
<
String
>
update
(
@RequestBody
Charge
charge
)
{
chargeService
.
updateById
(
charge
);
return
ResponseModel
.
success
(
"编辑成功"
);
}
@GetMapping
(
"/detail/{type}"
)
@ApiOperation
(
"根据收费类型获取详情"
)
public
ResponseModel
<
Charge
>
getByType
(
@ApiParam
(
"收费类型 1-nft发行 2-版权申请"
)
@PathVariable
Integer
type
)
{
Charge
charge
=
chargeService
.
getByType
(
type
);
return
ResponseModel
.
success
(
charge
);
}
}
joying-common/src/main/java/com/fzm/common/entity/Charge.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author tangtuo
* @date 2022/1/25 10:07
*/
@Data
@TableName
(
"tb_charge"
)
public
class
Charge
{
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
@ApiModelProperty
(
"收费金额"
)
private
Long
fee
;
@ApiModelProperty
(
"收费类型 1-nft发行 2-版权申请"
)
private
Integer
type
;
}
joying-common/src/main/java/com/fzm/common/entity/Nft.java
View file @
1faa50c7
...
...
@@ -73,6 +73,9 @@ public class Nft extends BaseEntity {
@ApiModelProperty
(
"nft发行时间"
)
private
Date
publishTime
;
@ApiModelProperty
(
"发行状态 0-待支付 1-发行中 2-发行成功 3-发行失败"
)
private
Integer
publishStatus
;
@ApiModelProperty
(
"交易转让hash"
)
private
String
transferHash
;
...
...
joying-common/src/main/java/com/fzm/common/entity/Payment.java
View file @
1faa50c7
...
...
@@ -24,12 +24,12 @@ public class Payment {
@ApiModelProperty
(
"交易类型"
)
private
String
tradeType
;
@ApiModelProperty
(
"交易状态"
)
private
String
tradeState
;
@ApiModelProperty
(
"支付金额(分)"
)
private
Integer
totalFee
;
@ApiModelProperty
(
"是否有退款, 0-否 1-是"
)
private
Integer
isRefund
;
@ApiModelProperty
(
"商品订单编号"
)
private
String
successTime
;
...
...
joying-common/src/main/java/com/fzm/common/entity/Refund.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
entity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.Date
;
@Data
@TableName
(
"tb_refund"
)
public
class
Refund
{
private
Long
id
;
@ApiModelProperty
(
"商品订单编号"
)
private
Long
orderId
;
@ApiModelProperty
(
"支付系统交易编号"
)
private
String
transactionId
;
@ApiModelProperty
(
"状态"
)
private
String
refundId
;
@ApiModelProperty
(
"退款状态 1- 退款中 2-退款成功 3-退款失败"
)
private
Integer
refundStatus
;
@ApiModelProperty
(
"当前退款单的退款入账方"
)
private
String
userReceivedAccount
;
@ApiModelProperty
(
"支付金额(分)"
)
private
Long
fee
;
@ApiModelProperty
(
"商品订单编号"
)
private
String
successTime
;
@ApiModelProperty
(
"通知参数"
)
private
String
content
;
private
Date
createDate
;
private
Date
updateDate
;
}
\ No newline at end of file
joying-common/src/main/java/com/fzm/common/entity/dto/OrderProcessMsg.java
View file @
1faa50c7
...
...
@@ -13,6 +13,8 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
public
class
OrderProcessMsg
{
private
Long
orderId
;
private
Integer
productId
;
private
Integer
payScene
;
...
...
joying-common/src/main/java/com/fzm/common/entity/vo/OrderVo.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
entity
.
vo
;
/**
* @author tangtuo
* @date 2022/1/24 16:44
*/
public
class
OrderVo
{
private
Long
id
;
}
joying-common/src/main/java/com/fzm/common/enums/PublishStatus.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
enums
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
/**
* @author tangtuo
* @date 2022/1/24 17:19
*
* <p>
* nft发行状态
* </p>
*/
@Getter
@AllArgsConstructor
public
enum
PublishStatus
{
TO_BE_PAY
(
0
,
"待支付"
),
PUBLISHING
(
1
,
"发行中"
),
SUSSED
(
2
,
"发行成功"
),
FAILED
(
3
,
"发行失败"
);
private
Integer
code
;
private
String
type
;
}
joying-common/src/main/java/com/fzm/common/enums/RefundStatus.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
enums
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
/**
* @author tangtuo
* @date 2022/1/24 15:02
*/
@Getter
@AllArgsConstructor
public
enum
RefundStatus
{
REFUNDING
(
1
),
SUCCESS
(
2
),
FAINED
(
3
),
;
private
Integer
status
;
}
joying-common/src/main/java/com/fzm/common/enums/WxPayStatus.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
enums
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
/**
* @author tangtuo
* @date 2022/1/24 11:03
*/
@AllArgsConstructor
@Getter
public
enum
WxPayStatus
{
SUCCESS
(
"SUCCESS"
,
"支付成功"
),
REFUND
(
"REFUND"
,
"转入退款"
),
NOTPAY
(
"NOTPAY"
,
"未支付"
),
CLOSED
(
"CLOSED"
,
"已关闭"
),
REVOKED
(
"REVOKED"
,
"已撤销(仅付款码支付会返回)"
),
USERPAYING
(
"USERPAYING"
,
"用户支付中(仅付款码支付会返回)"
),
PAYERROR
(
"PAYERROR"
,
"支付失败(仅付款码支付会返回)"
);
private
String
status
;
private
String
desc
;
}
joying-common/src/main/java/com/fzm/common/mapper/ChargeMapper.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.fzm.common.entity.Charge
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @author tangtuo
* @date 2022/1/25 10:10
*/
@Mapper
public
interface
ChargeMapper
extends
BaseMapper
<
Charge
>
{
}
joying-common/src/main/java/com/fzm/common/mapper/RefundMapper.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.fzm.common.entity.Refund
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @author tangtuo
* @date 2022/1/24 14:27
*/
@Mapper
public
interface
RefundMapper
extends
BaseMapper
<
Refund
>
{
}
joying-common/src/main/java/com/fzm/common/service/ChargeService.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.fzm.common.entity.Charge
;
/**
* @author tangtuo
* @date 2022/1/25 10:10
*/
public
interface
ChargeService
extends
IService
<
Charge
>
{
/**
* 根据收费类型获取详情
*
* @param type
* @return
*/
Charge
getByType
(
Integer
type
);
}
joying-common/src/main/java/com/fzm/common/service/CopyrightApplyService.java
View file @
1faa50c7
...
...
@@ -64,7 +64,7 @@ public interface CopyrightApplyService extends IService<CopyrightApply> {
*
* @param copyrightDTO
*/
Boolean
update
(
CopyrightDTO
copyrightDTO
);
Integer
update
(
CopyrightDTO
copyrightDTO
);
/**
* 分页查询
...
...
joying-common/src/main/java/com/fzm/common/service/NftService.java
View file @
1faa50c7
...
...
@@ -176,4 +176,10 @@ public interface NftService extends IService<Nft> {
* @param isEntrust
*/
void
updateEntrust
(
String
nftHash
,
Integer
isEntrust
);
/**
* 删除
* @param id
*/
void
delete
(
Integer
id
);
}
joying-common/src/main/java/com/fzm/common/service/OrderService.java
View file @
1faa50c7
...
...
@@ -5,6 +5,8 @@ import com.fzm.common.entity.Order;
import
com.fzm.common.entity.dto.OrderDto
;
import
com.fzm.common.enums.OrderStatus
;
import
java.util.List
;
/**
* @author tangtuo
* @date 2022/1/19 15:41
...
...
@@ -18,7 +20,7 @@ public interface OrderService extends IService<Order> {
* @param productId
* @return
*/
Order
getByPaySceneAndProductId
(
Integer
payScene
,
Integer
productId
);
Order
getByPaySceneAndProductId
(
Integer
payScene
,
Integer
productId
,
Integer
orderStatus
);
/**
* 更新订单状态
...
...
@@ -30,15 +32,34 @@ public interface OrderService extends IService<Order> {
/**
* 下单
*
* @param orderDto
* @return
*/
Long
createOrder
(
OrderDto
orderDto
);
/**
*
* @param orderId
* @param payType
*/
Boolean
updatePayType
(
Long
orderId
,
Integer
payType
);
/**
* 取消订单
*
* @param orderId
* @param orderStatus
* @return
*/
Boolean
cancel
(
Long
orderId
,
OrderStatus
orderStatus
);
/**
* 获取我的订单
*
* @param payScene
* @return
*/
List
<
Order
>
listOrder
(
Integer
payScene
);
void
processOrder
(
Long
orderId
,
Integer
productId
,
Integer
payScene
);
}
joying-common/src/main/java/com/fzm/common/service/PaymentService.java
View file @
1faa50c7
...
...
@@ -8,4 +8,6 @@ import com.fzm.common.entity.Payment;
* @date 2022/1/20 16:40
*/
public
interface
PaymentService
extends
IService
<
Payment
>
{
Payment
getByOrderId
(
Long
orderId
);
}
joying-common/src/main/java/com/fzm/common/service/RefundService.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
service
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.fzm.common.entity.Refund
;
/**
* @author tangtuo
* @date 2022/1/24 14:26
*/
public
interface
RefundService
extends
IService
<
Refund
>
{
}
joying-common/src/main/java/com/fzm/common/service/WxPayService.java
View file @
1faa50c7
...
...
@@ -33,9 +33,9 @@ public interface WxPayService {
*
* @param jsonObject
*/
void
processOrder
(
JSONObject
jsonObject
)
throws
GeneralSecurityException
;
void
processOrder
(
JSONObject
jsonObject
)
throws
GeneralSecurityException
,
InterruptedException
;
String
queryOrder
(
Long
orderId
);
String
queryOrder
(
Long
orderId
)
throws
IOException
;
/**
* 退款
...
...
@@ -57,5 +57,5 @@ public interface WxPayService {
*
* @param jsonObject
*/
void
processRefund
(
JSONObject
jsonObject
);
void
processRefund
(
JSONObject
jsonObject
)
throws
InterruptedException
;
}
joying-common/src/main/java/com/fzm/common/service/impl/ChargeServiceImpl.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.fzm.common.entity.Charge
;
import
com.fzm.common.mapper.ChargeMapper
;
import
com.fzm.common.service.ChargeService
;
import
org.springframework.stereotype.Service
;
/**
* @author tangtuo
* @date 2022/1/25 10:11
*/
@Service
public
class
ChargeServiceImpl
extends
ServiceImpl
<
ChargeMapper
,
Charge
>
implements
ChargeService
{
@Override
public
Charge
getByType
(
Integer
type
)
{
QueryWrapper
<
Charge
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"type"
,
type
);
return
getOne
(
queryWrapper
);
}
}
joying-common/src/main/java/com/fzm/common/service/impl/CopyrightApplyServiceImpl.java
View file @
1faa50c7
...
...
@@ -249,7 +249,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
}
@Override
public
Boolean
update
(
CopyrightDTO
copyrightDTO
)
{
public
Integer
update
(
CopyrightDTO
copyrightDTO
)
{
// 只有撤回 驳回和登记失败的才能编辑
CopyrightApply
copyright
=
this
.
getById
(
copyrightDTO
.
getId
());
if
(
CopyrightApplyState
.
REJECTED
.
getCode
()
!=
copyright
.
getRegisterState
()
&&
...
...
@@ -304,7 +304,8 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
}
copyrightApply
.
setApplyTime
(
new
Date
());
copyrightApply
.
setRegisterState
(
CopyrightApplyState
.
TO_BE_PAY
.
getCode
());
return
updateById
(
copyrightApply
);
this
.
updateById
(
copyrightApply
);
return
copyrightDTO
.
getId
();
}
@Override
...
...
joying-common/src/main/java/com/fzm/common/service/impl/NftServiceImpl.java
View file @
1faa50c7
This diff is collapsed.
Click to expand it.
joying-common/src/main/java/com/fzm/common/service/impl/OrderServiceImpl.java
View file @
1faa50c7
...
...
@@ -4,20 +4,22 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.fzm.common.entity.Order
;
import
com.fzm.common.entity.dto.OrderDto
;
import
com.fzm.common.entity.dto.OrderProcessMsg
;
import
com.fzm.common.enums.OrderStatus
;
import
com.fzm.common.enums.PayScene
;
import
com.fzm.common.enums.PayType
;
import
com.fzm.common.mapper.OrderMapper
;
import
com.fzm.common.service.CopyrightApplyService
;
import
com.fzm.common.service.NftService
;
import
com.fzm.common.service.OrderService
;
import
com.fzm.common.utils.JwtUtil
;
import
com.fzm.common.utils.SnowflakeUtil
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.List
;
/**
* @author tangtuo
...
...
@@ -39,11 +41,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
@Resource
private
HttpServletRequest
request
;
@Resource
private
RabbitTemplate
rabbitTemplate
;
@Override
public
Order
getByPaySceneAndProductId
(
Integer
payScene
,
Integer
productId
)
{
public
Order
getByPaySceneAndProductId
(
Integer
payScene
,
Integer
productId
,
Integer
orderStatus
)
{
QueryWrapper
<
Order
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"pay_scene"
,
payScene
)
.
eq
(
"product_id"
,
productId
);
.
eq
(
"product_id"
,
productId
)
.
eq
(
"order_status"
,
orderStatus
);
return
this
.
getOne
(
queryWrapper
);
}
...
...
@@ -61,19 +67,28 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
long
id
=
snowflakeUtil
.
snowflakeId
();
Integer
productId
=
orderDto
.
getProductId
();
String
orderName
;
if
(
PayScene
.
NFT
.
getCode
().
equals
(
orderDto
.
getPayScene
()))
{
Integer
payScene
=
orderDto
.
getPayScene
();
if
(
PayScene
.
NFT
.
getCode
().
equals
(
payScene
))
{
orderName
=
nftService
.
getById
(
productId
).
getName
();
}
else
{
orderName
=
copyrightApplyService
.
getById
(
productId
).
getOpusName
();
}
order
.
setId
(
id
);
order
.
setOrderName
(
orderName
);
order
.
setPayScene
(
orderDto
.
getPayScene
()
);
order
.
setPayScene
(
payScene
);
order
.
setOrderName
(
orderName
);
order
.
setFee
(
orderDto
.
getFee
());
order
.
setProductId
(
productId
);
order
.
setUserId
(
JwtUtil
.
getUserIdFromToken
(
request
.
getHeader
(
"Authorization"
)));
order
.
setOrderStatus
(
OrderStatus
.
PAYING
.
getStatus
());
Integer
orderStatus
;
if
(
orderDto
.
getFee
()
>
0
)
{
orderStatus
=
OrderStatus
.
PAYING
.
getStatus
();
}
else
{
// 订单金额为0的话,创建订单时,状态为支付成功
orderStatus
=
OrderStatus
.
PAYED
.
getStatus
();
processOrder
(
id
,
productId
,
payScene
);
}
order
.
setOrderStatus
(
orderStatus
);
this
.
save
(
order
);
return
id
;
}
...
...
@@ -85,4 +100,37 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
o
.
setPayType
(
payType
);
return
updateById
(
o
);
}
@Override
public
Boolean
cancel
(
Long
orderId
,
OrderStatus
orderStatus
)
{
Order
order
=
this
.
getById
(
orderId
);
Integer
productId
=
order
.
getProductId
();
// 判断订单的类型
if
(
PayScene
.
NFT
.
getCode
().
equals
(
order
.
getPayScene
()))
{
// 删除nft的相关信息
nftService
.
delete
(
productId
);
}
else
{
// 删除版权申请的相关信息
copyrightApplyService
.
delete
(
productId
);
}
// 修改订单状态为取消
this
.
updateOrderStatus
(
orderId
,
orderStatus
);
return
true
;
}
@Override
public
List
<
Order
>
listOrder
(
Integer
payScene
)
{
Integer
userId
=
JwtUtil
.
getUserIdFromToken
(
request
.
getHeader
(
"Authorization"
));
QueryWrapper
<
Order
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"pay_scene"
,
payScene
);
queryWrapper
.
eq
(
"user_id"
,
userId
);
return
this
.
list
(
queryWrapper
);
}
@Override
public
void
processOrder
(
Long
orderId
,
Integer
productId
,
Integer
payScene
)
{
// 订单支付成功后,给mq发送一条消息,处理nft发行或版权申请的状态
OrderProcessMsg
orderProcessMsg
=
new
OrderProcessMsg
(
orderId
,
productId
,
payScene
);
rabbitTemplate
.
convertAndSend
(
"order-exchange"
,
"order.process"
,
orderProcessMsg
);
}
}
joying-common/src/main/java/com/fzm/common/service/impl/PaymentServiceImpl.java
View file @
1faa50c7
package
com
.
fzm
.
common
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.fzm.common.entity.Payment
;
import
com.fzm.common.mapper.PaymentMapper
;
...
...
@@ -14,4 +15,11 @@ import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
(
rollbackFor
=
RuntimeException
.
class
)
public
class
PaymentServiceImpl
extends
ServiceImpl
<
PaymentMapper
,
Payment
>
implements
PaymentService
{
@Override
public
Payment
getByOrderId
(
Long
orderId
)
{
QueryWrapper
<
Payment
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"order_id"
,
orderId
);
return
getOne
(
queryWrapper
);
}
}
joying-common/src/main/java/com/fzm/common/service/impl/RefundServiceImpl.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
common
.
service
.
impl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.fzm.common.entity.Refund
;
import
com.fzm.common.mapper.RefundMapper
;
import
com.fzm.common.service.RefundService
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* @author tangtuo
* @date 2022/1/24 14:27
*/
@Service
@Transactional
(
rollbackFor
=
RuntimeException
.
class
)
public
class
RefundServiceImpl
extends
ServiceImpl
<
RefundMapper
,
Refund
>
implements
RefundService
{
}
joying-common/src/main/java/com/fzm/common/service/impl/WxPayServiceImpl.java
View file @
1faa50c7
This diff is collapsed.
Click to expand it.
joying-portal/src/main/java/com/fzm/portal/TestController.java
deleted
100644 → 0
View file @
83c576d0
package
com
.
fzm
.
portal
;
import
com.fzm.common.entity.dto.OrderProcessMsg
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.scheduling.support.SimpleTriggerContext
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
/**
* @author tangtuo
* @date 2022/1/21 16:28
*/
@Slf4j
@RestController
@RequestMapping
(
"/test"
)
public
class
TestController
{
@Resource
private
RabbitTemplate
rabbitTemplate
;
@GetMapping
(
"/send"
)
public
String
send
(){
log
.
info
(
"发送消息: {}"
,
123
);
rabbitTemplate
.
convertAndSend
(
"nft-exchange"
,
"nft.publish"
,
123
);
return
"SUCCESS"
;
}
}
joying-portal/src/main/java/com/fzm/portal/controller/ChargeController.java
0 → 100644
View file @
1faa50c7
package
com
.
fzm
.
portal
.
controller
;
import
com.fzm.common.annotation.Authentication
;
import
com.fzm.common.entity.Charge
;
import
com.fzm.common.model.ResponseModel
;
import
com.fzm.common.service.ChargeService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
/**
* @author tangtuo
* @date 2022/1/25 10:13
*/
@Authentication
@RestController
@RequestMapping
(
value
=
"/charge"
)
@Api
(
tags
=
"收费管理"
)
public
class
ChargeController
{
@Resource
private
ChargeService
chargeService
;
@GetMapping
(
"/fee/{type}"
)
@ApiOperation
(
"根据收费类型查询收费"
)
public
ResponseModel
<
Long
>
getByType
(
@ApiParam
(
"收费类型 1-nft发行 2-版权申请"
)
@PathVariable
Integer
type
)
{
Charge
charge
=
chargeService
.
getByType
(
type
);
return
ResponseModel
.
success
(
charge
.
getFee
());
}
}
joying-portal/src/main/java/com/fzm/portal/controller/CopyrightApplyController.java
View file @
1faa50c7
...
...
@@ -78,7 +78,7 @@ public class CopyrightApplyController {
@Authentication
@PostMapping
(
value
=
"/update"
)
@ApiOperation
(
value
=
"编辑"
)
public
ResponseModel
<
Boolean
>
update
(
@RequestBody
CopyrightDTO
copyrightDTO
)
{
public
ResponseModel
<
Integer
>
update
(
@RequestBody
CopyrightDTO
copyrightDTO
)
{
return
ResponseModel
.
success
(
copyrightApplyService
.
update
(
copyrightDTO
));
}
...
...
joying-portal/src/main/java/com/fzm/portal/controller/OrderController.java
View file @
1faa50c7
package
com
.
fzm
.
portal
.
controller
;
import
com.fzm.common.annotation.Authentication
;
import
com.fzm.common.entity.Order
;
import
com.fzm.common.entity.dto.OrderDto
;
import
com.fzm.common.enums.OrderStatus
;
import
com.fzm.common.model.ResponseModel
;
import
com.fzm.common.service.OrderService
;
import
io.swagger.annotations.Api
;
...
...
@@ -9,8 +11,7 @@ import io.swagger.annotations.ApiOperation;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.List
;
/**
* @author tangtuo
...
...
@@ -39,4 +40,22 @@ public class OrderController {
public
ResponseModel
<
Integer
>
queryOrderStatus
(
@PathVariable
Long
orderId
)
{
return
ResponseModel
.
success
(
orderService
.
getById
(
orderId
).
getOrderStatus
());
}
@PostMapping
(
"/cancel"
)
@ApiOperation
(
"取消订单"
)
public
ResponseModel
<
Boolean
>
cancelOrder
(
@RequestParam
Long
orderId
)
{
Boolean
result
=
orderService
.
cancel
(
orderId
,
OrderStatus
.
CANCEL
);
return
ResponseModel
.
success
(
result
);
}
@GetMapping
(
"/list/{payScene}"
)
@ApiOperation
(
value
=
"获取我的订单列表"
)
public
ResponseModel
<
List
<
Order
>>
listOrder
(
@PathVariable
Integer
payScene
)
{
List
<
Order
>
orders
=
orderService
.
listOrder
(
payScene
);
return
ResponseModel
.
success
(
orders
);
}
}
joying-portal/src/main/java/com/fzm/portal/controller/WxPayController.java
View file @
1faa50c7
...
...
@@ -71,5 +71,11 @@ public class WxPayController {
}
@GetMapping
(
"/refund/{orderId}"
)
public
ResponseModel
<
String
>
refund
(
@PathVariable
Long
orderId
)
throws
IOException
{
wxPayService
.
refund
(
orderId
);
return
ResponseModel
.
success
(
"退款成功"
);
}
}
joying-portal/src/main/java/com/fzm/portal/listener/NftListener.java
View file @
1faa50c7
...
...
@@ -5,18 +5,26 @@ import cn.fzm.chain.simplesdk.constant.TxStatusEnum;
import
cn.fzm.chain.simplesdk.model.TxResult
;
import
com.fzm.common.constant.SystemConstant
;
import
com.fzm.common.entity.Nft
;
import
com.fzm.common.entity.Order
;
import
com.fzm.common.entity.User
;
import
com.fzm.common.entity.dto.NftPublishMsg
;
import
com.fzm.common.enums.OrderStatus
;
import
com.fzm.common.enums.PayScene
;
import
com.fzm.common.enums.PublishStatus
;
import
com.fzm.common.enums.ResultCode
;
import
com.fzm.common.exception.GlobalException
;
import
com.fzm.common.service.NftService
;
import
com.fzm.common.service.OrderService
;
import
com.fzm.common.service.UserService
;
import
com.fzm.common.service.WxPayService
;
import
com.fzm.common.utils.RedisUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.util.Date
;
/**
...
...
@@ -39,36 +47,53 @@ public class NftListener {
@Resource
private
RedisUtil
redisUtil
;
@Resource
private
OrderService
orderService
;
@Resource
private
WxPayService
wxPayService
;
/**
* 监听nft发行结果
*
* @param msg
*/
@RabbitListener
(
queues
=
"nft.publish.queue"
)
public
void
listenNftPublish
(
NftPublishMsg
msg
)
{
public
void
listenNftPublish
(
NftPublishMsg
msg
)
throws
IOException
{
log
.
info
(
"收到处理确认nft发行结果的消息: {}"
,
msg
);
Nft
nft
=
nftService
.
getById
(
msg
.
getId
());
User
user
=
userService
.
getUserByWallet
(
nft
.
getPublishAddress
());
String
hash
=
msg
.
getHash
();
// 确认交易结果
TxResult
txResult
=
paraChainClient
.
cycleConfirmTxWithHash
(
hash
,
true
,
1000
);
if
(!
TxStatusEnum
.
SUCCESS
.
equals
(
txResult
.
getStatus
()))
{
throw
GlobalException
.
newException
(
ResultCode
.
PUBLISH_ERROR
,
txResult
.
getErrMsg
().
getValue
());
}
String
realHash
=
paraChainClient
.
getRealTxHashFromGrp
(
hash
);
/*TxResult txResult = paraChainClient.cycleConfirmTxWithHash(realHash, false, 1000);
if (!TxStatusEnum.SUCCESS.equals(txResult.getStatus())) {
throw GlobalException.newException(ResultCode.PUBLISH_ERROR, txResult.getErrMsg().getValue());
}*/
nft
.
setNftHash
(
realHash
);
nft
.
setTokenId
(
msg
.
getTokenId
());
nft
.
setPublishTime
(
new
Date
());
nftService
.
updateById
(
nft
);
// 如果用户是第一次发行作品,把用户的isPublish修改成1,并清空用户统计的缓存信息
if
(
SystemConstant
.
BOOLEAN_DATA_FALSE
.
equals
(
user
.
getIsPublish
()))
{
User
u
=
new
User
().
setId
(
user
.
getId
()).
setIsPublish
(
SystemConstant
.
BOOLEAN_DATA_TRUE
);
userService
.
updateById
(
u
);
redisUtil
.
delete
(
"user::statistic"
);
try
{
User
user
=
userService
.
getUserByWallet
(
nft
.
getPublishAddress
());
String
hash
=
msg
.
getHash
();
// 确认交易结果
TxResult
txResult
=
paraChainClient
.
cycleConfirmTxWithHash
(
hash
,
true
,
1000
);
if
(!
TxStatusEnum
.
SUCCESS
.
equals
(
txResult
.
getStatus
()))
{
throw
GlobalException
.
newException
(
ResultCode
.
PUBLISH_ERROR
,
txResult
.
getErrMsg
().
getValue
());
}
String
realHash
=
paraChainClient
.
getRealTxHashFromGrp
(
hash
);
if
(
StringUtils
.
isBlank
(
realHash
))
{
throw
GlobalException
.
newException
(
ResultCode
.
PUBLISH_ERROR
);
}
nft
.
setNftHash
(
realHash
);
nft
.
setTokenId
(
msg
.
getTokenId
());
nft
.
setPublishTime
(
new
Date
());
nft
.
setPublishStatus
(
PublishStatus
.
SUSSED
.
getCode
());
nftService
.
updateById
(
nft
);
// 如果用户是第一次发行作品,把用户的isPublish修改成1,并清空用户统计的缓存信息
if
(
SystemConstant
.
BOOLEAN_DATA_FALSE
.
equals
(
user
.
getIsPublish
()))
{
User
u
=
new
User
().
setId
(
user
.
getId
()).
setIsPublish
(
SystemConstant
.
BOOLEAN_DATA_TRUE
);
userService
.
updateById
(
u
);
redisUtil
.
delete
(
"user::statistic"
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
// nft发行失败,需要把nft的发行状态改成failed,然后主动发起退款
nft
.
setPublishStatus
(
PublishStatus
.
FAILED
.
getCode
());
nftService
.
updateById
(
nft
);
Order
order
=
orderService
.
getByPaySceneAndProductId
(
PayScene
.
NFT
.
getCode
(),
nft
.
getId
(),
OrderStatus
.
PAYED
.
getStatus
());
if
(
order
!=
null
)
{
wxPayService
.
refund
(
order
.
getId
());
}
}
}
}
joying-portal/src/main/java/com/fzm/portal/listener/OrderListener.java
View file @
1faa50c7
...
...
@@ -5,11 +5,13 @@ import com.fzm.common.enums.CopyrightApplyState;
import
com.fzm.common.enums.PayScene
;
import
com.fzm.common.service.CopyrightApplyService
;
import
com.fzm.common.service.NftService
;
import
com.fzm.common.service.WxPayService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
/**
* @author tangtuo
...
...
@@ -25,15 +27,23 @@ public class OrderListener {
@Resource
private
CopyrightApplyService
copyrightApplyService
;
@Resource
private
WxPayService
wxPayService
;
@RabbitListener
(
queues
=
"order.process.queue"
)
public
void
listenProcessOrder
(
OrderProcessMsg
msg
)
{
public
void
listenProcessOrder
(
OrderProcessMsg
msg
)
throws
IOException
{
log
.
info
(
"收到处理订单的消息: {}"
,
msg
);
if
(
PayScene
.
NFT
.
getCode
().
equals
(
msg
.
getPayScene
()))
{
// 如果支付场景是发行nft的话,需要把此订单的nft发行
nftService
.
publish
(
msg
.
getProductId
());
}
else
{
// 如果支付场景是版权申请的话,需要把当前订单对应的版权状态改为待核验
copyrightApplyService
.
updateRegisterState
(
msg
.
getProductId
(),
CopyrightApplyState
.
TO_BE_REVIEWED
.
getCode
());
try
{
if
(
PayScene
.
NFT
.
getCode
().
equals
(
msg
.
getPayScene
()))
{
// 如果支付场景是发行nft的话,需要把此订单的nft发行
nftService
.
publish
(
msg
.
getProductId
());
}
else
{
// 如果支付场景是版权申请的话,需要把当前订单对应的版权状态改为待核验
copyrightApplyService
.
updateRegisterState
(
msg
.
getProductId
(),
CopyrightApplyState
.
TO_BE_REVIEWED
.
getCode
());
}
}
catch
(
Exception
e
)
{
// 处理失败,需要主动发起退款
wxPayService
.
refund
(
msg
.
getOrderId
());
}
}
...
...
joying-portal/src/main/resources/application-nj.yml
View file @
1faa50c7
...
...
@@ -126,5 +126,5 @@ wx-pay:
api-v3-key
:
D864DA53FEF8ACD41519064967DC10D2
mch-serial-num
:
72A62544B0A08A214FAEC780108692EDC6E7D5FA
private-key-path
:
apiclient_key.pem
pay-notify-url
:
https://test.inmvo.com
:8985
/proxyApi/wx-pay/notify/jsapi
refund-notify-url
:
https://test.inmvo.com
:8985
/proxyApi/wx-pay/notify/refund
pay-notify-url
:
https://test.inmvo.com/proxyApi/wx-pay/notify/jsapi
refund-notify-url
:
https://test.inmvo.com/proxyApi/wx-pay/notify/refund
joying-portal/src/test/java/com/fzm/portal/WxPayTest.java
View file @
1faa50c7
...
...
@@ -53,8 +53,8 @@ public class WxPayTest {
@Test
public
void
testH5Pay
()
throws
IOException
{
OrderProcessMsg
orderProcessMsg
=
new
OrderProcessMsg
(
1
,
1
);
rabbitTemplate
.
convertAndSend
(
"order-exchange"
,
"order.process"
,
orderProcessMsg
);
//
OrderProcessMsg orderProcessMsg = new OrderProcessMsg(1, 1);
//
rabbitTemplate.convertAndSend("order-exchange", "order.process", orderProcessMsg);
// for (int i = 0; i < 10; i++) {
// log.info(String.valueOf(snowflakeUtil.snowflakeId()));// }
// String url = "https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi";
...
...
logs/logback.2022-01-24.0.log
View file @
1faa50c7
This source diff could not be displayed because it is too large. You can
view the blob
instead.
sql/joying.sql
View file @
1faa50c7
...
...
@@ -610,4 +610,9 @@ CREATE TABLE `tb_order` (
`create_date`
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
,
`update_date`
datetime
NOT
NULL
DEFAULT
CURRENT_TIMESTAMP
ON
UPDATE
CURRENT_TIMESTAMP
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
;
\ No newline at end of file
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
;
-- v2.3.0
alter
table
tb_nft
add
column
publish_status
TINYINT
(
1
)
not
null
default
1
comment
'发行状态 1-待支付 2-发行成功 3-发行失败'
after
publish_time
;
update
tb_nft
set
publish_status
=
2
where
nft_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