Commit cf9f118e authored by 吴琼's avatar 吴琼

用户新增现金查询

parent f7bcd85a
package cn.quantgroup.customer.enums;
/**
* 资产分配状态
* @author HAN CHENGLONG
* @create 2018-04-16 18:04
**/
public enum AssignStatusEnum {
ASSIGN_INIT("未分配"),//0
ASSIGN_QUEUE("分配队列中"),//1
ON_ASSIGNING("分配中"),//2
ASSIGN_SUCC("分配成功"),//3
ASSIGN_FAIL("分配失败"),//4
USER_CANCEL("取消借款"),//5
ASSIGN_HANG("分配挂起"),//6
ON_ASSIGNING2("分配中-临时"),//7
DATA_INPROGRESS("数据处理中");//8
AssignStatusEnum(String name) {
}
}
package cn.quantgroup.customer.model.xyqbuser;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.Date;
/**
*用户提现信息查询
* @author wuq
* @date 2021-11-29
*/
@Data
public class ApplyOrderVO implements Serializable {
private static final long serialVersionUID = -1L;
/** 序号 */
private Integer num;
/** 渠道订单号 */
private String channelNo = StringUtils.EMPTY;
/** 用户 id */
private Long userId;
/** 申请订单号 */
private String applyOrderNo;
/** 审核状态 */
private String applyStatus;
/** 申请时间 */
private Date applyAt;
/** 订单类型描述 */
private String productDesc;
/** 渠道名称 */
private String channelName;
/** 分配资金方记录ID(关单使用参数) */
private Long assignFundingRecordId;
/**
* 客服系统 控制查看提现订单按钮是否可用
*/
private boolean showBtn = false;
//客服系统 查看提现订单展示使用
private Long loanId;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateAt;
private String remark;
}
package cn.quantgroup.customer.model.xyqbuser;
/**
* Created by FrankChow on 15/12/1.
*/
public enum BusinessType {
// 0
CASH("现金"),
// 1
BAI_TIAO("白条"),
// 2
QUOTA("循环额度"),
// 3 为很low的写法加日志
BEI_KE("贝壳"),
//4 消费分期
CONSUME_DEPENDS("消费分期"),
PLACE_HOLDER_5("占位"),
//极速APP
SPEED_APP("极速APP"),
PLACE_HOLDER_7("占位"),
PLACE_HOLDER_8("占位"),
/**
* 资金方输出模式 : 9
*/
FUND_MODEL("资金方输出模式"),
PLACE_HOLDER_10("占位"),
PLACE_HOLDER_11("占位"),
PLACE_HOLDER_12("占位"),
PLACE_HOLDER_13("占位"),
PLACE_HOLDER_14("占位"),
PLACE_HOLDER_15("占位"),
PLACE_HOLDER_16("占位"),
PLACE_HOLDER_17("占位"),
PLACE_HOLDER_18("占位"),
PLACE_HOLDER_19("占位"),
PLACE_HOLDER_20("占位"),
PLACE_HOLDER_21("占位"),
PLACE_HOLDER_22("占位"),
PLACE_HOLDER_23("占位"),
PLACE_HOLDER_24("占位"),
PLACE_HOLDER_25("占位"),
PLACE_HOLDER_26("占位"),
PLACE_HOLDER_27("占位"),
PLACE_HOLDER_28("占位"),
PLACE_HOLDER_29("占位"),
PLACE_HOLDER_30("占位"),
PLACE_HOLDER_31("占位"),
PLACE_HOLDER_32("占位"),
PLACE_HOLDER_33("占位"),
PLACE_HOLDER_34("占位"),
PLACE_HOLDER_35("占位"),
PLACE_HOLDER_36("占位"),
PLACE_HOLDER_37("占位"),
PLACE_HOLDER_38("占位"),
PLACE_HOLDER_39("占位"),
PLACE_HOLDER_40("占位"),
PLACE_HOLDER_41("占位"),
PLACE_HOLDER_42("占位"),
PLACE_HOLDER_43("占位"),
PLACE_HOLDER_44("占位"),
PLACE_HOLDER_45("占位"),
PLACE_HOLDER_46("占位"),
PLACE_HOLDER_47("占位"),
PLACE_HOLDER_48("占位"),
PLACE_HOLDER_49("占位"),
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("占位"),
PLACE_HOLDER_60("占位"),
PLACE_HOLDER_61("占位"),
PLACE_HOLDER_62("占位"),
PLACE_HOLDER_63("占位"),
PLACE_HOLDER_64("占位"),
PLACE_HOLDER_65("占位"),
PLACE_HOLDER_66("占位"),
PLACE_HOLDER_67("占位"),
PLACE_HOLDER_68("占位"),
PLACE_HOLDER_69("占位"),
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("占位"),
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("占位"),
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("占位"),
PLACE_HOLDER_100("占位"),
HA_LUO("哈啰单车");
private String desc;
BusinessType(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static BusinessType valueOfType(Integer type) {
return BusinessType.values()[type];
}
}
package cn.quantgroup.customer.model.xyqbuser;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
/**
* 这里是数据库中的资金方配置
* 类名称:FundingCorp
* 类描述:
* @author Feng
*/
@Entity
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Table(name = "funding_corp")
public class FundingCorpEntity implements Serializable{
private static final long serialVersionUID = -2499529693692896987L;
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@Column(name = "strategy_name")
private String strategyName;
@Column(name = "monthly_interest_rate")
private BigDecimal monthlyInterestRate;
@Column(name = "repayment_rule_name")
private String repaymentRuleName;
@Column(name = "created_at")
private Timestamp createdAt;
@Column(name = "updated_at")
private Timestamp updatedAt;
@Column(name = "is_enable")
private boolean enable;
@Column(name = "is_show")
private boolean show;
@Column(name = "max_order")
private int maxOrder = 1;
@Column(name = "loan_merchant_id")
private Integer loanMerchantId;
@Column(name = "support_quota")
private boolean supportQuota = false;
}
package cn.quantgroup.customer.model.xyqbuser;
import java.util.List;
/**
* Created by FrankChow on 15/12/22.
*/
public interface IXyqbLoanApplicationHistoryService {
/**
* 查询有效的老订单.
* @param userId
* @return
*/
List<XyqbLoanApplicationHistory> findActivedOldOrder(String userId);
XyqbLoanApplicationHistory update(XyqbLoanApplicationHistory applicationHistory);
XyqbLoanApplicationHistory findById(Long loanId);
//void update(XyqbLoanApplicationHistory loanApplicationHistory, ReviewHistory reviewHistory);
//void update(XyqbLoanApplicationHistory loanApplicationHistory, ReviewHistory reviewHistory, XyqbLoanApplicationManifestHistory loanApplicationManifestHistory);
}
package cn.quantgroup.customer.model.xyqbuser;
/**
* 类名称:IXyqbLoanApplicationManifestHistoryService
* 类描述:
*
* @author 李宁
* @version 1.0.0
* 创建时间:16/1/29 17:03
* 修改人:
* 修改时间:16/1/29 17:03
* 修改备注:
*/
public interface IXyqbLoanApplicationManifestHistoryService {
/**
* 根据LoanApplicationHistoryId查询借款清单
* @param loanApplicationHistoryId
* @return XyqbLoanApplicationManifestHistory
*/
XyqbLoanApplicationManifestHistory findByLoanApplicationHistoryId(Long loanApplicationHistoryId);
}
package cn.quantgroup.customer.model.xyqbuser;
import cn.quantgroup.customer.repo.IXyqbLoanApplicationManifestHistoryRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 类名称:IXyqbLoanApplicationManifestHistoryServiceIMpl
* 类描述:
*
* @author 李宁
* @version 1.0.0
* 创建时间:16/1/29 17:04
* 修改人:
* 修改时间:16/1/29 17:04
* 修改备注:
*/
@Service
public class IXyqbLoanApplicationManifestHistoryServiceIMpl implements IXyqbLoanApplicationManifestHistoryService {
@Autowired
private IXyqbLoanApplicationManifestHistoryRepository applicationManifestHistoryRepository;
@Override
public XyqbLoanApplicationManifestHistory findByLoanApplicationHistoryId(Long loanApplicationHistoryId) {
return applicationManifestHistoryRepository.findByLoanApplicationHistoryId(loanApplicationHistoryId);
}
}
package cn.quantgroup.customer.model.xyqbuser;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
/**
*
*/
public interface IXyqbRepaymentPlanService {
List<XyqbRepaymentPlan> findByLoanApplicationHistoryId(Long loanApplicationHistoryId);
/**
* 更新deadline
* @param loanId
* @param loanPaidAt
* @return
*/
//List<XyqbRepaymentPlan> updateDeadline(Long loanId, Date loanPaidAt);
/**
* 更新本息和
*
* @param manifest
* @param fundingRepaymentRule 计息规则
* @return
*/
//List<XyqbRepaymentPlan> updatePrincipalAndInterest(XyqbLoanApplicationManifestHistory manifest, String fundingRepaymentRule);
/**
* 还款前更新数据(减免、罚息等)
* @param planId 还款计划
* @param planBean
* @return
*/
//XyqbRepaymentPlan beforePay(Long planId , String payCenterOrderNo , RepaymentPlanBean planBean);
/**
* 还款后更新数据(还款状态,相关时间戳)
* @param loanId
* @param term
* @return
*/
//XyqbRepaymentPlan afterPay(Long loanId, Integer term);
/**
* 还款计划重置未还款
* @param loanId
* @param term
* @return
*/
//XyqbRepaymentPlan resetNotRepay(Long loanId, Integer term);
/**
* 转换时间
* @param date
* @return
*/
/*default LocalDateTime parseLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zone);
}*/
/**
* 计算还款截截止期限
* @param loanPaidAt 放款时间
* @param termNo 期
* @param offset 偏移量
* @return
*/
/* default Date getDeadline(Date loanPaidAt, Integer termNo, Integer offset) {
LocalDate date = parseLocalDateTime(loanPaidAt).toLocalDate();
return Date.from(date.plusMonths(termNo).plusDays(offset).atStartOfDay(ZoneId.systemDefault()).toInstant());
}*/
/**
* 更新`提现券`面值到还款记录中
* @param manifest 借款清单
* @return
*/
//List<XyqbRepaymentRecord> updateBorrowCouponValueAndUse(XyqbLoanApplicationManifestHistory manifest);
}
package cn.quantgroup.customer.model.xyqbuser;
import cn.quantgroup.customer.util.MoneySerializer;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author wuq
* @since 2021-11-29
*/
@Data
public class LoanOrderVo extends ApplyOrderVO {
/**
* 借款状态
*/
private String loanStatus = StatusMap.DEFAULT_STATUS;
/**
* 借款金额
*/
@JsonSerialize(using = MoneySerializer.class)
private BigDecimal amount;
/**
* 放款时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date paidAt;
/**
* 每期应还金额
*/
@JsonSerialize(using = MoneySerializer.class)
private BigDecimal termRepayment;
}
package cn.quantgroup.customer.model.xyqbuser;
import com.google.common.collect.Lists;
import java.util.List;
/**
* 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_SENDED_TO_FUNDING_CORP("已发送给资金方, 等待放款"),//21, 发邮件后更新使用
FINAL_MASHANG_APPROVAL_SUCCESS("马上金融放款成功"),//22
FINAL_MASHANG_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
SUBMITED_TO_FUND_CORP_PRE_ASSIGN("提交资金方预审"), //40
USER_RELATION_INCOMPLETE("与用户相关联系人信息未完成"),//41
FUND_ERROR("资金方放贷失误,两笔还款计划"), // 42
/**
* 修改时间 20160104 资金方解耦
*/
// category 4x
XIAOYING_BIND_CARD("占位"), // 43
XIAOYING_VERIFY_CARD("占位"), // 44
PLACE_HOLDER_45("占位"),PLACE_HOLDER_46("占位"),PLACE_HOLDER_47("占位"),DROP_SUCC("取消借款"),PLACE_HOLDER_49("占位"),
// category 5x
START_ORDER("发起提现,等待二次风控审核"),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("等待二次(存管)提现"),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("占位"),
/**
* 资金方相关
*/
UN_ACCEPTED_BY_FUND_CORP("资金方受理失败"),
ACCEPTED_BY_FUND_CORP("资金方已受理"),
MONERY_TRANSFERD_BY_FUND_CORP("资金方已打款")
;
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;
}
// LoanProgress in 1,2,3,8,19
public static final List<LoanProgress> ONE = Lists.newArrayList(
USER_INFORMATION_INCOMPLETE,USER_AUTHENTICATION_INCOMPLETE,USER_AUTHENTICATION_COMPLETE,FINAL_SCREENING_REJECT,FILTERING_DECLINED);
// LoanProgress in 7
public static final List<LoanProgress> SEVEN = Lists.newArrayList(FINAL_SCREENING);
// LoanProgress in 9,24
public static final List<LoanProgress> NINE = Lists.newArrayList(LOAN_APPLICATION_MANIFEST_COMPLETE,ADDRESS_COMPLETE);
// LoanProgress in 41,20,42,15,21
public static final List<LoanProgress> TWENTY = Lists.newArrayList(
USER_RELATION_INCOMPLETE,WAITING_FUND,FUND_ERROR,CHECK_REPAYMENT_PLAN,FINAL_SENDED_TO_FUNDING_CORP,START_ORDER);
// LoanProgress in 12,23
public static final List<LoanProgress> TWELVE = Lists.newArrayList(QUIT_AND_SHOW_REASON,FINAL_MASHANG_APPROVAL_FAIL);
}
package cn.quantgroup.customer.model.xyqbuser;
/**
* Created by wuq on 21/11/29.
*/
public enum PayApproach {
// 易联
PAY_ECO,
// 支付中心
PAY_CENTER;
}
package cn.quantgroup.customer.model.xyqbuser;
import cn.quantgroup.customer.enums.AssignStatusEnum;
import org.apache.commons.lang3.StringUtils;
/**
* @author Jie.Feng
* @since 2020-04-25
*/
public class StatusMap {
/**
* 默认的显示
*/
public static final String DEFAULT_STATUS = "-";
public static String mapApplyStatus(AssignStatusEnum assignStatus) {
switch (assignStatus) {
case USER_CANCEL:
return "取消借款";
case ASSIGN_SUCC:
return "风审通过";
case ASSIGN_FAIL:
return "资方审核失败";
default:
return "资方审核中";
}
}
public static String mapLoanStatus(LoanProgress progress) {
switch (progress) {
case CHECK_REPAYMENT_PLAN:
return "放款成功";
case LOAN_COMPLETE:
return "已结清";
case WAITING_FUND:
case FINAL_SENDED_TO_FUNDING_CORP:
case START_ORDER:
case PLACE_HOLDER_71:
return "放款中";
case WAITING_WITHDRAW:
return "等待存管二次提现";
case PLACE_HOLDER_70:
return "等待二类户提现";
case DROP_SUCC:
case QUIT_AND_SHOW_REASON:
return "取消借款";
case FINAL_MASHANG_APPROVAL_FAIL:
return "放款失败";
case FINAL_SCREENING_REJECT:
return "风控拒绝";
default:
return DEFAULT_STATUS;
}
}
public static boolean invalidOrder(String ... statusDesc){
for (String desc : statusDesc) {
if(StringUtils.containsAny(desc, "拒绝", "取消", "关单", "失败")){
return true;
}
}
return false;
}
}
package cn.quantgroup.customer.model.xyqbuser;
/**
* Created by root on 15-8-1.
*/
public enum TransactionStatus {
// 0 审核成功
AUDIT_SUCCESS("审批成功"),
// 1 已提交给资金方
SUBMIT_FOR_FUND("已提交给资金方"),
// 2, 资金方已放款, 从资金方反馈数据得到
PAY_SUCCESS("已打款"),
// 3, 放款未到账
PAY_ERROR("未到账"),
// 4, 资金方尝试放款失败
PAY_FAIL("打款失败"),
// 5, 用户已还款
REPAY_SUCESS("已还款");
private String description;
TransactionStatus(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "TransactionStatus{" +
"description='" + description + '\'' +
'}';
}
}
package cn.quantgroup.customer.model.xyqbuser;
import lombok.Data;
import java.util.List;
/**
* @author Jie.Feng
* @since 2020-04-24
*/
@Data
public class UserOrders {
/**
* 有效订单
*/
private List<LoanOrderVo> activeOrders;
/**
* 无效订单: 被拒绝,过期,关单
*/
private List<LoanOrderVo> invalidOrders;
private String description = "暂无描述";
}
package cn.quantgroup.customer.model.xyqbuser;
import lombok.ToString;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Objects;
/**
* Created by wuq on 21/11/29.
*/
@Entity
@Table(name = "loan_application_history")
@ToString
public class XyqbLoanApplicationHistory implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id")
private Long userId;
@Column(name = "channel_id")
private Long channelId;
//false表示借款申请是无效的
@Column(name = "is_active")
private Boolean isActive = true;
//贷款进度 默认是02
@Column(name = "progress")
private LoanProgress progress = LoanProgress.USER_AUTHENTICATION_INCOMPLETE;
@Transient
private String progressDesc;
@Column(name = "pay_approach")
private PayApproach payApproach;
@Column(name = "bank_card_id")
private Long bankCardId;
@Column(name = "business_type")
private BusinessType businessType;
@Column(name = "baitiao_merchant_id")
private Long baitiaoMerchantId;
//创建时间
@Column(name = "created_at")
private Timestamp createdAt;
@Column(name = "created_from")
private Long createdFrom;
@Column(name = "updated_at")
private Timestamp updatedAt;
public XyqbLoanApplicationHistory() {
}
public PayApproach getPayApproach() {
return payApproach;
}
public void setPayApproach(PayApproach payApproach) {
this.payApproach = payApproach;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getChannelId() {
return channelId;
}
public void setChannelId(Long channelId) {
this.channelId = channelId;
}
public Timestamp getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Timestamp createdAt) {
this.createdAt = createdAt;
}
public Boolean getIsActive() {
return isActive;
}
public void setIsActive(Boolean isActive) {
this.isActive = isActive;
}
public LoanProgress getProgress() {
return progress;
}
public void setProgress(LoanProgress progress) {
this.progress = progress;
}
public Long getBankCardId() {
return bankCardId;
}
public void setBankCardId(Long bankCardId) {
this.bankCardId = bankCardId;
}
public Long getCreatedFrom() {
return createdFrom;
}
public void setCreatedFrom(Long createdFrom) {
this.createdFrom = createdFrom;
}
public BusinessType getBusinessType() {
return businessType;
}
public void setBusinessType(BusinessType businessType) {
this.businessType = businessType;
}
public long parseChannelId() {
return !Objects.equals(createdFrom, -1L) ? this.createdFrom : this.channelId;
}
public Long getBaitiaoMerchantId() {
return baitiaoMerchantId;
}
public void setBaitiaoMerchantId(Long baitiaoMerchantId) {
this.baitiaoMerchantId = baitiaoMerchantId;
}
public Boolean getActive() {
return isActive;
}
public void setActive(Boolean active) {
isActive = active;
}
public String getProgressDesc() {
if (progress != null) {
return progress.getDescription();
}
return progressDesc;
}
public void setProgressDesc(String progressDesc) {
this.progressDesc = progressDesc;
}
public Timestamp getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Timestamp updatedAt) {
this.updatedAt = updatedAt;
}
}
package cn.quantgroup.customer.model.xyqbuser;
import cn.quantgroup.customer.repo.IXyqbLoanApplicationHistoryRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Created by FrankChow on 15/12/22.
*/
@Service
public class XyqbLoanApplicationHistoryServiceImpl implements IXyqbLoanApplicationHistoryService {
@Autowired
private IXyqbLoanApplicationHistoryRepository loanApplicationHistoryRepository;
@Override
public XyqbLoanApplicationHistory update(XyqbLoanApplicationHistory applicationHistory) {
return loanApplicationHistoryRepository.save(applicationHistory);
}
@Override
public XyqbLoanApplicationHistory findById(Long loanId) {
return loanApplicationHistoryRepository.findById(loanId);
}
/**
* 查询有效的老订单.
*
* @param userId
* @return
*/
@Override
public List<XyqbLoanApplicationHistory> findActivedOldOrder(String userId) {
return loanApplicationHistoryRepository.findActivedOldOrder(Long.valueOf(userId));
}
}
package cn.quantgroup.customer.model.xyqbuser;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* Created by springning on 15-7-21.
*/
@Entity
@Table(name = "loan_application_manifest_history", uniqueConstraints = @UniqueConstraint(columnNames = "loan_application_history_id"))
public class XyqbLoanApplicationManifestHistory implements Serializable {
private static final long serialVersionUID = -1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id")
private Long userId;
@Column(name = "loan_application_history_id")
private Long loanApplicationHistoryId;
@Column(name = "contract_loan_amount")
private BigDecimal contractLoanAmount;
@Column(name = "contract_term")
private Integer contractTerm;
@Column(name = "service_fee_per_term")
private BigDecimal serviceFeePerTerm;
@Column(name = "one_time_service_fee")
private BigDecimal oneTimeServiceFee;
@Column(name = "monthly_interest_rate")
private BigDecimal monthlyInterestRate;
@Column(name = "total_repayment_amount")
private BigDecimal totalRepaymentAmount;
@Column(name = "monthly_repayment")
private BigDecimal monthlyRepayment;
@Column(name = "funding_corp_id")
private Long fundingCorpId;
@Column(name = "funding_corp_name")
private String fundingCorpName;
@Column(name = "real_loan_amount")
private BigDecimal realLoanAmount;
@Column(name = "transaction_status")
private TransactionStatus transactionStatus;
@Column(name = "remark")
private String remark;
@Column(name = "red_packet_strategy")
private String redPacketStrategy;
/**
* 年利率
*/
@Column(name = "annual_interest_rate")
private BigDecimal annualInterestRate;
@Column(name = "created_at")
private Date createdAt;
/**
* 每期用户本息
*/
@Column(name = "principal_and_interest_per_term")
private BigDecimal principalAndInterestPerTerm;
/**
* 总共用户本息
*/
@Column(name = "total_principal_and_interest")
private BigDecimal totalPrincipalAndInterest;
@Column(name = "company_income")
private BigDecimal companyIncome;
@Column(name = "loan_received_at")
private Date loanReceivedAt;
@Column(name = "loan_paid_at")
private Date loanPaidAt;
@Column(name = "product_id")
private Long productId;
@Column(name = "channel_id")
private Long channelId;
@Column(name = "transaction_flow_id")
private Long transactionFlowId;
public XyqbLoanApplicationManifestHistory(Long userId, Long loanApplicationHistoryId) {
this.userId = userId;
this.loanApplicationHistoryId = loanApplicationHistoryId;
}
public XyqbLoanApplicationManifestHistory() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getLoanApplicationHistoryId() {
return loanApplicationHistoryId;
}
public void setLoanApplicationHistoryId(Long loanApplicationHistoryId) {
this.loanApplicationHistoryId = loanApplicationHistoryId;
}
public BigDecimal getContractLoanAmount() {
return contractLoanAmount;
}
public void setContractLoanAmount(BigDecimal contractLoanAmount) {
this.contractLoanAmount = contractLoanAmount;
}
public Integer getContractTerm() {
return contractTerm;
}
public void setContractTerm(Integer contractTerm) {
this.contractTerm = contractTerm;
}
public BigDecimal getServiceFeePerTerm() {
return serviceFeePerTerm;
}
public void setServiceFeePerTerm(BigDecimal serviceFeePerTerm) {
this.serviceFeePerTerm = serviceFeePerTerm;
}
public BigDecimal getOneTimeServiceFee() {
return oneTimeServiceFee;
}
public void setOneTimeServiceFee(BigDecimal oneTimeServiceFee) {
this.oneTimeServiceFee = oneTimeServiceFee;
}
public BigDecimal getMonthlyInterestRate() {
return monthlyInterestRate;
}
public void setMonthlyInterestRate(BigDecimal monthlyInterestRate) {
this.monthlyInterestRate = monthlyInterestRate;
}
public BigDecimal getTotalRepaymentAmount() {
return totalRepaymentAmount;
}
public void setTotalRepaymentAmount(BigDecimal totalRepaymentAmount) {
this.totalRepaymentAmount = totalRepaymentAmount;
}
public BigDecimal getMonthlyRepayment() {
return monthlyRepayment;
}
public void setMonthlyRepayment(BigDecimal monthlyRepayment) {
this.monthlyRepayment = monthlyRepayment;
}
public Long getFundingCorpId() {
return fundingCorpId;
}
public void setFundingCorpId(Long fundingCorpId) {
this.fundingCorpId = fundingCorpId;
}
public String getFundingCorpName() {
return fundingCorpName;
}
public void setFundingCorpName(String fundingCorpName) {
this.fundingCorpName = fundingCorpName;
}
public BigDecimal getRealLoanAmount() {
return realLoanAmount;
}
public void setRealLoanAmount(BigDecimal realLoanAmount) {
this.realLoanAmount = realLoanAmount;
}
public TransactionStatus getTransactionStatus() {
return transactionStatus;
}
public void setTransactionStatus(TransactionStatus transactionStatus) {
this.transactionStatus = transactionStatus;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public BigDecimal getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(BigDecimal annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public BigDecimal getPrincipalAndInterestPerTerm() {
return principalAndInterestPerTerm;
}
public void setPrincipalAndInterestPerTerm(BigDecimal principalAndInterestPerTerm) {
this.principalAndInterestPerTerm = principalAndInterestPerTerm;
}
public BigDecimal getTotalPrincipalAndInterest() {
return totalPrincipalAndInterest;
}
public void setTotalPrincipalAndInterest(BigDecimal totalPrincipalAndInterest) {
this.totalPrincipalAndInterest = totalPrincipalAndInterest;
}
public BigDecimal getCompanyIncome() {
return companyIncome;
}
public void setCompanyIncome(BigDecimal companyIncome) {
this.companyIncome = companyIncome;
}
public Date getLoanReceivedAt() {
return loanReceivedAt;
}
public void setLoanReceivedAt(Date loanReceivedAt) {
this.loanReceivedAt = loanReceivedAt;
}
public Date getLoanPaidAt() {
return loanPaidAt;
}
public void setLoanPaidAt(Date loanPaidAt) {
this.loanPaidAt = loanPaidAt;
}
public Long getProductId() {
return productId;
}
public void setProductId(Long productId) {
this.productId = productId;
}
public Long getChannelId() {
return channelId;
}
public void setChannelId(Long channelId) {
this.channelId = channelId;
}
public Long getTransactionFlowId() {
return transactionFlowId;
}
public void setTransactionFlowId(Long transactionFlowId) {
this.transactionFlowId = transactionFlowId;
}
public String getRedPacketStrategy() {
return redPacketStrategy;
}
public void setRedPacketStrategy(String redPacketStrategy) {
this.redPacketStrategy = redPacketStrategy;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("XyqbLoanApplicationManifestHistory{");
sb.append("annualInterestRate=").append(annualInterestRate);
sb.append(", id=").append(id);
sb.append(", userId=").append(userId);
sb.append(", loanApplicationHistoryId=").append(loanApplicationHistoryId);
sb.append(", contractLoanAmount=").append(contractLoanAmount);
sb.append(", contractTerm=").append(contractTerm);
sb.append(", serviceFeePerTerm=").append(serviceFeePerTerm);
sb.append(", oneTimeServiceFee=").append(oneTimeServiceFee);
sb.append(", monthlyInterestRate=").append(monthlyInterestRate);
sb.append(", totalRepaymentAmount=").append(totalRepaymentAmount);
sb.append(", monthlyRepayment=").append(monthlyRepayment);
sb.append(", fundingCorpId=").append(fundingCorpId);
sb.append(", fundingCorpName='").append(fundingCorpName).append('\'');
sb.append(", realLoanAmount=").append(realLoanAmount);
sb.append(", transactionStatus=").append(transactionStatus);
sb.append(", remark='").append(remark).append('\'');
sb.append(", redPacketStrategy='").append(redPacketStrategy).append('\'');
sb.append(", createdAt=").append(createdAt);
sb.append(", principalAndInterestPerTerm=").append(principalAndInterestPerTerm);
sb.append(", totalPrincipalAndInterest=").append(totalPrincipalAndInterest);
sb.append(", companyIncome=").append(companyIncome);
sb.append(", loanReceivedAt=").append(loanReceivedAt);
sb.append(", loanPaidAt=").append(loanPaidAt);
sb.append(", productId=").append(productId);
sb.append(", channelId=").append(channelId);
sb.append(", transactionFlowId=").append(transactionFlowId);
sb.append('}');
return sb.toString();
}
}
package cn.quantgroup.customer.model.xyqbuser;
import lombok.ToString;
import javax.persistence.*;
import java.math.BigDecimal;
import java.sql.Timestamp;
/**
* Created by FrankChow on 15/10/28.
*/
@ToString
@Entity
@Table(name = "repayment_plan")
public class XyqbRepaymentPlan {
private static final long serialVersionUID = -1L;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "user_id")
private Long userId;
@Column(name = "loan_application_manifest_history_id")
private Long loanApplicationManifestHistoryId;
@Column(name = "loan_application_history_id")
private Long loanApplicationHistoryId;
@Column(name = "transaction_flow_id")
private Long transcationFlowId;
@Column(name = "term_no")
private Integer termNo;
@Column(name = "deadline")
private Timestamp deadline;
@Column(name = "current_repayment")
private BigDecimal currentRepayment;
@Column(name = "required_repayment")
private BigDecimal requiredRepayment;
@Column(name = "repayment_status")
private Integer repaymentStatus; //还款状态:0-未还款,1-还款中,2-已逾期,3-已还款
@Column(name = "repaid_at")
private Timestamp repaidAt;
@Column(name = "repayment_received_at")
private Timestamp repaymentReceivedAt;
@Column(name = "remark")
private String remark;
//创建时间
@Column(name = "created_at")
private Timestamp createdAt;
@Column(name = "updated_at")
private Timestamp updatedAt;
@Column(name = "pay_center_order_no")
private String payCenterOrderNo = "";
/**
* 催收减免
*/
@Column(name = "collection_relief")
private BigDecimal collectionRelief;
public Timestamp getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Timestamp createdAt) {
this.createdAt = createdAt;
}
public Timestamp getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Timestamp updatedAt) {
this.updatedAt = updatedAt;
}
public String getPayCenterOrderNo() {
return payCenterOrderNo;
}
public void setPayCenterOrderNo(String payCenterOrderNo) {
this.payCenterOrderNo = payCenterOrderNo;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Timestamp getRepaymentReceivedAt() {
return repaymentReceivedAt;
}
public void setRepaymentReceivedAt(Timestamp repaymentReceivedAt) {
this.repaymentReceivedAt = repaymentReceivedAt;
}
public Timestamp getRepaidAt() {
return repaidAt;
}
public void setRepaidAt(Timestamp repaidAt) {
this.repaidAt = repaidAt;
}
public Integer getRepaymentStatus() {
return repaymentStatus;
}
public void setRepaymentStatus(Integer repaymentStatus) {
this.repaymentStatus = repaymentStatus;
}
public BigDecimal getRequiredRepayment() {
return requiredRepayment;
}
public void setRequiredRepayment(BigDecimal requiredRepayment) {
this.requiredRepayment = requiredRepayment;
}
public BigDecimal getCurrentRepayment() {
return currentRepayment;
}
public void setCurrentRepayment(BigDecimal currentRepayment) {
this.currentRepayment = currentRepayment;
}
public Timestamp getDeadline() {
return deadline;
}
public void setDeadline(Timestamp deadline) {
this.deadline = deadline;
}
public Integer getTermNo() {
return termNo;
}
public void setTermNo(Integer termNo) {
this.termNo = termNo;
}
public Long getTranscationFlowId() {
return transcationFlowId;
}
public void setTranscationFlowId(Long transcationFlowId) {
this.transcationFlowId = transcationFlowId;
}
public Long getLoanApplicationHistoryId() {
return loanApplicationHistoryId;
}
public void setLoanApplicationHistoryId(Long loanApplicationHistoryId) {
this.loanApplicationHistoryId = loanApplicationHistoryId;
}
public Long getLoanApplicationManifestHistoryId() {
return loanApplicationManifestHistoryId;
}
public void setLoanApplicationManifestHistoryId(Long loanApplicationManifestHistoryId) {
this.loanApplicationManifestHistoryId = loanApplicationManifestHistoryId;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public BigDecimal getCollectionRelief() {
return collectionRelief;
}
public void setCollectionRelief(BigDecimal collectionRelief) {
this.collectionRelief = collectionRelief;
}
@PrePersist
public void prePersist() {
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
createdAt = timestamp;
updatedAt = timestamp;
}
@PreUpdate
public void preUpdate() {
updatedAt = new Timestamp(System.currentTimeMillis());
}
}
package cn.quantgroup.customer.model.xyqbuser;
import cn.quantgroup.customer.repo.IXyqbRepaymentRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.LinkedList;
import java.util.List;
/**
* Created by root on 15-7-23.
*/
@Slf4j
@Service
//@Transactional(value = "xyqbTransactionManager")
public class XyqbRepaymentPlanServiceImpl implements IXyqbRepaymentPlanService {
@Autowired
private IXyqbRepaymentRepository repaymentPlanRepository;
@Override
public List<XyqbRepaymentPlan> findByLoanApplicationHistoryId(Long loanApplicationHistoryId) {
if(loanApplicationHistoryId == null){
return new LinkedList<>();
}
return repaymentPlanRepository.findByLoanApplicationHistoryId(loanApplicationHistoryId);
}
}
package cn.quantgroup.customer.repo;
import cn.quantgroup.customer.model.xyqbuser.FundingCorpEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* 2017.11.10
* @author Feng
*/
public interface IFundingCorpRepository extends JpaRepository<FundingCorpEntity, Long> {
/**
* 查询 根据状态
* @param b
* @return
*/
List<FundingCorpEntity> findByEnable(boolean b);
@Query(value = "SELECT a.`product_type` FROM quota_product a WHERE a.`id` = ?1",nativeQuery = true)
Integer findProductType(Long productId);
@Query(value = "SELECT a.`product_desc` FROM quota_product a WHERE a.`id` = ?1",nativeQuery = true)
String findProductDesc(Long productId);
@Query(value = "SELECT `name` FROM channel WHERE id = ?1",nativeQuery = true)
String findChannelName(Long channelId);
@Transactional(transactionManager = "xyqbTransactionManager", rollbackFor = Exception.class)
@Query(value = "update funding_corp set refuse_repay_times = ?2 where id = ?1",nativeQuery = true)
@Modifying
void updateToRepayTime(Long fundingCorpId, String time);
}
\ No newline at end of file
package cn.quantgroup.customer.repo;
import cn.quantgroup.customer.model.xyqbuser.BusinessType;
import cn.quantgroup.customer.model.xyqbuser.LoanProgress;
import cn.quantgroup.customer.model.xyqbuser.XyqbLoanApplicationHistory;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.math.BigInteger;
import java.util.Date;
import java.util.List;
import java.util.Set;
/**
* Created by FrankChow on 15/7/23.
*/
public interface IXyqbLoanApplicationHistoryRepository extends JpaRepository<XyqbLoanApplicationHistory, Long> {
XyqbLoanApplicationHistory findById(Long id);
@Modifying
@Query("UPDATE XyqbLoanApplicationHistory t SET t.progress = ?2 WHERE t.id = ?1")
void updateLoanProgressById(Long id, LoanProgress loanProgress);
@Modifying
@Query("UPDATE XyqbLoanApplicationHistory t SET t.progress = ?2 , t.isActive= ?3 WHERE t.id = ?1")
void updateLoanProgressByIdAndClose(Long id, LoanProgress loanProgress, Boolean isActive);
List<XyqbLoanApplicationHistory> findByUserIdAndIsActive(Long userId, Boolean isActive);
@Query("from XyqbLoanApplicationHistory WHERE progress in ?1 and isActive = true")
List<XyqbLoanApplicationHistory> findXyqbLoanApplicationHistoryByProgress(List<LoanProgress> loanProgresses);
List<XyqbLoanApplicationHistory> findByUserId(Long userId);
List<XyqbLoanApplicationHistory> findByUserIdAndBusinessType(Long userId, BusinessType businessType);
List<XyqbLoanApplicationHistory> findByUserIdAndIsActiveAndBusinessType(Long userId, Boolean isActive, BusinessType businessType);
@Modifying
@Query("update XyqbLoanApplicationHistory apphis set apphis.progress = ?2 where apphis.id in ?1 ")
void updateLoanProgressAfterFunding(Set<Long> loanIds, LoanProgress loanProgress);
List<XyqbLoanApplicationHistory> findByUserIdAndChannelId(Long userId, Long channelId);
XyqbLoanApplicationHistory findByUserIdAndChannelIdAndIsActive(Long userId, Long channelId, Boolean isActive);
XyqbLoanApplicationHistory findByIdAndIsActiveTrue(Long loanId);
List<XyqbLoanApplicationHistory> findByBusinessTypeAndUserId(BusinessType businessType, Long userId);
@Query(value = "select * from loan_application_history where id in ?1",nativeQuery = true)
List<XyqbLoanApplicationHistory> findObjectsByIds(List<Long> ids);
@Query(nativeQuery = true, value = "SELECT count(DISTINCT h.id) FROM repay_notify_record n " +
"LEFT JOIN loan_application_history h ON n.loan_id=h.id " +
"WHERE n.fund_corp_id=?1 AND n.notice_type=1 AND n.notify_status=0 AND h.progress=16")
Long countUnNotifyRecordByFundingCorp(Long fundingCorpId);
@Query(nativeQuery = true, value = "SELECT DISTINCT h.* FROM repay_notify_record n " +
"LEFT JOIN loan_application_history h ON n.loan_id=h.id " +
"WHERE n.fund_corp_id=?1 AND n.notice_type=1 AND n.notify_status=0 AND h.progress=16 limit ?2,?3")
List<XyqbLoanApplicationHistory> findUnNotifyRecordByFundingCorp(Long fundingCorpId, int start, int pageSize);
/**
* 根据loanId获取授信单号
*
* @param loanId
* @return
*/
@Query(value = "select order_no from loan_account_ext where loan_id =?1 limit 1", nativeQuery = true)
String findOrderNoByLoanId(Long loanId);
/**
* 获取最新一条订单数据
*
* @param userId
* @param businessType
* @return
*/
@Query(value = "select * from loan_application_history where user_id = ?1 and business_type = ?2 order by id desc limit 1", nativeQuery = true)
XyqbLoanApplicationHistory findLatestByUserIdAndType(Long userId, Integer businessType);
/**
* 查询逾期未完成提现的订单
* @param start
* @param end
* @return
*/
@Query(value = "select id from loan_application_history where created_at>=?1 and created_at<?2 and progress = 24 and is_active = 1", nativeQuery = true)
List<BigInteger> findOverdueData(Date start, Date end);
/**
* 关闭逾期未完成提现的订单
* @param id
*/
@Modifying
@Query(value = "update loan_application_history apphis set apphis.is_active=0, apphis.progress = 12 where apphis.id =?1 and apphis.progress = 24", nativeQuery = true)
void closeOverdueData(Long id);
@Query(value = "select * from loan_application_history where user_id = ?1 and id = ?2", nativeQuery = true)
List<XyqbLoanApplicationHistory> findByUserIdAndLoanId(Long userId, Long loanId);
/**
* 查询老的有效订单.
* @param userId
* @return
*/
@Query(value = "select * from loan_application_history where user_id = ?1 and id < 101637467 and progress in (15,16) and business_type = 0", nativeQuery = true)
List<XyqbLoanApplicationHistory> findActivedOldOrder(Long userId);
}
package cn.quantgroup.customer.repo;
import cn.quantgroup.customer.model.xyqbuser.XyqbLoanApplicationManifestHistory;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
* Created by root on 15-7-22.
*/
public interface IXyqbLoanApplicationManifestHistoryRepository extends
JpaRepository<XyqbLoanApplicationManifestHistory, Long> {
XyqbLoanApplicationManifestHistory findByLoanApplicationHistoryId(Long loanApplicationHistoryId);
@Query("select new XyqbLoanApplicationManifestHistory(userId, max(loanApplicationHistoryId)) from XyqbLoanApplicationManifestHistory where userId in ?1 and channelId in ?2 and createdAt >= ?3 group by userId, channelId")
List<XyqbLoanApplicationManifestHistory> findLoanAppManifestHistory(List<Long> userIdList, List<Long> channelIdList, Timestamp first);
@Query("from XyqbLoanApplicationManifestHistory where loanApplicationHistoryId in ?1")
List<XyqbLoanApplicationManifestHistory> findByLoanAppIds(List<Long> loanApplicationHistoryIdList);
List<XyqbLoanApplicationManifestHistory> findByUserId(Long userId);
@Query(value = "select loan_application_history_id from loan_application_manifest_history where id > ?!", nativeQuery = true)
List<BigInteger> findByLoanIdApplyAfter410(Long beginId);
@Query(value = "select * from loan_application_manifest_history where funding_corp_id = ?1 and transaction_status= 1 and loan_paid_at between ?2 and ?3", nativeQuery = true)
List<XyqbLoanApplicationManifestHistory> findByCorpIdAndDate(Long corpId, Date startDate, Date endDate);
/**
* 查询已经放款的借款清单
* @param corpId
* @return
*/
@Query(value = "select * from loan_application_manifest_history where funding_corp_id = ?1 and transaction_status= 2 and loan_paid_at between ?2 and ?3", nativeQuery = true)
List<XyqbLoanApplicationManifestHistory> findPaiedByCorpIdAndDate(Long corpId, Date startDate, Date endDate);
@Query(value = "select * from loan_application_manifest_history where loan_paid_at between ?1 and ?2", nativeQuery = true)
List<XyqbLoanApplicationManifestHistory> findByDate(Date startDate, Date endDate);
@Query(value = "select COUNT(m.id) from loan_application_manifest_history m JOIN loan_application_history l on m.loan_application_history_id = l.id where l.user_id = ?1 and m.funding_corp_id = ?2 AND l.`is_active` = 1",nativeQuery = true)
int findUserActiveOrderCount(Long userId, Long fundingCorpId);
List<XyqbLoanApplicationManifestHistory> findByIdIn(Collection<Long> ids);
@Query(value = "select * from loan_application_manifest_history where funding_corp_id in (780,770) and transaction_status in (2,5) and DATE(loan_paid_at) = ?1", nativeQuery = true)
List<XyqbLoanApplicationManifestHistory> findByLoanPaidAt(String loanPaidAt);
@Query(value = "select * from loan_application_manifest_history where (user_id = ?1 or loan_application_history_id = ?2) and transaction_status in (0,1,4)", nativeQuery = true)
List<XyqbLoanApplicationManifestHistory> findByUserIdOrLoanId(Long userId,Long loanId);
}
package cn.quantgroup.customer.repo;
import cn.quantgroup.customer.model.xyqbuser.XyqbRepaymentPlan;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import java.math.BigDecimal;
import java.util.List;
/**
* Created by FrankChow on 15/10/28.
*/
public interface IXyqbRepaymentRepository extends JpaRepository<XyqbRepaymentPlan, Long> {
List<XyqbRepaymentPlan> findByLoanApplicationHistoryId(Long loanApplicationHistoryId);
@Modifying
@Query("UPDATE XyqbRepaymentPlan t SET t.collectionRelief = ?2 WHERE t.id = ?1 ")
void updateCollectionReliefById(Long id, BigDecimal collectionRelief);
List<XyqbRepaymentPlan> findByLoanApplicationHistoryIdOrderByTermNoAsc(Long loanApplicationHistoryId);
}
package cn.quantgroup.customer.rest;
import cn.quantgroup.customer.rest.param.user.UserCombinationParam;
import cn.quantgroup.customer.rest.vo.JsonResult;
import cn.quantgroup.customer.service.IUserService;
import cn.quantgroup.customer.service.IXyqbService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.quantgroup.customer.service.IUserService;
@Slf4j
@RestController
@RequestMapping("/userCash")
public class UserCashRest {
private final IUserService userService;
@Autowired
public UserCashRest(IUserService userService) {
this.userService = userService;
}
/**
* 用户提现信息查询
* @param combinationParam
* @return
*/
@GetMapping(value = "/info")
public JsonResult findUserCombination(UserCombinationParam combinationParam) {
return userService.findUserCashCombination(combinationParam);
}
}
......@@ -21,4 +21,6 @@ public interface IIceService {
JsonResult applySettle(Long loanId);
JsonResult downloadSettle(HttpServletResponse response, Long loanId);
JsonResult<ApplyOrder> findUserCashApplyOrders(ApplyOrderQuery applyOrderQuery);
}
......@@ -66,4 +66,10 @@ public interface IUserService extends UserDetailsService {
*/
MoResult<String> modifyUserDetail(Long userId, String realName, String idNO);
/**
* 用户提现信息查询
* @param userCombinationParam
* @return
*/
JsonResult findUserCashCombination(UserCombinationParam userCombinationParam);
}
package cn.quantgroup.customer.service.impl;
import cn.quantgroup.customer.model.order.*;
import cn.quantgroup.customer.model.xyqbuser.*;
import cn.quantgroup.customer.repo.IFundingCorpRepository;
import cn.quantgroup.customer.rest.param.applyorder.ApplyOrderQuery;
import cn.quantgroup.customer.rest.vo.JsonResult;
import cn.quantgroup.customer.service.IFileService;
import cn.quantgroup.customer.service.IIceService;
import cn.quantgroup.customer.service.http.IHttpService;
import cn.quantgroup.customer.util.JSONTools;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import sun.security.pkcs11.wrapper.Constants;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
......@@ -40,6 +40,17 @@ public class IceServiceImpl implements IIceService {
@Autowired
private IFileService fileService;
@Autowired
private IXyqbLoanApplicationHistoryService loanApplicationHistoryService;
@Autowired
private IXyqbLoanApplicationManifestHistoryService manifestHistoryService;
@Autowired
private IFundingCorpRepository fundingCorpRepository;
@Autowired
private IXyqbRepaymentPlanService repaymentPlanService;
@Autowired
public IceServiceImpl(IHttpService httpService) {
......@@ -241,4 +252,95 @@ public class IceServiceImpl implements IIceService {
}
return fileService.outputFile(response, System.currentTimeMillis() + String.valueOf(loanId) +"settle.pdf", result);
}
/**
* 用户提现信息查询
* @param applyOrderQuery
* @return
*/
@Override
public JsonResult<ApplyOrder> findUserCashApplyOrders(ApplyOrderQuery applyOrderQuery) {
JsonResult<ApplyOrder> jsonResult = new JsonResult<>();
try {
String logPre = "IceService.findUserCashApplyOrders";
log.info("{} 申请订单查询 applyOrderQuery={}", logPre, applyOrderQuery);
Long userId = applyOrderQuery.getUserId();
UserOrders userOrders = queryUserCashApplyOrders(userId+"");
ObjectMapper mapper = new ObjectMapper();
String result = mapper.writeValueAsString(userOrders);
TypeReference<JsonResult<ApplyOrder>> typeToken = new TypeReference<JsonResult<ApplyOrder>>() {
};
jsonResult = JSONTools.deserialize(result, typeToken);
return jsonResult;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return jsonResult;
}
/**
* 用户提现信息查询
* @param userId
* @return
*/
private UserOrders queryUserCashApplyOrders(String userId){
log.info("[客服系统] 用户申请订单查询, userId:{},userId");
UserOrders orders = new UserOrders();
List<LoanOrderVo> voList = new ArrayList<>();
List<LoanOrderVo> voList1 = new ArrayList<>();
List<XyqbLoanApplicationHistory> activedOldOrder = null;
if (StringUtils.isNotBlank(userId)) {
// 查询出18年迁移前的出老订单.
activedOldOrder = loanApplicationHistoryService.findActivedOldOrder(userId);
}
int i = 1;
if (org.springframework.util.CollectionUtils.isEmpty(activedOldOrder)) {
orders.setActiveOrders(voList);
orders.setInvalidOrders(voList1);
return orders;
}
if (!org.springframework.util.CollectionUtils.isEmpty(activedOldOrder)) {
for (XyqbLoanApplicationHistory loan : activedOldOrder) {
LoanOrderVo lo = buildOldLoan(loan);
lo.setNum(i);
voList.add(lo);
i++;
}
}
voList1.sort((o1, o2) -> o2.getUpdateAt().compareTo(o1.getUpdateAt()));
voList.sort((o1, o2) -> o2.getUpdateAt().compareTo(o1.getUpdateAt()));
orders.setInvalidOrders(voList1);
orders.setActiveOrders(voList);
return orders;
}
private LoanOrderVo buildOldLoan(XyqbLoanApplicationHistory loan) {
LoanOrderVo lo = new LoanOrderVo();
XyqbLoanApplicationManifestHistory manifest = manifestHistoryService.findByLoanApplicationHistoryId(loan.getId());
List<XyqbRepaymentPlan> plans = repaymentPlanService.findByLoanApplicationHistoryId(loan.getId());
lo.setAmount(manifest.getContractLoanAmount());
if (loan.getActive()) {
lo.setLoanStatus(StatusMap.mapLoanStatus(LoanProgress.CHECK_REPAYMENT_PLAN));
} else {
lo.setLoanStatus(StatusMap.mapLoanStatus(LoanProgress.LOAN_COMPLETE));
}
lo.setApplyStatus(StatusMap.DEFAULT_STATUS);
lo.setPaidAt(manifest.getLoanPaidAt());
if (!org.springframework.util.CollectionUtils.isEmpty(plans)) {
lo.setTermRepayment(plans.get(0).getRequiredRepayment());
} else {
lo.setTermRepayment(manifest.getPrincipalAndInterestPerTerm());
}
lo.setApplyAt(loan.getCreatedAt());
lo.setApplyOrderNo(String.valueOf(loan.getId()));
lo.setShowBtn(true);
lo.setLoanId(loan.getId());
String channelName = fundingCorpRepository.findChannelName(loan.getCreatedFrom());
lo.setChannelName(channelName == null ? loan.getCreatedFrom().toString() : channelName.concat("(").concat(loan.getCreatedFrom().toString()).concat(")"));
lo.setUserId(loan.getUserId());
lo.setProductDesc(BusinessType.CASH.getDesc());
lo.setUpdateAt(manifest.getCreatedAt());
return lo;
}
}
......@@ -745,4 +745,93 @@ public class UserServiceImpl implements IUserService {
}
}
/**
* 用户提现信息查询
* @param userCombinationParam
* @return
*/
@Override
public JsonResult findUserCashCombination(UserCombinationParam userCombinationParam) {
String logPre = "UserServiceImpl.findUserLoanCombination";
log.info("{},综合查询 findUserLoanCombination={}", logPre, userCombinationParam);
Tuple<Boolean, String> tuple = validate(userCombinationParam);
if (!tuple.getKey()) {
log.error("{},参数验证失败,{}", logPre, tuple.getValue());
return JsonResult.buildErrorStateResult(tuple.getValue(), null);
}
JsonResult<UserBasicInfo> userInfo;
JsonResult<ApplyOrder> applyOrder;
//用户参数查询
UserQueryParam userQueryParam = new UserQueryParam();
userQueryParam.setUserId(userCombinationParam.getUserId());
userInfo = this.findUserInfo(userQueryParam);
if (!userInfo.isSuccess()) {
log.error("{} 查询用户失败 result={}", logPre, userInfo);
return userInfo;
}
userQueryParam.setUserId(userInfo.getData().getUserId());
applyOrder = this.findUserCashApplyOrders(userQueryParam);
if (!applyOrder.isSuccess()) {
log.error("{} 查询申请订单失败 result={}", logPre, applyOrder);
return applyOrder;
}
List<ActiveApplyOrder> activeApplyOrders = applyOrder.getData().getActiveOrders();
List<ActiveApplyOrder> invalidApplyOrders = applyOrder.getData().getInvalidOrders();
if (CollectionUtils.isNotEmpty(activeApplyOrders)) {
//通过申请订单号获得渠道订单号
List<String> applyOrderNoList = activeApplyOrders.stream().map(e -> e.getApplyOrderNo()).distinct().collect(Collectors.toList());
JsonResult<Map<String, String>> mapJsonResult = kaService.findChannelOrderNosByApplyOrderNos(applyOrderNoList);
if (mapJsonResult.isSuccess()) {
Map<String, String> data = mapJsonResult.getData();
activeApplyOrders.forEach(e -> e.setChannelOrderNo(data.get(e.getApplyOrderNo())));
}
// 添加能否申请结清证明
JsonResult<List<SettleStatus>> settleFlagResult = null;
if (CollectionUtils.isNotEmpty(activeApplyOrders)) {
settleFlagResult = iceService.findSettleFlag(activeApplyOrders.stream().filter(it-> it.getLoanId() != null).map(ActiveApplyOrder::getLoanId).collect(Collectors.toList()));
}
if (settleFlagResult != null && settleFlagResult.isCodeSuccess()) {
for (ActiveApplyOrder activeOrder : activeApplyOrders) {
for (SettleStatus settleStatus : settleFlagResult.getData()) {
if(settleStatus.getLoanId().equals(activeOrder.getLoanId())) {
activeOrder.setSettleFlag(settleStatus.getProofProgress());
}
}
}
}
}
if (CollectionUtils.isNotEmpty(invalidApplyOrders)) {
//通过申请订单号获得渠道订单号
List<String> applyOrderNoList = invalidApplyOrders.stream().map(e -> e.getApplyOrderNo()).distinct().collect(Collectors.toList());
JsonResult<Map<String, String>> mapJsonResult = kaService.findChannelOrderNosByApplyOrderNos(applyOrderNoList);
if (mapJsonResult.isSuccess()) {
Map<String, String> data = mapJsonResult.getData();
invalidApplyOrders.forEach(e -> e.setChannelOrderNo(data.get(e.getApplyOrderNo())));
}
}
UserBasicInfo userBasicInfo = userInfo.getData();
UserCombination userCombination = new UserCombination();
userCombination.setUserInfo(userBasicInfo);
userCombination.setApplyOrder(applyOrder.getData());
return JsonResult.buildSuccessResult("", userCombination);
}
//用户提现信息查询
private JsonResult<ApplyOrder>findUserCashApplyOrders(UserQueryParam userQueryParam) {
String logPre = "UserServiceImpl.findUserCashApplyOrders";
log.info("{} 通过用户参数查询申请订单 userQueryParam={}", logPre, userQueryParam);
ApplyOrderQuery applyOrderQuery = new ApplyOrderQuery();
applyOrderQuery.setUserId(userQueryParam.getUserId());
//todo 替换中台接口
JsonResult<ApplyOrder> applyOrders = iceService.findUserCashApplyOrders(applyOrderQuery);
return applyOrders;
}
}
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