package com.nova.sankuai.service.impl;
|
|
import cn.hutool.http.HttpUtil;
|
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.nova.sankuai.domain.dto.SyncConfigPageDto;
|
import com.nova.sankuai.domain.entity.*;
|
import com.nova.sankuai.domain.vo.SyncDateResponse;
|
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.SyncConfigMapper;
|
import com.nova.sankuai.infra.utils.PageRequest;
|
import com.nova.sankuai.infra.utils.PageUtil;
|
import com.nova.sankuai.service.*;
|
import lombok.AllArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @author weikangdi
|
*/
|
@Service
|
@AllArgsConstructor
|
@Slf4j
|
public class SyncConfigServiceImpl extends ServiceImpl<SyncConfigMapper, SyncConfig> implements ISyncConfigService {
|
|
private final SyncConfigMapper syncConfigMapper;
|
|
private final PageUtil pageUtil;
|
|
private IChannelLogService channelLogService;
|
|
private IChannelInfoService channelInfoService;
|
|
private ICityService cityService;
|
|
private ISyncChannelConfigService syncChannelConfigService;
|
|
@Override
|
public void invalidSyncConfig(Long id, Integer status) {
|
SyncConfig syncConfigDb = getById(id);
|
if (syncConfigDb == null) {
|
throw new CommonException("该同步配置不存在");
|
}
|
syncConfigDb.setEnableFlag(status);
|
updateById(syncConfigDb);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void deleteSyncConfig(Long id) {
|
SyncConfig syncConfigDb = getById(id);
|
if (syncConfigDb == null) {
|
throw new CommonException("该同步配置不存在");
|
}
|
removeById(syncConfigDb.getId());
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void editSyncConfig(SyncConfig syncConfig) {
|
SyncConfig syncConfigDb = getById(syncConfig.getId());
|
if (syncConfigDb == null) {
|
throw new CommonException("该同步配置不存在");
|
}
|
syncConfigDb.setEndpoint(syncConfig.getEndpoint());
|
syncConfigDb.setName(syncConfig.getName());
|
syncConfigDb.setAppId(syncConfig.getAppId());
|
syncConfigDb.setEnableFlag(syncConfig.getEnableFlag());
|
syncConfigDb.setDeliveryCity(syncConfig.getDeliveryCity());
|
syncConfigDb.setDeliveryCityName(syncConfig.getDeliveryCityName());
|
syncConfigDb.setChannelConfig(syncConfig.getChannelConfig());
|
updateById(syncConfigDb);
|
channelInfoService.updateSyncChannel(syncConfigDb);
|
syncChannelConfigService.updateConfig(syncConfig);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void addSyncConfig(SyncConfig syncConfig) {
|
syncConfig.setCreationDate(new Date());
|
Long channelId = channelInfoService.createSyncChannel(syncConfig);
|
syncConfig.setChannelId(channelId);
|
save(syncConfig);
|
syncChannelConfigService.updateConfig(syncConfig);
|
}
|
|
@Override
|
public IPage<SyncConfig> pageSyncConfig(SyncConfigPageDto pageDto, PageRequest pageRequest) {
|
IPage<SyncConfig> page = syncConfigMapper.pageModel(pageUtil.getPage(pageRequest), pageDto);
|
List<SyncConfig> records = page.getRecords();
|
List<SyncConfig> newRecords = new ArrayList<>();
|
for (SyncConfig record : records) {
|
List<Long> channelIds = syncChannelConfigService.getChannelsByConfigId(record.getId());
|
record.setChannelIds(channelIds);
|
newRecords.add(record);
|
}
|
page.setRecords(newRecords);
|
return page;
|
}
|
|
@Override
|
public void syncData(Customer customer) {
|
try {
|
List<SyncConfig> list = new ArrayList<>();
|
ChannelInfo customerChannel = channelInfoService.getChannelInfoByCode(customer.getSourceChannel());
|
City city = cityService.lambdaQuery().eq(City::getCityId, customer.getCity()).one();
|
if (city != null) {
|
String provinceId = city.getProvinceId();
|
List<SyncConfig> syncConfigs = syncConfigMapper.selectMatchSyncConfig(customer.getCity(), provinceId);
|
for (SyncConfig syncConfig : syncConfigs) {
|
log.info("根据同步渠道配置进行筛选:原始同步配置:" + syncConfig.toString() + "原始客户信息" + customer.toString());
|
if (SyncConfig.CHANNEL_NONE == syncConfig.getChannelConfig()) {
|
list.add(syncConfig);
|
} else {
|
List<Long> channelIds = syncChannelConfigService.getChannelsByConfigId(syncConfig.getId());
|
syncConfig.setChannelIds(channelIds);
|
if (SyncConfig.CHANNEL_INCLUDE == syncConfig.getChannelConfig() && channelIds.contains(customerChannel.getId())) {
|
list.add(syncConfig);
|
} else if (SyncConfig.CHANNEL_UNINCLUDE == syncConfig.getChannelConfig() && !channelIds.contains(customerChannel.getId())) {
|
list.add(syncConfig);
|
}
|
}
|
}
|
} else {
|
log.error("数据同步逻辑警告:客户的城市信息为空");
|
log.error("原始客户信息:" + customer.toString());
|
}
|
if (list.size() > 0) {
|
log.info("数据同步开始");
|
JSONObject param = parseSyncParam(customer, customerChannel);
|
for (SyncConfig syncConfig : list) {
|
param.putOnce("appid", syncConfig.getAppId());
|
log.info("同步原始数据" + param.toString());
|
log.info("同步配置信息:" + syncConfig.toString());
|
String result = HttpUtil.post(syncConfig.getEndpoint(), param.toString(), Constants.TIME_OUT);
|
ChannelInfo channelInfo = channelInfoService.getById(syncConfig.getChannelId());
|
try {
|
log.info("同步请求返回数据" + result);
|
SyncDateResponse response = JSONUtil.toBean(result, SyncDateResponse.class);
|
if (response.getCode() == ResultCode.SUCCESS.getCode()) {
|
channelLogService.createExportLog(customer.getSourceChannel(), channelInfo.getCode(), ChannelLog.SUCCESS, customer.getId(), result);
|
} else {
|
channelLogService.createExportLog(customer.getSourceChannel(), channelInfo.getCode(), ChannelLog.FAIL, customer.getId(), result);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error("同步数据失败,请求返回结果:" + result);
|
channelLogService.createExportLog(customer.getSourceChannel(), channelInfo.getCode(), ChannelLog.FAIL, customer.getId(), result);
|
}
|
}
|
}
|
} catch (Exception e) {
|
log.error("同步数据异常", e);
|
}
|
}
|
|
private JSONObject parseSyncParam(Customer customer, ChannelInfo customerChannel) {
|
JSONObject param = new JSONObject();
|
param.putOnce("name", customer.getName());
|
param.putOnce("phone", customer.getPhone());
|
param.putOnce("professionInfo", customer.getProfessionInfo());
|
param.putOnce("sesame", customer.getSesame());
|
param.putOnce("socialSecurity", customer.getSocialSecurity());
|
param.putOnce("providentFund", customer.getProvidentFund());
|
param.putOnce("houseStatus", customer.getHouseStatus());
|
param.putOnce("carStatus", customer.getCarStatus());
|
param.putOnce("insurancePolicy", customer.getInsurancePolicy());
|
param.putOnce("creditCard", customer.getCreditCard());
|
param.putOnce("city", customer.getCity());
|
param.putOnce("cityName", customer.getCityName());
|
param.putOnce("loanAmount", customer.getLoanAmount());
|
param.putOnce("loanTerm", customer.getLoanTerm());
|
param.putOnce("approvalLoanAmount", customer.getApprovalLoanAmount());
|
param.putOnce("approvalLoanTerm", customer.getApprovalLoanTerm());
|
param.putOnce("maritalStatus", customer.getMaritalStatus());
|
param.putOnce("education", customer.getEducation());
|
param.putOnce("useOfLoan", customer.getUseOfLoan());
|
param.putOnce("monthlyIncome", customer.getMonthlyIncome());
|
param.putOnce("address", customer.getAddress());
|
param.putOnce("age", customer.getAge());
|
param.putOnce("largeLoanAmount", customer.getLargeLoanAmount());
|
param.putOnce("enterpriseInfo", customer.getEnterpriseInfo());
|
param.putOnce("payrollAgency", customer.getPayrollAgency());
|
param.putOnce("workStatus", customer.getWorkStatus());
|
param.putOnce("microLoan", customer.getMicroLoan());
|
param.putOnce("houseAttributes", customer.getHouseAttributes());
|
param.putOnce("housePayment", customer.getHousePayment());
|
param.putOnce("syncChannelCode", customerChannel.getCode());
|
param.putOnce("syncChannelName", customerChannel.getName());
|
return param;
|
}
|
}
|