package com.nova.sankuai.service.impl;
|
|
import cn.hutool.core.util.IdUtil;
|
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.dto.ChannelInfoDefaultVipDto;
|
import com.nova.sankuai.domain.dto.ChannelInfoDto;
|
import com.nova.sankuai.domain.dto.ChannelInfoPageDto;
|
import com.nova.sankuai.domain.dto.ChannelLoanMarketHotLinkDto;
|
import com.nova.sankuai.domain.entity.*;
|
import com.nova.sankuai.domain.enums.CustomerInfoStatusEnum;
|
import com.nova.sankuai.domain.enums.vipservice.VipCardTypeEnum;
|
import com.nova.sankuai.domain.vo.ChannelVipConfigVo;
|
import com.nova.sankuai.domain.vo.LoanSupermarketVo;
|
import com.nova.sankuai.domain.vo.auth.AutoLoginVo;
|
import com.nova.sankuai.domain.vo.channel.ChannelConfigVo;
|
import com.nova.sankuai.domain.vo.channel.ChannelInfoVo;
|
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.ChannelCityLinkService;
|
import com.nova.sankuai.service.IChannelInfoService;
|
import com.nova.sankuai.service.IChannelSupermarketService;
|
import com.nova.sankuai.service.IH5ChannelLoanMarketService;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang.StringUtils;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @author weikangdi
|
*/
|
@Service
|
@RequiredArgsConstructor(onConstructor_ = @Autowired)
|
@Slf4j
|
public class ChannelInfoServiceImpl extends ServiceImpl<ChannelInfoMapper, ChannelInfo> implements IChannelInfoService {
|
|
private final ChannelInfoMapper channelInfoMapper;
|
|
private final ChannelLogMapper channelLogMapper;
|
|
private final ChannelSupermarketMapper channelSupermarketMapper;
|
|
private final IChannelSupermarketService channelSupermarketService;
|
|
private final IH5ChannelLoanMarketService h5ChannelLoanMarketService;
|
|
private final CustomerUserMapper customerUserMapper;
|
|
private final CustomerMapper customerMapper;
|
|
private final PageUtil pageUtil;
|
|
private final SystemParamMapper systemParamMapper;
|
|
private final H5ChannelLoanMarketMapper h5ChannelLoanMarketMapper;
|
|
private final VipCardMapper vipCardMapper;
|
|
private final LoanSupermarketMapper loanSupermarketMapper;
|
|
private final ChannelCityLinkService channelCityLinkService;
|
|
private final AliyunUtil aliyunUtil;
|
|
private static final Logger loginLogger = LoggerFactory.getLogger("loginLogger");
|
|
@Value("${channelInfo.codeInit}")
|
private Integer codeInit;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Long createSyncChannel(SyncConfig syncConfig) {
|
ChannelInfo info = lambdaQuery().eq(ChannelInfo::getAppId, syncConfig.getAppId()).one();
|
if (info != null) {
|
log.error("新增同步配置信息渠道失败,原始数据:" + syncConfig);
|
throw new CommonException("该渠道Key已经用于其他渠道");
|
}
|
ChannelInfo channelInfo = new ChannelInfo();
|
channelInfo.setAppId(syncConfig.getAppId());
|
channelInfo.setName(syncConfig.getName());
|
channelInfo.setStatus(Constants.ENABLE);
|
channelInfo.setType(ChannelInfo.TYPE_EXPORT);
|
channelInfo.setCode(generateCode());
|
channelInfo.setSystemFlag(Constants.ENABLE);
|
channelInfo.setVersion2IsOpen(0);
|
channelInfo.setQuotaApprovalTime(10);
|
channelInfo.setMemberDiscount(10000);
|
save(channelInfo);
|
return channelInfo.getId();
|
}
|
|
private Integer generateCode() {
|
Integer code = channelInfoMapper.getMaxCode();
|
if (codeInit != null && code < codeInit) {
|
return codeInit;
|
}
|
return code + 1;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void updateSyncChannel(SyncConfig syncConfig) {
|
ChannelInfo channelInfo = getById(syncConfig.getChannelId());
|
if (channelInfo == null) {
|
log.error("更新同步配置信息渠道失败,原始数据:" + syncConfig);
|
throw new CommonException("该同步配置对应的出口渠道为空");
|
}
|
channelInfo.setName(syncConfig.getName());
|
channelInfo.setAppId(syncConfig.getAppId());
|
updateById(channelInfo);
|
}
|
|
@Override
|
public ResultJson<?> checkChannel(String appId, String importObjects) {
|
log.info("渠道id检测开始,渠道id值:" + appId);
|
ChannelInfo channelInfo = lambdaQuery().eq(ChannelInfo::getAppId, appId)
|
.eq(ChannelInfo::getType, ChannelInfo.TYPE_IMPORT).one();
|
if (channelInfo == null) {
|
|
log.error("checkChannel:渠道id检测不合法,appId:" + appId + ",原始数据信息:" + importObjects);
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "渠道id非法");
|
}
|
if (Constants.ENABLE != channelInfo.getStatus()) {
|
if (StringUtils.isNotBlank(importObjects)) {
|
ChannelLog channelLog = new ChannelLog();
|
channelLog.setSource(channelInfo.getCode());
|
channelLog.setName(channelInfo.getName());
|
channelLog.setType(ChannelLog.IMPORT);
|
channelLog.setStatus(ChannelLog.FAIL);
|
channelLog.setMessage("渠道已被禁用");
|
channelLog.setImportObjects(importObjects);
|
channelLog.setCreationDate(new Date());
|
channelLogMapper.insert(channelLog);
|
}
|
log.error("渠道id检测:渠道已经被禁用" + "原始数据信息:" + importObjects);
|
return ResultJson.failure(ResultCode.SERVER_ERROR, "渠道已被禁用");
|
}
|
return null;
|
}
|
|
@Override
|
public IPage<ChannelInfoVo> pageImportList(ChannelInfoPageDto pageDto) {
|
Page page = pageUtil.getPage(pageDto);
|
return channelInfoMapper.pageImportChannel(page, pageDto);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public ChannelInfoVo addChannelInfo(ChannelInfoDto channelInfoDto) {
|
ChannelInfo channelInfo = new ChannelInfo();
|
BeanUtils.copyProperties(channelInfoDto, channelInfo);
|
initChannel(channelInfo);
|
save(channelInfo);
|
channelSupermarketService.saveByChannel(channelInfo.getId());
|
h5ChannelLoanMarketService.saveByChannel(channelInfo.getId());
|
return ChannelInfoVo.parseVo(channelInfo);
|
}
|
|
private void initChannel(ChannelInfo channelInfo) {
|
channelInfo.setType(ChannelInfo.TYPE_IMPORT);
|
channelInfo.setCode(generateCode());
|
channelInfo.setAppId(IdUtil.randomUUID());
|
if (channelInfo.getQuotaApprovalTime() == null) {
|
channelInfo.setQuotaApprovalTime(10);
|
}
|
if (channelInfo.getVersion2IsOpen() == null) {
|
channelInfo.setVersion2IsOpen(0);
|
}
|
if (channelInfo.getMemberDiscount() == null) {
|
channelInfo.setMemberDiscount(10000);
|
}
|
if (StringUtils.isEmpty(channelInfo.getDefaultCardId())) {
|
VipCard defaultCard = vipCardMapper.getDefaultCardByType(VipCardTypeEnum.MEMBER_SERVICE.getCode());
|
channelInfo.setDefaultCardId(defaultCard.getCardId());
|
}
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void editChannelInfo(ChannelInfoDto channelInfoDto) {
|
ChannelInfo channelInfoDb = checkChannelInfo(channelInfoDto.getId(), null);
|
channelInfoDb.setName(channelInfoDto.getName());
|
channelInfoDb.setLoanMarketOnly(channelInfoDto.getLoanMarketOnly());
|
channelInfoDb.setVersion2IsOpen(channelInfoDto.getVersion2IsOpen());
|
channelInfoDb.setAndroidLink(channelInfoDto.getAndroidLink());
|
channelInfoDb.setIosLink(channelInfoDto.getIosLink());
|
channelInfoDb.setMemberDiscount(channelInfoDto.getMemberDiscount());
|
channelInfoDb.setQuotaApprovalTime(channelInfoDto.getQuotaApprovalTime());
|
channelInfoDb.setLoadAndroidLink(channelInfoDto.getLoadAndroidLink());
|
channelInfoDb.setLoadIosLink(channelInfoDto.getLoadIosLink());
|
channelInfoDb.setVersion3IsOpen(channelInfoDto.getVersion3IsOpen());
|
channelInfoDb.setQueueVipSwitch(channelInfoDto.getQueueVipSwitch());
|
channelInfoDb.setH5PageSwitch(channelInfoDto.getH5PageSwitch());
|
channelInfoDb.setVersion4IsOpen(channelInfoDto.getVersion4IsOpen());
|
channelInfoDb.setVipMode(channelInfoDto.getVipMode());
|
channelInfoDb.setLinkMode(channelInfoDto.getLinkMode());
|
// 于2022-11-15新增:直接放款
|
channelInfoDb.setDirectLoanIsOpen(channelInfoDto.getDirectLoanIsOpen());
|
// 完
|
channelInfoDb.setVipSwitch(channelInfoDto.getVipSwitch());
|
channelInfoDb.setBankCardIsOpen(channelInfoDto.getBankCardIsOpen());
|
channelInfoDb.setLoanProgressOld(channelInfoDto.getLoanProgressOld());
|
channelInfoDb.setVersion2Type(channelInfoDto.getVersion2Type());
|
channelInfoDb.setDhSwitch(channelInfoDto.getDhSwitch());
|
channelInfoDb.setYongxinIsOpen(channelInfoDto.getYongxinIsOpen());
|
channelInfoDb.setLianDeng(channelInfoDto.getLianDeng());
|
channelInfoDb.setH5Match(channelInfoDto.getH5Match()); // ab新增于2024-10-16
|
updateById(channelInfoDb);
|
if(channelInfoDto.getVersion4IsOpen()!=null && channelInfoDto.getVersion4IsOpen().equals(0)){
|
LambdaQueryWrapper<Customer> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(Customer::getSourceChannel, channelInfoDb.getCode());
|
queryWrapper.eq(Customer::getStatus, CustomerInfoStatusEnum.COMPANY_INFO.getCode());
|
queryWrapper.eq(Customer::getDeleteFlag, 0);
|
List<Customer> customers = customerMapper.selectList(queryWrapper);
|
if(customers!= null && customers.size() >0){
|
for (Customer customer: customers) {
|
customer.setStatus(CustomerInfoStatusEnum.BANKCARD_INFO.getCode());
|
customerMapper.updateById(customer);
|
}
|
}
|
}
|
}
|
|
public ChannelInfo checkChannelInfo(Long channelId, String appId) {
|
ChannelInfo channelInfo;
|
if (channelId != null) {
|
channelInfo = getById(channelId);
|
} else {
|
channelInfo = lambdaQuery().eq(ChannelInfo::getAppId, appId).one();
|
}
|
if (channelInfo == null) {
|
throw new CommonException("该渠道不存在");
|
}
|
return channelInfo;
|
}
|
|
@Override
|
public IPage<LoanSupermarketVo> pageSupermarkets(Long channelId, PageRequest pageRequest) {
|
checkChannelInfo(channelId, null);
|
return channelSupermarketMapper.pageSupermarketList(pageUtil.getPage(pageRequest), channelId);
|
}
|
|
|
@Override
|
public ChannelInfo getChannelInfoByCode(Integer code) {
|
return lambdaQuery().eq(ChannelInfo::getCode, code).one();
|
}
|
|
|
@Override
|
public void editMemberDefault(ChannelInfoDefaultVipDto channelInfo) {
|
ChannelInfo channelInfoDb = checkChannelInfo(channelInfo.getId(), null);
|
channelInfoDb.setDefaultCardId(channelInfo.getDefaultCardId());
|
updateById(channelInfoDb);
|
}
|
|
@Override
|
public ChannelConfigVo getChannelInfoByKey(String appId, HttpServletRequest request) {
|
String token = request.getHeader("Authorization");
|
UserDetail user = UserUtil.getUser(token);
|
String phone = null;
|
if (user != null) {
|
phone = user.getPhone();
|
}
|
ChannelInfo channelInfo = getChannelByUser(appId, phone);
|
ChannelConfigVo channelConfigVo = ChannelConfigVo.parseChannelConfig(channelInfo);
|
//获取用户的地理信息,并判断该渠道中是否存在该城市的下载链接
|
String uuid = IdUtil.randomUUID();
|
String ipAddr = IpUtil.getIpAddr(request);
|
loginLogger.info("统一码为" + uuid + "," + "手机号为" + phone + ",获取到的IP为:{}", ipAddr);
|
City cityInfo = aliyunUtil.getCityInfo(request, phone);
|
if (cityInfo != null) {
|
loginLogger.info("统一码为" + uuid + "," + "手机号为" + phone + ",获取到的用户信息:{}", cityInfo);
|
ChannelCityLink channelCityLinkById = channelCityLinkService.getOne(new LambdaQueryWrapper<ChannelCityLink>()
|
.eq(ChannelCityLink::getCityId, cityInfo.getCityId())
|
.eq(ChannelCityLink::getChannelId, channelInfo.getId())
|
.eq(ChannelCityLink::getIsDelete, 0));
|
//渠道城市下载链接若存在此信息则将安卓下载链接返回
|
if (channelCityLinkById != null && StringUtils.isNotEmpty(channelCityLinkById.getAndroidLink())) {
|
channelConfigVo.setAndroidLink(channelCityLinkById.getAndroidLink());
|
loginLogger.info("统一码为" + uuid + "," + "手机号为" + phone + ",获取到的安卓下载链接:{}", channelCityLinkById.getAndroidLink());
|
}
|
//渠道城市下载链接若存在此信息则将ios下载链接返回
|
if (channelCityLinkById != null && StringUtils.isNotEmpty(channelCityLinkById.getIosLink())) {
|
loginLogger.info("统一码为" + uuid + "," + "手机号为" + phone + ",获取到的ios下载链接:{}", channelCityLinkById.getIosLink());
|
channelConfigVo.setIosLink(channelCityLinkById.getIosLink());
|
}
|
} else {
|
loginLogger.info("统一码为" + uuid + "," + "手机号为" + phone + ",未获取到相应城市的下载链接");
|
}
|
SystemParam systemParam = systemParamMapper.getDefaultParam();
|
LoanSupermarket loanSupermarket = loanSupermarketMapper.selectById(channelInfo.getLoanMarketHotLinkId());
|
if (loanSupermarket != null) {
|
channelConfigVo.setLoanMarketLinkUrl(loanSupermarket.getLinkUrl());
|
}
|
//配置系统全局开关
|
channelConfigVo.setLoanMarketArray(systemParam.getLoanMarketArray());
|
channelConfigVo.setPageTabSwitch(systemParam.getPageTabSwitch());
|
channelConfigVo.setIdCardSwitch(systemParam.getIdCardSwitch());
|
loginLogger.info("统一码为" + uuid + "," + "手机号为" + phone + ",获取到的vo为:{}", channelConfigVo);
|
if (0 == channelConfigVo.getLoanMarketHotLinkSwitch()) {
|
channelConfigVo.setLoanMarketHotLinkId(null);
|
channelConfigVo.setLoanMarketLinkUrl(null);
|
}
|
return channelConfigVo;
|
}
|
|
|
private ChannelInfo getChannelByUser(String appId, String phone) {
|
ChannelInfo channelInfo = channelInfoMapper.getChannelByAppId(appId);
|
if (channelInfo == null) {
|
log.error("该渠道配置不存在,渠道值:" + appId);
|
throw new CommonException("该渠道配置不存在");
|
}
|
if (StringUtils.isNotEmpty(phone)) {
|
CustomerUser user = customerUserMapper.selectOne(Wrappers.<CustomerUser>lambdaQuery()
|
.eq(CustomerUser::getPhone, phone).eq(CustomerUser::getDeleteFlag, 0));
|
if (user != null) {
|
ChannelInfo userChannel = lambdaQuery().eq(ChannelInfo::getCode, user.getSourceChannel())
|
.eq(ChannelInfo::getType, ChannelInfo.TYPE_IMPORT).one();
|
if (userChannel != null) {
|
channelInfo = userChannel;
|
}
|
}
|
}
|
return channelInfo;
|
}
|
|
@Override
|
public List<LoanSupermarketVo> getSupermarketListByKey(String appId, String phone) {
|
ChannelInfo channelInfo = getChannelByUser(appId, phone);
|
return channelSupermarketMapper.getSupermarketList(channelInfo.getId());
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public String createThirdChannel(AutoLoginVo autoLoginVo, ChannelInfo channelInfo) {
|
String thirdCode = autoLoginVo.getAppId() + autoLoginVo.getChannelCode();
|
ChannelInfo thirdChannel = lambdaQuery().eq(ChannelInfo::getThirdChannelCode, thirdCode).one();
|
if (thirdChannel == null) {
|
thirdChannel = new ChannelInfo();
|
BeanUtils.copyProperties(channelInfo, thirdChannel);
|
thirdChannel.setId(null);
|
thirdChannel.setThirdChannelCode(thirdCode);
|
thirdChannel.setName(channelInfo.getName() + "-" + autoLoginVo.getChannelName());
|
thirdChannel.setCode(generateCode());
|
thirdChannel.setAppId(IdUtil.randomUUID());
|
thirdChannel.setAutoParentCode(channelInfo.getCode());
|
thirdChannel.setHasThirdChannel(0);
|
thirdChannel.setCreationDate(new Date());
|
save(thirdChannel);
|
channelSupermarketService.copyChannel(thirdChannel.getId(), channelInfo.getId());
|
h5ChannelLoanMarketService.copyChannel(thirdChannel.getId(), channelInfo.getId());
|
List<ChannelCityLink> channelCityLinks = channelCityLinkService.list(new LambdaQueryWrapper<ChannelCityLink>()
|
.eq(ChannelCityLink::getChannelId, channelInfo.getId())
|
.eq(ChannelCityLink::getIsDelete, 0));
|
if (channelCityLinks != null && !channelCityLinks.isEmpty()) {
|
ArrayList<ChannelCityLink> channelCityLinklist = new ArrayList<>();
|
for (ChannelCityLink channelCityLink : channelCityLinks) {
|
ChannelCityLink channelCityLinkson = new ChannelCityLink();
|
channelCityLinkson.setChannelId(thirdChannel.getId());
|
channelCityLinkson.setCityId(channelCityLink.getCityId());
|
channelCityLinkson.setAndroidLink(channelCityLink.getAndroidLink());
|
channelCityLinkson.setIosLink(channelCityLink.getIosLink());
|
channelCityLinkson.setCreationDate(new Date());
|
channelCityLinklist.add(channelCityLinkson);
|
}
|
channelCityLinkService.saveBatch(channelCityLinklist);
|
}
|
}
|
if (channelInfo.getHasThirdChannel() == 0) {
|
update(Wrappers.<ChannelInfo>lambdaUpdate()
|
.set(ChannelInfo::getHasThirdChannel, 1)
|
.eq(ChannelInfo::getId, channelInfo.getId()));
|
}
|
return thirdChannel.getAppId();
|
}
|
|
@Override
|
public List<LoanSupermarketVo> getH5LoanMarketListByKey(String appId) {
|
ChannelInfo channelInfo = checkChannelInfo(null, appId);
|
return h5ChannelLoanMarketMapper.getSupermarketList(channelInfo.getId());
|
}
|
|
@Override
|
public IPage<LoanSupermarketVo> pageH5LoanMarkets(Long channelId, PageRequest pageRequest) {
|
checkChannelInfo(channelId, null);
|
return h5ChannelLoanMarketMapper.pageSupermarketList(pageUtil.getPage(pageRequest), channelId);
|
}
|
|
|
@Override
|
public void editLoanMarketHotLink(ChannelLoanMarketHotLinkDto loanMarketHotLinkDto) {
|
ChannelInfo channelInfo = checkChannelInfo(loanMarketHotLinkDto.getChannelId(), null);
|
update(Wrappers.<ChannelInfo>lambdaUpdate()
|
.set(ChannelInfo::getLoanMarketHotLinkId, loanMarketHotLinkDto.getLoanMarketHotLinkId())
|
.set(ChannelInfo::getLoanMarketHotLinkSwitch, loanMarketHotLinkDto.getLoanMarketHotLinkSwitch())
|
.eq(ChannelInfo::getId, channelInfo.getId()));
|
}
|
|
@Override
|
public ChannelVipConfigVo getChannelVipConfig(String appId, String phone) {
|
ChannelVipConfigVo vipConfigVo = new ChannelVipConfigVo();
|
ChannelInfo channelInfo = getChannelByUser(appId, phone);
|
vipConfigVo.setDefaultCardId(channelInfo.getDefaultCardId());
|
vipConfigVo.setMemberDiscount(channelInfo.getMemberDiscount());
|
vipConfigVo.setQuotaApprovalTime(channelInfo.getQuotaApprovalTime());
|
return vipConfigVo;
|
}
|
}
|