Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cash-loan-flow-boss
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QG
cash-loan-flow-boss
Commits
58e80715
Commit
58e80715
authored
Dec 18, 2019
by
shangying
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
授信成功流程
parent
3eb842e1
Changes
53
Show whitespace changes
Inline
Side-by-side
Showing
53 changed files
with
4568 additions
and
17 deletions
+4568
-17
pom.xml
pom.xml
+48
-17
BootstrapNew.java
...ain/java/cn/quantgroup/cashloanflowboss/BootstrapNew.java
+27
-0
OneClickDataController.java
...s/api/oneclickdata/controller/OneClickDataController.java
+121
-0
OneClickData.java
...ashloanflowboss/api/oneclickdata/entity/OneClickData.java
+80
-0
OneClickJobConfig.java
...anflowboss/api/oneclickdata/entity/OneClickJobConfig.java
+47
-0
ChannelEnum.java
.../cashloanflowboss/api/oneclickdata/model/ChannelEnum.java
+24
-0
CreditStatusEnum.java
...loanflowboss/api/oneclickdata/model/CreditStatusEnum.java
+26
-0
LoanStatusEnum.java
...shloanflowboss/api/oneclickdata/model/LoanStatusEnum.java
+30
-0
OneClickModel.java
...ashloanflowboss/api/oneclickdata/model/OneClickModel.java
+19
-0
OneClickOV.java
...p/cashloanflowboss/api/oneclickdata/model/OneClickOV.java
+29
-0
OneClickReslut.java
...shloanflowboss/api/oneclickdata/model/OneClickReslut.java
+23
-0
TypeEnum.java
...oup/cashloanflowboss/api/oneclickdata/model/TypeEnum.java
+35
-0
OneClickDataRespository.java
.../api/oneclickdata/repository/OneClickDataRespository.java
+27
-0
OneClickJobConfigRepository.java
.../oneclickdata/repository/OneClickJobConfigRepository.java
+17
-0
ApplyLoanService.java
...anflowboss/api/oneclickdata/service/ApplyLoanService.java
+21
-0
CashWithdrawalService.java
...wboss/api/oneclickdata/service/CashWithdrawalService.java
+12
-0
CreditGrantingService.java
...wboss/api/oneclickdata/service/CreditGrantingService.java
+14
-0
FundsAllocationplanService.java
.../api/oneclickdata/service/FundsAllocationplanService.java
+7
-0
GDXDService.java
...ashloanflowboss/api/oneclickdata/service/GDXDService.java
+7
-0
H5BindingCardAndWithdrawDeposit.java
...oneclickdata/service/H5BindingCardAndWithdrawDeposit.java
+53
-0
ApplyLoanServiceImpl.java
...s/api/oneclickdata/service/Impl/ApplyLoanServiceImpl.java
+257
-0
CashWithdrawalServiceImpl.java
.../oneclickdata/service/Impl/CashWithdrawalServiceImpl.java
+105
-0
CreditGrantingServiceImpl.java
.../oneclickdata/service/Impl/CreditGrantingServiceImpl.java
+131
-0
LoanOperationServiceImpl.java
...i/oneclickdata/service/Impl/LoanOperationServiceImpl.java
+38
-0
OneClickDataOperateJobServiceImpl.java
...kdata/service/Impl/OneClickDataOperateJobServiceImpl.java
+1
-0
OneClickDataOperateServiceImpl.java
...lickdata/service/Impl/OneClickDataOperateServiceImpl.java
+56
-0
PhoneInfoServiceImpl.java
...s/api/oneclickdata/service/Impl/PhoneInfoServiceImpl.java
+178
-0
LoanOperationService.java
...owboss/api/oneclickdata/service/LoanOperationService.java
+26
-0
OneClickDataOperateJobService.java
...i/oneclickdata/service/OneClickDataOperateJobService.java
+37
-0
OneClickDataOperateService.java
.../api/oneclickdata/service/OneClickDataOperateService.java
+19
-0
PhoneInfoService.java
...anflowboss/api/oneclickdata/service/PhoneInfoService.java
+99
-0
RepaymentPlatService.java
...owboss/api/oneclickdata/service/RepaymentPlatService.java
+7
-0
ScheduleService.java
...oanflowboss/api/oneclickdata/service/ScheduleService.java
+7
-0
QuotaCredit.java
...ntgroup/cashloanflowboss/spi/xyqb/entity/QuotaCredit.java
+124
-0
QuotaCreditRepository.java
...anflowboss/spi/xyqb/repository/QuotaCreditRepository.java
+19
-0
AESUtil.java
...in/java/cn/quantgroup/cashloanflowboss/utils/AESUtil.java
+111
-0
BankCardNumberGenerator.java
...group/cashloanflowboss/utils/BankCardNumberGenerator.java
+79
-0
BankCardTypeEnum.java
...n/quantgroup/cashloanflowboss/utils/BankCardTypeEnum.java
+25
-0
BankNameEnum.java
...va/cn/quantgroup/cashloanflowboss/utils/BankNameEnum.java
+320
-0
ChineseIDCardNumberGenerator.java
.../cashloanflowboss/utils/ChineseIDCardNumberGenerator.java
+103
-0
CommonConstant.java
.../cn/quantgroup/cashloanflowboss/utils/CommonConstant.java
+57
-0
GetAuthorization.java
...n/quantgroup/cashloanflowboss/utils/GetAuthorization.java
+102
-0
GetBiNoAndFinanceProducts.java
...oup/cashloanflowboss/utils/GetBiNoAndFinanceProducts.java
+93
-0
GetEncryptContentAndMd5.java
...group/cashloanflowboss/utils/GetEncryptContentAndMd5.java
+82
-0
HttpUtils.java
.../java/cn/quantgroup/cashloanflowboss/utils/HttpUtils.java
+79
-0
LongStringParamer.java
.../quantgroup/cashloanflowboss/utils/LongStringParamer.java
+34
-0
LuhnUtils.java
.../java/cn/quantgroup/cashloanflowboss/utils/LuhnUtils.java
+31
-0
RandomlyGeneratedParameters.java
...p/cashloanflowboss/utils/RandomlyGeneratedParameters.java
+112
-0
EnvUtil.java
...java/cn/quantgroup/cashloanflowboss/utils/ci/EnvUtil.java
+164
-0
HttpRequest.java
...n/quantgroup/cashloanflowboss/utils/http/HttpRequest.java
+356
-0
HttpRequestTester.java
...tgroup/cashloanflowboss/utils/http/HttpRequestTester.java
+277
-0
HttpResultEntity.java
...ntgroup/cashloanflowboss/utils/http/HttpResultEntity.java
+42
-0
HttpService.java
...n/quantgroup/cashloanflowboss/utils/http/HttpService.java
+730
-0
No files found.
pom.xml
View file @
58e80715
...
...
@@ -19,7 +19,6 @@
</properties>
<dependencies>
<dependency>
...
...
@@ -163,7 +162,39 @@
<artifactId>
ant
</artifactId>
<version>
1.7.0
</version>
</dependency>
<!-- 测试类-->
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.12
</version>
</dependency>
<dependency>
<groupId>
org.springframework
</groupId>
<artifactId>
spring-test
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-test
</artifactId>
</dependency>
<!-- 测试类-->
<!-- testng-->
<dependency>
<groupId>
org.testng
</groupId>
<artifactId>
testng
</artifactId>
<version>
6.8.21
</version>
</dependency>
<!--<dependency>-->
<!--<groupId>tmf</groupId>-->
<!--<artifactId>autotmf</artifactId>-->
<!--<version>1.0-SNAPSHOT</version>-->
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>org.slf4j</groupId>-->
<!--<artifactId>slf4j-jdk14</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
<!--</dependency>-->
</dependencies>
...
...
src/main/java/cn/quantgroup/cashloanflowboss/BootstrapNew.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
;
import
com.ctrip.framework.apollo.spring.config.ApolloPropertySourceInitializer
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.ContextConfiguration
;
import
org.springframework.test.context.junit4.SpringRunner
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
(
classes
=
Bootstrap
.
class
,
webEnvironment
=
SpringBootTest
.
WebEnvironment
.
RANDOM_PORT
)
@ContextConfiguration
(
initializers
=
ApolloPropertySourceInitializer
.
class
)
public
class
BootstrapNew
{
@Value
(
"${NAMESPACE}"
)
private
String
nameSpace
;
@Value
(
"${passportapi.http}"
)
private
String
passportapiHttp
;
@Test
public
void
testStart
()
{
String
nameSpace1
=
nameSpace
;
System
.
out
.
println
(
"Hello,World!!!"
+
nameSpace1
);
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/controller/OneClickDataController.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
controller
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickReslut
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.TypeEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.OneClickDataOperateService
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
import
cn.quantgroup.cashloanflowboss.utils.RandomlyGeneratedParameters
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.validation.Valid
;
import
java.util.logging.Logger
;
/**
* Created by shang on 2019/12/3.
*/
@Slf4j
@RestController
@RequestMapping
(
"/oneclickdate"
)
public
class
OneClickDataController
{
@Autowired
private
OneClickDataOperateService
oneClickDataOperateService
;
OneClickModel
oneClickModelNew
;
@PostMapping
(
"/v1/type"
)
public
Result
OneClickDataOperate
(
@RequestBody
@Valid
OneClickModel
oneClickModel
)
throws
Exception
{
log
.
info
(
"实体类oneClickModel={}"
,
oneClickModel
);
if
(
oneClickModel
.
getType
().
isEmpty
())
{
log
.
info
(
"打印一下oneClickModel.getType()={}"
,
oneClickModel
.
getType
());
return
Result
.
buildFail
(
"操作类型必填"
);
}
else
{
oneClickModelNew
=
setDefaultValue
(
oneClickModel
);
log
.
info
(
"打印最新的oneClickModelNew={}"
,
oneClickModelNew
);
if
(
oneClickModel
.
getType
().
equals
(
String
.
valueOf
(
TypeEnum
.
APPLY
.
getCode
())))
{
return
OnekeyApply
(
oneClickModelNew
);
}
else
if
(
oneClickModel
.
getType
().
equals
(
String
.
valueOf
(
TypeEnum
.
CASHWITHDRAWAL
.
getCode
())))
{
return
OneKeyCashWithdrawal
(
oneClickModelNew
);
}
else
if
(
oneClickModel
.
getType
().
equals
(
String
.
valueOf
(
TypeEnum
.
CREDITSUCCESS
.
getCode
()))
||
oneClickModel
.
getType
().
equals
(
String
.
valueOf
(
TypeEnum
.
CREDITFAIL
.
getCode
())))
{
return
OneKeyCreditSuccessOrFail
(
oneClickModelNew
);
}
else
if
(
oneClickModel
.
getType
().
equals
(
String
.
valueOf
(
TypeEnum
.
LOANSUCCESS
.
getCode
()))
||
oneClickModel
.
getType
().
equals
(
String
.
valueOf
(
TypeEnum
.
LOANFAIL
.
getCode
())))
{
return
OneKeyLoanSuccessOrFail
(
oneClickModelNew
);
}
else
{
return
Result
.
buildFail
(
"没有匹配到操作类型Type"
);
}
}
}
public
Result
OnekeyApply
(
OneClickModel
oneClickModel
)
{
return
oneClickDataOperateService
.
OnekeyApply
(
oneClickModel
);
}
public
Result
OneKeyCashWithdrawal
(
OneClickModel
oneClickModel
)
{
oneClickDataOperateService
.
OneKeyCashWithdrawal
(
oneClickModel
);
return
null
;
}
public
Result
OneKeyCreditSuccessOrFail
(
OneClickModel
oneClickModel
)
throws
Exception
{
return
oneClickDataOperateService
.
OneKeyCreditSuccessOrFail
(
oneClickModel
);
}
public
Result
OneKeyLoanSuccessOrFail
(
OneClickModel
oneClickModel
)
{
// oneClickDataOperateService.OneKeyLoanSuccessOrFail(oneClickModel);
return
null
;
}
public
OneClickModel
setDefaultValue
(
OneClickModel
oneClickModel
){
if
(
StringUtils
.
isBlank
(
oneClickModel
.
getPhone
())){
String
randPhone
;
randPhone
=
RandomlyGeneratedParameters
.
getTel
();
oneClickModel
.
setPhone
(
randPhone
.
toString
());
}
if
(
StringUtils
.
isBlank
(
oneClickModel
.
getChannel
())){
oneClickModel
.
setChannel
(
"1"
);
}
if
(
StringUtils
.
isBlank
(
oneClickModel
.
getAmount
())
){
oneClickModel
.
setAmount
(
"10000"
);
}
if
(
StringUtils
.
isBlank
(
oneClickModel
.
getFundID
())){
oneClickModel
.
setFundID
(
"710"
);
}
if
(
StringUtils
.
isBlank
(
oneClickModel
.
getProductId
())){
oneClickModel
.
setProductId
(
"1"
);
}
if
(
StringUtils
.
isBlank
(
oneClickModel
.
getTermNo
())){
oneClickModel
.
setTermNo
(
"12"
);
}
log
.
info
(
"打印重新设置的oneClickModel={}"
,
oneClickModel
);
return
oneClickModel
;
}
public
static
void
main
(
String
[]
arg
)
throws
Exception
{
OneClickDataController
oneclick
=
new
OneClickDataController
();
OneClickModel
oneClickModel2
=
new
OneClickModel
();
oneClickModel2
.
setType
(
"1"
);
oneClickModel2
.
setChannel
(
"159858"
);
oneclick
.
OneClickDataOperate
(
oneClickModel2
);
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/entity/OneClickData.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
entity
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.CreditStatusEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.LoanStatusEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.TypeEnum
;
import
cn.quantgroup.cashloanflowboss.core.persistence.Primary
;
import
lombok.Data
;
import
javax.persistence.*
;
/**
* Created by shang on 2019/12/16.
*/
@Entity
@Table
(
name
=
"one_click_data"
)
@Data
public
class
OneClickData
extends
Primary
{
@Id
@Column
(
name
=
"id"
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
@Column
(
name
=
"phone"
)
private
String
phone
;
@Column
(
name
=
"token"
)
private
String
token
;
@Column
(
name
=
"user_id"
)
private
String
userId
;
@Column
(
name
=
"suserId"
)
private
String
suserId
;
@Column
(
name
=
"ocr_token"
)
private
String
ocrToken
;
@Column
(
name
=
"quota_record_order_no"
)
private
String
quotaRecordOrderNo
;
@Column
(
name
=
"account_id"
)
private
String
accountId
;
@Column
(
name
=
"pay_token"
)
private
String
payToken
;
@Column
(
name
=
"channel"
)
private
String
channel
;
@Column
(
name
=
"audit_result"
)
private
String
auditResult
;
@Column
(
name
=
"fund_corp_id"
)
private
String
fundCorpId
;
@Column
(
name
=
"product_id"
)
private
String
productId
;
@Column
(
name
=
"uuid"
)
private
String
uuid
;
@Column
(
name
=
"order_no"
)
private
String
orderNo
;
@Column
(
name
=
"channel_code"
)
private
String
channelcode
;
@Column
(
name
=
"card_id"
)
private
String
cardId
;
@Column
(
name
=
"card_bind_info_id"
)
private
String
cardBindInfoId
;
@Column
(
name
=
"loan_id"
)
private
String
loanId
;
@Column
(
name
=
"assign_people_num"
)
private
String
assignPeopleNum
;
@Column
(
name
=
"gyxd_token"
)
private
String
gyxdToken
;
@Column
(
name
=
"op_token"
)
private
String
opToken
;
@Column
(
name
=
"repayment_token"
)
private
String
repaymentToken
;
@Column
(
name
=
"pay_approach"
)
private
String
payApproach
;
@Column
(
name
=
"preserve_phone_no"
)
private
String
preservePhoneNo
;
@Column
(
name
=
"credit_status"
)
private
CreditStatusEnum
creditStatus
;
@Column
(
name
=
"loan_status"
)
private
LoanStatusEnum
loanStatus
;
@Column
(
name
=
"type"
)
private
Integer
type
;
@Column
(
name
=
"channel_order_no"
)
private
String
channelOrderNo
;
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/entity/OneClickJobConfig.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.entity;
//
//import lombok.Data;
//
//import javax.persistence.*;
//import java.sql.Timestamp;
//
///**
// * Created by shang on 2019/12/12.
// */
//@Entity
//@Table(name = "one_click_job_config")
//@Data
//public class OneClickJobConfig {
// @Id
// @Column(name = "id")
// @GeneratedValue(strategy = GenerationType.IDENTITY)
// private Long id;
//
// @Column(name = "job_name")
// private String jobName;
//
// @Column(name = "cron")
// private String cron;
//
// @Column(name = "sharding_total_count")
// private Integer shardingTotalCount;
//
// @Column(name = "sharding_item_parameters")
// private String shardingItemParameters;
//
// @Column(name = "description")
// private String description;
// //private String failover;
//
// @Column(name = "job_parameter")
// private String jobParameter;
//
// @Column(name = "job_class")
// private String jobClass;
//
// @Column(name = "is_active")
// private Boolean isActive;
//
// @Column(name = "created_at")
// private Timestamp createdAt;
//}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/model/ChannelEnum.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
model
;
import
lombok.Getter
;
/**
* Created by shang on 2019/12/11.
*/
@Getter
public
enum
ChannelEnum
{
ZHANGHZONG
(
"159858"
,
"掌众"
),
SHIGUANGFQ
(
"159865"
,
"时光分期"
),
XIAOJUMAO
(
"159869"
,
"时光分期"
),
GUOMEI
(
"159865"
,
"时光分期"
),
WEIDIAN
(
"159865"
,
"时光分期"
);
private
String
code
;
private
String
desc
;
ChannelEnum
(
String
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/model/CreditStatusEnum.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
model
;
import
lombok.Getter
;
/**
* 申请状态
* 0-发起申请风控审核中 1-风控审核拒绝 2-风控审核通过
* Created by shang on 2019/12/9.
*/
@Getter
public
enum
CreditStatusEnum
{
DEFAULT
(
0
,
"等待授信"
),
CREDIT_FAIL
(
1
,
"失败"
),
CREDIT_SUCC
(
2
,
"成功"
),
CREDIT_Not_Yet_Crediting
(
3
,
"尚未授信"
),
CREDIT_Waiting
(
4
,
"授信中"
);
private
int
code
;
private
String
desc
;
CreditStatusEnum
(
int
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/model/LoanStatusEnum.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
model
;
import
lombok.Getter
;
/**
* 放款状态
* 放款状态:50已申请提现、20等待马上金融放款、21已发送给马上金融, 等待放款、15查看还款计划、16借款完成、28放开失败
* @author shang
*/
@Getter
public
enum
LoanStatusEnum
{
DEFAULT
(
0
,
"未付款,未核销"
),
LOAN_UNCONFIRM
(
1
,
"资金方放款状态未知(未核销)"
),
LOAN_SUCC
(
15
,
"放款成功(已核销)"
),
LOAN_FAIL
(
28
,
"放款失败(等待退款)"
),
APPLY_WITHDRAWDEPOSIT
(
50
,
"已申请提现"
),
WAIT_JRLOAN
(
20
,
"等待马上金融放款"
),
TO_JRWAITLOAN
(
21
,
"已发送给马上金融, 等待放款"
),
AREADY_REPALYMENT
(
16
,
"等待马上金融放款"
);
private
int
code
;
private
String
desc
;
LoanStatusEnum
(
int
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/model/OneClickModel.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
model
;
import
cn.quantgroup.cashloanflowboss.component.validator.constraints.NotEmpty
;
import
lombok.Data
;
/**
* Created by shang on 2019/12/9.
*/
@Data
public
class
OneClickModel
{
private
String
phone
;
private
String
channel
;
private
String
termNo
;
private
String
amount
;
private
String
fundID
;
@NotEmpty
(
message
=
"type不能空"
)
private
String
type
;
private
String
productId
;
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/model/OneClickOV.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
model
;
import
lombok.Data
;
/**
* Created by shang on 2019/12/17.
*/
@Data
public
class
OneClickOV
{
private
String
loanId
;
private
String
loanMessage
;
private
String
creditMessage
;
public
OneClickOV
(){}
public
OneClickOV
(
String
loanId
,
String
loanMessage
,
String
creditMessage
){
this
.
loanId
=
loanId
;
this
.
loanMessage
=
loanMessage
;
this
.
creditMessage
=
creditMessage
;
}
public
OneClickOV
(
String
creditMessage
){
this
.
creditMessage
=
creditMessage
;
}
public
OneClickOV
(
String
loanId
,
String
creditMessage
){
this
.
loanId
=
loanId
;
this
.
creditMessage
=
creditMessage
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/model/OneClickReslut.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
model
;
import
lombok.Data
;
/**
* Created by shang on 2019/12/17.
*/
@Data
public
class
OneClickReslut
{
private
OneClickOV
oneClickOV
;
private
String
message
;
private
Integer
code
;
public
OneClickReslut
(){}
public
OneClickReslut
(
OneClickOV
oneClickOV
,
String
message
,
Integer
code
){
this
.
oneClickOV
=
oneClickOV
;
this
.
message
=
message
;
this
.
code
=
code
;
}
public
OneClickReslut
(
String
message
,
Integer
code
){
this
.
message
=
message
;
this
.
code
=
code
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/model/TypeEnum.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
model
;
import
lombok.Getter
;
/**
*
* Created by shang on 2019/12/9.
*/
@Getter
public
enum
TypeEnum
{
APPLY
(
1
,
"申请进件"
),
CREDITSUCCESS
(
2
,
"授信成功"
),
CREDITFAIL
(
3
,
"授信失败"
),
LOANSUCCESS
(
4
,
"放款成功"
),
LOANFAIL
(
5
,
"放款失败"
),
LIQUIDATION
(
6
,
"清算"
),
CASHWITHDRAWAL
(
7
,
"申请提现"
);
private
int
code
;
private
String
desc
;
TypeEnum
()
{
}
TypeEnum
(
int
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
TypeEnum
(
int
code
)
{
this
.
code
=
code
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/repository/OneClickDataRespository.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
repository
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickData
;
import
cn.quantgroup.cashloanflowboss.core.persistence.CashLoanFlowBossDataSource
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.Modifying
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* Created by shang on 2019/12/11.
*/
@CashLoanFlowBossDataSource
@Repository
public
interface
OneClickDataRespository
extends
JpaRepository
<
OneClickData
,
Long
>
{
// 通过手机号、渠道订单号、授信状态、放款状态查询
@Query
(
value
=
"select * from one_click_data where user_id=?1 and credit_status = ?2 and loan_status=?3 order by id desc limit 1"
,
nativeQuery
=
true
)
OneClickData
findByPhoneAndCreditStatusAndLoanStatus
(
String
userId
,
Integer
creditStatus
,
Integer
loanStatus
);
// 通过id修改 添加订单号 产品id token信息
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Modifying
@Query
(
value
=
"update one_click_data set quota_record_order_no=?1,order_no=?2,product_id=?3,token=?4 where id=?5"
,
nativeQuery
=
true
)
int
updateById
(
String
quotaRecordOrderNo
,
String
orderNo
,
String
productId
,
String
token
,
Long
id
);
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/repository/OneClickJobConfigRepository.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.repository;
//
//import cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickJobConfig;
//import cn.quantgroup.cashloanflowboss.core.persistence.CashLoanFlowBossDataSource;
//import org.springframework.data.jpa.repository.JpaRepository;
//import org.springframework.stereotype.Repository;
//
///**
// * Created by shang on 2019/12/12.
// */
//@CashLoanFlowBossDataSource
//@Repository
//public interface OneClickJobConfigRepository extends JpaRepository<OneClickJobConfig, Long> {
//
//// @Query(value = "select * from one_click_job_config where is_active = 1", nativeQuery = true)
//// List<OneClickJobConfig> findAllIsActive();
//}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/ApplyLoanService.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickReslut
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
import
com.alibaba.fastjson.JSONObject
;
/**
* Created by shang on 2019/12/3.
*/
public
interface
ApplyLoanService
{
public
static
boolean
reslut
=
true
;
Result
applyLoan
(
OneClickModel
oneClickModel
);
JSONObject
zhangZhongApply
(
OneClickModel
oneClickModel
);
JSONObject
shiGuangFenQiApply
();
JSONObject
xiaoJMApply
();
JSONObject
guoMeiApply
();
JSONObject
weiDianApply
();
JSONObject
defautApply
();
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/CashWithdrawalService.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
/**
* Created by shang on 2019/12/9.
*/
public
interface
CashWithdrawalService
{
Result
applyLoan
(
OneClickModel
oneClickModel
);
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/CreditGrantingService.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
/**
* Created by shang on 2019/12/3.
*/
public
interface
CreditGrantingService
{
/**
* 风控授信回调
*/
Result
authAmountAuditNotify
(
OneClickModel
oneClickModel
)
throws
Exception
;
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/FundsAllocationplanService.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public interface FundsAllocationplanService {
//}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/GDXDService.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public interface GDXDService {
//}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/H5BindingCardAndWithdrawDeposit.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/3.
// */
//public interface H5BindingCardAndWithdrawDeposit {
// /**
// * 前往提现页
// */
// void accountPro();
//
// /**
// * 查询用户额度表(获取 accountId)
// */
// void getXYQBAccountId();
//
// /**
// * 进入支付绑卡
// */
// void bindCard();
//
// /**
// * 绑卡发送短信
// */
// void cardAuthSms();
//
// /**
// * 绑卡确认
// */
// void cardAuthSmsConfirm();
//
// /**
// * 查询用户可用卡列表
// */
// void bindCardList();
//
// /**
// * 查询分配资金方
// */
// void accountTrial();
//
// /**
// * 绑卡后提现
// */
// void cashAfterBindingCard();
//
// /**
// * 查询loanID
// */
// void testSelectLoanId();
//
//
//}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/Impl/ApplyLoanServiceImpl.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
.
Impl
;
import
bsh.StringUtil
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickData
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.*
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.repository.OneClickDataRespository
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.ApplyLoanService
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.PhoneInfoService
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
import
cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus
;
import
cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration
;
import
cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterServiceImpl
;
import
cn.quantgroup.cashloanflowboss.utils.AESUtil
;
import
cn.quantgroup.cashloanflowboss.utils.ChineseIDCardNumberGenerator
;
import
cn.quantgroup.cashloanflowboss.utils.GetEncryptContentAndMd5
;
import
cn.quantgroup.cashloanflowboss.utils.http.HttpRequest
;
import
cn.quantgroup.user.retbean.XUser
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Created by shang on 2019/12/4.
*/
@Slf4j
@Service
public
class
ApplyLoanServiceImpl
implements
ApplyLoanService
{
String
idNo
=
ChineseIDCardNumberGenerator
.
generate
();
String
orderNo
=
"testOrderNo_0001"
;
@Value
(
"${qapi.http.net}"
)
private
String
qapiHttp
;
@Autowired
OneClickDataRespository
oneClickDataRespository
;
@Autowired
CLFCenterServiceImpl
clfCenterService
;
@Autowired
PhoneInfoService
phoneInfoService
;
OneClickOV
oneClickOV
;
ClfChannelConfiguration
clfChannelConfiguration
;
public
static
String
md5Keywy
=
"qEAxMJBv"
;
public
static
String
aesKeywy
=
"sxD8KO79EDK0N0AJ"
;
Result
oneClickReslut
=
null
;
@Override
public
Result
applyLoan
(
OneClickModel
oneClickModel
){
JSONObject
result
;
oneClickReslut
=
new
Result
();
oneClickOV
=
new
OneClickOV
();
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
ZHANGHZONG
.
getCode
())){
result
=
zhangZhongApply
(
oneClickModel
);
}
else
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
SHIGUANGFQ
.
getCode
())){
result
=
shiGuangFenQiApply
();
}
else
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
XIAOJUMAO
.
getCode
())){
result
=
xiaoJMApply
();
}
else
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
GUOMEI
.
getCode
())){
result
=
guoMeiApply
();
}
else
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
WEIDIAN
.
getCode
())){
result
=
weiDianApply
();
}
else
{
result
=
defautApply
();
}
String
getDecryption
=
AESUtil
.
decryptAfterBase64Decode
(
result
.
get
(
"context"
).
toString
(),
aesKeywy
);
log
.
info
(
"解密的getDecryption的结果={}"
+
getDecryption
);
JSONObject
getDecryptionResult
=
(
JSONObject
)
JSONObject
.
parse
(
getDecryption
);
log
.
info
(
"打印一下getDecryptionResult={}"
,
getDecryptionResult
.
get
(
"bizData"
));
JSONObject
bizData
=
(
JSONObject
)
JSONObject
.
parse
(
getDecryptionResult
.
get
(
"bizData"
).
toString
());
log
.
info
(
"bizData={}"
,
bizData
);
String
code
=
bizData
.
get
(
"code"
).
toString
();
String
businessCode
=
bizData
.
get
(
"businessCode"
).
toString
();
String
msg
=
bizData
.
get
(
"msg"
).
toString
();
log
.
info
(
"msg={}"
,
msg
);
if
(
code
.
equals
(
"0"
)
&&
businessCode
.
equals
(
"0000"
)){
//申请的数据插入数据库 one_click_data
OneClickData
oneClickData
=
new
OneClickData
();
oneClickData
.
setPhone
(
oneClickModel
.
getPhone
());
oneClickData
.
setChannel
(
GetEncryptContentAndMd5
.
getChannelName
(
oneClickModel
.
getChannel
()));
oneClickData
.
setChannelcode
(
oneClickModel
.
getChannel
());
oneClickData
.
setChannelOrderNo
(
orderNo
);
//通过手机号获取用户信息
XUser
xUser
=
phoneInfoService
.
selectUserID
(
oneClickModel
.
getPhone
());
oneClickData
.
setUserId
(
xUser
.
getId
().
toString
());
oneClickData
.
setUuid
(
xUser
.
getUuid
());
oneClickData
.
setType
(
Integer
.
parseInt
(
oneClickModel
.
getType
()));
oneClickData
.
setCreditStatus
(
CreditStatusEnum
.
DEFAULT
);
oneClickData
.
setLoanStatus
(
LoanStatusEnum
.
DEFAULT
);
oneClickData
.
setFundCorpId
(
oneClickModel
.
getFundID
());
// 把提现的数据存放到表one_click_data中
oneClickDataRespository
.
save
(
oneClickData
);
oneClickOV
.
setCreditMessage
(
CreditStatusEnum
.
DEFAULT
.
getDesc
());
oneClickOV
.
setLoanMessage
(
LoanStatusEnum
.
DEFAULT
.
getDesc
());
oneClickReslut
.
setData
(
oneClickOV
);
oneClickReslut
.
setCode
(
ApplicationStatus
.
SUCCESS
.
getCode
());
oneClickReslut
.
setMessage
(
msg
);
return
oneClickReslut
;
}
else
{
oneClickReslut
.
setMessage
(
msg
);
oneClickReslut
.
setData
(
oneClickOV
);
oneClickReslut
.
setCode
(
ApplicationStatus
.
FAILURE
.
getCode
());
return
oneClickReslut
;
}
}
@Override
public
JSONObject
zhangZhongApply
(
OneClickModel
oneClickModel
)
{
String
url
=
qapiHttp
+
"/ex/api/v2/applyLoan/ZHANGZHONG"
;
//测试
// String url = "http://qapi-arch.liangkebang.net"+"/ex/api/v2/applyLoan/ZHANGZHONG";
//获取当前的渠道秘钥
clfChannelConfiguration
=
clfCenterService
.
findChannelConfigurationByChannelId
(
Long
.
parseLong
(
oneClickModel
.
getChannel
().
toString
()));
md5Keywy
=
clfChannelConfiguration
.
getMd5Key
();
aesKeywy
=
clfChannelConfiguration
.
getAesKey
();
orderNo
=
"zhangzhong_userid1_"
+
oneClickModel
.
getPhone
()+
"_"
+
System
.
currentTimeMillis
();
String
name
=
"简介"
;
String
channelUserId
=
"zhangzhong_userid1_"
+
oneClickModel
.
getPhone
();
Map
<
String
,
Object
>
paras
=
new
HashMap
<
String
,
Object
>();
paras
.
put
(
"address"
,
"湖北省恩施州利川团堡"
);
paras
.
put
(
"applyAmount"
,
oneClickModel
.
getAmount
());
paras
.
put
(
"applyTerm"
,
oneClickModel
.
getTermNo
());
paras
.
put
(
"districtCode"
,
"123456"
);
paras
.
put
(
"education"
,
"MASTER"
);
paras
.
put
(
"email"
,
"22@qq.com"
);
paras
.
put
(
"emergencyContactNameA"
,
"孙打她"
);
paras
.
put
(
"emergencyContactNameB"
,
"斯柯达"
);
paras
.
put
(
"emergencyContactPhoneA"
,
"13099992222"
);
paras
.
put
(
"emergencyContactPhoneB"
,
"13577771111"
);
paras
.
put
(
"emergencyContactRelationA"
,
"FRIEND"
);
paras
.
put
(
"emergencyContactRelationB"
,
"CHILDREN"
);
paras
.
put
(
"hasCar"
,
"false"
);
paras
.
put
(
"hasCreditCard"
,
"false"
);
paras
.
put
(
"hasHouse"
,
"false"
);
paras
.
put
(
"hasSocialSecurity"
,
"false"
);
paras
.
put
(
"idCardNo"
,
idNo
);
paras
.
put
(
"income"
,
"CASH"
);
paras
.
put
(
"incomeRange"
,
"BELOW_20000"
);
paras
.
put
(
"kaTest"
,
"false"
);
paras
.
put
(
"loanDemandPurpose"
,
"FAMILY_DECORATION"
);
paras
.
put
(
"marryStatus"
,
"MARRIED"
);
paras
.
put
(
"occupation"
,
"EMPLOYEE"
);
paras
.
put
(
"orderNo"
,
orderNo
);
paras
.
put
(
"phone"
,
oneClickModel
.
getPhone
());
paras
.
put
(
"qq"
,
"233223222"
);
Map
<
String
,
String
>
para2
=
new
HashMap
<
String
,
String
>();
para2
.
put
(
"amount"
,
"11110.00"
);
para2
.
put
(
"period"
,
"6"
);
paras
.
put
(
"scenarioData"
,
para2
);
paras
.
put
(
"userName"
,
name
);
Map
<
String
,
Object
>
para3
=
new
HashMap
<
String
,
Object
>();
Map
<
String
,
Object
>
para4
=
new
HashMap
<
String
,
Object
>();
Map
<
String
,
Object
>
para5
=
new
HashMap
<
String
,
Object
>();
para4
.
put
(
"name"
,
name
);
para4
.
put
(
"citizen_id"
,
idNo
);
para4
.
put
(
"valid_date_begin"
,
"2013-07-26"
);
para4
.
put
(
"valid_date_end"
,
"2023-07-26"
);
para4
.
put
(
"address"
,
"广州市天河区五山路433号大院华农嵩山区26102房"
);
para4
.
put
(
"gender"
,
"男"
);
para4
.
put
(
"nation"
,
"汉"
);
para4
.
put
(
"agency"
,
"广州市公安局夭河分局"
);
para4
.
put
(
"picModel"
,
"1"
);
para4
.
put
(
"liveType"
,
"face"
);
para4
.
put
(
"idCardBaseContentAUrl"
,
"http://img.tuanzidai.cn/loan_database/1541984565253.jpeg"
);
para4
.
put
(
"idCardBaseContentBUrl"
,
"http://img.tuanzidai.cn/loan_database/1541501121557.jpeg"
);
para4
.
put
(
"livePhotoContentUrl"
,
"http://img.tuanzidai.cn/loan_database/1543170265119.jpeg"
);
Map
<
String
,
Object
>
para6
=
new
HashMap
<
String
,
Object
>();
para6
.
put
(
"confidence"
,
"82.584"
);
para5
.
put
(
"1e-3"
,
"62.169"
);
para5
.
put
(
"1e-5"
,
"74.399"
);
para5
.
put
(
"1e-4"
,
"69.315"
);
para5
.
put
(
"1e-6"
,
"78.038"
);
para6
.
put
(
"thresholds"
,
para5
);
para4
.
put
(
"result_idcard_photo"
,
para6
);
para3
.
put
(
"ocr"
,
para4
);
paras
.
put
(
"authInfo"
,
para3
);
paras
.
put
(
"channelUserId"
,
channelUserId
);
Map
<
String
,
String
>
para7
=
new
HashMap
<
String
,
String
>();
para7
.
put
(
"name"
,
"OCR"
);
para7
.
put
(
"organization"
,
"1"
);
ArrayList
listPara1
=
new
ArrayList
();
listPara1
.
add
(
0
,
para7
);
paras
.
put
(
"creditList"
,
listPara1
);
String
encryptContent
=
GetEncryptContentAndMd5
.
getEncryptContent
(
paras
,
aesKeywy
,
md5Keywy
);
Map
<
String
,
String
>
content_map
=
new
HashMap
<
String
,
String
>();
content_map
.
put
(
"content"
,
encryptContent
);
log
.
info
(
"查看结果content={}"
,
content_map
);
JSONObject
result
=
HttpRequest
.
doPostReturnResponseJson
(
url
,
content_map
);
return
result
;
}
@Override
public
JSONObject
shiGuangFenQiApply
()
{
return
null
;
}
@Override
public
JSONObject
xiaoJMApply
()
{
return
null
;
}
@Override
public
JSONObject
guoMeiApply
()
{
return
null
;
}
@Override
public
JSONObject
weiDianApply
()
{
return
null
;
}
@Override
public
JSONObject
defautApply
()
{
return
null
;
}
public
static
void
main
(
String
[]
arg
){
// OneClickModel oneClickModel2 = new OneClickModel();
// oneClickModel2.setType("1");
// oneClickModel2.setChannel("159858");
// oneClickModel2.setTermNo("12");
// oneClickModel2.setPhone("17800000009");
// oneClickModel2.setAmount("10000");
// oneClickModel2.setFundID("710");
// ApplyLoanServiceImpl applyLoanService=new ApplyLoanServiceImpl();
// applyLoanService.applyLoan(oneClickModel2);
System
.
out
.
print
(
"打印时间"
+
System
.
currentTimeMillis
());
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/Impl/CashWithdrawalServiceImpl.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
.
Impl
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickData
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.ChannelEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.CreditStatusEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.LoanStatusEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.repository.OneClickDataRespository
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.CashWithdrawalService
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.PhoneInfoService
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
import
cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration
;
import
cn.quantgroup.cashloanflowboss.spi.clf.service.CLFCenterServiceImpl
;
import
cn.quantgroup.cashloanflowboss.utils.BankCardNumberGenerator
;
import
cn.quantgroup.cashloanflowboss.utils.BankCardTypeEnum
;
import
cn.quantgroup.cashloanflowboss.utils.BankNameEnum
;
import
cn.quantgroup.cashloanflowboss.utils.GetEncryptContentAndMd5
;
import
cn.quantgroup.cashloanflowboss.utils.http.HttpRequest
;
import
cn.quantgroup.user.retbean.XUser
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Created by shang on 2019/12/18.
*/
@Slf4j
@Service
public
class
CashWithdrawalServiceImpl
implements
CashWithdrawalService
{
@Value
(
"${qapi.http.net}"
)
private
String
qapiHttp
;
@Autowired
OneClickDataRespository
oneClickDataRespository
;
@Autowired
CLFCenterServiceImpl
clfCenterService
;
@Autowired
PhoneInfoService
phoneInfoService
;
ClfChannelConfiguration
clfChannelConfiguration
;
public
static
String
md5Keywy
=
"qEAxMJBv"
;
public
static
String
aesKeywy
=
"sxD8KO79EDK0N0AJ"
;
/*
*申请提现请求
* */
@Override
public
Result
applyLoan
(
OneClickModel
oneClickModel
)
{
JSONObject
result
;
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
ZHANGHZONG
.
getCode
())){
result
=
applyZhangZhongLoan
(
oneClickModel
);
}
else
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
SHIGUANGFQ
.
getCode
())){
result
=
null
;
}
else
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
XIAOJUMAO
.
getCode
())){
result
=
null
;
}
else
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
GUOMEI
.
getCode
())){
result
=
null
;
}
else
if
(
oneClickModel
.
getChannel
().
equals
(
ChannelEnum
.
WEIDIAN
.
getCode
())){
result
=
null
;
}
else
{
result
=
null
;
}
return
null
;
}
/*
* 掌众的申请提现
* */
public
JSONObject
applyZhangZhongLoan
(
OneClickModel
oneClickModel
){
String
url
=
qapiHttp
+
"/ex/api/v2/withdraw/ZHANGZHONG"
;
//通过手机号获取用户信息
String
bankCardNumber
=
BankCardNumberGenerator
.
generate
(
BankNameEnum
.
CCB
,
BankCardTypeEnum
.
DEBIT
);
String
bankCode
=
"CCB"
;
String
bankName
=
"建设银行"
;
Map
<
String
,
String
>
paras
=
new
HashMap
<
String
,
String
>();
//通过手机号获取用户信息
XUser
xUser
=
phoneInfoService
.
selectUserID
(
oneClickModel
.
getPhone
());
Long
userId
=
xUser
.
getId
();
//从数据库中获取当前的订单
log
.
info
(
"getPhone={},CreditStatusEnum={},LoanStatusEnum={}"
,
userId
,
CreditStatusEnum
.
DEFAULT
.
getCode
(),
LoanStatusEnum
.
DEFAULT
.
getCode
());
OneClickData
oneClickData
=
oneClickDataRespository
.
findByPhoneAndCreditStatusAndLoanStatus
(
userId
.
toString
().
trim
(),
CreditStatusEnum
.
CREDIT_SUCC
.
getCode
(),
LoanStatusEnum
.
DEFAULT
.
getCode
());
paras
.
put
(
"channelOrderNumber"
,
oneClickData
.
getChannelOrderNo
());
paras
.
put
(
"bankCardNumber"
,
bankCardNumber
);
paras
.
put
(
"bankCode"
,
bankCode
);
paras
.
put
(
"bankName"
,
bankName
);
paras
.
put
(
"reservePhoneNumber"
,
oneClickModel
.
getPhone
());
//获取当前的渠道秘钥
clfChannelConfiguration
=
clfCenterService
.
findChannelConfigurationByChannelId
(
Long
.
parseLong
(
oneClickModel
.
getChannel
().
toString
()));
md5Keywy
=
clfChannelConfiguration
.
getMd5Key
();
aesKeywy
=
clfChannelConfiguration
.
getAesKey
();
String
encryptContent
=
GetEncryptContentAndMd5
.
getEncryptContent
(
paras
,
aesKeywy
,
md5Keywy
);
Map
<
String
,
String
>
content_map
=
new
HashMap
<
String
,
String
>();
content_map
.
put
(
"content"
,
encryptContent
);
JSONObject
result
=
HttpRequest
.
doPostReturnResponseJson
(
url
,
content_map
);
return
null
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/Impl/CreditGrantingServiceImpl.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
.
Impl
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.entity.OneClickData
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.CreditStatusEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.LoanStatusEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickOV
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.repository.OneClickDataRespository
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.ApplyLoanService
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.CreditGrantingService
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.PhoneInfoService
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
import
cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.entity.QuotaCredit
;
import
cn.quantgroup.cashloanflowboss.utils.GetBiNoAndFinanceProducts
;
import
cn.quantgroup.cashloanflowboss.utils.http.HttpRequest
;
import
cn.quantgroup.user.retbean.XUser
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.testng.Assert
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Created by shang on 2019/12/4.
*/
@Slf4j
@Service
public
class
CreditGrantingServiceImpl
implements
CreditGrantingService
{
@Autowired
ApplyLoanService
applyLoanService
;
@Autowired
PhoneInfoService
phoneInfoService
;
@Autowired
OneClickDataRespository
oneClickDataRespository
;
public
static
String
txAmount
=
"2000"
;
public
static
String
rate
=
"0"
;
@Value
(
"${clotho.http.net}"
)
private
String
clothoHttp
;
@Override
public
Result
authAmountAuditNotify
(
OneClickModel
oneClickModel
)
throws
Exception
{
String
auditResult
=
"true"
;
if
(
oneClickModel
.
getType
().
equals
(
"2"
)
){
auditResult
=
"true"
;
}
else
if
(
oneClickModel
.
getType
().
equals
(
"3"
)){
auditResult
=
"false"
;
}
else
{
log
.
info
(
"非授信需要的状态,打印一下oneClickModel.getType()={}"
,
oneClickModel
.
getType
());
}
return
applyCreditNotify
(
oneClickModel
,
auditResult
);
}
public
Result
applyCreditNotify
(
OneClickModel
oneClickModel
,
String
auditResult
)
throws
Exception
{
String
url
=
clothoHttp
+
"/external/quota/auth_amount_audit/notify"
;
Map
<
String
,
String
>
paras
=
new
HashMap
<
String
,
String
>();
ArrayList
listPara1
=
getPublicInfo
(
oneClickModel
);
paras
.
put
(
"code"
,
"0"
);
paras
.
put
(
"msg"
,
"success"
);
paras
.
put
(
"bizChannel"
,
"1"
);
//通过手机号获取用户信息
XUser
xUser
=
phoneInfoService
.
selectUserID
(
oneClickModel
.
getPhone
());
String
uuid
=
xUser
.
getUuid
();
Long
userId
=
xUser
.
getId
();
paras
.
put
(
"uuid"
,
uuid
);
//通过用户id获取产品信息
QuotaCredit
quotaCredit
=
phoneInfoService
.
selectUserAuditRecords
(
userId
);
log
.
info
(
"打印quotaCredit={}"
,
quotaCredit
);
int
productId
=
Integer
.
parseInt
(
quotaCredit
.
getProductId
().
toString
().
trim
())
;
String
biNo
=
String
.
valueOf
(
quotaCredit
.
getProductType
());
String
quotaRecordOrderNo
=
quotaCredit
.
getOrderNo
();
//获取产品分配基础信息,默认rate都是0
HashMap
<
Object
,
Object
>
getBiNoAndFinanceProduct
=
GetBiNoAndFinanceProducts
.
getBiNoAndFinanceProduct
(
productId
,
listPara1
);
paras
.
put
(
"bizNo"
,
quotaRecordOrderNo
);
paras
.
put
(
"bizType"
,
biNo
);
paras
.
put
(
"auditResult"
,
auditResult
);
paras
.
put
(
"amount"
,
oneClickModel
.
getAmount
());
paras
.
put
(
"deadLine"
,
"1607746332000"
);
paras
.
put
(
"extData"
,
"null"
);
paras
.
put
(
"otherInformation"
,
""
);
paras
.
put
(
"financeProducts"
,
getBiNoAndFinanceProduct
.
get
(
"financeProducts"
).
toString
().
trim
());
Map
<
String
,
String
>
header
=
new
HashMap
<
String
,
String
>();
header
.
put
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
// 通过手机号和渠道code获取token
String
getToken
=
phoneInfoService
.
getToken
(
oneClickModel
.
getPhone
(),
oneClickModel
.
getChannel
());
header
.
put
(
"x-auth-token"
,
getToken
);
log
.
info
(
"获取paras={},获取header={}"
,
paras
,
header
);
JSONObject
result
=
HttpRequest
.
doPostReturnResponseJson
(
url
,
paras
,
header
);
if
(
result
.
get
(
"statusCode"
).
toString
().
trim
().
equals
(
"200"
)
&&
result
.
get
(
"context"
).
toString
().
trim
().
equals
(
"success"
)){
//从数据库中获取当前的订单
log
.
info
(
"getPhone={},CreditStatusEnum={},LoanStatusEnum={}"
,
userId
,
CreditStatusEnum
.
DEFAULT
.
getCode
(),
LoanStatusEnum
.
DEFAULT
.
getCode
());
OneClickData
oneClickData
=
oneClickDataRespository
.
findByPhoneAndCreditStatusAndLoanStatus
(
userId
.
toString
().
trim
(),
CreditStatusEnum
.
DEFAULT
.
getCode
(),
LoanStatusEnum
.
DEFAULT
.
getCode
());
log
.
info
(
"获取的实体oneClickData={}"
,
oneClickData
);
//把授信请求通知的数据存放到表one_click_data中
int
update
=
oneClickDataRespository
.
updateById
(
quotaRecordOrderNo
,
quotaRecordOrderNo
,
String
.
valueOf
(
productId
),
getToken
,
oneClickData
.
getId
());
if
(
update
>
0
){
log
.
info
(
"修改成功update={}"
,
update
);
}
else
{
log
.
info
(
"修改失败 !!!!!"
);
}
return
new
Result
(
ApplicationStatus
.
SUCCESS
,
new
OneClickOV
(
CreditStatusEnum
.
DEFAULT
.
getDesc
()),
"风控授信回调通知成功"
);
}
else
{
return
Result
.
buildFail
(
"风控授信回调通知成功失败!!!,请检查数据"
)
;
}
}
public
ArrayList
getPublicInfo
(
OneClickModel
oneClickModel
){
ArrayList
listPara1
=
new
ArrayList
();
listPara1
.
add
(
0
,
oneClickModel
.
getAmount
());
listPara1
.
add
(
1
,
oneClickModel
.
getTermNo
());
listPara1
.
add
(
2
,
oneClickModel
.
getFundID
());
listPara1
.
add
(
3
,
rate
);
listPara1
.
add
(
4
,
txAmount
);
return
listPara1
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/Impl/LoanOperationServiceImpl.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
.
Impl
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.LoanOperationService
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
/**
* Created by shang on 2019/12/4.
*/
@Slf4j
@Service
public
class
LoanOperationServiceImpl
implements
LoanOperationService
{
@Override
public
Result
applyLoanNotify
(
OneClickModel
oneClickModel
)
{
return
null
;
}
/**
* 二次风控
* */
@Override
public
void
orderAuditNotify
()
{
}
@Override
public
void
updatContractStatus
()
{
}
@Override
public
void
payNotify
()
{
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/Impl/OneClickDataOperateJobServiceImpl.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service.Impl; // // //import cn.quantgroup.cashloanflowboss.api.oneclickdata.repository.OneClickJobConfigRepository; //import cn.quantgroup.cashloanflowboss.api.oneclickdata.service.OneClickDataOperateJobService; //import lombok.extern.slf4j.Slf4j; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.stereotype.Service; // ///** // * Created by shang on 2019/12/12. // */ //@Slf4j //@Service //public class OneClickDataOperateJobServiceImpl implements OneClickDataOperateJobService { //@Autowired //private OneClickJobConfigRepository oneClickJobConfigRepository; // @Override // public void excuteCreditSuccessJob() { // // } // // @Override // public void excuteCreditFailJob() { // // } // // @Override // public void excuteSelectCreditStatusJob() { // // // // //查找请求类型:2授信成功、4放款成功、5放款失败、6清算的单,并且当前的授信状态是0授信中 // // 当前授信中的单在apply_quota_record 查看状态是apply_status=2 时间倒序 //// List<OneClickJobConfig> oneClickDataList= oneClickJobConfigRepository.findAllActive(); // // // 所有的list查询用户审核记录:查出来的userid在表quota_credit 的is_active=0 可用状态 并且通过order_no // // 符合条件的状态授信修改成功 // //并且查询需要进行放款操作:查询 4放款成功、6清算的单 // // 执行提现操作 // //查看当前提现表是否状态正确 // // // // // } // // @Override // public void excuteFundSucessJob() { // // } // // @Override // public void excuteFundFailJob() { // // } // // @Override // public void excuteSelectFundStatusJob() { // // } //}
\ No newline at end of file
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/Impl/OneClickDataOperateServiceImpl.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
.
Impl
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.ChannelEnum
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickReslut
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.ApplyLoanService
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.CreditGrantingService
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.OneClickDataOperateService
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* Created by shang on 2019/12/9.
*/
@Slf4j
@Service
public
class
OneClickDataOperateServiceImpl
implements
OneClickDataOperateService
{
@Autowired
private
ApplyLoanService
applyLoanService
;
@Autowired
private
CreditGrantingService
creditGrantingService
;
@Override
public
Result
OnekeyApply
(
OneClickModel
oneClickModel
)
{
return
applyLoanService
.
applyLoan
(
oneClickModel
);
}
@Override
public
Result
OneKeyCashWithdrawal
(
OneClickModel
oneClickModel
)
{
return
null
;
}
@Override
public
Result
OneKeyCreditSuccessOrFail
(
OneClickModel
oneClickModel
)
throws
Exception
{
Result
creditResult
=
applyLoanService
.
applyLoan
(
oneClickModel
);
if
(
creditResult
.
getCode
()==
200000
){
return
creditGrantingService
.
authAmountAuditNotify
(
oneClickModel
);
}
else
{
log
.
info
(
"当前进行进件申请失败oneClickModel={},creditResult={}"
,
oneClickModel
,
creditResult
);
return
creditResult
;
}
}
@Override
public
OneClickReslut
OneKeyLoanSuccessOrFail
(
OneClickModel
oneClickModel
)
{
return
null
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/Impl/PhoneInfoServiceImpl.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
.
Impl
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.service.PhoneInfoService
;
import
cn.quantgroup.cashloanflowboss.spi.user.service.XyqbUserService
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.entity.QuotaCredit
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.repository.QuotaCreditRepository
;
import
cn.quantgroup.cashloanflowboss.utils.GetAuthorization
;
import
cn.quantgroup.cashloanflowboss.utils.http.HttpRequest
;
import
cn.quantgroup.user.retbean.XUser
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.testng.Assert
;
import
org.testng.annotations.Test
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Created by shang on 2019/12/4.
*/
@Slf4j
@Service
public
class
PhoneInfoServiceImpl
implements
PhoneInfoService
{
public
static
String
token
=
""
;
@Value
(
"${NAMESPACE}"
)
private
String
nameSpace
;
@Value
(
"${passportapi.http}"
)
private
String
passportapiHttp
;
@Value
(
"${api.http.net}"
)
private
String
apiHttp
;
@Autowired
QuotaCreditRepository
quotaCreditRepository
;
@Autowired
XyqbUserService
xyqbUserService
;
public
String
getToken
(
String
phone
,
String
createdFrom
)
throws
Exception
{
String
url
=
passportapiHttp
+
"/user/login/fastV1"
;
Map
<
String
,
String
>
paras
=
new
HashMap
<
String
,
String
>();
paras
.
put
(
"channelId"
,
"1"
);
paras
.
put
(
"createdFrom"
,
createdFrom
);
paras
.
put
(
"key"
,
"xyqb"
);
paras
.
put
(
"btRegisterChannelId"
,
""
);
paras
.
put
(
"dimension"
,
""
);
paras
.
put
(
"click_id"
,
""
);
Map
<
String
,
String
>
header
=
new
HashMap
<
String
,
String
>();
header
.
put
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
String
verification
=
GetAuthorization
.
getAuthorizationEncryption
(
phone
);
header
.
put
(
"Authorization"
,
verification
);
JSONObject
result
=
HttpRequest
.
doPostReturnResponseJson
(
url
,
paras
,
header
);
JSONObject
resultDate
=
(
JSONObject
)
result
.
get
(
"data"
);
if
(
result
.
get
(
"code"
).
toString
().
trim
().
equals
(
"0000"
)
&&
result
.
get
(
"businessCode"
).
toString
().
trim
().
equals
(
"0000"
)){
token
=
resultDate
.
get
(
"token"
).
toString
().
trim
();
}
else
{
log
.
info
(
"获取token失败,返回失败原因:{}"
,
result
);
}
return
token
;
}
/**
* 同步session到xyqb
* 返回空
*/
@Test
(
description
=
"同步session到xyqb"
)
@Override
public
void
sySessionToXYQB
()
{
String
url
=
apiHttp
+
"/ex/login/receive_token?token="
+
token
;
Map
<
String
,
String
>
header
=
new
HashMap
<
String
,
String
>();
header
.
put
(
"Content-Type"
,
"application/json"
);
JSONObject
reslut
=
HttpRequest
.
doGetReturnResponseJson
(
url
,
null
,
header
);
log
.
info
(
"获取返回结果,{}"
,
reslut
);
Assert
.
assertEquals
(
reslut
.
get
(
"statusCode"
).
toString
().
trim
(),
"0"
);
}
@Override
public
XUser
selectUserID
(
String
phone
)
{
return
xyqbUserService
.
findUserByPhoneNo
(
phone
);
}
@Override
public
void
authIdNo
()
{
}
@Override
public
void
creditSession
()
{
}
@Override
public
void
authBasic2
()
{
}
@Override
public
void
authOcrUrl
()
{
}
@Override
public
void
ocrAtuhUp
()
{
}
@Override
public
void
ocrAtuhDown
()
{
}
@Override
public
void
ocrSubmit
()
{
}
@Override
public
void
getSpiderCenter
()
{
}
@Override
public
void
spiderC
()
{
}
@Override
public
void
submitAuth
()
{
}
@Override
public
QuotaCredit
selectUserAuditRecords
(
Long
qgUserId
)
{
return
quotaCreditRepository
.
findByUserId
(
qgUserId
);
}
@Override
public
void
spiderFinishNotic
()
{
}
@Override
public
void
spiderReportFinishNotic
()
{
}
@Override
public
void
updat800QouteProductType
()
{
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
PhoneInfoServiceImpl
phon
=
new
PhoneInfoServiceImpl
();
phon
.
nameSpace
=
"arch"
;
phon
.
passportapiHttp
=
"http://passportapi-arch.liangkebang.net"
;
log
.
info
(
"打印,token={}"
,
phon
.
getToken
(
"13067912192"
,
""
));
// phon.sySessionToXYQB();
// String a="222";
// log.info("[getParamsFromEOS],result={}",a);
}
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/LoanOperationService.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
/**
* Created by shang on 2019/12/3.
*/
public
interface
LoanOperationService
{
/*
* 放款通知请求
* */
Result
applyLoanNotify
(
OneClickModel
oneClickModel
);
/**
* 二次风控
* */
void
orderAuditNotify
();
/**
* 修改合同状态
* */
void
updatContractStatus
();
/**
* 放款结果通知
* */
void
payNotify
();
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/OneClickDataOperateJobService.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/12.
// */
//public interface OneClickDataOperateJobService {
// /*
// * 执行授信成功请求
// * */
// void excuteCreditSuccessJob();
//
// /*
// * 执行授信失败请求
// * */
// void excuteCreditFailJob();
//
// /*
// * 执行查询授信状态
// * */
// void excuteSelectCreditStatusJob();
//
// /*
// * 执行放款成功请求
// * */
// void excuteFundSucessJob();
//
// /*
// * 执行放款失败请求
// * */
// void excuteFundFailJob();
//
// /*
// * 执行查询放款状态
// * */
// void excuteSelectFundStatusJob();
//
//}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/OneClickDataOperateService.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickModel
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.OneClickReslut
;
import
cn.quantgroup.cashloanflowboss.core.base.Result
;
/**
* Created by shang on 2019/12/5.
*/
public
interface
OneClickDataOperateService
{
Result
OnekeyApply
(
OneClickModel
oneClickModel
);
Result
OneKeyCashWithdrawal
(
OneClickModel
oneClickModel
);
Result
OneKeyCreditSuccessOrFail
(
OneClickModel
oneClickModel
)
throws
Exception
;
OneClickReslut
OneKeyLoanSuccessOrFail
(
OneClickModel
oneClickModel
);
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/PhoneInfoService.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
api
.
oneclickdata
.
service
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.entity.QuotaCredit
;
import
cn.quantgroup.user.retbean.XUser
;
/**
* Created by shang on 2019/12/3.
*/
public
interface
PhoneInfoService
{
/**
* 获取token
* phone 入参手机号
* 返回token
*/
String
getToken
(
String
phone
,
String
createdFrom
)
throws
Exception
;
/**
* 同步session到xyqb
* 返回空
*/
void
sySessionToXYQB
();
/**
* 同步session到xyqb
* 返回空
*/
XUser
selectUserID
(
String
phone
);
/**
* 实名认证
*/
void
authIdNo
();
/**
* 授信session同步
*/
void
creditSession
();
/**
* 基础信息
*/
void
authBasic2
();
/**
* 进入上传身份证页
*/
void
authOcrUrl
();
/**
* 上传正面
*/
void
ocrAtuhUp
();
/**
* 上传负面
*/
void
ocrAtuhDown
();
/**
* 提交拍照认证
*/
void
ocrSubmit
();
/**
* 查询授信中心ID
*/
void
getSpiderCenter
();
/**
* 授信
*/
void
spiderC
();
/**
* 提交审核
*/
void
submitAuth
();
/**
* 查询用户审核记录
*/
QuotaCredit
selectUserAuditRecords
(
Long
qgUserId
);
/**
* 授信完成通知xyqb
*/
void
spiderFinishNotic
();
/**
* 爬虫授权完成通知 xyqb
*/
void
spiderReportFinishNotic
();
/**
* 800 修改配额产品类型
*/
void
updat800QouteProductType
();
}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/RepaymentPlatService.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/5.
// */
//public interface RepaymentPlatService {
//}
src/main/java/cn/quantgroup/cashloanflowboss/api/oneclickdata/service/ScheduleService.java
0 → 100644
View file @
58e80715
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public class ScheduleService {
//}
src/main/java/cn/quantgroup/cashloanflowboss/spi/xyqb/entity/QuotaCredit.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
spi
.
xyqb
.
entity
;
import
cn.quantgroup.cashloanflowboss.utils.CommonConstant
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
javax.persistence.*
;
import
java.sql.Timestamp
;
/**
* Created by shang on 2019/12/18.
* 配额授信
*/
@Data
@Entity
@Table
(
name
=
"quota_credit"
)
public
class
QuotaCredit
{
@Id
@Column
(
name
=
"id"
)
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
id
;
/**
* 用户ID
*/
@Column
(
name
=
"user_id"
)
private
Long
userId
;
/**
* 预留字段, 客户ID
*/
@Column
(
name
=
"customer_id"
)
private
String
customerId
;
/**
* 渠道
*/
@Column
(
name
=
"channel"
)
private
Long
channel
;
/**
* 和授信中心关联字段
*/
@Column
(
name
=
"order_no"
)
private
String
orderNo
;
/**
* 授信状态
*
*/
@Column
(
name
=
"credit_status"
)
private
int
creditStatus
;
/**
* 授信信息来源
*
*/
@Column
(
name
=
"credit_source"
)
private
int
creditSource
;
/**
* 产品id,关联产品表
* KA 渠道来的数据,会提前把这个值传过来,需要存下来之后用
*/
@Column
(
name
=
"product_id"
)
private
Long
productId
;
/**
* 产品类型; 0:现金分期;1:白条循环;2:现金循环额度
*
*
*/
@Column
(
name
=
"product_type"
)
private
int
productType
;
/**
* 授信状态
*/
@Column
(
name
=
"remark"
)
private
String
remark
=
""
;
/**
* 接收到风控回调时间
*/
@JsonFormat
(
timezone
=
"GMT+8"
,
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
@Column
(
name
=
"receive_at"
)
private
Timestamp
receiveAt
;
@Column
(
name
=
"created_at"
)
private
Timestamp
createdAt
;
@Column
(
name
=
"updated_at"
)
private
Timestamp
updatedAt
;
/**
* 马甲包数据
*/
@Column
(
name
=
"loan_vest_info"
)
private
String
loanVestInfo
=
""
;
/**
* app 渠道
*/
@Column
(
name
=
"app_channel"
)
private
String
appChannel
=
""
;
/**
* 可用状态
*/
@Column
(
name
=
"is_active"
)
private
Boolean
isActive
=
true
;
@PrePersist
public
void
prePersist
()
{
Timestamp
timestamp
=
new
Timestamp
(
System
.
currentTimeMillis
());
createdAt
=
timestamp
;
updatedAt
=
timestamp
;
receiveAt
=
CommonConstant
.
DEFAULT_TIME
;
}
@PreUpdate
public
void
preUpdate
()
{
updatedAt
=
new
Timestamp
(
System
.
currentTimeMillis
());
}
}
src/main/java/cn/quantgroup/cashloanflowboss/spi/xyqb/repository/QuotaCreditRepository.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
spi
.
xyqb
.
repository
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.entity.Contract
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.entity.QuotaCredit
;
import
cn.quantgroup.cashloanflowboss.spi.xyqb.source.XYQBDataSource
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.Query
;
import
org.springframework.stereotype.Repository
;
/**
* Created by shang on 2019/12/18.
*/
@XYQBDataSource
@Repository
public
interface
QuotaCreditRepository
extends
JpaRepository
<
QuotaCredit
,
Long
>
{
@Query
(
value
=
"select * from quota_credit where user_id = ?1 and is_active = 1 and credit_status=1 order by id desc limit 1"
,
nativeQuery
=
true
)
QuotaCredit
findByUserId
(
Long
qgUserId
);
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/AESUtil.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
org.apache.commons.codec.binary.Base64
;
import
javax.crypto.Cipher
;
import
javax.crypto.spec.SecretKeySpec
;
/**
* AES编码器工具
* 使用AES加密解密 AES-128-ECB加密
* @version 1.0
*/
public
class
AESUtil
{
/**
* KEY算法
*/
private
static
final
String
KEY_ALGORITHM
=
"AES"
;
/**
* 加密算法
* "/算法/模式/补码方式"
*/
private
static
final
String
CIPHER_ALGORITHM
=
"AES/ECB/PKCS5Padding"
;
/**
* 编码格式
*/
private
static
final
String
data_encoding
=
"utf-8"
;
/**
* 数据加密
* @param data 待加密的数据
* @param key 加密使用的KEY
* @return 加密之后的数据
*/
public
static
String
encryptAndBase64Encode
(
String
data
,
String
key
)
{
try
{
return
encryptAndBase64Encode
(
data
.
getBytes
(
data_encoding
),
key
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 对字节数组加密
* @param data
* @param key
* @return
*/
public
static
String
encryptAndBase64Encode
(
byte
[]
data
,
String
key
)
{
try
{
if
(
key
==
null
||
""
.
equals
(
key
.
trim
().
length
()))
{
return
null
;
}
byte
[]
raw
=
key
.
getBytes
(
data_encoding
);
SecretKeySpec
skeySpec
=
new
SecretKeySpec
(
raw
,
KEY_ALGORITHM
);
Cipher
cipher
=
Cipher
.
getInstance
(
CIPHER_ALGORITHM
);
cipher
.
init
(
Cipher
.
ENCRYPT_MODE
,
skeySpec
);
byte
[]
encrypted
=
cipher
.
doFinal
(
data
);
return
new
Base64
().
encodeToString
(
encrypted
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 数据解密,返回字符串
* @param data 待解密的数据
* @param key 解密使用的KEY
* @return 解密之后的数据
*/
public
static
String
decryptAfterBase64Decode
(
String
data
,
String
key
)
{
try
{
byte
[]
bytes
=
decryptAfterBase64DecodeToByte
(
data
,
key
);
if
(
bytes
!=
null
&&
bytes
.
length
>
0
){
return
new
String
(
bytes
,
data_encoding
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
/**
* 数据解密,返回字节数据
* @param data
* @param key
* @return
*/
public
static
byte
[]
decryptAfterBase64DecodeToByte
(
String
data
,
String
key
)
{
try
{
if
(
key
==
null
||
""
.
equals
(
key
.
trim
().
length
()))
{
return
null
;
}
byte
[]
raw
=
key
.
getBytes
(
data_encoding
);
SecretKeySpec
skeySpec
=
new
SecretKeySpec
(
raw
,
KEY_ALGORITHM
);
Cipher
cipher
=
Cipher
.
getInstance
(
CIPHER_ALGORITHM
);
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
skeySpec
);
byte
[]
encrypted1
=
new
Base64
().
decode
(
data
);
byte
[]
original
=
cipher
.
doFinal
(
encrypted1
);
return
original
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/BankCardNumberGenerator.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.util.Random
;
/**
* <pre>
* 生成随机银行卡号:
*
* 参考:效验是否为银行卡,用于验证:
* 现行 16 位银联卡现行卡号开头 6 位是 622126~622925 之间的,7 到 15 位是银行自定义的,
* 可能是发卡分行,发卡网点,发卡序号,第 16 位是校验码。
* 16 位卡号校验位采用 Luhm 校验方法计算:
* 1,将未带校验位的 15 位卡号从右依次编号 1 到 15,位于奇数位号上的数字乘以 2
* 2,将奇位乘积的个十位全部相加,再加上所有偶数位上的数字
* 3,将加法和加上校验位能被 10 整除。
* </pre>
*/
public
class
BankCardNumberGenerator
{
public
static
String
generate
()
{
Random
random
=
new
Random
(
System
.
currentTimeMillis
());
Integer
prev
=
622126
+
random
.
nextInt
(
925
+
1
-
126
);
return
generateByPrefix
(
prev
);
}
/**
* <pre>
* 根据给定前六位生成卡号
* </pre>
*/
public
static
String
generateByPrefix
(
Integer
prefix
)
{
Random
random
=
new
Random
(
System
.
currentTimeMillis
());
String
bardNo
=
prefix
+
StringUtils
.
leftPad
(
random
.
nextInt
(
999999999
)
+
""
,
12
,
"0"
);
char
[]
chs
=
bardNo
.
trim
().
toCharArray
();
int
luhnSum
=
LuhnUtils
.
getLuhnSum
(
chs
);
char
checkCode
=
luhnSum
%
10
==
0
?
'0'
:
(
char
)
(
10
-
luhnSum
%
10
+
'0'
);
return
bardNo
+
checkCode
;
}
/**
* 根据银行名称 及银行卡类型生成对应卡号
*
* @param bankName 银行名称
* @param cardType 银行卡类型
* @return 银行卡号
*/
public
static
String
generate
(
BankNameEnum
bankName
,
BankCardTypeEnum
cardType
)
{
Integer
[]
candidatePrefixes
=
null
;
if
(
cardType
==
null
)
{
candidatePrefixes
=
bankName
.
getAllCardPrefixes
();
}
else
{
switch
(
cardType
)
{
case
DEBIT:
candidatePrefixes
=
bankName
.
getDebitCardPrefixes
();
break
;
case
CREDIT:
candidatePrefixes
=
bankName
.
getCreditCardPrefixes
();
break
;
default
:
}
}
if
(
candidatePrefixes
==
null
||
candidatePrefixes
.
length
==
0
)
{
throw
new
RuntimeException
(
"没有该银行的相关卡号信息"
);
}
Integer
prefix
=
candidatePrefixes
[
new
Random
().
nextInt
(
candidatePrefixes
.
length
)];
return
generateByPrefix
(
prefix
);
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
generate
(
BankNameEnum
.
CCB
,
BankCardTypeEnum
.
DEBIT
));
System
.
out
.
println
(
generate
());
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/BankCardTypeEnum.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
/**
* <pre>
* 银行卡类型枚举类
* Created by Binary Wang on 2017-3-31.
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
* </pre>
*/
public
enum
BankCardTypeEnum
{
/**
* 借记卡/储蓄卡
*/
DEBIT
(
"借记卡/储蓄卡"
),
/**
* 信用卡/贷记卡
*/
CREDIT
(
"信用卡/贷记卡"
);
private
final
String
name
;
BankCardTypeEnum
(
String
name
)
{
this
.
name
=
name
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/BankNameEnum.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
org.apache.commons.lang3.ArrayUtils
;
/**
* <pre>
* 常见银行名称枚举类
* Created by Binary Wang on 2017-3-31.
*
* @author <a href="https://github.com/binarywang">binarywang(Binary Wang)</a>
* </pre>
*/
public
enum
BankNameEnum
{
/**
* <pre>
* 中国工商银行
* 中国工商银行VISA学生国际信用卡:427020
* 中国工商银行VISA国际信用卡金卡:427030
* 中国工商银行MC国际信用卡普通卡:530990
* 中国工商银行新版人民币贷记卡普卡:622230
* 中国工商银行新版人民币贷记卡金卡:622235
* 中国工商银行新版信用卡(准贷)普卡:622210
* 中国工商银行新版信用卡(准贷)金卡:622215
* 中国工商银行牡丹灵通卡借记卡:622200
* 中国工商银行原牡丹灵通卡借记卡:955880
* </pre>
*/
ICBC
(
"102"
,
"中国工商银行"
,
"工行"
,
new
Integer
[]{
622200
,
955880
},
new
Integer
[]{
427020
,
427030
,
530990
,
622230
,
622235
,
622210
,
622215
}),
/**
* <pre>
* 中国农业银行
* 中国农业银行人民币贷记卡 香港旅游卡贷记卡金卡:622836
* 中国农业银行人民币贷记卡 香港旅游卡贷记卡普卡:622837
* 中国农业银行世纪通宝借记卡:622848
* 农业银行:552599、404119、404121、519412、403361、558730、520083、520082、519413、49102、404120、404118、53591、404117
* </pre>
*/
ABC
(
"103"
,
"中国农业银行"
,
"农行"
),
/**
* <pre>
* 中国银行
* 中国银行中银都市卡:622760
* 中国银行BOC系列VISA标准卡普通卡/VISA高校认同卡:409666
* 中国银行国航知音信用卡:438088
* 中国银行上海市分行长城人民币贷记卡普通卡:622752
* </pre>
*/
BOC
(
"104"
,
"中国银行"
,
"中行"
),
/**
* <pre>
* 中国建设银行
* 中国建设银行VISA龙卡借记卡:436742
* 中国建设银行VISA龙卡贷记卡:436745
* 中国建设银行支付宝龙卡借记卡:622280
* </pre>
*/
CCB
(
"105"
,
"中国建设银行"
,
"建行"
,
new
Integer
[]{
622280
},
new
Integer
[]{
436745
}),
/**
* <pre>
* 交通银行
* 交通银行VISA普通卡:458123
* 交通银行MC信用卡普通卡:521899
* 交通银行太平洋卡借记卡:622260
* </pre>
*/
BCOM
(
"301"
,
"交通银行"
,
"交行"
),
/**
* <pre>
* 中信银行
* 中信银行国航知音信用卡/万事达卡普通卡:518212
* 中信银行理财宝卡借记卡:622690
* 中信银行万事达卡金卡:520108
* 中信银行蓝卡/I卡信用卡:622680
* 中信银行:376968、376966、622918、622916、376969、622919、556617、403391、558916、514906、400360、433669、433667、433666、404173、404172、404159、404158、403393、403392、622689、622688、433668、404157、404171、404174、628209、628208、628206
* </pre>
*/
CITIC
(
"302"
,
"中信银行"
),
/**
* <pre>
* 中国光大银行
* 光大银行卡号开头:406254、622655、622650、622658、356839、486497、481699、543159、425862、406252、356837、356838、356840、622161、628201、628202
* </pre>
*/
CEB
(
"303"
,
"中国光大银行"
),
/**
* <pre>
* 华夏银行
* 华夏银行:539867,528709
* 华夏银行MC钛金卡:523959
* 华夏银行人民币卡金卡:622637
* 华夏银行人民币卡普卡:622636
* 华夏银行MC金卡:528708
* 华夏银行MC普卡:539868
* </pre>
*/
HXB
(
"304"
,
"华夏银行"
),
/**
* <pre>
* 中国民生银行
* 民生银行:407405,517636
* 中国民生银行MC金卡:512466
* 中国民生银行星座卡借记卡:415599
* 中国民生银行VISA信用卡金卡:421870
* 中国民生银行蝶卡银卡借记卡:622622
* 民生银行:528948,552288,556610,622600,622601,622602,622603,421869,421871,628258
* </pre>
*/
CMBC
(
"305"
,
"中国民生银行"
),
/**
* <pre>
* 广东发展银行
* 广东发展银行新理财通借记卡:622568
* 广东发展银行南航明珠卡MC金卡:520152
* 广东发展银行南航明珠卡MC普卡:520382
* 广东发展银行理财通借记卡:911121
* 广发真情卡:548844
* </pre>
*/
CGB
(
"306"
,
"广东发展银行"
),
/**
* <pre>
* 平安银行
* 深圳平安银行:622155,622156
* 深圳平安银行万事达卡普卡:528020
* 深圳平安银行万事达卡金卡:526855
* 深发展联名普卡:435744
* 深发展卡普通卡:622526
* 深发展联名金卡:435745
* 深圳发展银行:998801,998802
* 深发展卡金卡:622525
* 深圳发展银行发展卡借记卡:622538
* </pre>
*/
PAB
(
"307"
,
"平安银行"
,
new
Integer
[]{
622155
,
622156
},
new
Integer
[]{}),
/**
* <pre>
* 招商银行
* 招商银行哆啦A梦粉丝信用卡:518710
* 招商银行哆啦A梦粉丝信用卡珍藏版卡面/MC贝塔斯曼金卡/MC车主卡:518718
* 招商银行QQ一卡通借记卡:622588
* 招商银行HELLO KITTY单币卡:622575
* 招商银行:545947、521302、439229、552534、622577、622579、439227、479229、356890、356885、545948、545623、552580、552581、552582、552583、552584、552585、552586、552588、552589、645621、545619、356886、622578、622576、622581、439228、628262、628362、628362、628262
* 招商银行JCB信用卡普通卡:356889
* 招商银行VISA白金卡:439188
* 招商银行VISA信用卡普通卡:439225招商银行VISA信用卡金卡:439226
* </pre>
*/
CMB
(
"308"
,
"招商银行"
,
"招行"
,
new
Integer
[]{
622588
,
545947
,
521302
,
439229
,
552534
,
622577
,
622579
,
439227
,
479229
,
356890
,
356885
,
545948
,
545623
,
552580
,
552581
,
552582
,
552583
,
552584
,
552585
,
552586
,
552588
,
552589
,
645621
,
545619
,
356886
,
622578
,
622576
,
622581
,
439228
,
628262
,
628362
,
628362
,
628262
},
new
Integer
[]{}),
/**
* <pre>
* 兴业银行
* 兴业银行:451289、622902、622901、527414、524070、486493、486494、451290、523036、486861、622922
* </pre>
*/
CIB
(
"309"
,
"兴业银行"
),
/**
* <pre>
* 上海浦东发展银行
* 上海浦东发展银行奥运WOW卡美元单币:418152
* 上海浦东发展银行WOW卡/奥运WOW卡:456418
* 上海浦东发展银行东方卡借记卡:622521
* 上海浦东发展银行VISA普通卡:404738
* 上海浦东发展银行VISA金卡:404739
* 浦东发展银行:498451,622517,622518,515672,517650,525998,356850,356851,356852
* </pre>
*/
SPDB
(
"310"
,
"上海浦东发展银行"
),
/**
* <pre>
* 华润银行
* </pre>
*/
CR
(
"999999"
,
"华润银行"
,
new
Integer
[]{
622363
}),
/**
* <pre>
* 渤海银行
* </pre>
*/
BHB
(
"318"
,
"渤海银行"
),
/**
* <pre>
* 徽商银行
* </pre>
*/
HSB
(
"319"
,
"徽商银行"
),
/**
* <pre>
* 江苏银行
* </pre>
*/
JSB_1
(
"03133010"
,
"江苏银行"
),
/**
* <pre>
* 江苏银行
* </pre>
*/
JSB
(
"03133120"
,
"江苏银行"
),
/**
* <pre>
* 上海银行
* 上海银行VISA金卡:402674
* 上海银行借记卡:622892
* </pre>
*/
SHB
(
"04012900"
,
"上海银行"
),
/**
* <pre>
* 中国邮政储蓄银行
* 中国邮政储蓄绿卡借记卡:622188
* </pre>
*/
POST
(
"403"
,
"中国邮政储蓄银行"
),
/**
* <pre>
* 北京银行
* 北京银行京卡借记卡:602969
* </pre>
*/
BOB
(
""
,
"北京银行"
),
/**
* <pre>
* 宁波银行
* 宁波银行:512431,520194,622318,622778
* 宁波银行汇通卡人民币金卡/钻石联名卡:622282
* </pre>
*/
BON
(
""
,
"宁波银行"
);
/**
* 银行代码
*/
private
final
String
code
;
/**
* 银行名称
*/
private
final
String
name
;
/**
* 银行简称
*/
private
String
abbrName
;
/**
* 信用卡卡号前缀数组
*/
private
Integer
[]
creditCardPrefixes
;
/**
* 借记卡卡号前缀数组
*/
private
Integer
[]
debitCardPrefixes
;
/**
* 所有卡号前缀数组
*/
private
Integer
[]
allCardPrefixes
;
BankNameEnum
(
String
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
BankNameEnum
(
String
code
,
String
name
,
String
abbrName
)
{
this
.
code
=
code
;
this
.
name
=
name
;
this
.
abbrName
=
abbrName
;
}
BankNameEnum
(
String
code
,
String
name
,
String
abbrName
,
Integer
[]
debitCardPrefixes
,
Integer
[]
creditCardPrefixes
)
{
this
.
code
=
code
;
this
.
name
=
name
;
this
.
abbrName
=
abbrName
;
this
.
creditCardPrefixes
=
creditCardPrefixes
;
this
.
debitCardPrefixes
=
debitCardPrefixes
;
this
.
allCardPrefixes
=
ArrayUtils
.
addAll
(
this
.
creditCardPrefixes
,
this
.
debitCardPrefixes
);
}
BankNameEnum
(
String
code
,
String
name
,
Integer
[]
debitCardPrefixes
)
{
this
.
code
=
code
;
this
.
name
=
name
;
this
.
debitCardPrefixes
=
debitCardPrefixes
;
this
.
allCardPrefixes
=
debitCardPrefixes
;
}
BankNameEnum
(
String
code
,
String
name
,
Integer
[]
debitCardPrefixes
,
Integer
[]
creditCardPrefixes
)
{
this
.
code
=
code
;
this
.
name
=
name
;
this
.
creditCardPrefixes
=
creditCardPrefixes
;
this
.
debitCardPrefixes
=
debitCardPrefixes
;
this
.
allCardPrefixes
=
ArrayUtils
.
addAll
(
this
.
creditCardPrefixes
,
this
.
debitCardPrefixes
);
}
public
String
getName
()
{
return
this
.
name
;
}
public
String
getAbbrName
()
{
return
this
.
abbrName
;
}
public
Integer
[]
getCreditCardPrefixes
()
{
return
this
.
creditCardPrefixes
;
}
public
Integer
[]
getDebitCardPrefixes
()
{
return
this
.
debitCardPrefixes
;
}
public
Integer
[]
getAllCardPrefixes
()
{
return
this
.
allCardPrefixes
;
}
public
String
getCode
()
{
return
this
.
code
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/ChineseIDCardNumberGenerator.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
org.apache.commons.lang3.RandomUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Created by shang on 2019/7/22.
*/
public
class
ChineseIDCardNumberGenerator
{
public
static
String
generate
()
{
Map
<
String
,
String
>
code
=
getAreaCode
();
String
areaCode
=
code
.
keySet
().
toArray
(
new
String
[
0
])[
RandomUtils
.
nextInt
(
0
,
code
.
size
())]
+
StringUtils
.
leftPad
((
RandomUtils
.
nextInt
(
0
,
9998
)
+
1
)
+
""
,
4
,
"0"
);
String
birthday
=
new
SimpleDateFormat
(
"yyyyMMdd"
).
format
(
randomDate
());
String
randomCode
=
String
.
valueOf
(
1000
+
RandomUtils
.
nextInt
(
0
,
999
))
.
substring
(
1
);
String
pre
=
areaCode
+
birthday
+
randomCode
;
String
verifyCode
=
getVerifyCode
(
pre
);
String
result
=
pre
+
verifyCode
;
return
result
;
}
private
static
Date
randomDate
()
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
1970
,
1
,
1
);
long
earlierDate
=
calendar
.
getTime
().
getTime
();
calendar
.
set
(
2000
,
1
,
1
);
long
laterDate
=
calendar
.
getTime
().
getTime
();
long
chosenDate
=
RandomUtils
.
nextLong
(
earlierDate
,
laterDate
);
return
new
Date
(
chosenDate
);
}
private
static
String
getVerifyCode
(
String
cardId
)
{
String
[]
ValCodeArr
=
{
"1"
,
"0"
,
"X"
,
"9"
,
"8"
,
"7"
,
"6"
,
"5"
,
"4"
,
"3"
,
"2"
};
String
[]
Wi
=
{
"7"
,
"9"
,
"10"
,
"5"
,
"8"
,
"4"
,
"2"
,
"1"
,
"6"
,
"3"
,
"7"
,
"9"
,
"10"
,
"5"
,
"8"
,
"4"
,
"2"
};
int
tmp
=
0
;
for
(
int
i
=
0
;
i
<
Wi
.
length
;
i
++)
{
tmp
+=
Integer
.
parseInt
(
String
.
valueOf
(
cardId
.
charAt
(
i
)))
*
Integer
.
parseInt
(
Wi
[
i
]);
}
int
modValue
=
tmp
%
11
;
String
strVerifyCode
=
ValCodeArr
[
modValue
];
return
strVerifyCode
;
}
private
static
Map
<
String
,
String
>
getAreaCode
()
{
final
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
map
.
put
(
"11"
,
"����"
);
map
.
put
(
"12"
,
"���"
);
map
.
put
(
"13"
,
"�ӱ�"
);
map
.
put
(
"14"
,
"ɽ��"
);
map
.
put
(
"15"
,
"���ɹ�"
);
map
.
put
(
"21"
,
"����"
);
map
.
put
(
"22"
,
"����"
);
map
.
put
(
"23"
,
"������"
);
map
.
put
(
"31"
,
"�Ϻ�"
);
map
.
put
(
"32"
,
"����"
);
map
.
put
(
"33"
,
"�㽭"
);
map
.
put
(
"34"
,
"����"
);
map
.
put
(
"35"
,
"����"
);
map
.
put
(
"36"
,
"����"
);
map
.
put
(
"37"
,
"ɽ��"
);
map
.
put
(
"41"
,
"����"
);
map
.
put
(
"42"
,
"����"
);
map
.
put
(
"43"
,
"����"
);
map
.
put
(
"44"
,
"�㶫"
);
map
.
put
(
"45"
,
"����"
);
map
.
put
(
"46"
,
"����"
);
map
.
put
(
"50"
,
"����"
);
map
.
put
(
"51"
,
"�Ĵ�"
);
map
.
put
(
"52"
,
"����"
);
map
.
put
(
"53"
,
"����"
);
map
.
put
(
"54"
,
"����"
);
map
.
put
(
"61"
,
"����"
);
map
.
put
(
"62"
,
"����"
);
map
.
put
(
"63"
,
"�ຣ"
);
map
.
put
(
"64"
,
"����"
);
map
.
put
(
"65"
,
"�½�"
);
map
.
put
(
"71"
,
"̨��"
);
map
.
put
(
"81"
,
"���"
);
map
.
put
(
"82"
,
"����"
);
map
.
put
(
"91"
,
"����"
);
return
map
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/CommonConstant.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
java.sql.Timestamp
;
import
java.time.LocalDateTime
;
import
java.time.ZoneId
;
/**
* @Description: TODO
* @author xh
* @date 2017年2月28日 下午1:45:08
*/
public
class
CommonConstant
{
//http连接池最大数量
public
static
final
int
HTTPCLIENT_CONNECTION_COUNT
=
400
;
//单个路由最大连接数量
public
static
final
int
HTTPCLIENT_MAXPERROUTE_COUNT
=
10000
;
//http连接最大重试次数
public
static
final
int
HTTPCLIENT_MAXRETRY_COUNT
=
5
;
//连接超时时间
public
static
final
int
HTTPCLIENT_CONNECT_TIMEOUT
=
10000
;
//socket超时时间
public
static
final
int
HTTPCLIENT_SOCKET_TIMEOUT
=
10000
;
public
static
final
String
UTF8
=
"UTF-8"
;
// 真名字
public
static
final
String
REAL_NAME
=
"刘志国"
;
// 身份证号 id_card_no
public
static
final
String
ID_CARD_NO
=
"6222800007700762652"
;
// eosips 获取当前zk的地址ip 端口号
public
static
final
String
EOS_IPS
=
"172.17.1.7"
;
public
static
final
String
GETZK
=
"http://"
+
EOS_IPS
+
"/api/apollo/env_vars?namespace="
;
// postman转化项目域名
public
static
final
String
JOLYNE
=
"http://jolyne.liangkebang.com"
;
// CERTIMAG_UP 身份证上
public
static
final
String
CERTIMAG_UP
=
LongStringParamer
.
getLongStringOfCERTIMAG_UP
();
// 身份证下
public
static
final
String
CERTIMAG_DWON
=
LongStringParamer
.
getLongStringOfCERTIMAG_DWON
();
public
static
final
Timestamp
DEFAULT_TIME
=
Timestamp
.
from
(
LocalDateTime
.
of
(
2000
,
1
,
1
,
0
,
0
,
0
).
atZone
(
ZoneId
.
systemDefault
()).
toInstant
());
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/GetAuthorization.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
sun.misc.BASE64Decoder
;
import
java.nio.charset.Charset
;
import
java.util.Base64
;
/**
* Created by shang on 2019/7/19.
*
*/
public
class
GetAuthorization
{
/**
* 返回加密结果
*
*
* @return authorizationEncryption 加密结果
**/
public
static
String
getAuthorizationEncryption
()
throws
Exception
{
String
phone
=
"18201128392"
;
System
.
out
.
println
(
"打印phone: "
+
phone
);
String
phoneNoBase64
=
GetAuthorization
.
encryptBASE64
(
phone
);
String
authorizationEncryption
=
"Verification"
+
" "
+
phoneNoBase64
;
return
authorizationEncryption
;
}
/**
* 返回加密结果
*phone 手机号
*
* @return authorizationEncryption 加密结果
**/
public
static
String
getAuthorizationEncryption
(
String
phone
)
throws
Exception
{
String
phoneNoBase64
=
GetAuthorization
.
encryptBASE64
(
phone
);
String
authorizationEncryption
=
"Verification"
+
" "
+
phoneNoBase64
;
return
authorizationEncryption
;
}
/**
* 返回加密结果
*phone 手机号
*code 验证码
* @return authorizationEncryption 加密结果
**/
public
static
String
getAuthorizationEncryption
(
String
phone
,
String
code
)
throws
Exception
{
String
phoneNoBase64
=
GetAuthorization
.
encryptBASE64
(
phone
,
code
);
String
authorizationEncryption
=
"Verification"
+
" "
+
phoneNoBase64
;
return
authorizationEncryption
;
}
/**
* BASE64解密
*
* @param key
* @return
* @throws Exception
*/
public
static
String
decryptBASE64
(
String
key
)
throws
Exception
{
return
new
String
((
new
BASE64Decoder
()).
decodeBuffer
(
key
),
"UTF-8"
);
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
* key手机号
code是短信验证码
整个算完是编码后的字符串,拼到Verification后,空格间隔开
*/
public
static
String
encryptBASE64
(
String
key
)
throws
Exception
{
return
new
String
(
Base64
.
getEncoder
().
encodeToString
((
key
+
":0000"
).
getBytes
(
Charset
.
forName
(
"UTF-8"
))));
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
* key手机号
* code 验证码
code是短信验证码
整个算完是编码后的字符串,拼到Verification后,空格间隔开
*/
public
static
String
encryptBASE64
(
String
key
,
String
code
)
throws
Exception
{
return
new
String
(
Base64
.
getEncoder
().
encodeToString
((
key
+
":"
+
"code"
).
getBytes
(
Charset
.
forName
(
"UTF-8"
))));
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/GetBiNoAndFinanceProducts.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
/**
* Created by shang on 2019/7/23.
*/
public
class
GetBiNoAndFinanceProducts
{
public
static
HashMap
<
Object
,
Object
>
getBiNoAndFinanceProduct
(
int
productId
,
ArrayList
listPara1
){
HashMap
<
Object
,
Object
>
getResult
=
new
HashMap
<
Object
,
Object
>();
JSONArray
financeProducts
=
new
JSONArray
();
JSONArray
terms
=
new
JSONArray
();
JSONObject
para1
=
new
JSONObject
();
if
(
productId
==
1
||
productId
==
4
||
productId
==
900
||
productId
==
910
||
productId
==
920
){
if
(
productId
==
900
){
getResult
.
put
(
"biNo"
,
"9"
);
}
else
if
(
productId
==
910
){
getResult
.
put
(
"biNo"
,
"9"
);
}
else
if
(
productId
==
920
){
getResult
.
put
(
"biNo"
,
"9"
);
}
else
{
getResult
.
put
(
"biNo"
,
"0"
);
}
JSONObject
jsonterm
=
new
JSONObject
();
jsonterm
.
put
(
"term"
,
listPara1
.
get
(
1
).
toString
().
trim
());
JSONArray
fundInfo
=
new
JSONArray
();
JSONObject
jsonFundInfo
=
new
JSONObject
();
jsonFundInfo
.
put
(
"fundId"
,
listPara1
.
get
(
2
).
toString
().
trim
());
jsonFundInfo
.
put
(
"rate"
,
listPara1
.
get
(
3
).
toString
().
trim
());
jsonFundInfo
.
put
(
"rateType"
,
"1"
);
jsonFundInfo
.
put
(
"priority"
,
"1"
);
jsonFundInfo
.
put
(
"feeType"
,
"1"
);
fundInfo
.
add
(
jsonFundInfo
);
jsonterm
.
put
(
"fundInfo"
,
fundInfo
);
terms
.
add
(
jsonterm
);
para1
.
put
(
"min"
,
listPara1
.
get
(
0
).
toString
().
trim
());
para1
.
put
(
"max"
,
listPara1
.
get
(
0
).
toString
().
trim
());
para1
.
put
(
"terms"
,
terms
);
financeProducts
.
add
(
para1
);
getResult
.
put
(
"financeProducts"
,
financeProducts
);
}
else
if
(
productId
==
2
){
getResult
.
put
(
"biNo"
,
"2"
);
para1
.
put
(
"min"
,
listPara1
.
get
(
4
).
toString
().
trim
());
para1
.
put
(
"max"
,
listPara1
.
get
(
0
).
toString
().
trim
());
for
(
int
i
=
3
;
i
<=
12
;
i
=
i
+
3
){
JSONObject
jsonterm
=
new
JSONObject
();
jsonterm
.
put
(
"term"
,
i
);
JSONArray
fundInfo
=
new
JSONArray
();
JSONObject
jsonFundInfo
=
new
JSONObject
();
jsonFundInfo
.
put
(
"fundId"
,
listPara1
.
get
(
2
).
toString
().
trim
());
jsonFundInfo
.
put
(
"rate"
,
listPara1
.
get
(
3
).
toString
().
trim
());
jsonFundInfo
.
put
(
"rateType"
,
"1"
);
jsonFundInfo
.
put
(
"priority"
,
"1"
);
jsonFundInfo
.
put
(
"feeType"
,
"1"
);
fundInfo
.
add
(
jsonFundInfo
);
jsonterm
.
put
(
"fundInfo"
,
fundInfo
);
terms
.
add
(
jsonterm
);
}
para1
.
put
(
"terms"
,
terms
);
financeProducts
.
add
(
para1
);
getResult
.
put
(
"financeProducts"
,
financeProducts
);
}
return
getResult
;
}
public
static
String
getBiNo
(
int
productId
){
String
biNo
=
"0"
;
if
(
productId
==
1
||
productId
==
4
){
biNo
=
"0"
;
}
else
if
(
productId
==
2
){
biNo
=
"2"
;
}
else
if
(
productId
==
900
||
productId
==
910
||
productId
==
920
){
biNo
=
"9"
;
}
return
biNo
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/GetEncryptContentAndMd5.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
cn.quantgroup.cashloanflowboss.api.oneclickdata.model.CreditStatusEnum
;
import
cn.quantgroup.cashloanflowboss.utils.http.HttpRequest
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Created by shang on 2019/12/18.
*/
@Slf4j
public
class
GetEncryptContentAndMd5
{
/**
* 加密加签
* @param paras
* @param aesKeywy
* @param md5Keywy
* @return
*/
public
static
String
getEncryptContent
(
Object
paras
,
String
aesKeywy
,
String
md5Keywy
)
{
String
acs_url
=
"http://acs.liangkebang.com/encryptAndBase64Encode"
;
Map
<
String
,
String
>
para8
=
new
HashMap
<
String
,
String
>();
final
String
bizData
=
JSONObject
.
toJSONString
(
paras
);
Map
<
String
,
String
>
contentMap
=
new
HashMap
<
String
,
String
>();
contentMap
.
put
(
"bizData"
,
bizData
);
contentMap
.
put
(
"sign"
,
md5
(
bizData
.
concat
(
md5Keywy
)));
para8
.
put
(
"content"
,
JSONObject
.
toJSONString
(
contentMap
));
para8
.
put
(
"key"
,
aesKeywy
);
Map
<
String
,
String
>
header
=
new
HashMap
<
String
,
String
>();
header
.
put
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
JSONObject
content
=
HttpRequest
.
doPostReturnResponseJson
(
acs_url
,
para8
,
header
);
String
contentStr
=
content
.
get
(
"context"
).
toString
();
log
.
info
(
"查看结果={}"
,
contentStr
);
return
contentStr
;
}
public
static
String
md5
(
String
content
)
{
MessageDigest
messageDigest
;
try
{
messageDigest
=
MessageDigest
.
getInstance
(
"md5"
);
}
catch
(
NoSuchAlgorithmException
e
)
{
log
.
info
(
e
.
getMessage
(),
e
);
return
null
;
}
messageDigest
.
update
(
content
.
getBytes
());
byte
[]
domain
=
messageDigest
.
digest
();
StringBuilder
md5StrBuff
=
new
StringBuilder
();
// converting domain to String
for
(
int
i
=
0
;
i
<
domain
.
length
;
i
++)
{
if
(
Integer
.
toHexString
(
0xFF
&
domain
[
i
]).
length
()
==
1
)
{
md5StrBuff
.
append
(
"0"
).
append
(
Integer
.
toHexString
(
0xFF
&
domain
[
i
]));
}
else
md5StrBuff
.
append
(
Integer
.
toHexString
(
0xFF
&
domain
[
i
]));
}
return
md5StrBuff
.
toString
();
}
public
static
String
getChannelName
(
String
channel
){
for
(
CreditStatusEnum
creditStatusEnum:
CreditStatusEnum
.
values
()){
if
(
channel
.
equals
(
creditStatusEnum
.
getCode
())){
return
creditStatusEnum
.
getDesc
();
}
}
return
""
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/HttpUtils.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
cn.quantgroup.cashloanflowboss.utils.ci.EnvUtil
;
import
cn.quantgroup.cashloanflowboss.utils.http.HttpRequestTester
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.testng.Assert
;
/**
*
* @author eqianyu
*
*/
@Slf4j
public
class
HttpUtils
{
/**
* 连接接口,并生成一个通用的调用接口的agent
*
* @param
* @param
*
* @return
*/
public
static
final
<
T
>
T
getAgent
(
Class
<
T
>
agent
,
String
site
,
String
protocol
)
{
String
env
=
EnvUtil
.
getHttpEnvBySite
(
site
);
boolean
isOffline
=
System
.
getProperty
(
"isOffline"
,
"true"
).
equalsIgnoreCase
(
"true"
)
?
true
:
false
;
Assert
.
assertTrue
(
StringUtils
.
isNotEmpty
(
env
),
String
.
format
(
"无法获取测试环境分组,请确保配置文件存在%s分组"
,
"Http.ENV"
));
log
.
info
(
"开始初始化{},所属集群:{},环境分组:{}"
,
protocol
,
site
,
env
);
// 判断是否为线上环境
isOffline
=
env
.
equalsIgnoreCase
(
"alprod"
)
||
env
.
equalsIgnoreCase
(
"online"
)
?
false
:
true
;
System
.
setProperty
(
"isOffline"
,
String
.
valueOf
(
isOffline
));
// 获取测试机ip
String
ip
=
System
.
getProperty
(
String
.
format
(
"Http.%s.%s.ip"
,
site
,
env
));
Assert
.
assertTrue
(
StringUtils
.
isNotEmpty
(
ip
),
String
.
format
(
"无法获取测试Server IP,请在配置文件中配置%s值"
,
String
.
format
(
"Http.%s.%s.ip"
,
site
,
env
)));
// 获取服务端口
String
port
=
System
.
getProperty
(
String
.
format
(
"Http.%s.%s.port"
,
site
,
env
),
""
);
String
url
=
String
.
format
(
"%s://%s:%s/"
,
protocol
,
ip
,
port
);
if
(
StringUtils
.
isEmpty
(
port
)){
url
=
String
.
format
(
"%s://%s/"
,
protocol
,
ip
);
}
log
.
info
(
"集群:{},调用地址:{}"
,
site
,
url
);
return
(
T
)
new
HttpRequestTester
(
protocol
,
ip
,
port
);
}
public
static
final
<
T
>
T
getAgent
(
Class
<
T
>
agent
,
String
site
)
{
return
getAgent
(
agent
,
site
,
"http"
);
}
public
static
void
main
(
String
[]
args
)
{
String
url
=
"https://exmail.qq.com:8080/cgi-bin/frame_html?sid=bWx62muUTpBvoBNL,2&r=7a7dd488d4b9d2f87edd43a295e33785"
;
url
=
"https://exmail.qq.com/cgi-bin/frame_html?sid=bWx62muUTpBvoBNL,2&r=7a7dd488d4b9d2f87edd43a295e33785"
;
}
public
static
String
replaceProtocolIpPort
(
String
url
,
String
protocol
,
String
ip
,
String
port
)
{
url
=
url
.
trim
();
protocol
=
protocol
.
trim
();
ip
=
ip
.
trim
();
port
=
port
.
trim
();
if
(
StringUtils
.
isNotEmpty
(
port
)){
port
=
":"
+
port
;
}
if
(
url
.
startsWith
(
"http:"
)||
url
.
startsWith
(
"https:"
)){
Assert
.
fail
(
"url 格式不正确,请参考:/api/getNameById,"
+
url
);
}
if
(!
url
.
startsWith
(
"/"
)){
url
=
"/"
+
url
;
}
return
protocol
+
"://"
+
ip
+
port
+
url
;
}
}
\ No newline at end of file
src/main/java/cn/quantgroup/cashloanflowboss/utils/LongStringParamer.java
0 → 100644
View file @
58e80715
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/main/java/cn/quantgroup/cashloanflowboss/utils/LuhnUtils.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
/**
* <pre>
* Luhn算法工具类
* Created by Binary Wang on 2018/3/22.
* </pre>
*
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
public
class
LuhnUtils
{
/**
* 从不含校验位的银行卡卡号采用 Luhn 校验算法获得校验位
* 该校验的过程:
* 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
* 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
* 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
*/
public
static
int
getLuhnSum
(
char
[]
chs
)
{
int
luhnSum
=
0
;
for
(
int
i
=
chs
.
length
-
1
,
j
=
0
;
i
>=
0
;
i
--,
j
++)
{
int
k
=
chs
[
i
]
-
'0'
;
if
(
j
%
2
==
0
)
{
k
*=
2
;
k
=
k
/
10
+
k
%
10
;
}
luhnSum
+=
k
;
}
return
luhnSum
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/RandomlyGeneratedParameters.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Created by shang on 2019/12/11.
*/
public
class
RandomlyGeneratedParameters
{
public
static
String
base
=
"abcdefghijklmnopqrstuvwxyz0123456789"
;
private
static
String
firstName
=
"赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄魏加封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘姜詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲台从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍却璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庚终暨居衡步都耿满弘匡国文寇广禄阙东殴殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后江红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于仲孙太叔申屠公孙乐正轩辕令狐钟离闾丘长孙慕容鲜于宇文司徒司空亓官司寇仉督子车颛孙端木巫马公西漆雕乐正壤驷公良拓拔夹谷宰父谷粱晋楚阎法汝鄢涂钦段干百里东郭南门呼延归海羊舌微生岳帅缑亢况后有琴梁丘左丘东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟第五言福百家姓续"
;
private
static
String
girl
=
"秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽 "
;
private
static
String
boy
=
"伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘"
;
private
static
String
[]
road
=
"重庆大厦,黑龙江路,十梅庵街,遵义路,湘潭街,瑞金广场,仙山街,仙山东路,仙山西大厦,白沙河路,赵红广场,机场路,民航街,长城南路,流亭立交桥,虹桥广场,长城大厦,礼阳路,风岗街,中川路,白塔广场,兴阳路,文阳街,绣城路,河城大厦,锦城广场,崇阳街,华城路,康城街,正阳路,和阳广场,中城路,江城大厦,顺城路,安城街,山城广场,春城街,国城路,泰城街,德阳路,明阳大厦,春阳路,艳阳街,秋阳路,硕阳街,青威高速,瑞阳街,丰海路,双元大厦,惜福镇街道,夏庄街道,古庙工业园,中山街,太平路,广西街,潍县广场,博山大厦,湖南路,济宁街,芝罘路,易州广场,荷泽四路,荷泽二街,荷泽一路,荷泽三大厦,观海二广场,广西支街,观海一路,济宁支街,莒县路,平度广场,明水路,蒙阴大厦,青岛路,湖北街,江宁广场,郯城街,天津路,保定街,安徽路,河北大厦,黄岛路,北京街,莘县路,济南街,宁阳广场,日照街,德县路,新泰大厦,荷泽路,山西广场,沂水路,肥城街,兰山路,四方街,平原广场,泗水大厦,浙江路,曲阜街,寿康路,河南广场,泰安路,大沽街,红山峡支路,西陵峡一大厦,台西纬一广场,台西纬四街,台西纬二路,西陵峡二街,西陵峡三路,台西纬三广场,台西纬五路,明月峡大厦,青铜峡路,台西二街,观音峡广场,瞿塘峡街,团岛二路,团岛一街,台西三路,台西一大厦,郓城南路,团岛三街,刘家峡路,西藏二街,西藏一广场,台西四街,三门峡路,城武支大厦,红山峡路,郓城北广场,龙羊峡路,西陵峡街,台西五路,团岛四街,石村广场,巫峡大厦,四川路,寿张街,嘉祥路,南村广场,范县路,西康街,云南路,巨野大厦,西江广场,鱼台街,单县路,定陶街,滕县路,钜野广场,观城路,汶上大厦,朝城路,滋阳街,邹县广场,濮县街,磁山路,汶水街,西藏路,城武大厦,团岛路,南阳街,广州路,东平街,枣庄广场,贵州街,费县路,南海大厦,登州路,文登广场,信号山支路,延安一街,信号山路,兴安支街,福山支广场,红岛支大厦,莱芜二路,吴县一街,金口三路,金口一广场,伏龙山路,鱼山支街,观象二路,吴县二大厦,莱芜一广场,金口二街,海阳路,龙口街,恒山路,鱼山广场,掖县路,福山大厦,红岛路,常州街,大学广场,龙华街,齐河路,莱阳街,黄县路,张店大厦,祚山路,苏州街,华山路,伏龙街,江苏广场,龙江街,王村路,琴屿大厦,齐东路,京山广场,龙山路,牟平街,延安三路,延吉街,南京广场,东海东大厦,银川西路,海口街,山东路,绍兴广场,芝泉路,东海中街,宁夏路,香港西大厦,隆德广场,扬州街,郧阳路,太平角一街,宁国二支路,太平角二广场,天台东一路,太平角三大厦,漳州路一路,漳州街二街,宁国一支广场,太平角六街,太平角四路,天台东二街,太平角五路,宁国三大厦,澳门三路,江西支街,澳门二路,宁国四街,大尧一广场,咸阳支街,洪泽湖路,吴兴二大厦,澄海三路,天台一广场,新湛二路,三明北街,新湛支路,湛山五街,泰州三广场,湛山四大厦,闽江三路,澳门四街,南海支路,吴兴三广场,三明南路,湛山二街,二轻新村镇,江南大厦,吴兴一广场,珠海二街,嘉峪关路,高邮湖街,湛山三路,澳门六广场,泰州二路,东海一大厦,天台二路,微山湖街,洞庭湖广场,珠海支街,福州南路,澄海二街,泰州四路,香港中大厦,澳门五路,新湛三街,澳门一路,正阳关街,宁武关广场,闽江四街,新湛一路,宁国一大厦,王家麦岛,澳门七广场,泰州一路,泰州六街,大尧二路,青大一街,闽江二广场,闽江一大厦,屏东支路,湛山一街,东海西路,徐家麦岛函谷关广场,大尧三路,晓望支街,秀湛二路,逍遥三大厦,澳门九广场,泰州五街,澄海一路,澳门八街,福州北路,珠海一广场,宁国二路,临淮关大厦,燕儿岛路,紫荆关街,武胜关广场,逍遥一街,秀湛四路,居庸关街,山海关路,鄱阳湖大厦,新湛路,漳州街,仙游路,花莲街,乐清广场,巢湖街,台南路,吴兴大厦,新田路,福清广场,澄海路,莆田街,海游路,镇江街,石岛广场,宜兴大厦,三明路,仰口街,沛县路,漳浦广场,大麦岛,台湾街,天台路,金湖大厦,高雄广场,海江街,岳阳路,善化街,荣成路,澳门广场,武昌路,闽江大厦,台北路,龙岩街,咸阳广场,宁德街,龙泉路,丽水街,海川路,彰化大厦,金田路,泰州街,太湖路,江西街,泰兴广场,青大街,金门路,南通大厦,旌德路,汇泉广场,宁国路,泉州街,如东路,奉化街,鹊山广场,莲岛大厦,华严路,嘉义街,古田路,南平广场,秀湛路,长汀街,湛山路,徐州大厦,丰县广场,汕头街,新竹路,黄海街,安庆路,基隆广场,韶关路,云霄大厦,新安路,仙居街,屏东广场,晓望街,海门路,珠海街,上杭路,永嘉大厦,漳平路,盐城街,新浦路,新昌街,高田广场,市场三街,金乡东路,市场二大厦,上海支路,李村支广场,惠民南路,市场纬街,长安南路,陵县支街,冠县支广场,小港一大厦,市场一路,小港二街,清平路,广东广场,新疆路,博平街,港通路,小港沿,福建广场,高唐街,茌平路,港青街,高密路,阳谷广场,平阴路,夏津大厦,邱县路,渤海街,恩县广场,旅顺街,堂邑路,李村街,即墨路,港华大厦,港环路,馆陶街,普集路,朝阳街,甘肃广场,港夏街,港联路,陵县大厦,上海路,宝山广场,武定路,长清街,长安路,惠民街,武城广场,聊城大厦,海泊路,沧口街,宁波路,胶州广场,莱州路,招远街,冠县路,六码头,金乡广场,禹城街,临清路,东阿街,吴淞路,大港沿,辽宁路,棣纬二大厦,大港纬一路,贮水山支街,无棣纬一广场,大港纬三街,大港纬五路,大港纬四街,大港纬二路,无棣二大厦,吉林支路,大港四街,普集支路,无棣三街,黄台支广场,大港三街,无棣一路,贮水山大厦,泰山支路,大港一广场,无棣四路,大连支街,大港二路,锦州支街,德平广场,高苑大厦,长山路,乐陵街,临邑路,嫩江广场,合江路,大连街,博兴路,蒲台大厦,黄台广场,城阳街,临淄路,安邱街,临朐路,青城广场,商河路,热河大厦,济阳路,承德街,淄川广场,辽北街,阳信路,益都街,松江路,流亭大厦,吉林路,恒台街,包头路,无棣街,铁山广场,锦州街,桓台路,兴安大厦,邹平路,胶东广场,章丘路,丹东街,华阳路,青海街,泰山广场,周村大厦,四平路,台东西七街,台东东二路,台东东七广场,台东西二路,东五街,云门二路,芙蓉山村,延安二广场,云门一街,台东四路,台东一街,台东二路,杭州支广场,内蒙古路,台东七大厦,台东六路,广饶支街,台东八广场,台东三街,四平支路,郭口东街,青海支路,沈阳支大厦,菜市二路,菜市一街,北仲三路,瑞云街,滨县广场,庆祥街,万寿路,大成大厦,芙蓉路,历城广场,大名路,昌平街,平定路,长兴街,浦口广场,诸城大厦,和兴路,德盛街,宁海路,威海广场,东山路,清和街,姜沟路,雒口大厦,松山广场,长春街,昆明路,顺兴街,利津路,阳明广场,人和路,郭口大厦,营口路,昌邑街,孟庄广场,丰盛街,埕口路,丹阳街,汉口路,洮南大厦,桑梓路,沾化街,山口路,沈阳街,南口广场,振兴街,通化路,福寺大厦,峄县路,寿光广场,曹县路,昌乐街,道口路,南九水街,台湛广场,东光大厦,驼峰路,太平山,标山路,云溪广场,太清路"
.
split
(
","
);
private
static
final
String
[]
email_suffix
=
"@gmail.com,@yahoo.com,@msn.com,@hotmail.com,@aol.com,@ask.com,@live.com,@qq.com,@0355.net,@163.com,@163.net,@263.net,@3721.net,@yeah.net,@googlemail.com,@126.com,@sina.com,@sohu.com,@yahoo.com.cn"
.
split
(
","
);
public
static
int
getNum
(
int
start
,
int
end
)
{
return
(
int
)(
Math
.
random
()*(
end
-
start
+
1
)+
start
);
}
/**
* 返回Email
* @param lMin 最小长度
* @param lMax 最大长度
* @return
*/
public
static
String
getEmail
(
int
lMin
,
int
lMax
)
{
int
length
=
getNum
(
lMin
,
lMax
);
StringBuffer
sb
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
int
number
=
(
int
)(
Math
.
random
()*
base
.
length
());
sb
.
append
(
base
.
charAt
(
number
));
}
sb
.
append
(
email_suffix
[(
int
)(
Math
.
random
()*
email_suffix
.
length
)]);
return
sb
.
toString
();
}
/**
* 返回手机号码
*/
public
static
String
[]
telFirst
=
"134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153"
.
split
(
","
);
public
static
String
getTel
()
{
int
index
=
getNum
(
0
,
telFirst
.
length
-
1
);
String
first
=
telFirst
[
index
];
String
second
=
String
.
valueOf
(
getNum
(
1
,
888
)+
10000
).
substring
(
1
);
String
third
=
String
.
valueOf
(
getNum
(
1
,
9100
)+
10000
).
substring
(
1
);
return
first
+
second
+
third
;
}
/**
* 返回中文姓名
*/
public
static
String
name_sex
=
""
;
public
static
String
getChineseName
()
{
int
index
=
getNum
(
0
,
firstName
.
length
()-
1
);
String
first
=
firstName
.
substring
(
index
,
index
+
1
);
int
sex
=
getNum
(
0
,
1
);
String
str
=
boy
;
int
length
=
boy
.
length
();
if
(
sex
==
0
){
str
=
girl
;
length
=
girl
.
length
();
name_sex
=
"女"
;
}
else
{
name_sex
=
"男"
;
}
index
=
getNum
(
0
,
length
-
1
);
String
second
=
str
.
substring
(
index
,
index
+
1
);
int
hasThird
=
getNum
(
0
,
1
);
String
third
=
""
;
if
(
hasThird
==
1
){
index
=
getNum
(
0
,
length
-
1
);
third
=
str
.
substring
(
index
,
index
+
1
);
}
return
first
+
second
+
third
;
}
/**
* 返回地址
* @return
*/
public
static
String
getRoad
()
{
int
index
=
getNum
(
0
,
road
.
length
-
1
);
String
first
=
road
[
index
];
String
second
=
String
.
valueOf
(
getNum
(
11
,
150
))+
"号"
;
String
third
=
"-"
+
getNum
(
1
,
20
)+
"-"
+
getNum
(
1
,
10
);
return
first
+
second
+
third
;
}
/**
* 数据封装
* @return
*/
public
static
Map
getAddress
()
{
Map
map
=
new
HashMap
();
map
.
put
(
"name"
,
getChineseName
());
map
.
put
(
"sex"
,
name_sex
);
map
.
put
(
"road"
,
getRoad
());
map
.
put
(
"tel"
,
getTel
());
map
.
put
(
"email"
,
getEmail
(
6
,
9
));
return
map
;
}
public
static
void
main
(
String
[]
args
)
{
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
System
.
out
.
println
(
getAddress
());
// System.out.println(getEmailName(6,9));
}
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/ci/EnvUtil.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
.
ci
;
import
org.apache.commons.lang3.StringUtils
;
import
org.testng.Assert
;
import
java.io.File
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Properties
;
import
java.util.Set
;
/**
* Created by shang on 2019/7/26.
*/
@SuppressWarnings
(
"unused"
)
public
class
EnvUtil
{
public
static
final
String
DSF_CONFIG
=
System
.
getProperty
(
"user.dir"
)
+
File
.
separatorChar
+
"resources"
+
File
.
separatorChar
+
"config"
+
File
.
separatorChar
+
"dsf.config"
;
private
static
File
DSF_CONFIG_TMP
=
null
;
private
static
Map
<
String
,
String
>
sitesMap
=
new
HashMap
<
String
,
String
>();
/**
* �������ò��Ի���
*/
@SuppressWarnings
(
"unchecked"
)
public
static
void
resetEnv
()
{
EnvUtil
envUtil
=
new
EnvUtil
();
// if (JenkinsUtil.IS_ON_JENKINS) {// Jenkins��ִ��
// JenkinsUtil jenkinsUtil = new JenkinsUtil();
// Map<String, String> paraMap = jenkinsUtil.getBuildParameters();
// if (paraMap != null && paraMap.size() > 0) {
// String configType = paraMap.get("Config_Type");
// String server = paraMap.get("Server");
// String siteMap = paraMap.get("siteMap");
// if(StringUtils.isNotEmpty(siteMap)){
// try{
// sitesMap = (Map<String, String>) JSONObject.parse(siteMap);
// }catch(Exception e){
// System.out.println(siteMap+" ��json��ʽ��ֵ��,ת��map�쳣");
// e.printStackTrace();
// }
// }
// envUtil.resetDsfEnv(sitesMap,configType);
// if (StringUtils.isNotEmpty(configType)) {
// if (!configType.equalsIgnoreCase("mirror")&&!configType.equalsIgnoreCase("prod")
// &&!configType.equalsIgnoreCase("alprod")) {
// envUtil.resetDubboEnv(configType);
// envUtil.resetHttpEnv(configType);
// Logger.log("�����滻����ɹ���configType��%s,server:%s", configType, server);
// }
// }
// }
// }else{
// envUtil.resetDsfEnv(sitesMap,"");
// }
}
private
void
resetHttpEnv
(
String
configType
)
{
configType
=
configType
.
toLowerCase
();
Properties
propertys
=
System
.
getProperties
();
Set
<
Map
.
Entry
<
Object
,
Object
>>
propertySet
=
propertys
.
entrySet
();
for
(
Map
.
Entry
<
Object
,
Object
>
property
:
propertySet
)
{
String
propertyKey
=
property
.
getKey
().
toString
();
if
(
propertyKey
.
toLowerCase
().
contains
(
"http."
)
&&
propertyKey
.
toLowerCase
().
contains
(
"."
+
configType
+
"."
))
{
String
group
=
propertyKey
.
split
(
"\\."
)[
2
];
// �������÷���
System
.
setProperty
(
"Http.ENV"
,
group
);
break
;
}
}
}
/**
* ��������dubbo���Է���
*
* @param configType
*/
private
void
resetDubboEnv
(
String
configType
)
{
configType
=
configType
.
toLowerCase
();
Properties
propertys
=
System
.
getProperties
();
Set
<
Map
.
Entry
<
Object
,
Object
>>
propertySet
=
propertys
.
entrySet
();
for
(
Map
.
Entry
<
Object
,
Object
>
property
:
propertySet
)
{
String
propertyKey
=
property
.
getKey
().
toString
();
if
(
propertyKey
.
toLowerCase
().
contains
(
"dubbo."
)
&&
propertyKey
.
toLowerCase
().
contains
(
"."
+
configType
+
"."
))
{
String
group
=
propertyKey
.
split
(
"\\."
)[
2
];
// �������÷���
System
.
setProperty
(
"Dubbo.ENV"
,
group
);
break
;
}
}
}
public
static
String
getDsfPath
(){
if
(
DSF_CONFIG_TMP
==
null
){
Assert
.
fail
(
"����dsf��ʱ�����ļ�ʧ�ܣ�"
);
}
return
DSF_CONFIG_TMP
.
getAbsolutePath
();
}
//
public
static
String
getDubboEnvBySite
(
String
siteName
){
String
env
=
System
.
getProperty
(
"Dubbo.ENV"
);
//JenkinsUtil.IS_ON_JENKINS&&
if
(
StringUtils
.
isNotEmpty
(
siteName
)){
String
ciEnv
=
getEnvBySite
(
siteName
);
if
(
StringUtils
.
isNotEmpty
(
ciEnv
)){
Properties
propertys
=
System
.
getProperties
();
Set
<
Map
.
Entry
<
Object
,
Object
>>
propertySet
=
propertys
.
entrySet
();
for
(
Map
.
Entry
<
Object
,
Object
>
property
:
propertySet
)
{
String
propertyKey
=
property
.
getKey
().
toString
();
if
(
propertyKey
.
toLowerCase
().
contains
(
String
.
format
(
"dubbo.%s.%s."
,
siteName
.
toLowerCase
(),
ciEnv
.
toLowerCase
())))
{
// �������÷���
env
=
propertyKey
.
split
(
"\\."
)[
2
];
break
;
}
}
}
}
return
env
;
}
public
static
String
getHttpEnvBySite
(
String
siteName
){
String
env
=
System
.
getProperty
(
"Http.ENV"
);
if
(
StringUtils
.
isNotEmpty
(
siteName
)){
String
ciEnv
=
getEnvBySite
(
siteName
);
if
(
StringUtils
.
isNotEmpty
(
ciEnv
)){
Properties
propertys
=
System
.
getProperties
();
Set
<
Map
.
Entry
<
Object
,
Object
>>
propertySet
=
propertys
.
entrySet
();
for
(
Map
.
Entry
<
Object
,
Object
>
property
:
propertySet
)
{
String
propertyKey
=
property
.
getKey
().
toString
();
if
(
propertyKey
.
toLowerCase
().
contains
(
String
.
format
(
"http.%s.%s."
,
siteName
.
toLowerCase
(),
ciEnv
.
toLowerCase
())))
{
// �������÷���,�����ַ�������Сд
env
=
propertyKey
.
split
(
"\\."
)[
2
];
break
;
}
}
}
}
return
env
;
}
private
static
String
getEnvBySite
(
String
siteName
){
String
env
=
null
;
if
(
StringUtils
.
isNotEmpty
(
siteName
)){
siteName
=
siteName
.
trim
();
for
(
Map
.
Entry
<
String
,
String
>
entry
:
sitesMap
.
entrySet
())
{
if
(
entry
.
getKey
().
equalsIgnoreCase
(
siteName
)
//�����ּ�Ⱥ����Сд
&&
StringUtils
.
isNotEmpty
(
entry
.
getValue
())){
env
=
entry
.
getValue
().
toLowerCase
();
break
;
}
}
}
return
env
;
}
public
static
void
main
(
String
[]
args
){
String
a
=
"{\"��Ŀ����\": \"��������\"}"
;
EnvUtil
env
=
new
EnvUtil
();
//
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/http/HttpRequest.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
.
http
;
import
cn.quantgroup.cashloanflowboss.utils.CommonConstant
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONException
;
import
com.alibaba.fastjson.JSONObject
;
import
org.apache.http.Consts
;
import
org.apache.http.client.ClientProtocolException
;
import
org.apache.http.client.entity.UrlEncodedFormEntity
;
import
org.apache.http.message.BasicNameValuePair
;
import
org.apache.http.util.EntityUtils
;
import
java.io.IOException
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
/**
* @Description: TODO
* @author xh
* @date 2017年2月28日 下午2:43:45
*/
public
class
HttpRequest
{
/**
* 通过Post请求返回Json格式对象
* @param url 请求URL地址
* @return
*/
public
static
JSONObject
doPostReturnResponseJson
(
String
url
)
{
return
doPostReturnResponseJson
(
url
,
null
,
null
,
CommonConstant
.
UTF8
);
}
/**
* 通过Post请求返回Json格式对象
* @param url 请求URL地址
* @param params 请求参数
* @return
*/
public
static
JSONObject
doPostReturnResponseJson
(
String
url
,
Map
<
String
,
String
>
params
)
{
return
doPostReturnResponseJson
(
url
,
params
,
null
,
CommonConstant
.
UTF8
);
}
/**
* 通过raw body方式发送参数
* @param url 请求URL地址
* @param params 请求参数
* @return
*/
public
static
JSONObject
doPostReturnResponseJson
(
String
url
,
String
params
)
{
return
doPostReturnResponseJson
(
url
,
params
,
null
,
null
,
null
);
}
/**
* 通过raw body方式发送参数
* @param url 请求URL地址
* @param params 请求参数
* @return
*/
public
static
JSONObject
doPostReturnResponseJson
(
String
url
,
String
params
,
Map
<
String
,
String
>
header
)
{
return
doPostReturnResponseJson
(
url
,
params
,
header
,
null
,
null
);
}
/**
* 通过raw body方式发送参数
* @param url 请求URL地址
* @param params 请求参数
* @return
*/
public
static
JSONObject
doPostReturnResponseJson1
(
String
url
,
String
params
,
Map
<
String
,
String
>
header
)
{
return
doPostReturnResponseJson
(
url
,
params
,
header
,
null
,
null
);
}
/**
* 通过Post请求返回Json格式对象
* @param url 请求URL地址
* @param params 请求参数
* @param header 请求头
* @return
*/
public
static
JSONObject
doPostReturnResponseJson
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
)
{
return
doPostReturnResponseJson
(
url
,
params
,
header
,
CommonConstant
.
UTF8
);
}
/**
* 通过Post请求返回Json格式对象
* @param url 请求URL地址
* @param params 请求参数
* @param header 请求头
* @param charset 字符编码
* @return
*/
public
static
JSONObject
doPostReturnResponseJson
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
,
String
charset
)
{
return
doPostReturnResponseJson
(
url
,
params
,
header
,
null
,
null
);
}
public
static
JSONObject
doPostReturnResponseJson
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
,
String
filePath
,
String
pwd
)
{
HttpResultEntity
resultEntity
=
HttpService
.
getInstance
().
doPost
(
url
,
params
,
header
,
null
,
null
,
CommonConstant
.
UTF8
);
JSONObject
jsonObject
=
new
JSONObject
();
try
{
Object
o
=
null
;
try
{
if
(
resultEntity
.
getResponseString
().
isEmpty
()){
jsonObject
.
put
(
"context"
,
resultEntity
.
getResponseString
());
}
else
{
o
=
JSONObject
.
parse
(
resultEntity
.
getResponseString
());
if
(
o
instanceof
JSONArray
)
{
JSONArray
jsonArray
=
(
JSONArray
)
o
;
Iterator
it
=
jsonArray
.
iterator
();
int
flag
=
0
;
while
(
it
.
hasNext
())
{
jsonObject
.
put
(
flag
++
+
""
,
it
.
next
());
}
}
else
if
(
o
instanceof
JSONObject
)
{
jsonObject
=
(
JSONObject
)
o
;
}
else
{
jsonObject
.
put
(
"context"
,
resultEntity
.
getResponseString
());
}
}
}
catch
(
JSONException
e
){
jsonObject
.
put
(
"context"
,
resultEntity
.
getResponseString
());
}
jsonObject
.
put
(
"cookies"
,
JSONArray
.
toJSON
(
resultEntity
.
getCookies
()));
jsonObject
.
put
(
"statusCode"
,
resultEntity
.
getStatusCode
());
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
// Logger.log("打印结果111:"+jsonObject);
return
jsonObject
;
}
public
static
JSONObject
doPostReturnResponseJson
(
String
url
,
String
params
,
Map
<
String
,
String
>
header
,
String
filePath
,
String
pwd
)
{
HttpResultEntity
resultEntity
=
HttpService
.
getInstance
().
doPost
(
url
,
params
,
header
,
null
,
null
,
CommonConstant
.
UTF8
);
JSONObject
jsonObject
=
new
JSONObject
();
try
{
Object
o
=
null
;
try
{
o
=
JSONObject
.
parse
(
resultEntity
.
getResponseString
());
if
(
o
instanceof
JSONArray
){
JSONArray
jsonArray
=(
JSONArray
)
o
;
Iterator
it
=
jsonArray
.
iterator
();
int
flag
=
0
;
while
(
it
.
hasNext
()){
jsonObject
.
put
(
flag
+++
""
,
it
.
next
());
}
}
else
if
(
o
instanceof
JSONObject
){
jsonObject
=(
JSONObject
)
o
;
}
else
{
jsonObject
.
put
(
"context"
,
resultEntity
.
getResponseString
());
}
}
catch
(
JSONException
e
){
jsonObject
.
put
(
"context"
,
resultEntity
.
getResponseString
());
}
jsonObject
.
put
(
"cookies"
,
JSONArray
.
toJSON
(
resultEntity
.
getCookies
()));
}
catch
(
Exception
e
){
e
.
printStackTrace
();
System
.
out
.
println
(
"结果转传json失败,结果为:"
+
resultEntity
.
getResponseString
());
}
return
jsonObject
;
}
/**
* 通过POST发送请求
* @param url 请求的URL地址
* @return
*/
public
static
String
doPostReturnResponse
(
String
url
)
{
return
doPostReturnResponse
(
url
,
null
,
null
);
}
/**
* 通过POST发送请求
* @param url 请求的URL地址
* @param params 请求的查询参数,可以为null
* @return
*/
public
static
String
doPostReturnResponse
(
String
url
,
Map
<
String
,
String
>
params
)
{
return
doPostReturnResponse
(
url
,
params
,
null
);
}
/**
* 通过POST发送请求
*
* @param url 请求的URL地址
* @param params 请求的查询参数,可以为null
* @return 返回请求响应的HTML
*/
public
static
String
doPostReturnResponse
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
)
{
return
doPostReturnResponse
(
url
,
params
,
header
,
null
,
null
);
}
/**
* @Description: 通过POST发送请求
* @param url
* @param params
* @param header
* @param filePath
* @param pwd
* @param
* @return String
* @throws
*/
public
static
String
doPostReturnResponse
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
,
String
filePath
,
String
pwd
)
{
JSONObject
jsonObject
=
doPostReturnResponseJson
(
url
,
params
,
header
,
filePath
,
pwd
);
System
.
out
.
println
(
jsonObject
.
toJSONString
());
return
jsonObject
.
toJSONString
();
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @return
*/
public
static
JSONObject
doGetReturnResponseJson
(
String
url
)
{
return
doGetReturnResponseJson
(
url
,
null
);
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @param queryString 请求参数
* @return
*/
public
static
JSONObject
doGetReturnResponseJson
(
String
url
,
String
queryString
)
{
return
doGetReturnResponseJson
(
url
,
queryString
,
null
);
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @param list 请求参数
* @param header 请求头
* @return
*/
public
static
JSONObject
doGetReturnResponseJson1
(
String
url
,
List
<
BasicNameValuePair
>
list
,
Map
<
String
,
String
>
header
)
throws
ClientProtocolException
,
IOException
{
String
queryString
=
EntityUtils
.
toString
(
new
UrlEncodedFormEntity
(
list
,
Consts
.
UTF_8
));
return
doGetReturnResponseJson
(
url
,
queryString
,
header
,
null
,
null
);
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @param queryString 请求参数
* @param header 请求头
* @return
*/
public
static
JSONObject
doGetReturnResponseJson
(
String
url
,
String
queryString
,
Map
<
String
,
String
>
header
)
{
return
doGetReturnResponseJson
(
url
,
queryString
,
header
,
null
,
null
);
}
/**
* 通过Get请求返回Josn格式对象
* @param url 请求URL地址
* @param queryString 请求参数
* @param header 请求头
* @return
*/
public
static
JSONObject
doGetReturnResponseJson
(
String
url
,
String
queryString
,
Map
<
String
,
String
>
header
,
String
file
,
String
pwd
)
{
HttpResultEntity
resultEntity
=
HttpService
.
getInstance
().
doGet
(
queryString
==
null
?
url:
url
+
"?"
+
queryString
,
header
,
file
,
pwd
);
JSONObject
jsonObject
=
new
JSONObject
();
try
{
Object
o
=
null
;
try
{
o
=
JSONObject
.
parse
(
resultEntity
.
getResponseString
());
if
(
o
instanceof
JSONArray
){
JSONArray
jsonArray
=(
JSONArray
)
o
;
Iterator
it
=
jsonArray
.
iterator
();
int
flag
=
0
;
while
(
it
.
hasNext
()){
jsonObject
.
put
(
flag
+++
""
,
it
.
next
());
}
}
else
if
(
o
instanceof
JSONObject
){
jsonObject
=(
JSONObject
)
o
;
}
else
{
jsonObject
.
put
(
"context"
,
resultEntity
.
getResponseString
());
}
}
catch
(
JSONException
e
){
jsonObject
.
put
(
"context"
,
resultEntity
.
getResponseString
());
}
jsonObject
.
put
(
"cookies"
,
JSONArray
.
toJSON
(
resultEntity
.
getCookies
()));
jsonObject
.
put
(
"statusCode"
,
resultEntity
.
getStatusCode
());
}
catch
(
Exception
e
){
e
.
printStackTrace
();
System
.
out
.
println
(
"结果转传json失败,结果为:"
+
resultEntity
.
getResponseString
());
}
return
jsonObject
;
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
* @param url 请求的URL地址
* @return 返回请求响应的HTML
*/
public
static
String
doGetReturnResponse
(
String
url
)
{
return
doGetReturnResponse
(
url
,
""
,
null
);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
* @param url 请求的URL地址
* @param queryString 请求的查询参数,可以为null
* @return 返回请求响应的HTML
*/
public
static
String
doGetReturnResponse
(
String
url
,
String
queryString
)
{
return
doGetReturnResponse
(
url
,
queryString
,
null
);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url 请求的URL地址
* @param queryString 请求的查询参数,可以为null
* @param header header信息
* @return 返回请求响应的HTML
*/
public
static
String
doGetReturnResponse
(
String
url
,
String
queryString
,
Map
<
String
,
String
>
header
)
{
return
doGetReturnResponse
(
url
,
queryString
,
header
,
null
,
null
);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
* @param url 请求的URL地址
* @param queryString 请求的查询参数,可以为null
* @param header header信息
* @param filePath https的key文件路径
* @param pwd 秘钥key
* @return 返回请求响应的HTML
*/
public
static
String
doGetReturnResponse
(
String
url
,
String
queryString
,
Map
<
String
,
String
>
header
,
String
filePath
,
String
pwd
)
{
JSONObject
jsonObject
=
doGetReturnResponseJson
(
url
,
queryString
,
header
,
filePath
,
pwd
);
return
jsonObject
.
toString
();
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
HttpRequest
.
doGetReturnResponseJson
(
"http://djoy.daojia-inc.com/tmp/getModuleList"
));
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/http/HttpRequestTester.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
.
http
;
import
cn.quantgroup.cashloanflowboss.utils.HttpUtils
;
import
com.alibaba.fastjson.JSONObject
;
import
java.util.Map
;
public
class
HttpRequestTester
{
private
String
PROTOCOL
=
null
;
private
String
IP
=
null
;
private
String
PORT
=
null
;
public
static
final
String
UTF8
=
"UTF-8"
;
public
HttpRequestTester
(
String
protocol
,
String
ip
,
String
port
)
{
super
();
PROTOCOL
=
protocol
;
IP
=
ip
;
PORT
=
port
;
}
/**
* 通过Post请求返回Json格式对象
*
* @param url
* 请求URL地址
* @return
*/
public
JSONObject
doPostReturnResponseJson
(
String
url
)
{
return
doPostReturnResponseJson
(
url
,
null
,
null
,
HttpRequestTester
.
UTF8
);
}
/**
* 通过Post请求返回Json格式对象
*
* @param url
* 请求URL地址
* @param params
* 请求参数
* @return
*/
public
JSONObject
doPostReturnResponseJson
(
String
url
,
Map
<
String
,
String
>
params
)
{
return
doPostReturnResponseJson
(
url
,
params
,
null
,
HttpRequestTester
.
UTF8
);
}
/**
* 通过raw body方式发送参数
*
* @param url
* 请求URL地址
* @param params
* 请求参数
* @return
*/
public
JSONObject
doPostReturnResponseJson
(
String
url
,
String
params
)
{
return
doPostReturnResponseJson
(
url
,
params
,
null
,
null
,
null
);
}
/**
* 通过Post请求返回Json格式对象
*
* @param url
* 请求URL地址
* @param params
* 请求参数
* @param header
* 请求头
* @return
*/
public
JSONObject
doPostReturnResponseJson
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
)
{
return
doPostReturnResponseJson
(
url
,
params
,
header
,
HttpRequestTester
.
UTF8
);
}
/**
* 通过Post请求返回Json格式对象
*
* @param url
* 请求URL地址
* @param params
* 请求参数
* @param header
* 请求头
* @param charset
* 字符编码
* @return
*/
public
JSONObject
doPostReturnResponseJson
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
,
String
charset
)
{
return
doPostReturnResponseJson
(
url
,
params
,
header
,
null
,
null
);
}
// TODO
public
JSONObject
doPostReturnResponseJson
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
,
String
filePath
,
String
pwd
)
{
url
=
HttpUtils
.
replaceProtocolIpPort
(
url
,
PROTOCOL
,
IP
,
PORT
);
return
HttpRequest
.
doPostReturnResponseJson
(
url
,
params
,
header
,
filePath
,
pwd
);
}
// TODO
public
JSONObject
doPostReturnResponseJson
(
String
url
,
String
params
,
Map
<
String
,
String
>
header
,
String
filePath
,
String
pwd
)
{
url
=
HttpUtils
.
replaceProtocolIpPort
(
url
,
PROTOCOL
,
IP
,
PORT
);
return
HttpRequest
.
doPostReturnResponseJson
(
url
,
params
,
header
,
filePath
,
pwd
);
}
/**
* 通过POST发送请求
*
* @param url
* 请求的URL地址
* @return
*/
public
String
doPostReturnResponse
(
String
url
)
{
return
doPostReturnResponse
(
url
,
null
,
null
);
}
/**
* 通过POST发送请求
*
* @param url
* 请求的URL地址
* @param params
* 请求的查询参数,可以为null
* @return
*/
public
String
doPostReturnResponse
(
String
url
,
Map
<
String
,
String
>
params
)
{
return
doPostReturnResponse
(
url
,
params
,
null
);
}
/**
* 通过POST发送请求
*
* @param url
* 请求的URL地址
* @param params
* 请求的查询参数,可以为null
* @return 返回请求响应的HTML
*/
public
String
doPostReturnResponse
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
)
{
return
doPostReturnResponse
(
url
,
params
,
header
,
null
,
null
);
}
/**
* @Description: 通过POST发送请求 @param url @param params @param header @param
* filePath @param pwd @param charset @return String @throws
*/
public
String
doPostReturnResponse
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
header
,
String
filePath
,
String
pwd
)
{
JSONObject
jsonObject
=
doPostReturnResponseJson
(
url
,
params
,
header
,
filePath
,
pwd
);
return
jsonObject
.
toJSONString
();
}
/**
* 通过Get请求返回Josn格式对象
*
* @param url
* 请求URL地址
* @return
*/
public
JSONObject
doGetReturnResponseJson
(
String
url
)
{
return
doGetReturnResponseJson
(
url
,
null
);
}
/**
* 通过Get请求返回Josn格式对象
*
* @param url
* 请求URL地址
* @param queryString
* 请求参数
* @return
*/
public
JSONObject
doGetReturnResponseJson
(
String
url
,
String
queryString
)
{
return
doGetReturnResponseJson
(
url
,
queryString
,
null
);
}
/**
* 通过Get请求返回Josn格式对象
*
* @param url
* 请求URL地址
* @param queryString
* 请求参数
* @param header
* 请求头
* @return
*/
public
JSONObject
doGetReturnResponseJson
(
String
url
,
String
queryString
,
Map
<
String
,
String
>
header
)
{
return
doGetReturnResponseJson
(
url
,
queryString
,
header
,
null
,
null
);
}
/**
* 通过Get请求返回Josn格式对象
*
* @param url
* 请求URL地址
* @param queryString
* 请求参数
* @param header
* 请求头
* @return
*/
public
JSONObject
doGetReturnResponseJson
(
String
url
,
String
queryString
,
Map
<
String
,
String
>
header
,
String
file
,
String
pwd
)
{
url
=
HttpUtils
.
replaceProtocolIpPort
(
url
,
PROTOCOL
,
IP
,
PORT
);
return
HttpRequest
.
doGetReturnResponseJson
(
url
,
queryString
,
header
,
file
,
pwd
);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url
* 请求的URL地址
* @return 返回请求响应的HTML
*/
public
String
doGetReturnResponse
(
String
url
)
{
return
doGetReturnResponse
(
url
,
""
,
null
);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url
* 请求的URL地址
* @param queryString
* 请求的查询参数,可以为null
* @return 返回请求响应的HTML
*/
public
String
doGetReturnResponse
(
String
url
,
String
queryString
)
{
return
doGetReturnResponse
(
url
,
queryString
,
null
);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url
* 请求的URL地址
* @param queryString
* 请求的查询参数,可以为null
* @param header
* header信息
* @return 返回请求响应的HTML
*/
public
String
doGetReturnResponse
(
String
url
,
String
queryString
,
Map
<
String
,
String
>
header
)
{
return
doGetReturnResponse
(
url
,
queryString
,
header
,
null
,
null
);
}
/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url
* 请求的URL地址
* @param queryString
* 请求的查询参数,可以为null
* @param header
* header信息
* @param filePath
* https的key文件路径
* @param pwd
* 秘钥key
* @return 返回请求响应的HTML
*/
public
String
doGetReturnResponse
(
String
url
,
String
queryString
,
Map
<
String
,
String
>
header
,
String
filePath
,
String
pwd
)
{
JSONObject
jsonObject
=
doGetReturnResponseJson
(
url
,
queryString
,
header
,
filePath
,
pwd
);
return
jsonObject
.
toString
();
}
public
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
HttpRequest
.
doGetReturnResponseJson
(
"http://djoy.daojia-inc.com/tmp/getModuleList"
));
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/http/HttpResultEntity.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
.
http
;
import
org.apache.http.cookie.Cookie
;
import
java.util.List
;
/**
* @Description: TODO
* @author xh
* @date 2017年3月3日 下午3:19:12
*/
public
class
HttpResultEntity
{
private
String
responseString
;
private
int
statusCode
;
private
List
<
Cookie
>
cookies
;
public
String
getResponseString
()
{
return
responseString
;
}
public
void
setResponseString
(
String
responseString
)
{
this
.
responseString
=
responseString
;
}
public
List
<
Cookie
>
getCookies
()
{
return
cookies
;
}
public
void
setCookies
(
List
<
Cookie
>
cookies
)
{
this
.
cookies
=
cookies
;
}
public
int
getStatusCode
()
{
return
statusCode
;
}
public
void
setStatusCode
(
int
statusCode
)
{
this
.
statusCode
=
statusCode
;
}
}
src/main/java/cn/quantgroup/cashloanflowboss/utils/http/HttpService.java
0 → 100644
View file @
58e80715
package
cn
.
quantgroup
.
cashloanflowboss
.
utils
.
http
;
import
cn.quantgroup.cashloanflowboss.utils.CommonConstant
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.http.*
;
import
org.apache.http.HttpRequest
;
import
org.apache.http.client.CookieStore
;
import
org.apache.http.client.HttpRequestRetryHandler
;
import
org.apache.http.client.config.CookieSpecs
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.client.entity.UrlEncodedFormEntity
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpGet
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.client.methods.HttpRequestBase
;
import
org.apache.http.client.protocol.ClientContext
;
import
org.apache.http.client.protocol.HttpClientContext
;
import
org.apache.http.conn.ConnectTimeoutException
;
import
org.apache.http.conn.ssl.SSLConnectionSocketFactory
;
import
org.apache.http.conn.ssl.TrustSelfSignedStrategy
;
import
org.apache.http.entity.ContentType
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.BasicCookieStore
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.impl.client.LaxRedirectStrategy
;
import
org.apache.http.impl.conn.PoolingHttpClientConnectionManager
;
import
org.apache.http.impl.cookie.BasicClientCookie
;
import
org.apache.http.message.BasicNameValuePair
;
import
org.apache.http.protocol.BasicHttpContext
;
import
org.apache.http.protocol.HttpContext
;
import
org.apache.http.ssl.SSLContextBuilder
;
import
org.apache.http.ssl.TrustStrategy
;
import
org.apache.http.util.ByteArrayBuffer
;
import
javax.net.ssl.SSLContext
;
import
javax.net.ssl.SSLException
;
import
java.io.*
;
import
java.net.*
;
import
java.nio.charset.Charset
;
import
java.security.KeyManagementException
;
import
java.security.KeyStore
;
import
java.security.KeyStoreException
;
import
java.security.NoSuchAlgorithmException
;
import
java.security.cert.CertificateException
;
import
java.security.cert.X509Certificate
;
import
java.util.*
;
import
java.util.Map.Entry
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
java.util.zip.GZIPInputStream
;
/**
* @Description: http测试
* @author xh
* @date 2017年2月28日 下午1:37:51
*/
@Slf4j
public
class
HttpService
{
private
PoolingHttpClientConnectionManager
httpClientConnectionManager
=
null
;
private
static
final
HttpService
httpService
=
new
HttpService
();
public
static
HttpService
getInstance
()
{
return
httpService
;
}
private
HttpService
()
{
initHttpClient
();
}
public
void
initHttpClient
()
{
httpClientConnectionManager
=
new
PoolingHttpClientConnectionManager
();
httpClientConnectionManager
.
setMaxTotal
(
CommonConstant
.
HTTPCLIENT_CONNECTION_COUNT
);
httpClientConnectionManager
.
setDefaultMaxPerRoute
(
CommonConstant
.
HTTPCLIENT_MAXPERROUTE_COUNT
);
}
HttpRequestRetryHandler
myRetryHandler
=
new
HttpRequestRetryHandler
()
{
public
boolean
retryRequest
(
IOException
exception
,
int
executionCount
,
HttpContext
context
)
{
if
(
executionCount
>=
CommonConstant
.
HTTPCLIENT_MAXRETRY_COUNT
)
{
return
false
;
}
if
(
exception
instanceof
InterruptedIOException
)
{
return
false
;
}
if
(
exception
instanceof
UnknownHostException
)
{
return
false
;
}
if
(
exception
instanceof
ConnectTimeoutException
)
{
return
false
;
}
if
(
exception
instanceof
SSLException
)
{
return
false
;
}
HttpClientContext
clientContext
=
HttpClientContext
.
adapt
(
context
);
HttpRequest
request
=
clientContext
.
getRequest
();
boolean
idempotent
=
!(
request
instanceof
HttpEntityEnclosingRequest
);
if
(
idempotent
)
{
return
true
;
}
return
false
;
}
};
public
CloseableHttpClient
getHttpClient
()
{
String
socketTimeout
=
System
.
getProperty
(
"httpRequestTimeout"
);
int
httpclientSocketTimeout
=
CommonConstant
.
HTTPCLIENT_SOCKET_TIMEOUT
;
if
(
StringUtils
.
isNotEmpty
(
socketTimeout
)&&
StringUtils
.
isNumeric
(
socketTimeout
)){
httpclientSocketTimeout
=
Integer
.
parseInt
(
socketTimeout
);
}
RequestConfig
requestConfig
=
RequestConfig
.
custom
()
.
setConnectTimeout
(
CommonConstant
.
HTTPCLIENT_CONNECT_TIMEOUT
)
.
setSocketTimeout
(
httpclientSocketTimeout
)
.
setCookieSpec
(
CookieSpecs
.
BEST_MATCH
).
build
();
LaxRedirectStrategy
redirectStrategy
=
new
LaxRedirectStrategy
();
CloseableHttpClient
httpClient
=
HttpClients
.
custom
()
.
setConnectionManager
(
httpClientConnectionManager
)
.
setDefaultRequestConfig
(
requestConfig
)
.
setRedirectStrategy
(
redirectStrategy
)
.
setRetryHandler
(
myRetryHandler
).
build
();
return
httpClient
;
}
public
HttpResultEntity
doGet
(
String
urlString
,
Map
<
String
,
String
>
headerInfo
,
String
filePath
,
String
pwd
)
{
HttpResultEntity
resultEntity
=
new
HttpResultEntity
();
String
result
=
""
;
if
(
null
==
urlString
||
urlString
.
isEmpty
()
||
!
urlString
.
startsWith
(
"http"
))
{
// 如果urlString为null或者urlString为空,或urlString非http开头,返回src空值
return
null
;
}
CloseableHttpResponse
response
=
null
;
HttpGet
httpGet
=
null
;
urlString
=
urlString
.
trim
();
try
{
URL
url
=
new
URL
(
urlString
);
//System.out.println(url.getProtocol());
//System.out.println(url.getAuthority());
//System.out.println(url.getPath());
//System.out.println(url.getQuery());
URI
uri
=
new
URI
(
url
.
getProtocol
(),
url
.
getAuthority
(),
url
.
getPath
(),
url
.
getQuery
(),
null
);
httpGet
=
new
HttpGet
(
uri
);
System
.
out
.
println
(
"请求的uri是:"
+
uri
);
if
(
headerInfo
!=
null
)
setHttpHeaderInfo
(
httpGet
,
headerInfo
);
CookieStore
cookieStore
=
new
BasicCookieStore
();
HttpContext
localContext
=
new
BasicHttpContext
();
localContext
.
setAttribute
(
ClientContext
.
COOKIE_STORE
,
cookieStore
);
// 执行请求
try
{
if
(
urlString
.
startsWith
(
"https"
))
{
System
.
setProperty
(
"jsse.enableSNIExtension"
,
"false"
);
if
(
filePath
==
null
)
response
=
createSSLClientDefault
().
execute
(
httpGet
,
localContext
);
else
response
=
createSSLClient
(
filePath
,
pwd
).
execute
(
httpGet
,
localContext
);
}
else
{
response
=
httpService
.
getHttpClient
().
execute
(
httpGet
,
localContext
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
result
=
doResponse
(
response
,
urlString
);
// 得到响应状态码
int
statuCode
=
response
.
getStatusLine
().
getStatusCode
();
resultEntity
.
setStatusCode
(
statuCode
);
resultEntity
.
setResponseString
(
result
);
resultEntity
.
setCookies
(
cookieStore
.
getCookies
());
resultEntity
.
setStatusCode
(
response
.
getStatusLine
().
getStatusCode
());
}
catch
(
MalformedURLException
e
)
{
e
.
printStackTrace
();
}
catch
(
URISyntaxException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
response
!=
null
)
{
try
{
response
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
httpGet
.
abort
();
}
return
resultEntity
;
}
public
HttpResultEntity
doPost
(
String
url
,
Map
<
String
,
String
>
paras
,
Map
<
String
,
String
>
headerInfo
,
String
filePath
,
String
pwd
,
String
charset
)
{
HttpResultEntity
resultEntity
=
new
HttpResultEntity
();
String
result
=
""
;
if
(
null
==
url
||
url
.
isEmpty
()
||
!
url
.
startsWith
(
"http"
))
{
// 如果urlString为null或者urlString为空,或urlString非http开头,返回src空值
return
null
;
}
CloseableHttpResponse
response
=
null
;
HttpPost
httpPost
=
null
;
try
{
httpPost
=
new
HttpPost
(
url
);
// 设置参数
List
<
NameValuePair
>
list
=
new
ArrayList
<
NameValuePair
>();
if
(
paras
!=
null
){
Iterator
iterator
=
paras
.
entrySet
().
iterator
();
while
(
iterator
.
hasNext
())
{
Entry
<
String
,
String
>
elem
=
(
Entry
<
String
,
String
>)
iterator
.
next
();
list
.
add
(
new
BasicNameValuePair
(
elem
.
getKey
(),
elem
.
getValue
()));
}
if
(
list
.
size
()
>
0
)
{
UrlEncodedFormEntity
entity
=
new
UrlEncodedFormEntity
(
list
,
charset
);
log
.
info
(
"打印一下entity:{} "
,
entity
);
httpPost
.
setEntity
(
entity
);
}
}
setHttpHeaderInfo
(
httpPost
,
headerInfo
);
CookieStore
cookieStore
=
new
BasicCookieStore
();
HttpContext
localContext
=
new
BasicHttpContext
();
localContext
.
setAttribute
(
ClientContext
.
COOKIE_STORE
,
cookieStore
);
// 执行请求
try
{
if
(
url
.
startsWith
(
"https"
))
{
System
.
setProperty
(
"jsse.enableSNIExtension"
,
"false"
);
if
(
filePath
==
null
)
response
=
createSSLClientDefault
().
execute
(
httpPost
,
localContext
);
else
response
=
createSSLClient
(
filePath
,
pwd
).
execute
(
httpPost
,
localContext
);
}
else
{
response
=
httpService
.
getHttpClient
().
execute
(
httpPost
,
localContext
);
System
.
out
.
println
(
"打印响应码》》》》: "
+
response
.
getStatusLine
());
System
.
out
.
println
(
"打印结果》》》》: "
+
response
.
getEntity
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
log
.
info
(
"进入doResponse方法之前: "
);
result
=
doResponse
(
response
,
url
);
resultEntity
.
setResponseString
(
result
);
resultEntity
.
setCookies
(
cookieStore
.
getCookies
());
resultEntity
.
setStatusCode
(
response
.
getStatusLine
().
getStatusCode
());
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
return
resultEntity
;
}
public
HttpResultEntity
doPost1
(
String
url
,
Map
<
String
,
String
>
paras
,
Map
<
String
,
String
>
headerInfo
,
String
filePath
,
String
pwd
,
String
charset
)
{
HttpResultEntity
resultEntity
=
new
HttpResultEntity
();
String
result
=
""
;
if
(
null
==
url
||
url
.
isEmpty
()
||
!
url
.
startsWith
(
"http"
))
{
// 如果urlString为null或者urlString为空,或urlString非http开头,返回src空值
return
null
;
}
CloseableHttpResponse
response
=
null
;
HttpPost
httpPost
=
null
;
try
{
httpPost
=
new
HttpPost
(
url
);
// 设置参数
List
<
NameValuePair
>
list
=
new
ArrayList
<
NameValuePair
>();
if
(
paras
!=
null
){
Iterator
iterator
=
paras
.
entrySet
().
iterator
();
while
(
iterator
.
hasNext
())
{
Entry
<
String
,
String
>
elem
=
(
Entry
<
String
,
String
>)
iterator
.
next
();
list
.
add
(
new
BasicNameValuePair
(
elem
.
getKey
(),
elem
.
getValue
()));
}
if
(
list
.
size
()
>
0
)
{
UrlEncodedFormEntity
entity
=
new
UrlEncodedFormEntity
(
list
,
charset
);
httpPost
.
setEntity
(
entity
);
}
}
setHttpHeaderInfo
(
httpPost
,
headerInfo
);
CookieStore
cookieStore
=
new
BasicCookieStore
();
HttpContext
localContext
=
new
BasicHttpContext
();
localContext
.
setAttribute
(
ClientContext
.
COOKIE_STORE
,
cookieStore
);
// 执行请求
try
{
if
(
url
.
startsWith
(
"https"
))
{
System
.
setProperty
(
"jsse.enableSNIExtension"
,
"false"
);
if
(
filePath
==
null
)
response
=
createSSLClientDefault
().
execute
(
httpPost
,
localContext
);
else
response
=
createSSLClient
(
filePath
,
pwd
).
execute
(
httpPost
,
localContext
);
}
else
{
response
=
httpService
.
getHttpClient
().
execute
(
httpPost
,
localContext
);
System
.
out
.
println
(
"打印响应码》》》》: "
+
response
.
getStatusLine
());
System
.
out
.
println
(
"打印结果》》》》: "
+
response
.
getEntity
());
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
result
=
doResponse
(
response
,
url
);
if
(!
url
.
isEmpty
()&&!
response
.
toString
().
isEmpty
()){
if
(
response
==
null
){
log
.
info
(
"请求超时,最大超时时间:{},url:{}"
,
CommonConstant
.
HTTPCLIENT_CONNECT_TIMEOUT
,
url
);
result
=
""
;
}
// 得到响应状态码
int
statuCode
=
response
.
getStatusLine
().
getStatusCode
();
// 根据状态码进行逻辑处理
switch
(
statuCode
)
{
case
200
:
// 获得响应实体
HttpEntity
entity
=
response
.
getEntity
();
// Logger.log("获取entity: "+entity);
String
charset1
=
getCharset
(
entity
);
// Logger.log("获取charset1: "+charset1);
Header
header
=
entity
.
getContentEncoding
();
// Logger.log("entity.getContentEncoding(): "+header);
boolean
isGzip
=
isGzip
(
header
);
InputStream
inputStream
=
entity
.
getContent
();
// Logger.log("获取实体的文本entity.getContent(): "+inputStream);
ByteArrayBuffer
buffer
=
new
ByteArrayBuffer
(
2048
);
byte
[]
tmp
=
new
byte
[
2048
];
int
count
;
// System.out.println("isGzip的值有问题: " + isGzip);
if
(
isGzip
)
{
GZIPInputStream
gzipInputStream
=
new
GZIPInputStream
(
inputStream
);
while
((
count
=
gzipInputStream
.
read
(
tmp
))
!=
-
1
)
{
buffer
.
append
(
tmp
,
0
,
count
);
}
}
else
{
while
((
count
=
inputStream
.
read
(
tmp
))
!=
-
1
)
{
buffer
.
append
(
tmp
,
0
,
count
);
}
}
log
.
info
(
"获取实体的文本buffer:{} "
,
buffer
);
if
(
null
==
charset1
||
""
.
equals
(
charset1
)
||
"null"
.
equals
(
charset1
)
||
"zh-cn"
.
equalsIgnoreCase
(
charset1
))
{
System
.
out
.
println
(
"charset1的值有问题: "
+
charset1
);
charset1
=
getCharsetFromMetaTag
(
buffer
,
url
);
}
else
{
System
.
out
.
println
(
"打印charset1的值: "
+
charset1
);
}
result
=
new
String
(
buffer
.
toByteArray
(),
charset1
);
break
;
case
400
:
System
.
out
.
println
(
"下载400错误代码,请求出现语法错误,url:"
+
url
);
break
;
case
401
:
System
.
out
.
println
(
"未授权: 由于凭据无效,访问被拒绝:"
+
url
);
break
;
case
403
:
System
.
out
.
println
(
"下载403错误代码,资源不可用,url:"
+
url
);
break
;
case
404
:
System
.
out
.
println
(
"下载404错误代码,无法找到指定资源地址,url:"
+
url
);
break
;
case
503
:
System
.
out
.
println
(
"下载503错误代码,服务不可用,url:"
+
url
);
break
;
case
504
:
System
.
out
.
println
(
"下载504错误代码,网关超时,url:"
+
url
);
break
;
}
System
.
out
.
println
(
">>>>>>>>>>>>>>>>>>>>>"
);
System
.
out
.
println
(
"打印获取的result: "
+
result
);
}
resultEntity
.
setResponseString
(
result
);
resultEntity
.
setCookies
(
cookieStore
.
getCookies
());
resultEntity
.
setStatusCode
(
response
.
getStatusLine
().
getStatusCode
());
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
return
resultEntity
;
}
public
HttpResultEntity
doPost
(
String
url
,
String
paras
,
Map
<
String
,
String
>
headerInfo
,
String
filePath
,
String
pwd
,
String
charset
)
{
HttpResultEntity
resultEntity
=
new
HttpResultEntity
();
String
result
=
""
;
if
(
null
==
url
||
url
.
isEmpty
()
||
!
url
.
startsWith
(
"http"
))
{
// 如果urlString为null或者urlString为空,或urlString非http开头,返回src空值
return
null
;
}
CloseableHttpResponse
response
=
null
;
HttpPost
httpPost
=
null
;
try
{
httpPost
=
new
HttpPost
(
url
);
// 设置参数
httpPost
.
setEntity
(
new
StringEntity
(
paras
,
charset
));
httpPost
.
setHeader
(
"Content-Type"
,
"application/json; charset=UTF-8"
);
httpPost
.
setHeader
(
"Accept"
,
"application/json; charset=UTF-8"
);
setHttpHeaderInfo
(
httpPost
,
headerInfo
);
CookieStore
cookieStore
=
new
BasicCookieStore
();
HttpContext
localContext
=
new
BasicHttpContext
();
localContext
.
setAttribute
(
ClientContext
.
COOKIE_STORE
,
cookieStore
);
// 执行请求
try
{
if
(
url
.
startsWith
(
"https"
))
{
System
.
setProperty
(
"jsse.enableSNIExtension"
,
"false"
);
if
(
filePath
==
null
)
response
=
createSSLClientDefault
().
execute
(
httpPost
,
localContext
);
else
response
=
createSSLClient
(
filePath
,
pwd
).
execute
(
httpPost
,
localContext
);
}
else
{
response
=
httpService
.
getHttpClient
().
execute
(
httpPost
,
localContext
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
result
=
doResponse
(
response
,
url
);
resultEntity
.
setResponseString
(
result
);
resultEntity
.
setCookies
(
cookieStore
.
getCookies
());
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
}
return
resultEntity
;
}
// 指定证书,信任自己的CA和所有自签名
public
static
CloseableHttpClient
createSSLClient
(
String
filePath
,
String
pwd
)
{
FileInputStream
instream
=
null
;
KeyStore
trustStore
=
null
;
try
{
trustStore
=
KeyStore
.
getInstance
(
KeyStore
.
getDefaultType
());
instream
=
new
FileInputStream
(
new
File
(
filePath
));
trustStore
.
load
(
instream
,
pwd
.
toCharArray
());
}
catch
(
CertificateException
e
)
{
e
.
printStackTrace
();
}
catch
(
KeyStoreException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
catch
(
FileNotFoundException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
catch
(
NoSuchAlgorithmException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
finally
{
try
{
instream
.
close
();
}
catch
(
Exception
ignore
)
{
}
}
try
{
SSLContext
sslContext
=
new
SSLContextBuilder
().
loadTrustMaterial
(
trustStore
,
(
TrustStrategy
)
new
TrustSelfSignedStrategy
()).
build
();
SSLConnectionSocketFactory
sslsf
=
new
SSLConnectionSocketFactory
(
sslContext
);
return
HttpClients
.
custom
().
setSSLSocketFactory
(
sslsf
).
build
();
}
catch
(
KeyManagementException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
catch
(
KeyStoreException
e
)
{
e
.
printStackTrace
();
}
return
HttpClients
.
createDefault
();
}
// 信任所有
private
static
CloseableHttpClient
createSSLClientDefault
()
{
try
{
SSLContext
sslContext
=
new
SSLContextBuilder
().
loadTrustMaterial
(
null
,
new
TrustStrategy
()
{
public
boolean
isTrusted
(
X509Certificate
[]
chain
,
String
authType
)
throws
CertificateException
{
return
true
;
}
}).
build
();
SSLConnectionSocketFactory
sslsf
=
new
SSLConnectionSocketFactory
(
sslContext
);
return
HttpClients
.
custom
().
setSSLSocketFactory
(
sslsf
).
build
();
}
catch
(
KeyManagementException
e
)
{
e
.
printStackTrace
();
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
}
catch
(
KeyStoreException
e
)
{
e
.
printStackTrace
();
}
return
HttpClients
.
createDefault
();
}
private
static
String
getCharsetFromMetaTag
(
ByteArrayBuffer
buffer
,
String
url
)
{
String
charset
=
null
;
String
regEx
=
".*charset=([^;]*).*"
;
// String regEx = ".*charset=*";
Pattern
p
=
Pattern
.
compile
(
regEx
,
Pattern
.
CASE_INSENSITIVE
);
Matcher
m
=
p
.
matcher
(
new
String
(
buffer
.
toByteArray
()));
boolean
result
=
m
.
find
();
if
(
result
)
{
if
(
m
.
groupCount
()
==
1
)
{
charset
=
m
.
group
(
1
);
}
System
.
err
.
println
(
"网页 中的编码:"
+
charset
+
"\t url:"
+
url
);
}
else
{
charset
=
"UTF-8"
;
System
.
out
.
println
(
"字符编码未匹配到 : "
+
url
);
}
return
charset
;
}
private
void
setHttpHeaderInfo
(
HttpRequestBase
method
,
Map
<
String
,
String
>
header
)
{
if
(
header
==
null
)
header
=
defaultHeaderInfo
;
// 设置Header 信息
if
(
header
!=
null
&&
header
.
size
()
>
0
)
{
Set
<
String
>
key
=
header
.
keySet
();
for
(
Iterator
<?>
it
=
key
.
iterator
();
it
.
hasNext
();)
{
String
s
=
(
String
)
it
.
next
();
method
.
addHeader
(
s
,
header
.
get
(
s
));
}
}
}
private
static
String
getCharset
(
HttpEntity
entity
)
{
String
charset
=
null
;
ContentType
contentType
=
null
;
contentType
=
ContentType
.
getOrDefault
(
entity
);
Charset
charsets
=
contentType
.
getCharset
();
if
(
null
!=
charsets
)
{
charset
=
charsets
.
toString
();
}
return
charset
;
}
private
static
boolean
isGzip
(
Header
header
)
{
boolean
isGzip
=
false
;
if
(
null
!=
header
)
{
for
(
HeaderElement
headerElement
:
header
.
getElements
())
{
if
(
headerElement
.
getName
().
equalsIgnoreCase
(
"gzip"
))
{
isGzip
=
true
;
}
}
}
return
isGzip
;
}
public
static
String
doResponse
(
HttpResponse
response
,
String
urlString
)
throws
IOException
{
String
result
=
""
;
if
(
response
==
null
){
log
.
info
(
"请求超时,最大超时时间:{},url:{}"
,
CommonConstant
.
HTTPCLIENT_CONNECT_TIMEOUT
,
urlString
);
return
result
;
}
// 得到响应状态码
int
statuCode
=
response
.
getStatusLine
().
getStatusCode
();
// 根据状态码进行逻辑处理
switch
(
statuCode
)
{
case
200
:
// 获得响应实体
HttpEntity
entity
=
response
.
getEntity
();
// Logger.log("获取entity: "+entity);
String
charset
=
getCharset
(
entity
);
// Logger.log("获取charset: "+charset);
Header
header
=
entity
.
getContentEncoding
();
// Logger.log("entity.getContentEncoding(): "+header);
boolean
isGzip
=
isGzip
(
header
);
InputStream
inputStream
=
entity
.
getContent
();
// Logger.log("获取实体的文本entity.getContent(): "+inputStream);
ByteArrayBuffer
buffer
=
new
ByteArrayBuffer
(
2048
);
byte
[]
tmp
=
new
byte
[
2048
];
int
count
;
// System.out.println("isGzip的值有问题: " + isGzip);
if
(
isGzip
)
{
GZIPInputStream
gzipInputStream
=
new
GZIPInputStream
(
inputStream
);
while
((
count
=
gzipInputStream
.
read
(
tmp
))
!=
-
1
)
{
buffer
.
append
(
tmp
,
0
,
count
);
}
}
else
{
while
((
count
=
inputStream
.
read
(
tmp
))
!=
-
1
)
{
buffer
.
append
(
tmp
,
0
,
count
);
}
}
if
(
null
==
charset
||
""
.
equals
(
charset
)
||
"null"
.
equals
(
charset
)
||
"zh-cn"
.
equalsIgnoreCase
(
charset
))
{
System
.
out
.
println
(
"charset的值有问题: "
+
charset
);
charset
=
getCharsetFromMetaTag
(
buffer
,
urlString
);
}
else
{
System
.
out
.
println
(
"打印charset的值: "
+
charset
);
}
result
=
new
String
(
buffer
.
toByteArray
(),
charset
);
result
=
result
.
replace
(
"%"
,
"%%"
);
break
;
case
400
:
System
.
out
.
println
(
"下载400错误代码,请求出现语法错误,url:"
+
urlString
);
break
;
case
401
:
System
.
out
.
println
(
"未授权: 由于凭据无效,访问被拒绝:"
+
urlString
);
break
;
case
403
:
System
.
out
.
println
(
"下载403错误代码,资源不可用,url:"
+
urlString
);
break
;
case
404
:
System
.
out
.
println
(
"下载404错误代码,无法找到指定资源地址,url:"
+
urlString
);
break
;
case
503
:
System
.
out
.
println
(
"下载503错误代码,服务不可用,url:"
+
urlString
);
break
;
case
504
:
System
.
out
.
println
(
"下载504错误代码,网关超时,url:"
+
urlString
);
break
;
}
System
.
out
.
println
(
">>>>>>>>>>>>>>>>>>>>>"
);
System
.
out
.
println
(
"打印获取的result: "
+
result
);
return
result
;
}
private
Map
<
String
,
String
>
defaultHeaderInfo
=
new
HashMap
<
String
,
String
>()
{
{
put
(
"Accept"
,
"*/*"
);
put
(
"Connection"
,
"keep-alive"
);
put
(
"Accept-Encoding"
,
"gzip, deflate"
);
}
};
public
static
void
setCookieStore
(
HttpResponse
httpResponse
)
{
System
.
out
.
println
(
"----setCookieStore"
);
CookieStore
cookieStore
=
new
BasicCookieStore
();
// JSESSIONID
String
setCookie
=
httpResponse
.
getFirstHeader
(
"Set-Cookie"
)
.
getValue
();
String
JSESSIONID
=
setCookie
.
substring
(
"JSESSIONID="
.
length
(),
setCookie
.
indexOf
(
";"
));
System
.
out
.
println
(
"JSESSIONID:"
+
JSESSIONID
);
// 新建一个Cookie
BasicClientCookie
cookie
=
new
BasicClientCookie
(
"JSESSIONID"
,
JSESSIONID
);
cookie
.
setVersion
(
0
);
cookie
.
setDomain
(
"127.0.0.1"
);
cookie
.
setPath
(
"/CwlProClient"
);
// cookie.setAttribute(ClientCookie.VERSION_ATTR, "0");
// cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "127.0.0.1");
// cookie.setAttribute(ClientCookie.PORT_ATTR, "8080");
// cookie.setAttribute(ClientCookie.PATH_ATTR, "/CwlProWeb");
cookieStore
.
addCookie
(
cookie
);
}
public
static
void
main
(
String
[]
args
)
{
HttpService
.
getInstance
()
.
doGet
(
"https://www.alipay.com/"
,
null
,
null
,
null
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment