Merge branch 'develop' into feature/ticket-add-solution
This commit is contained in:
commit
84b9043cb4
|
|
@ -234,7 +234,7 @@ public class CustomerController extends ControllerBase {
|
||||||
@PostMapping("syncFromCrm")
|
@PostMapping("syncFromCrm")
|
||||||
@MethodInfoMark(value = "同步数据" ,menuName = "客户管理")
|
@MethodInfoMark(value = "同步数据" ,menuName = "客户管理")
|
||||||
public ApiResult<Boolean> syncFromCrm(@RequestBody SyncFromCrmDTO param){
|
public ApiResult<Boolean> syncFromCrm(@RequestBody SyncFromCrmDTO param){
|
||||||
adminCustomerService.syncFromCrm(param.getStartDate(),param.getEndDate());
|
adminCustomerService.syncFromCrm(param);
|
||||||
return ApiResult.success(true);
|
return ApiResult.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -224,7 +224,7 @@ public class DeviceController extends ControllerBase {
|
||||||
@PostMapping("syncFromCrm")
|
@PostMapping("syncFromCrm")
|
||||||
@MethodInfoMark(value = "同步数据" ,menuName = "设备管理")
|
@MethodInfoMark(value = "同步数据" ,menuName = "设备管理")
|
||||||
public ApiResult<Boolean> syncFromCrm(@RequestBody SyncFromCrmDTO param){
|
public ApiResult<Boolean> syncFromCrm(@RequestBody SyncFromCrmDTO param){
|
||||||
adminDeviceService.syncFormCrm(param.getStartDate(),param.getEndDate());
|
adminDeviceService.syncFormCrm(param);
|
||||||
return ApiResult.success(true);
|
return ApiResult.success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
package com.nflg.mobilebroken.admin.pojo.dto;
|
package com.nflg.mobilebroken.admin.pojo.dto;
|
||||||
|
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
public class SyncFromCrmDTO {
|
public class SyncFromCrmDTO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -3,19 +3,16 @@ package com.nflg.mobilebroken.admin.service;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.nflg.mobilebroken.admin.constant.Constant;
|
import com.nflg.mobilebroken.admin.constant.Constant;
|
||||||
import com.nflg.mobilebroken.admin.pojo.vo.AgentManagerVO;
|
import com.nflg.mobilebroken.admin.pojo.dto.SyncFromCrmDTO;
|
||||||
import com.nflg.mobilebroken.admin.pojo.vo.CmrAgentResultVO;
|
import com.nflg.mobilebroken.admin.pojo.vo.CmrAgentResultVO;
|
||||||
import com.nflg.mobilebroken.admin.pojo.vo.CustomerExcelVO;
|
import com.nflg.mobilebroken.admin.pojo.vo.CustomerExcelVO;
|
||||||
import com.nflg.mobilebroken.common.constant.STATE;
|
import com.nflg.mobilebroken.common.constant.STATE;
|
||||||
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
||||||
import com.nflg.mobilebroken.common.util.UniqueSequenceGenerator;
|
import com.nflg.mobilebroken.common.util.UniqueSequenceGenerator;
|
||||||
import com.nflg.mobilebroken.common.util.VUtils;
|
import com.nflg.mobilebroken.common.util.VUtils;
|
||||||
import com.nflg.mobilebroken.repository.entity.Device;
|
|
||||||
import com.nflg.mobilebroken.repository.entity.TBaseArea;
|
import com.nflg.mobilebroken.repository.entity.TBaseArea;
|
||||||
import com.nflg.mobilebroken.repository.entity.TBaseCustomer;
|
import com.nflg.mobilebroken.repository.entity.TBaseCustomer;
|
||||||
import com.nflg.mobilebroken.repository.service.ITBaseAreaService;
|
import com.nflg.mobilebroken.repository.service.ITBaseAreaService;
|
||||||
|
|
@ -45,10 +42,11 @@ public class AdminCustomerService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入
|
* 导入
|
||||||
|
*
|
||||||
* @param data
|
* @param data
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void importData(List<CustomerExcelVO> data){
|
public void importData(List<CustomerExcelVO> data) {
|
||||||
|
|
||||||
//检查EXCEL中代理公司名是否重复
|
//检查EXCEL中代理公司名是否重复
|
||||||
Map<String, List<CustomerExcelVO>> duplicateCompany = data.stream()
|
Map<String, List<CustomerExcelVO>> duplicateCompany = data.stream()
|
||||||
|
|
@ -57,40 +55,40 @@ public class AdminCustomerService {
|
||||||
.filter(entry -> entry.getValue().size() > 1)
|
.filter(entry -> entry.getValue().size() > 1)
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||||
|
|
||||||
if(CollUtil.isNotEmpty(duplicateCompany)) {
|
if (CollUtil.isNotEmpty(duplicateCompany)) {
|
||||||
VUtils.trueThrow(true).throwMessage(STATE.ParamErr,"Excel中以下代理公司名重复:"+StrUtil.join(",",duplicateCompany.keySet()) ) ;
|
VUtils.trueThrow(true).throwMessage(STATE.ParamErr, "Excel中以下代理公司名重复:" + StrUtil.join(",", duplicateCompany.keySet()));
|
||||||
}
|
}
|
||||||
//检查公司名称是否已存在数据库中
|
//检查公司名称是否已存在数据库中
|
||||||
List<String> companyNames = data.stream().map(u -> u.getAgencyCompanyName()).collect(Collectors.toList());
|
List<String> companyNames = data.stream().map(u -> u.getAgencyCompanyName()).collect(Collectors.toList());
|
||||||
|
|
||||||
List<TBaseCustomer> existCompany= baseCustomerService.lambdaQuery().in(TBaseCustomer::getAgencyCompanyName, companyNames).list();
|
List<TBaseCustomer> existCompany = baseCustomerService.lambdaQuery().in(TBaseCustomer::getAgencyCompanyName, companyNames).list();
|
||||||
if(CollUtil.isNotEmpty(existCompany)){
|
if (CollUtil.isNotEmpty(existCompany)) {
|
||||||
Set<String> existCompanyNames = existCompany.stream().map(u -> u.getAgencyCompanyName()).collect(Collectors.toSet());
|
Set<String> existCompanyNames = existCompany.stream().map(u -> u.getAgencyCompanyName()).collect(Collectors.toSet());
|
||||||
VUtils.trueThrow(true).throwMessage(STATE.ParamErr,StrUtil.join(",",existCompanyNames)+" 已存在数据库中");
|
VUtils.trueThrow(true).throwMessage(STATE.ParamErr, StrUtil.join(",", existCompanyNames) + " 已存在数据库中");
|
||||||
}
|
}
|
||||||
//检查区域编码在库中是否已存在
|
//检查区域编码在库中是否已存在
|
||||||
List<String> areaCodes = data.stream().filter(u->StrUtil.isNotBlank(u.getAreaCode())).map(u -> u.getAreaCode()).collect(Collectors.toList());
|
List<String> areaCodes = data.stream().filter(u -> StrUtil.isNotBlank(u.getAreaCode())).map(u -> u.getAreaCode()).collect(Collectors.toList());
|
||||||
if(CollUtil.isNotEmpty(areaCodes)){
|
if (CollUtil.isNotEmpty(areaCodes)) {
|
||||||
Set<String> areaCodeSet=new HashSet<>();
|
Set<String> areaCodeSet = new HashSet<>();
|
||||||
areaCodes.forEach(u->{
|
areaCodes.forEach(u -> {
|
||||||
areaCodeSet.addAll(StrUtil.split(u,","));
|
areaCodeSet.addAll(StrUtil.split(u, ","));
|
||||||
});
|
});
|
||||||
List<TBaseArea> existAreaList = areaService.lambdaQuery().in(TBaseArea::getAreaCode, areaCodeSet).list();
|
List<TBaseArea> existAreaList = areaService.lambdaQuery().in(TBaseArea::getAreaCode, areaCodeSet).list();
|
||||||
Set<String> existAreaCodeSet = existAreaList.stream().map(u -> u.getAreaCode()).collect(Collectors.toSet());
|
Set<String> existAreaCodeSet = existAreaList.stream().map(u -> u.getAreaCode()).collect(Collectors.toSet());
|
||||||
|
|
||||||
Set<String> difference = Sets.difference(areaCodeSet, existAreaCodeSet);
|
Set<String> difference = Sets.difference(areaCodeSet, existAreaCodeSet);
|
||||||
VUtils.trueThrow(CollUtil.isNotEmpty(difference)).throwMessage(STATE.ParamErr,StrUtil.join(",", difference)+"在区域列表中不存在");
|
VUtils.trueThrow(CollUtil.isNotEmpty(difference)).throwMessage(STATE.ParamErr, StrUtil.join(",", difference) + "在区域列表中不存在");
|
||||||
|
|
||||||
}
|
}
|
||||||
List<TBaseCustomer> result = Convert.toList(TBaseCustomer.class, data);
|
List<TBaseCustomer> result = Convert.toList(TBaseCustomer.class, data);
|
||||||
result.forEach(k->{
|
result.forEach(k -> {
|
||||||
k.setDataCreateUserNo(AdminUserUtil.getUserNo());
|
k.setDataCreateUserNo(AdminUserUtil.getUserNo());
|
||||||
k.setDataCreateUserName(AdminUserUtil.getUserName());
|
k.setDataCreateUserName(AdminUserUtil.getUserName());
|
||||||
k.setDataCreateTime(LocalDateTime.now());
|
k.setDataCreateTime(LocalDateTime.now());
|
||||||
// k.setDataModifyUserNo(AdminUserUtil.getUserNo());
|
// k.setDataModifyUserNo(AdminUserUtil.getUserNo());
|
||||||
// k.setDataModifyUserName(AdminUserUtil.getUserName());
|
// k.setDataModifyUserName(AdminUserUtil.getUserName());
|
||||||
// k.setDataModifyTime(LocalDateTime.now());
|
// k.setDataModifyTime(LocalDateTime.now());
|
||||||
k.setAgencyCompanyCode(UniqueSequenceGenerator.generateCode(Constant.CustomerCodePrefix) );
|
k.setAgencyCompanyCode(UniqueSequenceGenerator.generateCode(Constant.CustomerCodePrefix));
|
||||||
|
|
||||||
});
|
});
|
||||||
baseCustomerService.saveBatch(result);
|
baseCustomerService.saveBatch(result);
|
||||||
|
|
@ -100,57 +98,56 @@ public class AdminCustomerService {
|
||||||
/**
|
/**
|
||||||
* crm-同步数据
|
* crm-同步数据
|
||||||
*/
|
*/
|
||||||
public void syncFromCrm(String startDate, String endDate){
|
public void syncFromCrm(SyncFromCrmDTO dateParam) {
|
||||||
|
|
||||||
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
LocalDate stDate = LocalDate.parse(startDate, dateFormatter);
|
|
||||||
LocalDate edDate = LocalDate.parse(endDate, dateFormatter);
|
|
||||||
// 循环从起始日期到结束日期,每次增加一天
|
// 循环从起始日期到结束日期,每次增加一天
|
||||||
List<TBaseCustomer> result=new ArrayList<>();
|
List<TBaseCustomer> result = new ArrayList<>();
|
||||||
for (LocalDate date = stDate; !date.isAfter(edDate); date = date.plusDays(1)) {
|
// for (LocalDate date = stDate; !date.isAfter(edDate); date = date.plusDays(1)) {
|
||||||
result.clear();
|
|
||||||
|
|
||||||
List<CmrAgentResultVO> agentList = crmService.getAgent(date.toString());
|
|
||||||
if(CollUtil.isEmpty(agentList)){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Set<String> crmComanyCodes = agentList.stream().map(u -> u.getId()).collect(Collectors.toSet());
|
|
||||||
List<TBaseCustomer> crmCompanyList = baseCustomerService.lambdaQuery().in(TBaseCustomer::getAgencyCompanyCode, crmComanyCodes).list();
|
|
||||||
Map<String, TBaseCustomer> crmCompanyMap = crmCompanyList.stream().collect(Collectors.toMap(TBaseCustomer::getAgencyCompanyCode, cm -> cm));
|
|
||||||
|
|
||||||
agentList.forEach(u->{
|
List<CmrAgentResultVO> agentList = crmService.getAgent(dateParam);
|
||||||
TBaseCustomer ent = crmCompanyMap.get(u.getId());
|
if (CollUtil.isEmpty(agentList)) {
|
||||||
|
return;
|
||||||
if(Objects.nonNull(ent)){
|
|
||||||
ent.setDataModifyTime(LocalDateTime.now());
|
|
||||||
ent.setDataModifyUserNo("crm");
|
|
||||||
ent.setDataModifyUserName("crm");
|
|
||||||
}else {
|
|
||||||
ent=new TBaseCustomer();
|
|
||||||
ent.setDataCreateTime(LocalDateTime.now());
|
|
||||||
ent.setDataCreateUserNo("crm");
|
|
||||||
ent.setDataCreateUserName("crm");
|
|
||||||
ent.setDataModifyTime(LocalDateTime.now());
|
|
||||||
ent.setDataModifyUserNo("crm");
|
|
||||||
ent.setDataModifyUserName("crm");
|
|
||||||
}
|
|
||||||
ent.setAgencyCompanyCode(u.getId());
|
|
||||||
ent.setAgencyCompanyName(u.getName());
|
|
||||||
ent.setEnableState(u.getEnabled__c()?1:0);
|
|
||||||
ent.setAgencyManager(u.getAgentHead1__r().getName());
|
|
||||||
ent.setAgencyManagerCode(u.getAgentHead1__r().getId());
|
|
||||||
ent.setSapCustomerNo(u.getAgent_SAP__c());
|
|
||||||
ent.setSalesAuthorizationInfo(u.getSalesMessage__c());
|
|
||||||
ent.setSalesSupervisor(u.getSalesExecutive2__r().getName());
|
|
||||||
ent.setSalesSupervisorCode(u.getSalesExecutive2__r().getId());
|
|
||||||
ent.setServiceSupervisor(u.getServiceManager__r().getName());
|
|
||||||
ent.setServiceSupervisorCode(u.getServiceManager__r().getId());
|
|
||||||
result.add(ent);
|
|
||||||
});
|
|
||||||
if(CollUtil.isNotEmpty(result)){
|
|
||||||
baseCustomerService.saveOrUpdateBatch(result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Set<String> crmComanyCodes = agentList.stream().map(u -> u.getId()).collect(Collectors.toSet());
|
||||||
|
List<TBaseCustomer> crmCompanyList = baseCustomerService.lambdaQuery().in(TBaseCustomer::getAgencyCompanyCode, crmComanyCodes).list();
|
||||||
|
Map<String, TBaseCustomer> crmCompanyMap = crmCompanyList.stream().collect(Collectors.toMap(TBaseCustomer::getAgencyCompanyCode, cm -> cm));
|
||||||
|
|
||||||
|
agentList.forEach(u -> {
|
||||||
|
TBaseCustomer ent = crmCompanyMap.get(u.getId());
|
||||||
|
|
||||||
|
if (Objects.nonNull(ent)) {
|
||||||
|
ent.setDataModifyTime(LocalDateTime.now());
|
||||||
|
ent.setDataModifyUserNo("crm");
|
||||||
|
ent.setDataModifyUserName("crm");
|
||||||
|
} else {
|
||||||
|
ent = new TBaseCustomer();
|
||||||
|
ent.setDataCreateTime(LocalDateTime.now());
|
||||||
|
ent.setDataCreateUserNo("crm");
|
||||||
|
ent.setDataCreateUserName("crm");
|
||||||
|
ent.setDataModifyTime(LocalDateTime.now());
|
||||||
|
ent.setDataModifyUserNo("crm");
|
||||||
|
ent.setDataModifyUserName("crm");
|
||||||
|
}
|
||||||
|
ent.setAgencyCompanyCode(u.getId());
|
||||||
|
ent.setAgencyCompanyName(u.getName());
|
||||||
|
ent.setEnableState(u.getEnabled__c() ? 1 : 0);
|
||||||
|
ent.setAgencyManager(u.getAgentHead1__r().getName());
|
||||||
|
ent.setAgencyManagerCode(u.getAgentHead1__r().getId());
|
||||||
|
ent.setSapCustomerNo(u.getAgent_SAP__c());
|
||||||
|
ent.setSalesAuthorizationInfo(u.getSalesMessage__c());
|
||||||
|
ent.setSalesSupervisor(u.getSalesExecutive2__r().getName());
|
||||||
|
ent.setSalesSupervisorCode(u.getSalesExecutive2__r().getId());
|
||||||
|
ent.setServiceSupervisor(u.getServiceManager__r().getName());
|
||||||
|
ent.setServiceSupervisorCode(u.getServiceManager__r().getId());
|
||||||
|
result.add(ent);
|
||||||
|
});
|
||||||
|
if (CollUtil.isNotEmpty(result)) {
|
||||||
|
baseCustomerService.saveOrUpdateBatch(result);
|
||||||
|
}
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.nflg.mobilebroken.admin.constant.DeviceSourceFromEnum;
|
import com.nflg.mobilebroken.admin.constant.DeviceSourceFromEnum;
|
||||||
import com.nflg.mobilebroken.admin.pojo.dto.DeviceDTO;
|
import com.nflg.mobilebroken.admin.pojo.dto.DeviceDTO;
|
||||||
|
import com.nflg.mobilebroken.admin.pojo.dto.SyncFromCrmDTO;
|
||||||
import com.nflg.mobilebroken.admin.pojo.vo.CmrDeviceResultVO;
|
import com.nflg.mobilebroken.admin.pojo.vo.CmrDeviceResultVO;
|
||||||
import com.nflg.mobilebroken.admin.pojo.vo.DeviceExcelVO;
|
import com.nflg.mobilebroken.admin.pojo.vo.DeviceExcelVO;
|
||||||
import com.nflg.mobilebroken.common.constant.STATE;
|
import com.nflg.mobilebroken.common.constant.STATE;
|
||||||
|
|
@ -61,7 +62,7 @@ public class AdminDeviceService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void update(DeviceDTO deviceDTO){
|
public void update(DeviceDTO deviceDTO) {
|
||||||
Device device = Convert.convert(Device.class, deviceDTO);
|
Device device = Convert.convert(Device.class, deviceDTO);
|
||||||
device.setUpdateBy(AdminUserUtil.getUserName());
|
device.setUpdateBy(AdminUserUtil.getUserName());
|
||||||
device.setUpdateTime(LocalDateTime.now());
|
device.setUpdateTime(LocalDateTime.now());
|
||||||
|
|
@ -74,20 +75,21 @@ public class AdminDeviceService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入
|
* 导入
|
||||||
|
*
|
||||||
* @param data
|
* @param data
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void importData(List<DeviceExcelVO> data){
|
public void importData(List<DeviceExcelVO> data) {
|
||||||
List<Device> devices = Convert.toList(Device.class, data);
|
List<Device> devices = Convert.toList(Device.class, data);
|
||||||
List<DeviceExcelVO> deviceNoBlankList = data.stream().filter(u -> StrUtil.isBlank(u.getDeviceNo())).collect(Collectors.toList());
|
List<DeviceExcelVO> deviceNoBlankList = data.stream().filter(u -> StrUtil.isBlank(u.getDeviceNo())).collect(Collectors.toList());
|
||||||
VUtils.trueThrow(CollUtil.isNotEmpty(deviceNoBlankList)).throwMessage(STATE.ParamErr,"数据中存在设备编号为空的数据");
|
VUtils.trueThrow(CollUtil.isNotEmpty(deviceNoBlankList)).throwMessage(STATE.ParamErr, "数据中存在设备编号为空的数据");
|
||||||
List<String> deviceNos = data.stream().map(u -> u.getDeviceNo()).collect(Collectors.toList());
|
List<String> deviceNos = data.stream().map(u -> u.getDeviceNo()).collect(Collectors.toList());
|
||||||
List<Device> existDeviceNos = deviceService.lambdaQuery().in(Device::getDeviceNo, deviceNos).list();
|
List<Device> existDeviceNos = deviceService.lambdaQuery().in(Device::getDeviceNo, deviceNos).list();
|
||||||
if(CollUtil.isNotEmpty(existDeviceNos)){
|
if (CollUtil.isNotEmpty(existDeviceNos)) {
|
||||||
List<String> existDNos = existDeviceNos.stream().map(u -> u.getDeviceNo()).collect(Collectors.toList());
|
List<String> existDNos = existDeviceNos.stream().map(u -> u.getDeviceNo()).collect(Collectors.toList());
|
||||||
VUtils.trueThrow(true).throwMessage(STATE.ParamErr,StrUtil.join(",",existDNos)+"设备编号在数据中已存在");
|
VUtils.trueThrow(true).throwMessage(STATE.ParamErr, StrUtil.join(",", existDNos) + "设备编号在数据中已存在");
|
||||||
}
|
}
|
||||||
for ( Device device: devices) {
|
for (Device device : devices) {
|
||||||
device.setId(null);
|
device.setId(null);
|
||||||
device.setSourceFrom(DeviceSourceFromEnum.MANUAL_ADD.getSourceKey());
|
device.setSourceFrom(DeviceSourceFromEnum.MANUAL_ADD.getSourceKey());
|
||||||
device.setCreateBy(AdminUserUtil.getUserName());
|
device.setCreateBy(AdminUserUtil.getUserName());
|
||||||
|
|
@ -110,68 +112,68 @@ public class AdminDeviceService {
|
||||||
/**
|
/**
|
||||||
* 同步CRM 数据
|
* 同步CRM 数据
|
||||||
*
|
*
|
||||||
* @param startDate
|
* @param dateParam
|
||||||
* @param endDate
|
* @param dateParam
|
||||||
*/
|
*/
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void syncFormCrm(String startDate, String endDate) {
|
public void syncFormCrm(SyncFromCrmDTO dateParam) {
|
||||||
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
// DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
LocalDate stDate = LocalDate.parse(startDate, dateFormatter);
|
// LocalDate stDate = LocalDate.parse(startDate, dateFormatter);
|
||||||
LocalDate edDate = LocalDate.parse(endDate, dateFormatter);
|
// LocalDate edDate = LocalDate.parse(endDate, dateFormatter);
|
||||||
// 循环从起始日期到结束日期,每次增加一天
|
// 循环从起始日期到结束日期,每次增加一天
|
||||||
List<Device> result = new ArrayList<>();
|
List<Device> result = new ArrayList<>();
|
||||||
for (LocalDate date = stDate; !date.isAfter(edDate); date = date.plusDays(1)) {
|
// for (LocalDate date = stDate; !date.isAfter(edDate); date = date.plusDays(1)) {
|
||||||
result.clear();
|
|
||||||
List<CmrDeviceResultVO> crmDeviceList = crmService.getAsset(date.toString());
|
|
||||||
if(CollUtil.isEmpty(crmDeviceList)){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Set<String> crmDeviceNos = crmDeviceList.stream().map(u -> u.getMachine_Number__c()).collect(Collectors.toSet());
|
|
||||||
|
|
||||||
List<Device> deviceList = deviceService.lambdaQuery().in(Device::getDeviceNo, crmDeviceNos).list();
|
|
||||||
Map<String, Device> deviceMap = deviceList.stream().collect(Collectors.toMap(Device::getDeviceNo, device -> device));
|
|
||||||
|
|
||||||
crmDeviceList.forEach(u -> {
|
|
||||||
Device ent = deviceMap.get(u.getMachine_Number__c());
|
|
||||||
if (Objects.nonNull(ent)) {
|
|
||||||
ent = deviceMap.get(u.getMachine_Number__c());
|
|
||||||
ent.setUpdateBy("crm");
|
|
||||||
ent.setUpdateTime(LocalDateTime.now());
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ent=new Device();
|
|
||||||
ent.setUpdateBy("crm");
|
|
||||||
ent.setUpdateTime(LocalDateTime.now());
|
|
||||||
ent.setCreateBy("crm");
|
|
||||||
ent.setCreateTime(LocalDateTime.now());
|
|
||||||
}
|
|
||||||
ent.setDeviceNo(u.getMachine_Number__c());
|
|
||||||
ent.setDeviceType(u.getAssetProductLine3__c());
|
|
||||||
ent.setDeviceTypeSub(u.getAssetProductLine4__c());
|
|
||||||
ent.setModelNo(u.getProductLine5__c());
|
|
||||||
if(StrUtil.isNotBlank(u.getAccount())){
|
|
||||||
JSONObject jsonObject = JSONObject.parseObject(u.getAccount());
|
|
||||||
String cname = jsonObject.getString("Name");
|
|
||||||
ent.setCustomerName(cname);
|
|
||||||
}
|
|
||||||
|
|
||||||
ent.setSourceFrom(DeviceSourceFromEnum.FROM_CRM.getSourceKey());
|
|
||||||
ent.setCustomerId(0);
|
|
||||||
ent.setDeviceState(0);
|
|
||||||
result.add(ent);
|
|
||||||
});
|
|
||||||
if(CollUtil.isNotEmpty(result)){
|
|
||||||
|
|
||||||
//将设备类型放入-设备类型表维护客户质量管理人
|
|
||||||
List<String> deviceTypes = result.stream().map(u -> u.getDeviceType()).collect(Collectors.toList());
|
|
||||||
adminDeviceTypeService.batchAddDeviceType(deviceTypes);
|
|
||||||
//将设备机型
|
|
||||||
List<String> models = result.stream().map(u -> u.getModelNo()).collect(Collectors.toList());
|
|
||||||
adminDeviceComponentService.batchAddModelNo(models);
|
|
||||||
|
|
||||||
deviceService.saveOrUpdateBatch(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
List<CmrDeviceResultVO> crmDeviceList = crmService.getAsset(dateParam);
|
||||||
|
if (CollUtil.isEmpty(crmDeviceList)) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
Set<String> crmDeviceNos = crmDeviceList.stream().map(u -> u.getMachine_Number__c()).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
List<Device> deviceList = deviceService.lambdaQuery().in(Device::getDeviceNo, crmDeviceNos).list();
|
||||||
|
Map<String, Device> deviceMap = deviceList.stream().collect(Collectors.toMap(Device::getDeviceNo, device -> device));
|
||||||
|
|
||||||
|
crmDeviceList.forEach(u -> {
|
||||||
|
Device ent = deviceMap.get(u.getMachine_Number__c());
|
||||||
|
if (Objects.nonNull(ent)) {
|
||||||
|
ent = deviceMap.get(u.getMachine_Number__c());
|
||||||
|
ent.setUpdateBy("crm");
|
||||||
|
ent.setUpdateTime(LocalDateTime.now());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ent = new Device();
|
||||||
|
ent.setUpdateBy("crm");
|
||||||
|
ent.setUpdateTime(LocalDateTime.now());
|
||||||
|
ent.setCreateBy("crm");
|
||||||
|
ent.setCreateTime(LocalDateTime.now());
|
||||||
|
}
|
||||||
|
ent.setDeviceNo(u.getMachine_Number__c());
|
||||||
|
ent.setDeviceType(u.getAssetProductLine3__c());
|
||||||
|
ent.setDeviceTypeSub(u.getAssetProductLine4__c());
|
||||||
|
ent.setModelNo(u.getProductLine5__c());
|
||||||
|
if (StrUtil.isNotBlank(u.getAccount())) {
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(u.getAccount());
|
||||||
|
String cname = jsonObject.getString("Name");
|
||||||
|
ent.setCustomerName(cname);
|
||||||
|
}
|
||||||
|
|
||||||
|
ent.setSourceFrom(DeviceSourceFromEnum.FROM_CRM.getSourceKey());
|
||||||
|
ent.setCustomerId(0);
|
||||||
|
ent.setDeviceState(0);
|
||||||
|
result.add(ent);
|
||||||
|
});
|
||||||
|
if (CollUtil.isNotEmpty(result)) {
|
||||||
|
|
||||||
|
//将设备类型放入-设备类型表维护客户质量管理人
|
||||||
|
List<String> deviceTypes = result.stream().map(u -> u.getDeviceType()).collect(Collectors.toList());
|
||||||
|
adminDeviceTypeService.batchAddDeviceType(deviceTypes);
|
||||||
|
//将设备机型
|
||||||
|
List<String> models = result.stream().map(u -> u.getModelNo()).collect(Collectors.toList());
|
||||||
|
adminDeviceComponentService.batchAddModelNo(models);
|
||||||
|
|
||||||
|
deviceService.saveOrUpdateBatch(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.nflg.mobilebroken.admin.pojo.dto.CrmGetTokenResultDTO;
|
import com.nflg.mobilebroken.admin.pojo.dto.CrmGetTokenResultDTO;
|
||||||
|
import com.nflg.mobilebroken.admin.pojo.dto.SyncFromCrmDTO;
|
||||||
import com.nflg.mobilebroken.admin.pojo.vo.CmrAgentResultVO;
|
import com.nflg.mobilebroken.admin.pojo.vo.CmrAgentResultVO;
|
||||||
import com.nflg.mobilebroken.admin.pojo.vo.CmrDeviceResultVO;
|
import com.nflg.mobilebroken.admin.pojo.vo.CmrDeviceResultVO;
|
||||||
import com.nflg.mobilebroken.common.constant.STATE;
|
import com.nflg.mobilebroken.common.constant.STATE;
|
||||||
|
|
@ -90,17 +91,17 @@ public class CrmService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取代理商列表
|
* 获取代理商列表
|
||||||
* @param date yyyy-MM-dd
|
* @param dateParam yyyy-MM-dd
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<CmrAgentResultVO> getAgent(String date) {
|
public List<CmrAgentResultVO> getAgent(SyncFromCrmDTO dateParam) {
|
||||||
try {
|
try {
|
||||||
HttpUtils httpUtils = new HttpUtils();
|
HttpUtils httpUtils = new HttpUtils();
|
||||||
Map<String, String> paramMp = new HashMap<>();
|
// Map<String, String> paramMp = new HashMap<>();
|
||||||
Map<String, String> reBody = new HashMap<>();
|
// Map<String, String> reBody = new HashMap<>();
|
||||||
reBody.put("CrLsDate", date);
|
// reBody.put("CrLsDate", date);
|
||||||
String token = StrUtil.join(" ", "Bearer", getToken());
|
String token = StrUtil.join(" ", "Bearer", getToken());
|
||||||
String orderResult = httpUtils.doPost(getAgentUrl, JSON.toJSONString(reBody), token);
|
String orderResult = httpUtils.doPost(getAgentUrl, JSON.toJSONString(dateParam), token);
|
||||||
JSONObject jsonObject = JSONObject.parseObject(orderResult);
|
JSONObject jsonObject = JSONObject.parseObject(orderResult);
|
||||||
String code = jsonObject.getString("code");
|
String code = jsonObject.getString("code");
|
||||||
if (Objects.equals(code, "0")) {
|
if (Objects.equals(code, "0")) {
|
||||||
|
|
@ -117,14 +118,14 @@ public class CrmService {
|
||||||
* 获取设备
|
* 获取设备
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public List<CmrDeviceResultVO> getAsset(String startDate) {
|
public List<CmrDeviceResultVO> getAsset(SyncFromCrmDTO dateParam) {
|
||||||
try {
|
try {
|
||||||
HttpUtils httpUtils = new HttpUtils();
|
HttpUtils httpUtils = new HttpUtils();
|
||||||
Map<String, String> paramMp = new HashMap<>();
|
Map<String, String> paramMp = new HashMap<>();
|
||||||
Map<String, String> reBody = new HashMap<>();
|
Map<String, String> reBody = new HashMap<>();
|
||||||
reBody.put("CrLsDate", startDate);
|
// reBody.put("CrLsDate", startDate);
|
||||||
String token = StrUtil.join(" ", "Bearer", getToken());
|
String token = StrUtil.join(" ", "Bearer", getToken());
|
||||||
String orderResult = httpUtils.doPost(getDeviceUrl, JSON.toJSONString(reBody), token);
|
String orderResult = httpUtils.doPost(getDeviceUrl, JSON.toJSONString(dateParam), token);
|
||||||
JSONObject jsonObject = JSONObject.parseObject(orderResult);
|
JSONObject jsonObject = JSONObject.parseObject(orderResult);
|
||||||
String code = jsonObject.getString("code");
|
String code = jsonObject.getString("code");
|
||||||
if (Objects.equals(code, "0")) {
|
if (Objects.equals(code, "0")) {
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.date.DatePattern;
|
import cn.hutool.core.date.DatePattern;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.nflg.mobilebroken.admin.pojo.dto.SyncFromCrmDTO;
|
||||||
import com.nflg.mobilebroken.admin.pojo.dto.TiketTimeoutDTO;
|
import com.nflg.mobilebroken.admin.pojo.dto.TiketTimeoutDTO;
|
||||||
import com.nflg.mobilebroken.admin.publisher.TicketEventPublisher;
|
import com.nflg.mobilebroken.admin.publisher.TicketEventPublisher;
|
||||||
import com.nflg.mobilebroken.admin.service.SsePushService;
|
import com.nflg.mobilebroken.admin.service.SsePushService;
|
||||||
|
|
@ -207,7 +208,7 @@ public class TicketScheduledTasks {
|
||||||
LocalDate previousDate = currentDate.minusDays(1);
|
LocalDate previousDate = currentDate.minusDays(1);
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
String cdate = formatter.format(previousDate);
|
String cdate = formatter.format(previousDate);
|
||||||
adminCustomerService.syncFromCrm(cdate,cdate);
|
adminCustomerService.syncFromCrm(new SyncFromCrmDTO(cdate,cdate) );
|
||||||
log.info("同步代理商公司-成功");
|
log.info("同步代理商公司-成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -222,7 +223,7 @@ public class TicketScheduledTasks {
|
||||||
LocalDate previousDate = currentDate.minusDays(1);
|
LocalDate previousDate = currentDate.minusDays(1);
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
String cdate = formatter.format(previousDate);
|
String cdate = formatter.format(previousDate);
|
||||||
adminDeviceService.syncFormCrm(cdate,cdate);
|
adminDeviceService.syncFormCrm(new SyncFromCrmDTO(cdate,cdate) );
|
||||||
log.info("同步CRM设备-成功");
|
log.info("同步CRM设备-成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.nflg.mobilebroken.admin.AdminApplication;
|
import com.nflg.mobilebroken.admin.AdminApplication;
|
||||||
import com.nflg.mobilebroken.admin.annotation.ApiMark;
|
import com.nflg.mobilebroken.admin.annotation.ApiMark;
|
||||||
|
import com.nflg.mobilebroken.admin.pojo.dto.SyncFromCrmDTO;
|
||||||
import com.nflg.mobilebroken.admin.service.AdminCustomerService;
|
import com.nflg.mobilebroken.admin.service.AdminCustomerService;
|
||||||
import com.nflg.mobilebroken.admin.service.AdminDeviceService;
|
import com.nflg.mobilebroken.admin.service.AdminDeviceService;
|
||||||
import com.nflg.mobilebroken.admin.service.CrmService;
|
import com.nflg.mobilebroken.admin.service.CrmService;
|
||||||
|
|
@ -32,9 +33,14 @@ public class ControllerTest {
|
||||||
@Resource
|
@Resource
|
||||||
AdminCustomerService customerService;
|
AdminCustomerService customerService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
AdminDeviceService deviceService;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testToken(){
|
public void testToken(){
|
||||||
customerService.syncFromCrm("2025-02-21","2025-02-22"); //2020-05-21
|
// customerService.syncFromCrm(new SyncFromCrmDTO("2025-02-21","2025-02-25") ); //2020-05-21
|
||||||
|
|
||||||
|
deviceService.syncFormCrm(new SyncFromCrmDTO("2025-02-21","2025-02-25") );
|
||||||
// String qu = UniqueSequenceGenerator.generateCode("QU");
|
// String qu = UniqueSequenceGenerator.generateCode("QU");
|
||||||
// System.out.println(qu);
|
// System.out.println(qu);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.nflg.mobilebroken.cfs.config;
|
||||||
|
|
||||||
|
import com.nflg.mobilebroken.cfs.interceptor.LanguageInterceptor;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||||
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class WebConfig implements WebMvcConfigurer {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private LanguageInterceptor languageInterceptor;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
|
// 注册拦截器并指定拦截路径
|
||||||
|
registry.addInterceptor(languageInterceptor).addPathPatterns("/**");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.nflg.mobilebroken.cfs.interceptor;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.nflg.mobilebroken.common.util.MultilingualUtil;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class LanguageInterceptor implements HandlerInterceptor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||||
|
// 从请求头中获取 language 参数
|
||||||
|
String language = request.getHeader("language");
|
||||||
|
if(StrUtil.isNotBlank(language)){
|
||||||
|
MultilingualUtil.setLanguage(language);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||||
|
// 请求完成后清理 ThreadLocal,防止内存泄漏
|
||||||
|
MultilingualUtil.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue