Commit 0aeda08d authored by suntao's avatar suntao

渠道配置信息 编辑保存

parent 0fb0a5dd
package cn.quantgroup.cashloanflowboss.api.channel.controller;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfAddModel;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfBaseModel;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfVo;
import cn.quantgroup.cashloanflowboss.core.annotation.ChannelIdInit;
import cn.quantgroup.cashloanflowboss.api.channel.service.ChannelConfService;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Map;
/**
* Created with suntao on 2019/8/2
* @author suntao
......@@ -34,10 +42,17 @@ public class ChannelConfController {
@GetMapping("/cfg/info")
public Result channelConfInfo(Long channelId) {
public Result getChannelConfInfo(Long channelId) {
return Result.buildSuccess(channelConfService.getChannelConf(channelId), "success");
}
@PostMapping("/cfg/info")
public Result editChannelConfInfo(@RequestBody @Valid ChannelConfVo channelConfVo) {
return Result.buildSuccess(channelConfService.editChannelConfInfo(channelConfVo));
}
}
......@@ -69,10 +69,22 @@ public class ChannelConf extends Primary {
private String md5Key;
/**
* env_url
* env_path
*/
@Column(name = "env_url")
private String envUrl;
@Column(name = "env_path")
private String envPath;
/**
* authCode
*/
@Column(name = "auth_code")
private String authCode;
/**
* riskCode
*/
@Column(name = "risk_code")
private String riskCode;
/**
* channel_ip
......
......@@ -10,7 +10,7 @@ import lombok.Data;
*/
@Data
public class ChannelConfAddModel {
private String envUrl;
private String envPath;
private String channelIp;
private String approveCallBackUrl;
private String orderStatusCallBackUrl;
......
......@@ -2,13 +2,17 @@ package cn.quantgroup.cashloanflowboss.api.channel.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* Created with suntao on 2019/8/2
*/
@Data
public class ChannelConfBaseModel {
private Integer channelId;
@NotNull(message = "渠道id不能为空")
private Long channelId;
private String channelName;
private String channelCode;
private String env;
......@@ -17,4 +21,6 @@ public class ChannelConfBaseModel {
private String bizType;
private String aesKey;
private String md5Key;
private String authCode;
private String riskCode;
}
package cn.quantgroup.cashloanflowboss.api.channel.model;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* function:
* date: 2019/8/7
*
* @author: suntao
*/
@Data
public class ChannelConfVo {
@NotNull(message = "基础配置信息不能为空")
private ChannelConfBaseModel basicInfo;
@NotNull(message = "回调地址配置信息不能为空")
private ChannelConfAddModel addInfo;
}
package cn.quantgroup.cashloanflowboss.api.channel.service;
import java.sql.Timestamp;
import java.util.*;
import cn.quantgroup.cashloanflowboss.api.channel.entity.boss.ChannelConf;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfAddModel;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfBaseModel;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfVo;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelListModel;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ChannelConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfCallbackConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration;
import cn.quantgroup.cashloanflowboss.api.channel.repository.boss.ChannelConfRepository;
import cn.quantgroup.cashloanflowboss.spi.clf.repository.ChannelConfigurationRepository;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderCallBack;
import cn.quantgroup.cashloanflowboss.spi.clf.repository.ClfCallbackConfigurationRepository;
import cn.quantgroup.cashloanflowboss.spi.clf.repository.ClfChannelConfigurationRepository;
import cn.quantgroup.cashloanflowboss.api.channel.util.ChannelConfUtil;
import cn.quantgroup.cashloanflowboss.api.user.model.Pagination;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.spi.clf.repository.ClfOrderCallbackRepository;
import cn.quantgroup.cashloanflowboss.utils.IgnorePropertiesUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
......@@ -28,15 +36,18 @@ public class ChannelConfService {
@Autowired
private ChannelConfRepository channelConfRepository;
@Autowired
private ChannelConfigurationRepository clfChannelConfigurationRepository;
private ClfChannelConfigurationRepository clfChannelConfigurationRepository;
@Autowired
private ClfCallbackConfigurationRepository clfCallbackConfigurationRepository;
@Autowired
private ClfOrderCallbackRepository clfOrderCallbackRepository;
public Page<ChannelListModel> getChannelInfo(Integer pageNumber, Integer pageSize, Long channelId) {
Page<ChannelConfiguration> page = this.clfChannelConfigurationRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
Page<ClfChannelConfiguration> page = this.clfChannelConfigurationRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
......@@ -60,7 +71,7 @@ public class ChannelConfService {
channelListModel.setChannelName(it.getChannelName());
channelListModel.setChannelCode(it.getChannelCode());
// TODO
channelListModel.setBizType(1);
channelListModel.setBizType(null);
channelListModel.setCreatedAt(it.getCreatedAt());
return channelListModel;
});
......@@ -69,11 +80,53 @@ public class ChannelConfService {
}
//todo 返回值不用map可以吗
public Map<String, Object> getChannelConf(Long channelId) {
public ChannelConfVo getChannelConf(Long channelId) {
ChannelConf channelConf = channelConfRepository.getByChannelId(channelId);
return ChannelConfUtil.channelConfConvertVOModel(channelConf);
}
public Boolean editChannelConfInfo(ChannelConfVo confVo) {
ChannelConfBaseModel basicInfo = confVo.getBasicInfo();
ChannelConfAddModel addInfo = confVo.getAddInfo();
ChannelConf channelConf = ChannelConfUtil.voModelConfConvertChannelConf(confVo);
ChannelConf channelConfExsit = channelConfRepository.getByChannelId(basicInfo.getChannelId());
// cash-loan-flow-boss 库
if (channelConfExsit == null) {
// 新保存
channelConf.setCreateTime(new Date());
channelConfRepository.save(channelConf);
} else {
// 更新数据库 数据
BeanUtils.copyProperties(channelConf, channelConfExsit, IgnorePropertiesUtil.getNullPropertyNames(channelConf));
channelConfExsit.setUpdateTime(new Date());
channelConfRepository.save(channelConfExsit);
}
// clf 库
ClfChannelConfiguration channelConfiguration = ChannelConfUtil.convert2ClfChannelConfiguration(basicInfo);
List<ClfOrderCallBack> clfOrderCallBackList = ChannelConfUtil.convert2ClfOrderCallback(basicInfo.getChannelId(), addInfo);
ClfChannelConfiguration channelConfigurationExsit = clfChannelConfigurationRepository.findByRegisteredFrom(basicInfo.getChannelId());
if (channelConfigurationExsit == null) {
// 新保存
channelConfiguration.setCreatedAt(new Timestamp(System.currentTimeMillis()));
clfChannelConfigurationRepository.save(channelConfiguration);
ClfCallbackConfiguration clfCallbackConfiguration = ChannelConfUtil.convert2ClfCallbackConfiguration(basicInfo);
clfCallbackConfigurationRepository.save(clfCallbackConfiguration);
clfOrderCallbackRepository.save(clfOrderCallBackList);
} else {
// update
BeanUtils.copyProperties(channelConfiguration, channelConfigurationExsit, IgnorePropertiesUtil.getNullPropertyNames(channelConfiguration));
clfChannelConfigurationRepository.save(channelConfigurationExsit);
clfOrderCallbackRepository.save(clfOrderCallBackList);
}
return true;
}
}
package cn.quantgroup.cashloanflowboss.api.channel.util;
import java.sql.Timestamp;
import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderCallBack;
import cn.quantgroup.cashloanflowboss.spi.clf.model.CallbackRouter;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfCallbackConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.model.EncType;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import cn.quantgroup.cashloanflowboss.api.channel.entity.boss.ChannelConf;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfAddModel;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfBaseModel;
import cn.quantgroup.cashloanflowboss.api.channel.model.ChannelConfVo;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import java.util.HashMap;
import java.util.Map;
/**
* function:
* date: 2019/8/2
......@@ -18,22 +27,26 @@ import java.util.Map;
public class ChannelConfUtil {
public static Map<String, Object> channelConfConvertVOModel(ChannelConf channelConf) {
Map<String, Object> vo = new HashMap<>(4);
public static ChannelConfVo channelConfConvertVOModel(ChannelConf channelConf) {
ChannelConfBaseModel channelConfBaseModel = new ChannelConfBaseModel();
BeanUtils.copyProperties(channelConf, channelConfBaseModel);
ChannelConfAddModel channelConfAddModel = new ChannelConfAddModel();
BeanUtils.copyProperties(channelConf, channelConfAddModel);
vo.put("basicInfo", channelConfBaseModel);
vo.put("addInfo", channelConfAddModel);
return vo;
channelConfAddModel.setEnvPath(String.format("http://qapi-%s.liangkebang.net/", channelConfBaseModel.getEnv()));
ChannelConfVo channelConfVo = new ChannelConfVo();
channelConfVo.setBasicInfo(channelConfBaseModel);
channelConfVo.setAddInfo(channelConfAddModel);
return channelConfVo;
}
public static ChannelConf voModelConfConvertChannelConf(ChannelConfBaseModel channelConfBaseModel, ChannelConfAddModel channelConfAddModel) {
Map<String, Object> vo = new HashMap<>(4);
public static ChannelConf voModelConfConvertChannelConf(ChannelConfVo channelConfVo) {
ChannelConfBaseModel channelConfBaseModel = channelConfVo.getBasicInfo();
ChannelConfAddModel channelConfAddModel = channelConfVo.getAddInfo();
ChannelConf channelConf = new ChannelConf();
......@@ -44,9 +57,144 @@ public class ChannelConfUtil {
channelConf.setOrderStatusCallBackUrl(channelConfAddModel.getOrderStatusCallBackUrl());
channelConf.setRepayResultCallBackUrl(channelConfAddModel.getRepayResultCallBackUrl());
channelConf.setRepaymentPlanCallBackUrl(channelConfAddModel.getRepaymentPlanCallBackUrl());
channelConf.setCreateTime(new Date());
channelConf.setUpdateTime(new Date());
return channelConf;
}
public static ClfChannelConfiguration convert2ClfChannelConfiguration(ChannelConfBaseModel basicInfo) {
ClfChannelConfiguration channelConfiguration = new ClfChannelConfiguration();
channelConfiguration.setChannelName(basicInfo.getChannelName());
channelConfiguration.setChannelCode(basicInfo.getChannelCode());
channelConfiguration.setRegisteredFrom(basicInfo.getChannelId());
channelConfiguration.setIsActive(true);
channelConfiguration.setIsRequestStandard(true);
channelConfiguration.setEncType(EncType.AES);
channelConfiguration.setAesKey(basicInfo.getAesKey());
channelConfiguration.setMd5Key(basicInfo.getMd5Key());
channelConfiguration.setSpiderCenterChannelCode(basicInfo.getRiskCode());
channelConfiguration.setSpiderCenterMerchantChannelCode(basicInfo.getAuthCode());
return channelConfiguration;
}
public static ClfCallbackConfiguration convert2ClfCallbackConfiguration(ChannelConfBaseModel basicInfo) {
ClfCallbackConfiguration clfCallbackConfiguration = new ClfCallbackConfiguration();
clfCallbackConfiguration.setChannelId(basicInfo.getChannelId());
clfCallbackConfiguration.setIsLoanMakeup(false);
clfCallbackConfiguration.setIsRepayMakeup(false);
clfCallbackConfiguration.setLoanMakeupStrategy("");
clfCallbackConfiguration.setRepayMakeupStrategy("");
clfCallbackConfiguration.setIsActive(true);
clfCallbackConfiguration.setOnlyNewUser(false);
clfCallbackConfiguration.setCallbackServiceName(basicInfo.getChannelCode());
clfCallbackConfiguration.setCallbackNoPushProgress("");
clfCallbackConfiguration.setPreProgress("");
clfCallbackConfiguration.setRetryMaxTimes(5L);
clfCallbackConfiguration.setCallbackRouter(CallbackRouter.API);
return clfCallbackConfiguration;
}
public static List<ClfOrderCallBack> convert2ClfOrderCallback(Long channelId, ChannelConfAddModel addModel) {
List<ClfOrderCallBack> list = new ArrayList<>();
if (StringUtils.isNotEmpty(addModel.getApproveCallBackUrl())) {
//审批
ClfOrderCallBack clfOrderCallBack1 = new ClfOrderCallBack();
clfOrderCallBack1.setCallbackStatus(KANoticeType.FUAD_ASSIFN_SUCC);
clfOrderCallBack1.setRegisteredFrom(channelId);
clfOrderCallBack1.setCallbackUrl(addModel.getApproveCallBackUrl());
clfOrderCallBack1.setIsActive(true);
clfOrderCallBack1.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack1);
ClfOrderCallBack clfOrderCallBack2 = new ClfOrderCallBack();
clfOrderCallBack2.setCallbackStatus(KANoticeType.REJECT);
clfOrderCallBack2.setRegisteredFrom(channelId);
clfOrderCallBack2.setCallbackUrl(addModel.getApproveCallBackUrl());
clfOrderCallBack2.setIsActive(true);
clfOrderCallBack2.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack2);
}
if (StringUtils.isNotEmpty(addModel.getOrderStatusCallBackUrl())) {
// 状态
ClfOrderCallBack clfOrderCallBack0 = new ClfOrderCallBack();
clfOrderCallBack0.setCallbackStatus(KANoticeType.CREDIT_SUCC);
clfOrderCallBack0.setRegisteredFrom(channelId);
clfOrderCallBack0.setCallbackUrl(addModel.getOrderStatusCallBackUrl());
clfOrderCallBack0.setIsActive(true);
clfOrderCallBack0.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack0);
ClfOrderCallBack clfOrderCallBack3 = new ClfOrderCallBack();
clfOrderCallBack3.setCallbackStatus(KANoticeType.WITHDRAW);
clfOrderCallBack3.setRegisteredFrom(channelId);
clfOrderCallBack3.setCallbackUrl(addModel.getOrderStatusCallBackUrl());
clfOrderCallBack3.setIsActive(true);
clfOrderCallBack3.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack3);
ClfOrderCallBack clfOrderCallBack4 = new ClfOrderCallBack();
clfOrderCallBack4.setCallbackStatus(KANoticeType.FUND_SUCC);
clfOrderCallBack4.setRegisteredFrom(channelId);
clfOrderCallBack4.setCallbackUrl(addModel.getOrderStatusCallBackUrl());
clfOrderCallBack4.setIsActive(true);
clfOrderCallBack4.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack4);
ClfOrderCallBack clfOrderCallBack5 = new ClfOrderCallBack();
clfOrderCallBack5.setCallbackStatus(KANoticeType.FUND_FAIL);
clfOrderCallBack5.setRegisteredFrom(channelId);
clfOrderCallBack5.setCallbackUrl(addModel.getOrderStatusCallBackUrl());
clfOrderCallBack5.setIsActive(true);
clfOrderCallBack5.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack5);
ClfOrderCallBack clfOrderCallBack6 = new ClfOrderCallBack();
clfOrderCallBack6.setCallbackStatus(KANoticeType.FUND_WITHDRAW_SUCC);
clfOrderCallBack6.setRegisteredFrom(channelId);
clfOrderCallBack6.setCallbackUrl(addModel.getOrderStatusCallBackUrl());
clfOrderCallBack6.setIsActive(true);
clfOrderCallBack6.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack6);
ClfOrderCallBack clfOrderCallBack7 = new ClfOrderCallBack();
clfOrderCallBack7.setCallbackStatus(KANoticeType.CANCEL_LOAN);
clfOrderCallBack7.setRegisteredFrom(channelId);
clfOrderCallBack7.setCallbackUrl(addModel.getOrderStatusCallBackUrl());
clfOrderCallBack7.setIsActive(true);
clfOrderCallBack7.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack7);
ClfOrderCallBack clfOrderCallBack8 = new ClfOrderCallBack();
clfOrderCallBack8.setCallbackStatus(KANoticeType.CANCEL_AFTER_LOAN);
clfOrderCallBack8.setRegisteredFrom(channelId);
clfOrderCallBack8.setCallbackUrl(addModel.getOrderStatusCallBackUrl());
clfOrderCallBack8.setIsActive(true);
clfOrderCallBack8.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack8);
ClfOrderCallBack clfOrderCallBack9 = new ClfOrderCallBack();
clfOrderCallBack9.setCallbackStatus(KANoticeType.ALL_REPAID);
clfOrderCallBack9.setRegisteredFrom(channelId);
clfOrderCallBack9.setCallbackUrl(addModel.getOrderStatusCallBackUrl());
clfOrderCallBack9.setIsActive(true);
clfOrderCallBack9.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack9);
}
if (StringUtils.isNotEmpty(addModel.getRepaymentPlanCallBackUrl())) {
ClfOrderCallBack clfOrderCallBack10 = new ClfOrderCallBack();
clfOrderCallBack10.setCallbackStatus(KANoticeType.REPAYMENT);
clfOrderCallBack10.setRegisteredFrom(channelId);
clfOrderCallBack10.setCallbackUrl(addModel.getRepaymentPlanCallBackUrl());
clfOrderCallBack10.setIsActive(true);
clfOrderCallBack10.setCreatedAt(new Timestamp(System.currentTimeMillis()));
list.add(clfOrderCallBack10);
}
return list;
}
}
package cn.quantgroup.cashloanflowboss.spi.clf.entity;
import cn.quantgroup.cashloanflowboss.spi.clf.model.CallbackRouter;
import lombok.*;
import javax.persistence.*;
import java.io.Serializable;
/**
* Created by liqing on 2017/5/5 0005.
*/
@Setter
@Getter
@Entity
@Table(name = "callback_configuration",catalog = "cash_loan_flow")
public class ClfCallbackConfiguration implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "channel_id")
private Long channelId;
@Column(name = "is_loan_makeup")
private Boolean isLoanMakeup;
@Column(name = "is_repay_makeup")
private Boolean isRepayMakeup;
@Column(name = "loan_makeup_strategy")
private String loanMakeupStrategy;
@Column(name = "repay_makeup_strategy")
private String repayMakeupStrategy;
@Column(name = "is_active")
private Boolean isActive;
@Column(name = "only_new_user")
private Boolean onlyNewUser;
@Column(name = "callback_service_name")
private String callbackServiceName;
@Column(name = "callback_no_push_progress")
private String callbackNoPushProgress;
@Column(name = "pre_progress")
private String preProgress;
@Column(name = "retry_max_times")
private Long retryMaxTimes;
@Enumerated(EnumType.ORDINAL)
@Column(name = "callback_router")
private CallbackRouter callbackRouter;
}
......@@ -13,7 +13,7 @@ import java.sql.Timestamp;
@Data
@Entity
@Table(name = "channel_configuration", catalog = "cash_loan_flow")
public class ChannelConfiguration implements Serializable {
public class ClfChannelConfiguration implements Serializable {
private static final long serialVersionUID = -1L;
@Id
......
package cn.quantgroup.cashloanflowboss.spi.clf.entity;
import cn.quantgroup.cashloanflowboss.spi.clf.model.KANoticeType;
import cn.quantgroup.cashloanflowboss.spi.clf.model.LoanProgress;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
/**
* Created by 11 on 2016/11/29.
*/
@Data
@Entity
@Table(name = "order_callback")
public class ClfOrderCallBack implements Serializable{
private static final long serialVersionUID = -1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "loan_id")
private Long loanId;
@Column(name = "progress")
private LoanProgress progress;
@Column(name = "callback_status")
@Enumerated(EnumType.STRING)//保存字面值到数据库
private KANoticeType callbackStatus;
@Column(name = "registered_from")
private Long registeredFrom;
@Column(name = "callback_url")
private String callbackUrl;
@Column(name = "is_active")
private Boolean isActive = Boolean.TRUE;
@Column(name = "created_at")
private Timestamp createdAt = new Timestamp(System.currentTimeMillis());
}
\ No newline at end of file
package cn.quantgroup.cashloanflowboss.spi.clf.model;
/**
* Created with suntao on 2018/11/14
*/
public enum CallbackRouter {
API,
COMMON
}
package cn.quantgroup.cashloanflowboss.spi.clf.model;
/**
* 对应 MQ 消息通知类型 的枚举类,在数据库中保存,和QuotaNoticeType 独立,保证xyqb改动的灵活性
* Created with suntao on 2018/4/15
*/
public enum KANoticeType {
CREDIT_SUCC("CREDIT_SUCC", "授信成功"),//0
CREDIT_FAIL("CREDIT_FAIL", "授信失败"),//1
FUAD_ASSIFN_SUCC("FUAD_ASSIFN_SUCC", "分配资金方成功"),//2
FUAD_ASSIFN_FAIL("FUAD_ASSIFN_FAIL", "分配资金方失败"),//3
BIND_SUCC("BIND_SUCC", "绑卡成功"),//4
BIND_FAIL("BIND_FAIL", "绑卡失败"),//5
WAITING_FUND("WAITING_FUND", "进件给资金方成功,等待放款"),//6
FUND_SUCC("FUND_SUCC", "放款成功"),//7
FUND_WITHDRAW_SUCC("FUND_WITHDRAW_SUCC", "放款提现成功,存管提现成功"),//8
FUND_FAIL("FUND_FAIL", "放款失败"),//9
REPAYMENT("REPAYMENT", "还款成功"),//10
ALL_REPAID("ALL_REPAID", "结清"),//11
QUOTA_INCREASE("QUOTA_INCREASE", "额度提升"),//12
QUOTA_DECREASE("QUOTA_DECREASE", "额度下降"),//13
QUOTA_FREEZE("QUOTA_FREEZE", "风控额度冻结"),//14
WITHDRAW("WITHDRAW", "用户提现额度冻结"),//WITHDRAW,创建loanId,//15(BIND_SUCC 同时发送)
REJECT("REJECT", "风控审核不通过"),//16
RISK_PASS("RISK_PASS", "风控审核通过"),//17
INCREASE_CHANGE("INCREASE_CHANGE", "利率调整"),//18
CANCEL_LOAN("CANCEL_LOAN", "关闭订单"),//19
COMPENSATORY("COMPENSATORY", "代偿"),//20
DROP_COURSE("DROP_COURSE", "退课代偿"),//21
CANCEL_AFTER_LOAN("CANCEL_AFTER_LOAN", "贷后关闭订单"),//22
ADD_CARD_SUCCESS("ADD_CARD_SUCCESS", "添加银行卡成功,非提现页面绑卡"), //23
REPAY_FAIL("REPAY_FAIL", "还款失败"), //24
UNKNOWN("UNKNOWN", "没有逻辑意义的数据库兼容的值"),
RP_INIT_F_SUCC("REPAYMENT_INIT_FUND_SUCC", "放款成功推送还款计划"),
APPROVE_ING("APPROVE_ING", "审批中"),
PAY_ING("PAY_ING", "放款中"),
TEST("TEST", "test");
private String type;
private String desc;
KANoticeType(String type, String desc) {
this.type = type;
this.desc = desc;
}
public static KANoticeType getOrdinalValue(Integer ordinal) {
KANoticeType[] values = values();
for (int i = 0; i < values.length; i++) {
if (values[i].ordinal() == ordinal) {
return values[i];
}
}
return null;
}
public String getType() {
return this.type;
}
public String getDesc() {
return this.desc;
}
}
package cn.quantgroup.cashloanflowboss.spi.clf.model;
import com.google.common.collect.Sets;
import java.util.Set;
/**
* Created by Miraculous on 15/7/12.
*/
public enum LoanProgress {
/**
* 不会被持久化到数据库
*/
USERINFO_INCOMPLETE("用户未填写个人信息"),//0
USER_INFORMATION_INCOMPLETE("用户未填写贷款信息"),//1
USER_AUTHENTICATION_INCOMPLETE("用户授权信息未全部完成"),//2
USER_AUTHENTICATION_COMPLETE("授权状态完成"),//3
FURTHER_INFORMATION_INCOMPLETE("用户补充资料未完成"),//4
PRE_SCREENING("初审中"),//5
PRE_SCREENING_REJECT("初审拒绝"),//6
FINAL_SCREENING("终审中"),//7
FINAL_SCREENING_REJECT("终审拒绝"),//8
LOAN_APPLICATION_MANIFEST_COMPLETE("借款清单生成完成"),//9
BIND_BANKCARD("确认借款并且去绑卡"),//10
BIND_BANKCARD_SUCCESS("绑卡成功"),//11
QUIT_AND_SHOW_REASON("放弃借款"),//12
SIGN_CONTRACT("签订协议"),//13
FUND_TRANSFER("打款"),//14
CHECK_REPAYMENT_PLAN("查看还款计划"),//15
LOAN_COMPLETE("借款完成"),//16
FILTERED_BY_BLACKLIST("黑名单过滤"),//17
FINAL_SCREENING_PASSED("后台终审通过"),//18
FILTERING_DECLINED("未通过初筛"),//19
WAITING_FUND("等待资金方放款"),// 20
FINAL_SEND_TO_MASHANG_BEFORE_APPROVAL("已发送给马上金融, 等待放款"),//21, 发邮件后更新使用
FINAL_MASHANG_APPROVAL_SUCCESS("马上金融放款成功"),//22
FINAL_FUNDED_APPROVAL_FAIL("马上金融放款失败"),//23,
ADDRESS_COMPLETE("地址填写完毕,去绑卡"), // 24
BEIYIN_USERINFO_INCOMPLETE("北银消费-用户未填写个人信息"),//25
BEIYIN_USER_FILE_INCOMPLETE("北银消费-用户未上传文件"),//26
BEIYIN_SCREENING("北银消费-审批中"),//27
BEIYIN_SCREENING_FAILED("北银消费-审批失败"),//28
BEIYIN_SCREENING_PASSED("北银消费-审批通过"),//29
BEIYIN_LOAN_COMPLETE("北银消费-借款完成"),//30
BAITIAO_AUTHENTICATION_TAOBAO("白条-淘宝授权"),//31
BAITIAO_AUTHENTICATION_MOBILE("白条-手机运营商授权"),//32
BAITIAO_SCREENING("白条-审核中"),//33
BAITIAO_FILTER_PASSED("白条-初筛通过"),//34
BAITIAO_SCREENING_FAILED("白条-审核拒绝"),//35
BAITIAO_SCREENING_PASSED("白条-审核通过"),//36
BAITIAO_BIND_CARD("白条-绑卡"),//37
BAITIAO_BIND_CARD_ING("白条-绑卡中"),//38
BAITIAO_ACTIVATE_SUCC("白条-激活成功"),//39
/**
* 修改时间 20160104 资金方解耦
*/
// category 4x
/* 易联校验/代收订单 异步通知重构 */
BIND_BANKCARD_IN_PROGRESS("绑卡处理中"),//40
/*REPAY_ORDER_IN_PROGRESS("还款处理中")*/
USER_RELATION_INCOMPLETE("与用户相关联系人信息未完成"),//41,
PLACE_HOLDER_42("占位"),PLACE_HOLDER_43("占位"),PLACE_HOLDER_44("占位"),
PLACE_HOLDER_45("占位"),PLACE_HOLDER_46("占位"),PING_AN_PAGE("跳转平安填写信息页面"),// 47
DROP_SUCC("取消借款"),//48
PLACE_HOLDER_49("占位"),
// category 5x
PLACE_HOLDER_50("占位"),PLACE_HOLDER_51("占位"),PLACE_HOLDER_52("占位"),PLACE_HOLDER_53("占位"),PLACE_HOLDER_54("占位"),
PLACE_HOLDER_55("占位"),PLACE_HOLDER_56("占位"),PLACE_HOLDER_57("占位"),PLACE_HOLDER_58("占位"),PLACE_HOLDER_59("占位"),
// category 6x
PLACE_HOLDER_60("占位"),PLACE_HOLDER_61("占位"),PLACE_HOLDER_62("占位"),PLACE_HOLDER_63("占位"),PLACE_HOLDER_64("占位"),
WAITING_WITHDRAW("待存管提现"),// 65
PLACE_HOLDER_66("占位"),PLACE_HOLDER_67("占位"),PLACE_HOLDER_68("占位"),PLACE_HOLDER_69("占位"),
// category 7x
PLACE_HOLDER_70("占位"),PLACE_HOLDER_71("占位"),PLACE_HOLDER_72("占位"),PLACE_HOLDER_73("占位"),PLACE_HOLDER_74("占位"),
PLACE_HOLDER_75("占位"),PLACE_HOLDER_76("占位"),PLACE_HOLDER_77("占位"),PLACE_HOLDER_78("占位"),PLACE_HOLDER_79("占位"),
// category 8x
PLACE_HOLDER_80("占位"),PLACE_HOLDER_81("占位"),PLACE_HOLDER_82("占位"),PLACE_HOLDER_83("占位"),PLACE_HOLDER_84("占位"),
PLACE_HOLDER_85("占位"),PLACE_HOLDER_86("占位"),PLACE_HOLDER_87("占位"),PLACE_HOLDER_88("占位"),PLACE_HOLDER_89("占位"),
// category 9x
PLACE_HOLDER_90("占位"),PLACE_HOLDER_91("占位"),PLACE_HOLDER_92("占位"),PLACE_HOLDER_93("占位"),PLACE_HOLDER_94("占位"),
PLACE_HOLDER_95("占位"),PLACE_HOLDER_96("占位"),PLACE_HOLDER_97("占位"),PLACE_HOLDER_98("占位"),PLACE_HOLDER_99("占位"),
/**
* 资金方相关
*/
// 等待资金方放款 : 100
WAITING_MASHANG_FUND("等待马上金融放款"),// 100, 发邮件前查询使用
// 已提交给资金方等待放款 : 101
SENDED_TO_FUND_CORP("已提交给资金方"),
// category 10x
PLACE_HOLDER_102("占位"),PLACE_HOLDER_103("占位"),PLACE_HOLDER_104("占位"),PLACE_HOLDER_105("占位"),PLACE_HOLDER_106("占位"),
PLACE_HOLDER_107("占位"),PLACE_HOLDER_108("占位"),PLACE_HOLDER_109("占位"),
JD_BANDCARD_FAIL("京东绑卡失败")//110 京东绑卡失败状态
;
private String description;
LoanProgress(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return description;
}
/**
* 获取审核拒绝状态
* @return
*/
public static Set<LoanProgress> getCheckReject(){
return Sets.newHashSet(LoanProgress.FILTERING_DECLINED, LoanProgress.PRE_SCREENING_REJECT,
LoanProgress.FINAL_SCREENING_REJECT, LoanProgress.FILTERED_BY_BLACKLIST);
}
/**
* 获取推送订单状态
* @return
*/
public static Set<LoanProgress> getFeedBackOrderStatus(){
return Sets.newHashSet(LoanProgress.WAITING_FUND, LoanProgress.FINAL_SEND_TO_MASHANG_BEFORE_APPROVAL,
LoanProgress.FINAL_FUNDED_APPROVAL_FAIL, LoanProgress.CHECK_REPAYMENT_PLAN, LoanProgress.LOAN_COMPLETE);
}
}
package cn.quantgroup.cashloanflowboss.spi.clf.repository;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfCallbackConfiguration;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* function:
* date: 2019/8/7
*
* @author: suntao
*/
public interface ClfCallbackConfigurationRepository extends JpaRepository<ClfCallbackConfiguration, Long> {
}
package cn.quantgroup.cashloanflowboss.spi.clf.repository;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ChannelConfiguration;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfChannelConfiguration;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ChannelConfigurationRepository extends PagingAndSortingRepository<ChannelConfiguration, Long>, JpaSpecificationExecutor<ChannelConfiguration> {
public interface ClfChannelConfigurationRepository extends PagingAndSortingRepository<ClfChannelConfiguration, Long>, JpaSpecificationExecutor<ClfChannelConfiguration> {
ClfChannelConfiguration findByRegisteredFrom(Long channelId);
}
package cn.quantgroup.cashloanflowboss.spi.clf.repository;
import cn.quantgroup.cashloanflowboss.spi.clf.entity.ClfOrderCallBack;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* function:
* date: 2019/8/7
*
* @author: suntao
*/
public interface ClfOrderCallbackRepository extends JpaRepository<ClfOrderCallBack, Long> {
}
package cn.quantgroup.cashloanflowboss.utils;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import java.beans.PropertyDescriptor;
import java.util.HashSet;
import java.util.Set;
/**
* function:
* date: 2019/8/7
*
* @author: suntao
*/
public class IgnorePropertiesUtil {
public static String[] getNullPropertyNames(Object source) {
BeanWrapper src = new BeanWrapperImpl(source);
PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<>();
for (PropertyDescriptor pd : pds) {
Object srcValue = src.getPropertyValue(pd.getName());
if (srcValue == null) {
emptyNames.add(pd.getName());
}
}
return emptyNames.toArray(new String[emptyNames.size()]);
}
}
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