Merge branch 'develop' into feature/ticket-add-solution

This commit is contained in:
曹鹏飞 2025-03-23 23:22:00 +08:00
commit 84b9043cb4
10 changed files with 199 additions and 141 deletions

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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 {
/** /**

View File

@ -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,6 +42,7 @@ public class AdminCustomerService {
/** /**
* 导入 * 导入
*
* @param data * @param data
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -100,19 +98,18 @@ 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());
List<CmrAgentResultVO> agentList = crmService.getAgent(dateParam);
if (CollUtil.isEmpty(agentList)) { if (CollUtil.isEmpty(agentList)) {
continue; return;
} }
Set<String> crmComanyCodes = agentList.stream().map(u -> u.getId()).collect(Collectors.toSet()); Set<String> crmComanyCodes = agentList.stream().map(u -> u.getId()).collect(Collectors.toSet());
List<TBaseCustomer> crmCompanyList = baseCustomerService.lambdaQuery().in(TBaseCustomer::getAgencyCompanyCode, crmComanyCodes).list(); List<TBaseCustomer> crmCompanyList = baseCustomerService.lambdaQuery().in(TBaseCustomer::getAgencyCompanyCode, crmComanyCodes).list();
@ -150,7 +147,7 @@ public class AdminCustomerService {
if (CollUtil.isNotEmpty(result)) { if (CollUtil.isNotEmpty(result)) {
baseCustomerService.saveOrUpdateBatch(result); baseCustomerService.saveOrUpdateBatch(result);
} }
} // }
} }

View File

@ -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;
@ -74,6 +75,7 @@ public class AdminDeviceService {
/** /**
* 导入 * 导入
*
* @param data * @param data
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -110,21 +112,21 @@ 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()); List<CmrDeviceResultVO> crmDeviceList = crmService.getAsset(dateParam);
if (CollUtil.isEmpty(crmDeviceList)) { if (CollUtil.isEmpty(crmDeviceList)) {
continue; return;
} }
Set<String> crmDeviceNos = crmDeviceList.stream().map(u -> u.getMachine_Number__c()).collect(Collectors.toSet()); Set<String> crmDeviceNos = crmDeviceList.stream().map(u -> u.getMachine_Number__c()).collect(Collectors.toSet());
@ -172,6 +174,6 @@ public class AdminDeviceService {
deviceService.saveOrUpdateBatch(result); deviceService.saveOrUpdateBatch(result);
} }
} // }
} }
} }

View File

@ -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")) {

View File

@ -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设备-成功");
} }

View File

@ -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);

View File

@ -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("/**");
}
}

View File

@ -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();
}
}