Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cms-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
cms-ci-test
Commits
cb5118ae
提交
cb5118ae
authored
9月 06, 2023
作者:
zhenjie
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop'
上级
e7e76967
d6374ab7
显示空白字符变更
内嵌
并排
正在显示
91 个修改的文件
包含
5818 行增加
和
185 行删除
+5818
-185
PayWalletDTO.java
...java/com/mmc/iuav/user/model/dto/wallet/PayWalletDTO.java
+2
-4
WithdrawalApplyDTO.java
...om/mmc/iuav/user/model/dto/wallet/WithdrawalApplyDTO.java
+53
-0
UsableCashPoolingDTO.java
...om/mmc/iuav/user/model/dto/xzsz/UsableCashPoolingDTO.java
+27
-0
FddVerifyInfoDTO.java
...ava/com/mmc/iuav/user/model/fdd/dto/FddVerifyInfoDTO.java
+31
-0
UserFddDTO.java
...main/java/com/mmc/iuav/user/model/fdd/dto/UserFddDTO.java
+31
-0
NECertReq.java
.../main/java/com/mmc/iuav/user/model/fdd/req/NECertReq.java
+20
-0
CompanyVerifyResp.java
...a/com/mmc/iuav/user/model/fdd/resp/CompanyVerifyResp.java
+19
-0
PersonVerifyResp.java
...va/com/mmc/iuav/user/model/fdd/resp/PersonVerifyResp.java
+19
-0
SealDetail.java
...ain/java/com/mmc/iuav/user/model/fdd/seal/SealDetail.java
+29
-0
WalletFlowQO.java
.../java/com/mmc/iuav/user/model/qo/wallet/WalletFlowQO.java
+53
-0
WithdrawalApplyQO.java
.../com/mmc/iuav/user/model/qo/wallet/WithdrawalApplyQO.java
+54
-0
UserAccountVO.java
...c/main/java/com/mmc/iuav/user/model/vo/UserAccountVO.java
+4
-0
WithdrawalInfoVO.java
...ain/java/com/mmc/iuav/user/model/vo/WithdrawalInfoVO.java
+38
-0
WxMsgVO.java
...del/src/main/java/com/mmc/iuav/user/model/vo/WxMsgVO.java
+17
-38
XzAuthVO.java
...el/src/main/java/com/mmc/iuav/user/model/vo/XzAuthVO.java
+34
-0
XzWithdrawalVO.java
.../main/java/com/mmc/iuav/user/model/vo/XzWithdrawalVO.java
+57
-0
ApplyWithdrawalVO.java
.../com/mmc/iuav/user/model/vo/wallet/ApplyWithdrawalVO.java
+38
-0
FlyerWalletFlowVO.java
.../com/mmc/iuav/user/model/vo/wallet/FlyerWalletFlowVO.java
+49
-0
PublisherWalletFlowVO.java
.../mmc/iuav/user/model/vo/wallet/PublisherWalletFlowVO.java
+72
-0
TopUpOrderVO.java
.../java/com/mmc/iuav/user/model/vo/wallet/TopUpOrderVO.java
+29
-0
WalletFlowVO.java
.../java/com/mmc/iuav/user/model/vo/wallet/WalletFlowVO.java
+24
-0
ResultEnum.java
...-util/src/main/java/com/mmc/iuav/response/ResultEnum.java
+8
-1
pom.xml
csm-service/cms-service-user/pom.xml
+25
-0
UserSystemConstant.java
...n/java/com/mmc/iuav/user/constant/UserSystemConstant.java
+24
-0
WxConstant.java
.../src/main/java/com/mmc/iuav/user/constant/WxConstant.java
+1
-2
FddConnectConstant.java
...va/com/mmc/iuav/user/constant/fdd/FddConnectConstant.java
+27
-0
FddConstant.java
...main/java/com/mmc/iuav/user/constant/fdd/FddConstant.java
+46
-0
WxController.java
.../main/java/com/mmc/iuav/user/controller/WxController.java
+45
-0
UserFddAuthController.java
...m/mmc/iuav/user/controller/fdd/UserFddAuthController.java
+81
-0
PayWalletController.java
.../mmc/iuav/user/controller/wallet/PayWalletController.java
+39
-12
WithdrawalController.java
...mmc/iuav/user/controller/wallet/WithdrawalController.java
+69
-0
XzController.java
.../java/com/mmc/iuav/user/controller/xzsz/XzController.java
+130
-0
UserServiceDao.java
...r/src/main/java/com/mmc/iuav/user/dao/UserServiceDao.java
+3
-0
UserFddAuthDao.java
...c/main/java/com/mmc/iuav/user/dao/fdd/UserFddAuthDao.java
+38
-0
PayWalletDao.java
.../main/java/com/mmc/iuav/user/dao/wallet/PayWalletDao.java
+34
-0
WithdrawalDao.java
...c/main/java/com/mmc/iuav/user/dao/xzsz/WithdrawalDao.java
+13
-0
XzDao.java
...-user/src/main/java/com/mmc/iuav/user/dao/xzsz/XzDao.java
+15
-0
UserAccountDO.java
...src/main/java/com/mmc/iuav/user/entity/UserAccountDO.java
+3
-0
XzAuthDO.java
...user/src/main/java/com/mmc/iuav/user/entity/XzAuthDO.java
+32
-0
XzWithdrawalApplyDO.java
...in/java/com/mmc/iuav/user/entity/XzWithdrawalApplyDO.java
+126
-0
FddVerifyInfoDO.java
...in/java/com/mmc/iuav/user/entity/fdd/FddVerifyInfoDO.java
+28
-0
UserFddDO.java
...src/main/java/com/mmc/iuav/user/entity/fdd/UserFddDO.java
+36
-0
PayLogDO.java
...c/main/java/com/mmc/iuav/user/entity/wallet/PayLogDO.java
+17
-98
PayWalletDO.java
...ain/java/com/mmc/iuav/user/entity/wallet/PayWalletDO.java
+10
-3
UserBillingDetailVO.java
.../com/mmc/iuav/user/entity/wallet/UserBillingDetailVO.java
+113
-0
WithdrawalLogDO.java
...java/com/mmc/iuav/user/entity/wallet/WithdrawalLogDO.java
+74
-0
PayMethodEnums.java
...src/main/java/com/mmc/iuav/user/enums/PayMethodEnums.java
+37
-0
RebateMethod.java
...r/src/main/java/com/mmc/iuav/user/enums/RebateMethod.java
+34
-0
SettleTypeEnum.java
...src/main/java/com/mmc/iuav/user/enums/SettleTypeEnum.java
+33
-0
WithdrawalApplyStatus.java
...n/java/com/mmc/iuav/user/enums/WithdrawalApplyStatus.java
+34
-0
WithdrawalMethod.java
...c/main/java/com/mmc/iuav/user/enums/WithdrawalMethod.java
+34
-0
XzEnums.java
...e-user/src/main/java/com/mmc/iuav/user/enums/XzEnums.java
+37
-0
FanoutExchangeConfig.java
.../main/java/com/mmc/iuav/user/mq/FanoutExchangeConfig.java
+2
-1
RabbitmqConstant.java
.../java/com/mmc/iuav/user/mq/constant/RabbitmqConstant.java
+17
-1
MqProducerImpl.java
...c/main/java/com/mmc/iuav/user/mq/impl/MqProducerImpl.java
+1
-1
OrderMqConsumer.java
...n/java/com/mmc/iuav/user/mq/listener/OrderMqConsumer.java
+33
-0
WxService.java
...er/src/main/java/com/mmc/iuav/user/service/WxService.java
+23
-0
FddService.java
...c/main/java/com/mmc/iuav/user/service/fdd/FddService.java
+14
-0
UserFddAuthService.java
...ava/com/mmc/iuav/user/service/fdd/UserFddAuthService.java
+33
-0
FddServiceImpl.java
...va/com/mmc/iuav/user/service/fdd/impl/FddServiceImpl.java
+248
-0
UserFddAuthServiceImpl.java
...mc/iuav/user/service/fdd/impl/UserFddAuthServiceImpl.java
+304
-0
AuthServiceImpl.java
.../java/com/mmc/iuav/user/service/impl/AuthServiceImpl.java
+8
-0
BackUserAccountServiceImpl.java
...mc/iuav/user/service/impl/BackUserAccountServiceImpl.java
+0
-1
RealNameAuthServiceImpl.java
...m/mmc/iuav/user/service/impl/RealNameAuthServiceImpl.java
+1
-0
UserAccountServiceImpl.java
...om/mmc/iuav/user/service/impl/UserAccountServiceImpl.java
+36
-7
WxServiceImpl.java
...in/java/com/mmc/iuav/user/service/impl/WxServiceImpl.java
+97
-4
PayWalletService.java
...va/com/mmc/iuav/user/service/wallet/PayWalletService.java
+11
-0
PayWalletServiceImpl.java
...c/iuav/user/service/wallet/impl/PayWalletServiceImpl.java
+541
-0
WithdrawalService.java
...ava/com/mmc/iuav/user/service/xzsz/WithdrawalService.java
+21
-0
XzService.java
...c/main/java/com/mmc/iuav/user/service/xzsz/XzService.java
+46
-0
WithdrawalServiceImpl.java
...mc/iuav/user/service/xzsz/impl/WithdrawalServiceImpl.java
+258
-0
XzServiceImpl.java
...va/com/mmc/iuav/user/service/xzsz/impl/XzServiceImpl.java
+466
-0
PatternUtil.java
...ser/src/main/java/com/mmc/iuav/user/util/PatternUtil.java
+90
-0
PrivacyUtil.java
...ser/src/main/java/com/mmc/iuav/user/util/PrivacyUtil.java
+165
-0
TDateUtil.java
...-user/src/main/java/com/mmc/iuav/user/util/TDateUtil.java
+612
-0
SingleSubmitResp.java
...rc/main/java/com/mmc/iuav/user/xzsz/SingleSubmitResp.java
+71
-0
WithdrawalResp.java
.../src/main/java/com/mmc/iuav/user/xzsz/WithdrawalResp.java
+178
-0
application-dev.yml
...e/cms-service-user/src/main/resources/application-dev.yml
+22
-0
application-local.yml
...cms-service-user/src/main/resources/application-local.yml
+17
-1
application-prod.yml
.../cms-service-user/src/main/resources/application-prod.yml
+9
-0
fdd-verify-process-1.8.5.jar
...-user/src/main/resources/lib/fdd-verify-process-1.8.5.jar
+0
-0
piggy-settlement-sdk-1.7.0.jar
...ser/src/main/resources/lib/piggy-settlement-sdk-1.7.0.jar
+0
-0
BackUserAccountDao.xml
...ice-user/src/main/resources/mapper/BackUserAccountDao.xml
+11
-1
UserServiceDao.xml
...service-user/src/main/resources/mapper/UserServiceDao.xml
+21
-0
UserSubInfoDao.xml
...service-user/src/main/resources/mapper/UserSubInfoDao.xml
+9
-9
UserFddAuthDao.xml
...ice-user/src/main/resources/mapper/fdd/UserFddAuthDao.xml
+60
-0
PayWalletDao.xml
...ce-user/src/main/resources/mapper/wallet/PayWalletDao.xml
+385
-0
WithdrawalDao.xml
...ice-user/src/main/resources/mapper/xzsz/WithdrawalDao.xml
+26
-0
XzDao.xml
...cms-service-user/src/main/resources/mapper/xzsz/XzDao.xml
+31
-0
not-check.yml
...service/cms-service-user/src/main/resources/not-check.yml
+4
-0
kustomization.yaml
kustomization/overlays/dev/kustomization.yaml
+1
-1
没有找到文件。
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/dto/wallet/PayWalletDTO.java
浏览文件 @
cb5118ae
...
...
@@ -28,22 +28,20 @@ public class PayWalletDTO implements Serializable {
private
String
userName
;
@ApiModelProperty
(
value
=
"云享金余额"
)
private
BigDecimal
cashAmt
;
@ApiModelProperty
(
value
=
"已消耗云享金"
)
private
BigDecimal
cashPaid
;
@ApiModelProperty
(
value
=
"云享金总金额"
)
private
BigDecimal
totalCash
;
@ApiModelProperty
(
value
=
"已冻结云享金"
)
private
BigDecimal
cashFreeze
;
@ApiModelProperty
(
value
=
"佣金余额"
)
private
BigDecimal
salaryAmt
;
@ApiModelProperty
(
value
=
"已消耗佣金"
)
private
BigDecimal
salaryPaid
;
@ApiModelProperty
(
value
=
"已冻结佣金"
)
private
BigDecimal
salaryFreeze
;
@ApiModelProperty
(
value
=
"佣金总额度"
)
private
BigDecimal
totalSalary
;
@ApiModelProperty
(
value
=
"已提现的金额"
)
private
BigDecimal
rebateWdl
;
@ApiModelProperty
(
value
=
"提现冻结金额"
)
private
BigDecimal
wdlFreeze
;
@ApiModelProperty
(
value
=
"冻结总额"
)
private
BigDecimal
totalFreeze
;
@ApiModelProperty
(
value
=
"总金额"
)
...
...
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/dto/wallet/WithdrawalApplyDTO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
dto
.
wallet
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* @author 作者 lw
* @version 创建时间:2023.8.28 11:08:54
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
WithdrawalApplyDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
5782430067900145219L
;
@ApiModelProperty
(
value
=
"id"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"申请人的用户ID"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"申请金额"
)
private
BigDecimal
applyAmt
;
@ApiModelProperty
(
value
=
"申请状态: 0平台处理中 1提现成功 2提现失败"
)
private
Integer
applyStatus
;
@ApiModelProperty
(
value
=
"开户人"
)
private
String
empName
;
@ApiModelProperty
(
value
=
"开户银行-支行名称"
)
private
String
bankName
;
@ApiModelProperty
(
value
=
"收款账号"
)
private
String
payAccount
;
@ApiModelProperty
(
value
=
"备注"
)
private
String
remark
;
@ApiModelProperty
(
value
=
"流水编号"
)
private
String
outerTradeNo
;
@ApiModelProperty
(
value
=
"手机号"
)
private
String
phoneNum
;
@ApiModelProperty
(
value
=
"提现方式-微信(wechat)-支付宝(alipay)-银行卡(bank_card)"
,
required
=
true
,
example
=
"wechat"
)
private
String
settleType
;
@ApiModelProperty
(
value
=
"处理信息"
)
private
String
tradeResult
;
@ApiModelProperty
(
value
=
"apply 提现申请 await待发放 handle交易中 success 交易成功 failure 交易失败"
)
private
String
tradeStatus
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
Date
createTime
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/dto/xzsz/UsableCashPoolingDTO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
dto
.
xzsz
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
/**
* @Author LW
* @date 2023/8/29 14:25
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
UsableCashPoolingDTO
{
@ApiModelProperty
(
value
=
"商户企业名称"
)
private
String
companyName
;
@ApiModelProperty
(
value
=
"可用余额(含税费金额)"
)
private
String
taxFundName
;
@ApiModelProperty
(
value
=
"税源地名称"
)
private
BigDecimal
availableBalance
;
@ApiModelProperty
(
value
=
"交易渠道"
)
private
String
tradesChannel
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/fdd/dto/FddVerifyInfoDTO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
fdd
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author:zhenjie Date:2022/9/2
* time:14:34
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@ApiModel
(
value
=
"com.mmc.csf.fdd.dto.AppEVerifyInfoDTO"
,
description
=
"小程序用户企业认证DTO"
)
public
class
FddVerifyInfoDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
4194664180348523961L
;
private
Integer
id
;
private
Integer
userFddId
;
private
String
customerId
;
private
String
transactionNo
;
private
String
url
;
private
Integer
deleted
;
private
Date
createTime
;
private
Date
updateTime
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/fdd/dto/UserFddDTO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
fdd
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:53
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
UserFddDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
4952516407490131779L
;
private
Integer
id
;
private
String
unionId
;
private
String
customerId
;
private
Integer
personVerifyStatus
;
private
Integer
entVerifyStatus
;
private
Integer
accountType
;
private
Date
createTime
;
private
Date
updateTime
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/fdd/req/NECertReq.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
fdd
.
req
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* author:zhenjie
* Date:2022/7/27
* time:14:29
*/
@Data
@NoArgsConstructor
public
class
NECertReq
implements
Serializable
{
private
static
final
long
serialVersionUID
=
6174142180495289363L
;
private
String
name
;
private
String
value
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/fdd/resp/CompanyVerifyResp.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
fdd
.
resp
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* author:zhenjie
* Date:2022/7/21
* time:18:13
*/
@Data
@NoArgsConstructor
public
class
CompanyVerifyResp
implements
Serializable
{
private
static
final
long
serialVersionUID
=
5835274401261039702L
;
private
String
transactionNo
;
private
String
url
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/fdd/resp/PersonVerifyResp.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
fdd
.
resp
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* author:zhenjie
* Date:2022/7/18
* time:16:00
*/
@Data
@NoArgsConstructor
public
class
PersonVerifyResp
implements
Serializable
{
private
static
final
long
serialVersionUID
=
7583599952872411025L
;
private
String
transactionNo
;
private
String
url
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/fdd/seal/SealDetail.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
fdd
.
seal
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @Author LW
* @date 2022/8/3 16:24
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
SealDetail
implements
Serializable
{
@ApiModelProperty
(
value
=
"签章图片Base64"
)
private
String
signatureImg
;
@ApiModelProperty
(
value
=
"签章编号"
)
private
String
signatureId
;
@ApiModelProperty
(
value
=
"签章图片作用范围:0:非默认 1:默认章"
)
private
Integer
signatureScope
;
@ApiModelProperty
(
value
=
"签章来源 0:法大大生成 1:平台上传"
)
private
String
signatureSource
;
@ApiModelProperty
(
value
=
"企业或者个人 1:个人 2:企业"
)
private
String
signatureType
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/qo/wallet/WalletFlowQO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
qo
.
wallet
;
import
com.mmc.iuav.group.Page
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @author 作者 lw
* @version 创建时间:2023.8.26 上午11:40:21
* @explain 类说明
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
WalletFlowQO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
2568266056802132237L
;
@ApiModelProperty
(
value
=
"用户id"
,
hidden
=
true
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"查询年-月"
)
private
String
yearMonth
;
@ApiModelProperty
(
value
=
"开始时间"
)
private
String
startTime
;
@ApiModelProperty
(
value
=
"结束时间"
,
hidden
=
true
)
private
String
endTime
;
@ApiModelProperty
(
value
=
"状态类型"
)
private
Integer
payMethod
;
@ApiModelProperty
(
value
=
"页码"
,
required
=
true
)
@NotNull
(
message
=
"页码不能为空"
,
groups
=
{
Page
.
class
})
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageNo
;
@ApiModelProperty
(
value
=
"每页显示数"
,
required
=
true
)
@NotNull
(
message
=
"每页显示数不能为空"
,
groups
=
{
Page
.
class
})
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageSize
;
public
void
buildCurrentPage
()
{
this
.
pageNo
=
(
pageNo
-
1
)
*
pageSize
;
}
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/qo/wallet/WithdrawalApplyQO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
qo
.
wallet
;
/**
* @author 作者 geDuo
* @version 创建时间:2021年10月29日 下午2:25:08
* @explain 类说明
*/
import
com.mmc.iuav.group.Freeze
;
import
com.mmc.iuav.group.Page
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.Min
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
WithdrawalApplyQO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
2185498289462506967L
;
@ApiModelProperty
(
value
=
"关键字"
,
example
=
"666"
)
private
String
keyword
;
@ApiModelProperty
(
value
=
"开始时间"
,
example
=
"2023-08-28 00:00:00"
)
private
String
startTime
;
@ApiModelProperty
(
value
=
"结束时间"
,
example
=
"2023-08-28 23:59:59"
)
private
String
endTime
;
@ApiModelProperty
(
value
=
"状态: apply 提现申请 await待发放 handle交易中 success 交易成功 failure 交易失败"
,
example
=
"0"
)
private
String
tradeStatus
;
@ApiModelProperty
(
value
=
"通道标识-微信(wechat)-支付宝(alipay)-银行卡(bank_card)"
,
required
=
true
,
example
=
"wechat"
)
private
String
settleType
;
@ApiModelProperty
(
value
=
"页码"
,
required
=
true
,
example
=
"1"
)
@NotNull
(
message
=
"页码不能为空"
,
groups
=
{
Page
.
class
,
Freeze
.
class
})
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageNo
;
@ApiModelProperty
(
value
=
"每页显示数"
,
required
=
true
,
example
=
"10"
)
@NotNull
(
message
=
"每页显示数不能为空"
,
groups
=
{
Page
.
class
,
Freeze
.
class
})
@Min
(
value
=
1
,
groups
=
Page
.
class
)
private
Integer
pageSize
;
public
void
buildCurrentPage
()
{
this
.
pageNo
=
(
pageNo
-
1
)
*
pageSize
;
}
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/UserAccountVO.java
浏览文件 @
cb5118ae
...
...
@@ -73,4 +73,8 @@ public class UserAccountVO implements Serializable {
private
Integer
auditStatus
;
@ApiModelProperty
(
value
=
"总积分 null表示无积分"
)
private
Integer
totalPoints
;
@ApiModelProperty
(
value
=
"小猪算账电签状态:0否,1是"
)
private
Integer
xzAuthStatus
;
@ApiModelProperty
(
value
=
"是否关注公众号"
)
private
Integer
subStatus
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/WithdrawalInfoVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* @Author LW
* @date 2023/8/26 15:42
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
WithdrawalInfoVO
implements
Serializable
{
public
final
static
String
AMT
=
"amt"
;
public
final
static
String
APPLY
=
"APPLY"
;
private
static
final
long
serialVersionUID
=
2535626170303302278L
;
@ApiModelProperty
(
value
=
"id"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"流水编号"
)
private
String
payNo
;
@ApiModelProperty
(
value
=
"操作方式"
)
private
Integer
payMethod
;
@ApiModelProperty
(
value
=
"佣金变动金额(正数入账,负数扣除)"
)
private
BigDecimal
salaryAmtPaid
;
@ApiModelProperty
(
value
=
"操作时间"
)
private
Date
payTime
;
@ApiModelProperty
(
value
=
"操作名称"
)
private
String
name
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/WxMsgVO.java
浏览文件 @
cb5118ae
...
...
@@ -7,11 +7,9 @@ import lombok.Builder;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.util.CollectionUtils
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* @author: zj
...
...
@@ -26,60 +24,41 @@ public class WxMsgVO implements Serializable {
@ApiModelProperty
(
value
=
"用户id-仅适用云享飞客户端"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"公众号的openId"
)
private
String
openId
;
private
String
touser
;
@ApiModelProperty
(
value
=
"unionId-全局通用"
)
private
String
unionId
;
@ApiModelProperty
(
value
=
"模板id"
)
@NotNull
(
message
=
"模板id不能为空"
)
private
String
templ
em
teId
;
private
String
templ
a
teId
;
@ApiModelProperty
(
value
=
"网页跳转连接"
)
private
String
url
;
@ApiModelProperty
(
value
=
"小程序APPID"
)
private
String
wxAppltAppId
;
private
String
wxAppl
e
tAppId
;
@ApiModelProperty
(
value
=
"小程序跳转连接"
)
private
String
appletPath
;
@ApiModelProperty
(
value
=
"标题"
)
private
MsgData
title
;
@ApiModelProperty
(
value
=
"消息数组"
)
private
List
<
MsgData
>
data
;
@ApiModelProperty
(
value
=
"消息备注"
)
private
MsgData
remark
;
@ApiModelProperty
(
value
=
"按照接口文档传数据"
)
private
JSONObject
dataObject
;
public
String
buildMsgJson
()
{
JSONObject
obj
=
new
JSONObject
();
obj
.
put
(
"touser"
,
this
.
openId
);
obj
.
put
(
"template_id"
,
this
.
templemteId
);
public
String
buildTemplateMsg
()
{
JSONObject
msg
=
new
JSONObject
();
msg
.
put
(
"touser"
,
this
.
touser
);
msg
.
put
(
"template_id"
,
this
.
templateId
);
// 跳转页面
if
(!
StringUtils
.
isBlank
(
this
.
url
))
{
obj
.
put
(
"url"
,
this
.
url
);
msg
.
put
(
"url"
,
this
.
url
);
}
if
(!
StringUtils
.
isBlank
(
this
.
wxAppltAppId
)
&&
!
StringUtils
.
isBlank
(
this
.
appletPath
))
{
// 跳转小程序页面设置
if
(!
StringUtils
.
isBlank
(
this
.
wxAppl
e
tAppId
)
&&
!
StringUtils
.
isBlank
(
this
.
appletPath
))
{
JSONObject
mini
=
new
JSONObject
();
mini
.
put
(
"appid"
,
this
.
wxAppltAppId
);
mini
.
put
(
"appid"
,
this
.
wxAppl
e
tAppId
);
mini
.
put
(
"pagepath"
,
this
.
appletPath
);
obj
.
put
(
"miniprogram"
,
mini
);
}
JSONObject
jd
=
new
JSONObject
();
jd
.
put
(
"first"
,
this
.
convertMsg
(
title
));
if
(!
CollectionUtils
.
isEmpty
(
this
.
data
))
{
for
(
int
i
=
0
;
i
<
data
.
size
();
i
++)
{
String
key
=
"keyword"
+
(
i
+
1
);
jd
.
put
(
key
,
this
.
convertMsg
(
data
.
get
(
i
)));
}
}
if
(
this
.
remark
!=
null
&&
!
StringUtils
.
isBlank
(
this
.
remark
.
getValue
()))
{
jd
.
put
(
"remark"
,
this
.
convertMsg
(
this
.
remark
));
}
obj
.
put
(
"data"
,
jd
);
return
obj
.
toJSONString
();
msg
.
put
(
"miniprogram"
,
mini
);
}
public
JSONObject
convertMsg
(
MsgData
msg
)
{
JSONObject
jb
=
new
JSONObject
();
jb
.
put
(
"value"
,
msg
.
getValue
());
jb
.
put
(
"color"
,
msg
.
getColor
());
return
jb
;
msg
.
put
(
"data"
,
this
.
dataObject
);
return
msg
.
toString
();
}
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/XzAuthVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @author: zj
* @Date: 2023/8/21 13:40
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
XzAuthVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
6009105206194794410L
;
@ApiModelProperty
(
value
=
"用户名称"
)
private
String
username
;
@ApiModelProperty
(
value
=
"身份证号"
)
private
String
idCardNo
;
@ApiModelProperty
(
value
=
"手机号码"
)
private
String
mobile
;
@ApiModelProperty
(
value
=
"附加信息,如需4要素认证必填"
)
private
String
bankAccount
;
@ApiModelProperty
(
value
=
"身份证照片人像面URL,图片必须已经通过OCR识别"
)
private
String
idCardImageFront
;
@ApiModelProperty
(
value
=
"身份证照片国徽面URL,图片必须已经通过OCR识别"
)
private
String
idCardImageBack
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/XzWithdrawalVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @author: zj
* @Date: 2023/8/21 20:14
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
XzWithdrawalVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
8758847907824399671L
;
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"回调地址"
)
private
String
notifyUrl
;
@ApiModelProperty
(
value
=
"税源地id"
)
private
String
taxFundId
;
@ApiModelProperty
(
value
=
"提现月份"
)
private
String
month
;
@ApiModelProperty
(
value
=
"商户业务流水号(商户自行生成,全局唯一)"
)
private
String
outerTradeNo
;
@ApiModelProperty
(
value
=
"自定义员工编号(商户系统中用户唯一编号)"
)
private
String
empNum
;
@ApiModelProperty
(
value
=
"收款人户名"
)
private
String
empName
;
@ApiModelProperty
(
value
=
"收款人手机号"
)
private
String
empPhone
;
@ApiModelProperty
(
value
=
"收款人证件类型:ID_CARD"
)
private
String
licenseType
;
@ApiModelProperty
(
value
=
"收款人证件号码"
)
private
String
licenseId
;
@ApiModelProperty
(
value
=
"交易类型(bankcard:银行卡,alipay:支付宝,wechatpay:微信)"
)
private
String
settleType
;
@ApiModelProperty
(
value
=
"收款账号,交易类型为支付宝时,为支付宝账号;交易类型为微信时,填收款用户的openid"
)
private
String
payAccount
;
@ApiModelProperty
(
value
=
"收款人银行名称 (无需细到支行名称)"
)
private
String
bankName
;
@ApiModelProperty
(
value
=
"服务类型,测试:销售推广;正式:市场推广"
)
private
String
positionName
;
@ApiModelProperty
(
value
=
"交易金额(实际到账金额, 单位元,精确两位小数 )"
)
private
Double
payAmount
;
@ApiModelProperty
(
value
=
"业务备注说明:若需要对每笔提现区分业务来源,可自行定义,后续可在SaaS后台查看,与用户到账说明无关(不能超过10个字)"
)
private
String
remarks
;
@ApiModelProperty
(
value
=
"银行摘要备注(可在收款行交易明细中查看到"
)
private
String
bankRemo
;
@ApiModelProperty
(
value
=
"商户自己的微信APPID,交易类型为微信时,必填"
)
private
String
wechatAppId
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/wallet/ApplyWithdrawalVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
.
wallet
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
/**
* @author: lw
* @Date: 2023/8/25 10:25
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
ApplyWithdrawalVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
8677383830415176214L
;
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"户名"
)
private
String
empName
;
@ApiModelProperty
(
value
=
"手机号"
)
private
String
empPhone
;
@ApiModelProperty
(
value
=
"交易类型(bankcard:银行卡,alipay:支付宝,wechatpay:微信)"
,
required
=
true
)
private
String
settleType
;
@ApiModelProperty
(
value
=
"收款账号,交易类型为支付宝时,为支付宝账号;交易类型为微信时,填收款用户的openid"
,
required
=
true
)
private
String
payAccount
;
@ApiModelProperty
(
value
=
"收款人银行名称 (无需细到支行名称)"
)
private
String
bankName
;
@ApiModelProperty
(
value
=
"服务类型,测试:销售推广;正式:市场推广"
,
required
=
true
)
private
String
positionName
;
@ApiModelProperty
(
value
=
"交易金额(实际到账金额, 单位元,精确两位小数 )"
,
required
=
true
)
private
BigDecimal
payAmount
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/wallet/FlyerWalletFlowVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
.
wallet
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* @author 23214
* 飞手方钱包记录
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
FlyerWalletFlowVO
{
@ApiModelProperty
(
value
=
"用户ID"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"支付方式 100(订单发布) 200(无人接单取消订单)300(有人接单取消订单)400(飞手抢单)500(客服判定飞手无责取消订单)600(飞手有责取消订单)700(正常结算)800(修改订单金额状态)900(飞手未确认修改金额状态)1000(飞手确认修改金额状态)"
)
private
Integer
modeOfPayment
;
@ApiModelProperty
(
value
=
"云享金(需要正负)"
)
private
BigDecimal
cashAmount
;
@ApiModelProperty
(
value
=
"佣金(需要正负)"
)
private
BigDecimal
salaryAmount
;
@ApiModelProperty
(
value
=
"支付时间"
)
private
Date
timeOfPayment
;
@ApiModelProperty
(
value
=
"操作者用户id"
)
private
Integer
operateUserAccountId
;
@ApiModelProperty
(
value
=
"云享金违约金(需要正负)"
)
private
BigDecimal
yxjCashPledge
;
@ApiModelProperty
(
value
=
"佣金违约金(需要正负)"
)
private
BigDecimal
salaryCashPledge
;
@ApiModelProperty
(
value
=
"订单的百分比违约金(这笔钱是给发布方的)"
)
private
BigDecimal
percentagePenaltyOfOrder
;
}
\ No newline at end of file
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/wallet/PublisherWalletFlowVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
.
wallet
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* @author 23214
* 发布方钱包记录
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
PublisherWalletFlowVO
{
@ApiModelProperty
(
value
=
"用户ID"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"支付方式 100(订单发布) 200(无人接单取消订单)300(有人接单取消订单)400(飞手抢单)500(客服判定飞手无责取消订单)"
+
"600(飞手有责取消订单)700(正常结算)800(修改订单金额状态)900(飞手未确认修改金额状态)1000(飞手确认修改金额状态)"
)
private
Integer
modeOfPayment
;
@ApiModelProperty
(
value
=
"云享金(需要正负)注:结算时修改金额如果大于原订单,需要支付的云享金,也传这个字段"
)
private
BigDecimal
cashAmount
;
@ApiModelProperty
(
value
=
"佣金(需要正负)注:结算时修改金额如果大于原订单,需要支付的佣金,也传这个字段"
)
private
BigDecimal
salaryAmount
;
@ApiModelProperty
(
value
=
"支付时间"
)
private
Date
timeOfPayment
;
@ApiModelProperty
(
value
=
"操作者用户id"
)
private
Integer
operateUserAccountId
;
@ApiModelProperty
(
value
=
"云享金违约金(需要正负)"
)
private
BigDecimal
yxjCashPledge
;
@ApiModelProperty
(
value
=
"佣金违约金(需要正负)"
)
private
BigDecimal
salaryCashPledge
;
@ApiModelProperty
(
value
=
"订单的百分比违约金(这笔钱是给飞手的) (需要正负)"
)
private
BigDecimal
percentagePenaltyOfOrder
;
@ApiModelProperty
(
value
=
"加急单云享金金额 (需要正负)"
)
private
BigDecimal
urgentYxjAmount
;
@ApiModelProperty
(
value
=
"加急单佣金金额 (需要正负)"
)
private
BigDecimal
urgentSalaryAmount
;
@ApiModelProperty
(
value
=
"置顶单云享金金额 (需要正负)"
)
private
BigDecimal
topYxjAmount
;
@ApiModelProperty
(
value
=
"置顶单佣金金额 (需要正负)"
)
private
BigDecimal
topSalaryAmount
;
@ApiModelProperty
(
value
=
"飞手应得订单金额 (正数)"
)
private
BigDecimal
flyerSalaryAmount
;
@ApiModelProperty
(
value
=
"修改后金额(注:①飞手未确认时,后面支付的需要退的佣金那部分钱 ②飞手确认时,修改后的金额小于原佣金,需要退多余的佣金那部分钱 ③如果全部是微信支付的则不用传值)"
)
private
BigDecimal
refundSalaryAmount
;
@ApiModelProperty
(
value
=
"修改后金额(注:①飞手未确认时,后面支付的需要退的云享金那部分钱 ②飞手确认时,修改后的金额小于原佣金,需要退多余的云享金那部分钱 ③如果全部是微信支付的则不用传值)"
)
private
BigDecimal
refundCashAmount
;
}
\ No newline at end of file
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/wallet/TopUpOrderVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
.
wallet
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @Author LW
* @date 2023/8/23 13:37
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
TopUpOrderVO
{
@ApiModelProperty
(
value
=
"支付用户的openid"
)
private
String
openid
;
@ApiModelProperty
(
value
=
"订单编号"
)
private
String
orderNo
;
@ApiModelProperty
(
value
=
"金额(分)"
)
private
Integer
amount
;
@ApiModelProperty
(
value
=
"订单状态"
)
private
String
tradeState
;
@ApiModelProperty
(
value
=
"交易状态描述"
)
private
String
tradeStateDesc
;
}
cms-common/cms-common-model/src/main/java/com/mmc/iuav/user/model/vo/wallet/WalletFlowVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
model
.
vo
.
wallet
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
/**
* @Author LW
* @date 2023/8/21 17:59
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
WalletFlowVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
8848411142632397203L
;
private
PublisherWalletFlowVO
publisherWalletFlowVO
;
private
FlyerWalletFlowVO
flyerWalletFlowVO
;
}
cms-common/cms-common-util/src/main/java/com/mmc/iuav/response/ResultEnum.java
浏览文件 @
cb5118ae
...
...
@@ -9,6 +9,8 @@ public enum ResultEnum implements BaseErrorInfoInterface {
BODY_NOT_MATCH
(
"400"
,
"请求的数据格式不符"
),
FAIL
(
"500"
,
"fail"
),
PARAM_ERROR
(
"400"
,
"参数错误"
),
REQUEST_PARAM_ILLEGAL_ERROR
(
"706"
,
"请求参数非法"
),
NOT_FOUND
(
"404"
,
"未找到该资源!"
),
//企业认证
BUSINESS_LICENSE_CHECK_ANALYSIS_ERROR
(
"1000"
,
"营业执照解析失败,请上传有效清晰的执照"
),
...
...
@@ -82,7 +84,12 @@ public enum ResultEnum implements BaseErrorInfoInterface {
WX_NOT_SEND_MSG_PARAM_ERROR
(
"5029"
,
"userId和openId至少一个不为空"
),
APPLET_USER_ACCESS_TOKE_ERROR
(
"5031"
,
"获取accessToken签名校验失败"
),
WX_NOT_REL_ERROR
(
"5028"
,
"获取微信公众号用户信息失败"
),
DELETE_PASS_ERROR
(
"5029"
,
"已通过认证的不可删除"
);
DELETE_PASS_ERROR
(
"5029"
,
"已通过认证的不可删除"
),
// 提现相关
WITHDRAWAL_APPLY_STATUS_ERROR
(
"40001"
,
"审批状态有误"
),
WITHDRAWAL_INFO_NOT_FIND_ERROR
(
"40002"
,
"提现申请单信息不存在"
),
WITHDRAWAL_REPEAT_CHECK_ERROR
(
"40003"
,
"提现申请单已被审批,切勿重复审批。"
);
/**
* 错误码
...
...
csm-service/cms-service-user/pom.xml
浏览文件 @
cb5118ae
...
...
@@ -85,6 +85,28 @@
<version>
2.0.5
</version>
</dependency>
<dependency>
<groupId>
com.mmc.iuav.cms
</groupId>
<artifactId>
piggy-settlement
</artifactId>
<version>
1.0.0
</version>
<scope>
system
</scope>
<systemPath>
${project.basedir}/src/main/resources/lib/piggy-settlement-sdk-1.7.0.jar
</systemPath>
</dependency>
<dependency>
<groupId>
com.mmc.csf.fdd
</groupId>
<artifactId>
self-innovate
</artifactId>
<version>
1.0.0
</version>
<scope>
system
</scope>
<systemPath>
${basedir}/src/main/resources/lib/fdd-verify-process-1.8.5.jar
</systemPath>
</dependency>
<dependency>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-all
</artifactId>
<version>
5.3.5
</version>
</dependency>
</dependencies>
<build>
...
...
@@ -92,6 +114,9 @@
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<configuration>
<includeSystemScope>
true
</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/constant/UserSystemConstant.java
浏览文件 @
cb5118ae
...
...
@@ -37,4 +37,28 @@ public class UserSystemConstant {
@Value
(
"${third-party.qcc.secret-key}"
)
private
String
qccSecretKey
;
@Value
(
"${third-party.xzsz.appKey}"
)
private
String
xzAppKey
;
@Value
(
"${third-party.xzsz.appSecret}"
)
private
String
xzAppSecret
;
@Value
(
"${third-party.xzsz.aes}"
)
private
String
xzAes
;
@Value
(
"${third-party.xzsz.domain}"
)
private
String
xzDomain
;
@Value
(
"${third-party.xzsz.position}"
)
private
String
xzPosition
;
@Value
(
"${third-party.xzsz.taxFundId}"
)
private
String
taxFundId
;
@Value
(
"${third-party.xzsz.authNotify}"
)
private
String
authNotify
;
@Value
(
"${third-party.xzsz.withdrawNotify}"
)
private
String
withdrawNotify
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/constant/WxConstant.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
constant
;
import
org.springframework.stereotype.Component
;
/**
* @author: zj
* @Date: 2023/5/16 16:02
...
...
@@ -20,6 +18,7 @@ public class WxConstant {
public
static
final
String
IUAV_MINI_PROGRAM_ACCESS_TOKEN
=
"IUAV_MINI_PROGRAM_ACCESS_TOKEN"
;
public
static
final
String
IUAV_MINI_PROGRAM_STABLE_ACCESS_TOKEN
=
"IUAV_MINI_PROGRAM_STABLE_ACCESS_TOKEN"
;
public
static
final
String
SHARE_FLY_SUB_ACCESS_TOKEN
=
"SHARE_FLY_SUB_ACCESS_TOKEN"
;
public
static
final
String
SHARE_FLY_SUB_STABLE_ACCESS_TOKEN
=
"SHARE_FLY_SUB_STABLE_ACCESS_TOKEN"
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/constant/fdd/FddConnectConstant.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
constant
.
fdd
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
/**
* @author:zhenjie Date:2022/7/16
* time:14:58
*/
@Component
public
class
FddConnectConstant
{
public
static
String
APP_ID
;
public
static
String
APP_KEY
;
public
static
String
VERSION
;
public
static
String
HOST
;
public
static
String
MMC_URL
;
public
FddConnectConstant
(
@Value
(
"${fdd.appid}"
)
String
appid
,
@Value
(
"${fdd.appkey}"
)
String
appkey
,
@Value
(
"${fdd.version}"
)
String
version
,
@Value
(
"${fdd.host}"
)
String
host
,
@Value
(
"${fdd.mmc-url}"
)
String
mmcUrl
)
{
APP_ID
=
appid
;
APP_KEY
=
appkey
;
VERSION
=
version
;
HOST
=
host
;
MMC_URL
=
mmcUrl
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/constant/fdd/FddConstant.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
constant
.
fdd
;
import
org.springframework.stereotype.Component
;
/**
* author:zhenjie
* Date:2022/7/22
* time:11:07
*/
@Component
public
class
FddConstant
{
public
static
final
String
CODE
=
"code"
;
public
static
final
String
DATA
=
"data"
;
public
static
final
String
SUCCESS
=
"1"
;
public
static
final
String
MSG
=
"msg"
;
public
static
final
String
SIGNATURE_ID
=
"signature_id"
;
public
static
final
String
UPLOAD_FILE
=
"uploadFile/"
;
//企业实名认证异步回调
// public static final String NOTIFY_E_CERT_RES = "fddservlet/fdd/notifyECertRes";
//企业实名认证同步回调
public
static
final
String
RETURN_E_CERT_RES
=
"fddservlet/fdd/returnECertRes"
;
//小程序企业实名认证异步回调
public
static
final
String
NOTIFY_E_CERT_RES
=
"fdd/notifyECertRes"
;
//签署合同异步回调
public
static
final
String
NOTIFY_STAMP
=
"fddservlet/contract/notifyStamp"
;
public
static
final
String
UAV_NOTIFY_STAMP
=
"fddservlet/uav/contract/notifyStamp"
;
public
static
final
String
APP_ID
=
"appId"
;
public
static
final
String
CUSTOMER_ID
=
"customerId"
;
public
static
final
String
STATUS
=
"status"
;
public
static
final
String
SERIAL_NO
=
"serialNo"
;
public
static
final
String
SIGN
=
"sign"
;
public
static
final
String
UID_REGEX
=
"[-|_]"
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/WxController.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
controller
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.vo.WxMsgVO
;
import
com.mmc.iuav.user.service.WxService
;
import
com.mmc.iuav.user.util.WxApiUtil
;
import
io.swagger.annotations.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -48,6 +50,21 @@ public class WxController extends BaseController {
return
ResultBody
.
success
(
wxService
.
createUrlLink
(
path
,
query
));
}
@ApiOperation
(
value
=
"验证服务器URL是否有效"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
String
.
class
)})
@GetMapping
(
"wxSendMessage"
)
public
void
checkService
(
@RequestParam
String
signature
,
@RequestParam
String
timestamp
,
@RequestParam
String
nonce
,
@RequestParam
String
echostr
,
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
IOException
{
req
.
setCharacterEncoding
(
"UTF-8"
);
resp
.
setCharacterEncoding
(
"UTF-8"
);
PrintWriter
out
=
resp
.
getWriter
();
System
.
out
.
println
(
"#############验证服务器URL是否有效-START--################"
);
boolean
bs
=
WxApiUtil
.
checkSignature
(
signature
,
timestamp
,
nonce
);
System
.
out
.
println
(
"输出:"
+
bs
+
"---"
+
echostr
);
System
.
out
.
println
(
"#############验证服务器URL是否有效-END--################"
);
out
.
println
(
bs
?
echostr
:
null
);
}
@ApiOperation
(
value
=
"监控微信公众号的事件变化通知"
,
hidden
=
true
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
String
.
class
)})
@PostMapping
(
"wxSendMessage"
)
...
...
@@ -60,10 +77,38 @@ public class WxController extends BaseController {
out
.
println
(
msg
);
}
@ApiOperation
(
value
=
"发送消息"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
String
.
class
)})
@PostMapping
(
"send"
)
public
ResultBody
send
(
@RequestBody
WxMsgVO
ws
)
{
return
wxService
.
sendSubTemplateMsg
(
ws
);
}
@ApiOperation
(
value
=
"生成小程序码"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"getAppletQRCode"
)
public
ResultBody
getAppletQRCode
(
@ApiParam
(
value
=
"小程序路径"
,
example
=
"pages/welcome/index"
)
@RequestParam
String
page
,
@ApiParam
(
value
=
"参数"
,
example
=
"name=123&sex=456"
)
@RequestParam
String
scene
)
{
return
wxService
.
getUnLimitedQRCode
(
page
,
scene
);
}
@ApiOperation
(
value
=
"查询rid信息"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"rid"
)
public
ResultBody
rid
(
@RequestParam
String
rid
)
throws
Exception
{
return
wxService
.
rid
(
rid
);
}
@ApiOperation
(
value
=
"同步微信公众号用户"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"moveSubUserToTest"
)
public
ResultBody
moveSubUserToTest
()
{
return
wxService
.
moveSubUserToTest
();
}
@ApiOperation
(
value
=
"同步微信公众号用户unionId"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"moveSubUserUnionIdToTest"
)
public
ResultBody
moveSubUserUnionIdToTest
()
{
return
wxService
.
moveSubUserUnionIdToTest
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/fdd/UserFddAuthController.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
controller
.
fdd
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.controller.BaseController
;
import
com.mmc.iuav.user.model.fdd.dto.FddVerifyInfoDTO
;
import
com.mmc.iuav.user.model.fdd.dto.UserFddDTO
;
import
com.mmc.iuav.user.model.fdd.resp.CompanyVerifyResp
;
import
com.mmc.iuav.user.model.fdd.resp.PersonVerifyResp
;
import
com.mmc.iuav.user.service.fdd.UserFddAuthService
;
import
io.swagger.annotations.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Map
;
/**
* @author:lw Date:2022/9/1
* time:15:44
*/
@Api
(
tags
=
{
"fdd用户认证"
})
@RestController
@RequestMapping
(
"/fdd/"
)
public
class
UserFddAuthController
extends
BaseController
{
@Autowired
private
UserFddAuthService
userFddAuthService
;
@ApiOperation
(
value
=
"注册法大大账号"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
String
.
class
)})
@ApiIgnore
@GetMapping
(
"register"
)
public
String
register
(
@ApiParam
(
value
=
"唯一标识当类型为1的时候传openid 当为2的时候传id"
)
@RequestParam
String
uid
,
@ApiParam
(
value
=
"账号类型 1个人 2企业"
)
@RequestParam
String
accountType
)
{
return
userFddAuthService
.
register
(
uid
,
accountType
);
}
@ApiOperation
(
value
=
"获取个人实名认证地址"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
PersonVerifyResp
.
class
)})
@GetMapping
(
"getPersonVerifyUrl"
)
public
ResultBody
getPersonVerifyUrl
(
HttpServletRequest
request
)
{
return
userFddAuthService
.
getPersonVerifyUrl
(
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
());
}
@ApiOperation
(
value
=
"获取企业实名认证url"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
CompanyVerifyResp
.
class
)})
@GetMapping
(
"getCompanyVerifyUrl"
)
public
ResultBody
getCompanyVerifyUrl
(
@ApiParam
(
value
=
"端口:0小程序 1后台"
)
@RequestParam
Integer
port
,
HttpServletRequest
request
)
{
return
userFddAuthService
.
getCompanyVerifyUrl
(
port
,
this
.
getUserLoginInfoFromRedis
(
request
));
}
@ApiOperation
(
value
=
"异步处理企业实名认证"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@ApiIgnore
@PostMapping
(
"notifyECertRes"
)
public
ResultBody
notifyECertRes
(
@RequestParam
Map
<
String
,
String
>
map
)
{
return
userFddAuthService
.
notifyECertRes
(
map
);
}
@ApiOperation
(
value
=
"获取(企业/个人)实名认证信息"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
FddVerifyInfoDTO
.
class
)})
@GetMapping
(
"findCompanyCertInfo"
)
public
ResultBody
findCompanyCertInfo
(
@ApiParam
(
value
=
"端口:0小程序 1后台"
)
@RequestParam
Integer
port
,
@ApiParam
(
value
=
"企业:2 个人:1"
)
Integer
flag
,
HttpServletRequest
request
)
{
return
userFddAuthService
.
findCompanyCertInfo
(
port
,
flag
,
this
.
getUserLoginInfoFromRedis
(
request
));
}
@ApiOperation
(
value
=
"获取认证信息"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserFddDTO
.
class
)})
@GetMapping
(
"getAppUserFddInfo"
)
public
ResultBody
<
UserFddDTO
>
getAppUserFddInfo
(
@ApiParam
(
value
=
"端口:0小程序 1后台"
)
@RequestParam
Integer
port
,
HttpServletRequest
request
)
{
return
userFddAuthService
.
getAppUserFddInfo
(
port
,
this
.
getUserLoginInfoFromRedis
(
request
));
}
@ApiOperation
(
value
=
"通过uuid下载文件"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"getFileByUuid"
)
public
ResultBody
getFileByUuid
(
@RequestParam
String
uuid
,
@RequestParam
(
required
=
false
)
String
docType
)
{
return
userFddAuthService
.
getFileByUuid
(
uuid
,
docType
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/wallet/PayWalletController.java
浏览文件 @
cb5118ae
...
...
@@ -2,14 +2,14 @@ package com.mmc.iuav.user.controller.wallet;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.controller.BaseController
;
import
com.mmc.iuav.user.entity.wallet.UserBillingDetailVO
;
import
com.mmc.iuav.user.model.dto.wallet.PayWalletDTO
;
import
com.mmc.iuav.user.model.qo.wallet.WalletFlowQO
;
import
com.mmc.iuav.user.model.vo.wallet.TopUpOrderVO
;
import
com.mmc.iuav.user.model.vo.wallet.WalletFlowVO
;
import
com.mmc.iuav.user.service.wallet.PayWalletService
;
import
io.swagger.annotations.*
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
springfox.documentation.annotations.ApiIgnore
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
...
...
@@ -30,24 +30,51 @@ public class PayWalletController extends BaseController {
@ApiOperation
(
value
=
"获取当前用户消费(钱包)信息"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
PayWalletDTO
.
class
)})
@GetMapping
(
"getCurrentUserPayWalletInfo"
)
public
ResultBody
getCurrentUserPayWalletInfo
(
HttpServletRequest
request
)
{
public
ResultBody
<
PayWalletDTO
>
getCurrentUserPayWalletInfo
(
HttpServletRequest
request
)
{
return
payWalletService
.
getPayWalletInfo
(
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
());
}
@ApiOperation
(
value
=
"获取用户消费(钱包)信息"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
PayWalletDTO
.
class
)})
@GetMapping
(
"getPayWalletInfo"
)
public
ResultBody
getPayWalletInfo
(
public
ResultBody
<
PayWalletDTO
>
getPayWalletInfo
(
@ApiParam
(
value
=
"用户userAccountId"
,
required
=
true
)
@RequestParam
Integer
userAccountId
)
{
return
ResultBody
.
success
(
payWalletService
.
getPayWalletInfo
(
userAccountId
));
}
@ApiOperation
(
value
=
"feign-
初始化钱包
"
)
@ApiOperation
(
value
=
"feign-
云享金充值增加金额
"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@ApiIgnore
@GetMapping
(
"feignInitPayWallet"
)
public
ResultBody
feignInitPayWallet
(
@RequestParam
Integer
userAccountId
)
{
return
payWalletService
.
initPayWallet
(
userAccountId
);
@PostMapping
(
"feignTopUpCash"
)
public
ResultBody
feignTopUpCash
(
@RequestBody
TopUpOrderVO
topUpOrderVO
)
{
return
payWalletService
.
feignTopUpCash
(
topUpOrderVO
);
}
@ApiOperation
(
value
=
"feign-钱包流水记录"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"feignWalletFlow"
)
public
ResultBody
feignWalletFlow
(
@RequestBody
WalletFlowVO
walletFlowVO
)
{
return
payWalletService
.
feignWalletFlow
(
walletFlowVO
);
}
@ApiOperation
(
value
=
"feign-钱包流水记录不带token"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"feignWalletFlowNO"
)
public
ResultBody
feignWalletFlowNO
(
@RequestBody
WalletFlowVO
walletFlowVO
)
{
return
payWalletService
.
feignWalletFlow
(
walletFlowVO
);
}
@ApiOperation
(
value
=
"用户账单明细"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserBillingDetailVO
.
class
)})
@PostMapping
(
"customerBillingDetail"
)
public
ResultBody
<
UserBillingDetailVO
>
customerBillingDetail
(
HttpServletRequest
request
,
@RequestBody
WalletFlowQO
walletFlowQO
)
{
return
payWalletService
.
customerBillingDetail
(
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
(),
walletFlowQO
);
}
@ApiOperation
(
value
=
"账单详情"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserBillingDetailVO
.
class
)})
@GetMapping
(
"billingDetails"
)
public
ResultBody
<
UserBillingDetailVO
>
billingDetails
(
@ApiParam
(
value
=
"ID"
,
required
=
true
)
@RequestParam
Integer
id
,
@ApiParam
(
value
=
"详情类型"
,
required
=
true
)
@RequestParam
String
detailType
)
{
return
payWalletService
.
billingDetails
(
id
,
detailType
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/wallet/WithdrawalController.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
controller
.
wallet
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.controller.BaseController
;
import
com.mmc.iuav.user.entity.wallet.UserBillingDetailVO
;
import
com.mmc.iuav.user.model.dto.wallet.WithdrawalApplyDTO
;
import
com.mmc.iuav.user.model.qo.wallet.WalletFlowQO
;
import
com.mmc.iuav.user.model.qo.wallet.WithdrawalApplyQO
;
import
com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO
;
import
com.mmc.iuav.user.service.xzsz.WithdrawalService
;
import
io.swagger.annotations.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
/**
* @author: zj
* @Date: 2023/8/23 15:58
*/
@Slf4j
@Api
(
tags
=
"提现相关"
)
@RequestMapping
(
"/withdrawal/"
)
@RestController
public
class
WithdrawalController
extends
BaseController
{
@Autowired
private
WithdrawalService
withdrawalService
;
@ApiOperation
(
value
=
"提现申请"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"apply"
)
public
ResultBody
apply
(
@RequestBody
ApplyWithdrawalVO
applyWithdrawalVO
,
HttpServletRequest
request
)
{
return
withdrawalService
.
apply
(
applyWithdrawalVO
,
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
());
}
// @ApiOperation(value = "个人提现明细列表-V1")
// @ApiResponses({@ApiResponse(code = 200, message = "OK", response = UserBillingDetailVO.class)})
// @PostMapping("withdrawalList")
// public ResultBody<UserBillingDetailVO> withdrawalList(HttpServletRequest request, @RequestBody WalletFlowQO walletFlowQO) {
// return withdrawalService.withdrawalList(this.getUserLoginInfoFromRedis(request).getUserAccountId(), walletFlowQO);
// }
@ApiOperation
(
value
=
"个人提现明细列表"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserBillingDetailVO
.
class
)})
@PostMapping
(
"withdrawalList"
)
public
ResultBody
<
UserBillingDetailVO
>
withdrawalList
(
HttpServletRequest
request
,
@RequestBody
WalletFlowQO
walletFlowQO
)
{
return
withdrawalService
.
withdrawalList
(
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
(),
walletFlowQO
);
}
@ApiOperation
(
value
=
"PC端-提现管理-分页查询"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
WithdrawalApplyDTO
.
class
)})
@PostMapping
(
"listPageWithdrawalApply"
)
public
ResultBody
<
WithdrawalApplyDTO
>
listPageWithdrawalApply
(
@ApiParam
(
value
=
"提现管理查询QO"
,
required
=
true
)
@RequestBody
WithdrawalApplyQO
param
)
{
return
ResultBody
.
success
(
withdrawalService
.
listPageWithdrawalApply
(
param
));
}
@ApiOperation
(
value
=
"PC端-提现管理-审批"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"approveWithdrawalApply"
)
public
ResultBody
approveWithdrawalApply
(
@ApiParam
(
value
=
"申请单ID"
,
required
=
true
)
@RequestParam
Integer
id
,
@ApiParam
(
value
=
"状态: 0提现申请中 1审批通过 2审批未通过"
,
required
=
true
)
@RequestParam
Integer
applyStatus
,
@ApiParam
(
value
=
"备注"
)
String
remark
,
HttpServletRequest
request
)
{
return
ResultBody
.
success
(
withdrawalService
.
approveWithdrawalApply
(
id
,
applyStatus
,
this
.
getUserLoginInfoFromRedis
(
request
).
getUserAccountId
(),
remark
));
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/controller/xzsz/XzController.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
controller
.
xzsz
;
import
cn.hutool.json.JSONObject
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.controller.BaseController
;
import
com.mmc.iuav.user.model.vo.XzAuthVO
;
import
com.mmc.iuav.user.model.vo.XzWithdrawalVO
;
import
com.mmc.iuav.user.service.xzsz.XzService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiResponse
;
import
io.swagger.annotations.ApiResponses
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
/**
* @author: zj
* @Date: 2023/8/20 14:01
*/
@Slf4j
@Api
(
tags
=
"小猪算账api"
)
@RequestMapping
(
"/xz/"
)
@RestController
public
class
XzController
extends
BaseController
{
@Autowired
private
XzService
xzService
;
@ApiOperation
(
value
=
"税源地公司信息查询-V2"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"getTaxFundList"
)
public
ResultBody
getTaxFundList
()
{
return
xzService
.
getTaxFundList
();
}
@ApiOperation
(
value
=
"资金池汇总余额查询-V2"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"getCashPooling"
)
public
ResultBody
getCashPooling
()
{
return
xzService
.
getCashPooling
();
}
@ApiOperation
(
value
=
"查询税源地可用资金-V2"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"getUsableCashPooling"
)
public
ResultBody
getUsableCashPooling
()
{
return
ResultBody
.
success
(
xzService
.
getUsableCashPooling
());
}
@ApiOperation
(
value
=
"签约状态查询"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"getContractScope"
)
public
ResultBody
getContractScope
(
@RequestBody
XzAuthVO
xzAuthVO
)
{
return
ResultBody
.
success
(
xzService
.
getContractScope
(
xzAuthVO
));
}
@ApiOperation
(
value
=
"发起合同签署"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"hasKeyByUrl"
)
public
ResultBody
hasKeyByUrl
(
HttpServletRequest
request
)
{
return
ResultBody
.
success
(
xzService
.
hasKeyByUrl
(
this
.
getUserLoginInfoFromRedis
(
request
)));
}
@ApiOperation
(
value
=
"查询签署结果"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"getSignedResult"
)
public
ResultBody
getSignedResult
(
@RequestBody
XzAuthVO
xzAuthVO
)
{
return
ResultBody
.
success
(
com
.
alibaba
.
fastjson2
.
JSONObject
.
toJSONString
(
xzService
.
getSignedResult
(
xzAuthVO
)));
}
@ApiOperation
(
value
=
"在线浏览合同"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"viewContract"
)
public
ResultBody
viewContract
(
@RequestParam
String
documentId
)
{
return
ResultBody
.
success
(
xzService
.
viewContract
(
documentId
));
}
@ApiOperation
(
value
=
"刷脸数据删除"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"clearTestFace"
)
public
ResultBody
clearTestFace
(
@RequestParam
String
name
,
@RequestParam
String
idCard
)
{
return
xzService
.
clearTestFace
(
name
,
idCard
);
}
@ApiOperation
(
value
=
"特殊单笔提现上报"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"singleSubmitLimit"
)
public
ResultBody
singleSubmitLimit
(
@RequestBody
XzWithdrawalVO
xzWithdrawalVO
)
{
return
ResultBody
.
success
(
xzService
.
singleSubmitLimit
(
xzWithdrawalVO
));
}
@ApiOperation
(
value
=
"单笔提现上报"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"singleSubmit"
)
public
ResultBody
singleSubmit
(
@RequestBody
XzWithdrawalVO
xzWithdrawalVO
)
{
return
ResultBody
.
success
(
xzService
.
singleSubmit
(
xzWithdrawalVO
));
}
@ApiOperation
(
value
=
"查询提现结果"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"querySingleTrade"
)
public
ResultBody
querySingleTrade
(
@RequestParam
String
outerTradeNo
)
{
return
ResultBody
.
success
(
xzService
.
querySingleTrade
(
outerTradeNo
));
}
@ApiOperation
(
value
=
"查询单笔交易回单"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@GetMapping
(
"querySingleReceipt"
)
public
ResultBody
querySingleReceipt
(
@RequestParam
String
frontLogNo
)
{
return
xzService
.
querySingleReceipt
(
frontLogNo
);
}
@ApiOperation
(
value
=
"签署结果回调"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"xzAuthNotify"
)
public
String
xzAuthNotify
(
@RequestBody
JSONObject
notify
)
{
return
xzService
.
xzAuthNotify
(
notify
);
}
@ApiOperation
(
value
=
"回调通知(单笔)"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"xzWithdrawNotify"
)
public
String
xzWithdrawNotify
(
@RequestBody
JSONObject
notify
)
{
return
xzService
.
xzWithdrawNotify
(
notify
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/dao/UserServiceDao.java
浏览文件 @
cb5118ae
...
...
@@ -165,4 +165,7 @@ public interface UserServiceDao {
* @return
*/
List
<
UserAccountDO
>
getUserAccountByPhoneNum
(
String
phoneNum
);
UserAccountDO
getUserAccountInfoByOpenId
(
String
openid
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/dao/fdd/UserFddAuthDao.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
dao
.
fdd
;
import
com.mmc.iuav.user.entity.fdd.FddVerifyInfoDO
;
import
com.mmc.iuav.user.entity.fdd.UserFddDO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:46
*/
@Mapper
public
interface
UserFddAuthDao
{
UserFddDO
checkRegisterFdd
(
String
unionId
,
Integer
flag
);
void
insertAppUserFdd
(
UserFddDO
userFddDO
);
FddVerifyInfoDO
getVerifyUrl
(
String
customerId
);
void
insertVerifyInfo
(
FddVerifyInfoDO
verifyInfoDO1
);
void
updateCompanyCertStatus
(
String
customerId
,
String
status
);
UserFddDO
getAppUserFddInfo
(
String
unionId
);
// void insertAppUserFdd(UserFddDO appUserFddDO1);
//
// AppEVerifyInfoDO getCompanyVerifyUrl(String customerId);
//
// void insertAppEVerifyInfo(AppEVerifyInfoDO appEVerifyInfoDO1);
//
// void updateCompanyCertStatus(String customerId, String status);
//
//
// List<UserFddDO> feignGetAppUserFddInfo(List<String> unionIds);
//
// UserFddDO getAppUserFddInfoByCustomerId(String customerId);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/dao/wallet/PayWalletDao.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
dao
.
wallet
;
import
com.mmc.iuav.user.entity.XzWithdrawalApplyDO
;
import
com.mmc.iuav.user.entity.wallet.PayLogDO
;
import
com.mmc.iuav.user.entity.wallet.PayWalletDO
;
import
com.mmc.iuav.user.entity.wallet.WithdrawalLogDO
;
import
com.mmc.iuav.user.model.qo.wallet.WalletFlowQO
;
import
com.mmc.iuav.user.model.qo.wallet.WithdrawalApplyQO
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* @Author LW
...
...
@@ -13,4 +21,30 @@ public interface PayWalletDao {
PayWalletDO
getPayWalletByUser
(
Integer
userAccountId
);
void
insertPayWalletInfo
(
PayWalletDO
wallet
);
void
insertPayLogDO
(
PayLogDO
payWalletDO
);
int
updatePayWallet
(
PayWalletDO
updatePayWallet
);
List
<
PayLogDO
>
getPayLog
(
WalletFlowQO
param
);
int
countPayLog
(
WalletFlowQO
param
);
PayLogDO
getPayLogById
(
Integer
id
);
void
insertWithdrawalLog
(
WithdrawalLogDO
withdrawalLogDO
);
List
<
XzWithdrawalApplyDO
>
getWithdrawalListByUserAccountId
(
WalletFlowQO
param
);
XzWithdrawalApplyDO
getWithdrawalApplyByIdOrOuterTradeNo
(
@Param
(
value
=
"id"
)
Integer
id
,
@Param
(
value
=
"outerTradeNo"
)
String
outerTradeNo
);
List
<
WithdrawalLogDO
>
listPayWithdrawalLog
(
Integer
id
);
int
countPayWithdrawalLog
(
WalletFlowQO
param
);
int
countWithdrawalApply
(
WithdrawalApplyQO
param
);
List
<
XzWithdrawalApplyDO
>
listPageWithdrawalApply
(
WithdrawalApplyQO
param
);
int
updateWithdrawalApply
(
XzWithdrawalApplyDO
apply
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/dao/xzsz/WithdrawalDao.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
dao
.
xzsz
;
import
com.mmc.iuav.user.entity.XzWithdrawalApplyDO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @author: zj
* @Date: 2023/8/23 16:10
*/
@Mapper
public
interface
WithdrawalDao
{
void
insertWithdrawalApply
(
XzWithdrawalApplyDO
xzWithdrawalApplyDO
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/dao/xzsz/XzDao.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
dao
.
xzsz
;
import
com.mmc.iuav.user.entity.XzAuthDO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @author: zj
* @Date: 2023/8/21 16:24
*/
@Mapper
public
interface
XzDao
{
int
addAuth
(
XzAuthDO
authDO
);
XzAuthDO
getXzAuthByUserAccountId
(
Integer
userAccountId
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/UserAccountDO.java
浏览文件 @
cb5118ae
...
...
@@ -44,6 +44,8 @@ public class UserAccountDO implements Serializable {
private
Integer
cityCode
;
private
Integer
districtCode
;
private
Integer
xzAuthStatus
;
private
Integer
companyAuthStatus
;
private
String
companyName
;
private
Integer
leader
;
...
...
@@ -111,6 +113,7 @@ public class UserAccountDO implements Serializable {
.
userRcdVO
(
this
.
userRcdDO
==
null
?
null
:
this
.
userRcdDO
.
buildUserRcdVO
())
.
leader
(
this
.
leader
)
.
realNameAuthStatus
(
this
.
realNameAuthStatus
)
.
xzAuthStatus
(
this
.
xzAuthStatus
)
.
auditStatus
(
this
.
auditStatus
)
.
totalPoints
(
this
.
totalPoints
)
.
build
();
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/XzAuthDO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
entity
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author: zj
* @Date: 2023/8/21 15:50
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
XzAuthDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
48590767645438311L
;
private
Integer
id
;
private
Integer
userAccountId
;
private
String
name
;
private
String
idCardNo
;
private
String
mobile
;
private
String
bankAccount
;
private
String
subsidiary_name
;
private
String
document_id
;
private
String
customParams
;
private
String
contract_url
;
private
Integer
deleted
;
private
Date
create_time
;
private
Integer
xzAuthStatus
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/XzWithdrawalApplyDO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
entity
;
import
com.mmc.iuav.user.entity.wallet.UserBillingDetailVO
;
import
com.mmc.iuav.user.enums.SettleTypeEnum
;
import
com.mmc.iuav.user.enums.XzEnums
;
import
com.mmc.iuav.user.model.dto.wallet.WithdrawalApplyDTO
;
import
com.mmc.iuav.user.model.vo.XzWithdrawalVO
;
import
com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO
;
import
com.mmc.iuav.user.util.PrivacyUtil
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* @author: zj
* @Date: 2023/8/23 16:17
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
XzWithdrawalApplyDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
7891653696372539753L
;
private
Integer
id
;
private
Integer
userAccountId
;
private
Integer
applyStatus
;
private
String
bankName
;
private
String
bankRemo
;
private
String
empNum
;
private
String
empName
;
private
String
empPhone
;
private
String
licenseId
;
private
String
licenseType
;
private
String
month
;
private
String
notifyUrl
;
private
String
outerTradeNo
;
private
String
payAccount
;
private
Double
payAmount
;
private
String
positionName
;
private
String
remarks
;
private
String
settleType
;
private
String
taxFundId
;
private
String
wechatAppId
;
private
String
tradeStatus
;
private
String
tradeTime
;
private
String
frontLogNo
;
private
String
tradeFailCode
;
private
String
tradeResult
;
private
String
submitStatus
;
private
String
errorCode
;
private
Date
payTime
;
private
String
errorMessage
;
private
BigDecimal
chargeAmount
;
private
Date
createTime
;
private
String
remark
;
private
Integer
approveUser
;
private
Date
approveTime
;
public
XzWithdrawalApplyDO
(
XzWithdrawalVO
xzWithdrawalVO
)
{
this
.
userAccountId
=
xzWithdrawalVO
.
getUserAccountId
();
this
.
notifyUrl
=
xzWithdrawalVO
.
getNotifyUrl
();
this
.
taxFundId
=
xzWithdrawalVO
.
getTaxFundId
();
this
.
month
=
xzWithdrawalVO
.
getMonth
();
this
.
outerTradeNo
=
xzWithdrawalVO
.
getOuterTradeNo
();
this
.
empName
=
xzWithdrawalVO
.
getEmpName
();
this
.
empPhone
=
xzWithdrawalVO
.
getEmpPhone
();
this
.
empNum
=
xzWithdrawalVO
.
getEmpNum
();
this
.
licenseId
=
xzWithdrawalVO
.
getLicenseId
();
this
.
licenseType
=
xzWithdrawalVO
.
getLicenseType
();
this
.
settleType
=
xzWithdrawalVO
.
getSettleType
();
this
.
payAmount
=
xzWithdrawalVO
.
getPayAmount
();
this
.
payAccount
=
xzWithdrawalVO
.
getSettleType
().
equals
(
SettleTypeEnum
.
BANK
.
getCode
())
?
xzWithdrawalVO
.
getPayAccount
()
:
xzWithdrawalVO
.
getWechatAppId
();
this
.
bankName
=
xzWithdrawalVO
.
getBankName
();
this
.
positionName
=
xzWithdrawalVO
.
getPositionName
();
this
.
remarks
=
xzWithdrawalVO
.
getRemarks
();
this
.
bankRemo
=
xzWithdrawalVO
.
getBankRemo
();
}
public
XzWithdrawalApplyDO
(
ApplyWithdrawalVO
applyWithdrawalVO
)
{
this
.
userAccountId
=
applyWithdrawalVO
.
getUserAccountId
();
this
.
bankName
=
applyWithdrawalVO
.
getBankName
();
this
.
settleType
=
applyWithdrawalVO
.
getSettleType
();
this
.
payAccount
=
applyWithdrawalVO
.
getPayAccount
();
this
.
positionName
=
applyWithdrawalVO
.
getPositionName
();
this
.
payAmount
=
applyWithdrawalVO
.
getPayAmount
().
doubleValue
();
}
public
UserBillingDetailVO
buildUserBillingDetailVO
()
{
payAccount
=
PrivacyUtil
.
encryptBankAcct
(
payAccount
);
String
name
=
"提现"
;
if
(
this
.
tradeStatus
.
equals
(
XzEnums
.
apply
.
getCode
()))
{
name
=
XzEnums
.
apply
.
getName
();
}
else
if
(
this
.
tradeStatus
.
equals
(
XzEnums
.
await
.
getCode
()))
{
name
=
XzEnums
.
await
.
getName
();
}
else
if
(
this
.
tradeStatus
.
equals
(
XzEnums
.
handle
.
getCode
()))
{
name
=
XzEnums
.
handle
.
getName
();
}
else
if
(
this
.
tradeStatus
.
equals
(
XzEnums
.
failure
.
getCode
()))
{
name
=
XzEnums
.
failure
.
getName
();
}
else
if
(
this
.
tradeStatus
.
equals
(
XzEnums
.
success
.
getCode
()))
{
name
=
XzEnums
.
success
.
getName
();
}
else
if
(
this
.
applyStatus
==
2
)
{
name
=
"提现审批未通过"
;
}
BigDecimal
salaryAmtPaid
;
if
(
this
.
tradeStatus
.
equals
(
XzEnums
.
failure
.
getCode
())
||
this
.
applyStatus
==
2
)
{
salaryAmtPaid
=
new
BigDecimal
(
payAmount
);
}
else
{
salaryAmtPaid
=
new
BigDecimal
(
payAmount
).
negate
();
}
return
UserBillingDetailVO
.
builder
().
userAccountId
(
userAccountId
)
.
payNo
(
outerTradeNo
).
payTime
(
payTime
).
account
(
payAccount
).
name
(
name
).
id
(
id
)
.
salaryAmtPaid
(
salaryAmtPaid
).
tradeResult
(
tradeResult
).
build
();
}
public
WithdrawalApplyDTO
buildWithdrawalApplyDTO
()
{
return
WithdrawalApplyDTO
.
builder
().
id
(
id
).
userAccountId
(
userAccountId
).
applyAmt
(
new
BigDecimal
(
payAmount
))
.
applyStatus
(
applyStatus
).
empName
(
empName
).
bankName
(
bankName
).
payAccount
(
payAccount
)
.
remark
(
remark
).
outerTradeNo
(
outerTradeNo
).
tradeStatus
(
tradeStatus
).
phoneNum
(
empPhone
).
settleType
(
settleType
)
.
tradeResult
(
tradeResult
).
createTime
(
createTime
).
build
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/fdd/FddVerifyInfoDO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
entity
.
fdd
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author:zhenjie Date:2022/7/22
* time:11:33
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
FddVerifyInfoDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
7766546708723743143L
;
private
Integer
id
;
private
Integer
userFddId
;
private
String
customerId
;
private
String
transactionNo
;
private
String
url
;
private
Integer
deleted
;
private
Date
createTime
;
private
Date
updateTime
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/fdd/UserFddDO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
entity
.
fdd
;
import
com.mmc.iuav.user.model.fdd.dto.UserFddDTO
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:51
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
UserFddDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
6432171445803296265L
;
private
Integer
id
;
private
String
unionId
;
private
String
customerId
;
private
Integer
personVerifyStatus
;
private
Integer
entVerifyStatus
;
private
Integer
accountType
;
private
Date
createTime
;
private
Date
updateTime
;
public
UserFddDTO
buildUserFddDTO
()
{
return
UserFddDTO
.
builder
().
id
(
this
.
id
).
unionId
(
this
.
unionId
).
customerId
(
this
.
customerId
).
personVerifyStatus
(
this
.
personVerifyStatus
)
.
entVerifyStatus
(
this
.
entVerifyStatus
).
accountType
(
this
.
accountType
).
createTime
(
this
.
createTime
).
updateTime
(
this
.
updateTime
).
build
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/wallet/PayLogDO.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
entity
.
wallet
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
...
...
@@ -9,6 +14,9 @@ import java.util.Date;
* @author makejava
* @since 2023-08-18 16:18:01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
PayLogDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
752682324297846133L
;
...
...
@@ -26,17 +34,18 @@ public class PayLogDO implements Serializable {
*/
private
String
payNo
;
/**
* 0手动变更(大于0充值or小于0扣除) 100订单扣除 150订单冻结 200订单完成 250提现扣除
* 支付方式 100(订单发布) 200(无人接单取消订单)300(有人接单取消订单)400(飞手抢单)500(客服判定飞手无责取消订单)
* 600(飞手有责取消订单)700(正常结算)800(修改订单金额状态)900(飞手未确认修改金额状态)1000(飞手确认修改金额状态)1100(充值) 1200(提现)
*/
private
Integer
payMethod
;
/**
* 云享金变动金额(正数充值,负数扣除)
*/
private
Double
cashAmtPaid
;
private
BigDecimal
cashAmtPaid
;
/**
* 佣金变动金额(正数入账,负数扣除)
*/
private
Double
salaryAmtPaid
;
private
BigDecimal
salaryAmtPaid
;
/**
* 支付时间
*/
...
...
@@ -54,102 +63,12 @@ public class PayLogDO implements Serializable {
private
Date
updateTime
;
private
String
name
;
public
Integer
getId
()
{
return
id
;
}
public
void
setId
(
Integer
id
)
{
this
.
id
=
id
;
}
public
Integer
getUserAccountId
()
{
return
userAccountId
;
}
public
void
setUserAccountId
(
Integer
userAccountId
)
{
this
.
userAccountId
=
userAccountId
;
}
public
Integer
getOrderNo
()
{
return
orderNo
;
}
public
void
setOrderNo
(
Integer
orderNo
)
{
this
.
orderNo
=
orderNo
;
}
public
String
getPayNo
()
{
return
payNo
;
}
public
void
setPayNo
(
String
payNo
)
{
this
.
payNo
=
payNo
;
}
public
Integer
getPayMethod
()
{
return
payMethod
;
}
public
void
setPayMethod
(
Integer
payMethod
)
{
this
.
payMethod
=
payMethod
;
}
public
Double
getCashAmtPaid
()
{
return
cashAmtPaid
;
}
public
void
setCashAmtPaid
(
Double
cashAmtPaid
)
{
this
.
cashAmtPaid
=
cashAmtPaid
;
}
public
Double
getSalaryAmtPaid
()
{
return
salaryAmtPaid
;
}
public
void
setSalaryAmtPaid
(
Double
salaryAmtPaid
)
{
this
.
salaryAmtPaid
=
salaryAmtPaid
;
}
public
Date
getPayTime
()
{
return
payTime
;
}
public
void
setPayTime
(
Date
payTime
)
{
this
.
payTime
=
payTime
;
}
public
String
getRemark
()
{
return
remark
;
}
public
void
setRemark
(
String
remark
)
{
this
.
remark
=
remark
;
}
public
Integer
getOperateUser
()
{
return
operateUser
;
}
public
void
setOperateUser
(
Integer
operateUser
)
{
this
.
operateUser
=
operateUser
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
public
Date
getUpdateTime
()
{
return
updateTime
;
public
UserBillingDetailVO
buildUserBillingDetailVO
()
{
return
UserBillingDetailVO
.
builder
().
userAccountId
(
userAccountId
).
payNo
(
payNo
)
.
payTime
(
payTime
).
payMethod
(
payMethod
).
cashAmtPaid
(
cashAmtPaid
)
.
salaryAmtPaid
(
salaryAmtPaid
).
name
(
name
).
id
(
id
).
build
();
}
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/wallet/PayWalletDO.java
浏览文件 @
cb5118ae
...
...
@@ -53,6 +53,13 @@ public class PayWalletDO implements Serializable {
*/
private
BigDecimal
salaryFreeze
;
private
BigDecimal
wxCashFreeze
;
/**
* 提现冻结
*/
private
BigDecimal
wdlFreeze
;
/**
* 提现总额
*/
...
...
@@ -65,9 +72,8 @@ public class PayWalletDO implements Serializable {
public
PayWalletDTO
buildPayWalletDTO
()
{
return
PayWalletDTO
.
builder
().
id
(
this
.
id
).
userAccountId
(
this
.
userAccountId
)
.
cashAmt
(
this
.
cashAmt
).
cashFreeze
(
this
.
cashFreeze
)
.
cashPaid
(
this
.
cashPaid
).
salaryAmt
(
this
.
salaryAmt
)
.
salaryFreeze
(
this
.
salaryFreeze
).
salaryPaid
(
this
.
salaryPaid
)
.
rebateWdl
(
this
.
salaryWdl
).
build
();
.
salaryAmt
(
this
.
salaryAmt
).
salaryFreeze
(
this
.
salaryFreeze
.
add
(
this
.
wdlFreeze
))
.
rebateWdl
(
this
.
salaryWdl
).
wdlFreeze
(
this
.
wdlFreeze
).
build
();
}
public
void
defaultValue
()
{
...
...
@@ -78,6 +84,7 @@ public class PayWalletDO implements Serializable {
this
.
salaryPaid
=
BigDecimal
.
ZERO
;
this
.
salaryFreeze
=
BigDecimal
.
ZERO
;
this
.
salaryWdl
=
BigDecimal
.
ZERO
;
this
.
wxCashFreeze
=
BigDecimal
.
ZERO
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/wallet/UserBillingDetailVO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
entity
.
wallet
;
import
com.mmc.iuav.user.enums.RebateMethod
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
/**
* @Author LW
* @date 2023/8/24 14:37
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
UserBillingDetailVO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
113701726830167312L
;
@ApiModelProperty
(
value
=
"id"
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"用户id"
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"流水编号"
)
private
String
payNo
;
@ApiModelProperty
(
value
=
"操作方式"
)
private
Integer
payMethod
;
@ApiModelProperty
(
value
=
"云享金变动金额(正数充值,负数扣除)"
)
private
BigDecimal
cashAmtPaid
;
@ApiModelProperty
(
value
=
"佣金变动金额(正数入账,负数扣除)"
)
private
BigDecimal
salaryAmtPaid
;
@ApiModelProperty
(
value
=
"操作时间"
)
private
Date
payTime
;
@ApiModelProperty
(
value
=
"操作名称"
)
private
String
name
;
@ApiModelProperty
(
value
=
"交易说明"
)
private
String
tradeResult
;
@ApiModelProperty
(
value
=
"到账账户"
)
private
String
account
;
@ApiModelProperty
(
value
=
"处理进度"
)
private
List
<
Schedule
>
schedules
;
public
void
buildSchedules
(
List
<
WithdrawalLogDO
>
list
)
{
this
.
schedules
=
new
ArrayList
<
Schedule
>();
for
(
WithdrawalLogDO
d
:
list
)
{
if
(
RebateMethod
.
PENDING
.
getCode
().
equals
(
d
.
getPayMethod
().
toString
()))
{
Schedule
sd
=
new
Schedule
();
sd
.
setTitle
(
RebateMethod
.
PENDING
.
getStatus
());
sd
.
setAcTime
(
d
.
getPayTime
());
sd
.
setActive
(
1
);
this
.
schedules
.
add
(
sd
);
}
else
if
(
RebateMethod
.
SUCCESS
.
getCode
().
equals
(
d
.
getPayMethod
().
toString
()))
{
Schedule
sd
=
new
Schedule
();
sd
.
setTitle
(
RebateMethod
.
SUCCESS
.
getStatus
());
sd
.
setAcTime
(
d
.
getPayTime
());
sd
.
setActive
(
1
);
this
.
schedules
.
add
(
sd
);
}
else
if
(
RebateMethod
.
FAIL
.
getCode
().
equals
(
d
.
getPayMethod
().
toString
()))
{
Schedule
sd
=
new
Schedule
();
sd
.
setTitle
(
RebateMethod
.
FAIL
.
getStatus
());
sd
.
setAcTime
(
d
.
getPayTime
());
sd
.
setActive
(
1
);
this
.
schedules
.
add
(
sd
);
}
}
if
(
this
.
schedules
.
size
()
==
1
)
{
Schedule
sd
=
new
Schedule
();
sd
.
setTitle
(
RebateMethod
.
SUCCESS
.
getStatus
());
sd
.
setActive
(
0
);
this
.
schedules
.
add
(
sd
);
}
}
public
static
class
Schedule
{
private
String
title
;
private
Date
acTime
;
private
Integer
active
;
public
String
getTitle
()
{
return
title
;
}
public
void
setTitle
(
String
title
)
{
this
.
title
=
title
;
}
public
Date
getAcTime
()
{
return
acTime
;
}
public
void
setAcTime
(
Date
acTime
)
{
this
.
acTime
=
acTime
;
}
public
Integer
getActive
()
{
return
active
;
}
public
void
setActive
(
Integer
active
)
{
this
.
active
=
active
;
}
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/entity/wallet/WithdrawalLogDO.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
entity
.
wallet
;
import
com.mmc.iuav.user.enums.WithdrawalMethod
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* (WithdrawalLogDO)实体类
*
* @author makejava
* @since 2023-08-25 16:57:13
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
WithdrawalLogDO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
757884073681912750L
;
private
Integer
id
;
/**
* 用户id
*/
private
Integer
userAccountId
;
/**
* 支付流水号(T202109031615XXXX)XXXX随机数
*/
private
String
payNo
;
/**
* 150:提现冻结 200:提现成功 250:提现失败
*/
private
Integer
payMethod
;
/**
* 流水时间
*/
private
Date
payTime
;
/**
* 提现申请id
*/
private
Integer
xzWithdrawalApplyId
;
private
String
typeName
;
/**
* 提现冻结
*/
private
BigDecimal
salaryFreeze
;
private
BigDecimal
salaryPaid
;
private
Date
createTime
;
private
Date
updateTime
;
public
UserBillingDetailVO
buildUserBillingDetailVO
()
{
if
(
payMethod
.
equals
(
WithdrawalMethod
.
TXDJ
.
getCode
()))
{
this
.
typeName
=
WithdrawalMethod
.
TXDJ
.
getName
();
}
if
(
payMethod
.
equals
(
WithdrawalMethod
.
TXCG
.
getCode
()))
{
this
.
typeName
=
WithdrawalMethod
.
TXCG
.
getName
();
}
if
(
payMethod
.
equals
(
WithdrawalMethod
.
TXSB
.
getCode
()))
{
this
.
typeName
=
WithdrawalMethod
.
TXSB
.
getName
();
}
return
UserBillingDetailVO
.
builder
().
id
(
id
).
userAccountId
(
userAccountId
)
.
payMethod
(
payMethod
).
payTime
(
payTime
).
salaryAmtPaid
(
salaryFreeze
==
null
?
salaryPaid
:
salaryFreeze
)
.
payNo
(
payNo
).
name
(
typeName
).
build
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/enums/PayMethodEnums.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
enums
;
/**
* @Author LW
* @date 2023/8/19 18:53
* 概要:
*/
public
enum
PayMethodEnums
{
PUBLISH_ORDER
(
100
,
"订单发布"
),
CANCEL_ORDER_TAKING
(
200
,
"未接单时取消订单"
),
RECEIVED_ORDER_CANCEL
(
300
,
"已接单取消订单"
),
FLYING_ORDER_TAKING
(
400
,
"飞手抢单"
),
CUSTOMER_SERVICE_CANCEL_ORDER
(
500
,
"客服判定飞手无责取消订单"
),
FLYER_CANCEL_ORDER
(
600
,
"飞手有责取消订单"
),
NORMAL_SETTLEMENT
(
700
,
"正常结算"
),
MODIFY_THE_ORDER
(
800
,
"修改订单金额状态(大于)"
),
FLYING_HAND_NOT_CONFIRMED_GT
(
900
,
"飞手未确认修改金额大于原订单状态"
),
FLYING_HAND_CONFIRM_LT
(
1000
,
"飞手确认修改金额小于原订单状态"
),
USER_TOP_UP
(
1100
,
"充值"
);
PayMethodEnums
(
Integer
code
,
String
method
)
{
this
.
code
=
code
;
this
.
method
=
method
;
}
private
Integer
code
;
private
String
method
;
public
Integer
getCode
()
{
return
this
.
code
;
}
public
String
getMethod
()
{
return
this
.
method
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/enums/RebateMethod.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
enums
;
/**
* @author 作者 lw
* @version 创建时间:2023.8.26 下午5:29:24
* @explain 类说明
*/
public
enum
RebateMethod
{
PENDING
(
"150"
,
"提现申请"
),
SUCCESS
(
"200"
,
"提现到账"
),
FAIL
(
"250"
,
"提现失败"
);
RebateMethod
(
String
code
,
String
status
)
{
this
.
code
=
code
;
this
.
status
=
status
;
}
private
String
code
;
private
String
status
;
public
String
getCode
()
{
return
code
;
}
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/enums/SettleTypeEnum.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
enums
;
/**
* @author: zj
* @Date: 2023/8/23 16:50
*/
public
enum
SettleTypeEnum
{
ALIPAY
(
"alipay"
,
"支付宝"
),
WECHAT
(
"wechatpay"
,
"微信"
),
BANK
(
"bankcard"
,
"银行卡"
);
SettleTypeEnum
(
String
code
,
String
status
)
{
this
.
code
=
code
;
this
.
status
=
status
;
}
private
String
code
;
private
String
status
;
public
String
getCode
()
{
return
code
;
}
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/enums/WithdrawalApplyStatus.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
enums
;
/**
* @author 作者 geDuo
* @version 创建时间:2021年10月29日 下午2:43:14
* @explain 类说明
*/
public
enum
WithdrawalApplyStatus
{
TXSQ
(
0
,
"提现申请中"
),
TXCG
(
1
,
"提现成功"
),
TXSB
(
2
,
"提现失败"
);
private
Integer
code
;
private
String
name
;
WithdrawalApplyStatus
(
Integer
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
Integer
getCode
()
{
return
this
.
code
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getName
()
{
return
this
.
name
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/enums/WithdrawalMethod.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
enums
;
/**
* @author 作者 LW
* @version 创建时间:2023.8.26 10:56
* @explain 类说明
*/
public
enum
WithdrawalMethod
{
TXDJ
(
150
,
"提现冻结"
),
TXCG
(
200
,
"提现成功"
),
TXSB
(
250
,
"提现失败"
);
private
Integer
code
;
private
String
name
;
WithdrawalMethod
(
Integer
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
Integer
getCode
()
{
return
this
.
code
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getName
()
{
return
this
.
name
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/enums/XzEnums.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
enums
;
/**
* @author 作者 LW
* @version 创建时间:2023.8.26 10:56
* @explain 类说明
*/
public
enum
XzEnums
{
submit_result
(
"submitResult"
,
"上报结果通知"
),
trade_result
(
"tradeResult"
,
"交易结果通知"
),
await
(
"await"
,
"待发放"
),
handle
(
"handle"
,
"交易中"
),
success
(
"success"
,
"提现成功"
),
failure
(
"failure"
,
"提现失败"
),
is_success
(
"isSuccess"
,
"交易是否成功"
),
T
(
"T"
,
"回调code"
),
F
(
"F"
,
"回调code"
),
apply
(
"apply"
,
"提现申请"
),
cancel
(
"cancel"
,
"撤销"
),
pay
(
"pay"
,
"支付"
),
refund
(
"refund"
,
"退款"
);
private
String
code
;
private
String
name
;
XzEnums
(
String
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
public
String
getCode
()
{
return
this
.
code
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getName
()
{
return
this
.
name
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/mq/FanoutExchangeConfig.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
mq
;
import
com.mmc.iuav.user.mq.constant.RabbitmqConstant
;
import
org.springframework.amqp.core.Binding
;
import
org.springframework.amqp.core.BindingBuilder
;
import
org.springframework.amqp.core.FanoutExchange
;
...
...
@@ -14,7 +15,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public
class
FanoutExchangeConfig
{
@Bean
public
FanoutExchange
fanoutExchange
(){
public
FanoutExchange
fanoutExchange
()
{
return
new
FanoutExchange
(
RabbitmqConstant
.
USER_INFO_UPDATE_FANOUT_EXCHANGE
);
}
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/mq/RabbitmqConstant.java
→
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/mq/
constant/
RabbitmqConstant.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
mq
;
package
com
.
mmc
.
iuav
.
user
.
mq
.
constant
;
/**
* @author: zj
...
...
@@ -8,4 +8,20 @@ public class RabbitmqConstant {
public
final
static
String
USER_INFO_UPDATE_FANOUT_EXCHANGE
=
"USER_INFO_UPDATE_FANOUT_EXCHANGE"
;
public
final
static
String
USER_INFO_UPDATE_FANOUT_FORUM_QUEUE
=
"USER_INFO_UPDATE_FANOUT_FORUM_QUEUE"
;
/**
* 用户充值订单交换机
*/
public
final
static
String
USER_TOP_UP_DIRECT_EXCHANGE
=
"USER_TOP_UP_DIRECT_EXCHANGE"
;
/**
* 充值订单队列、routing_key
*/
public
final
static
String
USER_TOP_UP_DIRECT_QUEUE
=
"USER_TOP_UP_DIRECT_QUEUE"
;
public
final
static
String
USER_TOP_UP_ROUTING_KEY
=
"USER_TOP_UP_ROUTING_KEY"
;
/**
* 充值成功队列、routing_key
*/
public
final
static
String
USER_TOP_UP_SUCCESS_QUEUE
=
"USER_TOP_UP_SUCCESS_QUEUE"
;
public
final
static
String
USER_TOP_UP_SUCCESS_ROUTING_KEY
=
"USER_TOP_UP_SUCCESS_ROUTING_KEY"
;
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/mq/impl/MqProducerImpl.java
浏览文件 @
cb5118ae
...
...
@@ -3,7 +3,7 @@ package com.mmc.iuav.user.mq.impl;
import
com.alibaba.fastjson2.JSONObject
;
import
com.mmc.iuav.user.model.vo.UserAccountVO
;
import
com.mmc.iuav.user.mq.MqProducer
;
import
com.mmc.iuav.user.mq.RabbitmqConstant
;
import
com.mmc.iuav.user.mq.
constant.
RabbitmqConstant
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/mq/listener/OrderMqConsumer.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
mq
.
listener
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.mmc.iuav.user.model.vo.wallet.TopUpOrderVO
;
import
com.mmc.iuav.user.mq.constant.RabbitmqConstant
;
import
com.mmc.iuav.user.service.wallet.PayWalletService
;
import
com.rabbitmq.client.Channel
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.messaging.handler.annotation.Payload
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
/**
* @Author LW
* @date 2023/6/29 10:35 概要:
*/
@Slf4j
@Component
public
class
OrderMqConsumer
{
@Resource
PayWalletService
payWalletService
;
@RabbitListener
(
queues
=
RabbitmqConstant
.
USER_TOP_UP_SUCCESS_QUEUE
)
public
void
subscribeDirectQueue
(
@Payload
String
topUpOrder
,
Channel
channel
,
Message
message
)
{
TopUpOrderVO
topUpOrderVO
=
JSONObject
.
parseObject
(
topUpOrder
,
TopUpOrderVO
.
class
);
log
.
info
(
"<==========用户充值成功消费开始:订单信息是---->{}==========>"
,
topUpOrderVO
);
payWalletService
.
feignTopUpCash
(
topUpOrderVO
);
log
.
info
(
"<==========用户充值成功消费结束==========>"
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/WxService.java
浏览文件 @
cb5118ae
...
...
@@ -14,6 +14,7 @@ import javax.servlet.http.HttpServletRequest;
public
interface
WxService
{
/**
* 小程序登录调用接口
*
* @param wxLoginVO
* @return
*/
...
...
@@ -21,6 +22,7 @@ public interface WxService {
/**
* pc扫码登录
*
* @param wxLoginVO
* @return
*/
...
...
@@ -28,36 +30,49 @@ public interface WxService {
/**
* 获取AccessToken
*
* @return
*/
String
getAccessToken
();
/**
* 获取稳定AccessToken
*
* @return
*/
String
getStableAccessToken
()
throws
Exception
;
/**
* 获取公众号AccessToken
*
* @return
*/
String
getSubAccessToken
();
/**
* 获取公众号稳定版accessToken
*
* @return
*/
String
getSubStableAccessToken
();
/**
* 监控微信公众号的事件变化通知
*
* @param request
*/
String
receiveSubAccountEvents
(
HttpServletRequest
request
);
/**
* 公众号推送模板消息-不需要用户同意
*
* @return
*/
ResultBody
sendSubTemplateMsg
(
WxMsgVO
ws
);
/**
* 获取不限制的小程序码
*
* @param path
* @param scene
*/
...
...
@@ -65,12 +80,14 @@ public interface WxService {
/**
* 小程序推送订阅号消息-需用户同意订阅
*
* @param appletMsgVO
*/
ResultBody
sendAppletMsg
(
AppletMsgVO
appletMsgVO
);
/**
* 生成小程序链接
*
* @param path
* @param query
* @return
...
...
@@ -85,4 +102,10 @@ public interface WxService {
* @return
*/
String
getUserPhoneNumber
(
Integer
id
,
String
code
);
ResultBody
rid
(
String
rid
)
throws
Exception
;
ResultBody
moveSubUserToTest
();
ResultBody
moveSubUserUnionIdToTest
();
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/fdd/FddService.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
fdd
;
/**
* author:zhenjie
* Date:2022/7/16
* time:15:30
*/
public
interface
FddService
{
String
register
(
String
uid
,
String
accountType
);
String
getApplyCert
(
String
customerId
,
String
transactionNo
);
// ResultBody getFileByUuid(String uuid, String docType);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/fdd/UserFddAuthService.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
fdd
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.dto.LoginSuccessDTO
;
import
com.mmc.iuav.user.model.fdd.dto.UserFddDTO
;
import
java.util.Map
;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:46
*/
public
interface
UserFddAuthService
{
String
register
(
String
uid
,
String
accountType
);
ResultBody
getPersonVerifyUrl
(
Integer
userAccountId
);
ResultBody
getCompanyVerifyUrl
(
Integer
port
,
LoginSuccessDTO
loginSuccessDTO
);
ResultBody
notifyECertRes
(
Map
<
String
,
String
>
map
);
ResultBody
findCompanyCertInfo
(
Integer
port
,
Integer
flag
,
LoginSuccessDTO
loginSuccessDTO
);
String
replaceUnableString
(
String
uid
);
ResultBody
<
UserFddDTO
>
getAppUserFddInfo
(
Integer
port
,
LoginSuccessDTO
loginSuccessDTO
);
ResultBody
getFileByUuid
(
String
uuid
,
String
docType
);
// List<UserFddDTO> feignGetAppUserFddInfo(List<String> unionId);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/fdd/impl/FddServiceImpl.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
fdd
.
impl
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.fadada.sdk.base.client.FddBaseClient
;
import
com.fadada.sdk.base.model.req.RegisterAccountParams
;
import
com.fadada.sdk.verify.client.FddVerifyClient
;
import
com.fadada.sdk.verify.model.req.ApplyCertParams
;
import
com.mmc.iuav.user.constant.fdd.FddConnectConstant
;
import
com.mmc.iuav.user.constant.fdd.FddConstant
;
import
com.mmc.iuav.user.dao.UserServiceDao
;
import
com.mmc.iuav.user.service.fdd.FddService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
/**
* author:zhenjie
* Date:2022/7/16
* time:15:30
*/
@Service
@Slf4j
public
class
FddServiceImpl
implements
FddService
{
@Resource
UserServiceDao
userServiceDao
;
@Override
public
String
register
(
String
uid
,
String
accountType
)
{
FddBaseClient
baseClient
=
new
FddBaseClient
(
FddConnectConstant
.
APP_ID
,
FddConnectConstant
.
APP_KEY
,
FddConnectConstant
.
VERSION
,
FddConnectConstant
.
HOST
);
RegisterAccountParams
params
=
new
RegisterAccountParams
();
//账号类型1个人 2企业
params
.
setAccountType
(
accountType
);
//替换uid中包含的-或者_
String
openId
=
uid
.
replaceAll
(
"[-|_]"
,
""
);
//平台方自定义唯一标识
params
.
setOpenId
(
openId
);
String
result
=
baseClient
.
invokeRegisterAccount
(
params
);
log
.
info
(
result
);
if
(!
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
CODE
).
equals
(
FddConstant
.
SUCCESS
))
{
return
null
;
}
return
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
DATA
);
}
// @Override
// public ResultBody findPersonCertInfo(String verifiedSerialNo) {
// FddVerifyClient client = new FddVerifyClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
// FindPersonCertParams params = new FindPersonCertParams();
// params.setVerifiedSerialNo(verifiedSerialNo); //此处填获取个人实名认证地址返回的交易号
// String result = client.invokeFindPersonCert(params);
// return ResultBody.success(result);
// }
//
// @Override
// public ResultBody getCompanyVerifyUrl(Integer userAccountId) {
// String customerId = this.checkRegisterFdd(userAccountId);
// if(customerId == null){
// return ResultBody.error(ResultEnum.REQUEST_PARAM_ILLEGAL_ERROR);
// }
// //查询原来有没有请求
// FddEVerifyInfoDO fddEVerifyInfo = fddVerifyDao.getFddEVerifyInfo(userAccountId);
// if(fddEVerifyInfo == null){
// CompanyVerifyResp companyVerifyResp = this.reqCompanyVerifyUrl(customerId);
// if(companyVerifyResp == null){
// return ResultBody.error(ResultEnum.REQUEST_PARAM_ILLEGAL_ERROR);
// }
// //保存实名认证链接和交易号
// FddEVerifyInfoDO fddEVerifyInfoDO = new FddEVerifyInfoDO();
// fddEVerifyInfoDO.setUserAccountId(userAccountId);
// fddEVerifyInfoDO.setCustomerId(customerId);
// fddEVerifyInfoDO.setTransactionNo(companyVerifyResp.getTransactionNo());
// fddEVerifyInfoDO.setUrl(companyVerifyResp.getUrl());
// fddVerifyDao.addFddEVerifyInfo(fddEVerifyInfoDO);
// return ResultBody.success(companyVerifyResp.getUrl());
// }
// return ResultBody.success(fddEVerifyInfo.getUrl());
// }
//
// private CompanyVerifyResp reqCompanyVerifyUrl(String customerId){
// FddVerifyClient client = new FddVerifyClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
// CompanyVerifyUrlParams params = new CompanyVerifyUrlParams();
// params.setCustomerId(customerId);
// params.setPageModify("1");//1允许 2不允许 默认为1
// //设置回调通知
// params.setReturnUrl(FddConnectConstant.MMC_URL + FddConstant.RETURN_E_CERT_RES);
// params.setNotifyUrl(FddConnectConstant.MMC_URL + FddConstant.NOTIFY_E_CERT_RES);
// String result = client.invokeCompanyVerifyUrl(params);
// if(!JSONObject.parseObject(result).getString(FddConstant.CODE).equals(FddConstant.SUCCESS)){
// return null;
// }
// CompanyVerifyResp data = JSON.parseObject(JSONObject.parseObject(result).getString(FddConstant.DATA), CompanyVerifyResp.class);
// return data;
// }
@Override
public
String
getApplyCert
(
String
customerId
,
String
transactionNo
)
{
FddVerifyClient
client
=
new
FddVerifyClient
(
FddConnectConstant
.
APP_ID
,
FddConnectConstant
.
APP_KEY
,
FddConnectConstant
.
VERSION
,
FddConnectConstant
.
HOST
);
ApplyCertParams
params
=
new
ApplyCertParams
();
//客户编号
params
.
setCustomerId
(
customerId
);
// 填写获取实名认证地址返回的交易号transactionNo
params
.
setVerifiedSerialNo
(
transactionNo
);
String
result
=
client
.
invokeApplyCert
(
params
);
if
(!
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
CODE
).
equals
(
FddConstant
.
SUCCESS
))
{
return
null
;
}
return
result
;
}
// @Override
// public ResultBody findCompanyCertInfo(Integer userAccountId) {
// UserFddDO userFddDO = fddVerifyDao.getUserFddByUserAccountId(userAccountId);
// if(userFddDO == null){
// return ResultBody.error(ResultEnum.NOT_FOUND);
// }
// FddEVerifyInfoDO fddEVerifyInfo = fddVerifyDao.getFddEVerifyInfo(userAccountId);
// if( fddEVerifyInfo == null ){
// return ResultBody.error(ResultEnum.NOT_FOUND);
// }
//
// FddVerifyClient client = new FddVerifyClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
// FindCompanyCertParams params = new FindCompanyCertParams();
// params.setVerifiedSerialNo(fddEVerifyInfo.getTransactionNo());//此处填获取企业实名认证地址返回的交易号
// String result = client.invokeFindCompanyCert(params);
// if(!JSONObject.parseObject(result).getString(FddConstant.CODE).equals(FddConstant.SUCCESS)){
// return ResultBody.error(ResultEnum.NOT_FOUND);
// }
// return ResultBody.success(JSONObject.parseObject(result).getString(FddConstant.DATA));
// }
//
// @Override
// public ResultBody notifyECertRes(String appId, String serialNo, String customerId, String status, String statusDesc, String certStatus, String authenticationType, String timestamp, String sign) {
// if (!appId.equals(FddConnectConstant.APP_ID)){
// return ResultBody.error(ResultEnum.NOT_FOUND);
// }
// //修改状态认证
// return userServletClient.notifyECertRes(appId, serialNo, customerId, status, statusDesc, certStatus, authenticationType, timestamp, sign);
// }
//
// @Override
// public ResultBody returnECertRes(String personName, String transactionNo, String authenticationType, String status, String sign) {
// //修改状态认证
// return userServletClient.returnECertRes(personName, transactionNo, authenticationType, status, sign);
// }
//
// @Override
// public ResultBody newNotifyECertRes(Map<String, String> map) {
//
// String appId = map.get("appId");
//// String name="%E9%83%AD%E5%AE%B6%E8%BE%89";
// String serialNo = map.get("serialNo");
// String customerId = map.get("customerId");
// String status = map.get("status");
// String statusDesc = map.get("statusDesc");
// String certStatus = map.get("certStatus");
// String authenticationType = map.get("authenticationType");
// String timestamp = map.get("timestamp");
// String sign = map.get("sign");
// String sha1 = FddEncryptTool.sha1(FddConnectConstant.APP_KEY +authenticationType +certStatus+customerId+ serialNo+status+ statusDesc);
// try {
// String md5 = FddEncryptTool.md5Digest(timestamp);
// String outSha1 = FddEncryptTool.sha1(FddConnectConstant.APP_ID+md5 + sha1);
// String base64 = new String(FddEncryptTool.Base64Encode(outSha1.getBytes())).trim();
// if(!base64.equals(sign)){
// return ResultBody.error(ResultEnum.NOT_FOUND);
// }
// if (!appId.equals(FddConnectConstant.APP_ID)){
// return ResultBody.error(ResultEnum.NOT_FOUND);
// }
// }catch (Exception e){
// return ResultBody.error(ResultEnum.NOT_FOUND);
// }
// FddEVerifyInfoDO fddEVerifyInfo = fddVerifyDao.getFddEVerifyInfoByTransactionNo(serialNo);
// if(fddEVerifyInfo == null){
// return ResultBody.error(ResultEnum.NOT_FOUND);
// }
// //修改认证状态
// fddVerifyDao.updateCompanyCertStatus(customerId, status);
// //通过需要申请证书
// if(status.equals("4")){
// this.getApplyCert(fddEVerifyInfo.getCustomerId(), fddEVerifyInfo.getTransactionNo());
// }
// return ResultBody.success();
// }
//
// @Override
// public ResultBody getUserFddInfo(Integer id) {
// UserFddDO userFddDO = fddVerifyDao.getUserFddByUserAccountId(id);
// if(userFddDO == null){
// return ResultBody.error(ResultEnum.NO_REAL_NAME);
// }
// return ResultBody.success(userFddDO.buildUserFddDTO());
// }
//
// @Override
// public List<UserFddDTO> feignBatchUserFddPage(List<Integer> list) {
// if( list.size() == 0 ){
// return null;
// }
// List<UserFddDO> userFddDOList = fddVerifyDao.listUserFddPage(list);
// List<UserFddDTO> collect = userFddDOList.stream().map(d -> {
// return d.buildUserFddDTO();
// }).collect(Collectors.toList());
// return collect;
// }
//
// @Override
// public ResultBody getFileByUuid(String uuid, String docType) {
// FddVerifyClient client = new FddVerifyClient(FddConnectConstant.APP_ID, FddConnectConstant.APP_KEY, FddConnectConstant.VERSION, FddConnectConstant.HOST);
// FileForUUIDParams params = new FileForUUIDParams();
// params.setUuid(uuid);//此处传个人实名认证接口查询中返回的认证图片id,或查询企业认证信息中返回 的企业认证申请表id
// params.setDocType(docType);//0:图片(默认图片)1:pdf (仅支持企业申请表模板)
// String result = client.invokeFileForUUID(params);
// //防止被转移,把字符串转base64
// String base64 = new String(FddEncryptTool.Base64Encode(result.getBytes())).trim();
// return ResultBody.success(base64);
// }
//
// /**
// * 查询是否注册法大大
// */
// private String checkRegisterFdd(Integer userAccountId){
// UserAccountDTO userAccountDTO = userServletClient.feignGetUserSimpleInfo(userAccountId);
// UserFddDO userFddDO = fddVerifyDao.getUserFddByUserAccountId(userAccountId);
// String customerId = null;
// if(userFddDO == null){
// //账号类型1个人 2企业,合伙人默认全部是企业
// Integer accountType = 2;
// customerId = this.register(userAccountDTO.getUid(), accountType+"");
// if(customerId == null){
// return null;
// }
// UserFddDO userFddDO1 = new UserFddDO();
// userFddDO1.setUserAccountId(userAccountId);
// userFddDO1.setCustomerId(customerId);
// userFddDO1.setAccountType(accountType);
// userFddDO1.setPersonVerifyStatus(0);
// userFddDO1.setEntVerifyStatus(0);
// fddVerifyDao.addUserFdd(userFddDO1);
// }else {
// customerId = userFddDO.getCustomerId();
// }
// return customerId;
// }
}
\ No newline at end of file
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/fdd/impl/UserFddAuthServiceImpl.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
fdd
.
impl
;
import
com.alibaba.fastjson2.JSON
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.fadada.sdk.utils.crypt.FddEncryptTool
;
import
com.fadada.sdk.verify.client.FddVerifyClient
;
import
com.fadada.sdk.verify.model.req.*
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.response.ResultEnum
;
import
com.mmc.iuav.user.constant.fdd.FddConnectConstant
;
import
com.mmc.iuav.user.constant.fdd.FddConstant
;
import
com.mmc.iuav.user.dao.UserServiceDao
;
import
com.mmc.iuav.user.dao.fdd.UserFddAuthDao
;
import
com.mmc.iuav.user.entity.UserAccountDO
;
import
com.mmc.iuav.user.entity.fdd.FddVerifyInfoDO
;
import
com.mmc.iuav.user.entity.fdd.UserFddDO
;
import
com.mmc.iuav.user.model.dto.LoginSuccessDTO
;
import
com.mmc.iuav.user.model.fdd.resp.CompanyVerifyResp
;
import
com.mmc.iuav.user.model.fdd.resp.PersonVerifyResp
;
import
com.mmc.iuav.user.service.fdd.FddService
;
import
com.mmc.iuav.user.service.fdd.UserFddAuthService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.Map
;
/**
* author:zhenjie
* Date:2022/9/1
* time:15:46
*/
@Service
public
class
UserFddAuthServiceImpl
implements
UserFddAuthService
{
@Autowired
private
FddService
fddService
;
@Resource
private
UserServiceDao
userServiceDao
;
@Autowired
private
UserFddAuthDao
userFddAuthDao
;
@Override
public
String
register
(
String
uid
,
String
accountType
)
{
return
fddService
.
register
(
uid
,
accountType
);
}
@Override
public
ResultBody
getPersonVerifyUrl
(
Integer
userAccountId
)
{
UserAccountDO
userInfo
=
userServiceDao
.
getUserAccountById
(
userAccountId
);
String
unionId
=
this
.
replaceUnableString
(
userInfo
.
getUnionId
());
//验证是否注册个人
String
customerId
=
this
.
checkRegisterFdd
(
unionId
,
1
);
if
(
customerId
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
REQUEST_PARAM_ILLEGAL_ERROR
);
}
UserFddDO
userFddDO
=
userFddAuthDao
.
checkRegisterFdd
(
unionId
,
1
);
if
(
userFddDO
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
NOT_FOUND
);
}
//查看原来是否有申请
FddVerifyInfoDO
verifyInfoDO
=
userFddAuthDao
.
getVerifyUrl
(
userFddDO
.
getCustomerId
());
if
(
verifyInfoDO
==
null
)
{
PersonVerifyResp
personVerifyResp
=
this
.
getPersonVerifyUrl
(
customerId
);
if
(
personVerifyResp
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
REQUEST_PARAM_ILLEGAL_ERROR
);
}
FddVerifyInfoDO
verifyInfoDO1
=
new
FddVerifyInfoDO
();
verifyInfoDO1
.
setUserFddId
(
userFddDO
.
getId
());
verifyInfoDO1
.
setCustomerId
(
customerId
);
verifyInfoDO1
.
setTransactionNo
(
personVerifyResp
.
getTransactionNo
());
verifyInfoDO1
.
setUrl
(
personVerifyResp
.
getUrl
());
userFddAuthDao
.
insertVerifyInfo
(
verifyInfoDO1
);
return
ResultBody
.
success
(
personVerifyResp
.
getUrl
());
}
return
ResultBody
.
success
(
verifyInfoDO
.
getUrl
());
}
public
PersonVerifyResp
getPersonVerifyUrl
(
String
customerId
)
{
FddVerifyClient
client
=
new
FddVerifyClient
(
FddConnectConstant
.
APP_ID
,
FddConnectConstant
.
APP_KEY
,
FddConnectConstant
.
VERSION
,
FddConnectConstant
.
HOST
);
PersonVerifyUrlParams
params
=
new
PersonVerifyUrlParams
();
params
.
setCustomerId
(
customerId
);
//客户编号
params
.
setVerifiedWay
(
"0"
);
//实名认证套餐类型
params
.
setPageModify
(
"1"
);
//是否允许用户页面修改 1允许 2不允许
// 以下是非必填参数
params
.
setNotifyUrl
(
FddConnectConstant
.
MMC_URL
+
FddConstant
.
NOTIFY_E_CERT_RES
);
//异步回调地址
// params.setReturnUrl(""); //同步通知url
// params.setCustomerName(""); //姓名
// params.setCustomerIdentType(""); //证件类型
// params.setCustomerIdentNo(""); //证件号码
// params.setMobile(""); //手机号码
// params.setIdentFrontPath(""); //证件正面照下载地址
// params.setIdentBackPath(""); //证件反面照下载地址
// params.setResultType(""); //刷脸是否显示结果页面
// params.setCertFlag(""); //是否认证成功后自动申请实名证书
// params.setCertType(""); //证件类型
// params.setBankCardNo(""); //个人银行卡
// params.setOption(""); //不传默认add
// params.setIdPhotoOptional(""); //是否需要上传身份照片
// params.setIsMinProgram(""); //是否跳转法大大公证处小程序认证
// params.setLang("zh"); //zh:中文;en:英文
// params.setIsAllowOverseasBankCardAuth(""); //海外用户是否支持银行卡认证
// params.setIdentFrontImg(new File("")); //证件正面照图片文件
// params.setIdentBackImg(new File("")); //证件反面照图片文件
String
result
=
client
.
invokePersonVerifyUrl
(
params
);
if
(!
com
.
alibaba
.
fastjson
.
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
CODE
).
equals
(
FddConstant
.
SUCCESS
))
{
return
null
;
}
PersonVerifyResp
data
=
com
.
alibaba
.
fastjson
.
JSON
.
parseObject
(
com
.
alibaba
.
fastjson
.
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
DATA
),
PersonVerifyResp
.
class
);
return
data
;
}
@Override
public
ResultBody
getCompanyVerifyUrl
(
Integer
port
,
LoginSuccessDTO
loginSuccessDTO
)
{
String
uId
;
if
(
port
.
equals
(
0
))
{
// 获取小程序用户信息拿到unionId
UserAccountDO
userInfo
=
userServiceDao
.
getUserAccountById
(
loginSuccessDTO
.
getUserAccountId
());
uId
=
this
.
replaceUnableString
(
userInfo
.
getUnionId
());
}
else
{
uId
=
loginSuccessDTO
.
getUserAccountId
().
toString
();
}
//验证是否注册企业
String
customerId
=
this
.
checkRegisterFdd
(
uId
,
2
);
if
(
customerId
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
REQUEST_PARAM_ILLEGAL_ERROR
);
}
UserFddDO
userFddDO
=
userFddAuthDao
.
checkRegisterFdd
(
uId
,
2
);
if
(
userFddDO
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
NOT_FOUND
);
}
//查看原来是否有申请
FddVerifyInfoDO
verifyInfoDO
=
userFddAuthDao
.
getVerifyUrl
(
userFddDO
.
getCustomerId
());
if
(
verifyInfoDO
==
null
)
{
CompanyVerifyResp
companyVerifyResp
=
this
.
reqCompanyVerifyUrl
(
customerId
);
if
(
companyVerifyResp
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
REQUEST_PARAM_ILLEGAL_ERROR
);
}
FddVerifyInfoDO
verifyInfoDO1
=
new
FddVerifyInfoDO
();
verifyInfoDO1
.
setUserFddId
(
userFddDO
.
getId
());
verifyInfoDO1
.
setCustomerId
(
customerId
);
verifyInfoDO1
.
setTransactionNo
(
companyVerifyResp
.
getTransactionNo
());
verifyInfoDO1
.
setUrl
(
companyVerifyResp
.
getUrl
());
userFddAuthDao
.
insertVerifyInfo
(
verifyInfoDO1
);
return
ResultBody
.
success
(
companyVerifyResp
.
getUrl
());
}
return
ResultBody
.
success
(
verifyInfoDO
.
getUrl
());
}
@Override
public
ResultBody
notifyECertRes
(
Map
<
String
,
String
>
map
)
{
String
appId
=
map
.
get
(
"appId"
);
String
serialNo
=
map
.
get
(
"serialNo"
);
String
customerId
=
map
.
get
(
"customerId"
);
String
status
=
map
.
get
(
"status"
);
String
statusDesc
=
map
.
get
(
"statusDesc"
);
String
certStatus
=
map
.
get
(
"certStatus"
);
String
authenticationType
=
map
.
get
(
"authenticationType"
);
String
timestamp
=
map
.
get
(
"timestamp"
);
String
sign
=
map
.
get
(
"sign"
);
String
sha1
=
FddEncryptTool
.
sha1
(
FddConnectConstant
.
APP_KEY
+
authenticationType
+
certStatus
+
customerId
+
serialNo
+
status
+
statusDesc
);
try
{
String
md5
=
FddEncryptTool
.
md5Digest
(
timestamp
);
String
outSha1
=
FddEncryptTool
.
sha1
(
FddConnectConstant
.
APP_ID
+
md5
+
sha1
);
String
base64
=
new
String
(
FddEncryptTool
.
Base64Encode
(
outSha1
.
getBytes
())).
trim
();
if
(!
base64
.
equals
(
sign
))
{
return
ResultBody
.
error
(
ResultEnum
.
NOT_FOUND
);
}
if
(!
appId
.
equals
(
FddConnectConstant
.
APP_ID
))
{
return
ResultBody
.
error
(
ResultEnum
.
NOT_FOUND
);
}
}
catch
(
Exception
e
)
{
return
ResultBody
.
error
(
ResultEnum
.
NOT_FOUND
);
}
FddVerifyInfoDO
verifyInfoDO
=
userFddAuthDao
.
getVerifyUrl
(
customerId
);
if
(
verifyInfoDO
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
NOT_FOUND
);
}
//修改认证状态
userFddAuthDao
.
updateCompanyCertStatus
(
customerId
,
status
);
//通过需要申请证书
if
((
authenticationType
.
equals
(
"2"
)
&&
status
.
equals
(
"4"
))
||
(
authenticationType
.
equals
(
"1"
)
&&
status
.
equals
(
"2"
)))
{
fddService
.
getApplyCert
(
verifyInfoDO
.
getCustomerId
(),
verifyInfoDO
.
getTransactionNo
());
}
return
ResultBody
.
success
();
}
@Override
public
ResultBody
findCompanyCertInfo
(
Integer
port
,
Integer
flag
,
LoginSuccessDTO
loginSuccessDTO
)
{
String
uId
;
String
result
;
if
(
port
.
equals
(
0
))
{
UserAccountDO
userInfo
=
userServiceDao
.
getUserAccountById
(
loginSuccessDTO
.
getUserAccountId
());
uId
=
this
.
replaceUnableString
(
userInfo
.
getUnionId
());
}
else
{
uId
=
loginSuccessDTO
.
getUserAccountId
().
toString
();
}
UserFddDO
appUserFddDO
=
userFddAuthDao
.
checkRegisterFdd
(
uId
,
flag
);
if
(
appUserFddDO
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
REQUEST_PARAM_ILLEGAL_ERROR
);
}
FddVerifyInfoDO
fddVerifyInfoDO
=
userFddAuthDao
.
getVerifyUrl
(
appUserFddDO
.
getCustomerId
());
if
(
fddVerifyInfoDO
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
REQUEST_PARAM_ILLEGAL_ERROR
);
}
FddVerifyClient
client
=
new
FddVerifyClient
(
FddConnectConstant
.
APP_ID
,
FddConnectConstant
.
APP_KEY
,
FddConnectConstant
.
VERSION
,
FddConnectConstant
.
HOST
);
if
(
flag
.
equals
(
2
))
{
FindCompanyCertParams
params
=
new
FindCompanyCertParams
();
//此处填获取企业实名认证地址返回的交易号
params
.
setVerifiedSerialNo
(
fddVerifyInfoDO
.
getTransactionNo
());
result
=
client
.
invokeFindCompanyCert
(
params
);
}
else
{
FindPersonCertParams
params
=
new
FindPersonCertParams
();
//此处填获取个人实名认证地址返回的交易号
params
.
setVerifiedSerialNo
(
fddVerifyInfoDO
.
getTransactionNo
());
result
=
client
.
invokeFindPersonCert
(
params
);
}
if
(!
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
CODE
).
equals
(
FddConstant
.
SUCCESS
))
{
return
ResultBody
.
error
(
ResultEnum
.
NOT_FOUND
);
}
return
ResultBody
.
success
(
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
DATA
));
}
@Override
public
ResultBody
getAppUserFddInfo
(
Integer
port
,
LoginSuccessDTO
loginSuccessDTO
)
{
String
uId
;
if
(
port
==
0
)
{
UserAccountDO
userInfo
=
userServiceDao
.
getUserAccountById
(
loginSuccessDTO
.
getUserAccountId
());
uId
=
this
.
replaceUnableString
(
userInfo
.
getUnionId
());
}
else
{
uId
=
loginSuccessDTO
.
getUserAccountId
().
toString
();
}
UserFddDO
appUserFddDO
=
userFddAuthDao
.
getAppUserFddInfo
(
uId
);
return
ResultBody
.
success
(
appUserFddDO
==
null
?
null
:
appUserFddDO
.
buildUserFddDTO
());
}
private
CompanyVerifyResp
reqCompanyVerifyUrl
(
String
customerId
)
{
FddVerifyClient
client
=
new
FddVerifyClient
(
FddConnectConstant
.
APP_ID
,
FddConnectConstant
.
APP_KEY
,
FddConnectConstant
.
VERSION
,
FddConnectConstant
.
HOST
);
CompanyVerifyUrlParams
params
=
new
CompanyVerifyUrlParams
();
params
.
setCustomerId
(
customerId
);
params
.
setPageModify
(
"1"
);
//1允许 2不允许 默认为1
//设置回调通知
params
.
setNotifyUrl
(
FddConnectConstant
.
MMC_URL
+
FddConstant
.
NOTIFY_E_CERT_RES
);
params
.
setMVerifiedWay
(
"4"
);
String
result
=
client
.
invokeCompanyVerifyUrl
(
params
);
if
(!
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
CODE
).
equals
(
FddConstant
.
SUCCESS
))
{
return
null
;
}
CompanyVerifyResp
data
=
JSON
.
parseObject
(
JSONObject
.
parseObject
(
result
).
getString
(
FddConstant
.
DATA
),
CompanyVerifyResp
.
class
);
return
data
;
}
private
String
checkRegisterFdd
(
String
unionId
,
Integer
flag
)
{
//查看是否已注册
UserFddDO
userFddDO
=
userFddAuthDao
.
checkRegisterFdd
(
unionId
,
flag
);
String
customerId
;
if
(
userFddDO
==
null
)
{
//账号类型1个人 2企业
customerId
=
this
.
register
(
unionId
,
flag
.
toString
());
if
(
customerId
==
null
)
{
return
null
;
}
UserFddDO
userFdd
=
new
UserFddDO
();
userFdd
.
setUnionId
(
unionId
);
userFdd
.
setCustomerId
(
customerId
);
userFdd
.
setAccountType
(
flag
);
userFdd
.
setEntVerifyStatus
(
0
);
userFdd
.
setPersonVerifyStatus
(
0
);
userFddAuthDao
.
insertAppUserFdd
(
userFdd
);
}
else
{
customerId
=
userFddDO
.
getCustomerId
();
}
return
customerId
;
}
//
@Override
public
String
replaceUnableString
(
String
uid
)
{
String
u
=
uid
.
replaceAll
(
FddConstant
.
UID_REGEX
,
""
);
return
u
;
}
@Override
public
ResultBody
getFileByUuid
(
String
uuid
,
String
docType
)
{
FddVerifyClient
client
=
new
FddVerifyClient
(
FddConnectConstant
.
APP_ID
,
FddConnectConstant
.
APP_KEY
,
FddConnectConstant
.
VERSION
,
FddConnectConstant
.
HOST
);
FileForUUIDParams
params
=
new
FileForUUIDParams
();
//此处传个人实名认证接口查询中返回的认证图片id,或查询企业认证信息中返回 的企业认证申请表id
params
.
setUuid
(
uuid
);
//0:图片(默认图片)1:pdf (仅支持企业申请表模板)
params
.
setDocType
(
docType
);
String
result
=
client
.
invokeFileForUUID
(
params
);
//防止被转移,把字符串转base64
String
base64
=
new
String
(
FddEncryptTool
.
Base64Encode
(
result
.
getBytes
())).
trim
();
return
ResultBody
.
success
(
base64
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/AuthServiceImpl.java
浏览文件 @
cb5118ae
...
...
@@ -18,6 +18,7 @@ import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import
com.mmc.iuav.user.model.qo.LoginUserQO
;
import
com.mmc.iuav.user.model.vo.*
;
import
com.mmc.iuav.user.service.*
;
import
com.mmc.iuav.user.service.wallet.PayWalletService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -25,6 +26,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.concurrent.TimeUnit
;
...
...
@@ -66,8 +68,12 @@ public class AuthServiceImpl implements AuthService {
@Autowired
private
AuthHandler
authHandler
;
@Resource
private
PayWalletService
payWalletService
;
@Transactional
@Override
public
ResultBody
appletLogin
(
WxLoginVO
wxLoginVO
)
{
String
unionId
;
String
openId
;
...
...
@@ -101,6 +107,8 @@ public class AuthServiceImpl implements AuthService {
userAccountDO
.
setSource
(
wxLoginVO
.
getSource
());
userAccountService
.
insertUserAccount
(
userAccountDO
);
userAccountVO
=
userAccountDO
.
buildUserAccountVO
();
// 创建用户钱包
payWalletService
.
initPayWallet
(
userAccountDO
.
getId
());
payClient
.
createWallet
(
userAccountDO
.
getId
());
// 查询之前有没有实名过
RealNameAuthDO
nameAuthByUnionId
=
realNameAuthDao
.
getRealNameAuthBakByUnionId
(
unionId
);
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/BackUserAccountServiceImpl.java
浏览文件 @
cb5118ae
...
...
@@ -162,7 +162,6 @@ public class BackUserAccountServiceImpl implements BackUserAccountService {
if
(
companyInfoVO
!=
null
&&
companyInfoVO
.
getCompanyType
().
equals
(
CompanyTypeEnums
.
FRANCHISEE
.
getType
()))
{
// 加盟企业的账号,需要把对应的成员和后台账号解绑
companyService
.
unbindingAllUsers
(
companyInfoVO
.
getId
());
companyService
.
deleteCompanyInfoById
(
companyInfoVO
.
getId
());
}
String
accountNo
=
"DISABLE_"
+
backUserAccountDO
.
getAccountNo
()
+
RandomStringUtils
.
randomAlphanumeric
(
3
);
backUserAccountDao
.
disableBackUserAccountDO
(
accountId
,
accountNo
);
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/RealNameAuthServiceImpl.java
浏览文件 @
cb5118ae
...
...
@@ -46,6 +46,7 @@ public class RealNameAuthServiceImpl implements RealNameAuthService {
@Override
public
ResultBody
add
(
RealNameAuthVO
realNameAuthVO
)
{
log
.
info
(
"RealNameAuthVO:{}"
,
JSONObject
.
toJSONString
(
realNameAuthVO
));
RealNameAuthDO
realNameAuthDO0
=
realNameAuthDao
.
getRealNameAuthByUId
(
realNameAuthVO
.
getUserAccountId
());
if
(
realNameAuthDO0
!=
null
&&
realNameAuthDO0
.
getCheckStatus
().
equals
(
1
))
{
return
ResultBody
.
error
(
ResultEnum
.
REAL_NAME_PASS_ERROR
);
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/UserAccountServiceImpl.java
浏览文件 @
cb5118ae
...
...
@@ -6,15 +6,11 @@ import com.mmc.iuav.response.ResultBody;
import
com.mmc.iuav.response.ResultEnum
;
import
com.mmc.iuav.user.controller.userpoints.config.NumberOfUserPoints
;
import
com.mmc.iuav.user.controller.userpoints.config.UserPointsEnum
;
import
com.mmc.iuav.user.dao.CooperationDao
;
import
com.mmc.iuav.user.dao.RealNameAuthDao
;
import
com.mmc.iuav.user.dao.UserServiceDao
;
import
com.mmc.iuav.user.dao.*
;
import
com.mmc.iuav.user.dao.userpoints.UserPointsDao
;
import
com.mmc.iuav.user.dao.userpoints.UserPointsDetailsDao
;
import
com.mmc.iuav.user.entity.CooperationTagDO
;
import
com.mmc.iuav.user.entity.RealNameAuthDO
;
import
com.mmc.iuav.user.entity.UserAccountDO
;
import
com.mmc.iuav.user.entity.UserRcdDO
;
import
com.mmc.iuav.user.dao.xzsz.XzDao
;
import
com.mmc.iuav.user.entity.*
;
import
com.mmc.iuav.user.entity.userpoints.UserPointsDO
;
import
com.mmc.iuav.user.entity.userpoints.UserPointsDetails
;
import
com.mmc.iuav.user.model.dto.LoginSuccessDTO
;
...
...
@@ -78,6 +74,12 @@ public class UserAccountServiceImpl implements UserAccountService {
@Autowired
private
RealNameAuthDao
realNameAuthDao
;
@Autowired
private
XzDao
xzDao
;
@Autowired
private
UserSubInfoDao
userSubInfoDao
;
@Override
public
UserAccountVO
getUserAccountInfoByUnionId
(
String
unionId
)
{
...
...
@@ -104,6 +106,7 @@ public class UserAccountServiceImpl implements UserAccountService {
RealNameAuthDTO
realNameAuthDTO
=
nameAuthDTOResultBody
.
getResult
();
if
(
realNameAuthDTO
!=
null
&&
realNameAuthDTO
.
getCheckStatus
().
equals
(
1
))
{
userAccountVO
.
setRealNameAuthStatus
(
1
);
userAccountVO
.
setUserName
(
realNameAuthDTO
.
getUserName
());
}
CompanyAuthVO
companyAuthVO
=
companyAuthService
.
getCompanyAuthByUId
(
userAccountId
);
if
(
companyAuthVO
!=
null
)
{
...
...
@@ -116,6 +119,18 @@ public class UserAccountServiceImpl implements UserAccountService {
List
<
CooperationTagVO
>
cooperationTags
=
cooperationTagDOS
.
stream
().
map
(
CooperationTagDO:
:
buildCooperationTagVO
).
collect
(
Collectors
.
toList
());
userAccountVO
.
setCooperationTagVOS
(
cooperationTags
);
}
XzAuthDO
xzAuthDO
=
xzDao
.
getXzAuthByUserAccountId
(
userAccountId
);
if
(
xzAuthDO
!=
null
)
{
userAccountVO
.
setXzAuthStatus
(
xzAuthDO
.
getXzAuthStatus
());
}
else
{
userAccountVO
.
setXzAuthStatus
(
0
);
}
UserSubInfoDO
userSubInfoDO
=
userSubInfoDao
.
getUserSubInfoByUnionId
(
userAccountDO
.
getUnionId
());
if
(
userSubInfoDO
!=
null
&&
userSubInfoDO
.
getRegStatus
().
equals
(
1
))
{
userAccountVO
.
setSubStatus
(
1
);
}
else
{
userAccountVO
.
setSubStatus
(
0
);
}
return
userAccountVO
;
}
...
...
@@ -358,12 +373,26 @@ public class UserAccountServiceImpl implements UserAccountService {
}
}
@Autowired
private
CompanyDao
companyDao
;
@Override
public
ResultBody
disableAppAccount
(
Integer
userAccountId
)
{
userServiceDao
.
disableUserAccount
(
CodeUtil
.
removeUserAccount
(),
userAccountId
);
UserAccountVO
userAccountVO
=
new
UserAccountVO
();
userAccountVO
.
setId
(
userAccountId
);
userAccountVO
.
setDeleted
(
1
);
// 删除绑定企业信息,
// 该企业只有一人时可以直接删除,或者不是管理员时也可以直接删除,
// 是管理者时并且有多人则不能删除,提醒解绑成员后才能删除
CompanyInfoDO
companyInfoDO
=
companyDao
.
getAppCompanyInfoUId
(
userAccountId
);
if
(
companyInfoDO
!=
null
)
{
int
members
=
companyDao
.
countCompanyMembers
(
companyInfoDO
.
getId
());
if
(
members
>
1
&&
companyInfoDO
.
getLeader
().
equals
(
1
))
{
return
ResultBody
.
error
(
"该用户是单位管理员,暂时不能删除"
);
}
companyDao
.
unbindCompanyMember
(
userAccountId
,
companyInfoDO
.
getId
());
}
mqProducer
.
sentUserInfoChangedMsg
(
userAccountVO
);
return
ResultBody
.
success
();
}
...
...
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/impl/WxServiceImpl.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
impl
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.mmc.iuav.http.HttpHelper
;
import
com.mmc.iuav.http.HttpsRequestUtil
;
...
...
@@ -26,6 +27,7 @@ import java.io.BufferedReader;
import
java.io.InputStreamReader
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
...
...
@@ -134,9 +136,39 @@ public class WxServiceImpl implements WxService {
}
@Override
public
String
getSubStableAccessToken
()
{
//token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取
String
accessToken
=
stringRedisTemplate
.
opsForValue
().
get
(
WxConstant
.
SHARE_FLY_SUB_STABLE_ACCESS_TOKEN
);
if
(
StringUtils
.
isBlank
(
accessToken
))
{
Map
<
String
,
String
>
params
=
new
HashMap
<
String
,
String
>();
params
.
put
(
"grant_type"
,
"client_credential"
);
params
.
put
(
"appid"
,
userSystemConstant
.
getWxSubAppId
());
params
.
put
(
"secret"
,
userSystemConstant
.
getWxSubSecret
());
String
res
=
null
;
try
{
res
=
HttpsRequestUtil
.
httpsRequest
(
"https://api.weixin.qq.com/cgi-bin/stable_token"
,
"POST"
,
null
,
JSONObject
.
toJSONString
(
params
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
JSONObject
tokenResult
=
JSONObject
.
parseObject
(
res
);
if
(
res
.
indexOf
(
"access_token"
)
==
-
1
)
{
log
.
info
(
"获取公众号access_token有误:{}"
,
tokenResult
);
return
null
;
}
accessToken
=
tokenResult
.
getString
(
"access_token"
);
long
expiresIn
=
tokenResult
.
getLong
(
"expires_in"
);
//保存进redis
stringRedisTemplate
.
opsForValue
().
set
(
WxConstant
.
SHARE_FLY_SUB_STABLE_ACCESS_TOKEN
,
accessToken
,
expiresIn
,
TimeUnit
.
SECONDS
);
return
accessToken
;
}
return
accessToken
;
}
@Override
public
String
receiveSubAccountEvents
(
HttpServletRequest
request
)
{
try
{
Map
<
String
,
String
>
map
=
this
.
convertRequestToMap
(
request
);
log
.
info
(
"Received wx events(after convert):{}"
,
JSONObject
.
toJSONString
(
map
));
String
event
=
map
.
get
(
"Event"
);
if
(
WxConstant
.
subscribe
.
equals
(
event
))
{
// 关注事件
...
...
@@ -188,8 +220,8 @@ public class WxServiceImpl implements WxService {
try
{
String
InfoUrl
=
"https://api.weixin.qq.com/cgi-bin/user/info?access_token="
+
accessToken
+
"&openid="
+
openid
+
"&lang=zh_CN"
;
//String jsonStr = HttpsOpenUtil.https(InfoUrl, "GET");// 错误:{"errcode":40013,"errmsg":"invalid appid"}
String
jsonStr
=
HttpsRequestUtil
.
httpsRequest
(
InfoUrl
,
"GET"
,
null
,
null
);
String
jsonStr
=
HttpsRequestUtil
.
httpsGet
(
InfoUrl
,
null
);
log
.
info
(
"updateWXUserInfo:{}"
,
jsonStr
);
JSONObject
obj
=
JSONObject
.
parseObject
(
jsonStr
);
// 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
Integer
subscribe
=
obj
.
getInteger
(
"subscribe"
);
...
...
@@ -215,10 +247,11 @@ public class WxServiceImpl implements WxService {
public
ResultBody
sendSubTemplateMsg
(
WxMsgVO
ws
)
{
String
accessToken
=
null
;
try
{
accessToken
=
this
.
getSubAccessToken
();
accessToken
=
this
.
getSub
Stable
AccessToken
();
String
url
=
"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="
+
accessToken
;
String
param
=
ws
.
build
MsgJson
();
String
param
=
ws
.
build
TemplateMsg
();
String
result
=
HttpHelper
.
httpPost
(
url
,
param
);
log
.
info
(
"模板消息发送结果:{}"
,
result
);
}
catch
(
Exception
e
)
{
log
.
error
(
"accessToken获取失败:{}"
,
e
.
getMessage
());
return
ResultBody
.
error
(
ResultEnum
.
WX_ACCESS_TOKEN_ERROR
.
getResultCode
(),
...
...
@@ -307,4 +340,64 @@ public class WxServiceImpl implements WxService {
}
return
null
;
}
@Override
public
ResultBody
rid
(
String
rid
)
throws
Exception
{
JSONObject
param
=
new
JSONObject
();
param
.
put
(
"rid"
,
rid
);
String
url
=
"https://api.weixin.qq.com/cgi-bin/openapi/rid/get?access_token="
+
this
.
getSubAccessToken
();
String
res
=
HttpHelper
.
httpPost
(
url
,
param
.
toString
());
return
ResultBody
.
success
(
res
);
}
@Override
public
ResultBody
moveSubUserToTest
()
{
String
accessToken
=
this
.
getSubStableAccessToken
();
String
url
=
"https://api.weixin.qq.com/cgi-bin/user/get?access_token="
+
accessToken
;
String
jsonStr
=
HttpsRequestUtil
.
httpsGet
(
url
,
null
);
log
.
info
(
"all users:{}"
,
jsonStr
);
JSONObject
obj
=
JSONObject
.
parseObject
(
jsonStr
);
List
<
String
>
lists
=
JSONArray
.
parseArray
(
obj
.
getJSONObject
(
"data"
).
get
(
"openid"
).
toString
(),
String
.
class
);
int
count
=
0
;
for
(
String
openid
:
lists
)
{
Integer
integer
=
userSubInfoDao
.
countUserSubInfo
(
openid
);
if
(
integer
==
0
)
{
count
++;
UserSubInfoDO
sub
=
new
UserSubInfoDO
();
sub
.
setOpenId
(
openid
);
sub
.
setRegStatus
(
1
);
sub
.
setDeleted
(
0
);
sub
.
setCreateTime
(
new
Date
());
userSubInfoDao
.
insertUserSubInfo
(
sub
);
}
}
log
.
info
(
"User count: {}"
,
count
);
return
ResultBody
.
success
();
}
@Override
public
ResultBody
moveSubUserUnionIdToTest
()
{
String
accessToken
=
this
.
getSubStableAccessToken
();
String
url
=
"https://api.weixin.qq.com/cgi-bin/user/get?access_token="
+
accessToken
+
"&next_openid="
+
"oB6kk6obNektxM62mjj9PJHPtcME"
;
String
jsonStr
=
HttpsRequestUtil
.
httpsGet
(
url
,
null
);
log
.
info
(
"all users:{}"
,
jsonStr
);
JSONObject
obj
=
JSONObject
.
parseObject
(
jsonStr
);
List
<
String
>
lists
=
JSONArray
.
parseArray
(
obj
.
getJSONObject
(
"data"
).
get
(
"openid"
).
toString
(),
String
.
class
);
int
count
=
0
;
for
(
String
openid
:
lists
)
{
UserSubInfoDO
userSubInfo
=
userSubInfoDao
.
getUserSubInfo
(
openid
);
if
(
userSubInfo
!=
null
)
{
String
InfoUrl
=
"https://api.weixin.qq.com/cgi-bin/user/info?access_token="
+
accessToken
+
"&openid="
+
openid
+
"&lang=zh_CN"
;
String
jsonStr1
=
HttpsRequestUtil
.
httpsGet
(
InfoUrl
,
null
);
JSONObject
obj1
=
JSONObject
.
parseObject
(
jsonStr1
);
userSubInfo
.
setUnionId
(
obj1
.
getString
(
"unionid"
));
userSubInfo
.
setRegStatus
(
1
);
userSubInfoDao
.
updateUserSubInfo
(
userSubInfo
);
}
}
log
.
info
(
"User count: {}"
,
count
);
return
ResultBody
.
success
();
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/wallet/PayWalletService.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
wallet
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.qo.wallet.WalletFlowQO
;
import
com.mmc.iuav.user.model.vo.wallet.TopUpOrderVO
;
import
com.mmc.iuav.user.model.vo.wallet.WalletFlowVO
;
/**
* @Author LW
...
...
@@ -11,4 +14,12 @@ public interface PayWalletService {
ResultBody
getPayWalletInfo
(
Integer
userAccountId
);
ResultBody
initPayWallet
(
Integer
userAccountId
);
ResultBody
feignWalletFlow
(
WalletFlowVO
walletFlowVO
);
ResultBody
feignTopUpCash
(
TopUpOrderVO
topUpOrderVO
);
ResultBody
customerBillingDetail
(
Integer
userAccountId
,
WalletFlowQO
walletFlowQO
);
ResultBody
billingDetails
(
Integer
id
,
String
detailType
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/wallet/impl/PayWalletServiceImpl.java
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
wallet
.
impl
;
import
com.mmc.iuav.general.CodeUtil
;
import
com.mmc.iuav.page.PageResult
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.dao.UserServiceDao
;
import
com.mmc.iuav.user.dao.wallet.PayWalletDao
;
import
com.mmc.iuav.user.entity.UserAccountDO
;
import
com.mmc.iuav.user.entity.XzWithdrawalApplyDO
;
import
com.mmc.iuav.user.entity.wallet.PayLogDO
;
import
com.mmc.iuav.user.entity.wallet.PayWalletDO
;
import
com.mmc.iuav.user.entity.wallet.UserBillingDetailVO
;
import
com.mmc.iuav.user.entity.wallet.WithdrawalLogDO
;
import
com.mmc.iuav.user.enums.PayMethodEnums
;
import
com.mmc.iuav.user.model.dto.wallet.PayWalletDTO
;
import
com.mmc.iuav.user.model.qo.wallet.WalletFlowQO
;
import
com.mmc.iuav.user.model.vo.WithdrawalInfoVO
;
import
com.mmc.iuav.user.model.vo.wallet.FlyerWalletFlowVO
;
import
com.mmc.iuav.user.model.vo.wallet.PublisherWalletFlowVO
;
import
com.mmc.iuav.user.model.vo.wallet.TopUpOrderVO
;
import
com.mmc.iuav.user.model.vo.wallet.WalletFlowVO
;
import
com.mmc.iuav.user.service.wallet.PayWalletService
;
import
com.mmc.iuav.user.util.TDateUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @Author LW
...
...
@@ -15,9 +38,12 @@ import javax.annotation.Resource;
* 概要:
*/
@Service
@Slf4j
public
class
PayWalletServiceImpl
implements
PayWalletService
{
@Resource
PayWalletDao
payWalletDao
;
@Resource
UserServiceDao
userServiceDao
;
@Override
public
ResultBody
getPayWalletInfo
(
Integer
userAccountId
)
{
...
...
@@ -38,4 +64,519 @@ public class PayWalletServiceImpl implements PayWalletService {
payWalletDao
.
insertPayWalletInfo
(
wallet
);
return
ResultBody
.
success
();
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ResultBody
feignWalletFlow
(
WalletFlowVO
walletFlowVO
)
{
// 获取发布者的信息
PublisherWalletFlowVO
publisherWalletFlowVO
=
walletFlowVO
.
getPublisherWalletFlowVO
();
// 获取接单者的信息
FlyerWalletFlowVO
flyerWalletFlowVO
=
walletFlowVO
.
getFlyerWalletFlowVO
();
// 发布者的钱包信息
PayWalletDO
publishWallet
=
new
PayWalletDO
();
// 接单者的钱包信息
PayWalletDO
flyerWallet
=
new
PayWalletDO
();
// 获取用户钱包信息
if
(
publisherWalletFlowVO
!=
null
)
{
publishWallet
=
payWalletDao
.
getPayWalletByUser
(
publisherWalletFlowVO
.
getUserAccountId
());
}
if
(
flyerWalletFlowVO
!=
null
)
{
flyerWallet
=
payWalletDao
.
getPayWalletByUser
(
flyerWalletFlowVO
.
getUserAccountId
());
}
// 判断状态进行资金的扣减等于100时 发布订单
if
(
publisherWalletFlowVO
!=
null
&&
publisherWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
PUBLISH_ORDER
.
getCode
()))
{
PayWalletDO
publishUpdatePayWallet
=
new
PayWalletDO
();
publishUpdatePayWallet
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
publishUpdatePayWallet
.
setPid
(
publishWallet
.
getPid
());
publishUpdatePayWallet
.
setCashAmt
(
publishWallet
.
getCashAmt
().
add
(
publisherWalletFlowVO
.
getCashAmount
())
.
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()));
publishUpdatePayWallet
.
setCashFreeze
(
publishWallet
.
getCashFreeze
().
subtract
(
publisherWalletFlowVO
.
getCashAmount
())
.
subtract
(
publisherWalletFlowVO
.
getTopYxjAmount
()).
subtract
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()));
publishUpdatePayWallet
.
setSalaryAmt
(
publishWallet
.
getSalaryAmt
().
add
(
publisherWalletFlowVO
.
getSalaryAmount
())
.
add
(
publisherWalletFlowVO
.
getTopSalaryAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
()));
publishUpdatePayWallet
.
setSalaryFreeze
(
publishWallet
.
getSalaryFreeze
().
subtract
(
publisherWalletFlowVO
.
getSalaryAmount
())
.
subtract
(
publisherWalletFlowVO
.
getTopSalaryAmount
()).
subtract
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
()));
int
i
=
payWalletDao
.
updatePayWallet
(
publishUpdatePayWallet
);
if
(
i
>
0
)
{
PayLogDO
payLogDO
=
buildPayLogDO
(
publisherWalletFlowVO
,
null
);
payLogDO
.
setCashAmtPaid
(
publisherWalletFlowVO
.
getCashAmount
().
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()));
payLogDO
.
setSalaryAmtPaid
(
publisherWalletFlowVO
.
getSalaryAmount
().
add
(
publisherWalletFlowVO
.
getTopSalaryAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
()));
// 插入流水记录表
payWalletDao
.
insertPayLogDO
(
payLogDO
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"发布订单时,用户钱包更新失败,用户id是:{},传入参数是:{}"
,
publisherWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
return
ResultBody
.
error
(
"钱包操作错误"
);
}
}
else
if
(
publisherWalletFlowVO
!=
null
&&
publisherWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
CANCEL_ORDER_TAKING
.
getCode
()))
{
// 等于200时 发布方取消订单,无飞手接单
PayWalletDO
publishUpdatePayWallet
=
new
PayWalletDO
();
publishUpdatePayWallet
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
publishUpdatePayWallet
.
setPid
(
publishWallet
.
getPid
());
publishUpdatePayWallet
.
setCashAmt
(
publishWallet
.
getCashAmt
().
add
(
publisherWalletFlowVO
.
getCashAmount
()));
publishUpdatePayWallet
.
setCashFreeze
(
publishWallet
.
getCashFreeze
().
add
(
publisherWalletFlowVO
.
getTopYxjAmount
())
.
add
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()).
subtract
(
publisherWalletFlowVO
.
getCashAmount
()));
publishUpdatePayWallet
.
setSalaryAmt
(
publishWallet
.
getSalaryAmt
().
add
(
publisherWalletFlowVO
.
getSalaryAmount
()));
publishUpdatePayWallet
.
setSalaryFreeze
(
publishWallet
.
getSalaryFreeze
().
add
(
publisherWalletFlowVO
.
getTopSalaryAmount
())
.
add
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
()).
subtract
(
publisherWalletFlowVO
.
getSalaryAmount
()));
int
i
=
payWalletDao
.
updatePayWallet
(
publishUpdatePayWallet
);
if
((
i
>
0
)
&&
(
publisherWalletFlowVO
.
getCashAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
||
publisherWalletFlowVO
.
getSalaryAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
))
{
PayLogDO
payLogDO
=
buildPayLogDO
(
publisherWalletFlowVO
,
null
);
// 插入流水记录表
payWalletDao
.
insertPayLogDO
(
payLogDO
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"发布方取消订单,无飞手接单时,用户id是:{},传入参数是:{}"
,
publisherWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
return
ResultBody
.
error
(
"钱包操作错误"
);
}
}
else
if
(
publisherWalletFlowVO
!=
null
&&
publisherWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
RECEIVED_ORDER_CANCEL
.
getCode
()))
{
// 等于300时 发布方取消订单,有飞手接单
PayWalletDO
publishUpdatePayWallet
=
new
PayWalletDO
();
publishUpdatePayWallet
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
publishUpdatePayWallet
.
setPid
(
publishWallet
.
getPid
());
publishUpdatePayWallet
.
setCashAmt
(
publishWallet
.
getCashAmt
().
add
(
publisherWalletFlowVO
.
getCashAmount
()));
publishUpdatePayWallet
.
setCashFreeze
(
publishWallet
.
getCashFreeze
().
subtract
(
publisherWalletFlowVO
.
getCashAmount
())
.
add
(
publisherWalletFlowVO
.
getYxjCashPledge
()).
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()));
publishUpdatePayWallet
.
setSalaryAmt
(
publishWallet
.
getSalaryAmt
().
add
(
publisherWalletFlowVO
.
getSalaryAmount
()));
publishUpdatePayWallet
.
setSalaryFreeze
(
publishWallet
.
getSalaryFreeze
().
add
(
publisherWalletFlowVO
.
getSalaryCashPledge
())
.
subtract
(
publisherWalletFlowVO
.
getSalaryAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
().
add
(
publisherWalletFlowVO
.
getTopSalaryAmount
())));
// 更新发布者钱包数据
int
publishUpdateCount
=
payWalletDao
.
updatePayWallet
(
publishUpdatePayWallet
);
if
(
publishUpdateCount
<=
0
)
{
log
.
error
(
"发布方取消订单,有飞手接单时,发单方用户钱包更新失败,更新参数是:{},发单方用户id是:{},传入参数是:{}"
,
publishUpdatePayWallet
,
publisherWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
return
ResultBody
.
error
(
"钱包操作错误"
);
}
if
(
publisherWalletFlowVO
.
getCashAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
||
publisherWalletFlowVO
.
getSalaryAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
// 插入发布者流水记录表
sendBackPublishPayLog
(
publisherWalletFlowVO
,
1
);
}
// 飞手钱包更新信息
PayWalletDO
flyerUpdatePayWallet
=
new
PayWalletDO
();
// 断言此处必定不为空
assert
flyerWalletFlowVO
!=
null
;
flyerUpdatePayWallet
.
setUserAccountId
(
flyerWalletFlowVO
.
getUserAccountId
());
flyerUpdatePayWallet
.
setPid
(
flyerWallet
.
getPid
());
flyerUpdatePayWallet
.
setCashAmt
(
flyerWallet
.
getCashAmt
().
add
(
flyerWalletFlowVO
.
getCashAmount
()));
flyerUpdatePayWallet
.
setCashFreeze
(
flyerWallet
.
getCashFreeze
().
subtract
(
flyerWalletFlowVO
.
getCashAmount
()));
flyerUpdatePayWallet
.
setSalaryAmt
(
flyerWallet
.
getSalaryAmt
().
add
(
flyerWalletFlowVO
.
getSalaryAmount
()).
subtract
(
publisherWalletFlowVO
.
getPercentagePenaltyOfOrder
()));
flyerUpdatePayWallet
.
setSalaryFreeze
(
flyerWallet
.
getSalaryFreeze
().
subtract
(
flyerWalletFlowVO
.
getSalaryAmount
()));
int
flyerUpdateCount
=
payWalletDao
.
updatePayWallet
(
flyerUpdatePayWallet
);
if
(
flyerUpdateCount
>
0
)
{
// 记录订单保证金退回记录
if
(
flyerWalletFlowVO
.
getCashAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
||
flyerWalletFlowVO
.
getSalaryAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
sendBackPledge
(
flyerWalletFlowVO
);
}
// 获得违约金流水记录
paymentOfLiquidatedDamage
(
publisherWalletFlowVO
,
flyerWalletFlowVO
,
0
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"发布方取消订单,有飞手接单时,飞手用户钱包更新失败,飞手用户id是:{},接单方传入参数是:{},发单方违约金是:{}"
,
flyerWalletFlowVO
.
getUserAccountId
(),
flyerWalletFlowVO
,
publisherWalletFlowVO
.
getPercentagePenaltyOfOrder
());
}
}
else
if
(
flyerWalletFlowVO
!=
null
&&
flyerWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
FLYING_ORDER_TAKING
.
getCode
()))
{
// 状态为400时 表示飞手接单
// 飞手钱包更新信息
int
flyerUpdateCount
=
buildFlyerWallet
(
flyerWalletFlowVO
,
flyerWallet
);
if
(
flyerUpdateCount
>
0
)
{
PayLogDO
flyerPayLogDO
=
buildPayLogDO
(
null
,
flyerWalletFlowVO
);
// 插入流水记录表
payWalletDao
.
insertPayLogDO
(
flyerPayLogDO
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"飞手抢单时,飞手用户钱包更新失败,飞手用户id是:{},传入参数是:{}"
,
flyerWalletFlowVO
.
getUserAccountId
(),
flyerWalletFlowVO
);
}
}
else
if
(
flyerWalletFlowVO
!=
null
&&
flyerWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
CUSTOMER_SERVICE_CANCEL_ORDER
.
getCode
()))
{
// 状态为500时 客服判定飞手无责取消订单
// 飞手钱包更新信息
int
flyerUpdateCount
=
buildFlyerWallet
(
flyerWalletFlowVO
,
flyerWallet
);
if
(
flyerUpdateCount
>
0
)
{
PayLogDO
flyerPayLogDO
=
buildPayLogDO
(
null
,
flyerWalletFlowVO
);
// 插入流水记录表
payWalletDao
.
insertPayLogDO
(
flyerPayLogDO
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"客服判定飞手无责取消订单时,飞手用户钱包更新失败,飞手用户id是:{},传入参数是:{}"
,
flyerWalletFlowVO
.
getUserAccountId
(),
flyerWalletFlowVO
);
}
}
else
if
(
flyerWalletFlowVO
!=
null
&&
flyerWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
FLYER_CANCEL_ORDER
.
getCode
()))
{
// 状态为600时 飞手有责取消订单
// 飞手钱包更新信息
PayWalletDO
flyerUpdatePayWallet
=
new
PayWalletDO
();
flyerUpdatePayWallet
.
setUserAccountId
(
flyerWalletFlowVO
.
getUserAccountId
());
flyerUpdatePayWallet
.
setPid
(
flyerWallet
.
getPid
());
flyerUpdatePayWallet
.
setCashFreeze
(
flyerWallet
.
getCashFreeze
().
add
(
flyerWalletFlowVO
.
getYxjCashPledge
()));
flyerUpdatePayWallet
.
setSalaryFreeze
(
flyerWallet
.
getSalaryFreeze
().
add
(
flyerWalletFlowVO
.
getSalaryCashPledge
()));
int
flyerUpdateCount
=
payWalletDao
.
updatePayWallet
(
flyerUpdatePayWallet
);
if
(
flyerUpdateCount
<=
0
)
{
log
.
error
(
"飞手有责取消订单,飞手用户钱包更新失败,飞手用户id是:{},接单方传入参数是:{}"
,
flyerWalletFlowVO
.
getUserAccountId
(),
flyerWalletFlowVO
);
return
ResultBody
.
error
(
"钱包操作错误"
);
}
// 发单者钱包更新信息
PayWalletDO
publishUpdatePayWallet
=
new
PayWalletDO
();
// 断言此处必定不为空
assert
publisherWalletFlowVO
!=
null
;
publishUpdatePayWallet
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
publishUpdatePayWallet
.
setPid
(
publishWallet
.
getPid
());
publishUpdatePayWallet
.
setCashAmt
(
publishWallet
.
getCashAmt
().
add
(
publisherWalletFlowVO
.
getCashAmount
())
.
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()).
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()));
publishUpdatePayWallet
.
setSalaryAmt
(
publishWallet
.
getSalaryAmt
().
add
(
publisherWalletFlowVO
.
getSalaryAmount
())
.
subtract
(
flyerWalletFlowVO
.
getPercentagePenaltyOfOrder
()));
publishUpdatePayWallet
.
setCashFreeze
(
publishWallet
.
getCashFreeze
().
subtract
(
publisherWalletFlowVO
.
getCashAmount
())
.
subtract
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()).
subtract
(
publisherWalletFlowVO
.
getTopYxjAmount
()));
publishUpdatePayWallet
.
setSalaryFreeze
(
publishWallet
.
getSalaryFreeze
().
subtract
(
publisherWalletFlowVO
.
getSalaryAmount
())
.
subtract
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
()).
subtract
(
publisherWalletFlowVO
.
getTopSalaryAmount
()));
int
publishUpdateCount
=
payWalletDao
.
updatePayWallet
(
publishUpdatePayWallet
);
if
(
publishUpdateCount
>
0
)
{
// 记录飞手违约金流水
paymentOfLiquidatedDamage
(
publisherWalletFlowVO
,
flyerWalletFlowVO
,
1
);
if
(
publisherWalletFlowVO
.
getCashAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
||
publisherWalletFlowVO
.
getUrgentYxjAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
||
publisherWalletFlowVO
.
getTopYxjAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
||
publisherWalletFlowVO
.
getSalaryAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
||
publisherWalletFlowVO
.
getUrgentSalaryAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
||
publisherWalletFlowVO
.
getTopSalaryAmount
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
// 记录退回订单金额
sendBackPublishPayLog
(
publisherWalletFlowVO
,
0
);
}
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"飞手有责取消订单,发布者用户钱包更新失败,发布者用户id是:{},发布方传入参数是:{},接单方方违约金是:{}"
,
publisherWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
,
flyerWalletFlowVO
.
getPercentagePenaltyOfOrder
());
}
}
else
if
(
publisherWalletFlowVO
!=
null
&&
publisherWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
NORMAL_SETTLEMENT
.
getCode
()))
{
// 状态为700时 正常订单结算
// 解冻发布方订单的钱包金额
PayWalletDO
publishPayWalletDO
=
new
PayWalletDO
();
publishPayWalletDO
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
publishPayWalletDO
.
setPid
(
publishWallet
.
getPid
());
publishPayWalletDO
.
setCashFreeze
(
publishWallet
.
getCashFreeze
().
add
(
publisherWalletFlowVO
.
getCashAmount
())
.
add
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()).
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()));
publishPayWalletDO
.
setSalaryFreeze
(
publishWallet
.
getSalaryFreeze
().
add
(
publisherWalletFlowVO
.
getSalaryAmount
())
.
add
(
publisherWalletFlowVO
.
getTopSalaryAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
()));
int
publishUpdateCount
=
payWalletDao
.
updatePayWallet
(
publishPayWalletDO
);
if
(
publishUpdateCount
<=
0
)
{
log
.
error
(
"正常结算时,发布者用户钱包更新失败,发布者id是:{},发布者传参是:{}"
,
publisherWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
}
// 增加接单方钱包金额
assert
flyerWalletFlowVO
!=
null
;
int
flyerUpdateCount
=
addFlyerSalary
(
publisherWalletFlowVO
,
flyerWalletFlowVO
,
flyerWallet
);
if
(
flyerUpdateCount
>
0
)
{
// 记录订单保证金退回记录
sendBackPledge
(
flyerWalletFlowVO
);
// 记录订单结算流水记录
PayLogDO
flyerPayLogDO
=
buildFlyerLog
(
publisherWalletFlowVO
,
flyerWalletFlowVO
.
getUserAccountId
());
// 插入接单者流水记录表
payWalletDao
.
insertPayLogDO
(
flyerPayLogDO
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"正常结算时,接单方用户钱包更新失败,接单者id是:{},发布者传参是:{}"
,
flyerWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
}
}
else
if
(
publisherWalletFlowVO
!=
null
&&
publisherWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
MODIFY_THE_ORDER
.
getCode
()))
{
// 状态为800时 发布方修改金额大于原来订单佣金
// 发布方还需补金额
if
(
releaseOrCancelOrderWallet
(
publisherWalletFlowVO
,
publishWallet
))
{
PayLogDO
payLogDO
=
buildPayLogDO
(
publisherWalletFlowVO
,
null
);
// 插入流水记录表
payWalletDao
.
insertPayLogDO
(
payLogDO
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"发布方修改金额大于原来订单佣金时,用户钱包更新失败,用户id是:{},传入参数是:{}"
,
publisherWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
return
ResultBody
.
error
(
"钱包操作错误"
);
}
}
else
if
(
publisherWalletFlowVO
!=
null
&&
publisherWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
FLYING_HAND_NOT_CONFIRMED_GT
.
getCode
()))
{
// 状态为900时 飞手未确认修改金额大于原订单状态时订单结算
// 退回发布方后面补的金额
PayWalletDO
publishUpdatePayWallet
=
new
PayWalletDO
();
publishUpdatePayWallet
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
publishUpdatePayWallet
.
setPid
(
publishWallet
.
getPid
());
publishUpdatePayWallet
.
setSalaryAmt
(
publishWallet
.
getSalaryAmt
().
add
(
publisherWalletFlowVO
.
getRefundSalaryAmount
()));
publishUpdatePayWallet
.
setSalaryFreeze
(
publishWallet
.
getSalaryFreeze
().
subtract
(
publisherWalletFlowVO
.
getRefundSalaryAmount
()));
publishUpdatePayWallet
.
setCashAmt
(
publishWallet
.
getCashAmt
().
add
(
publisherWalletFlowVO
.
getRefundCashAmount
()));
publishUpdatePayWallet
.
setCashFreeze
(
publishWallet
.
getCashFreeze
().
subtract
(
publisherWalletFlowVO
.
getRefundCashAmount
()));
int
publishUpdateCount
=
payWalletDao
.
updatePayWallet
(
publishUpdatePayWallet
);
if
(
publishUpdateCount
<=
0
)
{
log
.
error
(
"飞手未确认修改金额大于原订单状态时,发布者用户钱包更新失败,发布者id是:{},发布者参数是:{}"
,
publisherWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
}
// 记录发单方退回多余金额记录
refund
(
publisherWalletFlowVO
);
// 增加接单方钱包金额
assert
flyerWalletFlowVO
!=
null
;
int
flyerUpdateCount
=
addFlyerSalary
(
publisherWalletFlowVO
,
flyerWalletFlowVO
,
flyerWallet
);
if
(
flyerUpdateCount
>
0
)
{
// 记录订单保证金退回记录
sendBackPledge
(
flyerWalletFlowVO
);
// 记录订单结算流水记录
PayLogDO
flyerPayLogDO
=
buildFlyerLog
(
publisherWalletFlowVO
,
flyerWalletFlowVO
.
getUserAccountId
());
// 插入接单者流水记录表
payWalletDao
.
insertPayLogDO
(
flyerPayLogDO
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"飞手未确认修改金额大于原订单状态时,接单方用户钱包更新失败,接单者id是:{},发布者传参是:{}"
,
flyerWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
}
}
else
if
(
publisherWalletFlowVO
!=
null
&&
publisherWalletFlowVO
.
getModeOfPayment
().
equals
(
PayMethodEnums
.
FLYING_HAND_CONFIRM_LT
.
getCode
()))
{
// 状态为1000时 飞手确认修改金额小于原订单状态
// 退回发布方多余原订单金额,解冻钱包金额
PayWalletDO
publishUpdatePayWallet
=
new
PayWalletDO
();
publishUpdatePayWallet
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
publishUpdatePayWallet
.
setPid
(
publishWallet
.
getPid
());
publishUpdatePayWallet
.
setCashAmt
(
publishWallet
.
getCashAmt
().
add
(
publisherWalletFlowVO
.
getRefundCashAmount
()));
publishUpdatePayWallet
.
setCashFreeze
(
publishWallet
.
getCashFreeze
().
subtract
(
publisherWalletFlowVO
.
getRefundCashAmount
())
.
subtract
(
publisherWalletFlowVO
.
getCashAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()).
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()));
publishUpdatePayWallet
.
setSalaryAmt
(
publishWallet
.
getSalaryAmt
().
add
(
publisherWalletFlowVO
.
getRefundSalaryAmount
()));
publishUpdatePayWallet
.
setSalaryFreeze
(
publishWallet
.
getSalaryFreeze
().
subtract
(
publisherWalletFlowVO
.
getRefundSalaryAmount
())
.
subtract
(
publisherWalletFlowVO
.
getSalaryAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
()).
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()));
int
publishUpdateCount
=
payWalletDao
.
updatePayWallet
(
publishUpdatePayWallet
);
if
(
publishUpdateCount
<=
0
)
{
log
.
error
(
"飞手确认修改金额小于原订单状态,发布者用户钱包更新失败,发布者id是:{},发布者参数是:{}"
,
publisherWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
}
// 记录多余退款记录
refund
(
publisherWalletFlowVO
);
// 增加接单方钱包金额
assert
flyerWalletFlowVO
!=
null
;
int
flyerUpdateCount
=
addFlyerSalary
(
publisherWalletFlowVO
,
flyerWalletFlowVO
,
flyerWallet
);
if
(
flyerUpdateCount
>
0
)
{
// 记录订单保证金退回记录
sendBackPledge
(
flyerWalletFlowVO
);
// 记录订单结算流水记录
PayLogDO
flyerPayLogDO
=
buildFlyerLog
(
publisherWalletFlowVO
,
flyerWalletFlowVO
.
getUserAccountId
());
// 插入接单者流水记录表
payWalletDao
.
insertPayLogDO
(
flyerPayLogDO
);
return
ResultBody
.
success
();
}
else
{
log
.
error
(
"飞手确认修改金额小于原订单状态,接单方用户钱包更新失败,接单者id是:{},发布者传参是:{}"
,
flyerWalletFlowVO
.
getUserAccountId
(),
publisherWalletFlowVO
);
}
}
return
ResultBody
.
error
(
"钱包操作错误"
);
}
/**
* @param publisherWalletFlowVO
* @param flag 0 未违约取消 1 违约取消
*/
private
void
sendBackPublishPayLog
(
PublisherWalletFlowVO
publisherWalletFlowVO
,
Integer
flag
)
{
PayLogDO
payLogDO
=
new
PayLogDO
();
String
payNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
publisherWalletFlowVO
.
getUserAccountId
()
+
CodeUtil
.
getRandomNum
(
4
);
if
(
flag
==
0
)
{
payLogDO
.
setPayMethod
(
200
);
payLogDO
.
setCashAmtPaid
(
publisherWalletFlowVO
.
getCashAmount
().
add
(
publisherWalletFlowVO
.
getTopYxjAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentYxjAmount
()));
payLogDO
.
setSalaryAmtPaid
(
publisherWalletFlowVO
.
getSalaryAmount
().
add
(
publisherWalletFlowVO
.
getTopSalaryAmount
()).
add
(
publisherWalletFlowVO
.
getUrgentSalaryAmount
()));
}
else
{
payLogDO
.
setPayMethod
(
300
);
payLogDO
.
setCashAmtPaid
(
publisherWalletFlowVO
.
getCashAmount
());
payLogDO
.
setSalaryAmtPaid
(
publisherWalletFlowVO
.
getSalaryAmount
());
}
payLogDO
.
setPayNo
(
payNo
);
payLogDO
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
payLogDO
.
setOperateUser
(
publisherWalletFlowVO
.
getUserAccountId
());
// 插入流水记录表
payWalletDao
.
insertPayLogDO
(
payLogDO
);
}
/**
* @param publisherWalletFlowVO 发布者信息
* @param flyerWalletFlowVO 接单者信息
* @param flag 0:发布者违约 1:抢单者违约
*/
private
void
paymentOfLiquidatedDamage
(
PublisherWalletFlowVO
publisherWalletFlowVO
,
FlyerWalletFlowVO
flyerWalletFlowVO
,
Integer
flag
)
{
PayLogDO
flyerPayLogDO
=
new
PayLogDO
();
String
payNo
;
Integer
userAccountId
;
BigDecimal
percentagePenaltyOfOrder
;
if
(
flag
==
0
)
{
// 生成支付流水号(规则"T" + 时间戳 + 用户id + 随机数4位)
payNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
flyerWalletFlowVO
.
getUserAccountId
()
+
CodeUtil
.
getRandomNum
(
4
);
userAccountId
=
flyerWalletFlowVO
.
getUserAccountId
();
percentagePenaltyOfOrder
=
publisherWalletFlowVO
.
getPercentagePenaltyOfOrder
();
flyerPayLogDO
.
setOperateUser
(
userAccountId
);
}
else
{
// 生成支付流水号(规则"T" + 时间戳 + 用户id + 随机数4位)
payNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
publisherWalletFlowVO
.
getUserAccountId
()
+
CodeUtil
.
getRandomNum
(
4
);
userAccountId
=
publisherWalletFlowVO
.
getUserAccountId
();
flyerPayLogDO
.
setOperateUser
(
userAccountId
);
percentagePenaltyOfOrder
=
flyerWalletFlowVO
.
getPercentagePenaltyOfOrder
();
}
flyerPayLogDO
.
setPayMethod
(
1300
);
flyerPayLogDO
.
setPayNo
(
payNo
);
flyerPayLogDO
.
setUserAccountId
(
userAccountId
);
flyerPayLogDO
.
setCashAmtPaid
(
BigDecimal
.
ZERO
);
flyerPayLogDO
.
setSalaryAmtPaid
(
percentagePenaltyOfOrder
.
abs
());
// 插入流水记录表
payWalletDao
.
insertPayLogDO
(
flyerPayLogDO
);
}
private
PayLogDO
buildFlyerLog
(
PublisherWalletFlowVO
publisherWalletFlowVO
,
Integer
userAccountId
)
{
PayLogDO
payLogWalletDO
=
new
PayLogDO
();
// 生成支付流水号(规则"T" + 时间戳 + 用户id + 随机数4位)
String
flyerPayNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
userAccountId
+
CodeUtil
.
getRandomNum
(
4
);
payLogWalletDO
.
setPayMethod
(
publisherWalletFlowVO
.
getModeOfPayment
());
payLogWalletDO
.
setPayNo
(
flyerPayNo
);
payLogWalletDO
.
setUserAccountId
(
userAccountId
);
payLogWalletDO
.
setSalaryAmtPaid
(
publisherWalletFlowVO
.
getFlyerSalaryAmount
());
payLogWalletDO
.
setOperateUser
(
publisherWalletFlowVO
.
getUserAccountId
());
return
payLogWalletDO
;
}
private
void
sendBackPledge
(
FlyerWalletFlowVO
flyerWalletFlowVO
)
{
if
(
flyerWalletFlowVO
.
getCashAmount
().
compareTo
(
new
BigDecimal
(
0
))
>
0
||
flyerWalletFlowVO
.
getSalaryAmount
().
compareTo
(
new
BigDecimal
(
0
))
>
0
)
{
PayLogDO
flyerPledgeSendBack
=
buildPayLogDO
(
null
,
flyerWalletFlowVO
);
flyerPledgeSendBack
.
setPayMethod
(
500
);
// 插入接单者流水记录表
payWalletDao
.
insertPayLogDO
(
flyerPledgeSendBack
);
}
}
private
int
buildFlyerWallet
(
FlyerWalletFlowVO
flyerWalletFlowVO
,
PayWalletDO
flyerWallet
)
{
PayWalletDO
flyerUpdatePayWallet
=
new
PayWalletDO
();
flyerUpdatePayWallet
.
setUserAccountId
(
flyerWalletFlowVO
.
getUserAccountId
());
flyerUpdatePayWallet
.
setPid
(
flyerWallet
.
getPid
());
flyerUpdatePayWallet
.
setCashAmt
(
flyerWallet
.
getCashAmt
().
add
(
flyerWalletFlowVO
.
getCashAmount
()));
flyerUpdatePayWallet
.
setCashFreeze
(
flyerWallet
.
getCashFreeze
().
subtract
(
flyerWalletFlowVO
.
getCashAmount
()));
flyerUpdatePayWallet
.
setSalaryAmt
(
flyerWallet
.
getSalaryAmt
().
add
(
flyerWalletFlowVO
.
getSalaryAmount
()));
flyerUpdatePayWallet
.
setSalaryFreeze
(
flyerWallet
.
getSalaryFreeze
().
subtract
(
flyerWalletFlowVO
.
getSalaryAmount
()));
int
flyerUpdateCount
=
payWalletDao
.
updatePayWallet
(
flyerUpdatePayWallet
);
return
flyerUpdateCount
;
}
private
void
refund
(
PublisherWalletFlowVO
publisherWalletFlowVO
)
{
if
(
publisherWalletFlowVO
.
getRefundCashAmount
().
compareTo
(
BigDecimal
.
ZERO
)
!=
0
||
publisherWalletFlowVO
.
getRefundSalaryAmount
().
compareTo
(
BigDecimal
.
ZERO
)
!=
0
)
{
PayLogDO
publishPayLogDO
=
buildPayLogDO
(
publisherWalletFlowVO
,
null
);
publishPayLogDO
.
setCashAmtPaid
(
publisherWalletFlowVO
.
getRefundCashAmount
());
publishPayLogDO
.
setSalaryAmtPaid
(
publisherWalletFlowVO
.
getRefundSalaryAmount
());
payWalletDao
.
insertPayLogDO
(
publishPayLogDO
);
}
}
private
int
addFlyerSalary
(
PublisherWalletFlowVO
publisherWalletFlowVO
,
FlyerWalletFlowVO
flyerWalletFlowVO
,
PayWalletDO
flyerWallet
)
{
assert
flyerWalletFlowVO
!=
null
;
PayWalletDO
flyerPayWalletDO
=
new
PayWalletDO
();
flyerPayWalletDO
.
setUserAccountId
(
flyerWalletFlowVO
.
getUserAccountId
());
flyerPayWalletDO
.
setPid
(
flyerWallet
.
getPid
());
flyerPayWalletDO
.
setSalaryAmt
(
flyerWallet
.
getSalaryAmt
().
add
(
publisherWalletFlowVO
.
getFlyerSalaryAmount
()).
add
(
flyerWalletFlowVO
.
getSalaryAmount
()));
flyerPayWalletDO
.
setSalaryFreeze
(
flyerWallet
.
getSalaryFreeze
().
subtract
(
flyerWalletFlowVO
.
getSalaryAmount
()));
flyerPayWalletDO
.
setCashAmt
(
flyerWallet
.
getCashAmt
().
add
(
flyerWalletFlowVO
.
getCashAmount
()));
flyerPayWalletDO
.
setCashFreeze
(
flyerWallet
.
getCashFreeze
().
subtract
(
flyerWalletFlowVO
.
getCashAmount
()));
int
flyerUpdateCount
=
payWalletDao
.
updatePayWallet
(
flyerPayWalletDO
);
return
flyerUpdateCount
;
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
boolean
releaseOrCancelOrderWallet
(
PublisherWalletFlowVO
publisherWalletFlowVO
,
PayWalletDO
wallet
)
{
PayWalletDO
publishUpdatePayWallet
=
new
PayWalletDO
();
if
(
publisherWalletFlowVO
.
getCashAmount
()
==
null
)
{
publisherWalletFlowVO
.
setCashAmount
(
BigDecimal
.
ZERO
);
}
if
(
publisherWalletFlowVO
.
getSalaryAmount
()
==
null
)
{
publisherWalletFlowVO
.
setSalaryAmount
(
BigDecimal
.
ZERO
);
}
publishUpdatePayWallet
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
publishUpdatePayWallet
.
setPid
(
wallet
.
getPid
());
publishUpdatePayWallet
.
setCashAmt
(
wallet
.
getCashAmt
().
add
(
publisherWalletFlowVO
.
getCashAmount
()));
publishUpdatePayWallet
.
setCashFreeze
(
wallet
.
getCashFreeze
().
subtract
(
publisherWalletFlowVO
.
getCashAmount
()));
publishUpdatePayWallet
.
setSalaryAmt
(
wallet
.
getSalaryAmt
().
add
(
publisherWalletFlowVO
.
getSalaryAmount
()));
publishUpdatePayWallet
.
setSalaryFreeze
(
wallet
.
getSalaryFreeze
().
subtract
(
publisherWalletFlowVO
.
getSalaryAmount
()));
int
i
=
payWalletDao
.
updatePayWallet
(
publishUpdatePayWallet
);
if
(
i
>
0
)
{
return
true
;
}
return
false
;
}
public
PayLogDO
buildPayLogDO
(
PublisherWalletFlowVO
publisherWalletFlowVO
,
FlyerWalletFlowVO
flyerWalletFlowVO
)
{
// 记录资金流水记录
PayLogDO
payLogWalletDO
=
new
PayLogDO
();
// 获取用户钱包信息
if
(
publisherWalletFlowVO
!=
null
)
{
// 生成支付流水号(规则"T" + 时间戳 + 用户id + 随机数4位)
String
publishPayNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
publisherWalletFlowVO
.
getUserAccountId
()
+
CodeUtil
.
getRandomNum
(
4
);
payLogWalletDO
.
setPayMethod
(
publisherWalletFlowVO
.
getModeOfPayment
());
payLogWalletDO
.
setPayNo
(
publishPayNo
);
payLogWalletDO
.
setUserAccountId
(
publisherWalletFlowVO
.
getUserAccountId
());
payLogWalletDO
.
setCashAmtPaid
(
publisherWalletFlowVO
.
getCashAmount
());
payLogWalletDO
.
setSalaryAmtPaid
(
publisherWalletFlowVO
.
getSalaryAmount
());
payLogWalletDO
.
setPayTime
(
publisherWalletFlowVO
.
getTimeOfPayment
());
payLogWalletDO
.
setOperateUser
(
publisherWalletFlowVO
.
getOperateUserAccountId
());
return
payLogWalletDO
;
}
if
(
flyerWalletFlowVO
!=
null
)
{
if
(
flyerWalletFlowVO
.
getCashAmount
()
==
null
)
{
flyerWalletFlowVO
.
setCashAmount
(
BigDecimal
.
ZERO
);
}
if
(
flyerWalletFlowVO
.
getSalaryAmount
()
==
null
)
{
flyerWalletFlowVO
.
setSalaryAmount
(
BigDecimal
.
ZERO
);
}
// 生成支付流水号(规则"T" + 时间戳 + 用户id + 随机数4位)
String
flyerPayNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
flyerWalletFlowVO
.
getUserAccountId
()
+
CodeUtil
.
getRandomNum
(
4
);
payLogWalletDO
.
setPayMethod
(
flyerWalletFlowVO
.
getModeOfPayment
());
payLogWalletDO
.
setPayNo
(
flyerPayNo
);
payLogWalletDO
.
setUserAccountId
(
flyerWalletFlowVO
.
getUserAccountId
());
payLogWalletDO
.
setCashAmtPaid
(
flyerWalletFlowVO
.
getCashAmount
());
payLogWalletDO
.
setSalaryAmtPaid
(
flyerWalletFlowVO
.
getSalaryAmount
());
payLogWalletDO
.
setPayTime
(
flyerWalletFlowVO
.
getTimeOfPayment
());
payLogWalletDO
.
setOperateUser
(
flyerWalletFlowVO
.
getOperateUserAccountId
());
return
payLogWalletDO
;
}
return
null
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ResultBody
feignTopUpCash
(
TopUpOrderVO
topUpOrderVO
)
{
// 获取用户openid查询到用户信息
UserAccountDO
userAccountDO
=
userServiceDao
.
getUserAccountInfoByOpenId
(
topUpOrderVO
.
getOpenid
());
// 根据金额转成元
BigDecimal
topUpAmount
=
BigDecimal
.
valueOf
(
topUpOrderVO
.
getAmount
()).
divide
(
new
BigDecimal
(
100
),
2
,
BigDecimal
.
ROUND_HALF_UP
);
// 根据用户id获取钱包金额信息
PayWalletDO
wallet
=
payWalletDao
.
getPayWalletByUser
(
userAccountDO
.
getId
());
// 修改云享金信息
PayWalletDO
payWalletDO
=
new
PayWalletDO
();
payWalletDO
.
setCashAmt
(
wallet
.
getCashAmt
().
add
(
topUpAmount
));
payWalletDO
.
setPid
(
wallet
.
getPid
());
payWalletDO
.
setUserAccountId
(
userAccountDO
.
getId
());
int
i
=
payWalletDao
.
updatePayWallet
(
payWalletDO
);
if
(
i
>
0
)
{
// 记录钱包流水
PayLogDO
payLogDO
=
new
PayLogDO
();
payLogDO
.
setUserAccountId
(
userAccountDO
.
getId
());
payLogDO
.
setPayNo
(
topUpOrderVO
.
getOrderNo
());
payLogDO
.
setPayMethod
(
PayMethodEnums
.
USER_TOP_UP
.
getCode
());
payLogDO
.
setCashAmtPaid
(
topUpAmount
);
payLogDO
.
setOperateUser
(
userAccountDO
.
getId
());
payWalletDao
.
insertPayLogDO
(
payLogDO
);
return
ResultBody
.
success
();
}
else
{
return
ResultBody
.
error
(
"充值时钱包操作错误!"
);
}
}
@Override
public
ResultBody
customerBillingDetail
(
Integer
userAccountId
,
WalletFlowQO
param
)
{
param
.
setUserAccountId
(
userAccountId
);
int
count
=
payWalletDao
.
countPayLog
(
param
);
if
(
count
==
0
)
{
return
ResultBody
.
success
(
PageResult
.
buildPage
(
param
.
getPageNo
(),
param
.
getPageSize
(),
count
));
}
if
(!
StringUtils
.
isBlank
(
param
.
getYearMonth
()))
{
param
.
setEndTime
(
TDateUtil
.
getDateStr
(
TDateUtil
.
getMonthLatestDay
(
TDateUtil
.
getDate
(
param
.
getYearMonth
()
+
"-01"
,
"yyyy-MM-dd"
)),
"yyyy-MM-dd"
)
+
" 23:59:59"
);
}
Integer
pageNo
=
param
.
getPageNo
();
param
.
buildCurrentPage
();
List
<
PayLogDO
>
payLogList
=
payWalletDao
.
getPayLog
(
param
);
return
ResultBody
.
success
(
PageResult
.
buildPage
(
pageNo
,
param
.
getPageSize
(),
count
,
payLogList
.
stream
().
map
(
PayLogDO:
:
buildUserBillingDetailVO
).
collect
(
Collectors
.
toList
())));
}
@Override
public
ResultBody
billingDetails
(
Integer
id
,
String
detailType
)
{
if
(
WithdrawalInfoVO
.
AMT
.
equals
(
detailType
))
{
PayLogDO
payLogDO
=
payWalletDao
.
getPayLogById
(
id
);
return
ResultBody
.
success
(
payLogDO
.
buildUserBillingDetailVO
());
}
else
{
XzWithdrawalApplyDO
apply
=
payWalletDao
.
getWithdrawalApplyByIdOrOuterTradeNo
(
id
,
null
);
UserBillingDetailVO
detail
=
apply
.
buildUserBillingDetailVO
();
List
<
WithdrawalLogDO
>
rebates
=
payWalletDao
.
listPayWithdrawalLog
(
apply
.
getId
());
detail
.
buildSchedules
(
rebates
);
return
ResultBody
.
success
(
detail
);
}
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/xzsz/WithdrawalService.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
xzsz
;
import
com.mmc.iuav.page.PageResult
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.qo.wallet.WalletFlowQO
;
import
com.mmc.iuav.user.model.qo.wallet.WithdrawalApplyQO
;
import
com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO
;
/**
* @author: zj
* @Date: 2023/8/23 16:09
*/
public
interface
WithdrawalService
{
ResultBody
apply
(
ApplyWithdrawalVO
applyWithdrawalVO
,
Integer
userAccountId
);
ResultBody
withdrawalList
(
Integer
userAccountId
,
WalletFlowQO
walletFlowQO
);
PageResult
listPageWithdrawalApply
(
WithdrawalApplyQO
param
);
ResultBody
approveWithdrawalApply
(
Integer
id
,
Integer
applyStatus
,
Integer
userAccountId
,
String
remark
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/xzsz/XzService.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
xzsz
;
import
cn.hutool.json.JSONObject
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.model.dto.LoginSuccessDTO
;
import
com.mmc.iuav.user.model.dto.xzsz.UsableCashPoolingDTO
;
import
com.mmc.iuav.user.model.vo.XzAuthVO
;
import
com.mmc.iuav.user.model.vo.XzWithdrawalVO
;
import
com.mmc.iuav.user.xzsz.SingleSubmitResp
;
import
com.mmc.iuav.user.xzsz.WithdrawalResp
;
import
java.util.List
;
/**
* @author: zj
* @Date: 2023/8/21 9:52
*/
public
interface
XzService
{
ResultBody
getTaxFundList
();
ResultBody
getCashPooling
();
List
<
UsableCashPoolingDTO
>
getUsableCashPooling
();
String
getContractScope
(
XzAuthVO
xzAuthVO
);
String
hasKeyByUrl
(
LoginSuccessDTO
loginSuccessDTO
);
String
xzAuthNotify
(
JSONObject
notify
);
JSONObject
getSignedResult
(
XzAuthVO
xzAuthVO
);
String
viewContract
(
String
documentId
);
ResultBody
clearTestFace
(
String
name
,
String
idCard
);
SingleSubmitResp
singleSubmit
(
XzWithdrawalVO
xzWithdrawalVO
);
WithdrawalResp
querySingleTrade
(
String
outerTradeNo
);
ResultBody
querySingleReceipt
(
String
frontLogNo
);
String
xzWithdrawNotify
(
JSONObject
notify
);
SingleSubmitResp
singleSubmitLimit
(
XzWithdrawalVO
xzWithdrawalVO
);
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/xzsz/impl/WithdrawalServiceImpl.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
xzsz
.
impl
;
import
com.mmc.iuav.general.CodeUtil
;
import
com.mmc.iuav.page.PageResult
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.response.ResultEnum
;
import
com.mmc.iuav.user.dao.RealNameAuthDao
;
import
com.mmc.iuav.user.dao.wallet.PayWalletDao
;
import
com.mmc.iuav.user.dao.xzsz.WithdrawalDao
;
import
com.mmc.iuav.user.dao.xzsz.XzDao
;
import
com.mmc.iuav.user.entity.RealNameAuthDO
;
import
com.mmc.iuav.user.entity.XzAuthDO
;
import
com.mmc.iuav.user.entity.XzWithdrawalApplyDO
;
import
com.mmc.iuav.user.entity.wallet.PayWalletDO
;
import
com.mmc.iuav.user.entity.wallet.WithdrawalLogDO
;
import
com.mmc.iuav.user.enums.WithdrawalApplyStatus
;
import
com.mmc.iuav.user.enums.WithdrawalMethod
;
import
com.mmc.iuav.user.enums.XzEnums
;
import
com.mmc.iuav.user.model.dto.wallet.WithdrawalApplyDTO
;
import
com.mmc.iuav.user.model.qo.wallet.WalletFlowQO
;
import
com.mmc.iuav.user.model.qo.wallet.WithdrawalApplyQO
;
import
com.mmc.iuav.user.model.vo.XzWithdrawalVO
;
import
com.mmc.iuav.user.model.vo.wallet.ApplyWithdrawalVO
;
import
com.mmc.iuav.user.service.xzsz.WithdrawalService
;
import
com.mmc.iuav.user.service.xzsz.XzService
;
import
com.mmc.iuav.user.util.TDateUtil
;
import
com.mmc.iuav.user.xzsz.SingleSubmitResp
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* @author: zj
* @Date: 2023/8/23 16:09
*/
@Service
@Slf4j
public
class
WithdrawalServiceImpl
implements
WithdrawalService
{
@Autowired
private
WithdrawalDao
withdrawalDao
;
@Autowired
private
XzDao
xzDao
;
@Resource
private
RealNameAuthDao
realNameAuthDao
;
@Autowired
private
PayWalletDao
payWalletDao
;
@Autowired
private
XzService
xzService
;
@Override
@Transactional
public
ResultBody
apply
(
ApplyWithdrawalVO
applyWithdrawalVO
,
Integer
userAccountId
)
{
// 判断该用户是否实名认证
RealNameAuthDO
realNameAuth
=
realNameAuthDao
.
getRealNameAuthByUId
(
userAccountId
);
if
(
realNameAuth
!=
null
&&
!
realNameAuth
.
getCheckStatus
().
equals
(
1
))
{
return
ResultBody
.
error
(
"实名认证未通过!"
);
}
if
(
realNameAuth
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
PLEASE_ERFORM_REAL_NAME_AUTHENTICATION_FIRST
);
}
// 确保已电签
XzAuthDO
xzAuth
=
xzDao
.
getXzAuthByUserAccountId
(
userAccountId
);
if
(
xzAuth
!=
null
&&
!
xzAuth
.
getXzAuthStatus
().
equals
(
1
))
{
return
ResultBody
.
error
(
"电签未通过!"
);
}
if
(
xzAuth
==
null
)
{
return
ResultBody
.
error
(
"请先完成电签操作!"
);
}
// 当前提现金额是否足够
PayWalletDO
payWallet
=
payWalletDao
.
getPayWalletByUser
(
userAccountId
);
BigDecimal
salaryAmt
=
payWallet
.
getSalaryAmt
();
if
(
salaryAmt
.
compareTo
(
applyWithdrawalVO
.
getPayAmount
())
<
0
)
{
return
ResultBody
.
error
(
"当前金额大于可提现金额!"
);
}
applyWithdrawalVO
.
setUserAccountId
(
userAccountId
);
// 生成提现交易编号
String
outerTradeNo
=
"B"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
userAccountId
+
CodeUtil
.
getRandomNum
(
4
);
// 记录提现申请记录
XzWithdrawalApplyDO
xzWithdrawalApplyDO
=
new
XzWithdrawalApplyDO
(
applyWithdrawalVO
);
xzWithdrawalApplyDO
.
setOuterTradeNo
(
outerTradeNo
);
xzWithdrawalApplyDO
.
setEmpName
(
applyWithdrawalVO
.
getEmpName
());
xzWithdrawalApplyDO
.
setEmpPhone
(
applyWithdrawalVO
.
getEmpPhone
());
xzWithdrawalApplyDO
.
setLicenseId
(
realNameAuth
.
getIdNumber
());
xzWithdrawalApplyDO
.
setLicenseType
(
"ID_CARD"
);
xzWithdrawalApplyDO
.
setMonth
(
TDateUtil
.
getCurrentDateByType
(
"yyyy-MM"
));
xzWithdrawalApplyDO
.
setTradeStatus
(
"apply"
);
withdrawalDao
.
insertWithdrawalApply
(
xzWithdrawalApplyDO
);
// 生成提现流水编号
String
payNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
userAccountId
+
CodeUtil
.
getRandomNum
(
4
);
// 记录流水记录
WithdrawalLogDO
withdrawalLogDO
=
new
WithdrawalLogDO
();
withdrawalLogDO
.
setPayNo
(
payNo
);
withdrawalLogDO
.
setPayTime
(
new
Date
());
withdrawalLogDO
.
setSalaryFreeze
(
applyWithdrawalVO
.
getPayAmount
());
withdrawalLogDO
.
setSalaryPaid
(
BigDecimal
.
ZERO
);
withdrawalLogDO
.
setXzWithdrawalApplyId
(
xzWithdrawalApplyDO
.
getId
());
withdrawalLogDO
.
setUserAccountId
(
userAccountId
);
withdrawalLogDO
.
setPayMethod
(
WithdrawalMethod
.
TXDJ
.
getCode
());
payWalletDao
.
insertWithdrawalLog
(
withdrawalLogDO
);
// 修改钱包信息,钱包冻结金额
PayWalletDO
payWalletDO
=
new
PayWalletDO
();
payWalletDO
.
setPid
(
payWallet
.
getPid
());
payWalletDO
.
setUserAccountId
(
userAccountId
);
payWalletDO
.
setSalaryAmt
(
payWallet
.
getSalaryAmt
().
subtract
(
applyWithdrawalVO
.
getPayAmount
()));
payWalletDO
.
setWdlFreeze
(
payWallet
.
getWdlFreeze
().
add
(
applyWithdrawalVO
.
getPayAmount
()));
int
updateCount
=
payWalletDao
.
updatePayWallet
(
payWalletDO
);
if
(
updateCount
!=
1
)
{
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
return
ResultBody
.
error
(
"提现申请失败,请稍后重试!"
);
}
return
ResultBody
.
success
(
xzWithdrawalApplyDO
.
getId
());
}
@Override
public
ResultBody
withdrawalList
(
Integer
userAccountId
,
WalletFlowQO
param
)
{
if
(!
StringUtils
.
isBlank
(
param
.
getYearMonth
()))
{
param
.
setEndTime
(
TDateUtil
.
getDateStr
(
TDateUtil
.
getMonthLatestDay
(
TDateUtil
.
getDate
(
param
.
getYearMonth
()
+
"-01"
,
"yyyy-MM-dd"
)),
"yyyy-MM-dd"
)
+
" 23:59:59"
);
}
param
.
setUserAccountId
(
userAccountId
);
int
count
=
payWalletDao
.
countPayWithdrawalLog
(
param
);
if
(
count
==
0
)
{
return
ResultBody
.
success
(
PageResult
.
buildPage
(
param
.
getPageNo
(),
param
.
getPageSize
(),
count
));
}
Integer
pageNo
=
param
.
getPageNo
();
param
.
buildCurrentPage
();
List
<
XzWithdrawalApplyDO
>
withdrawalLogList
=
payWalletDao
.
getWithdrawalListByUserAccountId
(
param
);
return
ResultBody
.
success
(
PageResult
.
buildPage
(
pageNo
,
param
.
getPageSize
(),
count
,
withdrawalLogList
.
stream
()
.
map
(
XzWithdrawalApplyDO:
:
buildUserBillingDetailVO
).
collect
(
Collectors
.
toList
())));
}
@Override
public
PageResult
listPageWithdrawalApply
(
WithdrawalApplyQO
param
)
{
int
count
=
payWalletDao
.
countWithdrawalApply
(
param
);
if
(
count
==
0
)
{
return
PageResult
.
buildPage
(
param
.
getPageNo
(),
param
.
getPageSize
(),
count
);
}
Integer
pageNo
=
param
.
getPageNo
();
param
.
buildCurrentPage
();
List
<
XzWithdrawalApplyDO
>
list
=
payWalletDao
.
listPageWithdrawalApply
(
param
);
List
<
WithdrawalApplyDTO
>
pageList
=
list
.
stream
().
map
(
XzWithdrawalApplyDO:
:
buildWithdrawalApplyDTO
).
collect
(
Collectors
.
toList
());
return
PageResult
.
buildPage
(
pageNo
,
param
.
getPageSize
(),
count
,
pageList
);
}
@Override
@Transactional
public
ResultBody
approveWithdrawalApply
(
Integer
id
,
Integer
applyStatus
,
Integer
approveUserAccountId
,
String
remark
)
{
if
(!
WithdrawalApplyStatus
.
TXCG
.
getCode
().
toString
().
equals
(
applyStatus
.
toString
())
&&
!
WithdrawalApplyStatus
.
TXSB
.
getCode
().
toString
().
equals
(
applyStatus
.
toString
()))
{
return
ResultBody
.
error
(
ResultEnum
.
WITHDRAWAL_APPLY_STATUS_ERROR
);
}
// 查询申请单信息
XzWithdrawalApplyDO
applyInfo
=
payWalletDao
.
getWithdrawalApplyByIdOrOuterTradeNo
(
id
,
null
);
if
(
applyInfo
==
null
)
{
return
ResultBody
.
error
(
ResultEnum
.
WITHDRAWAL_INFO_NOT_FIND_ERROR
);
}
if
(!(
WithdrawalApplyStatus
.
TXSQ
.
getCode
().
toString
()).
equals
(
applyInfo
.
getApplyStatus
().
toString
()))
{
return
ResultBody
.
error
(
ResultEnum
.
WITHDRAWAL_REPEAT_CHECK_ERROR
);
}
// 获取当前用户钱包信息
PayWalletDO
wallet
=
payWalletDao
.
getPayWalletByUser
(
applyInfo
.
getUserAccountId
());
// 修改申请单的操作人信息
XzWithdrawalApplyDO
apply
=
new
XzWithdrawalApplyDO
();
apply
.
setId
(
id
);
apply
.
setApplyStatus
(
applyStatus
);
apply
.
setRemark
(
remark
);
apply
.
setApproveUser
(
approveUserAccountId
);
apply
.
setApproveTime
(
new
Date
());
payWalletDao
.
updateWithdrawalApply
(
apply
);
if
(
WithdrawalApplyStatus
.
TXCG
.
getCode
().
toString
().
equals
(
applyStatus
.
toString
()))
{
// 如果判断审批状态是成功,那么就调用小猪结算提现接口
XzWithdrawalVO
xzWithdrawalVO
=
new
XzWithdrawalVO
();
xzWithdrawalVO
.
setUserAccountId
(
applyInfo
.
getUserAccountId
());
xzWithdrawalVO
.
setMonth
(
applyInfo
.
getMonth
());
xzWithdrawalVO
.
setOuterTradeNo
(
applyInfo
.
getOuterTradeNo
());
xzWithdrawalVO
.
setEmpName
(
applyInfo
.
getEmpName
());
xzWithdrawalVO
.
setEmpPhone
(
applyInfo
.
getEmpPhone
());
xzWithdrawalVO
.
setLicenseType
(
applyInfo
.
getLicenseType
());
xzWithdrawalVO
.
setLicenseId
(
applyInfo
.
getLicenseId
());
xzWithdrawalVO
.
setSettleType
(
applyInfo
.
getSettleType
());
xzWithdrawalVO
.
setPayAccount
(
applyInfo
.
getPayAccount
());
xzWithdrawalVO
.
setBankName
(
applyInfo
.
getBankName
());
xzWithdrawalVO
.
setPositionName
(
applyInfo
.
getPositionName
());
xzWithdrawalVO
.
setPayAmount
(
applyInfo
.
getPayAmount
());
SingleSubmitResp
singleSubmitResp
=
xzService
.
singleSubmit
(
xzWithdrawalVO
);
if
(
XzEnums
.
F
.
getCode
().
equals
(
singleSubmitResp
.
getIsSuccess
()))
{
// 更新提现申请记录
XzWithdrawalApplyDO
xzWithdrawalApplyDO
=
new
XzWithdrawalApplyDO
();
xzWithdrawalApplyDO
.
setOuterTradeNo
(
applyInfo
.
getOuterTradeNo
());
xzWithdrawalApplyDO
.
setTradeResult
(
XzEnums
.
failure
.
getName
());
xzWithdrawalApplyDO
.
setTradeStatus
(
XzEnums
.
failure
.
getCode
());
xzWithdrawalApplyDO
.
setErrorCode
(
singleSubmitResp
.
getErrorCode
());
xzWithdrawalApplyDO
.
setErrorMessage
(
singleSubmitResp
.
getErrorMessage
());
payWalletDao
.
updateWithdrawalApply
(
xzWithdrawalApplyDO
);
// 回滚用户钱包金额
rollbackPayWallet
(
applyInfo
,
wallet
);
}
}
else
{
// 审批未通过 退回金额 解除冻结
// 更新提现申请记录
XzWithdrawalApplyDO
xzWithdrawalApplyDO
=
new
XzWithdrawalApplyDO
();
xzWithdrawalApplyDO
.
setOuterTradeNo
(
applyInfo
.
getOuterTradeNo
());
xzWithdrawalApplyDO
.
setTradeResult
(
"审批未通过"
);
xzWithdrawalApplyDO
.
setTradeStatus
(
"approve"
);
payWalletDao
.
updateWithdrawalApply
(
xzWithdrawalApplyDO
);
int
updateCount
=
rollbackPayWallet
(
applyInfo
,
wallet
);
if
(
updateCount
!=
1
)
{
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
return
ResultBody
.
error
(
"操作失败,请稍后重试!"
);
}
}
return
ResultBody
.
success
();
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
int
rollbackPayWallet
(
XzWithdrawalApplyDO
applyInfo
,
PayWalletDO
wallet
)
{
// 生成提现流水编号
String
payNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
applyInfo
.
getUserAccountId
()
+
CodeUtil
.
getRandomNum
(
4
);
// 记录流水记录
WithdrawalLogDO
withdrawalLogDO
=
new
WithdrawalLogDO
();
withdrawalLogDO
.
setPayNo
(
payNo
);
withdrawalLogDO
.
setPayTime
(
new
Date
());
withdrawalLogDO
.
setSalaryPaid
(
BigDecimal
.
valueOf
(
applyInfo
.
getPayAmount
()));
withdrawalLogDO
.
setXzWithdrawalApplyId
(
applyInfo
.
getId
());
withdrawalLogDO
.
setUserAccountId
(
applyInfo
.
getUserAccountId
());
withdrawalLogDO
.
setPayMethod
(
WithdrawalMethod
.
TXSB
.
getCode
());
withdrawalLogDO
.
setSalaryFreeze
(
new
BigDecimal
(
0
));
payWalletDao
.
insertWithdrawalLog
(
withdrawalLogDO
);
// 修改钱包信息,钱包冻结金额
PayWalletDO
payWalletDO
=
new
PayWalletDO
();
payWalletDO
.
setPid
(
wallet
.
getPid
());
payWalletDO
.
setUserAccountId
(
applyInfo
.
getUserAccountId
());
payWalletDO
.
setSalaryAmt
(
wallet
.
getSalaryAmt
().
add
(
BigDecimal
.
valueOf
(
applyInfo
.
getPayAmount
())));
payWalletDO
.
setWdlFreeze
(
wallet
.
getWdlFreeze
().
subtract
(
BigDecimal
.
valueOf
(
applyInfo
.
getPayAmount
())));
return
payWalletDao
.
updatePayWallet
(
payWalletDO
);
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/service/xzsz/impl/XzServiceImpl.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
service
.
xzsz
.
impl
;
import
cn.hutool.core.codec.Base64
;
import
cn.hutool.core.net.URLDecoder
;
import
cn.hutool.json.JSONObject
;
import
com.alibaba.fastjson2.JSON
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.mmc.iuav.general.CodeUtil
;
import
com.mmc.iuav.http.HttpsRequestUtil
;
import
com.mmc.iuav.response.ResultBody
;
import
com.mmc.iuav.user.constant.UserSystemConstant
;
import
com.mmc.iuav.user.dao.RealNameAuthDao
;
import
com.mmc.iuav.user.dao.wallet.PayWalletDao
;
import
com.mmc.iuav.user.dao.xzsz.XzDao
;
import
com.mmc.iuav.user.entity.RealNameAuthDO
;
import
com.mmc.iuav.user.entity.XzAuthDO
;
import
com.mmc.iuav.user.entity.XzWithdrawalApplyDO
;
import
com.mmc.iuav.user.entity.wallet.PayWalletDO
;
import
com.mmc.iuav.user.entity.wallet.WithdrawalLogDO
;
import
com.mmc.iuav.user.enums.WithdrawalMethod
;
import
com.mmc.iuav.user.enums.XzEnums
;
import
com.mmc.iuav.user.model.dto.LoginSuccessDTO
;
import
com.mmc.iuav.user.model.dto.xzsz.UsableCashPoolingDTO
;
import
com.mmc.iuav.user.model.vo.XzAuthVO
;
import
com.mmc.iuav.user.model.vo.XzWithdrawalVO
;
import
com.mmc.iuav.user.service.xzsz.XzService
;
import
com.mmc.iuav.user.util.TDateUtil
;
import
com.mmc.iuav.user.xzsz.SingleSubmitResp
;
import
com.mmc.iuav.user.xzsz.WithdrawalResp
;
import
com.piggy.settlement.sdk.client.sign.PiggySignApiClient
;
import
com.piggy.settlement.sdk.client.v2.bankreceipt.PiggyBankReceiptClient
;
import
com.piggy.settlement.sdk.client.v2.basics.PiggyOpenBasicsClient
;
import
com.piggy.settlement.sdk.client.v2.singlewithdraw.PiggySingleWithdrawalApiV2Client
;
import
com.piggy.settlement.sdk.util.v2.PiggyOpenBasicsAesUtil
;
import
com.piggy.settlement.sdk.vo.sign.PiggySignResultVo
;
import
com.piggy.settlement.sdk.vo.sign.PiggySignVo
;
import
com.piggy.settlement.sdk.vo.v2.bankreceipt.PiggyBankReceiptVo
;
import
com.piggy.settlement.sdk.vo.v2.basics.PiggyBasicsVo
;
import
com.piggy.settlement.sdk.vo.v2.singlewithdraw.PiggySingleWithdrawV2Vo
;
import
com.piggy.settlement.sdk.vo.v2.singlewithdraw.PiggySingleWithdrawalQueryV2Vo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.interceptor.TransactionAspectSupport
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.IvParameterSpec
;
import
javax.crypto.spec.SecretKeySpec
;
import
java.math.BigDecimal
;
import
java.nio.charset.Charset
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author: zj
* @Date: 2023/8/21 9:52
*/
@Service
@Slf4j
public
class
XzServiceImpl
implements
XzService
{
@Autowired
private
UserSystemConstant
userSystemConstant
;
@Autowired
private
XzDao
xzDao
;
@Resource
private
PayWalletDao
payWalletDao
;
@Autowired
private
RealNameAuthDao
realNameAuthDao
;
@Override
public
ResultBody
getTaxFundList
()
{
PiggyOpenBasicsClient
piggyOpenBasicsClient
=
PiggyOpenBasicsClient
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
piggyOpenBasicsClient
.
getTaxFundList
(
PiggyBasicsVo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
build
());
return
ResultBody
.
success
(
jsonObject
.
get
(
"data"
));
}
@Override
public
ResultBody
getCashPooling
()
{
PiggyOpenBasicsClient
piggyOpenBasicsClient
=
PiggyOpenBasicsClient
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
piggyOpenBasicsClient
.
getCashPooling
(
PiggyBasicsVo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
build
());
System
.
out
.
println
(
jsonObject
.
toString
());
return
ResultBody
.
success
(
jsonObject
.
get
(
"data"
));
}
@Override
public
List
<
UsableCashPoolingDTO
>
getUsableCashPooling
()
{
PiggyOpenBasicsClient
piggyOpenBasicsClient
=
PiggyOpenBasicsClient
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
piggyOpenBasicsClient
.
getTaxFundCashPooling
(
PiggyBasicsVo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
taxFundID
(
userSystemConstant
.
getTaxFundId
())
.
build
());
System
.
out
.
println
(
jsonObject
.
toString
());
List
<
UsableCashPoolingDTO
>
data
=
JSONArray
.
parseArray
(
jsonObject
.
get
(
"data"
).
toString
(),
UsableCashPoolingDTO
.
class
);
return
data
;
}
@Override
public
String
getContractScope
(
XzAuthVO
xzAuthVO
)
{
PiggySignApiClient
piggySignApiClient
=
PiggySignApiClient
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
piggySignApiClient
.
getSignStatus
(
PiggySignResultVo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
idCardNo
(
xzAuthVO
.
getIdCardNo
())
.
userName
(
xzAuthVO
.
getUsername
())
.
position
(
userSystemConstant
.
getXzPosition
())
.
build
());
System
.
out
.
println
(
jsonObject
.
toString
());
return
jsonObject
.
toString
();
}
@Override
public
String
hasKeyByUrl
(
LoginSuccessDTO
loginSuccessDTO
)
{
// 获取实名认证信息
RealNameAuthDO
realNameAuthDO
=
realNameAuthDao
.
getRealNameAuthByUId
(
loginSuccessDTO
.
getUserAccountId
());
if
(
realNameAuthDO
==
null
)
{
return
"先完成实名认证再签署!"
;
}
XzAuthVO
xzAuthVO
=
new
XzAuthVO
(
realNameAuthDO
.
getUserName
(),
realNameAuthDO
.
getIdNumber
(),
loginSuccessDTO
.
getPhoneNum
(),
null
,
realNameAuthDO
.
getFrontIdImg
(),
realNameAuthDO
.
getBackIdImg
());
// 查询是否已电子签约
String
contractScope
=
this
.
getContractScope
(
xzAuthVO
);
com
.
alibaba
.
fastjson2
.
JSONObject
jsonObject1
=
com
.
alibaba
.
fastjson2
.
JSONObject
.
parseObject
(
contractScope
);
if
(
jsonObject1
.
get
(
"data"
)
!=
null
)
{
// 添加认证签约结果
JSONObject
signedResult
=
this
.
getSignedResult
(
xzAuthVO
);
if
(
signedResult
.
get
(
"msg"
).
equals
(
"success"
))
{
// log.info("Signed result: {}", signedResult);
List
<
JSONObject
>
jsonObjects
=
JSONArray
.
parseArray
(
signedResult
.
get
(
"data"
).
toString
(),
JSONObject
.
class
);
// log.info("jsonObjects : {}", com.alibaba.fastjson2.JSONObject.toJSONString(jsonObjects));
XzAuthDO
xzAuthDO
=
xzDao
.
getXzAuthByUserAccountId
(
loginSuccessDTO
.
getUserAccountId
());
if
(
xzAuthDO
==
null
&&
!
CollectionUtils
.
isEmpty
(
jsonObjects
))
{
xzAuthDO
=
buildXzAuthDO
(
loginSuccessDTO
,
jsonObjects
.
get
(
0
));
xzDao
.
addAuth
(
xzAuthDO
);
}
}
return
"success"
;
}
else
{
Map
<
String
,
Integer
>
userInfo
=
new
HashMap
<
String
,
Integer
>();
userInfo
.
put
(
"userAccountId"
,
loginSuccessDTO
.
getUserAccountId
());
PiggySignApiClient
piggySignApiClient
=
PiggySignApiClient
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
piggySignApiClient
.
getSignUrl
(
PiggySignVo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
customParams
(
com
.
alibaba
.
fastjson2
.
JSONObject
.
toJSONString
(
userInfo
))
.
idCardNo
(
realNameAuthDO
.
getIdNumber
())
.
infoSource
(
"1"
)
.
jumpPage
(
"https://test.iuav.shop/network/#/pages/electronic-contracting/index"
)
.
mobile
(
loginSuccessDTO
.
getPhoneNum
())
.
notifyUrl
(
userSystemConstant
.
getAuthNotify
())
.
position
(
userSystemConstant
.
getXzPosition
())
.
userName
(
realNameAuthDO
.
getUserName
())
.
idCardImageFront
(
realNameAuthDO
.
getFrontIdImg
())
.
idCardImageBack
(
realNameAuthDO
.
getBackIdImg
())
.
build
());
// TODO 发送模板消息
return
jsonObject
.
get
(
"data"
).
toString
();
}
}
private
XzAuthDO
buildXzAuthDO
(
LoginSuccessDTO
loginSuccessDTO
,
JSONObject
jsonObject
)
{
XzAuthDO
xzAuthDO
=
new
XzAuthDO
();
xzAuthDO
.
setUserAccountId
(
loginSuccessDTO
.
getUserAccountId
());
xzAuthDO
.
setName
(
jsonObject
.
get
(
"name"
).
toString
());
xzAuthDO
.
setIdCardNo
(
jsonObject
.
get
(
"idCardNo"
).
toString
());
xzAuthDO
.
setMobile
(
jsonObject
.
get
(
"mobile"
).
toString
());
xzAuthDO
.
setBankAccount
(
jsonObject
.
get
(
"bankAccount"
).
toString
());
xzAuthDO
.
setSubsidiary_name
(
jsonObject
.
get
(
"subsidiary_name"
).
toString
());
xzAuthDO
.
setDocument_id
(
jsonObject
.
get
(
"document_id"
).
toString
());
xzAuthDO
.
setXzAuthStatus
(
1
);
return
xzAuthDO
;
}
@Transactional
@Override
public
String
xzAuthNotify
(
JSONObject
notify
)
{
log
.
info
(
"xzAuthNotify获取到的推送结果:{}"
,
notify
.
toString
());
// 认证成功,修改认证状态
if
(
notify
.
get
(
"code"
).
toString
().
equals
(
"0"
))
{
XzAuthDO
authDO
=
notify
.
get
(
"data"
,
XzAuthDO
.
class
);
Integer
userAccountId
=
(
Integer
)
com
.
alibaba
.
fastjson2
.
JSONObject
.
parseObject
(
authDO
.
getCustomParams
()).
get
(
"userAccountId"
);
if
(
userAccountId
!=
null
)
{
XzAuthDO
xzAuthDO
=
xzDao
.
getXzAuthByUserAccountId
(
userAccountId
);
if
(
xzAuthDO
==
null
)
{
authDO
.
setUserAccountId
(
userAccountId
);
authDO
.
setXzAuthStatus
(
1
);
xzDao
.
addAuth
(
authDO
);
return
"success"
;
}
}
}
return
null
;
}
@Override
public
JSONObject
getSignedResult
(
XzAuthVO
xzAuthVO
)
{
PiggySignApiClient
piggySignApiClient
=
PiggySignApiClient
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
piggySignApiClient
.
getSignResult
(
PiggySignResultVo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
idCardNo
(
xzAuthVO
.
getIdCardNo
())
.
userName
(
xzAuthVO
.
getUsername
())
.
build
());
System
.
out
.
println
(
jsonObject
.
toString
());
return
jsonObject
;
}
@Override
public
String
viewContract
(
String
documentId
)
{
PiggySignApiClient
piggySignApiClient
=
PiggySignApiClient
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
piggySignApiClient
.
viewContract
(
documentId
);
System
.
out
.
println
(
jsonObject
.
toString
());
return
jsonObject
.
toString
();
}
@Override
public
ResultBody
clearTestFace
(
String
name
,
String
idCard
)
{
String
s
=
HttpsRequestUtil
.
httpsGet
(
"https://uat.xzsz.ltd/contract/sign/clearTestPerson"
+
"name="
+
name
+
"&idCard="
+
idCard
,
null
);
return
ResultBody
.
success
(
s
);
}
@Override
public
SingleSubmitResp
singleSubmit
(
XzWithdrawalVO
xzWithdrawalVO
)
{
log
.
info
(
"singleSubmit param: {}"
,
com
.
alibaba
.
fastjson2
.
JSONObject
.
toJSONString
(
xzWithdrawalVO
));
PiggySingleWithdrawalApiV2Client
v2Client
=
PiggySingleWithdrawalApiV2Client
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
v2Client
.
singleSubmit
(
PiggySingleWithdrawV2Vo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
bizAESContent
(
PiggyOpenBasicsAesUtil
.
produceAesData
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzAes
(),
PiggySingleWithdrawV2Vo
.
SingleWithdrawV2Vo
.
builder
()
.
notifyUrl
(
userSystemConstant
.
getWithdrawNotify
())
.
taxFundId
(
userSystemConstant
.
getTaxFundId
())
.
month
(
xzWithdrawalVO
.
getMonth
())
.
outerTradeNo
(
xzWithdrawalVO
.
getOuterTradeNo
())
.
empNum
(
xzWithdrawalVO
.
getEmpNum
())
.
empName
(
xzWithdrawalVO
.
getEmpName
())
.
empPhone
(
xzWithdrawalVO
.
getEmpPhone
())
.
licenseType
(
xzWithdrawalVO
.
getLicenseType
())
.
licenseId
(
xzWithdrawalVO
.
getLicenseId
())
.
settleType
(
xzWithdrawalVO
.
getSettleType
())
.
payAccount
(
xzWithdrawalVO
.
getPayAccount
())
.
positionName
(
userSystemConstant
.
getXzPosition
())
.
payAmount
(
xzWithdrawalVO
.
getPayAmount
())
.
bankRemo
(
xzWithdrawalVO
.
getBankRemo
())
.
build
()))
.
build
());
log
.
info
(
"singleSubmit res: {}"
,
com
.
alibaba
.
fastjson2
.
JSONObject
.
toJSONString
(
jsonObject
));
SingleSubmitResp
singleSubmitResp
=
com
.
alibaba
.
fastjson2
.
JSONObject
.
parseObject
(
jsonObject
.
toString
(),
SingleSubmitResp
.
class
);
return
singleSubmitResp
;
}
@Override
public
SingleSubmitResp
singleSubmitLimit
(
XzWithdrawalVO
xzWithdrawalVO
)
{
PiggySingleWithdrawalApiV2Client
v2Client
=
PiggySingleWithdrawalApiV2Client
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
v2Client
.
singleSubmitLimit
(
PiggySingleWithdrawV2Vo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
bizAESContent
(
PiggyOpenBasicsAesUtil
.
produceAesData
(
userSystemConstant
.
getXzAppKey
(),
userSystemConstant
.
getXzAes
(),
PiggySingleWithdrawV2Vo
.
SingleWithdrawV2Vo
.
builder
()
.
notifyUrl
(
xzWithdrawalVO
.
getNotifyUrl
())
.
taxFundId
(
xzWithdrawalVO
.
getTaxFundId
())
.
month
(
xzWithdrawalVO
.
getMonth
())
.
outerTradeNo
(
xzWithdrawalVO
.
getOuterTradeNo
())
.
empNum
(
xzWithdrawalVO
.
getEmpNum
())
.
empName
(
xzWithdrawalVO
.
getEmpName
())
.
empPhone
(
xzWithdrawalVO
.
getEmpPhone
())
.
licenseType
(
xzWithdrawalVO
.
getLicenseType
())
.
licenseId
(
xzWithdrawalVO
.
getLicenseId
())
.
settleType
(
xzWithdrawalVO
.
getSettleType
())
.
payAccount
(
xzWithdrawalVO
.
getPayAccount
())
.
positionName
(
xzWithdrawalVO
.
getPositionName
())
.
payAmount
(
xzWithdrawalVO
.
getPayAmount
())
.
bankRemo
(
xzWithdrawalVO
.
getBankRemo
())
.
build
()))
.
build
());
System
.
out
.
println
(
jsonObject
.
toString
());
SingleSubmitResp
singleSubmitResp
=
com
.
alibaba
.
fastjson2
.
JSONObject
.
parseObject
(
jsonObject
.
toString
(),
SingleSubmitResp
.
class
);
return
singleSubmitResp
;
}
@Override
public
WithdrawalResp
querySingleTrade
(
String
outerTradeNo
)
{
PiggySingleWithdrawalApiV2Client
v2Client
=
PiggySingleWithdrawalApiV2Client
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
v2Client
.
querySingleTrade
(
PiggySingleWithdrawalQueryV2Vo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
outerTradeNo
(
outerTradeNo
)
.
build
());
WithdrawalResp
withdrawalResp
=
com
.
alibaba
.
fastjson2
.
JSONObject
.
parseObject
(
jsonObject
.
toString
(),
WithdrawalResp
.
class
);
return
withdrawalResp
;
}
@Override
public
ResultBody
querySingleReceipt
(
String
frontLogNo
)
{
PiggyBankReceiptClient
piggyBankReceiptClient
=
PiggyBankReceiptClient
.
getInstanse
(
userSystemConstant
.
getXzAppSecret
(),
userSystemConstant
.
getXzDomain
());
JSONObject
jsonObject
=
piggyBankReceiptClient
.
getSingleReceipt
(
PiggyBankReceiptVo
.
builder
()
.
appKey
(
userSystemConstant
.
getXzAppKey
())
.
frontLogNo
(
frontLogNo
)
.
build
());
System
.
out
.
println
(
jsonObject
.
toString
());
if
(
jsonObject
.
get
(
"isSuccess"
).
toString
().
equals
(
"T"
))
{
return
ResultBody
.
success
(
jsonObject
.
get
(
"data"
));
}
else
{
return
ResultBody
.
error
(
jsonObject
.
get
(
"errorMessage"
).
toString
());
}
}
@Override
@Transactional
public
String
xzWithdrawNotify
(
JSONObject
notify
)
{
log
.
info
(
"xzWithdrawNotify获取到的推送结果:{}"
,
notify
.
toString
());
if
(
XzEnums
.
T
.
getCode
().
equals
(
notify
.
get
(
XzEnums
.
is_success
.
getCode
()).
toString
()))
{
String
s
=
decrypt
(
com
.
alibaba
.
fastjson2
.
JSONObject
.
parseObject
(
notify
.
get
(
"data"
).
toString
()).
get
(
"bizAESContent"
).
toString
());
WithdrawalResp
.
Data
data
=
com
.
alibaba
.
fastjson2
.
JSONObject
.
parseObject
(
s
,
WithdrawalResp
.
Data
.
class
);
log
.
info
(
"提现回调解密数据内容:{}"
,
com
.
alibaba
.
fastjson2
.
JSONObject
.
toJSONString
(
data
));
// 获取用户提现申请信息
XzWithdrawalApplyDO
withdrawCashApplyDetails
=
payWalletDao
.
getWithdrawalApplyByIdOrOuterTradeNo
(
null
,
data
.
getOuterTradeNo
());
// 获取用户钱包信息
PayWalletDO
wallet
=
payWalletDao
.
getPayWalletByUser
(
withdrawCashApplyDetails
.
getUserAccountId
());
if
(
XzEnums
.
submit_result
.
getCode
().
equals
(
data
.
getNotifyType
()))
{
// 对上报的数据进行业务校验,例如:是否超限、是否有余额、是否有电签、参数是否准确等等前置校验。如果校验成功,订单进入待发队列等待发放
log
.
info
(
"deal submitResult"
);
// 判断返回的状态时否是成功
if
(
XzEnums
.
success
.
getCode
().
equals
(
data
.
getTradeStatus
()))
{
// 更新提现申请记录
XzWithdrawalApplyDO
xzWithdrawalApplyDO
=
new
XzWithdrawalApplyDO
();
xzWithdrawalApplyDO
.
setOuterTradeNo
(
data
.
getOuterTradeNo
());
xzWithdrawalApplyDO
.
setSubmitStatus
(
data
.
getTradeStatus
());
xzWithdrawalApplyDO
.
setTradeResult
(
data
.
getTradeResult
());
xzWithdrawalApplyDO
.
setTradeStatus
(
"await"
);
xzWithdrawalApplyDO
.
setTaxFundId
(
userSystemConstant
.
getTaxFundId
());
payWalletDao
.
updateWithdrawalApply
(
xzWithdrawalApplyDO
);
}
else
{
// 更新提现申请记录
XzWithdrawalApplyDO
xzWithdrawalApplyDO
=
new
XzWithdrawalApplyDO
();
xzWithdrawalApplyDO
.
setOuterTradeNo
(
data
.
getOuterTradeNo
());
xzWithdrawalApplyDO
.
setSubmitStatus
(
data
.
getTradeStatus
());
xzWithdrawalApplyDO
.
setTradeResult
(
data
.
getTradeResult
());
xzWithdrawalApplyDO
.
setTradeStatus
(
data
.
getTradeStatus
());
payWalletDao
.
updateWithdrawalApply
(
xzWithdrawalApplyDO
);
// 提现失败回滚用户金额
callbackUserPayWallet
(
data
,
withdrawCashApplyDetails
,
wallet
,
0
);
}
}
else
if
(
XzEnums
.
trade_result
.
getCode
().
equals
(
data
.
getNotifyType
()))
{
// 根据回调信息返回数据更新提现申请
if
(
withdrawCashApplyDetails
.
getTradeStatus
()
!=
null
&&
withdrawCashApplyDetails
.
getTradeStatus
().
equals
(
XzEnums
.
success
.
getCode
()))
{
return
"success"
;
}
XzWithdrawalApplyDO
xzWithdrawalApplyDO
=
new
XzWithdrawalApplyDO
();
int
updateCount
;
// 判断返回的是成功还是失败
if
(
XzEnums
.
success
.
getCode
().
equals
(
data
.
getTradeStatus
()))
{
// 修改提现申请状态
xzWithdrawalApplyDO
.
setTradeStatus
(
XzEnums
.
success
.
getCode
());
xzWithdrawalApplyDO
.
setTradeTime
(
data
.
getTradeTime
());
xzWithdrawalApplyDO
.
setOuterTradeNo
(
data
.
getOuterTradeNo
());
xzWithdrawalApplyDO
.
setFrontLogNo
(
data
.
getFrontLogNo
());
xzWithdrawalApplyDO
.
setTradeResult
(
data
.
getTradeResult
());
updateCount
=
payWalletDao
.
updateWithdrawalApply
(
xzWithdrawalApplyDO
);
if
(
updateCount
!=
1
)
{
log
.
error
(
"回调返回提现成功时,修改提现申请信息失败,信息是:{}"
,
JSON
.
toJSONString
(
xzWithdrawalApplyDO
));
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
return
"error"
;
}
// 解冻冻结金,记录流水
callbackUserPayWallet
(
data
,
withdrawCashApplyDetails
,
wallet
,
1
);
return
"success"
;
}
else
if
(
XzEnums
.
handle
.
getCode
().
equals
(
data
.
getTradeStatus
()))
{
// 修改提现申请状态
xzWithdrawalApplyDO
.
setTradeStatus
(
XzEnums
.
handle
.
getCode
());
xzWithdrawalApplyDO
.
setTradeTime
(
data
.
getTradeTime
());
xzWithdrawalApplyDO
.
setOuterTradeNo
(
data
.
getOuterTradeNo
());
xzWithdrawalApplyDO
.
setFrontLogNo
(
data
.
getFrontLogNo
());
xzWithdrawalApplyDO
.
setTradeResult
(
data
.
getTradeResult
());
updateCount
=
payWalletDao
.
updateWithdrawalApply
(
xzWithdrawalApplyDO
);
if
(
updateCount
!=
1
)
{
log
.
error
(
"回调返回提现交易中时,修改提现申请信息失败,信息是:{}"
,
JSON
.
toJSONString
(
xzWithdrawalApplyDO
));
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
return
"error"
;
}
}
else
{
// 修改提现申请状态
xzWithdrawalApplyDO
.
setTradeStatus
(
XzEnums
.
failure
.
getCode
());
xzWithdrawalApplyDO
.
setErrorMessage
(
data
.
getTradeFailCode
());
xzWithdrawalApplyDO
.
setTradeTime
(
data
.
getTradeTime
());
xzWithdrawalApplyDO
.
setOuterTradeNo
(
data
.
getOuterTradeNo
());
xzWithdrawalApplyDO
.
setTradeResult
(
data
.
getTradeResult
());
updateCount
=
payWalletDao
.
updateWithdrawalApply
(
xzWithdrawalApplyDO
);
if
(
updateCount
!=
1
)
{
log
.
error
(
"回调返回提现交易中时,修改提现申请信息失败,信息是:{}"
,
JSON
.
toJSONString
(
xzWithdrawalApplyDO
));
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
return
"error"
;
}
// 提现失败回滚用户金额
callbackUserPayWallet
(
data
,
withdrawCashApplyDetails
,
wallet
,
0
);
}
}
}
else
{
log
.
info
(
"xzWithdrawNotify fail:{}"
,
notify
);
}
return
"success"
;
}
/**
* @param data 回调返回的数据
* @param withdrawCashApplyDetails 提现申请信息
* @param wallet 用户钱包信息
* @param flag 0:失败 1:成功
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
callbackUserPayWallet
(
WithdrawalResp
.
Data
data
,
XzWithdrawalApplyDO
withdrawCashApplyDetails
,
PayWalletDO
wallet
,
Integer
flag
)
{
String
payNo
=
"T"
+
TDateUtil
.
getDateStr
(
new
Date
(),
TDateUtil
.
TYPE
)
+
withdrawCashApplyDetails
.
getUserAccountId
()
+
CodeUtil
.
getRandomNum
(
4
);
// 记录流水记录
WithdrawalLogDO
withdrawalLogDO
=
new
WithdrawalLogDO
();
withdrawalLogDO
.
setPayNo
(
payNo
);
withdrawalLogDO
.
setXzWithdrawalApplyId
(
withdrawCashApplyDetails
.
getId
());
withdrawalLogDO
.
setPayTime
(
new
Date
());
withdrawalLogDO
.
setUserAccountId
(
withdrawCashApplyDetails
.
getUserAccountId
());
withdrawalLogDO
.
setSalaryPaid
(
data
.
getPayAmount
());
if
(
flag
==
0
)
{
withdrawalLogDO
.
setPayMethod
(
WithdrawalMethod
.
TXSB
.
getCode
());
}
else
{
withdrawalLogDO
.
setPayMethod
(
WithdrawalMethod
.
TXCG
.
getCode
());
}
withdrawalLogDO
.
setSalaryFreeze
(
BigDecimal
.
ZERO
);
payWalletDao
.
insertWithdrawalLog
(
withdrawalLogDO
);
// 修改钱包信息,钱包冻结金额
PayWalletDO
payWalletDO
=
new
PayWalletDO
();
payWalletDO
.
setPid
(
wallet
.
getPid
());
payWalletDO
.
setUserAccountId
(
withdrawCashApplyDetails
.
getUserAccountId
());
if
(
flag
==
0
)
{
payWalletDO
.
setSalaryAmt
(
wallet
.
getSalaryAmt
().
add
(
data
.
getPayAmount
()));
}
else
{
payWalletDO
.
setSalaryWdl
(
wallet
.
getSalaryWdl
().
add
(
data
.
getPayAmount
()));
}
payWalletDO
.
setWdlFreeze
(
wallet
.
getWdlFreeze
().
subtract
(
data
.
getPayAmount
()));
int
updatePayWalletCount
=
payWalletDao
.
updatePayWallet
(
payWalletDO
);
if
(
updatePayWalletCount
!=
1
)
{
log
.
error
(
"回调返回提现时,修改钱包信息失败,信息是:{}"
,
JSON
.
toJSONString
(
payWalletDO
));
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
}
}
public
String
decrypt
(
String
aesData
)
{
try
{
byte
[]
raw
=
userSystemConstant
.
getXzAppSecret
().
getBytes
(
"ASCII"
);
SecretKeySpec
skeySpec
=
new
SecretKeySpec
(
raw
,
"AES"
);
Cipher
cipher
=
Cipher
.
getInstance
(
"AES/CBC/PKCS5Padding"
);
IvParameterSpec
iv
=
new
IvParameterSpec
(
userSystemConstant
.
getXzAes
().
getBytes
());
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
skeySpec
,
iv
);
Charset
charset
=
Charset
.
forName
(
"UTF-8"
);
String
tempStr
=
URLDecoder
.
decode
(
aesData
,
charset
);
byte
[]
encrypted1
=
Base64
.
decode
(
tempStr
);
byte
[]
original
=
cipher
.
doFinal
(
encrypted1
);
String
jsonParam
=
new
String
(
original
,
"UTF-8"
);
return
jsonParam
;
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"AES解密异常"
+
e
);
}
return
""
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/util/PatternUtil.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
util
;
/**
* 正则表达式匹配
*
* @author tyg
* @date 2018年9月21日下午4:32:27
*/
public
class
PatternUtil
{
/**
* 手机号码匹配
*/
public
static
final
String
PHONE_REG
=
"^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$"
;
/**
* 座机号码匹配
*/
public
static
final
String
MOBILE_REG
=
"^\\d{3}-\\d{8}|\\d{4}-\\d{7}$"
;
/**
* 汉字匹配
*/
public
static
final
String
CHIINESE_REG
=
"^[\\u4e00-\\u9fa5]{0,}$"
;
/**
* 英文和数字匹配(不区分大小写)
*/
public
static
final
String
LETTER_NUMBER_REG
=
"^[A-Za-z0-9]+$"
;
/**
* 非零开头的最多带两位小数的数字
*/
public
static
final
String
DECIMAL_REG
=
"^([1-9][0-9]*)+(.[0-9]{1,2})?$"
;
/**
* 纯数字
*/
public
static
final
String
ONLY_NUMBER_REG
=
"^[0-9]{1,}$"
;
/**
* 纯字母
*/
public
static
final
String
ONLY_LETTER_REG
=
"^[a-zA-Z]{1,}$"
;
/**
* 邮箱email
*/
public
static
final
String
EMAIL_REG
=
"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
;
/**
* 日期规则
*/
public
static
final
String
DATE_YMD
=
"^(\\d{4}-\\d{2}-\\d{2})$"
;
/**
* 时间规则
*/
public
static
final
String
DATE_YMDHDS
=
"^(\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2})$"
;
/**
* 银行卡卡号位数
*/
public
final
static
String
BANK_CARD_NUMBER
=
"^\\d{16}|\\d{19}$"
;
/**
* 身份证号码位数限制
*/
public
final
static
String
ID_CARD
=
"^\\d{15}|(\\d{17}[0-9,x,X])$"
;
/**
* 是否为手机号码
*
* @param phone
* @return
* @return boolean
* @author tyg
* @date 2018年9月25日上午9:44:38
*/
public
static
boolean
isPhone
(
String
phone
)
{
return
phone
.
matches
(
PHONE_REG
);
}
/**
* 是否为座机号码
*
* @param mobile
* @return
* @return boolean
* @author tyg
* @date 2018年9月25日上午9:44:38
*/
public
static
boolean
isMobile
(
String
mobile
)
{
return
mobile
.
matches
(
MOBILE_REG
);
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
isPhone
(
"13228116626"
));
System
.
out
.
println
(
isMobile
(
"028-63358547"
));
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/util/PrivacyUtil.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
util
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.builder.ReflectionToStringBuilder
;
import
java.lang.reflect.Field
;
import
java.util.Arrays
;
import
java.util.HashSet
;
import
java.util.Set
;
import
java.util.regex.Pattern
;
/**
* 日志辅助类,用来处理敏感信息,进行脱敏
*
* @author tyg
* @date 2018年5月5日下午4:01:22
*/
public
class
PrivacyUtil
{
//银行账户:显示前六后四,范例:622848******4568
public
static
String
encryptBankAcct
(
String
bankAcct
)
{
if
(
bankAcct
==
null
)
{
return
""
;
}
return
replaceBetween
(
bankAcct
,
6
,
bankAcct
.
length
()
-
4
,
null
);
}
//身份证号码:显示前六后四,范例:110601********2015
public
static
String
encryptIdCard
(
String
idCard
)
{
if
(
idCard
==
null
)
{
return
""
;
}
return
replaceBetween
(
idCard
,
6
,
idCard
.
length
()
-
4
,
null
);
}
//客户email:显示前二后四,范例:abxx@xxx.com
public
static
String
encryptEmail
(
String
email
)
{
//判断是否为邮箱地址
if
(
email
==
null
||
!
Pattern
.
matches
(
PatternUtil
.
EMAIL_REG
,
email
))
{
return
""
;
}
StringBuilder
sb
=
new
StringBuilder
(
email
);
//邮箱账号名只显示前两位
int
at_position
=
sb
.
indexOf
(
"@"
);
if
(
at_position
>
2
)
{
sb
.
replace
(
2
,
at_position
,
StringUtils
.
repeat
(
"x"
,
at_position
-
2
));
}
//邮箱域名隐藏
int
period_position
=
sb
.
lastIndexOf
(
"."
);
sb
.
replace
(
at_position
+
1
,
period_position
,
StringUtils
.
repeat
(
"x"
,
period_position
-
at_position
-
1
));
return
sb
.
toString
();
}
//手机:显示前三后四,范例:189****3684
public
static
String
encryptPhoneNo
(
String
phoneNo
)
{
if
(
phoneNo
==
null
)
{
return
""
;
}
return
replaceBetween
(
phoneNo
,
3
,
phoneNo
.
length
()
-
4
,
null
);
}
/**
* @param object 待处理对象
* @param fieldNames 需要处理的属性
* @return 将对象转换为字符串,并对敏感信息进行处理
*/
public
static
String
encryptSensitiveInfo
(
Object
object
,
String
[]
fieldNames
)
{
return
encryptSensitiveInfo
(
object
,
fieldNames
,
null
);
}
/**
* @param object 待处理对象
* @param fieldNames 需要处理的属性
* @param excludes 不需要显示的属性
* @return 将对象转换为字符串,并对敏感信息进行处理
*/
public
static
String
encryptSensitiveInfo
(
Object
object
,
String
[]
fieldNames
,
String
[]
excludes
)
{
if
(
fieldNames
==
null
)
{
fieldNames
=
new
String
[
0
];
}
//合并数组
Set
<
String
>
set
=
new
HashSet
<
String
>(
Arrays
.
asList
(
fieldNames
));
if
(
excludes
!=
null
)
{
for
(
int
i
=
0
;
i
<
excludes
.
length
;
i
++)
{
set
.
add
(
excludes
[
i
]);
}
}
//将对象转换为字符串
String
str
=
ReflectionToStringBuilder
.
toStringExclude
(
object
,
set
.
toArray
(
new
String
[
0
]));
//处理敏感信息
StringBuilder
sb
=
new
StringBuilder
(
str
);
sb
.
deleteCharAt
(
sb
.
length
()
-
1
);
for
(
int
i
=
0
;
i
<
fieldNames
.
length
;
i
++)
{
String
fieldName
=
fieldNames
[
i
];
try
{
Field
f
=
object
.
getClass
().
getDeclaredField
(
fieldName
);
f
.
setAccessible
(
true
);
String
value
=
encryptSensitiveInfo
(
String
.
valueOf
(
f
.
get
(
object
)));
if
(
i
!=
0
||
sb
.
charAt
(
sb
.
length
()
-
1
)
!=
'['
)
{
sb
.
append
(
","
);
}
sb
.
append
(
fieldName
).
append
(
"="
).
append
(
value
);
}
catch
(
Exception
e
)
{
}
}
sb
.
append
(
"]"
);
str
=
sb
.
toString
();
return
str
;
}
/**
* 对敏感信息进行处理。使用正则表达式判断使用哪种规则
*
* @param sourceStr 需要处理的敏感信息
* @return
* @return String
* @author tyg
* @date 2018年5月5日下午3:59:28
*/
public
static
String
encryptSensitiveInfo
(
String
sourceStr
)
{
if
(
sourceStr
==
null
)
{
return
""
;
}
if
(
Pattern
.
matches
(
PatternUtil
.
PHONE_REG
,
sourceStr
))
{
return
encryptPhoneNo
(
sourceStr
);
}
else
if
(
Pattern
.
matches
(
PatternUtil
.
EMAIL_REG
,
sourceStr
))
{
return
encryptEmail
(
sourceStr
);
}
else
if
(
Pattern
.
matches
(
PatternUtil
.
BANK_CARD_NUMBER
,
sourceStr
))
{
return
encryptBankAcct
(
sourceStr
);
}
else
if
(
Pattern
.
matches
(
PatternUtil
.
ID_CARD
,
sourceStr
))
{
return
encryptIdCard
(
sourceStr
);
}
else
{
return
sourceStr
;
}
}
/**
* 将字符串开始位置到结束位置之间的字符用指定字符替换
*
* @param sourceStr 待处理字符串
* @param begin 开始位置
* @param end 结束位置
* @param replacement 替换字符
* @return
*/
private
static
String
replaceBetween
(
String
sourceStr
,
int
begin
,
int
end
,
String
replacement
)
{
if
(
sourceStr
==
null
)
{
return
""
;
}
if
(
replacement
==
null
)
{
replacement
=
"*"
;
}
int
replaceLength
=
end
-
begin
;
if
(
StringUtils
.
isNotBlank
(
sourceStr
)
&&
replaceLength
>
0
)
{
StringBuilder
sb
=
new
StringBuilder
(
sourceStr
);
sb
.
replace
(
begin
,
end
,
StringUtils
.
repeat
(
replacement
,
replaceLength
));
return
sb
.
toString
();
}
else
{
return
sourceStr
;
}
}
}
\ No newline at end of file
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/util/TDateUtil.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
util
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
/**
* @author 作者 geDuo
* @version 创建时间:2021年7月17日 下午5:28:19
* @explain 日期时间工具类
*/
public
class
TDateUtil
{
public
static
final
String
ONE_WEEK
=
"oneweek"
;
public
static
final
String
ONE_MONTH
=
"onemonth"
;
public
static
final
String
THREE_MONTH
=
"threemonth"
;
public
static
final
String
SIX_MONTH
=
"sixmonth"
;
public
static
final
String
ONE_YEAR
=
"oneyear"
;
public
static
final
String
TYPE
=
"yyyyMMddHHmmss"
;
public
static
String
getCurrentDate
()
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyy/MM/dd HH:mm"
);
// 设置日期格式
String
date
=
df
.
format
(
new
Date
());
// new Date()为获取当前系统时间
return
date
;
}
public
static
String
getCurrentDateByType
(
String
format
)
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
format
);
// 设置日期格式
String
date
=
df
.
format
(
new
Date
());
// new Date()为获取当前系统时间
return
date
;
}
public
static
String
getCurrentDateMidd
()
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
// 设置日期格式
String
date
=
df
.
format
(
new
Date
());
// new Date()为获取当前系统时间
return
date
;
}
public
static
Date
getDate
(
String
str
,
String
format
)
{
Date
date
=
null
;
try
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
format
);
// 设置日期格式
// String dates=df.format(new Date());// new Date()为获取当前系统时间
date
=
df
.
parse
(
str
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
date
;
}
/**
* date类型转字符串
*/
public
static
String
getDateStr
(
Date
date
,
String
type
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
type
);
String
s
=
format
.
format
(
date
);
return
s
;
}
/**
* 根据日期获得随机数
*/
public
static
Integer
getDateRandom
(
Date
date
,
String
format
,
int
count
)
{
String
code
=
""
;
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
code
=
code
+
(
int
)
(
Math
.
random
()
*
9
);
}
code
=
TDateUtil
.
getDateStr
(
date
,
format
)
+
code
;
return
Integer
.
parseInt
(
code
);
}
/**
* 10位数的秒转日期字符
*
* @param mss
* @return
*/
public
static
Date
dateFromSecond
(
long
sceondTime
)
{
return
new
Date
(
sceondTime
*
1000
);
}
/**
* 10位数的秒转日期字符
*
* @param mss
* @return
*/
public
static
String
dateFromSecondStr
(
long
sceondTime
)
{
return
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
).
format
(
new
Date
(
sceondTime
*
1000
));
}
/**
* 秒转时分秒
*
* @param secondTime
* @return
*/
public
static
String
hmsFromSecond
(
Integer
secondTime
)
{
Integer
hour
=
secondTime
/
60
/
60
;
Integer
minutes
=
secondTime
/
60
%
60
;
Integer
remainingSeconds
=
secondTime
%
60
;
return
(
hour
+
"h"
+
minutes
+
"min"
+
remainingSeconds
+
"s"
);
}
public
static
String
hmsFromSecondFormat
(
long
secondTime
)
{
long
day
=
secondTime
/
60
/
60
/
24
;
long
hour
=
secondTime
/
60
/
60
%
24
;
long
minutes
=
secondTime
/
60
%
60
;
long
remainingSeconds
=
secondTime
%
60
;
if
(
day
>
0
)
{
return
(
day
+
"天"
+
hour
+
"小时"
+
minutes
+
"分"
+
remainingSeconds
+
"秒"
);
}
return
(
hour
+
"小时"
+
minutes
+
"分"
+
remainingSeconds
+
"秒"
);
}
/**
* 两个日期的相差秒数
*
* @param maxDate
* @param minDate
* @return
*/
public
static
long
calLastedTime
(
Date
maxDate
,
Date
minDate
)
{
long
a
=
maxDate
.
getTime
();
long
b
=
minDate
.
getTime
();
long
c
=
(
a
-
b
)
/
1000
;
return
c
;
}
/**
* 获取某个月的月底最后一天的时间
*/
public
static
Date
getMonthLatestDay
(
Date
date
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
// 获取当前月最后一天
Calendar
ca
=
Calendar
.
getInstance
();
ca
.
setTime
(
date
);
ca
.
set
(
Calendar
.
DAY_OF_MONTH
,
ca
.
getActualMaximum
(
Calendar
.
DAY_OF_MONTH
));
String
last
=
format
.
format
(
ca
.
getTime
());
Date
dates
=
getDate
(
last
,
"yyyy-MM-dd"
);
return
dates
;
}
/**
* 某个时间 加N天
*/
public
static
Date
nextNumDay
(
Date
d
,
int
num
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Date
date
=
null
;
try
{
Date
now
=
d
;
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
now
);
calendar
.
add
(
Calendar
.
DAY_OF_MONTH
,
num
);
String
last
=
format
.
format
(
calendar
.
getTime
());
date
=
getDate
(
last
,
"yyyy-MM-dd"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
date
;
}
/**
* 某天个时间加 N 小时
*
* @param now
* @param num
* @return
*/
public
static
Date
addHourTime
(
Date
now
,
int
num
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
Date
date
=
null
;
try
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
now
);
calendar
.
add
(
Calendar
.
HOUR
,
num
);
String
last
=
format
.
format
(
calendar
.
getTime
());
date
=
getDate
(
last
,
"yyyy-MM-dd HH:mm:ss"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
date
;
}
/**
* 某个时间加n个月加n天(负数为减)
*/
@SuppressWarnings
(
"static-access"
)
public
static
Date
getMonthNDayN
(
Date
date
,
int
month
,
int
day
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Date
news
=
null
;
try
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
add
(
Calendar
.
MONTH
,
month
);
calendar
.
add
(
calendar
.
DATE
,
day
);
String
last
=
format
.
format
(
calendar
.
getTime
());
news
=
getDate
(
last
,
"yyyy-MM-dd"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
news
;
}
/**
* 时间戳-计算小时
*/
public
static
long
getDistanceTime
(
long
time1
,
long
time2
)
{
long
diff
=
0
;
long
day
=
0
;
long
hour
=
0
;
if
(
time1
<
time2
)
{
diff
=
time2
-
time1
;
}
else
{
diff
=
time1
-
time2
;
}
day
=
diff
/
(
24
*
60
*
60
*
1000
);
hour
=
(
diff
/
(
60
*
60
*
1000
)
-
day
*
24
);
return
hour
;
}
/**
* 两个时间之间相差距离多少天
*
* @param one 时间参数 1:
* @param two 时间参数 2:
* @return 相差天数
*/
public
static
int
distanceDays
(
Date
one
,
Date
two
)
{
int
days
=
0
;
long
time1
=
one
.
getTime
();
long
time2
=
two
.
getTime
();
long
diff
;
if
(
time1
<
time2
)
{
diff
=
time2
-
time1
;
}
else
{
diff
=
time1
-
time2
;
}
days
=
new
Long
(
diff
/
(
1000
*
60
*
60
*
24
)).
intValue
();
return
days
;
}
public
static
Date
nextNumDateTime
(
Date
d
,
int
num
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
Date
date
=
null
;
try
{
Date
now
=
d
;
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
now
);
calendar
.
add
(
Calendar
.
DAY_OF_MONTH
,
num
);
String
last
=
format
.
format
(
calendar
.
getTime
());
date
=
getDate
(
last
,
"yyyy-MM-dd HH:mm:ss"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
date
;
}
public
static
String
createYearWeek
(
String
startStr
,
String
endStr
)
{
if
(
startStr
==
null
||
""
.
equals
(
startStr
)
||
endStr
==
null
||
""
.
equals
(
endStr
))
{
return
"起止日期不能为空"
;
}
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Date
start
=
null
;
Date
end
=
null
;
Date
startDate
;
Date
endDate
;
int
dayOfWeek
;
boolean
goOn
=
true
;
int
no
=
0
;
try
{
start
=
sdf
.
parse
(
startStr
);
end
=
sdf
.
parse
(
endStr
);
}
catch
(
ParseException
e
)
{
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyyMMdd"
);
try
{
start
=
simpleDateFormat
.
parse
(
startStr
);
end
=
simpleDateFormat
.
parse
(
endStr
);
}
catch
(
ParseException
pe
)
{
pe
.
printStackTrace
();
}
}
if
(
start
.
compareTo
(
end
)
>
-
1
)
{
return
"结束日期必须大于开始日期"
;
}
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
start
);
dayOfWeek
=
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
);
List
<
Map
<
String
,
String
>>
weekList
=
new
ArrayList
<>();
if
(
dayOfWeek
>
1
&&
dayOfWeek
<
7
)
{
do
{
startDate
=
start
;
calendar
.
add
(
Calendar
.
DATE
,
(
8
-
dayOfWeek
));
endDate
=
calendar
.
getTime
();
no
+=
1
;
Map
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"startOfWeek"
,
sdf
.
format
(
startDate
));
map
.
put
(
"weekNo"
,
no
+
""
);
if
(
endDate
.
compareTo
(
end
)
<
0
)
{
map
.
put
(
"endOfWeek"
,
sdf
.
format
(
endDate
));
weekList
.
add
(
map
);
calendar
.
add
(
Calendar
.
DATE
,
1
);
start
=
calendar
.
getTime
();
dayOfWeek
=
2
;
}
else
{
map
.
put
(
"endOfWeek"
,
sdf
.
format
(
end
));
weekList
.
add
(
map
);
goOn
=
false
;
}
}
while
(
goOn
);
}
else
{
no
+=
1
;
startDate
=
start
;
if
(
dayOfWeek
==
1
)
{
endDate
=
start
;
}
else
{
calendar
.
add
(
Calendar
.
DATE
,
1
);
endDate
=
calendar
.
getTime
();
}
Map
<
String
,
String
>
map
=
new
HashMap
<>();
map
.
put
(
"startOfWeek"
,
sdf
.
format
(
startDate
));
map
.
put
(
"endOfWeek"
,
sdf
.
format
(
endDate
));
map
.
put
(
"weekNo"
,
no
+
""
);
weekList
.
add
(
map
);
calendar
.
add
(
Calendar
.
DATE
,
1
);
start
=
calendar
.
getTime
();
do
{
startDate
=
start
;
calendar
.
add
(
Calendar
.
DATE
,
6
);
endDate
=
calendar
.
getTime
();
no
+=
1
;
map
=
new
HashMap
<>();
map
.
put
(
"startOfWeek"
,
sdf
.
format
(
startDate
));
map
.
put
(
"weekNo"
,
no
+
""
);
if
(
endDate
.
compareTo
(
end
)
<
0
)
{
map
.
put
(
"endOfWeek"
,
sdf
.
format
(
endDate
));
weekList
.
add
(
map
);
calendar
.
add
(
Calendar
.
DATE
,
1
);
start
=
calendar
.
getTime
();
}
else
{
map
.
put
(
"endOfWeek"
,
sdf
.
format
(
end
));
weekList
.
add
(
map
);
goOn
=
false
;
}
}
while
(
goOn
);
}
return
weekList
.
toString
();
}
/**
* 获取起止日期
*
* @param sdf 需要显示的日期格式
* @param date 需要参照的日期
* @param n 最近n周
* @param option 0 开始日期;1 结束日期
* @param k 0 包含本周 1 不包含本周
* @return
*/
public
static
String
getFromToDate
(
SimpleDateFormat
sdf
,
Date
date
,
int
n
,
int
option
,
int
k
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
int
dayOfWeek
=
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
int
offset
=
0
==
option
?
1
-
dayOfWeek
:
7
-
dayOfWeek
;
int
amount
=
0
==
option
?
offset
-
(
n
-
1
+
k
)
*
7
:
offset
-
k
*
7
;
calendar
.
add
(
Calendar
.
DATE
,
amount
);
return
sdf
.
format
(
calendar
.
getTime
());
}
/**
* 根据当前日期获得最近n周的日期区间(包含本周)
*
* @param n
* @param sdf
* @return
*/
public
static
String
getNWeekTimeInterval
(
int
n
,
String
format
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
format
);
// 设置日期格式
String
beginDate
=
getFromToDate
(
sdf
,
new
Date
(),
n
,
0
,
0
);
String
endDate
=
getFromToDate
(
sdf
,
new
Date
(),
n
,
1
,
0
);
return
beginDate
+
","
+
endDate
;
}
/**
* 根据当前日期获得最近n周的日期区间(不包含本周)
*
* @param n
* @param sdf
* @return
*/
public
static
String
getNWeekTimeIntervalTwo
(
int
n
,
String
format
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
format
);
// 设置日期格式
String
beginDate
=
getFromToDate
(
sdf
,
new
Date
(),
n
,
0
,
1
);
String
endDate
=
getFromToDate
(
sdf
,
new
Date
(),
n
,
1
,
1
);
return
beginDate
+
","
+
endDate
;
}
/**
* 根据当前日期获得本周的日期区间(本周周一和周日日期)
*
* @param sdf
* @return
*/
public
static
String
getThisWeekTimeInterval
(
String
format
)
{
return
getNWeekTimeInterval
(
1
,
format
);
}
/**
* 根据当前日期获得上周的日期区间(上周周一和周日日期)
*
* @param sdf
* @return
*/
public
static
String
getLastWeekTimeInterval
(
String
format
)
{
return
getNWeekTimeIntervalTwo
(
1
,
format
);
}
/**
* 获取某个日期最近一个的星期日
*
* @return
*/
public
static
Date
getLatestWeekend
(
Date
date
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
int
w
=
cal
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
Date
endDate
=
TDateUtil
.
nextNumDay
(
date
,
w
*
-
1
);
return
endDate
;
}
/**
* 获取N周的星期一的日期(正加负减)
*
* @param date
* @return
*/
public
static
Date
getMinMonday
(
Date
date
,
int
weekNum
)
{
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
int
w
=
cal
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
Date
endDate
=
TDateUtil
.
nextNumDay
(
date
,
w
*
-
1
);
Date
startDate
=
TDateUtil
.
nextNumDay
(
endDate
,
(
weekNum
*
7
)
+
1
);
return
startDate
;
}
/**
* 获取某个月加几个月后一号的日期
*/
@SuppressWarnings
(
"static-access"
)
public
static
Date
getAddMonThDay
(
Date
date
,
int
i
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
add
(
calendar
.
MONTH
,
i
);
calendar
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
String
last
=
format
.
format
(
calendar
.
getTime
());
date
=
getDate
(
last
,
"yyyy-MM-dd"
);
return
date
;
}
/**
* 某个月最后一天
*/
public
static
Date
getAnyMonthLastDay
(
Date
date
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
// 获取当前月最后一天
Calendar
ca
=
Calendar
.
getInstance
();
ca
.
setTime
(
date
);
ca
.
set
(
Calendar
.
DAY_OF_MONTH
,
ca
.
getActualMaximum
(
Calendar
.
DAY_OF_MONTH
));
String
last
=
format
.
format
(
ca
.
getTime
());
date
=
getDate
(
last
,
"yyyy-MM-dd"
);
return
date
;
}
public
static
Date
getDate
(
Date
date
,
String
type
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
type
);
String
s
=
format
.
format
(
date
);
return
getDate
(
s
,
type
);
}
/**
* 获取去年今天的日期
*/
public
static
Date
getLastYearTodayDate
()
{
Calendar
instance
=
Calendar
.
getInstance
();
instance
.
add
(
Calendar
.
YEAR
,
-
1
);
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
String
s
=
format
.
format
(
instance
.
getTime
());
return
getDate
(
s
,
"yyyy-MM-dd"
);
}
/**
* 获取昨天的日期
*
* @param type
* @return
*/
public
static
String
getYesterdayDateByType
(
String
type
)
{
Calendar
instance
=
Calendar
.
getInstance
();
instance
.
add
(
Calendar
.
DAY_OF_MONTH
,
-
1
);
Date
time
=
instance
.
getTime
();
SimpleDateFormat
format
=
new
SimpleDateFormat
(
type
);
return
format
.
format
(
time
);
}
/**
* 判断两个时间是不是在同一个月
*/
public
static
boolean
isSameMonth
(
Date
date1
,
Date
date2
)
{
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
date1
);
int
month1
=
c
.
get
(
Calendar
.
MONTH
);
c
.
setTime
(
date2
);
int
month2
=
c
.
get
(
Calendar
.
MONTH
);
if
(
month1
==
month2
)
{
return
true
;
}
return
false
;
}
/**
* 间隔天数
*
* @param startTime
* @param endTime
* @return
*/
public
static
int
isolateDayNum
(
String
startTime
,
String
endTime
)
{
Date
startDate
=
getDate
(
startTime
,
"yyyy-MM-dd"
);
Date
endDate
=
getDate
(
endTime
,
"yyyy-MM-dd"
);
long
differentMillis
=
endDate
.
getTime
()
-
startDate
.
getTime
();
long
dayNum
=
differentMillis
/
(
1000
*
60
*
60
*
24
);
return
(
int
)
dayNum
;
}
/**
* 获取某月最后一天的时间
*
* @param yearMonth
* @return
*/
public
static
String
getLastDateTimeOfMonth
(
String
yearMonth
)
{
SimpleDateFormat
format0
=
new
SimpleDateFormat
(
"yyyy-MM"
);
SimpleDateFormat
format1
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
Calendar
instance
=
Calendar
.
getInstance
();
try
{
Date
parse
=
format0
.
parse
(
yearMonth
);
instance
.
setTime
(
parse
);
instance
.
set
(
Calendar
.
DAY_OF_MONTH
,
instance
.
getActualMaximum
(
Calendar
.
DAY_OF_MONTH
));
instance
.
set
(
Calendar
.
HOUR_OF_DAY
,
23
);
instance
.
set
(
Calendar
.
MINUTE
,
59
);
instance
.
set
(
Calendar
.
SECOND
,
59
);
String
format
=
format1
.
format
(
instance
.
getTime
());
return
format
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
Date
getStrToDate
(
String
str
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy年MM月dd日"
);
Date
date
=
null
;
try
{
if
(
str
==
null
)
{
date
=
null
;
}
else
{
date
=
dateFormat
.
parse
(
str
);
}
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
date
;
}
public
static
int
getStageByDate
(
Date
date
)
{
Calendar
instance
=
Calendar
.
getInstance
();
instance
.
setTime
(
date
);
//当前时间
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"HH:mm:ss"
);
String
format
=
dateFormat
.
format
(
date
);
try
{
Date
currentTime
=
dateFormat
.
parse
(
format
);
Date
parse1
=
dateFormat
.
parse
(
"05:00:00"
);
Date
parse2
=
dateFormat
.
parse
(
"11:00:00"
);
Date
parse3
=
dateFormat
.
parse
(
"17:00:00"
);
Date
parse4
=
dateFormat
.
parse
(
"00:00:00"
);
//A:05:00-11:00 | B:11:00-17:00 | C:00:00-05:00,17:00-00:00
if
(
currentTime
.
after
(
parse4
)
&&
currentTime
.
before
(
parse1
))
{
return
3
;
}
else
if
(
currentTime
.
after
(
parse1
)
&&
currentTime
.
before
(
parse2
))
{
return
1
;
}
else
if
(
currentTime
.
after
(
parse2
)
&&
currentTime
.
before
(
parse3
))
{
return
2
;
}
else
if
(
currentTime
.
after
(
parse3
)
&&
currentTime
.
after
(
parse4
))
{
return
4
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
0
;
}
public
static
String
getCurrentYear
()
{
Calendar
date
=
Calendar
.
getInstance
();
String
year
=
String
.
valueOf
(
date
.
get
(
Calendar
.
YEAR
));
return
year
;
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/xzsz/SingleSubmitResp.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
xzsz
;
import
java.io.Serializable
;
/**
* @author: zj
* @Date: 2023/8/22 14:26
*/
public
class
SingleSubmitResp
{
private
String
isSuccess
;
private
String
charset
;
private
String
errorCode
;
private
String
errorMessage
;
private
Data
data
;
public
String
getIsSuccess
()
{
return
isSuccess
;
}
public
void
setIsSuccess
(
String
isSuccess
)
{
this
.
isSuccess
=
isSuccess
;
}
public
String
getCharset
()
{
return
charset
;
}
public
void
setCharset
(
String
charset
)
{
this
.
charset
=
charset
;
}
public
String
getErrorCode
()
{
return
errorCode
;
}
public
void
setErrorCode
(
String
errorCode
)
{
this
.
errorCode
=
errorCode
;
}
public
String
getErrorMessage
()
{
return
errorMessage
;
}
public
void
setErrorMessage
(
String
errorMessage
)
{
this
.
errorMessage
=
errorMessage
;
}
public
Data
getData
()
{
return
data
;
}
public
void
setData
(
Data
data
)
{
this
.
data
=
data
;
}
public
static
class
Data
implements
Serializable
{
private
static
final
long
serialVersionUID
=
887647888669372371L
;
private
String
outerTradeNo
;
public
Data
()
{
}
public
String
getOuterTradeNo
()
{
return
outerTradeNo
;
}
public
void
setOuterTradeNo
(
String
outerTradeNo
)
{
this
.
outerTradeNo
=
outerTradeNo
;
}
}
}
csm-service/cms-service-user/src/main/java/com/mmc/iuav/user/xzsz/WithdrawalResp.java
0 → 100644
浏览文件 @
cb5118ae
package
com
.
mmc
.
iuav
.
user
.
xzsz
;
import
java.math.BigDecimal
;
/**
* @author: zj
* @Date: 2023/8/22 14:43
*/
public
class
WithdrawalResp
{
private
String
isSuccess
;
private
String
charset
;
private
Data
data
;
public
String
getIsSuccess
()
{
return
isSuccess
;
}
public
void
setIsSuccess
(
String
isSuccess
)
{
this
.
isSuccess
=
isSuccess
;
}
public
String
getCharset
()
{
return
charset
;
}
public
void
setCharset
(
String
charset
)
{
this
.
charset
=
charset
;
}
public
Data
getData
()
{
return
data
;
}
public
void
setData
(
Data
data
)
{
this
.
data
=
data
;
}
public
static
class
Data
{
private
String
outerTradeNo
;
private
String
notifyType
;
private
String
empName
;
private
String
empPhone
;
private
String
licenseType
;
private
String
licenseId
;
private
String
settleType
;
private
String
payAccount
;
private
String
positionName
;
private
BigDecimal
payAmount
;
private
String
tradeStatus
;
private
String
tradeTime
;
private
String
frontLogNo
;
private
String
tradeResult
;
private
String
tradeFailCode
;
public
Data
()
{
}
public
String
getOuterTradeNo
()
{
return
outerTradeNo
;
}
public
void
setOuterTradeNo
(
String
outerTradeNo
)
{
this
.
outerTradeNo
=
outerTradeNo
;
}
public
String
getNotifyType
()
{
return
notifyType
;
}
public
void
setNotifyType
(
String
notifyType
)
{
this
.
notifyType
=
notifyType
;
}
public
String
getEmpName
()
{
return
empName
;
}
public
void
setEmpName
(
String
empName
)
{
this
.
empName
=
empName
;
}
public
String
getEmpPhone
()
{
return
empPhone
;
}
public
void
setEmpPhone
(
String
empPhone
)
{
this
.
empPhone
=
empPhone
;
}
public
String
getLicenseType
()
{
return
licenseType
;
}
public
void
setLicenseType
(
String
licenseType
)
{
this
.
licenseType
=
licenseType
;
}
public
String
getLicenseId
()
{
return
licenseId
;
}
public
void
setLicenseId
(
String
licenseId
)
{
this
.
licenseId
=
licenseId
;
}
public
String
getSettleType
()
{
return
settleType
;
}
public
void
setSettleType
(
String
settleType
)
{
this
.
settleType
=
settleType
;
}
public
String
getPayAccount
()
{
return
payAccount
;
}
public
void
setPayAccount
(
String
payAccount
)
{
this
.
payAccount
=
payAccount
;
}
public
String
getPositionName
()
{
return
positionName
;
}
public
void
setPositionName
(
String
positionName
)
{
this
.
positionName
=
positionName
;
}
public
BigDecimal
getPayAmount
()
{
return
payAmount
;
}
public
void
setPayAmount
(
BigDecimal
payAmount
)
{
this
.
payAmount
=
payAmount
;
}
public
String
getTradeStatus
()
{
return
tradeStatus
;
}
public
void
setTradeStatus
(
String
tradeStatus
)
{
this
.
tradeStatus
=
tradeStatus
;
}
public
String
getTradeTime
()
{
return
tradeTime
;
}
public
void
setTradeTime
(
String
tradeTime
)
{
this
.
tradeTime
=
tradeTime
;
}
public
String
getFrontLogNo
()
{
return
frontLogNo
;
}
public
void
setFrontLogNo
(
String
frontLogNo
)
{
this
.
frontLogNo
=
frontLogNo
;
}
public
String
getTradeResult
()
{
return
tradeResult
;
}
public
void
setTradeResult
(
String
tradeResult
)
{
this
.
tradeResult
=
tradeResult
;
}
public
String
getTradeFailCode
()
{
return
tradeFailCode
;
}
public
void
setTradeFailCode
(
String
tradeFailCode
)
{
this
.
tradeFailCode
=
tradeFailCode
;
}
}
}
csm-service/cms-service-user/src/main/resources/application-dev.yml
浏览文件 @
cb5118ae
...
...
@@ -69,6 +69,28 @@ third-party:
qcc
:
app-key
:
5015e664848d406ab1ca4b505c3da803
secret-key
:
7C4DB8CCECC148175E46392CC0A1B410
xzsz
:
# appKey: 1e8e59e056be41f8a05c090964d7ce37
# appSecret: ceshihuanjingyanshizhanghao00000
# aes: 0000000000000000
# domain: https://uat.xzsz.ltd/
# position: 销售推广
# taxFundId: xxxxxxxxxxxxxxxxxxxxxxx
appKey
:
37f76305f1864339adc8d6d03fbf918d
appSecret
:
hangzhouyunxiangfeikeji000000000
aes
:
'
0000000000000000'
domain
:
https://saas.xzsz.ltd
position
:
市场推广
taxFundId
:
0b0376083af4435885bd5d5cd3d63053
authNotify
:
https://test.iuav.shop/userapp/xz/xzAuthNotify
withdrawNotify
:
https://test.iuav.shop/userapp/xz/xzWithdrawNotify
fdd
:
appid
:
407664
appkey
:
q146q3Cjmi7Y6BVl8jtZK9pH
version
:
2
host
:
https://testapi.fadada.com:8443/api/
mmc-url
:
https://test.iuav.shop/userapp/
iuav
:
pay
:
...
...
csm-service/cms-service-user/src/main/resources/application-local.yml
浏览文件 @
cb5118ae
...
...
@@ -18,7 +18,7 @@ spring:
port
:
5672
username
:
MjphbXFwLWNuLXp2cDJvemhuajAwMTpMVEFJNEZ6Q3B5ckEzM1BlZ254V1M2WFY=
password
:
RTg3OUMxQzk4NzU0NDQ4RkQ1RDg4MkEzQjY4M0M3MkQxOTM2QkEyNDoxNjUyNDA4NDk0NDg4
virtual-host
:
/
virtual-host
:
dev
wx
:
sub
:
...
...
@@ -38,6 +38,22 @@ third-party:
qcc
:
app-key
:
5015e664848d406ab1ca4b505c3da803
secret-key
:
7C4DB8CCECC148175E46392CC0A1B410
xzsz
:
appKey
:
1e8e59e056be41f8a05c090964d7ce37
appSecret
:
ceshihuanjingyanshizhanghao00000
aes
:
'
0000000000000000'
domain
:
https://uat.xzsz.ltd/
position
:
销售推广
taxFundId
:
8ae605f565884a1f9a5e91d5a661ce58
authNotify
:
https://test.iuav.shop/userapp/xz/xzAuthNotify
withdrawNotify
:
https://test.iuav.shop/userapp/xz/xzWithdrawNotify
fdd
:
appid
:
407664
appkey
:
q146q3Cjmi7Y6BVl8jtZK9pH
version
:
2
host
:
https://testapi.fadada.com:8443/api/
mmc-url
:
https://test.iuav.shop/userapp/
iuav
:
pay
:
...
...
csm-service/cms-service-user/src/main/resources/application-prod.yml
浏览文件 @
cb5118ae
...
...
@@ -67,6 +67,15 @@ third-party:
qcc
:
app-key
:
5015e664848d406ab1ca4b505c3da803
secret-key
:
7C4DB8CCECC148175E46392CC0A1B410
xzsz
:
appKey
:
37f76305f1864339adc8d6d03fbf918d
appSecret
:
hangzhouyunxiangfeikeji000000000
aes
:
'
0000000000000000'
domain
:
https://saas.xzsz.ltd
position
:
市场推广
taxFundId
:
0b0376083af4435885bd5d5cd3d63053
authNotify
:
https://www.iuav.shop/userapp/xz/xzAuthNotify
withdrawNotify
:
https://www.iuav.shop/userapp/xz/xzWithdrawNotify
iuav
:
pay
:
...
...
csm-service/cms-service-user/src/main/resources/lib/fdd-verify-process-1.8.5.jar
0 → 100644
浏览文件 @
cb5118ae
File added
csm-service/cms-service-user/src/main/resources/lib/piggy-settlement-sdk-1.7.0.jar
0 → 100644
浏览文件 @
cb5118ae
File added
csm-service/cms-service-user/src/main/resources/mapper/BackUserAccountDao.xml
浏览文件 @
cb5118ae
...
...
@@ -76,12 +76,22 @@
</where>
</update>
<!--
<update id="disableBackUserAccountDO">
update back_user_account
set disable = 1, account_no = #{accountNo}
set disable = 1,
account_no = #{accountNo}
where disable = 0
and id = #{id}
</update>
-->
<delete
id=
"disableBackUserAccountDO"
>
delete
from back_user_account
where id =
#{id}
</delete>
<update
id=
"updatePassword"
>
update back_user_account
...
...
csm-service/cms-service-user/src/main/resources/mapper/UserServiceDao.xml
浏览文件 @
cb5118ae
...
...
@@ -440,5 +440,26 @@
where phone_num = #{phoneNum}
and disable = 0
</select>
<select
id=
"getUserAccountInfoByOpenId"
resultType=
"com.mmc.iuav.user.entity.UserAccountDO"
>
select id,
phone_num,
user_name,
nick_name,
user_img,
open_id,
union_id,
user_sex,
email,
`source`,
account_status,
remark,
port_type,
disable,
create_time,
update_time
from user_account
where open_id = #{openid}
and disable = 0
</select>
</mapper>
csm-service/cms-service-user/src/main/resources/mapper/UserSubInfoDao.xml
浏览文件 @
cb5118ae
...
...
@@ -5,14 +5,14 @@
<mapper
namespace=
"com.mmc.iuav.user.dao.UserSubInfoDao"
>
<resultMap
id=
"userSubInfoResultMap"
type=
"com.mmc.iuav.user.entity.UserSubInfoDO"
>
<id
property=
"id"
column=
"id"
/>
<result
property=
"openId"
column=
"open_id"
/>
<result
property=
"unionId"
column=
"union_id"
/>
<result
property=
"nickName"
column=
"nick_name"
/>
<result
property=
"regStatus"
column=
"reg_status"
/>
<result
property=
"deleted"
column=
"is_deleted"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateTime"
column=
"update_time"
/>
<id
property=
"id"
column=
"id"
/>
<result
property=
"openId"
column=
"open_id"
/>
<result
property=
"unionId"
column=
"union_id"
/>
<result
property=
"nickName"
column=
"nick_name"
/>
<result
property=
"regStatus"
column=
"reg_status"
/>
<result
property=
"deleted"
column=
"is_deleted"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateTime"
column=
"update_time"
/>
</resultMap>
<select
id=
"getUserSubInfo"
resultMap=
"userSubInfoResultMap"
parameterType=
"String"
>
...
...
@@ -31,7 +31,7 @@
</select>
<select
id=
"getUserSubInfoByUnionId"
resultMap=
"userSubInfoResultMap"
parameterType=
"String"
>
select usi.id,usi.open_id,usi.union_id,usi.nick_name,usi.is_deleted
select usi.id,usi.open_id,usi.union_id,usi.nick_name,usi.is_deleted
,usi.reg_status
from user_sub_info usi
where usi.union_id = #{unionId} and usi.is_deleted=0
</select>
...
...
csm-service/cms-service-user/src/main/resources/mapper/fdd/UserFddAuthDao.xml
0 → 100644
浏览文件 @
cb5118ae
<?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.mmc.iuav.user.dao.fdd.UserFddAuthDao"
>
<resultMap
id=
"appUserFddResultMap"
type=
"com.mmc.iuav.user.entity.fdd.UserFddDO"
>
<id
property=
"id"
column=
"id"
/>
<result
property=
"unionId"
column=
"union_id"
/>
<result
property=
"customerId"
column=
"customer_id"
/>
<result
property=
"personVerifyStatus"
column=
"person_verify_status"
/>
<result
property=
"entVerifyStatus"
column=
"ent_verify_status"
/>
<result
property=
"accountType"
column=
"account_type"
/>
<result
property=
"updateTime"
column=
"update_time"
/>
<result
property=
"createTime"
column=
"create_time"
/>
</resultMap>
<insert
id=
"insertAppUserFdd"
parameterType=
"com.mmc.iuav.user.entity.fdd.UserFddDO"
keyProperty=
"id"
useGeneratedKeys=
"true"
>
insert into user_fdd
(union_id, customer_id, person_verify_status, ent_verify_status, account_type, create_time)
values (#{unionId}, #{customerId}, #{personVerifyStatus}, #{entVerifyStatus}, #{accountType}, NOW())
</insert>
<insert
id=
"insertVerifyInfo"
useGeneratedKeys=
"true"
keyProperty=
"id"
parameterType=
"com.mmc.iuav.user.entity.fdd.FddVerifyInfoDO"
>
insert into fdd_verify_info
(user_fdd_id, customer_id, transaction_no, url, create_time)
values (#{userFddId}, #{customerId}, #{transactionNo}, #{url}, NOW())
</insert>
<update
id=
"updateCompanyCertStatus"
>
update user_fdd
set ent_verify_status = #{status}
where customer_id = #{customerId}
</update>
<select
id=
"checkRegisterFdd"
resultType=
"com.mmc.iuav.user.entity.fdd.UserFddDO"
>
select id,
union_id,
customer_id,
person_verify_status,
ent_verify_status,
account_type,
create_time,
update_time
from user_fdd
where union_id = #{unionId}
and account_type = #{flag}
and is_deleted = 0
</select>
<select
id=
"getVerifyUrl"
resultType=
"com.mmc.iuav.user.entity.fdd.FddVerifyInfoDO"
>
select id, user_fdd_id, customer_id, transaction_no, url, create_time, update_time
from fdd_verify_info
where customer_id = #{customerId}
</select>
<select
id=
"getAppUserFddInfo"
resultType=
"com.mmc.iuav.user.entity.fdd.UserFddDO"
>
select id, customer_id, person_verify_status, ent_verify_status, account_type, create_time, update_time
from user_fdd
where union_id = #{unionId}
</select>
</mapper>
\ No newline at end of file
csm-service/cms-service-user/src/main/resources/mapper/wallet/PayWalletDao.xml
浏览文件 @
cb5118ae
...
...
@@ -10,6 +10,117 @@
values (#{userAccountId}, #{cashAmt}, #{cashPaid}, #{cashFreeze}, #{salaryAmt}, #{salaryPaid}, #{salaryFreeze},
#{salaryWdl})
</insert>
<insert
id=
"insertPayLogDO"
>
insert into pay_log (user_account_id,
pay_no,
pay_method,
cash_amt_paid,
salary_amt_paid,
pay_time,
remark,
operate_user)
values (#{userAccountId}, #{payNo}, #{payMethod}, #{cashAmtPaid}, #{salaryAmtPaid}, NOW(), #{remark},
#{operateUser})
</insert>
<insert
id=
"insertWithdrawalLog"
>
insert into withdrawal_log(user_account_id,
xz_withdrawal_apply_id,
pay_no,
pay_method,
pay_time,
salary_freeze,
salary_paid)
values (#{userAccountId}, #{xzWithdrawalApplyId}, #{payNo}, #{payMethod}, #{payTime}, #{salaryFreeze},
#{salaryPaid})
</insert>
<update
id=
"updatePayWallet"
>
update pay_wallet
<set>
<if
test=
"pid != null"
>
pid = #{pid} + 1,
</if>
<if
test=
"cashAmt != null"
>
cash_amt = #{cashAmt},
</if>
<if
test=
"cashFreeze != null"
>
cash_freeze = #{cashFreeze},
</if>
<if
test=
"salaryAmt != null"
>
salary_amt = #{salaryAmt},
</if>
<if
test=
"salaryFreeze != null"
>
salary_freeze = #{salaryFreeze},
</if>
<if
test=
"wdlFreeze != null"
>
wdl_freeze = #{wdlFreeze},
</if>
<if
test=
"salaryWdl != null"
>
salary_wdl =#{salaryWdl}
</if>
</set>
where user_account_id = #{userAccountId} and pid = #{pid}
</update>
<update
id=
"updateWithdrawalApply"
>
update xz_withdrawal_apply
<set>
<if
test=
"applyStatus != null"
>
apply_status = #{applyStatus},
</if>
<if
test=
"approveUser != null"
>
approve_user = #{approveUser},
</if>
<if
test=
"approveTime != null"
>
approve_time = #{approveTime},
</if>
<if
test=
"remark != null and remark != ''"
>
remark = #{remark},
</if>
<if
test=
"chargeAmount != null"
>
charge_amount = #{chargeAmount},
</if>
<if
test=
"tradeStatus != null"
>
trade_status = #{tradeStatus},
</if>
<if
test=
"tradeResult != null"
>
trade_result = #{tradeResult},
</if>
<if
test=
"remarks != null"
>
remarks = #{remarks},
</if>
<if
test=
"taxFundId != null"
>
tax_fund_id = #{taxFundId},
</if>
<if
test=
"wechatAppId !=null"
>
wechat_app_id = #{wechatAppId},
</if>
<if
test=
"tradeTime !=null"
>
trade_time = #{tradeTime},
</if>
<if
test=
"frontLogNo !=null"
>
front_log_no = #{frontLogNo},
</if>
<if
test=
"tradeFailCode !=null"
>
trade_fail_code = #{tradeFailCode},
</if>
<if
test=
"submitStatus !=null"
>
submit_status = #{submitStatus},
</if>
<if
test=
"errorCode != null"
>
error_code = #{errorCode},
</if>
<if
test=
"errorMessage != null"
>
error_message =#{errorMessage}
</if>
</set>
<where>
<if
test=
"id != null"
>
id = #{id}
</if>
<if
test=
"outerTradeNo != null"
>
outer_trade_no = #{outerTradeNo}
</if>
</where>
</update>
<select
id=
"getPayWalletByUser"
resultType=
"com.mmc.iuav.user.entity.wallet.PayWalletDO"
>
select id,
...
...
@@ -21,9 +132,283 @@
salary_amt,
salary_paid,
salary_freeze,
wdl_freeze,
salary_wdl,
create_time
from pay_wallet
where user_account_id = #{userAccountId}
</select>
<select
id=
"getPayLog"
resultType=
"com.mmc.iuav.user.entity.wallet.PayLogDO"
>
SELECT pl.id,
pl.user_account_id,
pl.pay_no,
pl.pay_method,
pl.cash_amt_paid,
pl.salary_amt_paid,
pl.pay_time,
pl.remark,
pl.operate_user,
pl.create_time,
wd.`name`
FROM pay_log pl
INNER JOIN wallet_dictionary wd ON pl.pay_method = wd.`code`
<where>
pl.user_account_id = #{userAccountId}
<if
test=
"startTime != null and startTime != '' "
>
and pl.pay_time
>
= STR_TO_DATE(#{startTime},'%Y-%m-%d
%H:%i:%s')
</if>
<if
test=
"endTime != null and endTime != '' "
>
and pl.pay_time
<
= STR_TO_DATE(#{endTime},'%Y-%m-%d
%H:%i:%s')
</if>
</where>
ORDER BY pl.create_time DESC
limit #{pageNo}
, #{pageSize}
</select>
<select
id=
"countPayLog"
resultType=
"java.lang.Integer"
>
select count(*)
from pay_log pl
<where>
pl.user_account_id = #{userAccountId}
<if
test=
"startTime != null and startTime != '' "
>
and pl.pay_time
>
= STR_TO_DATE(#{startTime},'%Y-%m-%d
%H:%i:%s')
</if>
<if
test=
"endTime != null and endTime != '' "
>
and pl.pay_time
<
= STR_TO_DATE(#{endTime},'%Y-%m-%d
%H:%i:%s')
</if>
</where>
</select>
<select
id=
"getPayLogById"
resultType=
"com.mmc.iuav.user.entity.wallet.PayLogDO"
>
SELECT pl.id,
pl.user_account_id,
pl.pay_no,
pl.pay_method,
pl.cash_amt_paid,
pl.salary_amt_paid,
pl.pay_time,
pl.remark,
pl.operate_user,
pl.create_time,
wd.`name`
FROM pay_log pl
INNER JOIN wallet_dictionary wd ON pl.pay_method = wd.`code`
WHERE pl.id = #{id}
</select>
<select
id=
"getWithdrawalListByUserAccountId"
resultType=
"com.mmc.iuav.user.entity.XzWithdrawalApplyDO"
>
select id,
apply_status,
user_account_id,
bank_name,
bank_remo,
emp_num,
emp_name,
emp_phone,
license_id,
license_type,
`month`,
notify_url,
outer_trade_no,
pay_account,
pay_amount,
position_name,
remarks,
settle_type,
tax_fund_id,
wechat_app_id,
trade_status,
trade_time,
front_log_no,
trade_fail_code,
trade_result,
submit_status,
error_code,
error_message,
charge_amount,
pay_time,
create_time
from xz_withdrawal_apply
<where>
user_account_id = #{userAccountId}
<if
test=
"startTime != null and startTime != '' "
>
and create_time
>
= STR_TO_DATE(#{startTime},'%Y-%m-%d %H:%i:%s')
</if>
<if
test=
"endTime != null and endTime != '' "
>
and create_time
<
= STR_TO_DATE(#{endTime},'%Y-%m-%d %H:%i:%s')
</if>
</where>
order by create_time DESC
limit #{pageNo},#{pageSize}
</select>
<select
id=
"getWithdrawalApplyByIdOrOuterTradeNo"
resultType=
"com.mmc.iuav.user.entity.XzWithdrawalApplyDO"
>
select id,
apply_status,
user_account_id,
bank_name,
bank_remo,
emp_num,
emp_name,
emp_phone,
license_id,
license_type,
`month`,
notify_url,
outer_trade_no,
pay_account,
pay_amount,
position_name,
remarks,
settle_type,
tax_fund_id,
wechat_app_id,
trade_status,
trade_time,
front_log_no,
trade_fail_code,
trade_result,
submit_status,
error_code,
error_message,
charge_amount,
pay_time,
create_time
from xz_withdrawal_apply
<where>
<if
test=
"id != null"
>
id = #{id}
</if>
<if
test=
"outerTradeNo != null and outerTradeNo != ''"
>
outer_trade_no = #{outerTradeNo}
</if>
</where>
</select>
<select
id=
"listPayWithdrawalLog"
resultType=
"com.mmc.iuav.user.entity.wallet.WithdrawalLogDO"
>
select id,
user_account_id,
xz_withdrawal_apply_id,
pay_no,
pay_method,
pay_time,
salary_freeze,
create_time
from withdrawal_log
where xz_withdrawal_apply_id = #{id}
order by pay_time asc
</select>
<select
id=
"countPayWithdrawalLog"
resultType=
"java.lang.Integer"
>
select count(*)
from xz_withdrawal_apply
<where>
user_account_id = #{userAccountId}
<if
test=
"startTime != null and startTime != '' "
>
and create_time
>
= STR_TO_DATE(#{startTime},'%Y-%m-%d
%H:%i:%s')
</if>
<if
test=
"endTime != null and endTime != '' "
>
and create_time
<
= STR_TO_DATE(#{endTime},'%Y-%m-%d
%H:%i:%s')
</if>
</where>
</select>
<select
id=
"countWithdrawalApply"
resultType=
"java.lang.Integer"
>
select count(*)
from xz_withdrawal_apply
<where>
1 = 1
<if
test=
"tradeStatus != null"
>
and trade_status = #{tradeStatus}
</if>
<if
test=
"startTime != null and startTime != '' "
>
and create_time
>
=
STR_TO_DATE(#{startTime},'%Y-%m-%d %H:%i:%s')
</if>
<if
test=
"endTime != null and endTime != '' "
>
and create_time
<
= STR_TO_DATE(#{endTime},'%Y-%m-%d
%H:%i:%s')
</if>
<if
test=
"settleType != null and settleType != '' "
>
and settle_type = #{settleType}
</if>
<if
test=
"keyword != null and keyword != '' "
>
and (
emp_name like CONCAT('%',#{keyword},'%')
or
emp_phone like CONCAT('%',#{keyword},'%')
or pay_account like
CONCAT('%',#{keyword},'%')
or outer_trade_no like
CONCAT('%',#{keyword},'%')
)
</if>
</where>
</select>
<select
id=
"listPageWithdrawalApply"
resultType=
"com.mmc.iuav.user.entity.XzWithdrawalApplyDO"
>
select id,
user_account_id,
apply_status,
bank_name,
bank_remo,
emp_num,
emp_name,
emp_phone,
license_id,
license_type,
`month`,
notify_url,
outer_trade_no,
pay_account,
pay_amount,
position_name,
remarks,
settle_type,
tax_fund_id,
wechat_app_id,
trade_status,
trade_time,
front_log_no,
trade_fail_code,
trade_result,
submit_status,
error_code,
error_message,
charge_amount,
create_time,
pay_time,
remark
from xz_withdrawal_apply
<where>
1 = 1
<if
test=
"tradeStatus != null"
>
and trade_status = #{tradeStatus}
</if>
<if
test=
"startTime != null and startTime != '' "
>
and create_time
>
=
STR_TO_DATE(#{startTime},'%Y-%m-%d %H:%i:%s')
</if>
<if
test=
"endTime != null and endTime != '' "
>
and create_time
<
= STR_TO_DATE(#{endTime},'%Y-%m-%d
%H:%i:%s')
</if>
<if
test=
"settleType != null and settleType != '' "
>
and settle_type = #{settleType}
</if>
<if
test=
"keyword != null and keyword != '' "
>
and (
emp_name like CONCAT('%',#{keyword},'%')
or
emp_phone like CONCAT('%',#{keyword},'%')
or pay_account like
CONCAT('%',#{keyword},'%')
or outer_trade_no like
CONCAT('%',#{keyword},'%')
)
</if>
</where>
order by create_time desc
limit #{pageNo},#{pageSize}
</select>
</mapper>
csm-service/cms-service-user/src/main/resources/mapper/xzsz/WithdrawalDao.xml
0 → 100644
浏览文件 @
cb5118ae
<?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.mmc.iuav.user.dao.xzsz.WithdrawalDao"
>
<insert
id=
"insertWithdrawalApply"
useGeneratedKeys=
"true"
keyProperty=
"id"
parameterType=
"com.mmc.iuav.user.entity.XzWithdrawalApplyDO"
>
insert into xz_withdrawal_apply (user_account_id,
bank_name,
emp_name,
emp_phone,
license_id,
license_type,
`month`,
outer_trade_no,
pay_account,
pay_amount,
position_name,
settle_type,
trade_status)
values (#{userAccountId}, #{bankName}, #{empName}, #{empPhone}, #{licenseId}, #{licenseType}, #{month},
#{outerTradeNo}, #{payAccount}, #{payAmount}, #{positionName}, #{settleType}, #{tradeStatus})
</insert>
</mapper>
\ No newline at end of file
csm-service/cms-service-user/src/main/resources/mapper/xzsz/XzDao.xml
0 → 100644
浏览文件 @
cb5118ae
<?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.mmc.iuav.user.dao.xzsz.XzDao"
>
<insert
id=
"addAuth"
parameterType=
"com.mmc.iuav.user.entity.XzAuthDO"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into xz_auth(user_account_id, `name`, id_card_no, mobile, bank_account, subsidiary_name, document_id,
custom_params, contract_url, xz_auth_status, create_time)
values (#{userAccountId}, #{name}, #{idCardNo}, #{mobile}, #{bankAccount}, #{subsidiary_name}, #{document_id},
#{customParams}, #{contract_url}, #{xzAuthStatus}, NOW())
</insert>
<select
id=
"getXzAuthByUserAccountId"
resultType=
"com.mmc.iuav.user.entity.XzAuthDO"
>
select id,
user_account_id,
`name`,
id_card_no,
mobile,
bank_account,
subsidiary_name,
document_id,
custom_params,
contract_url,
create_time,
xz_auth_status
from xz_auth
where user_account_id = #{userAccountId}
and is_deleted = 0
</select>
</mapper>
csm-service/cms-service-user/src/main/resources/not-check.yml
浏览文件 @
cb5118ae
...
...
@@ -29,4 +29,8 @@ data-filter:
-
/userapp/cooperation/appBrandMessage
-
/userapp/pilot/detailPilot
-
/userapp/pilot/appListPilot
-
/userapp/xz/xzAuthNotify
-
/userapp/xz/xzWithdrawNotify
-
/userapp/pay/feignTopUpCash
-
/userapp/pay/feignWalletFlowNO
kustomization/overlays/dev/kustomization.yaml
浏览文件 @
cb5118ae
...
...
@@ -18,4 +18,4 @@ patches:
images
:
-
name
:
REGISTRY/NAMESPACE/IMAGE:TAG
newName
:
mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/cms
newTag
:
af55c66e9935fdc316c1f338ca46fe45bc16a77f
newTag
:
902a215520b53a526b6a1c467371e1a4b02f89bd
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论