package com.nova.sankuai.service.impl;
|
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.json.JSONObject;
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.nova.sankuai.domain.api.aliyunIP.AliyunUtil;
|
import com.nova.sankuai.domain.api.aliyunIP.CustomerIpInfo;
|
import com.nova.sankuai.domain.api.baidu.BaiduDto;
|
import com.nova.sankuai.domain.api.rongyitui.RongYiTuiResponse;
|
import com.nova.sankuai.domain.api.rongyitui.RongYiTuiUtil;
|
import com.nova.sankuai.domain.api.yinsheng.SerialGenerator;
|
import com.nova.sankuai.domain.api.yixin.YXUtil;
|
import com.nova.sankuai.domain.api.zhongan.DuolaiRequest;
|
import com.nova.sankuai.domain.api.zhongan.ZhongAnStatus;
|
import com.nova.sankuai.domain.api.zhongan.ZhongAnUtil;
|
import com.nova.sankuai.domain.dto.*;
|
import com.nova.sankuai.domain.entity.*;
|
import com.nova.sankuai.domain.enums.*;
|
import com.nova.sankuai.domain.enums.capitalInfo.CapitalApprovalResultEnum;
|
import com.nova.sankuai.domain.enums.capitalInfo.CapitalInfoStatusEnum;
|
import com.nova.sankuai.domain.enums.customerinfo.*;
|
import com.nova.sankuai.domain.enums.vipservice.QueueVipTypeEnum;
|
import com.nova.sankuai.domain.enums.vipservice.VipCardTypeEnum;
|
import com.nova.sankuai.domain.vo.Version4FlowPathVo;
|
import com.nova.sankuai.domain.vo.capitalresult.CapitalInfoAppVo;
|
import com.nova.sankuai.domain.vo.customer.CustomerCountVo;
|
import com.nova.sankuai.domain.vo.customer.CustomerDetail;
|
import com.nova.sankuai.domain.vo.customer.CustomerMechanismConfigVo;
|
import com.nova.sankuai.domain.vo.customer.CustomerVo;
|
import com.nova.sankuai.domain.vo.platform.ImportCustomerParameter;
|
import com.nova.sankuai.domain.vo.sysuser.MechanismVo;
|
import com.nova.sankuai.infra.config.CommonException;
|
import com.nova.sankuai.infra.constants.Constants;
|
import com.nova.sankuai.infra.constants.ResultCode;
|
import com.nova.sankuai.infra.mapper.*;
|
import com.nova.sankuai.infra.utils.*;
|
import com.nova.sankuai.security.UserDetail;
|
import com.nova.sankuai.service.*;
|
import io.swagger.models.auth.In;
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import okhttp3.*;
|
import org.apache.commons.lang.StringUtils;
|
import org.jetbrains.annotations.NotNull;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.IOException;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.ZoneId;
|
import java.util.*;
|
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.Executors;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author weikangdi
|
*/
|
@Service
|
@AllArgsConstructor
|
@Slf4j
|
public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements ICustomerService {
|
|
private SysUserMapper sysUserMapper;
|
|
private CustomerMapper customerMapper;
|
|
private ICityService cityService;
|
|
private ICustomerUserService customerUserService;
|
|
private final MessageSendUtil messageSendUtil;
|
|
private final IDeductionRecordService deductionRecordService;
|
|
private final ICustomerPushRecordService customerPushRecordService;
|
|
private final IApiCompanyService apiCompanyService;
|
|
private final ChannelInfoMapper channelInfoMapper;
|
|
private final ZhongAnUtil zhongAnUtil;
|
|
private final IChannelLogService channelLogService;
|
|
private final RechargeRecordMapper rechargeRecordMapper;
|
|
private final DeductionRecordMapper deductionRecordMapper;
|
|
private final ISyncConfigService syncConfigService;
|
|
private final YXUtil yxUtil;
|
|
private final IVipCardOrderService vipCardOrderService;
|
|
private final IChannelMechanismConfigService channelMechanismConfigService;
|
|
private static final Logger systemLogger = LoggerFactory.getLogger("systemLogger");
|
|
private final AliyunUtil aliyunUtil;
|
|
private final ICustomerCapitalResultService customerCapitalResultService;
|
|
private final RongYiTuiUtil rongYiTuiUtil;
|
|
private final CapitalInfoMapper capitalInfoMapper;
|
|
private final SystemParamMapper systemParamMapper;
|
|
private static final String RISK_URL = "http://bj.e086.net:7070/riskAccount/addRiskCustomerUser";
|
private static final String SC_H5_CHECK_URL = "https://www.zhxyp.com/index/guomei/check";
|
|
private final ICustomerCapitalResultVmService capitalResultVmService;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public String add(Customer customer, String appId) {
|
Integer originSource = customer.getSourceChannel();
|
customer = initAppIdSource(customer, appId);
|
customer = initCustomer(customer);
|
saveOrUpdate(customer);
|
SysUser sysUser = sysUserMapper.selectById(customer.getMechanismId());
|
log.info("新增客户数据:" + customer.toString() + "匹配机构信息" + sysUser.toString());
|
afterSaveCustomer(MechanismVo.parse(sysUser), customer);
|
if (sysUser.getDefaultFlag() != 1) {
|
messageSendUtil.sendNotify(customer.getPhone(), customer.getName(), sysUser.getUserName(), sysUser.getUserPhone(), originSource);
|
}
|
return customer.getId().toString();
|
}
|
|
/**
|
* 保存之前初始化客户数据
|
*
|
* @param customer
|
* @return
|
*/
|
private Customer initCustomer(Customer customer) {
|
customer.setApplyDate(new Date());
|
if (customer.getProvidentFund() == null) {
|
customer.setProvidentFund(ProvidentFundStatusEnum.ProvidentFund_4.getCode());
|
}
|
if (customer.getSocialSecurity() == null) {
|
customer.setSocialSecurity(SocialSecurityStatusEnum.SocialSecurity_4.getCode());
|
}
|
if (customer.getLargeLoanAmount() == null && (customer.getLoanAmount() == null || customer.getLoanAmount() == 0)) {
|
customer.setLoanAmount(Customer.DEFAULT_QUOTA);
|
}
|
if (customer.getLoanTerm() == null) {
|
customer.setLoanTerm(Customer.DEFAULT_TERM);
|
}
|
if (StringUtils.isEmpty(customer.getCityName())) {
|
City city = cityService.lambdaQuery().eq(City::getCityId, customer.getCity()).one();
|
if (city != null) {
|
customer.setCityName(city.getName());
|
}
|
}
|
if (customer.getMonthlyIncome() != null && customer.getFamilyMonthlyIncome() == null) {
|
String amount = MonthlyIncomeEnum.parseAmount(customer.getMonthlyIncome());
|
customer.setFamilyMonthlyIncome(Double.valueOf(amount));
|
}
|
return customer;
|
}
|
|
private Customer initAppIdSource(Customer customer, String appId) {
|
ChannelInfo channelInfo = getChannelInfoByAppId(appId);
|
if (channelInfo == null) {
|
log.error("渠道Id非法:APPid值:" + appId + "原始客户数据:" + customer.toString());
|
throw new CommonException("渠道id非法");
|
}
|
CustomerUser customerUser = customerUserService.lambdaQuery().eq(CustomerUser::getPhone, customer.getPhone()).one();
|
if (customerUser != null) {
|
customer.setSourceChannel(customerUser.getSourceChannel());
|
log.info("保存渠道Id客户开始:使用用户注册的渠道值,用户注册渠道Code:" + customerUser.getSourceChannel() + "本次提交使用的渠道APPId:" + appId);
|
} else {
|
log.info("保存渠道Id客户开始:使用链接的APPid值:" + appId + "原始客户数据:" + customer.toString());
|
customer.setSourceChannel(channelInfo.getCode());
|
}
|
return customer;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public CustomerMechanismConfigVo addLargeCustomer(Customer customer, String code, String appId) {
|
if (!Constants.SANDBOX_KEY.equals(appId)) {
|
MessageCodeUtil.checkCode(customer.getPhone(), code);
|
}
|
customer = initAppIdSource(customer, appId);
|
Customer saveCustomer = saveCustomer(customer);
|
CustomerMechanismConfigVo configVo = sysUserMapper.selectMechanismConfig(saveCustomer.getMechanismId());
|
configVo.setCustomerId(saveCustomer.getId());
|
return configVo;
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
public Customer saveCustomer(Customer customer) {
|
customer = initCustomer(customer);
|
CustomerCompareDto parse = CustomerCompareDto.parse(customer);
|
MechanismVo sysUser = searchMatchMechanism(parse);
|
customer.setMechanismId(sysUser.getId());
|
save(customer);
|
log.info("新增客户数据:" + customer.toString() + "匹配机构信息" + sysUser.toString());
|
afterSaveCustomer(sysUser, customer);
|
return customer;
|
}
|
|
/**
|
* 标注:保存客户之后的操作,联登
|
*
|
* @param sysUser
|
* @param customer
|
*/
|
private void afterSaveCustomer(MechanismVo sysUser, Customer customer) {
|
//注册客户信息
|
customerUserService.registerUserByCustomer(customer);
|
//新增扣款记录和客户推送记录
|
// createRechargeRecordLog(sysUser, customer);
|
// 异步进行审批分流推送和数据同步
|
/*ExecutorService executor = Executors.newFixedThreadPool(1);
|
CompletableFuture.supplyAsync(() -> {
|
// 标注:推送客户到接口公司 联登
|
apiCompanyService.pushCustomer(customer);
|
//根据数据同步配置同步数据
|
syncConfigService.syncData(customer);
|
return true;
|
}, executor);*/
|
}
|
|
/**
|
* 新增扣款记录和客户推送记录
|
*
|
* @param sysUser
|
* @param customer
|
*/
|
private void createRechargeRecordLog(MechanismVo sysUser, Customer customer) {
|
if (sysUser.getDefaultFlag() != null && sysUser.getDefaultFlag() == 0) {
|
Long recordId = deductionRecordService.createRecord(customer.getId(), sysUser.getId(), RechargeRecord.STATUS_NORMAL, null, sysUser.getSingleCustomerPrice());
|
customerPushRecordService.createRecord(customer.getId(), sysUser.getId(), recordId, CustomerPushRecord.STATUS_NORMAL, null);
|
}
|
}
|
|
@Override
|
public Customer calculate(Customer customer) {
|
CustomerCompareDto parse = CustomerCompareDto.parse(customer);
|
MechanismVo sysUser = searchMatchMechanism(parse);
|
customer.setMechanismId(sysUser.getId());
|
customer.setMechanismName(sysUser.getCompanyName());
|
return customer;
|
}
|
|
@Override
|
public IPage<CustomerVo> page(CustomerPageDto customerPageDto, PageRequest pageRequest) {
|
Page<Customer> page = new Page<>(pageRequest.getPageNo(), pageRequest.getPageSize());
|
IPage<CustomerVo> result = customerMapper.pageModel(page, customerPageDto);
|
return result;
|
}
|
|
@Override
|
public CustomerDetail getCustomerDetail(Long id) {
|
Customer customer = getById(id);
|
if (customer == null) {
|
throw new CommonException("该客户不存在");
|
}
|
CustomerDetail detail = new CustomerDetail();
|
BeanUtils.copyProperties(customer, detail);
|
if (StringUtils.isEmpty(customer.getCityName())) {
|
City city = cityService.lambdaQuery().eq(City::getCityId, customer.getCity()).one();
|
if (city != null) {
|
detail.setCityName(city.getName());
|
}
|
}
|
detail.setIdCard(null);
|
detail.setIdCardBackPath(null);
|
detail.setIdCardFrontPath(null);
|
detail.setProfessionInfo(ProfessionInfoEnum.value(customer.getProfessionInfo()));
|
detail.setSesame(SesameStatusEnum.value(customer.getSesame()));
|
detail.setSocialSecurity(SocialSecurityStatusEnum.value(customer.getSocialSecurity()));
|
detail.setProvidentFund(ProvidentFundStatusEnum.value(customer.getProvidentFund()));
|
detail.setHouseStatus(HouseStatusEnum.value(customer.getHouseStatus()));
|
detail.setCarStatus(CarStatusEnum.value(customer.getCarStatus()));
|
detail.setInsurancePolicy(InsuranceStatusEnum.value(customer.getInsurancePolicy()));
|
detail.setCreditCard(CreditCardStatusEnum.value(customer.getCreditCard()));
|
detail.setEducation(EducationEnum.value(customer.getEducation()));
|
detail.setUseOfLoan(UseOfLoanEnum.value(customer.getUseOfLoan()));
|
detail.setMonthlyIncome(MonthlyIncomeEnum.value(customer.getMonthlyIncome()));
|
detail.setLargeLoanAmount(LargeLoanAmountEnum.value(customer.getLargeLoanAmount()));
|
detail.setEnterpriseInfo(EnterpriseInfoEnum.value(customer.getEnterpriseInfo()));
|
detail.setMaritalStatus(MaritalStatusEnum.value(customer.getMaritalStatus()));
|
detail.setPayrollAgency(PayrollAgencyEnum.value(customer.getPayrollAgency()));
|
detail.setWorkStatus(WorkStatusEnum.value(customer.getWorkStatus()));
|
detail.setSourceName(SourceTypeEnum.value(customer.getSourceChannel()));
|
detail.setMicroLoan(MicroLoanEnum.value(customer.getMicroLoan()));
|
if (HouseStatusEnum.House_4.getCode().equals(customer.getHouseStatus())) {
|
String houseDetail = "";
|
if (customer.getHouseAttributes() != null) {
|
houseDetail = houseDetail + HouseAttributesEnum.value(customer.getHouseAttributes());
|
}
|
if (customer.getHousePayment() != null) {
|
houseDetail = houseDetail != null ? houseDetail + "," : houseDetail;
|
houseDetail = houseDetail + HousePaymentEnum.value(customer.getHousePayment());
|
}
|
if (StringUtils.isNotBlank(houseDetail)) {
|
detail.setHouseStatus(detail.getHouseStatus() + "(" + houseDetail + ")");
|
}
|
}
|
return detail;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public MechanismVo searchMatchMechanism(CustomerCompareDto parse) {
|
List<MechanismVo> sysUsers = new ArrayList<>();
|
City city = cityService.lambdaQuery().eq(City::getCityId, parse.getCity()).one();
|
if (city != null) {
|
parse.setProvince(city.getProvinceId());
|
sysUsers = sysUserMapper.selectMechanism(parse);
|
log.info("原始机构匹配信息:" + sysUsers.toString());
|
} else {
|
log.info("机构匹配逻辑警告:客户的城市信息为空");
|
}
|
MechanismVo sysUserResult = null;
|
//根据机构渠道配置进行筛选
|
sysUsers = filterMechanismByChannel(sysUsers, parse.getSourceChannel());
|
//根据机构最低贷款额度筛选
|
sysUsers = filterMechanismQuota(sysUsers, parse.getQuota());
|
//筛选还未到当日上限的机构
|
sysUsers = filterMechanismLimit(sysUsers);
|
//根据机构年龄进行筛选
|
sysUsers = filterMechanismAge(sysUsers, parse.getAge());
|
//计算匹配属性最多的机构列表
|
sysUsers = getMaxMatchMechanismList(sysUsers, parse);
|
if (sysUsers != null && sysUsers.size() > 0) {
|
if (sysUsers.size() > 1) {
|
//根据当日占客比分配机构
|
sysUserResult = getPercentageMechanism(sysUsers);
|
} else {
|
sysUserResult = sysUsers.get(0);
|
}
|
}
|
if (sysUserResult == null) {
|
sysUserResult = sysUserMapper.selectDefaultMechanism();
|
}
|
return sysUserResult;
|
}
|
|
/**
|
* 根据机构渠道配置进行筛选
|
*
|
* @param sysUsers
|
* @param sourceChannel
|
* @return
|
*/
|
private List<MechanismVo> filterMechanismByChannel(List<MechanismVo> sysUsers, Integer sourceChannel) {
|
if (sysUsers != null && sysUsers.size() > 0) {
|
ChannelInfo channelInfo = channelInfoMapper.getChannelByCode(sourceChannel);
|
List<MechanismVo> result = new ArrayList<>();
|
for (MechanismVo sysUser : sysUsers) {
|
List<Long> channelIds = channelMechanismConfigService.getChannelsByMechanismId(sysUser.getId());
|
if (CollectionUtils.isEmpty(channelIds) || channelIds.contains(channelInfo.getId())) {
|
result.add(sysUser);
|
}
|
}
|
return result;
|
}
|
return null;
|
}
|
|
/**
|
* 根据机构最低贷款额度筛选
|
*
|
* @param sysUsers
|
* @param quota
|
* @return
|
*/
|
private List<MechanismVo> filterMechanismQuota(List<MechanismVo> sysUsers, Integer quota) {
|
if (sysUsers != null && sysUsers.size() > 0) {
|
List<MechanismVo> result = new ArrayList<>();
|
for (MechanismVo sysUser : sysUsers) {
|
if (sysUser.getMinLoanAmount() != null && (quota == null || quota < sysUser.getMinLoanAmount())) {
|
continue;
|
}
|
result.add(sysUser);
|
}
|
return result;
|
}
|
return null;
|
}
|
|
/**
|
* 筛选还未到当日上限的机构
|
*
|
* @param sysUsers
|
*/
|
private List<MechanismVo> filterMechanismLimit(List<MechanismVo> sysUsers) {
|
if (sysUsers != null && sysUsers.size() > 0) {
|
List<MechanismVo> result = new ArrayList<>();
|
List<Long> ids = sysUsers.stream().map(MechanismVo::getId).collect(Collectors.toList());
|
Date beginOfDay = DateUtil.beginOfDay(new Date());
|
Date endOfDay = DateUtil.endOfDay(new Date());
|
Map<Long, Integer> countMapOfDay = CustomerCountVo.parseMap(customerMapper.getCustomersOfDay(ids, beginOfDay, endOfDay));
|
for (MechanismVo sysUser : sysUsers) {
|
Integer countDay = countMapOfDay.get(sysUser.getId());
|
boolean upperLimit = checkMechanismDailyUpperLimit(sysUser, countDay);
|
boolean balance = checkMechanismBalance(sysUser);
|
if (upperLimit && balance) {
|
result.add(sysUser);
|
}
|
}
|
return result;
|
}
|
return null;
|
}
|
|
/**
|
* 根据当日占客比分配机构
|
*
|
* @param userList
|
* @return
|
*/
|
private MechanismVo getPercentageMechanism(List<MechanismVo> userList) {
|
if (userList != null && userList.size() > 0) {
|
if (userList.size() == 1) {
|
return userList.get(0);
|
}
|
List<Long> list = userList.stream().map(MechanismVo::getId).collect(Collectors.toList());
|
Date beginOfDay = DateUtil.beginOfDay(new Date());
|
Date endOfDay = DateUtil.endOfDay(new Date());
|
List<CustomerCountVo> customers = customerMapper.getCustomersOfDay(list, beginOfDay, endOfDay);
|
if (customers == null || customers.isEmpty()) {
|
return userList.stream().max(Comparator.comparingInt(MechanismVo::getPercentageOfCustomers)).get();
|
}
|
int customerSum = customers.stream().mapToInt(CustomerCountVo::getCount).sum();
|
int percentSum = userList.stream().mapToInt(MechanismVo::getPercentageOfCustomers).sum();
|
Map<Long, Integer> map = CustomerCountVo.parseMap(customers);
|
for (MechanismVo sysUser : userList) {
|
long count = map.get(sysUser.getId()) != null ? map.get(sysUser.getId()) : 0;
|
double num1 = (double) count / customerSum;
|
double num2 = (double) sysUser.getPercentageOfCustomers() / percentSum;
|
if (num1 > num2) {
|
} else {
|
return sysUser;
|
}
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 获取匹配属性最多的机构列表
|
*
|
* @param sysUsers
|
* @param parse
|
* @return
|
*/
|
private List<MechanismVo> getMaxMatchMechanismList(List<MechanismVo> sysUsers, CustomerCompareDto parse) {
|
if (sysUsers != null && sysUsers.size() > 1) {
|
Integer matchMax = 0;
|
Double price = sysUsers.get(0).getSingleCustomerPrice();
|
Map<Integer, List<MechanismVo>> userMap = new HashMap<>();
|
for (MechanismVo sysUser : sysUsers) {
|
if (!price.equals(sysUser.getSingleCustomerPrice())) {
|
break;
|
} else {
|
Integer matchCount = getMatchCount(sysUser, parse);
|
if (matchCount > matchMax) {
|
matchMax = matchCount;
|
userMap.put(matchCount, new ArrayList<MechanismVo>() {{
|
add(sysUser);
|
}});
|
} else if (matchMax.equals(matchCount)) {
|
List<MechanismVo> userList = userMap.get(matchCount);
|
userList.add(sysUser);
|
userMap.put(matchCount, userList);
|
}
|
}
|
}
|
return userMap.get(matchMax);
|
}
|
return sysUsers;
|
}
|
|
private Integer getMatchCount(MechanismVo sysUser, CustomerCompareDto parse) {
|
Integer match = 0;
|
if (StringUtils.isNotBlank(sysUser.getProfessionInfo())
|
&& parse.getProfessionInfo() != null
|
&& sysUser.getProfessionInfo().contains(parse.getProfessionInfo().toString())) {
|
match++;
|
}
|
if (StringUtils.isNotBlank(sysUser.getProductAttributes())) {
|
if (parse.isSesame() && sysUser.getProductAttributes().contains(ProductAttributesEnum.SESAME.getCode().toString())) {
|
match++;
|
}
|
if (parse.isSocialSecurity() && sysUser.getProductAttributes().contains(ProductAttributesEnum.SOCIAL_SECURITY.getCode().toString())) {
|
match++;
|
}
|
if (parse.isProvidentFund() && sysUser.getProductAttributes().contains(ProductAttributesEnum.PROVIDENT_FUND.getCode().toString())) {
|
match++;
|
}
|
if (parse.isHouseStatus() && sysUser.getProductAttributes().contains(ProductAttributesEnum.HOUSE.getCode().toString())) {
|
match++;
|
}
|
if (parse.isCarStatus() && sysUser.getProductAttributes().contains(ProductAttributesEnum.CAR.getCode().toString())) {
|
match++;
|
}
|
if (parse.isInsurancePolicy() && sysUser.getProductAttributes().contains(ProductAttributesEnum.BUSINESS_INSURANCE.getCode().toString())) {
|
match++;
|
}
|
if (parse.isCreditCard() && sysUser.getProductAttributes().contains(ProductAttributesEnum.CREDIT_CARD.getCode().toString())) {
|
match++;
|
}
|
}
|
return match;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Customer addBaiDuCustomer(BaiduDto dto) {
|
Customer customer = new Customer();
|
customer.setAge(parseAge(dto.getInput()));
|
customer.setName(dto.getName());
|
customer.setApplyDate(new Date());
|
customer.setPhone(dto.getPhone());
|
customer.setInsurancePolicy(dto.getCheckbox().contains("保单") ?
|
InsuranceStatusEnum.BusinessInsurance_6.getCode() : InsuranceStatusEnum.BusinessInsurance_1.getCode());
|
customer.setProvidentFund(dto.getCheckbox().contains("公积金") ?
|
ProvidentFundStatusEnum.ProvidentFund_4.getCode() : ProvidentFundStatusEnum.ProvidentFund_1.getCode());
|
customer.setCarStatus(dto.getCheckbox().contains("有车") ?
|
CarStatusEnum.Car_4.getCode() : CarStatusEnum.Car_1.getCode());
|
customer.setEnterpriseInfo(dto.getCheckbox().contains("企业") ?
|
EnterpriseInfoEnum.Enterprise_2.getCode() : EnterpriseInfoEnum.Enterprise_1.getCode());
|
customer.setPayrollAgency(dto.getCheckbox().contains("工资代发") ?
|
PayrollAgencyEnum.PayrollAgency_2.getCode() : PayrollAgencyEnum.PayrollAgency_1.getCode());
|
customer.setWorkStatus(dto.getCheckbox().contains("工作") ?
|
WorkStatusEnum.WorkStatus_2.getCode() : WorkStatusEnum.WorkStatus_1.getCode());
|
customer.setCreditCard(dto.getCheckbox().contains("信用卡") ?
|
CreditCardStatusEnum.CreditCard_2.getCode() : CreditCardStatusEnum.CreditCard_1.getCode());
|
customer.setSocialSecurity(dto.getCheckbox().contains("社保") ?
|
SocialSecurityStatusEnum.SocialSecurity_4.getCode() : SocialSecurityStatusEnum.SocialSecurity_1.getCode());
|
boolean house = dto.getCheckbox().contains("有房");
|
customer.setHouseStatus(house ?
|
HouseStatusEnum.House_4.getCode() : HouseStatusEnum.House_1.getCode());
|
if (house) {
|
if (dto.getCheckbox().contains("本地房")) {
|
customer.setHouseAttributes(HouseAttributesEnum.HouseAttributes_2.getCode());
|
} else if (dto.getCheckbox().contains("外地房")) {
|
customer.setHouseAttributes(HouseAttributesEnum.HouseAttributes_3.getCode());
|
}
|
if (dto.getCheckbox().contains("按揭房")) {
|
customer.setHousePayment(HousePaymentEnum.HousePayment_2.getCode());
|
} else if (dto.getCheckbox().contains("全款房")) {
|
customer.setHousePayment(HousePaymentEnum.HousePayment_3.getCode());
|
}
|
}
|
String s = dto.getRadio();
|
customer.setLargeLoanAmount(LargeLoanAmountEnum.code(s));
|
customer.setMicroLoan(MicroLoanEnum.MicroLoanEnum_2.getCode());
|
City one = cityService.getOne(new LambdaQueryWrapper<City>().like(City::getName, dto.getCity().split(" ")[1]));
|
if (one != null) {
|
customer.setCity(one.getCityId());
|
customer.setCityName(one.getName());
|
}
|
customer.setSourceChannel(SourceTypeEnum.BaiDu.getCode());
|
Customer customerDb = saveCustomer(customer);
|
return customerDb;
|
}
|
|
private Integer parseAge(String input) {
|
String regEx = "[^0-9]";
|
Pattern p = Pattern.compile(regEx);
|
Matcher m = p.matcher(input);
|
String trim = m.replaceAll("").trim();
|
String reg = "^120$|^[1-9]$|^(1[0-1]|[1-9])\\d$";
|
boolean result = Pattern.compile(reg).matcher(trim).find();
|
if (result) {
|
return Integer.parseInt(trim);
|
} else {
|
return 30;
|
}
|
}
|
|
@Override
|
public void aizhudaiCustomImport(ImportCustomerParameter parameter) {
|
String appId = parameter.getAppid();
|
ChannelInfo channelInfo = channelInfoMapper.getChannelByAppId(appId);
|
if (channelInfo == null) {
|
log.error("渠道Id非法,渠道值" + appId);
|
throw new CommonException("渠道id非法");
|
}
|
if (Constants.ENABLE != channelInfo.getStatus()) {
|
log.error("渠道已被禁用,渠道值" + appId + "客户信息" + parameter);
|
throw new CommonException("渠道已被禁用");
|
}
|
Customer customer = new Customer();
|
BeanUtils.copyProperties(parameter, customer);
|
customer.setSourceChannel(channelInfo.getCode());
|
initCustomer(customer);
|
MechanismVo sysUser = sysUserMapper.selectDefaultMechanism();
|
customer.setMechanismId(sysUser.getId());
|
log.info("爱助贷模式推送数据:客户数据:" + customer.toString() + "匹配机构信息" + sysUser.toString());
|
//无痕推送客户到接口公司
|
apiCompanyService.pushCustomerNoTrace(customer);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void importCustomerFromPlatform(ImportCustomerParameter parameter) {
|
String appId = parameter.getAppid();
|
// 检查appId是否合法(后续引入redis,可以先从redis中查找数据,找不到再去数据库查)
|
ChannelInfo channelInfo = channelInfoMapper.getChannelByAppId(appId);
|
if (channelInfo == null) {
|
log.error("渠道Id非法,渠道值" + appId);
|
throw new CommonException("渠道id非法");
|
}
|
if (Constants.ENABLE != channelInfo.getStatus()) {
|
log.error("渠道已被禁用,渠道值" + appId + "客户信息" + parameter.toString());
|
throw new CommonException("渠道已被禁用");
|
}
|
Customer customer = new Customer();
|
BeanUtils.copyProperties(parameter, customer);
|
customer.setSourceChannel(channelInfo.getCode());
|
if (parameter.getBusinessType() != null && parameter.getBusinessType() == 1) {
|
customer = initCustomer(customer);
|
MechanismVo sysUser = sysUserMapper.selectDefaultMechanism();
|
customer.setMechanismId(sysUser.getId());
|
log.info("审批分流无痕模式:客户数据:" + customer.toString() + "匹配机构信息" + sysUser.toString());
|
//无痕推送客户到接口公司
|
apiCompanyService.pushCustomerNoTrace(customer);
|
} else {
|
saveCustomer(customer);
|
}
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public Map<String, Object> addZhonganCustomer(DuolaiRequest request) {
|
Map<String, Object> resp = null;
|
Customer customer = null;
|
try {
|
customer = zhongAnUtil.buildZhongAnCustomer(request);
|
customer.setSourceChannel(SourceTypeEnum.ZhongAn.getCode());
|
resp = zhongAnUtil.buildZhonganResp(request, ZhongAnStatus.STATUS_3.getCode(), null, null);
|
zhongAnUtil.callback(request, ZhongAnStatus.STATUS_3.getCode(), customer.getLoanAmount());
|
} catch (Exception e) {
|
channelLogService.createImportLog(SourceTypeEnum.ZhongAn.getCode(), ChannelLog.FAIL, null, request.toString());
|
log.error("众安授信申请失败:{}", e.getMessage());
|
resp = zhongAnUtil.buildZhonganResp(request, ZhongAnStatus.STATUS_2.getCode(), ResultCode.SERVER_ERROR.getCode() + "", "用户端宏观错误");
|
zhongAnUtil.callback(request, ZhongAnStatus.STATUS_2.getCode(), 0.0);
|
}
|
if (customer != null) {
|
Customer saveCustomer = saveCustomer(customer);
|
channelLogService.createImportLog(SourceTypeEnum.ZhongAn.getCode(), ChannelLog.SUCCESS, saveCustomer.getId(), request.toString());
|
}
|
return resp;
|
}
|
|
@Override
|
public Map<String, Object> selectZhonganCustomerByCardNo(DuolaiRequest request) {
|
try {
|
String cardNo = zhongAnUtil.queryZhonganCustomerCardNo(request).getCertiNo();
|
Customer customer = this.getOne(new LambdaQueryWrapper<Customer>()
|
.eq(Customer::getIdCard, cardNo)
|
.eq(Customer::getSourceChannel, SourceTypeEnum.ZhongAn.getCode()));
|
return zhongAnUtil.buildAvailAmountResp(zhongAnUtil.buildAvailAmountResult(customer, request), null, null);
|
} catch (Exception e) {
|
log.error("众安授信用户额度查询失败:{}", e.getMessage());
|
return zhongAnUtil.buildAvailAmountResp(null, ResultCode.SERVER_ERROR.getCode() + "", e.getMessage());
|
}
|
}
|
|
private ChannelInfo getChannelInfoByAppId(String appId) {
|
// 检查appId是否合法(后续引入redis,可以先从redis中查找数据,找不到再去数据库查)
|
LambdaQueryWrapper<ChannelInfo> channelInfoWrapper = new LambdaQueryWrapper<>();
|
channelInfoWrapper.eq(ChannelInfo::getAppId, appId);
|
ChannelInfo channelInfo = channelInfoMapper.selectOne(channelInfoWrapper);
|
return channelInfo;
|
}
|
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public void updateMatchMechanism(Long customerId, Long mechanismId) {
|
Customer customer = getById(customerId);
|
if (customer == null) {
|
throw new CommonException("客户不存在");
|
}
|
SysUser sysUser = sysUserMapper.selectById(mechanismId);
|
if (sysUser == null) {
|
throw new CommonException("机构不存在");
|
}
|
customer.setMechanismId(mechanismId);
|
updateById(customer);
|
if (sysUser.getDefaultFlag() != null && sysUser.getDefaultFlag() == 0) {
|
Long recordId = deductionRecordService.createRecord(customerId, mechanismId, RechargeRecord.STATUS_NORMAL, null, sysUser.getSingleCustomerPrice());
|
customerPushRecordService.createRecord(customer.getId(), sysUser.getId(), recordId, CustomerPushRecord.STATUS_NORMAL, null);
|
}
|
}
|
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public void assignMechanism(Long customerId, Long mechanismId) {
|
Customer customer = getById(customerId);
|
if (customer == null) {
|
throw new CommonException("客户不存在");
|
}
|
SysUser newMechanism = sysUserMapper.selectById(mechanismId);
|
if (newMechanism == null) {
|
throw new CommonException("机构不存在");
|
}
|
SysUser oldMechanism = sysUserMapper.selectById(customer.getMechanismId());
|
customer.setMechanismId(mechanismId);
|
customer.setApplyDate(new Date());
|
updateById(customer);
|
log.info("机构重新分配日志:客户信息" + customer.toString() + "分配前机构:" + oldMechanism.toString() + "分配后机构" + newMechanism.toString());
|
if (Objects.equals(0, oldMechanism.getDefaultFlag())) {
|
CustomerPushRecord pushRecord = customerPushRecordService.lambdaQuery()
|
.eq(CustomerPushRecord::getMechanismId, oldMechanism.getId())
|
.eq(CustomerPushRecord::getCustomerRecordId, customerId)
|
.eq(CustomerPushRecord::getStatus, 0).one();
|
pushRecord.setStatus(CustomerPushRecord.STATUS_INVALID);
|
pushRecord.setMemo("分配被收回");
|
customerPushRecordService.updateById(pushRecord);
|
DeductionRecord deductionRecord = deductionRecordService.getById(pushRecord.getDeductionId());
|
deductionRecord.setStatus(DeductionRecord.STATUS_REFUND);
|
deductionRecord.setMemo("分配被收回");
|
deductionRecordService.updateById(deductionRecord);
|
RechargeRecord rechargeRecord = new RechargeRecord();
|
rechargeRecord.setMechanismId(oldMechanism.getId());
|
rechargeRecord.setCreationDate(new Date());
|
rechargeRecord.setRechargeAmount(deductionRecord.getDeductionAmount());
|
rechargeRecord.setUseAmount(deductionRecord.getDeductionAmount());
|
rechargeRecord.setStatus(RechargeRecord.STATUS_REFUND);
|
rechargeRecord.setMemo("客户分配被收回,退费" + deductionRecord.getDeductionAmount());
|
rechargeRecordMapper.insert(rechargeRecord);
|
}
|
if (Objects.equals(0, newMechanism.getDefaultFlag())) {
|
Long recordId = deductionRecordService.createRecord(customerId, mechanismId, RechargeRecord.STATUS_NORMAL, "分配客户", newMechanism.getSingleCustomerPrice());
|
customerPushRecordService.createRecord(customerId, newMechanism.getId(), recordId, CustomerPushRecord.STATUS_NORMAL, "分配获得");
|
}
|
}
|
|
@Override
|
public Set<String> checkMechanism(Long mechanismId) {
|
Set<String> errorList = new HashSet<>();
|
MechanismVo mechanism = sysUserMapper.selectMechanismById(mechanismId);
|
if (mechanism == null) {
|
throw new CommonException("机构不存在");
|
}
|
if (Objects.equals(1, mechanism.getDefaultFlag())) {
|
return null;
|
}
|
Date beginOfDay = DateUtil.beginOfDay(new Date());
|
Date endOfDay = DateUtil.endOfDay(new Date());
|
CustomerCountVo customerCountVo = customerMapper.getCustomerCount(mechanismId, beginOfDay, endOfDay);
|
Integer countDay = customerCountVo.getCount();
|
boolean upperLimit = checkMechanismDailyUpperLimit(mechanism, countDay);
|
if (!upperLimit) {
|
errorList.add("机构推荐客户已达到每日上限,请谨慎分配");
|
}
|
boolean mechanismBalance = checkMechanismBalance(mechanism);
|
if (!mechanismBalance) {
|
errorList.add("机构可用余额不足,请谨慎分配");
|
}
|
return errorList;
|
}
|
|
/**
|
* 检测机构每日上限是否足够
|
*
|
* @return
|
*/
|
private boolean checkMechanismDailyUpperLimit(MechanismVo mechanism, Integer countDay) {
|
boolean result = true;
|
if (mechanism.getDailyUpperLimit() == null) {
|
result = false;
|
} else if (countDay != null && countDay >= mechanism.getDailyUpperLimit()) {
|
result = false;
|
}
|
return result;
|
}
|
|
/**
|
* 检测机构余额是否足够
|
*
|
* @return
|
*/
|
private boolean checkMechanismBalance(MechanismVo mechanism) {
|
boolean result = true;
|
if (mechanism.getUseAmount() == null) {
|
result = false;
|
} else if (mechanism.getSingleCustomerPrice() != null) {
|
Double expendAmount = deductionRecordMapper.getAllExpendAmount(mechanism.getId());
|
double availableAmount = mechanism.getUseAmount() - expendAmount;
|
if (mechanism.getSingleCustomerPrice() > availableAmount) {
|
result = false;
|
}
|
}
|
return result;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void addBlankVisitRecord(BlankCustomerVisitDto visitDto) {
|
ChannelInfo channelInfo = channelInfoMapper.getChannelByAppId(visitDto.getAppId());
|
if (channelInfo == null) {
|
throw new CommonException("该渠道不存在");
|
}
|
if (StringUtils.isEmpty(visitDto.getPhone())) {
|
throw new CommonException("用户手机号不能为空");
|
}
|
Customer customer = new Customer();
|
CustomerUser customerUser = customerUserService.lambdaQuery().eq(CustomerUser::getPhone, visitDto.getPhone()).one();
|
if (customerUser != null) {
|
customer.setSourceChannel(customerUser.getSourceChannel());
|
} else {
|
customer.setSourceChannel(channelInfo.getCode());
|
}
|
customer.setPhone(visitDto.getPhone());
|
customer.setApplyDate(new Date());
|
saveCustomer(customer);
|
channelLogService.createSupermarketLog(visitDto.getLoanMarkId(), channelInfo.getCode(), customer.getId());
|
}
|
|
/**
|
* 标注:保存客户基本资料,撞库开始
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public String appAddBasicInfo(CustomerBaseDto customerBaseDto, String appId, HttpServletRequest request) {
|
//检验用户30天内是否已经存在有效数据
|
Customer customerDb = customerMapper.getLatestCustomerRecord(customerBaseDto.getPhone());
|
DateTime checkDate = DateUtil.offsetDay(new Date(), -Customer.VALID_DAY);
|
if (customerDb != null && customerDb.getApplyDate().after(checkDate)) {
|
systemLogger.error("保存客户基本资料失败,错误:已经存在有效记录,禁止重复提交, 原始数据: {},结果: {},checkDate: {}", customerBaseDto, customerDb, checkDate);
|
throw new CommonException("已经存在有效记录,禁止重复提交");
|
}
|
Customer customer = new Customer();
|
if ("分数为空".equals(customerBaseDto.getVerifySimilarity())) {
|
customerBaseDto.setVerifySimilarity("0");
|
}
|
BeanUtils.copyProperties(customerBaseDto, customer);
|
if (StringUtils.isNotEmpty(customer.getIdCardBackPath())
|
&& StringUtils.isNotEmpty(customer.getIdCardFrontPath())) {
|
if (customer.getIdCardBackPath().length() > 1000 ||
|
customer.getIdCardFrontPath().length() > 1000) {
|
systemLogger.error("保存客户基本资料失败,错误:上传图片路径不合法, 原始数据" + customerBaseDto);
|
throw new CommonException("保存失败:上传图片路径不合法");
|
}
|
if (StringUtils.isNotEmpty(customer.getFacePhotoPath())) {
|
if (customer.getFacePhotoPath().length() > 1000) {
|
systemLogger.error("保存客户基本资料失败,错误:上传图片路径不合法, 原始数据" + customerBaseDto);
|
throw new CommonException("保存失败:上传图片路径不合法");
|
}
|
}
|
if ("长期".equals(customer.getIdValidDateEnd())) {
|
customer.setIdLongTerm("1");
|
}
|
cacuAge(customer);
|
} else {
|
// cacuDefaltAge(customer);
|
cacuAge(customer);
|
}
|
if (StringUtils.isNotEmpty(customer.getIdCard())) {
|
customer.setStatus(CustomerInfoStatusEnum.OCR_INFO.getCode());
|
} else {
|
customer.setStatus(CustomerInfoStatusEnum.BASE_INFO.getCode());
|
}
|
customer = initAppIdSource(customer, appId);
|
|
CustomerIpInfo customerIpInfo = aliyunUtil.getCustomerIpInfo(request, customerBaseDto.getPhone());
|
if (customerIpInfo != null && StringUtils.isNotEmpty(customerIpInfo.getIp())) {
|
customer.setIpAddres(customerIpInfo.getIp());
|
}
|
if (customerIpInfo != null && StringUtils.isNotEmpty(customerIpInfo.getCityName())) {
|
customer.setIpCityRaw(customerIpInfo.getCityName());
|
}
|
if (customerIpInfo != null && StringUtils.isNotEmpty(customerIpInfo.getSysCityId())) {
|
customer.setIpCityMapped(customerIpInfo.getSysCityId());
|
}
|
|
// 标注:联登
|
customer = saveCustomer(customer);
|
|
// 开始虚拟撞库
|
// capitalResultVmService.collisionlibrary(customer);
|
|
vipCardOrderService.updateUserApprovalTime(customer.getPhone(), appId);
|
try {
|
if (CustomerInfoStatusEnum.OCR_INFO.getCode().equals(customer.getStatus())) {
|
Customer customerbyId = customer;
|
ExecutorService executor = Executors.newFixedThreadPool(2);
|
//发送数据到风控系统
|
CompletableFuture.supplyAsync(() -> {
|
SystemParam systemParam = systemParamMapper.selectById(1L);
|
if (Objects.nonNull(systemParam) && Objects.equals(systemParam.getRisk(), 1)) {
|
CustomerUser customerUser = customerUserService.getOne(Wrappers.lambdaQuery(CustomerUser.class).eq(CustomerUser::getPhone, customerbyId.getPhone()));
|
customerUser.setIdCard(customerbyId.getIdCard());
|
customerUser.setName(customerbyId.getName());
|
RiskCustomerUserDto riskCustomerUserDto = new RiskCustomerUserDto();
|
BeanUtils.copyProperties(customerUser, riskCustomerUserDto);
|
BeanUtils.copyProperties(customerbyId, riskCustomerUserDto);
|
log.info("发送数据到风控系统: 参数:{}", JSON.toJSONString(riskCustomerUserDto));
|
OkHttpClient client = new OkHttpClient().newBuilder().build();
|
MediaType mediaType = MediaType.parse("application/json");
|
RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(riskCustomerUserDto));
|
Request req = new Request.Builder().url(RISK_URL).method("POST", body).addHeader("Content-Type", "application/json").build();
|
try {
|
Response execute = client.newCall(req).execute();
|
log.info("请求风控数据:{}", execute.body().string());
|
} catch (IOException e) {
|
e.printStackTrace();
|
log.error("请求风控雷达服务失败,错误信息:", e);
|
}
|
}
|
return true;
|
}, executor);
|
//异步进行资方列表撞库
|
CompletableFuture.supplyAsync(() -> {
|
customerCapitalResultService.checkCapitalInfo(customerbyId, 0);
|
return true;
|
}, executor);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("异步进行资方列表撞库失败,错误信息:", e);
|
}
|
return customer.getId().toString();
|
}
|
|
private final ICapitalInfoService capitalInfoService; // 资金信息服务
|
private static final int ENABLE_FLAG = 1; // 启用标志
|
private static final int DISABLE_FLAG = 0; // 禁用标志
|
private final ICustomerH5MatchRecordService customerH5MatchRecordService;
|
|
/**
|
* H5匹配
|
*/
|
@Override
|
public ResultJson h5Match(CustomerBaseDto customerBaseDto, HttpServletRequest request) {
|
LambdaQueryWrapper<CapitalInfo> wrapper = new LambdaQueryWrapper<>(); // 创建查询条件
|
wrapper.eq(CapitalInfo::getEnableFlag, ENABLE_FLAG); // 是否启用:启用
|
wrapper.eq(CapitalInfo::getDeleteFlag, DISABLE_FLAG); // 是否删除:不删除
|
wrapper.eq(CapitalInfo::getH5Match, ENABLE_FLAG); // 参与H5匹配资金方:是
|
wrapper.orderByAsc(CapitalInfo::getSeq); // 按序号升序排列
|
List<CapitalInfo> lst = capitalInfoService.list(wrapper); // 返回匹配的资金信息列表
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.putOpt("idcard", customerBaseDto.getIdCard());
|
jsonObject.putOpt("phone", customerBaseDto.getPhone());
|
jsonObject.putOpt("name", customerBaseDto.getName());
|
OkHttpClient client = new OkHttpClient().newBuilder().build();
|
MediaType mediaType = MediaType.parse("application/json");
|
RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(jsonObject));
|
|
JSONObject ret = new JSONObject();
|
int retCode = 0;
|
|
for (CapitalInfo capitalInfo : lst) {
|
Long capitalId = capitalInfo.getId();
|
String url = null;
|
if (capitalId == 37L) { // 商城
|
url = SC_H5_CHECK_URL;
|
}
|
if (url != null) {
|
Request req = new Request.Builder().url(url).method("POST", body).addHeader("Content-Type", "application/json").build();
|
try {
|
Response execute = client.newCall(req).execute();
|
String responseData = execute.body().string();
|
log.info("请求H5匹配:{}", responseData);
|
JSONObject jb = new JSONObject(responseData);
|
if (retCode == 0 && jb.getInt("code") == 1) {
|
retCode = 1;
|
}
|
if (ret.isEmpty()) {
|
ret.putOpt("iosLink", capitalInfo.getIosLink());
|
ret.putOpt("androidLink", capitalInfo.getAndroidLink());
|
}
|
// 保存推送记录
|
CustomerH5MatchRecord customerH5MatchRecord = new CustomerH5MatchRecord();
|
customerH5MatchRecord.setPhone(customerBaseDto.getPhone());
|
customerH5MatchRecord.setName(customerBaseDto.getName());
|
customerH5MatchRecord.setIdcard(customerBaseDto.getIdCard());
|
customerH5MatchRecord.setCapitalId(capitalId);
|
customerH5MatchRecord.setStatus(retCode);
|
|
customerH5MatchRecordService.save(customerH5MatchRecord);
|
} catch (IOException e) {
|
e.printStackTrace();
|
log.error("H5匹配失败,错误信息:", e);
|
}
|
}
|
}
|
if (retCode == 1) {
|
return ResultJson.ok(ret);
|
}else {
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "审核不通过");
|
}
|
|
}
|
|
/**
|
* 标注:基本资料填写,有撞库和推送用户基本资料给资方
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public String appAddCapitalInfo(HttpServletRequest request, CustomerCapitalDto customerCapitalDto, String appId, String channelInfo) {
|
Customer customer = getById(customerCapitalDto.getId());
|
if (customer == null) {
|
throw new CommonException("用户记录不存在");
|
}
|
if (!CustomerInfoStatusEnum.BANKCARD_INFO.getCode().equals(customer.getStatus())
|
&& !CustomerInfoStatusEnum.COMPANY_INFO.getCode().equals(customer.getStatus())) {
|
systemLogger.error("保存客户资金方资料失败,错误:用户资料状态非法, 原始数据" + customerCapitalDto.toString());
|
throw new CommonException("用户资料状态非法");
|
}
|
BeanUtils.copyProperties(customerCapitalDto, customer);
|
if (customer.getFamilyMonthlyIncome() == null) {
|
customer.setFamilyMonthlyIncome(customerCapitalDto.getFamilyMonthlyIncome());
|
}
|
if (StringUtils.isEmpty(customer.getLivest())) {
|
customer.setLivest(customerCapitalDto.getLivest());
|
}
|
if (customer.getProfessionInfo() == null) {
|
customer.setProfessionInfo(customerCapitalDto.getProfessionInfo());
|
}
|
customer.setStatus(CustomerInfoStatusEnum.CAPITAL_INFO.getCode());
|
//默认腾讯云 该字段枚举值 01:腾讯云,02:阿里云 属于必填项
|
customer.setVerifySimilarityName("01");
|
customer.setNationality("中国");
|
customer.setClientIp(IpUtil.getIpAddr(request));
|
customer.setChannelInfo(channelInfo);
|
saveOrUpdate(customer);
|
CustomerUser customerUser = customerUserService.getOne(new LambdaQueryWrapper<CustomerUser>()
|
.eq(CustomerUser::getPhone, customer.getPhone()));
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String entryDate = simpleDateFormat.format(System.currentTimeMillis());
|
if (customerUser.getCallBackResult() == null &&
|
CustomerUserBusinessTypeEnum.RONG_YI_TUI.getCode().equals(customerUser.getBusinessType())) {
|
try {
|
//生成相应业务类型的订单号
|
String order = SerialGenerator.getOrder();
|
customerUser.setBusinessNo(order);
|
RongYiTuiResponse rongYiTuiResponse = rongYiTuiUtil.entryNotify(customer.getPhone(), customerUser.getBusinessNo(), entryDate);
|
if (rongYiTuiResponse != null) {
|
log.info("融易推授信进件通知返回:{}", rongYiTuiResponse.toString());
|
} else {
|
log.info("融易推授信进件通知返回失败");
|
}
|
customerUserService.update(Wrappers.<CustomerUser>lambdaUpdate()
|
.set(CustomerUser::getCallBackResult, 0)
|
.set(CustomerUser::getBusinessNo, customerUser.getBusinessNo())
|
.eq(CustomerUser::getId, customerUser.getId()));
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("融易推授信进件回调绿地接口失败,错误信息:", e);
|
}
|
}
|
/*try {
|
//异步进行资方列表撞库
|
ExecutorService executor = Executors.newFixedThreadPool(1);
|
CompletableFuture.supplyAsync(() -> {
|
customerCapitalResultService.checkCapitalInfo(customer, null);
|
customerCapitalResultService.autoPushCapitalInfo(customer);
|
return true;
|
}, executor);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("异步进行资方列表撞库失败,错误信息:", e);
|
}*/
|
|
return customer.getId().toString();
|
}
|
|
/**
|
* OCR资料录入
|
*/
|
@Override
|
public String appAddOCRInfo(CustomerOcrDto customerOcrDto, String appId) {
|
Customer customer = getById(customerOcrDto.getId());
|
if (customer == null) {
|
throw new CommonException("用户记录不存在");
|
}
|
systemLogger.info("OCR原始数据:{}", customerOcrDto);
|
if (!CustomerInfoStatusEnum.BASE_INFO.getCode().equals(customer.getStatus())) {
|
systemLogger.error("保存客户OCR资料失败,错误:用户状态非法, 原始数据" + customerOcrDto.toString());
|
throw new CommonException("用户资料状态非法");
|
}
|
if ("分数为空".equals(customerOcrDto.getVerifySimilarity())) {
|
customerOcrDto.setVerifySimilarity("0");
|
}
|
BeanUtils.copyProperties(customerOcrDto, customer);
|
customer.setStatus(CustomerInfoStatusEnum.OCR_INFO.getCode());
|
CustomerUser customerUser = customerUserService.getUserByPhone(customer.getPhone());
|
if (customerUser == null) {
|
throw new CommonException("此用户不存在");
|
}
|
cacuAge(customer);
|
saveOrUpdate(customer);
|
// try {
|
// //异步进行资方列表撞库
|
// ExecutorService executor = Executors.newFixedThreadPool(2);
|
// CompletableFuture.supplyAsync(() -> {
|
// customerCapitalResultService.checkCapitalInfo(customer, 0);
|
// return true;
|
// }, executor);
|
// } catch (Exception e) {
|
// e.printStackTrace();
|
// log.error("异步进行资方列表撞库失败,错误信息:", e);
|
// }
|
customerUserService.checkAndUpdateUser(customerUser, customer);
|
systemLogger.info("OCR原始数据保存成功!");
|
return customer.getId().toString();
|
}
|
|
@Override
|
public String appAddBankCardInfo(CustomerBankCardDto customerBankCardDto, String appId) {
|
Customer customer = getById(customerBankCardDto.getId());
|
if (customer == null) {
|
throw new CommonException("用户记录不存在");
|
}
|
if (!CustomerInfoStatusEnum.OCR_INFO.getCode().equals(customer.getStatus())) {
|
systemLogger.error("保存客户银行卡资料失败,错误:用户状态非法, 原始数据" + customerBankCardDto.toString());
|
throw new CommonException("用户资料状态非法");
|
}
|
BeanUtils.copyProperties(customerBankCardDto, customer);
|
customer.setStatus(CustomerInfoStatusEnum.BANKCARD_INFO.getCode());
|
saveOrUpdate(customer);
|
return customer.getId().toString();
|
}
|
|
@Override
|
public String appAddRepayInfo(CustomerRepayDto customerRepayDto, String appId) {
|
Customer customer = getById(customerRepayDto.getId());
|
if (customer == null) {
|
throw new CommonException("用户记录不存在");
|
}
|
BeanUtils.copyProperties(customerRepayDto, customer);
|
customer.setHasRepayPlan(1);
|
customer.setRepayApplyDate(new Date());
|
saveOrUpdate(customer);
|
return customer.getId().toString();
|
}
|
|
@Override
|
public void rongYiTuiVip(UserDetail userDetail, Integer vipCardType) {
|
CustomerUser customerUser = customerUserService.getOne(new LambdaQueryWrapper<CustomerUser>()
|
.eq(CustomerUser::getPhone, userDetail.getPhone()));
|
if (VipCardTypeEnum.AUDIT_QUEUE.getCode().equals(vipCardType)) {
|
customerUser.setQueueVipCode(QueueVipTypeEnum.VIP1.getCode());
|
} else if (VipCardTypeEnum.MEMBER_SERVICE.getCode().equals(vipCardType)) {
|
Date now = new Date();
|
customerUser.setVipStartDate(now);
|
LocalDateTime after = LocalDateTime.ofInstant(now.toInstant(), ZoneId.systemDefault()).plusDays(365);
|
Date from = Date.from(after.atZone(ZoneId.systemDefault()).toInstant());
|
customerUser.setVipEndDate(from);
|
}
|
customerUserService.updateById(customerUser);
|
}
|
|
@Override
|
public City getUserIpCity(HttpServletRequest request) {
|
City cityInfo = aliyunUtil.getCityInfo(request, null);
|
systemLogger.info("getUserIpCity:{}", cityInfo);
|
return cityInfo;
|
}
|
|
@Override
|
public Version4FlowPathVo version4FlowPath(UserDetail userDetail) {
|
CustomerUser customerUser = customerUserService.getOne(new LambdaQueryWrapper<CustomerUser>()
|
.eq(CustomerUser::getPhone, userDetail.getPhone()).eq(CustomerUser::getDeleteFlag, 0));
|
if (customerUser == null) {
|
throw new CommonException("用户不存在");
|
}
|
Customer customer = customerMapper.getLatestCustomerRecord(customerUser.getPhone());
|
if (customer == null) {
|
throw new CommonException("用户申请记录不存在");
|
}
|
Version4FlowPathVo version4FlowPathVo = new Version4FlowPathVo();
|
if (customerUser.getQueueVipCode().equals(QueueVipTypeEnum.NONE.getCode())) {
|
version4FlowPathVo.setIsQueueVip(false);
|
} else {
|
version4FlowPathVo.setIsQueueVip(true);
|
}
|
//获取该用户的所有资方结果
|
List<CustomerCapitalResult> capitalResultList = customerCapitalResultService.list(new LambdaQueryWrapper<CustomerCapitalResult>()
|
.eq(CustomerCapitalResult::getCustomerUserId, customerUser.getId())
|
.eq(CustomerCapitalResult::getCustomerRecordId, customer.getId()));
|
if (capitalResultList == null || capitalResultList.isEmpty()) {
|
throw new CommonException("用户不存在有效的资方对接结果");
|
}
|
|
//筛选撞库通过的资方对接结果
|
List<CustomerCapitalResult> checkSuccessResult = capitalResultList.stream()
|
.filter(i -> CustomerCapitalResult.CHECK_SUCCESS.equals(i.getCheckResult())).collect(Collectors.toList());
|
List<CapitalInfoAppVo> capitalInfoAppVos = new ArrayList<>();
|
if (checkSuccessResult == null || checkSuccessResult.isEmpty()) {
|
version4FlowPathVo.setCapitalInfoAppVos(capitalInfoAppVos);
|
return version4FlowPathVo;
|
}
|
//从撞库通过的数据中获取对应的资方信息列表
|
List<Long> idList = checkSuccessResult.stream().map(CustomerCapitalResult::getCapitalInfoId).collect(Collectors.toList());
|
List<CapitalInfo> capitalInfoList = capitalInfoMapper.selectBatchIds(idList);
|
if (capitalInfoList == null || capitalInfoList.isEmpty()) {
|
throw new CommonException("用户不存在有效的资方信息");
|
}
|
//从撞库通过的资方中筛选审核开关开启的资方
|
List<CapitalInfo> matchCapitalInfoList = capitalInfoList.stream()
|
.filter(i -> Objects.equals(i.getAuditSwitch(), 1))
|
.collect(Collectors.toList());
|
if (matchCapitalInfoList == null || matchCapitalInfoList.isEmpty()) {
|
version4FlowPathVo.setCapitalInfoAppVos(capitalInfoAppVos);
|
return version4FlowPathVo;
|
}
|
// 保存零时的授权额度
|
List<CustomerCapitalResult> updateTempTotalCreditList = new ArrayList<>();
|
for (CustomerCapitalResult result : checkSuccessResult) {
|
if (result.getTempTotalCredit() == null) {
|
result.setTempTotalCredit(randomQuota());
|
updateTempTotalCreditList.add(result);
|
}
|
}
|
if (updateTempTotalCreditList.size() > 0) {
|
customerCapitalResultService.saveOrUpdateBatch(updateTempTotalCreditList);
|
}
|
//展示所有满足条件的资方信息
|
for (CapitalInfo capitalInfo : matchCapitalInfoList) {
|
CustomerCapitalResult capitalResult = checkSuccessResult.stream()
|
.filter(i -> capitalInfo.getId().equals(i.getCapitalInfoId())).findFirst().orElse(null);
|
if (capitalResult == null) {
|
throw new CommonException("用户不存在有效的资方对接结果");
|
}
|
CapitalInfoAppVo capitalInfoAppVo = new CapitalInfoAppVo();
|
capitalInfoAppVo.setId(capitalInfo.getId());
|
capitalInfoAppVo.setCode(capitalInfo.getCode());
|
capitalInfoAppVo.setName(capitalInfo.getName());
|
capitalInfoAppVo.setFundType(capitalInfo.getFundType());
|
capitalInfoAppVo.setSeq(capitalInfo.getSeq());
|
capitalInfoAppVo.setIconUrl(capitalInfo.getIconUrl());
|
/**
|
* NOT_APPLY(0, "未申请"),
|
* APPLY_WAIT(1, "审批中"),
|
* APPLY_PASS(2, "审批通过"),
|
* APPLY_REFUSE(3, "审批不通过"),
|
* PREPARE_APPROVAL(4, "预审通过"),
|
* FIRST_APPROVAL(5, "一审通过"),
|
* LOAN_FAIL(6, "借款失败")
|
*/
|
|
/**
|
* APPROVAL_WAIT(0, "等待中"),
|
* APPROVAL_SUCCESS(1, "审核成功"),
|
* APPROVAL_REFUSE(2, "审核拒绝"),
|
* APPROVAL_REQUEST_FAIL(3, "请求拒绝")
|
*/
|
|
if (CapitalApprovalResultEnum.APPROVAL_SUCCESS.getCode().equals(capitalResult.getApprovalResult())) {// APPROVAL_SUCCESS(1, "审核成功")
|
capitalInfoAppVo.setStatus(CapitalInfoStatusEnum.APPLY_PASS.getCode()); // 2 审批通过
|
capitalInfoAppVo.setFlowPathNext(Version4FlowPathVo.FLOW_SUCCESS);
|
} else if (CapitalApprovalResultEnum.APPROVAL_WAIT.getCode().equals(capitalResult.getApprovalResult())) {// 0 等待中
|
capitalInfoAppVo.setStatus(CapitalInfoStatusEnum.APPLY_WAIT.getCode()); // 1 审批中
|
capitalInfoAppVo.setFlowPathNext(Version4FlowPathVo.FLOW_WAIT);
|
} else {// 2 审批拒绝 3 请求拒绝
|
capitalInfoAppVo.setStatus(CapitalInfoStatusEnum.APPLY_WAIT.getCode());// 1 审批中
|
capitalInfoAppVo.setFlowPathNext(Version4FlowPathVo.FLOW_FAIL);
|
}
|
// 于2022-11-14修改
|
// if (CapitalApprovalResultEnum.APPROVAL_SUCCESS.getCode().equals(capitalResult.getApprovalResult())) {// 数据库:1 审核成功
|
// capitalInfoAppVo.setStatus(CapitalInfoStatusEnum.APPLY_PASS.getCode()); // 前端:2 审批通过
|
// capitalInfoAppVo.setFlowPathNext(Version4FlowPathVo.FLOW_SUCCESS);
|
// } else if (CapitalApprovalResultEnum.APPROVAL_REFUSE.getCode().equals(capitalResult.getApprovalResult())) {// 数据库:2 审核拒绝
|
// capitalInfoAppVo.setStatus(CapitalInfoStatusEnum.APPLY_REFUSE.getCode()); // 前端:3 审批不通过
|
// capitalInfoAppVo.setFlowPathNext(Version4FlowPathVo.FLOW_FAIL);
|
// } else if (CapitalApprovalResultEnum.APPROVAL_REQUEST_FAIL.getCode().equals(capitalResult.getApprovalResult())) {// 数据库:3 请求拒绝
|
// capitalInfoAppVo.setStatus(CapitalInfoStatusEnum.REQUEST_FAIL.getCode()); // 前端:7 请求拒绝
|
// capitalInfoAppVo.setFlowPathNext(Version4FlowPathVo.FLOW_FAIL);
|
// } else {// 审批中
|
// capitalInfoAppVo.setStatus(CapitalInfoStatusEnum.APPLY_WAIT.getCode());// 前端:1 审批中
|
// capitalInfoAppVo.setFlowPathNext(Version4FlowPathVo.FLOW_WAIT);
|
// }
|
// 完
|
capitalInfoAppVo.setCapitalResultId(capitalResult.getId());
|
if (StringUtils.isNotEmpty(capitalResult.getTotalCredit())) {
|
capitalInfoAppVo.setQuota(Integer.valueOf(capitalResult.getTotalCredit()));
|
} else {
|
capitalInfoAppVo.setQuota(capitalResult.getTempTotalCredit());
|
}
|
capitalInfoAppVos.add(capitalInfoAppVo);
|
}
|
capitalInfoAppVos = capitalInfoAppVos.stream().sorted(Comparator.comparing(CapitalInfoAppVo::getSeq)).collect(Collectors.toList());
|
version4FlowPathVo.setCapitalInfoAppVos(capitalInfoAppVos);
|
return version4FlowPathVo;
|
}
|
|
@Override
|
public String appFourAddRelationInfo(HttpServletRequest request, CustomerRelationDto customerRelationDto, String appId, String channelInfo) {
|
Customer customer = getById(customerRelationDto.getId());
|
if (customer == null) {
|
throw new CommonException("用户记录不存在");
|
}
|
if (!CustomerInfoStatusEnum.BANKCARD_INFO.getCode().equals(customer.getStatus())) {
|
systemLogger.error("保存客户资金方资料失败,错误:用户资料状态非法, 原始数据" + customerRelationDto.toString());
|
throw new CommonException("用户资料状态非法");
|
}
|
BeanUtils.copyProperties(customerRelationDto, customer);
|
customer.setStatus(CustomerInfoStatusEnum.COMPANY_INFO.getCode());
|
//默认腾讯云 该字段枚举值 01:腾讯云,02:阿里云 属于必填项
|
customer.setVerifySimilarityName("01");
|
customer.setNationality("中国");
|
customer.setClientIp(IpUtil.getIpAddr(request));
|
customer.setChannelInfo(channelInfo);
|
saveOrUpdate(customer);
|
return customer.getId().toString();
|
}
|
|
@Override
|
public String appFourAddCompanyInfo(HttpServletRequest request, CustomerCompanyDto customerCompanyDto, String appId) {
|
Customer customer = getById(customerCompanyDto.getId());
|
if (customer == null) {
|
throw new CommonException("用户记录不存在");
|
}
|
if (!CustomerInfoStatusEnum.COMPANY_INFO.getCode().equals(customer.getStatus())) {
|
systemLogger.error("保存客户资金方资料失败,错误:用户资料状态非法, 原始数据" + customerCompanyDto.toString());
|
throw new CommonException("用户资料状态非法");
|
}
|
BeanUtils.copyProperties(customerCompanyDto, customer);
|
customer.setStatus(CustomerInfoStatusEnum.CAPITAL_INFO.getCode());
|
saveOrUpdate(customer);
|
CustomerUser customerUser = customerUserService.getOne(new LambdaQueryWrapper<CustomerUser>()
|
.eq(CustomerUser::getPhone, customer.getPhone()));
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String entryDate = simpleDateFormat.format(System.currentTimeMillis());
|
if (customerUser.getCallBackResult() == null &&
|
CustomerUserBusinessTypeEnum.RONG_YI_TUI.getCode().equals(customerUser.getBusinessType())) {
|
try {
|
//生成相应业务类型的订单号
|
String order = SerialGenerator.getOrder();
|
customerUser.setBusinessNo(order);
|
RongYiTuiResponse rongYiTuiResponse = rongYiTuiUtil.entryNotify(customer.getPhone(), customerUser.getBusinessNo(), entryDate);
|
if (rongYiTuiResponse != null) {
|
log.info("融易推授信进件通知返回:{}", rongYiTuiResponse.toString());
|
} else {
|
log.info("融易推授信进件通知返回失败");
|
}
|
customerUserService.update(Wrappers.<CustomerUser>lambdaUpdate()
|
.set(CustomerUser::getCallBackResult, 0)
|
.set(CustomerUser::getBusinessNo, customerUser.getBusinessNo())
|
.eq(CustomerUser::getId, customerUser.getId()));
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("融易推授信进件回调绿地接口失败,错误信息:", e);
|
}
|
}
|
// 判断浏览器端是否有输入资产信息,有则需再次推送,因为不会再跳转到资产信息输入界面
|
/*if (customer.getAssetFromBrowser() == 1) {
|
try {
|
//异步进行资方列表撞库
|
ExecutorService executor = Executors.newFixedThreadPool(1);
|
CompletableFuture.supplyAsync(() -> {
|
customerCapitalResultService.checkCapitalInfo(customer, null);
|
customerCapitalResultService.autoPushCapitalInfo(customer);
|
return true;
|
}, executor);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("异步进行资方列表撞库失败,错误信息:", e);
|
}
|
}*/
|
return customer.getId().toString();
|
}
|
|
@Override
|
public String appFiveAddAssetInfo(HttpServletRequest request, CustomerAssetDto customerCompanyDto, String appId) {
|
Customer customer = getCustomer(customerCompanyDto);
|
saveOrUpdate(customer);
|
/*try {
|
//异步进行资方列表撞库
|
ExecutorService executor = Executors.newFixedThreadPool(1);
|
CompletableFuture.supplyAsync(() -> {
|
customerCapitalResultService.checkCapitalInfo(customer, null);
|
customerCapitalResultService.autoPushCapitalInfo(customer);
|
return true;
|
}, executor);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("异步进行资方列表撞库失败,错误信息:", e);
|
}*/
|
return customer.getId().toString();
|
}
|
|
/**
|
* 从浏览器h5推送数据,不包括慧借钱包
|
*/
|
@Override
|
public void h5PushInfo(Customer customer) {
|
try {
|
// customerCapitalResultService.checkCapitalInfo(customer, null);
|
customerCapitalResultService.h5AutoPushCapitalInfo(customer);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("异步进行资方列表撞库失败,错误信息:", e);
|
}
|
}
|
|
/**
|
* 从浏览器h5推送给慧借钱包
|
*/
|
@Override
|
public void h5PushInfoInclude(Customer customer) {
|
try {
|
customerCapitalResultService.pushHjqb(customer);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("异步进行资方列表撞库失败,错误信息:", e);
|
}
|
}
|
|
/**
|
* 根据手机号返回h5匹配信息
|
* @param phone 手机号
|
* @return
|
*/
|
@Override
|
public ResultJson getH5Match(String phone) {
|
CustomerH5MatchRecord customerH5MatchRecord = customerH5MatchRecordService.getOne(Wrappers.lambdaQuery(CustomerH5MatchRecord.class).eq(CustomerH5MatchRecord::getPhone, phone).last("limit 1"));
|
if (customerH5MatchRecord != null) {
|
if (customerH5MatchRecord.getStatus() == 1) { // 审核通过,则返回资方的信息
|
CapitalInfo capitalInfo = capitalInfoService.getById(customerH5MatchRecord.getCapitalId());
|
JSONObject ret = new JSONObject();
|
ret.putOpt("iosLink", capitalInfo.getIosLink());
|
ret.putOpt("androidLink", capitalInfo.getAndroidLink());
|
return ResultJson.ok(ret);
|
}
|
}
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "审核不通过");
|
}
|
|
@Override
|
public void appPushInfo(HttpServletRequest request) {
|
String token = request.getHeader("Authorization");
|
UserDetail user = UserUtil.getUser(token);
|
if (user == null) {
|
log.error("appPushInfo 用户Token无效");
|
}
|
Customer customer = customerMapper.getLatestCustomerRecord(user.getPhone());
|
// 标记用户基本资料输入完成: 2024-08-23新增
|
customer.setDataIsCompleted(1);
|
customerMapper.updateById(customer);
|
String appId = request.getParameter("appId");
|
ChannelInfo channelInfo = channelInfoMapper.selectOne(new LambdaQueryWrapper<ChannelInfo>().eq(ChannelInfo::getAppId, appId).last(" limit 1 "));
|
|
if (channelInfo != null && 1 != channelInfo.getVersion3IsOpen()) {// 3.0开启才推送
|
return;
|
}
|
try {
|
//异步进行资方列表撞库
|
// ExecutorService executor = Executors.newFixedThreadPool(1);
|
// CompletableFuture.supplyAsync(() -> {
|
//// customerCapitalResultService.checkCapitalInfo(customer, null);
|
// customerCapitalResultService.autoPushCapitalInfo(customer);
|
// return true;
|
// }, executor);
|
customerCapitalResultService.autoPushCapitalInfo(customer);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("进行资方列表撞库失败,错误信息:", e);
|
}
|
}
|
|
/**
|
* 从浏览器h5进行资产信息录入
|
*/
|
@Override
|
public String h5FiveAddAssetInfo(HttpServletRequest request, CustomerAssetDto customerCompanyDto, String appId) {
|
Customer customer = getCustomer(customerCompanyDto);
|
customer.setAssetFromBrowser(1);
|
customer.setStatus(CustomerInfoStatusEnum.OCR_INFO.getCode());
|
saveOrUpdate(customer);
|
try {
|
customerCapitalResultService.autoPushCapitalInfo(customer);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("异步进行资方列表撞库失败,错误信息:", e);
|
}
|
/*try {
|
//异步进行资方列表撞库
|
ExecutorService executor = Executors.newFixedThreadPool(1);
|
CompletableFuture.supplyAsync(() -> {
|
customerCapitalResultService.checkCapitalInfo(customer, null);
|
customerCapitalResultService.autoPushCapitalInfo(customer);
|
return true;
|
}, executor);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("异步进行资方列表撞库失败,错误信息:", e);
|
}*/
|
return customer.getId().toString();
|
}
|
|
@NotNull
|
private Customer getCustomer(CustomerAssetDto customerCompanyDto) {
|
Customer customer = getById(customerCompanyDto.getId());
|
if (customer == null) {
|
throw new CommonException("用户记录不存在");
|
}
|
BeanUtils.copyProperties(customerCompanyDto, customer);
|
customer.setStatus(CustomerInfoStatusEnum.ASSET_INFO.getCode());
|
return customer;
|
}
|
|
|
public void cacuAge(Customer customer) {
|
if (StringUtils.isNotEmpty(customer.getBirthday())) {
|
long yearmoi = (long) 365 * 24 * 60 * 60 * 1000;
|
Date today = new Date();
|
SimpleDateFormat bDate = new SimpleDateFormat("yyyyMMdd");
|
try {
|
long birthdayMi = bDate.parse(customer.getBirthday()).getTime();
|
long todayMi = today.getTime();
|
long liveMi = todayMi - birthdayMi;
|
int age = (int) (liveMi / yearmoi);
|
customer.setAge(age);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
} else {
|
Random random = new Random();
|
int age = random.nextInt(21) + 30;
|
customer.setAge(age);
|
}
|
}
|
|
public void cacuDefaltAge(Customer customer) {
|
if (customer.getAge() == null) {
|
Random random = new Random();
|
int age = random.nextInt(21) + 30;
|
customer.setAge(age);
|
}
|
}
|
|
/**
|
* 根据机构配置年龄区间筛选
|
*
|
* @param sysUsers
|
* @param age
|
* @return
|
*/
|
private List<MechanismVo> filterMechanismAge(List<MechanismVo> sysUsers, Integer age) {
|
if (sysUsers != null && sysUsers.size() > 0) {
|
List<MechanismVo> result = new ArrayList<>();
|
for (MechanismVo sysUser : sysUsers) {
|
if (sysUser.getAgeLowerLimit() != null) {
|
if (age == null || age < sysUser.getAgeLowerLimit()) {
|
continue;
|
}
|
}
|
if (sysUser.getAgeUpperLimit() != null) {
|
if (age == null || age > sysUser.getAgeUpperLimit()) {
|
continue;
|
}
|
}
|
result.add(sysUser);
|
}
|
return result;
|
}
|
return null;
|
}
|
|
public static Integer randomQuota() {
|
Random random = new Random();
|
int nextInt = 5 + random.nextInt(20);
|
Integer quota = nextInt * 1000;
|
return quota;
|
}
|
|
@Override
|
public Customer getUser(LoginUserDto userDto) {
|
Customer customer = getUserByPhone(userDto.getPhone());
|
return customer;
|
}
|
|
|
private Customer getUserByPhone(String phone) {
|
return lambdaQuery().eq(Customer::getPhone, phone).eq(Customer::getDeleteFlag, 0).last(" limit 1 ").one();
|
}
|
|
}
|