周期性转账、基金购买、定投
周期性汇款說明:
a. 将按照客户预约当天上午九点进行转账,若当次转账失败,此次转账记录失败次数,不再进行相应的汇款。
b. 预约日期不受节假日影响,仅受当月天数影响,如预约31日汇款,当月最后一天(有31日,则31日汇款,无则在2月28日或29日,或30日)进行汇款。
c. 手续费、转账金额预先扣减(收款人收到款项之前,汇款单创建即扣减),使用此业务时请保证账户内资金充足!
d. 如涉及手续费调整,则按汇款时的手续费进行收费。
jpa查询满足条件的周期性汇款单
public Specification<Booking> getBookingSpecification() {
return (root, query, builder) -> {
List<Predicate> predicates = new ArrayList<>();
predicates.add(builder.equal(root.get("status"), 1));
Date start = new Date();
int dayOfMonth = DateUtil.getDay(start);
int lastDayOfMonth = DateUtil.getLastDayOfMonthByDate(start);
List<Integer> days = new ArrayList<>();
boolean oneDay = false;
if (lastDayOfMonth == dayOfMonth && lastDayOfMonth == 28) {
days = Arrays.asList(28, 29, 30, 31);
} else if (lastDayOfMonth == dayOfMonth && lastDayOfMonth == 29) {
days = Arrays.asList(29, 30, 31);
} else if (lastDayOfMonth == dayOfMonth && lastDayOfMonth == 30) {
days = Arrays.asList(30, 31);
} else {
oneDay = true;
days = Arrays.asList(dayOfMonth);
}
String startDate = DateUtil.formatTime(start).substring(0, 10);
cn.hutool.core.date.DateUtil.parse(startDate, "yyyy-MM-dd");
if (oneDay) {
predicates.add(builder.or(builder.equal(root.get("dayOfMonth"), dayOfMonth),
builder.equal(root.get("firstTransferDate"), cn.hutool.core.date.DateUtil.parse(startDate, "yyyy-MM-dd"))));
} else {
predicates.add(builder.or(root.get("dayOfMonth").in(days),
builder.equal(root.get("firstTransferDate"), cn.hutool.core.date.DateUtil.parse(startDate, "yyyy-MM-dd"))));
}
Predicate[] p = new Predicate[predicates.size()];
return builder.and(predicates.toArray(p));
};
}
收款人管理
添加收款人
校验用户信息(额度已开通,身份证信息验证)、银行卡校验(银联三要素) --> 查询流水表,获取汇款人进件流水号 --> 组装收款人进件信息 --> 进件成功,记录流水 --> 添加收款账户、记录成功日志 --> 若银联接口进件失败,记录失败日志请求记录及失败原因
删除收款人
校验用户是否有预约单未完结、汇款单是否尚未完结 --> 调用银联接口删除 --> 银联处理OK --> 查询银行卡进件流水信息,删除进件记录、收款人 、记录删除日志 --> 若是默认账户删除,查询最近添加的账户,存在设为新的默认
设为默认账户
见代码逻辑
public void recommendPayee(CifNoAndIdReq req) {
int count = this.iPayeeRepository.countByCifNo(req.getCifNo());
if (count >= 2) {
Payee entity = this.iPayeeRepository.findByPayeeIdAndCifNo(req.getPayeeId(), req.getCifNo());
if (entity == null) {
throw new CommonException("默認賬戶設置失敗,賬戶不存在");
} else {
Payee recommend = this.iPayeeRepository.findByCifNoAndRecommend(req.getCifNo(), 1);
if (recommend != null) {
if (recommend.getPayeeId() == req.getPayeeId()) {
return;
}
recommend.setRecommend(0);
this.iPayeeRepository.save(recommend);
}
entity.setRecommend(1);
this.iPayeeRepository.save(entity);
}
}
}