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
b26b0e92
Commit
b26b0e92
authored
Mar 07, 2022
by
33
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
代码规范,新增消息系统,ntf详情添加申请人信息
parent
913a5e9e
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
712 additions
and
39 deletions
+712
-39
Dockerfile
file/Dockerfile
+10
-0
localtime
file/localtime
+0
-0
CopyrightTask.java
...n/src/main/java/com/fzm/admin/schedule/CopyrightTask.java
+19
-3
CopyrightApply.java
...n/src/main/java/com/fzm/common/entity/CopyrightApply.java
+7
-0
Notify.java
...ng-common/src/main/java/com/fzm/common/entity/Notify.java
+44
-0
NotifyState.java
...mmon/src/main/java/com/fzm/common/entity/NotifyState.java
+20
-0
CopyrightVo.java
...n/src/main/java/com/fzm/common/entity/vo/CopyrightVo.java
+7
-0
NotifyVO.java
...mmon/src/main/java/com/fzm/common/entity/vo/NotifyVO.java
+28
-0
NotifyMapper.java
...mon/src/main/java/com/fzm/common/mapper/NotifyMapper.java
+34
-0
NotifyStateMapper.java
...rc/main/java/com/fzm/common/mapper/NotifyStateMapper.java
+29
-0
NotifyConfig.java
...-common/src/main/java/com/fzm/common/mq/NotifyConfig.java
+20
-0
NotifyConsumer.java
...ommon/src/main/java/com/fzm/common/mq/NotifyConsumer.java
+69
-0
NotifyPublisher.java
...mmon/src/main/java/com/fzm/common/mq/NotifyPublisher.java
+115
-0
NotifyService.java
...n/src/main/java/com/fzm/common/service/NotifyService.java
+19
-0
CopyrightApplyServiceImpl.java
...om/fzm/common/service/impl/CopyrightApplyServiceImpl.java
+15
-1
NftServiceImpl.java
...main/java/com/fzm/common/service/impl/NftServiceImpl.java
+0
-0
NotifyServiceImpl.java
...n/java/com/fzm/common/service/impl/NotifyServiceImpl.java
+53
-0
SmsServiceImpl.java
...main/java/com/fzm/common/service/impl/SmsServiceImpl.java
+1
-1
UserServiceImpl.java
...ain/java/com/fzm/common/service/impl/UserServiceImpl.java
+10
-3
WxPayServiceImpl.java
...in/java/com/fzm/common/service/impl/WxPayServiceImpl.java
+1
-1
JwtUtil.java
...ng-common/src/main/java/com/fzm/common/utils/JwtUtil.java
+1
-6
QRCodeUtil.java
...common/src/main/java/com/fzm/common/utils/QRCodeUtil.java
+3
-4
NotifyMapper.xml
joying-common/src/main/resources/mapper/NotifyMapper.xml
+80
-0
NotifyMessageMapper.xml
...-common/src/main/resources/mapper/NotifyMessageMapper.xml
+25
-0
Dockerfile
joying-portal/src/main/Dockerfile
+0
-19
NotifyController.java
...main/java/com/fzm/portal/controller/NotifyController.java
+92
-0
NftListener.java
...al/src/main/java/com/fzm/portal/listener/NftListener.java
+10
-1
No files found.
file/Dockerfile
0 → 100644
View file @
b26b0e92
FROM
java:8
# 时区调整
COPY
localtime /etc/
RUN
echo
'Asia/Shanghai'
>
/etc/timezone
ADD
joying-portal-1.0.0.jar app.jar
EXPOSE
8001
# -Dspring.profiles.active=sit 等号后面表示使用application-sit.yml,修改该项使用其他配置文件
ENTRYPOINT
["java", "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=sit", "-jar", "/app.jar"]
file/localtime
0 → 100644
View file @
b26b0e92
File added
joying-admin/src/main/java/com/fzm/admin/schedule/CopyrightTask.java
View file @
b26b0e92
...
...
@@ -17,6 +17,7 @@ import com.fzm.common.enums.CopyrightApplyState;
import
com.fzm.common.enums.OrderStatus
;
import
com.fzm.common.enums.PayScene
;
import
com.fzm.common.enums.RefundLaunchChannel
;
import
com.fzm.common.mq.NotifyPublisher
;
import
com.fzm.common.properties.CopyrightProperties
;
import
com.fzm.common.service.CopyrightApplyService
;
import
com.fzm.common.service.NftService
;
...
...
@@ -78,6 +79,9 @@ public class CopyrightTask {
@Resource
private
OrderService
orderService
;
@Resource
private
NotifyPublisher
notifyPublisher
;
/**
* 定时任务更新版权申请状态
*/
...
...
@@ -86,13 +90,17 @@ public class CopyrightTask {
// 加锁,防止集群部署时,定时任务在多个节点上执行
RLock
lock
=
redisson
.
getLock
(
"update:copyright:state"
);
if
(!
lock
.
tryLock
(
30
,
TimeUnit
.
SECONDS
))
{
log
.
warn
(
"更新版权状态的定时任务已在其他节点运行"
);
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"更新版权状态的定时任务已在其他节点运行"
);
}
return
;
}
try
{
List
<
String
>
list
=
copyrightApplyService
.
getSerialCodes
();
if
(
CollectionUtil
.
isEmpty
(
list
))
{
log
.
info
(
"当前无待更新状态的申请记录"
);
if
(
log
.
isDebugEnabled
())
{
log
.
debug
(
"当前无待更新状态的申请记录"
);
}
return
;
}
for
(
String
serial_code
:
list
)
{
...
...
@@ -120,7 +128,7 @@ public class CopyrightTask {
continue
;
}
CopyrightApply
copyrightApply
=
copyrightApplyService
.
getBySerialNum
(
serial_code
);
//审核状态(0:未提交,1:待审核,2:同意,3:驳回,4:已提交,5:待终审,6:审核通过)
//
审核状态(0:未提交,1:待审核,2:同意,3:驳回,4:已提交,5:待终审,6:审核通过)
Integer
audit_status
=
copyrightResponse
.
getAudit_status
();
Integer
registerState
=
getRegisterState
(
audit_status
);
if
(
registerState
==
null
||
registerState
.
equals
(
copyrightApply
.
getRegisterState
()))
{
...
...
@@ -134,6 +142,8 @@ public class CopyrightTask {
String
nftHash
=
copyrightApply
.
getNftHash
();
copyrightApply
.
setEvidenceDate
(
new
Date
());
copyrightApply
.
setRegisterCode
(
copyrightResponse
.
getCertificate
().
getRegister_code
());
copyrightApply
.
setRegisterOwner
(
copyrightResponse
.
getCertificate
().
getOwner_name
());
copyrightApply
.
setRegisterTime
(
copyrightResponse
.
getCertificate
().
getFinish_time
());
copyrightApply
.
setRegisterState
(
CopyrightApplyState
.
SUCCEEDED
.
getCode
());
Nft
nft
=
nftService
.
getByNftHash
(
nftHash
);
String
tokenInfo
=
paraChainClient
.
evmGetTokenInfo
(
abi
,
contractAddr
,
nft
.
getTokenId
(),
nft
.
getPublishAddress
());
...
...
@@ -148,6 +158,9 @@ public class CopyrightTask {
// 发送交易hash到死信队列,5秒后查询真实哈希,然后更新存证hash
EvidenceHashMessage
msg
=
new
EvidenceHashMessage
(
serial_code
,
hash
);
rabbitTemplate
.
convertAndSend
(
RabbitMQConfig
.
COPYRIGHT_DIRECT
,
"evidence.hash.query"
,
msg
);
// 发送系统消息
notifyPublisher
.
copyrightApplySuccessNotify
(
copyrightApply
.
getUserId
());
}
else
if
(
registerState
.
equals
(
CopyrightApplyState
.
FAILED
.
getCode
()))
{
// 审核失败,更新驳回原因,主动发起退款
copyrightApply
.
setRejectReason
(
copyrightResponse
.
getRemark
());
...
...
@@ -155,6 +168,9 @@ public class CopyrightTask {
if
(
order
!=
null
)
{
wxPayService
.
refund
(
order
.
getId
(),
RefundLaunchChannel
.
USER
.
getCode
());
}
// 发送系统消息
notifyPublisher
.
copyrightApplyFailNotify
(
copyrightApply
.
getUserId
(),
copyrightResponse
.
getRemark
());
}
copyrightApplyService
.
updateById
(
copyrightApply
);
}
catch
(
Exception
e
)
{
...
...
joying-common/src/main/java/com/fzm/common/entity/CopyrightApply.java
View file @
b26b0e92
...
...
@@ -29,6 +29,9 @@ public class CopyrightApply {
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userId
;
@ApiModelProperty
(
value
=
"申请人名称"
)
private
String
applyName
;
@ApiModelProperty
(
value
=
"nft哈希"
)
private
String
nftHash
;
...
...
@@ -114,6 +117,10 @@ public class CopyrightApply {
@ApiModelProperty
(
"登记证书编号,在版权登记审核通过后生成"
)
private
String
registerCode
;
@ApiModelProperty
(
"登记证书人名称,在版权登记审核通过后生成"
)
private
String
registerOwner
;
@ApiModelProperty
(
"登记证书时间,在版权登记审核通过后生成"
)
private
String
registerTime
;
private
Date
createDate
;
...
...
joying-common/src/main/java/com/fzm/common/entity/Notify.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
entity
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
/**
* @author wt
* @date 2022/3/7
*/
@Data
public
class
Notify
{
private
Integer
id
;
/**
* uid
*/
private
Integer
uid
;
/**
* 标题
*/
private
String
title
;
/**
* 概要
*/
private
String
summary
;
/**
* 内容
*/
private
String
content
;
/**
* 1系统消息,2公告消息
*/
private
Integer
type
;
/**
* 状态1有效2无效
*/
private
Integer
state
;
private
LocalDateTime
createTime
;
private
LocalDateTime
updateTime
;
/**
* 0未删除,1已删除
*/
private
Integer
delete
;
}
joying-common/src/main/java/com/fzm/common/entity/NotifyState.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
entity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author wt
* @date 2022/3/7
*/
@Data
@ApiModel
(
"消息状态响应"
)
public
class
NotifyState
{
@ApiModelProperty
(
"uid"
)
private
Integer
uid
;
@ApiModelProperty
(
"未读消息数量"
)
private
Integer
number
;
@ApiModelProperty
(
"未读消息数量id数组"
)
private
String
nids
;
}
joying-common/src/main/java/com/fzm/common/entity/vo/CopyrightVo.java
View file @
b26b0e92
...
...
@@ -24,6 +24,9 @@ public class CopyrightVo {
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userId
;
@ApiModelProperty
(
value
=
"申请人名称"
)
private
String
applyName
;
@ApiModelProperty
(
value
=
"登记委托书"
)
private
String
registerEntrust
;
...
...
@@ -95,6 +98,10 @@ public class CopyrightVo {
@ApiModelProperty
(
"登记证书编号,在版权登记审核通过后生成"
)
private
String
registerCode
;
@ApiModelProperty
(
"登记证书人名称,在版权登记审核通过后生成"
)
private
String
registerOwner
;
@ApiModelProperty
(
"登记证书时间,在版权登记审核通过后生成"
)
private
String
registerTime
;
@ApiModelProperty
(
value
=
"作品类别"
)
private
OpusCategory
opusCategory
;
...
...
joying-common/src/main/java/com/fzm/common/entity/vo/NotifyVO.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
entity
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
/**
* @author wt
* @date 2022/3/7
*/
@Data
@ApiModel
(
"消息响应"
)
public
class
NotifyVO
{
@ApiModelProperty
(
"id"
)
private
Integer
id
;
@ApiModelProperty
(
"uid"
)
private
Integer
uid
;
@ApiModelProperty
(
"标题"
)
private
String
title
;
@ApiModelProperty
(
"概要"
)
private
String
summary
;
@ApiModelProperty
(
"内容"
)
private
String
content
;
@ApiModelProperty
(
"创建时间"
)
private
LocalDateTime
createTime
;
}
joying-common/src/main/java/com/fzm/common/mapper/NotifyMapper.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
mapper
;
import
com.fzm.common.entity.Notify
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* @author wt
* @date 2022/3/7
*/
@Mapper
public
interface
NotifyMapper
{
/**
* 保存消息
*/
void
insert
(
Notify
notify
);
/**
* 更新消息
*/
void
update
(
Notify
notify
);
/**
* 通过id查询消息
*/
Notify
selectById
(
int
id
);
/**
* 根据类型查询消息/通知
*/
List
<
Notify
>
select
(
@Param
(
"uid"
)
int
uid
,
@Param
(
"type"
)
int
type
,
@Param
(
"state"
)
int
state
);
}
joying-common/src/main/java/com/fzm/common/mapper/NotifyStateMapper.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
mapper
;
import
com.fzm.common.entity.NotifyState
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @author wt
* @date 2021/8/23
*/
@Mapper
public
interface
NotifyStateMapper
{
/**
* 保存用户消息
*/
void
insert
(
NotifyState
notifyState
);
/**
* 更新用户消息
*/
void
update
(
NotifyState
notifyState
);
/**
* 查询用户消息
*
* @param uid uid
*/
NotifyState
selectByUid
(
Integer
uid
);
}
joying-common/src/main/java/com/fzm/common/mq/NotifyConfig.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
mq
;
import
org.springframework.amqp.core.Queue
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
/**
* @author wt
* @date 2022/3/7
*/
@Configuration
public
class
NotifyConfig
{
public
static
final
String
NOTIFY_QUEUE
=
"notify.queue"
;
@Bean
public
Queue
notifyQueue
()
{
return
new
Queue
(
NOTIFY_QUEUE
);
}
}
joying-common/src/main/java/com/fzm/common/mq/NotifyConsumer.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
mq
;
import
com.alibaba.fastjson.JSON
;
import
com.fzm.common.entity.Notify
;
import
com.fzm.common.entity.NotifyState
;
import
com.fzm.common.mapper.NotifyMapper
;
import
com.fzm.common.mapper.NotifyStateMapper
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* @author wt
* @date 2022/3/7
*/
@Component
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
NotifyConsumer
{
private
final
NotifyMapper
notifyMapper
;
private
final
NotifyStateMapper
notifyStateMapper
;
@RabbitListener
(
queues
=
{
NotifyConfig
.
NOTIFY_QUEUE
})
public
void
notifyMessageUser
(
String
content
)
{
if
(
StringUtils
.
isBlank
(
content
))
{
return
;
}
Notify
notify
=
JSON
.
parseObject
(
content
,
Notify
.
class
);
notifyMapper
.
insert
(
notify
);
Integer
uid
=
notify
.
getUid
();
NotifyState
notifyState
=
notifyStateMapper
.
selectByUid
(
uid
);
boolean
doNotExist
=
notifyState
==
null
;
notifyState
=
doNotExist
?
new
NotifyState
()
:
notifyState
;
notifyState
.
setUid
(
uid
);
// 获取用户原始消息通知id数组
String
nids
=
notifyState
.
getNids
();
nids
=
StringUtils
.
isBlank
(
nids
)
?
"[]"
:
nids
;
List
<
Integer
>
nidArray
=
JSON
.
parseArray
(
nids
,
Integer
.
class
);
// 最多500未读消息
if
(
nidArray
.
size
()
>=
500
)
{
nidArray
.
remove
(
0
);
}
nidArray
.
add
(
notify
.
getId
());
nidArray
.
sort
(
Integer:
:
compareTo
);
notifyState
.
setNumber
(
nidArray
.
size
());
notifyState
.
setNids
(
JSON
.
toJSONString
(
nidArray
));
if
(
doNotExist
)
{
try
{
notifyStateMapper
.
insert
(
notifyState
);
return
;
}
catch
(
Exception
ignored
)
{
}
}
notifyStateMapper
.
update
(
notifyState
);
}
}
joying-common/src/main/java/com/fzm/common/mq/NotifyPublisher.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
mq
;
import
com.alibaba.fastjson.JSON
;
import
com.fzm.common.entity.Notify
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.amqp.core.AmqpTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @author wt
* @date 2022/3/7
*/
@Component
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
NotifyPublisher
{
private
final
AmqpTemplate
amqpTemplate
;
public
void
sendNotify
(
Notify
notify
)
{
notify
.
setType
(
1
);
notify
.
setState
(
1
);
notify
.
setDelete
(
0
);
amqpTemplate
.
convertAndSend
(
NotifyConfig
.
NOTIFY_QUEUE
,
JSON
.
toJSONString
(
notify
));
}
public
void
personAuthSuccessNotify
(
Integer
uid
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"实名认证"
);
notify
.
setSummary
(
"认证成功"
);
notify
.
setContent
(
"恭喜您,您已完成实名认证"
);
sendNotify
(
notify
);
}
public
void
personAuthFailNotify
(
Integer
uid
,
String
result
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"实名认证"
);
notify
.
setSummary
(
"认证失败"
);
notify
.
setContent
(
"恭喜您,您的实名认证未通过。原因:"
+
result
);
sendNotify
(
notify
);
}
public
void
copyrightApplyRejectNotify
(
Integer
uid
,
String
reason
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"版权申请"
);
notify
.
setSummary
(
"一幕影链核验失败"
);
notify
.
setContent
(
"很抱歉,您的版权申请未通过一幕影链的核验。原因:"
+
reason
);
sendNotify
(
notify
);
}
public
void
copyrightApplyPassNotify
(
Integer
uid
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"版权申请"
);
notify
.
setSummary
(
"一幕影链核验成功"
);
notify
.
setContent
(
"您好,您的版权申请已通过一幕影链的核验,已提交湖北版权保护中心。请耐心等待审核结果。"
);
sendNotify
(
notify
);
}
public
void
copyrightApplySuccessNotify
(
Integer
uid
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"版权申请"
);
notify
.
setSummary
(
"版权局审核成功"
);
notify
.
setContent
(
"您好,您的版权申请已通过湖北版权保护中心的审核,可以在我的-版权申请中查看版权。"
);
sendNotify
(
notify
);
}
public
void
copyrightApplyFailNotify
(
Integer
uid
,
String
reason
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"版权申请"
);
notify
.
setSummary
(
"版权局审核失败"
);
notify
.
setContent
(
"很抱歉,您的版权申请未通过湖北版权保护中心的审核。原因:"
+
reason
);
sendNotify
(
notify
);
}
public
void
nftSuccessNotify
(
Integer
uid
,
String
nftName
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"数字藏品铸造"
);
notify
.
setSummary
(
"铸造成功"
);
notify
.
setContent
(
"恭喜您,您的数字藏品《"
+
nftName
+
"》已经铸造成功,可以在我的-我的数字藏品查看。"
);
sendNotify
(
notify
);
}
public
void
nftFailNotify
(
Integer
uid
,
String
nftName
,
String
reason
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"数字藏品铸造"
);
notify
.
setSummary
(
"铸造失败"
);
notify
.
setContent
(
"很抱歉,您的数字藏品《"
+
nftName
+
"》铸造失败。原因:"
+
reason
);
sendNotify
(
notify
);
}
public
void
nftOutNotify
(
Integer
uid
,
String
nftName
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"数字藏品转让"
);
notify
.
setSummary
(
"转出成功"
);
notify
.
setContent
(
"恭喜您,您的数字藏品《"
+
nftName
+
"》已成功转出。"
);
sendNotify
(
notify
);
}
public
void
nftInNotify
(
Integer
uid
,
String
nftName
)
{
Notify
notify
=
new
Notify
();
notify
.
setUid
(
uid
);
notify
.
setTitle
(
"数字藏品转让"
);
notify
.
setSummary
(
"转入"
);
notify
.
setContent
(
"您好,您的账户成功转入一个数字藏品《"
+
nftName
+
"》,可以在我的-我的数字藏品查看。"
);
sendNotify
(
notify
);
}
}
joying-common/src/main/java/com/fzm/common/service/NotifyService.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
service
;
import
com.fzm.common.entity.NotifyState
;
import
com.fzm.common.entity.vo.NotifyVO
;
import
com.github.pagehelper.PageInfo
;
/**
* @author wt
* @date 2022/3/7
*/
public
interface
NotifyService
{
NotifyVO
selectById
(
int
id
);
PageInfo
<
NotifyVO
>
pages
(
Integer
uid
,
int
page
,
int
size
);
NotifyState
selectByUid
(
Integer
uid
);
void
updateState
(
NotifyState
notifyState
);
}
joying-common/src/main/java/com/fzm/common/service/impl/CopyrightApplyServiceImpl.java
View file @
b26b0e92
...
...
@@ -20,6 +20,7 @@ import com.fzm.common.entity.vo.CopyrightVo;
import
com.fzm.common.enums.*
;
import
com.fzm.common.exception.GlobalException
;
import
com.fzm.common.mapper.CopyrightApplyMapper
;
import
com.fzm.common.mq.NotifyPublisher
;
import
com.fzm.common.properties.CopyrightProperties
;
import
com.fzm.common.service.*
;
import
com.fzm.common.utils.CopyrightSignUtil
;
...
...
@@ -105,6 +106,9 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
@Resource
private
WxPayService
wxPayService
;
@Resource
private
NotifyPublisher
notifyPublisher
;
@Override
public
Integer
submit
(
CopyrightDTO
copyrightDTO
)
{
...
...
@@ -124,6 +128,7 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
// 首次提交,登记状态为待支付
copyrightApply
.
setRegisterState
(
CopyrightApplyState
.
TO_BE_PAY
.
getCode
());
copyrightApply
.
setUserId
(
user
.
getId
());
copyrightApply
.
setApplyName
(
user
.
getAuthPerson
().
getName
());
copyrightApply
.
setApplyTime
(
new
Date
());
try
{
save
(
copyrightApply
);
...
...
@@ -354,6 +359,10 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
if
(
order
!=
null
)
{
wxPayService
.
refund
(
order
.
getId
(),
RefundLaunchChannel
.
USER
.
getCode
());
}
// 发送系统消息
notifyPublisher
.
copyrightApplyRejectNotify
(
copyright
.
getUserId
(),
rejectReason
);
return
true
;
}
...
...
@@ -399,7 +408,12 @@ public class CopyrightApplyServiceImpl extends ServiceImpl<CopyrightApplyMapper,
copyright
.
setRegisterState
(
CopyrightApplyState
.
SUBMITTED
.
getCode
());
copyright
.
setRejectReason
(
""
);
copyright
.
setPassTime
(
new
Date
());
return
updateById
(
copyright
);
boolean
updateResult
=
updateById
(
copyright
);
// 发送系统消息
notifyPublisher
.
copyrightApplyPassNotify
(
copyright
.
getUserId
());
return
updateResult
;
}
finally
{
lock
.
unlock
();
}
...
...
joying-common/src/main/java/com/fzm/common/service/impl/NftServiceImpl.java
View file @
b26b0e92
This diff is collapsed.
Click to expand it.
joying-common/src/main/java/com/fzm/common/service/impl/NotifyServiceImpl.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
common
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.fzm.common.entity.Notify
;
import
com.fzm.common.entity.NotifyState
;
import
com.fzm.common.entity.vo.NotifyVO
;
import
com.fzm.common.mapper.NotifyMapper
;
import
com.fzm.common.mapper.NotifyStateMapper
;
import
com.fzm.common.service.NotifyService
;
import
com.github.pagehelper.PageHelper
;
import
com.github.pagehelper.PageInfo
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author wt
* @date 2022/3/7
*/
@Service
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
NotifyServiceImpl
implements
NotifyService
{
private
final
NotifyMapper
notifyMapper
;
private
final
NotifyStateMapper
notifyStateMapper
;
@Override
public
NotifyVO
selectById
(
int
id
)
{
Notify
notify
=
notifyMapper
.
selectById
(
id
);
return
BeanUtil
.
copyProperties
(
notify
,
NotifyVO
.
class
);
}
@Override
public
PageInfo
<
NotifyVO
>
pages
(
Integer
uid
,
int
page
,
int
size
)
{
PageHelper
.
startPage
(
page
,
size
);
List
<
Notify
>
notifyList
=
notifyMapper
.
select
(
uid
,
0
,
0
);
List
<
NotifyVO
>
notifyVOList
=
new
ArrayList
<>(
notifyList
.
size
());
notifyList
.
forEach
(
n
->
notifyVOList
.
add
(
BeanUtil
.
copyProperties
(
n
,
NotifyVO
.
class
)));
return
new
PageInfo
<>(
notifyVOList
);
}
@Override
public
NotifyState
selectByUid
(
Integer
uid
)
{
return
notifyStateMapper
.
selectByUid
(
uid
);
}
@Override
public
void
updateState
(
NotifyState
notifyState
)
{
notifyStateMapper
.
update
(
notifyState
);
}
}
joying-common/src/main/java/com/fzm/common/service/impl/SmsServiceImpl.java
View file @
b26b0e92
...
...
@@ -33,7 +33,7 @@ public class SmsServiceImpl implements SmsService {
public
void
sendRefundSms
(
Long
orderId
)
{
Order
order
=
orderService
.
getById
(
orderId
);
User
user
=
userService
.
getById
(
order
.
getUserId
());
String
fee
=
BigDecimal
.
valueOf
(
order
.
getFee
()).
divide
(
new
BigDecimal
(
100
)).
toString
();
String
fee
=
BigDecimal
.
valueOf
(
order
.
getFee
()).
divide
(
new
BigDecimal
(
100
)
,
2
,
BigDecimal
.
ROUND_DOWN
).
toString
();
smsUtil
.
sendRefundSms
(
user
.
getTelephone
(),
fee
);
}
}
joying-common/src/main/java/com/fzm/common/service/impl/UserServiceImpl.java
View file @
b26b0e92
...
...
@@ -21,6 +21,7 @@ import com.fzm.common.enums.IdCardVerificationResponse;
import
com.fzm.common.enums.ResultCode
;
import
com.fzm.common.exception.GlobalException
;
import
com.fzm.common.mapper.UserMapper
;
import
com.fzm.common.mq.NotifyPublisher
;
import
com.fzm.common.params.LoginParam
;
import
com.fzm.common.properties.DebugProperties
;
import
com.fzm.common.properties.SmsProperties
;
...
...
@@ -41,11 +42,11 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.multipart.MultipartFile
;
import
sun.misc.BASE64Encoder
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.IOException
;
import
java.util.Base64
;
import
java.util.List
;
/**
...
...
@@ -87,6 +88,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Resource
private
DebugProperties
debugProperties
;
@Resource
private
NotifyPublisher
notifyPublisher
;
@Override
public
User
loadUserByUsername
(
String
username
)
{
...
...
@@ -241,8 +245,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
response
.
setIdCard
(
"000000000000000000"
);
response
.
setName
(
"个人认证"
);
}
else
{
BASE64Encoder
base64Encoder
=
new
BASE64Encoder
();
String
encode
=
"data:image/jpg;base64,"
+
base64Encoder
.
encode
(
cardPictureFront
.
getBytes
());
String
encode
=
"data:image/jpg;base64,"
+
Base64
.
getEncoder
().
encodeToString
(
cardPictureFront
.
getBytes
());
response
=
TencentApi
.
idCardOCRVerification
(
encode
);
log
.
info
(
"实名认证结果:{}"
,
JSONUtil
.
toJsonStr
(
response
));
}
...
...
@@ -269,6 +272,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
update
(
userUpdateWrapper
);
if
(
AuthStatus
.
SUCCESS
.
getStatus
().
equals
(
status
))
{
redisUtil
.
delete
(
"user::statistic"
);
// 验证成功发送消息
notifyPublisher
.
personAuthSuccessNotify
(
userId
);
}
else
{
notifyPublisher
.
personAuthFailNotify
(
userId
,
response
.
getResult
());
}
return
response
;
}
...
...
joying-common/src/main/java/com/fzm/common/service/impl/WxPayServiceImpl.java
View file @
b26b0e92
...
...
@@ -119,7 +119,7 @@ public class WxPayServiceImpl implements WxPayService {
CloseableHttpResponse
response
=
httpClient
.
execute
(
httpPost
);
String
bodyAsString
=
EntityUtils
.
toString
(
response
.
getEntity
());
JSONObject
jsonObject
=
JSONUtil
.
parseObj
(
bodyAsString
);
if
(
jsonObject
==
null
||
StringUtils
.
isBlank
(
jsonObject
.
getStr
(
"prepay_id"
)))
{
if
(
StringUtils
.
isBlank
(
jsonObject
.
getStr
(
"prepay_id"
)))
{
throw
GlobalException
.
newException
(
ResultCode
.
PAY_FAILED
,
"微信支付下单失败"
);
}
String
prepay_id
=
jsonObject
.
getStr
(
"prepay_id"
);
...
...
joying-common/src/main/java/com/fzm/common/utils/JwtUtil.java
View file @
b26b0e92
...
...
@@ -10,7 +10,6 @@ import io.jsonwebtoken.Claims;
import
io.jsonwebtoken.ExpiredJwtException
;
import
io.jsonwebtoken.Jwts
;
import
io.jsonwebtoken.SignatureAlgorithm
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Date
;
import
java.util.HashMap
;
...
...
@@ -20,7 +19,6 @@ import java.util.Map;
* @author tangtuo
* @date 2021/6/23 9:40
*/
@Slf4j
public
class
JwtUtil
{
private
static
final
String
CLAIM_KEY_USERNAME
=
"sub"
;
...
...
@@ -194,10 +192,7 @@ public class JwtUtil {
Date
created
=
claims
.
get
(
CLAIM_KEY_CREATED
,
Date
.
class
);
Date
refreshDate
=
new
Date
();
//刷新时间在创建时间的指定时间内
if
(
refreshDate
.
after
(
created
)
&&
refreshDate
.
before
(
DateUtil
.
offsetSecond
(
created
,
time
)))
{
return
true
;
}
return
false
;
return
refreshDate
.
after
(
created
)
&&
refreshDate
.
before
(
DateUtil
.
offsetSecond
(
created
,
time
));
}
public
static
void
main
(
String
[]
args
)
{
...
...
joying-common/src/main/java/com/fzm/common/utils/QRCodeUtil.java
View file @
b26b0e92
...
...
@@ -5,7 +5,6 @@ import com.google.zxing.*;
import
com.google.zxing.common.BitMatrix
;
import
com.google.zxing.common.HybridBinarizer
;
import
com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
;
import
sun.misc.BASE64Encoder
;
import
javax.imageio.ImageIO
;
import
java.awt.*
;
...
...
@@ -15,6 +14,7 @@ import java.io.ByteArrayOutputStream;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.util.Base64
;
import
java.util.Hashtable
;
public
class
QRCodeUtil
{
...
...
@@ -100,9 +100,8 @@ public class QRCodeUtil {
e
.
printStackTrace
();
}
byte
[]
bytes
=
baos
.
toByteArray
();
//转换成字节
BASE64Encoder
encoder
=
new
BASE64Encoder
();
String
png_base64
=
encoder
.
encodeBuffer
(
bytes
).
trim
();
//转换成base64串
png_base64
=
png_base64
.
replaceAll
(
"\n"
,
""
).
replaceAll
(
"\r"
,
""
);
//删除 \r\n
String
png_base64
=
Base64
.
getEncoder
().
encodeToString
(
bytes
);
//转换成base64串
return
"data:image/jpg;base64,"
+
png_base64
;
...
...
joying-common/src/main/resources/mapper/NotifyMapper.xml
0 → 100644
View file @
b26b0e92
<?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.common.mapper.NotifyMapper"
>
<insert
id=
"insert"
parameterType=
"com.fzm.common.entity.Notify"
useGeneratedKeys=
"true"
keyProperty=
"id"
keyColumn=
"id"
>
insert into tb_notify(uid, title, summary, content, type, state, create_time, update_time, is_delete)
VALUES (#{uid}, #{title}, #{summary}, #{content}, #{type}, #{state}, now(), now(), #{delete})
</insert>
<update
id=
"update"
parameterType=
"com.fzm.common.entity.Notify"
>
update tb_notify
<set>
<if
test=
"title != null and title != ''"
>
title = #{title},
</if>
<if
test=
"summary != null and summary != ''"
>
summary = #{summary},
</if>
<if
test=
"content != null and content != ''"
>
content = #{content},
</if>
<if
test=
"type != null"
>
type = #{type},
</if>
<if
test=
"state != null"
>
state = #{state},
</if>
<if
test=
"delete != null"
>
is_delete = #{delete},
</if>
update_time = now()
</set>
where id = #{id}
</update>
<select
id=
"selectById"
resultType=
"com.fzm.common.entity.Notify"
>
select id,
uid,
title,
summary,
content,
type,
state,
create_time,
update_time,
is_delete `delete`
from tb_notify
where id = #{id}
</select>
<select
id=
"select"
resultType=
"com.fzm.common.entity.Notify"
>
select id,
uid,
title,
summary,
type,
state,
create_time,
update_time,
is_delete `delete`
from tb_notify
where is_delete = 0
<if
test=
"uid != 0"
>
and uid = #{uid}
</if>
<if
test=
"type != 0"
>
and type = #{type}
</if>
<if
test=
"state != 0"
>
and state = #{state}
</if>
order by update_time desc
</select>
</mapper>
\ No newline at end of file
joying-common/src/main/resources/mapper/NotifyMessageMapper.xml
0 → 100644
View file @
b26b0e92
<?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.common.mapper.NotifyStateMapper"
>
<insert
id=
"insert"
parameterType=
"com.fzm.common.entity.NotifyState"
>
insert into tb_notify_state(uid, number, nids)
VALUES (#{uid}, #{number}, #{nids})
</insert>
<update
id=
"update"
parameterType=
"com.fzm.common.entity.NotifyState"
>
update tb_notify_state
set number = #{number},
nids = #{nids}
where uid = #{uid}
</update>
<select
id=
"selectByUid"
resultType=
"com.fzm.common.entity.NotifyState"
>
select uid, number, nids
from tb_notify_state
where uid = #{uid}
</select>
</mapper>
\ No newline at end of file
joying-portal/src/main/Dockerfile
deleted
100644 → 0
View file @
913a5e9e
from
openjdk:8-jdk-alpine
run
mkdir
/home/joying
run
mkdir
/home/joying/portal
workdir
/home/joying/portal
copy
joying-portal-1.0.0.jar /home/joying/portal/app.jar
ENV
LANG en_US.utf8
#定义时区参数
ENV
TZ=Asia/Shanghai
#设置时区
RUN
ln
-snf
/usr/share/zoneinfo/
$TZ
/etc/localtime
&&
echo
'$TZ'
>
/etc/timezone
#配置容器启动后执行的命令,并指定使用项目外部的配置文件
ENTRYPOINT
["java","-Xms512m","-Xmx4096m","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=dev","-jar","/home/joying/portal/app.jar"]
joying-portal/src/main/java/com/fzm/portal/controller/NotifyController.java
0 → 100644
View file @
b26b0e92
package
com
.
fzm
.
portal
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.fzm.common.annotation.Authentication
;
import
com.fzm.common.entity.NotifyState
;
import
com.fzm.common.entity.vo.NotifyVO
;
import
com.fzm.common.enums.ResultCode
;
import
com.fzm.common.exception.GlobalException
;
import
com.fzm.common.model.ResponseModel
;
import
com.fzm.common.service.NotifyService
;
import
com.fzm.common.utils.JwtUtil
;
import
com.github.pagehelper.PageInfo
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiParam
;
import
lombok.RequiredArgsConstructor
;
import
lombok.val
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.MediaType
;
import
org.springframework.web.bind.annotation.*
;
/**
* @author wt
* @date 2022/3/7
*/
@Api
(
value
=
"通知"
,
tags
=
"通知"
,
description
=
" "
)
@RestController
@Authentication
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
@RequestMapping
(
value
=
"/notify"
,
produces
=
MediaType
.
APPLICATION_JSON_VALUE
)
public
class
NotifyController
{
private
final
NotifyService
notifyService
;
@GetMapping
(
"/pages"
)
@ApiOperation
(
value
=
"分页查询"
)
public
ResponseModel
<
PageInfo
<
NotifyVO
>>
pages
(
@ApiParam
(
value
=
"页码"
,
required
=
true
)
@RequestParam
Integer
pageNum
,
@ApiParam
(
value
=
"每页记录数"
,
required
=
true
)
@RequestParam
Integer
pageSize
,
@RequestHeader
String
Authorization
)
{
Integer
userId
=
JwtUtil
.
getUserIdFromToken
(
Authorization
);
PageInfo
<
NotifyVO
>
pageInfo
=
notifyService
.
pages
(
userId
,
pageNum
,
pageSize
);
return
ResponseModel
.
success
(
pageInfo
);
}
@ApiOperation
(
"未读消息数量"
)
@GetMapping
(
"/count"
)
public
ResponseModel
<
NotifyState
>
messageCount
(
@RequestHeader
String
Authorization
)
{
Integer
userId
=
JwtUtil
.
getUserIdFromToken
(
Authorization
);
NotifyState
notifyState
=
notifyService
.
selectByUid
(
userId
);
return
ResponseModel
.
success
(
notifyState
);
}
@ApiOperation
(
"查询详细"
)
@GetMapping
(
"/detail"
)
public
ResponseModel
<
NotifyVO
>
getById
(
@RequestParam
Integer
id
,
@RequestHeader
String
Authorization
)
{
if
(
id
==
null
||
id
<=
0
)
{
throw
GlobalException
.
newException
(
ResultCode
.
VALIDATE_FAILED
);
}
NotifyVO
vo
=
notifyService
.
selectById
(
id
);
if
(
vo
!=
null
)
{
Integer
userId
=
JwtUtil
.
getUserIdFromToken
(
Authorization
);
NotifyState
notifyState
=
notifyService
.
selectByUid
(
userId
);
if
(
notifyState
!=
null
)
{
val
nids
=
notifyState
.
getNids
();
val
nidArray
=
JSON
.
parseArray
(
nids
,
Integer
.
class
);
if
(
nidArray
.
contains
(
id
))
{
nidArray
.
remove
(
id
);
notifyState
.
setNumber
(
nidArray
.
size
());
notifyState
.
setNids
(
JSON
.
toJSONString
(
nidArray
));
notifyService
.
updateState
(
notifyState
);
}
}
}
return
ResponseModel
.
success
(
vo
);
}
@ApiOperation
(
"全部已读"
)
@GetMapping
(
"/all-read"
)
public
ResponseModel
<
Boolean
>
allRead
(
@RequestHeader
String
Authorization
)
{
Integer
userId
=
JwtUtil
.
getUserIdFromToken
(
Authorization
);
NotifyState
notifyState
=
notifyService
.
selectByUid
(
userId
);
if
(
notifyState
!=
null
)
{
notifyState
.
setNumber
(
0
);
notifyState
.
setNids
(
"[]"
);
notifyService
.
updateState
(
notifyState
);
}
return
ResponseModel
.
success
();
}
}
joying-portal/src/main/java/com/fzm/portal/listener/NftListener.java
View file @
b26b0e92
...
...
@@ -10,6 +10,7 @@ import com.fzm.common.entity.User;
import
com.fzm.common.entity.dto.NftPublishMsg
;
import
com.fzm.common.enums.*
;
import
com.fzm.common.exception.GlobalException
;
import
com.fzm.common.mq.NotifyPublisher
;
import
com.fzm.common.service.NftService
;
import
com.fzm.common.service.OrderService
;
import
com.fzm.common.service.UserService
;
...
...
@@ -48,6 +49,9 @@ public class NftListener {
@Resource
private
WxPayService
wxPayService
;
@Resource
private
NotifyPublisher
notifyPublisher
;
/**
* 监听nft发行结果
*
...
...
@@ -57,8 +61,9 @@ public class NftListener {
public
void
listenNftPublish
(
NftPublishMsg
msg
)
throws
Exception
{
log
.
info
(
"收到确认nft发行结果的消息: {}"
,
msg
);
Nft
nft
=
nftService
.
getById
(
msg
.
getId
());
try
{
User
user
=
userService
.
getUserByWallet
(
nft
.
getPublishAddress
());
try
{
String
hash
=
msg
.
getHash
();
// 确认交易结果
TxResult
txResult
=
paraChainClient
.
cycleConfirmTxWithHash
(
hash
,
true
,
1000
);
...
...
@@ -79,6 +84,8 @@ public class NftListener {
userService
.
updateById
(
u
);
redisUtil
.
delete
(
"user::statistic"
);
}
notifyPublisher
.
nftSuccessNotify
(
user
.
getId
(),
nft
.
getName
());
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
// nft发行失败,需要把nft的发行状态改成failed,然后主动发起退款
...
...
@@ -88,6 +95,8 @@ public class NftListener {
if
(
order
!=
null
)
{
wxPayService
.
refund
(
order
.
getId
(),
RefundLaunchChannel
.
USER
.
getCode
());
}
notifyPublisher
.
nftFailNotify
(
user
.
getId
(),
nft
.
getName
(),
e
.
getMessage
());
}
}
}
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