From 2ef2b1358a52e366d33954f5a5424b27f00a8e8f Mon Sep 17 00:00:00 2001 From: wujingtao Date: Thu, 12 May 2022 10:43:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=BA=BF=E7=B4=A2=E9=80=9A=E8=AF=9D?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/report/api/ReportController.java | 6 +++ .../entity/dto/CallRecordDetailsDTO.java | 45 +++++++++++++++++++ .../report/service/QueryReportService.java | 9 ++++ .../service/impl/QueryReportServiceImpl.java | 31 +++++++++++++ .../dao/AllCallInfoRepository.java | 7 +++ 5 files changed, 98 insertions(+) create mode 100644 manage/ad-platform-management/src/main/java/com/baiye/modules/report/entity/dto/CallRecordDetailsDTO.java diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java index 8b34a455..657a2ebf 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java @@ -82,4 +82,10 @@ public class ReportController { public CommonResponse getTurnOnIds(@RequestBody List clueIds) { return queryReportService.getTurnOnIds(clueIds); } + + @GetMapping("/report/details") + @ApiOperation("获取通话记录详情") + public CommonResponse getCallRecordDetails(@RequestParam(value = "clueId") Long clueId) { + return queryReportService.getCallRecordDetails(clueId); + } } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/entity/dto/CallRecordDetailsDTO.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/entity/dto/CallRecordDetailsDTO.java new file mode 100644 index 00000000..830c5c8f --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/entity/dto/CallRecordDetailsDTO.java @@ -0,0 +1,45 @@ +package com.baiye.modules.report.entity.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * @author wujingtao + * @date 2022/05/12 + */ +@Data +public class CallRecordDetailsDTO { + /** + * 线索id + */ + private Long clueId; + /** + * 线索名称 + */ + private String clueName; + /** + * 呼叫人id + */ + private Long memberId; + /** + * 呼叫人 名称 + */ + private String memberName; + /** + * 呼叫时长 + */ + private Integer duration; + /** + * 录音地址 + */ + private String recordFileDownloadUrl; + /** + * 呼叫时间 + */ + private Date creatTime; + /** + * 呼叫状态 + */ + private Integer status; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java index 56d25c64..4e0dbe52 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java @@ -76,8 +76,17 @@ public interface QueryReportService { /** * 统计接通过的线索 + * * @param clueIds * @return */ CommonResponse getTurnOnIds(List clueIds); + + /** + * 查询线索的通话详情 + * + * @param clueId + * @return + */ + CommonResponse getCallRecordDetails(Long clueId); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java index 760cabf8..27c96da5 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java @@ -2,6 +2,7 @@ package com.baiye.modules.report.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; @@ -18,10 +19,12 @@ import com.baiye.modules.report.dao.TaskReportRepository; import com.baiye.modules.report.dao.UserReportRepository; import com.baiye.modules.report.entity.TaskReport; import com.baiye.modules.report.entity.UserReport; +import com.baiye.modules.report.entity.dto.CallRecordDetailsDTO; import com.baiye.modules.report.entity.dto.StatisticalReportDTO; import com.baiye.modules.report.entity.dto.UploadTaskDTO; import com.baiye.modules.report.entity.vo.MemberInfoVO; import com.baiye.modules.report.service.QueryReportService; +import com.baiye.modules.system.domain.Clue; import com.baiye.modules.system.domain.Organize; import com.baiye.modules.system.domain.Task; import com.baiye.modules.system.domain.User; @@ -81,6 +84,7 @@ public class QueryReportServiceImpl implements QueryReportService { MemberInfoVO messageInfo = getMessageInfo(beginOfDay, endOfDay, callClueInfos); return CommonResponse.createBySuccess(messageInfo); } + /** * 根据任务id和时间 统计呼叫信息 * @@ -467,6 +471,33 @@ public class QueryReportServiceImpl implements QueryReportService { return CommonResponse.createBySuccess(list); } + @Override + public CommonResponse getCallRecordDetails(Long clueId) { + + //查询线索的所有通话记录 + List allByClueId = allCallInfoRepository.findAllByClueId(clueId); + List listDto = Convert.toList(CallRecordDetailsDTO.class, allByClueId); + + //资源信息 + Clue clue = sourceClueClient.queryDetails(clueId).getBody(); + String clueName = ""; + if (clue != null) { + clueName = clue.getName(); + } + + List memberIds = allByClueId.stream().distinct().map(AllCallInfo::getMemberId).collect(Collectors.toList()); + Map memberMap = new HashMap<>(); + + for (CallRecordDetailsDTO info : listDto) { + if (memberMap.containsKey(info.getMemberId())) { + info.setMemberName(memberMap.get(info.getMemberId())); + info.setClueName(clueName); + } + } + + return CommonResponse.createBySuccess(listDto); + } + /** * 对传入得条件进行处理 */ diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/AllCallInfoRepository.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/AllCallInfoRepository.java index 64205db2..8259e04e 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/AllCallInfoRepository.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/AllCallInfoRepository.java @@ -81,4 +81,11 @@ public interface AllCallInfoRepository extends JpaRepository, */ @Query(value = "select clue_id from tb_call_info where clue_id in ?1 and status = ?2", nativeQuery = true) List queryIdsByStatusAndClueId(List clueIds, Integer status); + + /** + * 查询线索的所有记录 + * @param clueId + * @return + */ + List findAllByClueId(Long clueId); } From 93412514ae92a558df7f7183591c51f0961bd7cc Mon Sep 17 00:00:00 2001 From: wujingtao Date: Fri, 13 May 2022 14:38:20 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E9=80=9A=E8=AF=9D?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/report/api/ReportController.java | 6 ++ .../entity/dto/CallRecordDetailsDTO.java | 15 +++- .../report/service/QueryReportService.java | 7 ++ .../service/impl/QueryReportServiceImpl.java | 74 +++++++++++++++---- .../api/TelephoneCallController.java | 5 -- .../dao/AllCallInfoRepository.java | 13 ---- .../service/TelephoneCallService.java | 10 --- .../impl/TelephoneCallServiceImpl.java | 19 ----- 8 files changed, 87 insertions(+), 62 deletions(-) diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java index 657a2ebf..221b468d 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java @@ -88,4 +88,10 @@ public class ReportController { public CommonResponse getCallRecordDetails(@RequestParam(value = "clueId") Long clueId) { return queryReportService.getCallRecordDetails(clueId); } + + @GetMapping("/download/details") + @ApiOperation("下载通话记录详情") + public void downloadCallRecordDetails(HttpServletResponse response, Long clueId) { + queryReportService.downloadCallRecordDetails(response,clueId); + } } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/entity/dto/CallRecordDetailsDTO.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/entity/dto/CallRecordDetailsDTO.java index 830c5c8f..8fdf3044 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/entity/dto/CallRecordDetailsDTO.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/entity/dto/CallRecordDetailsDTO.java @@ -1,5 +1,7 @@ package com.baiye.modules.report.entity.dto; +import com.alibaba.excel.annotation.ExcelIgnore; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import java.util.Date; @@ -13,33 +15,44 @@ public class CallRecordDetailsDTO { /** * 线索id */ + @ExcelIgnore private Long clueId; /** * 线索名称 */ + @ExcelProperty(value = "线索名称", index = 0) private String clueName; /** * 呼叫人id */ + @ExcelIgnore private Long memberId; /** * 呼叫人 名称 */ + @ExcelProperty(value = "跟进人", index = 1) private String memberName; /** * 呼叫时长 */ + @ExcelProperty(value = "通话时长(秒)", index = 3) private Integer duration; /** * 录音地址 */ + @ExcelProperty(value = "录音地址", index = 5) private String recordFileDownloadUrl; /** * 呼叫时间 */ - private Date creatTime; + @ExcelProperty(value = "呼叫时间", index = 4) + private Date createTime; /** * 呼叫状态 */ + @ExcelIgnore private Integer status; + + @ExcelProperty(value = "状态", index = 2) + private String statusValue; } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java index 4e0dbe52..267281d5 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java @@ -89,4 +89,11 @@ public interface QueryReportService { * @return */ CommonResponse getCallRecordDetails(Long clueId); + + /** + * 导出线索的通话记录详情 + * @param response + * @param clueId + */ + void downloadCallRecordDetails(HttpServletResponse response, Long clueId); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java index 27c96da5..27d29cd0 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java @@ -473,29 +473,75 @@ public class QueryReportServiceImpl implements QueryReportService { @Override public CommonResponse getCallRecordDetails(Long clueId) { - + Map map = new HashMap<>(8); + int usrNum = 0; + int turnOnNum = 0; + int validNum = 0; //查询线索的所有通话记录 List allByClueId = allCallInfoRepository.findAllByClueId(clueId); - List listDto = Convert.toList(CallRecordDetailsDTO.class, allByClueId); + List listDto = new ArrayList<>(); + if (CollUtil.isNotEmpty(allByClueId)) { + listDto = Convert.toList(CallRecordDetailsDTO.class, allByClueId); + //资源信息 + Clue clue = sourceClueClient.queryDetails(clueId).getBody(); + String clueName = ""; + if (clue != null) { + clueName = clue.getName(); + } + + Set memberIds = allByClueId.stream().map(AllCallInfo::getMemberId).collect(Collectors.toSet()); + Map memberMap = new HashMap<>(); - //资源信息 - Clue clue = sourceClueClient.queryDetails(clueId).getBody(); - String clueName = ""; - if (clue != null) { - clueName = clue.getName(); + for (CallRecordDetailsDTO info : listDto) { + if (memberMap.containsKey(info.getMemberId())) { + info.setMemberName(memberMap.get(info.getMemberId())); + } + info.setClueName(clueName); + //接通 + if (info.getStatus() == DefaultNumberConstants.TWO_NUMBER) { + turnOnNum++; + //有效 + if (info.getDuration() > DefaultNumberConstants.TEN_NUMBER) { + validNum++; + } + } + } + usrNum = listDto.size(); } - List memberIds = allByClueId.stream().distinct().map(AllCallInfo::getMemberId).collect(Collectors.toList()); - Map memberMap = new HashMap<>(); + map.put("usrNum", usrNum); + map.put("turnOnNum", turnOnNum); + map.put("validNum", validNum); + map.put("data", listDto); + return CommonResponse.createBySuccess(map); + } - for (CallRecordDetailsDTO info : listDto) { - if (memberMap.containsKey(info.getMemberId())) { - info.setMemberName(memberMap.get(info.getMemberId())); + @Override + public void downloadCallRecordDetails(HttpServletResponse response, Long clueId) { + //查询线索的所有通话记录 + List allByClueId = allCallInfoRepository.findAllByClueId(clueId); + List listDto = new ArrayList<>(); + if (CollUtil.isNotEmpty(allByClueId)) { + listDto = Convert.toList(CallRecordDetailsDTO.class, allByClueId); + //资源信息 + Clue clue = sourceClueClient.queryDetails(clueId).getBody(); + String clueName = ""; + if (clue != null) { + clueName = clue.getName(); + } + //用户信息 + Set memberIds = allByClueId.stream().map(AllCallInfo::getMemberId).collect(Collectors.toSet()); + Map memberMap = new HashMap<>(); + + for (CallRecordDetailsDTO info : listDto) { + if (memberMap.containsKey(info.getMemberId())) { + info.setMemberName(memberMap.get(info.getMemberId())); + } info.setClueName(clueName); + info.setStatusValue(info.getStatus() == 2 ? "接通" : "未接通"); } } - - return CommonResponse.createBySuccess(listDto); + ExportExcelUtil.downloadEasyExcel(response, CallRecordDetailsDTO.class, listDto); } /** diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/api/TelephoneCallController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/api/TelephoneCallController.java index 9950f3d4..b42e93df 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/api/TelephoneCallController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/api/TelephoneCallController.java @@ -129,11 +129,6 @@ public class TelephoneCallController { return telephoneCallService.doubleCallStop(telephoneCallStopDTO); } - @GetMapping("/call/record") - @ApiOperation("获取通话记录和录音地址") - public CommonResponse getCallRecord(@RequestParam(value = "clueId") Long clueId, @RequestParam(value = "memberId") Long memberId) { - return telephoneCallService.getCallRecord(clueId, memberId); - } @PostMapping("/roll/cdrUrl") @ApiOperation("点呼系统回调话单") diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/AllCallInfoRepository.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/AllCallInfoRepository.java index 8259e04e..622f1b0c 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/AllCallInfoRepository.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/AllCallInfoRepository.java @@ -29,19 +29,6 @@ public interface AllCallInfoRepository extends JpaRepository, @Query(value = "update AllCallInfo d set d.status =?1 where d.sessionId = ?2") void updateByStatus(Integer status, String sessionId); - /** - * 条件查询通话记录 - * - * @param clueId - * @param memberId - * @param status - * @param recordFlag - * @return - */ - @Query(value = "select d from AllCallInfo d where d.clueId=?1 and d.memberId=?2 and d.status=?3 and d.recordFlag=?4") - List findByClueIdAndMemberId(Long clueId, Long memberId, Integer status, Integer recordFlag); - - /** * 根据任务id查询具体线索呼叫统计 * diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/TelephoneCallService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/TelephoneCallService.java index 7fd1b9cb..4d119df5 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/TelephoneCallService.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/TelephoneCallService.java @@ -38,16 +38,6 @@ public interface TelephoneCallService { */ CommonResponse doubleCallStop(TelephoneCallStopDTO telephoneCallStopDTO); - - /** - * h获取通话记录和录音地址 - * - * @param clueId - * @param memberId - * @return - */ - CommonResponse getCallRecord(Long clueId, Long memberId); - /** * axb拨打电话 * @param telephoneCallReqDTO diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/TelephoneCallServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/TelephoneCallServiceImpl.java index da9d25c0..b3f2eace 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/TelephoneCallServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/TelephoneCallServiceImpl.java @@ -140,25 +140,6 @@ public class TelephoneCallServiceImpl implements TelephoneCallService { return CommonResponse.createByError(); } - @Override - public CommonResponse getCallRecord(Long clueId, Long memberId) { - if (clueId == null || memberId == null) { - log.error("参数不能为空clueId:{} ,memberId:{}", clueId, memberId); - return CommonResponse.createByErrorMessage("参数不能为空"); - } - List calls = allCallInfoRepository.findByClueIdAndMemberId(clueId, memberId, DefaultNumberConstants.TWO_NUMBER, DefaultNumberConstants.ONE_NUMBER); - List list = new ArrayList<>(); - if (CollUtil.isNotEmpty(calls)) { - for (AllCallInfo info : calls) { - CallRecordsVO v = new CallRecordsVO(); - BeanUtil.copyProperties(info, v); - list.add(v); - } - } - list.sort(Comparator.comparing(CallRecordsVO::getCreateTime)); - return CommonResponse.createBySuccess(list); - } - @Override public CommonResponse axbDialNumber(TelephoneCallReqDTO doubleCallReq, Long companyId) { long originalNumber = Long.parseLong(doubleCallReq.getUserData()); From 72b588e672e0f7480a2bf4c5a8ff6f54733b00c2 Mon Sep 17 00:00:00 2001 From: yqy Date: Mon, 16 May 2022 09:40:08 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=BA=BF=E7=B4=A2=E5=85=AC=E6=B5=B7?= =?UTF-8?q?=E5=8A=9F=E8=83=BD+=E8=B5=84=E6=BA=90=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E4=BF=AE=E6=94=B9(=E6=9C=AA=E6=B5=8B=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baiye/exception/EntityExistException.java | 5 +- .../main/java/com/baiye/valid/AddGroup.java | 7 + .../java/com/baiye/valid/UpdateGroup.java | 7 + .../java/com/baiye/model/dto/ClueDto.java | 12 + .../baiye/model/dto/ClueQueryCriteria.java | 4 +- .../baiye/model/entity/BaseClueMiddle.java | 71 ++++++ .../com/baiye/feign/SourceClueClient.java | 7 + .../baiye/feign/SourceClueClientFallback.java | 7 + .../modules/report/api/ReportController.java | 2 +- .../report/service/QueryReportService.java | 2 +- .../service/impl/QueryReportServiceImpl.java | 9 +- .../security/config/SpringSecurityConfig.java | 2 + .../modules/system/rest/TaskController.java | 1 - .../modules/system/rest/UserController.java | 12 + .../modules/system/service/UserService.java | 7 + .../modules/system/service/dto/DebtDto.java | 3 + .../system/service/dto/FormUserDto.java | 3 + .../system/service/impl/UserServiceImpl.java | 12 + .../telemarkting/dao/CallClueRepository.java | 2 +- .../telemarkting/entity/ClueMiddle.java | 31 +++ .../impl/TelephoneCallServiceImpl.java | 43 ++-- .../src/main/resources/application-dev.yml | 8 +- .../src/main/resources/application-dev.yml | 2 +- .../java/com/baiye/feign/ReportClient.java | 20 ++ .../main/java/com/baiye/feign/UserClient.java | 25 +++ .../feign/fallback/ReportClientFallback.java | 15 ++ .../feign/fallback/UserClientFallback.java | 15 ++ .../module/controller/ClueController.java | 14 +- .../controller/ConductRecordController.java | 45 ++++ .../java/com/baiye/module/dao/ClueJpa.java | 89 +++++++- .../module/dao/ConductRecordRepository.java | 15 ++ .../java/com/baiye/module/entity/Clue.java | 27 ++- .../com/baiye/module/entity/ClueMiddle.java | 38 +--- .../baiye/module/entity/ConductRecord.java | 58 +++++ .../com/baiye/module/service/ClueService.java | 17 +- .../module/service/ConductRecordService.java | 27 +++ .../module/service/dto/ClueMiddleDto.java | 6 + .../module/service/dto/ConductRecordDto.java | 35 +++ .../dto/ConductRecordQueryCriteria.java | 16 ++ .../module/service/impl/ClueServiceImpl.java | 208 +++++++++++++----- .../impl/ConductRecordServiceImpl.java | 55 +++++ .../mapstruct/ConductRecordMapper.java | 11 + .../java/com/baiye/task/FileAnalysisTask.java | 2 +- .../src/main/resources/application-dev.yml | 9 +- .../src/main/resources/application-test.yml | 12 +- 45 files changed, 873 insertions(+), 145 deletions(-) create mode 100644 ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/valid/AddGroup.java create mode 100644 ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/valid/UpdateGroup.java create mode 100644 ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseClueMiddle.java create mode 100644 manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/ClueMiddle.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/feign/ReportClient.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/feign/UserClient.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/feign/fallback/ReportClientFallback.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/feign/fallback/UserClientFallback.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/module/controller/ConductRecordController.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/module/dao/ConductRecordRepository.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/module/entity/ConductRecord.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/module/service/ConductRecordService.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ConductRecordDto.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ConductRecordQueryCriteria.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ConductRecordServiceImpl.java create mode 100644 services/ad-platform-source/src/main/java/com/baiye/module/service/mapstruct/ConductRecordMapper.java diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/exception/EntityExistException.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/exception/EntityExistException.java index aa9f35f6..c22aab27 100644 --- a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/exception/EntityExistException.java +++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/exception/EntityExistException.java @@ -28,7 +28,8 @@ public class EntityExistException extends RuntimeException { } private static String generateMessage(String entity, String field, String val) { - return StringUtils.capitalize(entity) - + " with " + field + " "+ val + " existed"; +// return StringUtils.capitalize(entity) +// + " with " + field + " "+ val + " existed"; + return val + " 号码已存在"; } } diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/valid/AddGroup.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/valid/AddGroup.java new file mode 100644 index 00000000..40b8d013 --- /dev/null +++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/valid/AddGroup.java @@ -0,0 +1,7 @@ +package com.baiye.valid; + +/** + * valid效验参数时分组(添加时注解的分组) + */ +public interface AddGroup { +} diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/valid/UpdateGroup.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/valid/UpdateGroup.java new file mode 100644 index 00000000..f13aceb7 --- /dev/null +++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/valid/UpdateGroup.java @@ -0,0 +1,7 @@ +package com.baiye.valid; + +/** + * valid效验参数时分组(修改时注解的分组) + */ +public interface UpdateGroup { +} diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java index 5539348e..8e8f0a34 100644 --- a/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueDto.java @@ -90,4 +90,16 @@ public class ClueDto implements Serializable { @ApiModelProperty(value = "判断是否需要缓存 0:不需要 1:需要") private Integer isRedis; + @ApiModelProperty(value = "线索阶段:0:新线索 1:待沟通 2:有意向 3:已加微信 4:无意向") + private Integer clueStage; + + @ApiModelProperty(value = "线索通话状态:0:无状态 1:未接听 2:已接通") + private Integer clueCallStatus; + + @ApiModelProperty(value = "线索分配人名称") + private String distributeUserName; + + @ApiModelProperty(value = "线索记录") + private String clueRecord; + } diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java index 64227db7..cda827dc 100644 --- a/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/ClueQueryCriteria.java @@ -8,7 +8,6 @@ import java.sql.Timestamp; import java.util.List; import java.util.Set; - /** * 资源clue公共查询类 * @author wjt @@ -53,4 +52,7 @@ public class ClueQueryCriteria { @ApiModelProperty(value = "时间段") private List createTime; + + @ApiModelProperty(value = "用户id") + private Long userId; } diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseClueMiddle.java b/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseClueMiddle.java new file mode 100644 index 00000000..71ed843c --- /dev/null +++ b/ad-platform-pojo/src/main/java/com/baiye/model/entity/BaseClueMiddle.java @@ -0,0 +1,71 @@ +package com.baiye.model.entity; + +import com.baiye.util.JpaConverterListJson; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.annotations.CreationTimestamp; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.Column; +import javax.persistence.Convert; +import javax.persistence.EntityListeners; +import javax.persistence.MappedSuperclass; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * Clue + * + * @author yqy + * @date 2021-12-07 10:40:37 + */ +@Data +@MappedSuperclass +@EntityListeners(AuditingEntityListener.class) +public class BaseClueMiddle implements Serializable { + + private static final long serialVersionUID = -5485885423091953188L; + + @ApiModelProperty(value = "线索阶段:0:新线索 1:待沟通 2:有意向 3:已加微信 4:无意向") + @Column(name = "clue_stage") + private Integer clueStage; + + @ApiModelProperty(value = "线索通话状态:0:无状态 1:未接听 2:已接通") + @Column(name = "clue_call_status") + private Integer clueCallStatus; + + @ApiModelProperty(value = "小组id") + @Column(name = "organize_id") + private Long organizeId; + + @ApiModelProperty(value = "所属组员id") + @Column(name = "member_id") + private Long memberId; + + @ApiModelProperty(value = "任务id") + @Column(name = "task_id") + private Long taskId; + + @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") + @Column(name = "member_status") + private Integer memberStatus; + + @Convert(converter = JpaConverterListJson.class) + private List sourceLabel; + + @ApiModelProperty(value = "创建时间") + @Column(name = "create_time") + @CreationTimestamp + private Date createTime; + + @ApiModelProperty(value = "备注") + @Column(name = "remark") + private String remark; + + @ApiModelProperty(value = "版本号") + @NotNull(message = "版本号不能为空") + @Column(name = "optimistic_version") + private Integer optimisticVersion; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClient.java b/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClient.java index 8b08bd8d..c47a1b89 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClient.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClient.java @@ -1,13 +1,16 @@ package com.baiye.feign; +import com.baiye.http.CommonResponse; import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.model.dto.DistributeResponseDTO; import com.baiye.model.vo.ResSourceLabel; import com.baiye.modules.system.domain.Clue; import com.baiye.modules.system.service.dto.ClueMiddleTo; +import com.baiye.modules.telemarkting.entity.ClueMiddle; import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -63,5 +66,9 @@ public interface SourceClueClient { @ApiOperation("删除所有关联数据") @PostMapping(API_PREFIX + "/delClueAll") ResponseEntity delClueAll(@RequestBody Set taskIds); + + @ApiOperation("更新资源信息") + @PostMapping(API_PREFIX + "/update") + CommonResponse update(@RequestBody ClueMiddle clueMiddle); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClientFallback.java b/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClientFallback.java index 273ba3ba..2b60808e 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClientFallback.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/feign/SourceClueClientFallback.java @@ -1,11 +1,13 @@ package com.baiye.feign; +import com.baiye.http.CommonResponse; import com.baiye.model.dto.ClueQueryCriteria; import com.baiye.model.dto.DistributeResponseDTO; import com.baiye.model.dto.OrganizeQueryCriteria; import com.baiye.model.vo.ResSourceLabel; import com.baiye.modules.system.domain.Clue; import com.baiye.modules.system.service.dto.ClueMiddleTo; +import com.baiye.modules.telemarkting.entity.ClueMiddle; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; @@ -66,4 +68,9 @@ public class SourceClueClientFallback implements SourceClueClient { return null; } + @Override + public CommonResponse update(ClueMiddle clueMiddle) { + return null; + } + } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java index 221b468d..6fe1bb06 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/api/ReportController.java @@ -79,7 +79,7 @@ public class ReportController { @PostMapping("/report/turnOn") @ApiOperation("统计接通过的线索") - public CommonResponse getTurnOnIds(@RequestBody List clueIds) { + public CommonResponse> getTurnOnIds(@RequestBody List clueIds) { return queryReportService.getTurnOnIds(clueIds); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java index 267281d5..900242b5 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/QueryReportService.java @@ -80,7 +80,7 @@ public interface QueryReportService { * @param clueIds * @return */ - CommonResponse getTurnOnIds(List clueIds); + CommonResponse> getTurnOnIds(List clueIds); /** * 查询线索的通话详情 diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java index 27d29cd0..cf487c57 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/report/service/impl/QueryReportServiceImpl.java @@ -32,6 +32,7 @@ import com.baiye.modules.system.repository.OrganizeRepository; import com.baiye.modules.system.repository.TaskRepository; import com.baiye.modules.system.repository.UserRepository; import com.baiye.modules.system.service.CompanyService; +import com.baiye.modules.system.service.UserService; import com.baiye.modules.telemarkting.dao.AllCallInfoRepository; import com.baiye.modules.telemarkting.dao.CallClueRepository; import com.baiye.modules.telemarkting.entity.AllCallInfo; @@ -68,6 +69,7 @@ public class QueryReportServiceImpl implements QueryReportService { private final UserRepository userRepository; private final CallClueRepository callClueRepository; private final ReportSync reportSync; + private final UserService userService; /** * 统计昨日 公司下所有任务的合并 @@ -463,7 +465,7 @@ public class QueryReportServiceImpl implements QueryReportService { } @Override - public CommonResponse getTurnOnIds(List clueIds) { + public CommonResponse> getTurnOnIds(List clueIds) { List list = allCallInfoRepository.queryIdsByStatusAndClueId(clueIds, 2); if (CollUtil.isNotEmpty(list)) { list = list.stream().distinct().collect(Collectors.toList()); @@ -473,6 +475,7 @@ public class QueryReportServiceImpl implements QueryReportService { @Override public CommonResponse getCallRecordDetails(Long clueId) { + Map map = new HashMap<>(8); int usrNum = 0; int turnOnNum = 0; @@ -490,7 +493,7 @@ public class QueryReportServiceImpl implements QueryReportService { } Set memberIds = allByClueId.stream().map(AllCallInfo::getMemberId).collect(Collectors.toSet()); - Map memberMap = new HashMap<>(); + Map memberMap = userService.queryName(memberIds); for (CallRecordDetailsDTO info : listDto) { if (memberMap.containsKey(info.getMemberId())) { @@ -531,7 +534,7 @@ public class QueryReportServiceImpl implements QueryReportService { } //用户信息 Set memberIds = allByClueId.stream().map(AllCallInfo::getMemberId).collect(Collectors.toSet()); - Map memberMap = new HashMap<>(); + Map memberMap = userService.queryName(memberIds); for (CallRecordDetailsDTO info : listDto) { if (memberMap.containsKey(info.getMemberId())) { diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/security/config/SpringSecurityConfig.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/security/config/SpringSecurityConfig.java index dd179948..44cf4fa1 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/security/config/SpringSecurityConfig.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/security/config/SpringSecurityConfig.java @@ -148,6 +148,8 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers( "/api/back/cdrUrl").permitAll() .antMatchers( "/api/back/status").permitAll() .antMatchers( "/api/roll/cdrUrl").permitAll() + .antMatchers( "/api/report/turnOn").permitAll() + .antMatchers( "/api/users/info/findById").permitAll() // 支付回调 .antMatchers( "/pay/aliPay/pay-notify").permitAll() // 自定义匿名访问所有url放行:允许匿名和带Token访问,细腻化到每个 Request 类型 diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/TaskController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/TaskController.java index a2f7db08..1d796fcb 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/TaskController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/TaskController.java @@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; - /** * @author YQY * @date 2021-12-10 diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/UserController.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/UserController.java index f411772c..2e4daf40 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/UserController.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/rest/UserController.java @@ -51,6 +51,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -223,6 +224,17 @@ public class UserController { return userService.findByName(username); } + /** + * 获取指定用户全部信息 + * + * @return 用户信息 + */ + @PostMapping("/info/findById") + @ApiOperation("用户id查询") + public Map findById(@RequestBody Set userIds) { + return userService.queryName(userIds); + } + @Inner @PostMapping("/info/deptIds") @ApiOperation("查找部门") diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/UserService.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/UserService.java index 639342a8..f36bfcff 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/UserService.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/UserService.java @@ -211,4 +211,11 @@ public interface UserService { * @param flag */ List findUserByExpirationTime(DateTime date, Boolean flag); + + /** + * 获取指定用户全部信息 + * @param userIds + * @return + */ + Map queryName(Set userIds); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/DebtDto.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/DebtDto.java index b3494d38..abc9b12e 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/DebtDto.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/DebtDto.java @@ -1,5 +1,7 @@ package com.baiye.modules.system.service.dto; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Getter; import lombok.Setter; import java.io.Serializable; @@ -8,6 +10,7 @@ import java.io.Serializable; @Setter public class DebtDto implements Serializable { + @JsonSerialize(using = ToStringSerializer.class) private Long id; private Long userId; diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/FormUserDto.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/FormUserDto.java index d676bc13..85a379de 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/FormUserDto.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/dto/FormUserDto.java @@ -16,6 +16,8 @@ package com.baiye.modules.system.service.dto; import com.baiye.model.base.BaseDTO; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.NoArgsConstructor; @@ -38,6 +40,7 @@ public class FormUserDto extends BaseDTO implements Serializable { private static final long serialVersionUID = -2035716596706011470L; @ApiModelProperty(value = "id") + @JsonSerialize(using = ToStringSerializer.class) private Long id; @ApiModelProperty(value = "二维码地址") diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java index 445d9960..2e52c68d 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/system/service/impl/UserServiceImpl.java @@ -232,6 +232,18 @@ public class UserServiceImpl implements UserService { return userRepository.findUserByTime(date, flag); } + @Override + public Map queryName(Set userIds) { + Map map = new HashMap<>(); + List userList = userRepository.findAllById(userIds); + if (CollUtil.isNotEmpty(userList)){ + for (User user : userList) { + map.put(user.getId(),user.getUsername()); + } + } + return map; + } + @Override public Object queryAll(UserQueryCriteria criteria, Pageable pageable) { diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/CallClueRepository.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/CallClueRepository.java index d7f0f525..a5fcf39b 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/CallClueRepository.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/dao/CallClueRepository.java @@ -84,6 +84,6 @@ public interface CallClueRepository extends JpaRepository, J * @param id * @return */ - @Query(value = "select * from tb_call_clue d where d.create_time >= ?1 and d.create_time< ?2 AND d.member.id = ?3", nativeQuery = true) + @Query(value = "select * from tb_call_clue d where d.create_time >= ?1 and d.create_time< ?2 AND d.member_id = ?3", nativeQuery = true) List queryAllByTimeAndMemberId(String beginTime, String endTime, Long id); } diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/ClueMiddle.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/ClueMiddle.java new file mode 100644 index 00000000..190ceb17 --- /dev/null +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/entity/ClueMiddle.java @@ -0,0 +1,31 @@ +package com.baiye.modules.telemarkting.entity; + +import com.baiye.model.entity.BaseClueMiddle; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; + +/** + * ClueMiddle + * + * @author yqy + * @date 2021-12-07 10:40:37 + */ +@Data +@Entity +@Table(name = "tb_clue_middle") +@ApiModel(value = "ClueMiddle") +public class ClueMiddle extends BaseClueMiddle { + + @Id + @ApiModelProperty(value = "线索id") + @Column(name = "clue_id") + @NotNull(message = "资源id不能为空") + private Long clueId; +} diff --git a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/TelephoneCallServiceImpl.java b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/TelephoneCallServiceImpl.java index b3f2eace..94a8fff2 100644 --- a/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/TelephoneCallServiceImpl.java +++ b/manage/ad-platform-management/src/main/java/com/baiye/modules/telemarkting/service/impl/TelephoneCallServiceImpl.java @@ -21,6 +21,7 @@ import com.baiye.modules.telemarkting.dao.CallClueRepository; import com.baiye.modules.telemarkting.dao.ExtensionNumberRepository; import com.baiye.modules.telemarkting.entity.AllCallInfo; import com.baiye.modules.telemarkting.entity.CallClueInfo; +import com.baiye.modules.telemarkting.entity.ClueMiddle; import com.baiye.modules.telemarkting.entity.ExtensionNumber; import com.baiye.modules.telemarkting.entity.dto.*; import com.baiye.modules.telemarkting.entity.vo.CallRecordsVO; @@ -129,6 +130,11 @@ public class TelephoneCallServiceImpl implements TelephoneCallService { int status = CallStatusEnum.ANSWER.getValue(); callClueRepository.updateByStatus(status, userDate); allCallInfoRepository.updateByStatus(status, sessionId); + //更新资源通话状态 + updateSourceCallStatus(userDate, DefaultNumberConstants.TWO_NUMBER); + } else { + //更新资源通话状态 + updateSourceCallStatus(userDate,DefaultNumberConstants.ONE_NUMBER); } } @@ -255,30 +261,17 @@ public class TelephoneCallServiceImpl implements TelephoneCallService { allCallInfo.setRecordFlag(DefaultNumberConstants.ONE_NUMBER); allCallInfo.setRecordFileDownloadUrl(rollCallBackDTO.getRecord_file_url()); } else { -// if (StrUtil.isBlank(rollCallBackDTO.getCallee_answer_time())) { -// JSONObject object = new JSONObject(); -// object.putOpt("code", 500); -// object.putOpt("type", "rollCall_reason"); -// if (StrUtil.isBlank(rollCallBackDTO.getCallee_start_time()) || StrUtil.isBlank(rollCallBackDTO.getCallee_ring_time())) { -// log.error("呼叫未送达,session: {}",sessionId); -// object.putOpt("message", "呼叫未送达"); -// } else { -// object.putOpt("message", "通话未接听"); -// } -// // TODO: 2022/2/28 0028 发送websocket -// webSocketServer.sendMessage(JSONUtil.toJsonStr(object), SecurityUtils.getCurrentUserId()); -// } else { -// callClueRepository.updateByStatus(DefaultNumberConstants.TWO_NUMBER, allCallInfo.getClueId()); -// allCallInfo.setStatus(DefaultNumberConstants.TWO_NUMBER); -// allCallInfo.setDuration(Integer.valueOf(rollCallBackDTO.getDuration())); -// } - //拨打线索号的回调 if (StrUtil.isNotBlank(rollCallBackDTO.getCallee_answer_time())) { //表示接通 callClueRepository.updateByStatus(DefaultNumberConstants.TWO_NUMBER, allCallInfo.getClueId()); allCallInfo.setStatus(DefaultNumberConstants.TWO_NUMBER); allCallInfo.setDuration(Integer.valueOf(rollCallBackDTO.getDuration())); + //更新资源通话状态 + updateSourceCallStatus(allCallInfo.getClueId(), DefaultNumberConstants.TWO_NUMBER); + }else { + //更新资源通话状态 + updateSourceCallStatus(allCallInfo.getClueId(), DefaultNumberConstants.ONE_NUMBER); } } @@ -286,5 +279,17 @@ public class TelephoneCallServiceImpl implements TelephoneCallService { } } - + /** + * 更新资源通话状态 + * + * @param clueId 资源ID + * @param status 1:未接听 2:已接通 + */ + private void updateSourceCallStatus(Long clueId, Integer status) { + ClueMiddle clueMiddle = new ClueMiddle(); + clueMiddle.setClueId(clueId); + clueMiddle.setClueCallStatus(status); + clueMiddle.setOptimisticVersion(DefaultNumberConstants.THREE_NUMBER); + sourceClueClient.update(clueMiddle); + } } diff --git a/manage/ad-platform-task/src/main/resources/application-dev.yml b/manage/ad-platform-task/src/main/resources/application-dev.yml index df8e9c92..3b4f12e6 100644 --- a/manage/ad-platform-task/src/main/resources/application-dev.yml +++ b/manage/ad-platform-task/src/main/resources/application-dev.yml @@ -6,18 +6,18 @@ spring: cloud: nacos: discovery: - server-addr: ${NACOS_HOST:118.178.137.129}:${NACOS_PORT:8848} + server-addr: ${NACOS_HOST:8.130.96.163}:${NACOS_PORT:8848} redis: database: 2 - host: 118.178.137.129 + host: 8.130.96.163 timeout: 5000 datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://118.178.137.129:3306/ad-platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://8.130.96.163:3306/ad-platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull username: root - password: root + password: y7z7noq2 # url: jdbc:mysql://localhost:3306/ad-platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull # username: root # password: 12345678 diff --git a/services/ad-platform-service/src/main/resources/application-dev.yml b/services/ad-platform-service/src/main/resources/application-dev.yml index e4dde24d..18594c8c 100644 --- a/services/ad-platform-service/src/main/resources/application-dev.yml +++ b/services/ad-platform-service/src/main/resources/application-dev.yml @@ -3,4 +3,4 @@ spring: cloud: nacos: discovery: - server-addr: ${NACOS_HOST:118.178.137.129}:${NACOS_PORT:8848} + server-addr: ${NACOS_HOST:8.130.96.163}:${NACOS_PORT:8848} diff --git a/services/ad-platform-source/src/main/java/com/baiye/feign/ReportClient.java b/services/ad-platform-source/src/main/java/com/baiye/feign/ReportClient.java new file mode 100644 index 00000000..69b719f7 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/feign/ReportClient.java @@ -0,0 +1,20 @@ +package com.baiye.feign; + +import com.baiye.feign.fallback.ReportClientFallback; +import com.baiye.http.CommonResponse; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +@FeignClient(value = "ad-platform-management",fallback = ReportClientFallback.class) +public interface ReportClient { + + String PAY_PREFIX = "/api/"; + + @PostMapping(PAY_PREFIX + "report/turnOn") + @ApiOperation("统计接通过的线索") + CommonResponse> getTurnOnIds(@RequestBody List clueIds); +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/feign/UserClient.java b/services/ad-platform-source/src/main/java/com/baiye/feign/UserClient.java new file mode 100644 index 00000000..185b3ad4 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/feign/UserClient.java @@ -0,0 +1,25 @@ +package com.baiye.feign; + +import com.baiye.feign.fallback.UserClientFallback; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.Map; +import java.util.Set; + +@FeignClient(value = "ad-platform-management", fallback = UserClientFallback.class) +public interface UserClient { + + String PAY_PREFIX = "/api/users"; + + /** + * 获取指定用户全部信息 + * + * @return 用户信息 + */ + @PostMapping(PAY_PREFIX + "/info/findById") + @ApiOperation("用户id查询") + Map findById(@RequestBody Set userIds); +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/ReportClientFallback.java b/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/ReportClientFallback.java new file mode 100644 index 00000000..03a81a64 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/ReportClientFallback.java @@ -0,0 +1,15 @@ +package com.baiye.feign.fallback; + +import com.baiye.feign.ReportClient; +import com.baiye.http.CommonResponse; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class ReportClientFallback implements ReportClient { + @Override + public CommonResponse> getTurnOnIds(List clueIds) { + return null; + } +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/UserClientFallback.java b/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/UserClientFallback.java new file mode 100644 index 00000000..7e1281c2 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/feign/fallback/UserClientFallback.java @@ -0,0 +1,15 @@ +package com.baiye.feign.fallback; + +import com.baiye.feign.UserClient; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.Set; + +@Component +public class UserClientFallback implements UserClient { + @Override + public Map findById(Set clueIds) { + return null; + } +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java b/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java index afa8acf0..98ecb560 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/controller/ClueController.java @@ -145,10 +145,22 @@ public class ClueController { return new ResponseEntity<>(HttpStatus.OK); } - @ApiOperation("分页查询资源公海") + @ApiOperation("分页查询动态任务下资源") @GetMapping("/queryCluePool") public ResponseEntity> queryCluePool(ClueQueryCriteria clueQueryCriteria, Pageable pageable) { return new ResponseEntity<>(clueService.queryCluePool(clueQueryCriteria, pageable), HttpStatus.OK); } + @ApiOperation("撤回动态资源") + @PostMapping("/withdrawSource") + public ResponseEntity withdrawSource(@RequestBody List clueIds) { + return new ResponseEntity<>(clueService.withdrawSource(clueIds), HttpStatus.OK); + } + + @ApiOperation("查询管理员下(本公司内)所有资源,资源公海") + @GetMapping("/findCompanyClue") + public ResponseEntity findCompanyClue(ClueQueryCriteria clueQueryCriteria, Pageable pageable){ + return new ResponseEntity<>(clueService.findCompanyClue(clueQueryCriteria, pageable), HttpStatus.OK); + } + } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/controller/ConductRecordController.java b/services/ad-platform-source/src/main/java/com/baiye/module/controller/ConductRecordController.java new file mode 100644 index 00000000..d42ccf8f --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/controller/ConductRecordController.java @@ -0,0 +1,45 @@ +package com.baiye.module.controller; + +import com.baiye.http.CommonResponse; +import com.baiye.module.entity.ConductRecord; +import com.baiye.module.service.ConductRecordService; +import com.baiye.module.service.dto.ConductRecordQueryCriteria; +import com.baiye.valid.AddGroup; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@RequiredArgsConstructor +@RestController +@Api(tags = "资源跟进记录管理") +@RequestMapping("/source/conductRecord") +@Slf4j +public class ConductRecordController { + + private final ConductRecordService conductRecordService; + + @ApiOperation("新增记录") + @PostMapping("/saveRecord") + public CommonResponse saveRecord(@Validated({AddGroup.class}) @RequestBody ConductRecord conductRecord){ + conductRecordService.saveRecord(conductRecord); + return CommonResponse.createBySuccess(); + } + + @ApiOperation("删除记录") + @GetMapping("/del") + public CommonResponse delRecord(@RequestParam(value = "id") Long id) { + conductRecordService.delRecord(id); + return CommonResponse.createBySuccess(); + } + + @ApiOperation("查询记录列表") + @GetMapping("/query") + public ResponseEntity query(ConductRecordQueryCriteria conductRecordQueryCriteria){ + return new ResponseEntity<>(conductRecordService.query(conductRecordQueryCriteria), HttpStatus.OK); + } +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java index 04b06a9e..0356ca17 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ClueJpa.java @@ -28,6 +28,8 @@ import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.transaction.Transactional; import java.math.BigInteger; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.*; @Service @@ -43,6 +45,7 @@ public class ClueJpa { @Value("${aes.secret}") private String secret; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** @@ -52,7 +55,7 @@ public class ClueJpa { StringBuilder sql = new StringBuilder(); sql.append("select c.id as id,c.name as name,c.nid as nid,c.wx as wx,c.origin as origin,c.collect_time as collectTime,c.address as address,c.record_id as recordId," + "c.create_time as createTime,cm.remark as remark,cm.member_status as memberStatus,cm.organize_id as organizeId,cm.member_id as memberId," + - "cm.optimistic_version as optimisticVersion,cm.source_label as sourceLabel,cm.task_id as taskId " + + "cm.optimistic_version as optimisticVersion,cm.source_label as sourceLabel,cm.task_id as taskId,cm.clue_stage as clueStage,cm.clue_call_status as clueCallStatus " + "from tb_clue as c LEFT JOIN tb_clue_middle as cm on c.id = cm.clue_id where 1=1 "); List confirmReceipt = getConfirmReceipt(clueQueryCriteria, sql, pageable); return getTradeInfo(confirmReceipt); @@ -188,6 +191,8 @@ public class ClueJpa { BigInteger memberId = (BigInteger) row.get("memberId"); clueDto.setMemberId(memberId.longValue()); clueDto.setOptimisticVersion((Integer) row.get("optimisticVersion")); + clueDto.setClueStage((Integer) row.get("clueStage")); + clueDto.setClueCallStatus((Integer) row.get("clueCallStatus")); clueDtoList.add(clueDto); } return clueDtoList; @@ -227,16 +232,37 @@ public class ClueJpa { * * @param taskIds * @param pageable + * @param clueQueryCriteria * @return */ - public List findClue(Set taskIds, Pageable pageable) { + public List findClue(Set taskIds, Pageable pageable, ClueQueryCriteria clueQueryCriteria) { + String name = clueQueryCriteria.getName(); + Integer origin = clueQueryCriteria.getOrigin(); + List createTimeList = clueQueryCriteria.getCreateTime(); StringBuilder sql = new StringBuilder(); - sql.append("SELECT tc.id as id,tc.nid as nid,tc.create_time as createTime,tc.name as name,tcm.task_id as taskId FROM tb_clue_middle tcm LEFT JOIN tb_clue tc ON tcm.clue_id = tc.id WHERE 1 = 1 "); + sql.append("SELECT tc.id as id,tc.nid as nid,tc.create_time as createTime,tc.name as name,tc.origin as origin,tcm.task_id as taskId,tcm.member_status as memberStatus," + + "tcm.clue_stage as clueStage,tcm.clue_call_status as clueCallStatus,tcm.member_id as memberId " + + "FROM tb_clue_middle tcm LEFT JOIN tb_clue tc ON tcm.clue_id = tc.id WHERE 1 = 1 "); if (CollUtil.isNotEmpty(taskIds)) { sql.append("AND tcm.task_id IN (:taskId) "); } if (pageable != null) { - sql.append("AND tcm.member_id is null "); + Integer memberStatus = clueQueryCriteria.getMemberStatus(); + if (memberStatus != null && memberStatus == 0){ + sql.append("AND tcm.member_id is null "); + } + if (memberStatus != null && memberStatus > 0){ + sql.append("AND tcm.member_id is not null "); + } + if (StringUtils.isNotBlank(name)){ + sql.append("and tc.name like :name "); + } + if (origin != null) { + sql.append("and tc.origin = :origin "); + } + if (createTimeList != null && createTimeList.size() == 2){ + sql.append("and tc.create_time between :createTimeBegin and :createTimeEnd "); + } //拼接最后加入时间排序,没加id排序出现数据重复问题(注意空格) sql.append("ORDER BY tc.create_time desc ,tc.id "); sql.append("LIMIT :number,:size "); @@ -246,6 +272,18 @@ public class ClueJpa { query.setParameter("taskId", taskIds); } if (pageable != null) { + if (origin != null) { + query.setParameter("origin", origin); + } + if (StringUtils.isNotBlank(name)){ + query.setParameter("name", "%" + name + "%"); + } + if (createTimeList != null && createTimeList.size() == 2){ + String createTimeBegin = this.format.format(createTimeList.get(0)); + String createTimeEnd = this.format.format(createTimeList.get(1)); + query.setParameter("createTimeBegin",createTimeBegin); + query.setParameter("createTimeEnd",createTimeEnd); + } query.setParameter("number", pageable.getPageNumber() * pageable.getPageSize()); query.setParameter("size", pageable.getPageSize()); } @@ -266,6 +304,15 @@ public class ClueJpa { clue.setNid(nid); BigInteger taskId = (BigInteger) row.get("taskId"); clue.setTaskId(taskId.longValue()); + Integer memberSta = (Integer) row.get("memberStatus"); + clue.setMemberStatus(memberSta); + clue.setOrigin((int) row.get("origin")); + clue.setClueStage((Integer) row.get("clueStage")); + clue.setClueCallStatus((Integer) row.get("clueCallStatus")); + BigInteger memberId = (BigInteger) row.get("memberId"); + if (memberId != null){ + clue.setMemberId(memberId.longValue()); + } } arrayList.add(clue); } @@ -276,15 +323,45 @@ public class ClueJpa { /** * 分页总条数 */ - public Long getTaskCount(Set taskIds) { + public Long getTaskCount(Set taskIds, ClueQueryCriteria clueQueryCriteria) { + String name = clueQueryCriteria.getName(); + Integer origin = clueQueryCriteria.getOrigin(); + List createTimeList = clueQueryCriteria.getCreateTime(); StringBuilder sql = new StringBuilder("select count(*) as countNum from tb_clue as c LEFT JOIN tb_clue_middle as cm on c.id = cm.clue_id where 1=1 "); if (CollUtil.isNotEmpty(taskIds)) { sql.append("AND cm.task_id IN (:taskId) "); - sql.append("AND cm.member_id is null "); + Integer memberStatus = clueQueryCriteria.getMemberStatus(); + if (memberStatus != null && memberStatus == 0){ + sql.append("AND cm.member_id is null "); + } + if (memberStatus != null && memberStatus > 0){ + sql.append("AND cm.member_id is not null "); + } + if (StringUtils.isNotBlank(name)){ + sql.append("and c.name like :name "); + } + if (origin != null) { + sql.append("and c.origin = :origin "); + } + if (createTimeList != null && createTimeList.size() == 2){ + sql.append("and c.create_time between :createTimeBegin and :createTimeEnd "); + } } Query query = entityManager.createNativeQuery(sql.toString()); if (CollUtil.isNotEmpty(taskIds)) { query.setParameter("taskId", taskIds); + if (origin != null) { + query.setParameter("origin", origin); + } + if (StringUtils.isNotBlank(name)){ + query.setParameter("name", "%" + name + "%"); + } + if (createTimeList != null && createTimeList.size() == 2){ + String createTimeBegin = this.format.format(createTimeList.get(0)); + String createTimeEnd = this.format.format(createTimeList.get(1)); + query.setParameter("createTimeBegin",createTimeBegin); + query.setParameter("createTimeEnd",createTimeEnd); + } } query.unwrap(NativeQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); List confirmReceipt = query.getResultList(); diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/dao/ConductRecordRepository.java b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ConductRecordRepository.java new file mode 100644 index 00000000..789097fa --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/dao/ConductRecordRepository.java @@ -0,0 +1,15 @@ +package com.baiye.module.dao; + +import com.baiye.module.entity.ConductRecord; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Set; + +@Repository +public interface ConductRecordRepository extends JpaRepository, JpaSpecificationExecutor { + + List findByClueIdIn(Set clueIdList); +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/entity/Clue.java b/services/ad-platform-source/src/main/java/com/baiye/module/entity/Clue.java index 9d237e47..93e23e4c 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/entity/Clue.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/entity/Clue.java @@ -21,14 +21,9 @@ import lombok.Data; @ApiModel(value = "Clue") public class Clue extends BaseClue { - /** - * 线索表,主键id(自动递增) - * nullable : false - * default : null - */ @Id @ApiModelProperty(value = "线索表,主键id(自动递增)") - @Column(name = "id", nullable = true) + @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @@ -37,4 +32,24 @@ public class Clue extends BaseClue { @Transient private String taskName; + + @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") + @Transient + private Integer memberStatus; + + @ApiModelProperty(value = "线索阶段:0:新线索 1:待沟通 2:有意向 3:已加微信 4:无意向") + @Transient + private Integer clueStage; + + @ApiModelProperty(value = "线索通话状态:0:无状态 1:未接听 2:已接通") + @Transient + private Integer clueCallStatus; + + @ApiModelProperty(value = "线索分配人") + @Transient + private Long memberId; + + @ApiModelProperty(value = "线索分配人名称") + @Transient + private String distributeUserName; } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/entity/ClueMiddle.java b/services/ad-platform-source/src/main/java/com/baiye/module/entity/ClueMiddle.java index 776e7493..3da9ea4f 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/entity/ClueMiddle.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/entity/ClueMiddle.java @@ -1,5 +1,6 @@ package com.baiye.module.entity; +import com.baiye.model.entity.BaseClueMiddle; import com.baiye.util.JpaConverterListJson; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -8,10 +9,10 @@ import org.hibernate.annotations.CreationTimestamp; import javax.persistence.*; import javax.validation.constraints.NotNull; +import java.io.Serializable; import java.util.Date; import java.util.List; - /** * ClueMiddle * @@ -22,44 +23,11 @@ import java.util.List; @Entity @Table(name = "tb_clue_middle") @ApiModel(value = "ClueMiddle") -public class ClueMiddle{ +public class ClueMiddle extends BaseClueMiddle { @Id @ApiModelProperty(value = "线索id") @Column(name = "clue_id") @NotNull(message = "资源id不能为空") private Long clueId; - - @ApiModelProperty(value = "小组id") - @Column(name = "organize_id") - private Long organizeId; - - @ApiModelProperty(value = "所属组员id") - @Column(name = "member_id") - private Long memberId; - - @ApiModelProperty(value = "任务id") - @Column(name = "task_id") - private Long taskId; - - @ApiModelProperty(value = "组员跟进状态 0:无状态 1:进行中 2:已完成") - @Column(name = "member_status") - private Integer memberStatus; - - @Convert(converter = JpaConverterListJson.class) - private List sourceLabel; - - @ApiModelProperty(value = "创建时间") - @Column(name = "create_time") - @CreationTimestamp - private Date createTime; - - @ApiModelProperty(value = "备注") - @Column(name = "remark") - private String remark; - - @ApiModelProperty(value = "版本号") - @NotNull(message = "版本号不能为空") - @Column(name = "optimistic_version") - private Integer optimisticVersion; } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/entity/ConductRecord.java b/services/ad-platform-source/src/main/java/com/baiye/module/entity/ConductRecord.java new file mode 100644 index 00000000..ef5c1dc5 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/entity/ConductRecord.java @@ -0,0 +1,58 @@ +package com.baiye.module.entity; + +import com.baiye.valid.AddGroup; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.hibernate.annotations.CreationTimestamp; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; + +/** + * ClueMiddle + * + * @author yqy + * @date 2021-12-07 10:40:37 + */ +@Data +@Entity +@Table(name = "tb_clue_conduct_record") +@ApiModel(value = "线索跟进记录表") +@EntityListeners(AuditingEntityListener.class) +public class ConductRecord implements Serializable { + + private static final long serialVersionUID = 1271571231859316736L; + + @Id + @ApiModelProperty(value = "线索跟进记录表主键ID") + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ApiModelProperty(value = "线索id") + @Column(name = "clue_id") + @NotNull(message = "线索id不能为空", groups = {AddGroup.class}) + private Long clueId; + + @ApiModelProperty(value = "跟进记录信息") + @Column(name = "record_info") + @NotNull(message = "记录信息不能为空", groups = {AddGroup.class}) + private String recordInfo; + + @ApiModelProperty(value = "跟进人名称") + @Column(name = "name") + private String name; + + @ApiModelProperty(value = "创建人id") + @NotNull(message = "创建人不能为空", groups = {AddGroup.class}) + private Long createBy; + + @ApiModelProperty(value = "创建时间") + @Column(name = "create_time") + @CreationTimestamp + private Date createTime; +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/ClueService.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/ClueService.java index f1d5dfff..4fe9cd22 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/service/ClueService.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/ClueService.java @@ -156,10 +156,25 @@ public interface ClueService { void delClueAll(Set taskIds); /** - * 分页查询资源公海 + * 分页查询动态任务下资源 * @param clueQueryCriteria * @param pageable * @return */ Map queryCluePool(ClueQueryCriteria clueQueryCriteria, Pageable pageable); + + /** + * 撤回动态资源 + * @param clueIds + * @return + */ + Object withdrawSource(List clueIds); + + /** + * 查询管理员下(本公司内)所有资源,资源公海 + * @param clueQueryCriteria + * @param pageable + * @return + */ + Object findCompanyClue(ClueQueryCriteria clueQueryCriteria, Pageable pageable); } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/ConductRecordService.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/ConductRecordService.java new file mode 100644 index 00000000..fc9c568e --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/ConductRecordService.java @@ -0,0 +1,27 @@ +package com.baiye.module.service; + +import com.baiye.module.entity.ConductRecord; +import com.baiye.module.service.dto.ConductRecordQueryCriteria; + +public interface ConductRecordService { + + /** + * 新增记录 + * @param conductRecord + * @return + */ + void saveRecord(ConductRecord conductRecord); + + /** + * 删除记录 + * @param id + */ + void delRecord(Long id); + + /** + * 查询记录列表 + * @param conductRecordQueryCriteria + * @return + */ + Object query(ConductRecordQueryCriteria conductRecordQueryCriteria); +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleDto.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleDto.java index 41d5745b..a25ed738 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleDto.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ClueMiddleDto.java @@ -18,6 +18,12 @@ public class ClueMiddleDto implements Serializable { @ApiModelProperty(value = "线索id") private Long clueId; + @ApiModelProperty(value = "线索阶段:0:新线索 1:待沟通 2:有意向 3:已加微信 4:无意向") + private Integer clueStage; + + @ApiModelProperty(value = "线索通话状态:0:无状态 1:未接听 2:已接通") + private Integer clueCallStatus; + @ApiModelProperty(value = "小组id") private Long organizeId; diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ConductRecordDto.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ConductRecordDto.java new file mode 100644 index 00000000..0ea21ec4 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ConductRecordDto.java @@ -0,0 +1,35 @@ +package com.baiye.module.service.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class ConductRecordDto implements Serializable { + + @ApiModelProperty(value = "线索跟进记录表主键ID") + private Long id; + + @ApiModelProperty(value = "线索id") + private Long clueId; + + @ApiModelProperty(value = "跟进记录信息") + private String recordInfo; + + @ApiModelProperty(value = "跟进人名称") + private String name; + + @ApiModelProperty(value = "创建人id") + private Long createBy; + + @ApiModelProperty(value = "创建时间") + private Date createTime; +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ConductRecordQueryCriteria.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ConductRecordQueryCriteria.java new file mode 100644 index 00000000..ac929a7d --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/dto/ConductRecordQueryCriteria.java @@ -0,0 +1,16 @@ +package com.baiye.module.service.dto; + +import com.baiye.annotation.Query; +import lombok.Data; + +/** + * 资源跟进记录查询类 + */ +@Data +public class ConductRecordQueryCriteria { + @Query + private Long createBy; + + @Query + private Long clueId; +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java index ed7779f7..b9e4f97a 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ClueServiceImpl.java @@ -1,6 +1,7 @@ package com.baiye.module.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; @@ -8,17 +9,13 @@ import cn.hutool.json.JSONUtil; import com.baiye.constant.DefaultNumberConstants; import com.baiye.exception.BadRequestException; import com.baiye.feign.OrganizeClient; +import com.baiye.feign.ReportClient; import com.baiye.feign.TaskClient; +import com.baiye.feign.UserClient; import com.baiye.model.dto.*; import com.baiye.model.vo.ResSourceLabel; -import com.baiye.module.dao.ClueJpa; -import com.baiye.module.dao.ClueMiddleRepository; -import com.baiye.module.dao.ClueRecordRepository; -import com.baiye.module.dao.ClueRepository; -import com.baiye.module.entity.Clue; -import com.baiye.module.entity.ClueMiddle; -import com.baiye.module.entity.ClueRecord; -import com.baiye.module.entity.Task; +import com.baiye.module.dao.*; +import com.baiye.module.entity.*; import com.baiye.module.entity.vo.BaseExcelVo; import com.baiye.module.service.ClueService; import com.baiye.module.service.dto.*; @@ -38,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; @Service @@ -53,6 +51,9 @@ public class ClueServiceImpl implements ClueService { private final OrganizeClient organizeClient; private final RedisUtils redisUtils; private final TaskClient taskClient; + private final ReportClient reportClient; + private final UserClient userClient; + private final ConductRecordRepository conductRecordRepository; private static SimpleDateFormat timeOne = new SimpleDateFormat("yyyyMMddHHmmssSSS"); @@ -69,9 +70,11 @@ public class ClueServiceImpl implements ClueService { clueMiddle.setTaskId(taskId); clueMiddle.setMemberStatus(DefaultNumberConstants.ZERO_NUMBER); clueMiddle.setOptimisticVersion(DefaultNumberConstants.ZERO_NUMBER); + clueMiddle.setClueStage(DefaultNumberConstants.ZERO_NUMBER); + clueMiddle.setClueCallStatus(DefaultNumberConstants.ZERO_NUMBER); clueMiddleRepository.save(clueMiddle); } - }catch (Exception e){ + } catch (Exception e) { throw new BadRequestException("===================插入资源发生错误==================="); } } @@ -145,7 +148,7 @@ public class ClueServiceImpl implements ClueService { } } } - return new ResponseEntity<>(HttpStatus.OK); + return new ResponseEntity<>(null,HttpStatus.OK); } /** @@ -156,6 +159,16 @@ public class ClueServiceImpl implements ClueService { if (clueQueryCriteria.getMemberId() != null) { List clueDtoList = clueJpa.getClueList(clueQueryCriteria, pageable); Long count = clueJpa.getCount(clueQueryCriteria); + //查询线索记录 + Set clueIdList = clueDtoList.stream().map(ct -> ct.getId()).collect(Collectors.toSet()); + List conductRecords = conductRecordRepository.findByClueIdIn(clueIdList); + Map map = new HashMap<>(); + if (CollUtil.isNotEmpty(conductRecords)){ + List sortConductRecord = conductRecords.stream().sorted(Comparator.comparing(ConductRecord::getCreateTime)).collect(Collectors.toList()); + for (ConductRecord conductRecord : sortConductRecord) { + map.put(conductRecord.getClueId(),conductRecord.getRecordInfo()); + } + } // 列表中查询标签信息 和 axb请求字段 for (ClueDto clueDto : clueDtoList) { String taskNameKey = "task:name:" + clueDto.getTaskId(); @@ -167,6 +180,9 @@ public class ClueServiceImpl implements ClueService { str = body.get("taskName").get(0); } clueDto.setTaskName(str); + if (CollUtil.isNotEmpty(map) && map.containsKey(clueDto.getId())){ + clueDto.setClueRecord(map.get(clueDto.getId())); + } } return PageUtil.toPage(clueDtoList, count); } @@ -180,9 +196,16 @@ public class ClueServiceImpl implements ClueService { public List query(ClueQueryCriteria clueQueryCriteria) { if (clueQueryCriteria.getMemberId() != null) { List clueDtoList = clueJpa.getClueList(clueQueryCriteria, null); + Set memberIds = clueDtoList.stream().map(ca -> ca.getMemberId()).collect(Collectors.toSet()); + Map userNickNameMap = userClient.findById(memberIds); // id查询(详情查询)时返回标签信息 if (clueQueryCriteria.getId() != null) { for (ClueDto clueDto : clueDtoList) { + //查询分配人的用户名称 + Long memberId = clueDto.getMemberId(); + if (memberId != null && userNickNameMap.containsKey(memberId)){ + clueDto.setDistributeUserName(userNickNameMap.get(memberId)); + } //循环查库,ID查询只一次循环 clueDto.setIsRedis(0); Map> mapList = organizeClient.getLabel(clueDto).getBody(); @@ -190,10 +213,10 @@ public class ClueServiceImpl implements ClueService { List baseLabel = mapList.get("baseLabel"); clueDto.setBaseLabel(baseLabel); clueDto.setOrganizeLabel(organizeLabel); - if (CollUtil.isEmpty(organizeLabel)){ + if (CollUtil.isEmpty(organizeLabel)) { clueDto.setOrganizeLabel(new ArrayList<>()); } - if (CollUtil.isEmpty(baseLabel)){ + if (CollUtil.isEmpty(baseLabel)) { clueDto.setBaseLabel(new ArrayList<>()); } } @@ -232,11 +255,14 @@ public class ClueServiceImpl implements ClueService { @Override @Transactional(rollbackFor = Exception.class) public void update(ClueMiddle clueMiddle) { - //乐观锁,不用jpa查询(jpa有缓存这个坑) - if (clueMiddle.getOptimisticVersion() != null) { - Integer version = clueMiddleRepository.lookUpOptimisticVersion(clueMiddle.getClueId()); - if (version != clueMiddle.getOptimisticVersion()) { - throw new BadRequestException("刷新后重试"); + //更新通话状态时不加锁 + if (clueMiddle.getClueCallStatus() == null) { + //乐观锁,不用jpa查询(jpa有缓存这个坑) + if (clueMiddle.getOptimisticVersion() != null) { + Integer version = clueMiddleRepository.lookUpOptimisticVersion(clueMiddle.getClueId()); + if (version != clueMiddle.getOptimisticVersion()) { + throw new BadRequestException("刷新后重试"); + } } } ClueMiddle clueMiddleOne = clueMiddleRepository.findById(clueMiddle.getClueId()).orElseGet(ClueMiddle::new); @@ -252,6 +278,12 @@ public class ClueServiceImpl implements ClueService { if (StringUtils.isNotBlank(clueMiddle.getRemark())) { clueMiddleOne.setRemark(clueMiddle.getRemark()); } + if (clueMiddle.getClueStage() != null){ + clueMiddleOne.setClueStage(clueMiddle.getClueStage()); + } + if (clueMiddle.getClueCallStatus() != null){ + clueMiddleOne.setClueCallStatus(clueMiddle.getClueCallStatus()); + } clueMiddleOne.setOptimisticVersion(clueMiddle.getOptimisticVersion() + 1); clueMiddleRepository.save(clueMiddleOne); } @@ -261,9 +293,12 @@ public class ClueServiceImpl implements ClueService { */ @Override @Transactional(rollbackFor = Exception.class) - public void updateBatchMember( ClueQueryCriteria clueQueryCriteria) { + public void updateBatchMember(ClueQueryCriteria clueQueryCriteria) { List clueIdList = clueQueryCriteria.getClueIdList(); List userIdList = clueQueryCriteria.getUserIdList(); + if (CollUtil.isEmpty(clueIdList) || CollUtil.isEmpty(userIdList)){ + throw new BadRequestException("资源和指派人不能为空,请选择后重试"); + } //Map>:用户id -> 资源ID集合 List>> maps = AverageDataUtil.averageData(clueIdList, userIdList); //批量更新组员信息 @@ -377,54 +412,127 @@ public class ClueServiceImpl implements ClueService { } } - /** - * 查询资源公海 - */ @Override public Map queryCluePool(ClueQueryCriteria clueQueryCriteria, Pageable pageable) { if (clueQueryCriteria.getMemberId() != null) { - Set taskSet = new HashSet<>(); TaskQueryCriteria taskQueryCriteria = new TaskQueryCriteria(); taskQueryCriteria.setCreateBy(clueQueryCriteria.getMemberId()); taskQueryCriteria.setTaskType(1); taskQueryCriteria.setCreateTime(clueQueryCriteria.getCreateTime()); - if (clueQueryCriteria.getTaskName() != null){ + if (clueQueryCriteria.getTaskName() != null) { taskQueryCriteria.setBlurry(clueQueryCriteria.getTaskName()); } - if (clueQueryCriteria.getTaskId() != null){ + if (clueQueryCriteria.getTaskId() != null) { taskQueryCriteria.setId(clueQueryCriteria.getTaskId()); } - Object body = taskClient.query(taskQueryCriteria).getBody(); - JSONArray taskList = JSONUtil.parseArray(body); - if (CollUtil.isNotEmpty(taskList)) { - for (Object object : taskList) { - JSONObject task = JSONUtil.parseObj(object); - long taskId = Long.parseLong(String.valueOf(task.get("id"))); - taskSet.add(taskId); + Map clueList = findClueList(taskQueryCriteria, clueQueryCriteria, pageable); + return clueList; + } else { + log.info("========================用户id为空============================"); + throw new BadRequestException("刷新后重试"); + } + } + + @Override + public Object withdrawSource(List clueIds) { + if (CollUtil.isNotEmpty(clueIds)) { + // 查询已打过电话的 + List list = reportClient.getTurnOnIds(clueIds).getData(); + if (CollUtil.isNotEmpty(list)) { + //过滤掉打过电话的线索ID + clueIds = clueIds.stream().filter(num -> !list.contains(num)) .collect(Collectors.toList()); + } + if (CollUtil.isNotEmpty(clueIds)){ + List clueList = new ArrayList<>(); + List clueAll = clueMiddleRepository.findAllById(clueIds); + for (ClueMiddle clueMiddle : clueAll) { + clueMiddle.setSourceLabel(null); + clueMiddle.setOptimisticVersion(0); + clueMiddle.setRemark(null); + clueMiddle.setMemberStatus(0); + clueMiddle.setMemberId(null); + clueMiddle.setOrganizeId(null); + clueMiddle.setClueStage(0); + clueList.add(clueMiddle); } - List clueAll = clueJpa.findClue(taskSet, pageable); - for (Clue clue : clueAll) { - String taskNameKey = "task:name:" + clue.getTaskId(); - String str = (String) redisUtils.get(taskNameKey); - if (str == null || str.equals("null") || StringUtils.isBlank(str)) { - //设置空,取值判断空 - ClueDto clueDto = new ClueDto(); - clueDto.setIsRedis(1); - clueDto.setTaskId(clue.getTaskId()); - Map> nameMap = organizeClient.getLabel(clueDto).getBody(); - str = nameMap.get("taskName").get(0); - } - clue.setTaskName(str); + clueMiddleRepository.saveAll(clueList); + } + } + return new ResponseEntity<>(HttpStatus.OK); + } + + @Override + public Object findCompanyClue(ClueQueryCriteria clueQueryCriteria, Pageable pageable) { + TaskQueryCriteria taskQueryCriteria = new TaskQueryCriteria(); + taskQueryCriteria.setCreateBy(clueQueryCriteria.getUserId()); + if (clueQueryCriteria.getTaskName() != null) { + taskQueryCriteria.setBlurry(clueQueryCriteria.getTaskName()); + } + Map clueList = findClueList(taskQueryCriteria, clueQueryCriteria, pageable); + return clueList; + } + + /** + * 分页查询任务 + * + * @param clueQueryCriteria 条件 + * @param pageable 分页 + * @return + */ + private Map findClueList(TaskQueryCriteria taskQueryCriteria, ClueQueryCriteria clueQueryCriteria, Pageable pageable) { + //获取所有任务id + Set taskIds = findTaskId(taskQueryCriteria); + if (CollUtil.isNotEmpty(taskIds)) { + List clueAll = clueJpa.findClue(taskIds, pageable, clueQueryCriteria); + Set memberIds = clueAll.stream().map(ca -> ca.getMemberId()).collect(Collectors.toSet()); + Map userNickNameMap = userClient.findById(memberIds); + for (Clue clue : clueAll) { + //获取缓存中任务名称 + String str = findTaskName(clue.getTaskId()); + clue.setTaskName(str); + //查询分配人的用户名称 + Long memberId = clue.getMemberId(); + if (memberId != null && userNickNameMap.containsKey(memberId)){ + clue.setDistributeUserName(userNickNameMap.get(memberId)); } - Long count = clueJpa.getTaskCount(taskSet); - return PageUtil.toPage(clueAll, count); } - return PageUtil.toPage(new ArrayList<>(), 0); + Long count = clueJpa.getTaskCount(taskIds, clueQueryCriteria); + return PageUtil.toPage(clueAll, count); + } + return PageUtil.toPage(new ArrayList<>(), 0); + } - } else { - log.info("========================用户id为空============================"); - throw new BadRequestException("刷新后重试"); + /** + * 获取任务id集合 + */ + private Set findTaskId(TaskQueryCriteria taskQueryCriteria) { + Set taskSet = new HashSet<>(); + Object body = taskClient.query(taskQueryCriteria).getBody(); + JSONArray taskList = JSONUtil.parseArray(body); + if (CollUtil.isNotEmpty(taskList)) { + for (Object object : taskList) { + JSONObject task = JSONUtil.parseObj(object); + long taskId = Long.parseLong(String.valueOf(task.get("id"))); + taskSet.add(taskId); + } } + return taskSet; } + /** + * 获取缓存中任务名称 + */ + private String findTaskName(Long taskId) { + String taskNameKey = "task:name:" + taskId; + String str = (String) redisUtils.get(taskNameKey); + if (str == null || str.equals("null") || StringUtils.isBlank(str)) { + //设置空,取值判断空 + ClueDto clueDto = new ClueDto(); + clueDto.setIsRedis(1); + clueDto.setTaskId(taskId); + Map> nameMap = organizeClient.getLabel(clueDto).getBody(); + str = nameMap.get("taskName").get(0); + } + return str; + } } diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ConductRecordServiceImpl.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ConductRecordServiceImpl.java new file mode 100644 index 00000000..83e63fa3 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/impl/ConductRecordServiceImpl.java @@ -0,0 +1,55 @@ +package com.baiye.module.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baiye.feign.UserClient; +import com.baiye.module.dao.ConductRecordRepository; +import com.baiye.module.entity.ConductRecord; +import com.baiye.module.service.ConductRecordService; +import com.baiye.module.service.dto.ConductRecordDto; +import com.baiye.module.service.dto.ConductRecordQueryCriteria; +import com.baiye.module.service.mapstruct.ConductRecordMapper; +import com.baiye.util.QueryHelp; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Service +@Slf4j +@RequiredArgsConstructor +public class ConductRecordServiceImpl implements ConductRecordService { + + private final ConductRecordRepository conductRecordRepository; + private final ConductRecordMapper conductRecordMapper; + private final UserClient userClient; + + @Override + public void saveRecord(ConductRecord conductRecord) { + //查询创建人的用户名称 + Long userId = conductRecord.getCreateBy(); + Set userIdSet = new HashSet<>(); + userIdSet.add(userId); + Map userNickName = userClient.findById(userIdSet); + if (CollUtil.isNotEmpty(userNickName)){ + conductRecord.setName(userNickName.get(userId)); + } + conductRecordRepository.save(conductRecord); + } + + @Override + public void delRecord(Long id) { + conductRecordRepository.deleteById(id); + } + + @Override + public Object query(ConductRecordQueryCriteria conductRecordQueryCriteria) { + List conductRecordDtoList = conductRecordMapper.toDto(conductRecordRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, conductRecordQueryCriteria, criteriaBuilder))); + return conductRecordDtoList; + } +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/module/service/mapstruct/ConductRecordMapper.java b/services/ad-platform-source/src/main/java/com/baiye/module/service/mapstruct/ConductRecordMapper.java new file mode 100644 index 00000000..4f46d8b9 --- /dev/null +++ b/services/ad-platform-source/src/main/java/com/baiye/module/service/mapstruct/ConductRecordMapper.java @@ -0,0 +1,11 @@ +package com.baiye.module.service.mapstruct; + +import com.baiye.model.base.BaseMapper; +import com.baiye.module.entity.ConductRecord; +import com.baiye.module.service.dto.ConductRecordDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface ConductRecordMapper extends BaseMapper { +} diff --git a/services/ad-platform-source/src/main/java/com/baiye/task/FileAnalysisTask.java b/services/ad-platform-source/src/main/java/com/baiye/task/FileAnalysisTask.java index 3d15ba14..cf49a482 100644 --- a/services/ad-platform-source/src/main/java/com/baiye/task/FileAnalysisTask.java +++ b/services/ad-platform-source/src/main/java/com/baiye/task/FileAnalysisTask.java @@ -127,7 +127,7 @@ public class FileAnalysisTask { public void distinctNid(Long taskId) { Set taskIds = new HashSet(); taskIds.add(taskId); - List clueList = clueJpa.findClue(taskIds, null); + List clueList = clueJpa.findClue(taskIds, null, null); Map> map = clueList.stream().collect(Collectors.groupingBy(Clue::getNid)); Set keySet = map.keySet(); for (String key : keySet) { diff --git a/services/ad-platform-source/src/main/resources/application-dev.yml b/services/ad-platform-source/src/main/resources/application-dev.yml index 18724eb0..efbcbde2 100644 --- a/services/ad-platform-source/src/main/resources/application-dev.yml +++ b/services/ad-platform-source/src/main/resources/application-dev.yml @@ -3,21 +3,20 @@ spring: cloud: nacos: discovery: - server-addr: ${NACOS_HOST:118.178.137.129}:${NACOS_PORT:8848} + server-addr: ${NACOS_HOST:8.130.96.163}:${NACOS_PORT:8848} redis: database: 2 - host: 118.178.137.129 -# host: 101.35.109.129 + host: 8.130.96.163 timeout: 5000 datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://118.178.137.129:3306/ad_platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://8.130.96.163:3306/ad_platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull username: root - password: root + password: y7z7noq2 # 初始连接数 initial-size: 5 # 最小连接数 diff --git a/services/ad-platform-source/src/main/resources/application-test.yml b/services/ad-platform-source/src/main/resources/application-test.yml index 051f47b2..225dff72 100644 --- a/services/ad-platform-source/src/main/resources/application-test.yml +++ b/services/ad-platform-source/src/main/resources/application-test.yml @@ -3,20 +3,20 @@ spring: cloud: nacos: discovery: - server-addr: ${NACOS_HOST:118.178.137.129}:${NACOS_PORT:8848} + server-addr: ${NACOS_HOST:8.130.96.163}:${NACOS_PORT:8848} redis: database: 2 - host: 118.178.137.129 + host: 8.130.96.163 timeout: 5000 datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://118.178.137.129:3306/ad_platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://8.130.96.163:3306/ad_platform?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull username: root - password: root + password: y7z7noq2 # 初始连接数 initial-size: 5 # 最小连接数 @@ -63,8 +63,8 @@ spring: storage: url: /usr/local/webapp/source/files/ de_symbol: / - download-template: http://118.178.137.129:8001/source/download/custom.xlsx - download-template-move: http://118.178.137.129:8001/source/download/dynamictemplate.xlsx + download-template: http://8.130.96.163:8001/source/download/custom.xlsx + download-template-move: http://8.130.96.163:8001/source/download/dynamictemplate.xlsx # 线程池配置 save: