Commit 58e80715 authored by shangying's avatar shangying

授信成功流程

parent 3eb842e1
......@@ -19,7 +19,6 @@
</properties>
<dependencies>
<dependency>
......@@ -116,23 +115,23 @@
<version>3.2.1</version>
</dependency>
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-core</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-core</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
......@@ -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>
......
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);
}
}
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);
}
}
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;
}
//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;
//}
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;
}
}
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;
}
}
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;
}
}
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;
}
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;
}
}
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;
}
}
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;
}
}
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);
}
//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();
//}
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();
}
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);
}
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;
}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public interface FundsAllocationplanService {
//}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public interface GDXDService {
//}
//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();
//
//
//}
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;
}
}
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;
}
}
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() {
}
}
//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
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;
}
}
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);
}
}
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();
}
//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();
//
//}
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);
}
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();
}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/5.
// */
//public interface RepaymentPlatService {
//}
//package cn.quantgroup.cashloanflowboss.api.oneclickdata.service;
//
///**
// * Created by shang on 2019/12/9.
// */
//public class ScheduleService {
//}
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());
}
}
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);
}
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;
}
}
}
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());
}
}
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;
}
}
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;
}
}
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());
}
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"))));
}
}
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;
}
}
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 "";
}
}
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
This source diff could not be displayed because it is too large. You can view the blob instead.
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;
}
}
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();
//
}
}
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"));
}
}
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;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment