diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerIntentInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerIntentInfoDAO.java index bd2edc7d1..c79338443 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerIntentInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerIntentInfoDAO.java @@ -5,6 +5,7 @@ import com.cool.store.entity.HyPartnerIntentInfoDO; import com.cool.store.mapper.HyPartnerIntentInfoMapper; import com.github.pagehelper.PageInfo; import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import javax.annotation.Resource; @@ -40,11 +41,12 @@ public class HyPartnerIntentInfoDAO { } - public List selectPartnerIntentApplyInfoList(String userId, String workflowStage, String workflowStatus){ + public List selectPartnerIntentApplyInfoList(String userId, String workflowStage, String workflowStatus, String keyword, Integer callStatus, + List userPortraitIdList, String lastFollowStartTime, String lastFollowEndTime, String userChannelIdList){ if (StringUtils.isEmpty(userId)){ return new ArrayList<>(); } - return hyPartnerIntentInfoMapper.selectPartnerIntentApplyInfoList(userId,workflowStage,workflowStatus); + return hyPartnerIntentInfoMapper.selectPartnerIntentApplyInfoList(userId,workflowStage,workflowStatus,keyword,callStatus,userPortraitIdList,lastFollowStartTime,lastFollowEndTime,userChannelIdList); } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerIntentInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerIntentInfoMapper.java index 623f1d356..cbce0e3a8 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerIntentInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerIntentInfoMapper.java @@ -38,8 +38,14 @@ public interface HyPartnerIntentInfoMapper { * @return */ List selectPartnerIntentApplyInfoList(@Param("userId") String userId, - @Param("workflowStage") String workflowStage , - @Param("workflowStatus") String workflowStatus); + @Param("workflowStage") String workflowStage , + @Param("workflowStatus") String workflowStatus, + @Param("keyword") String keyword, + @Param("callStatus") Integer callStatus, + @Param("userPortraitIdList") List userPortraitIdList, + @Param("lastFollowStartTime") String lastFollowStartTime, + @Param("lastFollowEndTime") String lastFollowEndTime, + @Param("userChannelIdList") String userChannelIdList); /** * 根据线索ID查询数据 diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelMapper.java index 581481047..747e06f68 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLabelMapper.java @@ -33,4 +33,6 @@ public interface HyPartnerLabelMapper { * @param labelGroupId 标签组 id */ Boolean whetherGroupInUse(@Param("labelGroupId") Long labelGroupId); + + List getLabelListByIds(@Param("labelIds") List labelIds); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserChannelMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserChannelMapper.java index 59631f995..90a8ee108 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserChannelMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerUserChannelMapper.java @@ -4,6 +4,8 @@ import com.cool.store.entity.HyPartnerUserChannelDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + @Mapper public interface HyPartnerUserChannelMapper { @@ -22,4 +24,8 @@ public interface HyPartnerUserChannelMapper { HyPartnerUserChannelDO selectByChannelId(@Param("channelId") Long id); HyPartnerUserChannelDO selectByChannelName(@Param("channelName") String channelName); + + List getAllUserChannel(); + + List getUserChannelByIds(List userChannelIds); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerIntentInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerIntentInfoMapper.xml index cfa2537ac..ad7c17f26 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerIntentInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerIntentInfoMapper.xml @@ -261,13 +261,47 @@ b.id as id, b.create_time as partnerSubmitTime, b.deadline as deadline, + bi.user_portrait as userPortrait, + hpuinfo.mobile as mobile, + hpuinfo.username as partnerUserName, + hpuinfo.user_channel_id as userChannelId, hpuinfo.live_area as liveArea, hpuinfo.want_shop_area as wantShopArea, - hpuinfo.accept_adjust_type as acceptAdjustType + hpuinfo.accept_adjust_type as acceptAdjustType, + cr.create_time as lastFollowTime, + cr.call_status as callStatus from hy_partner_line_info a left join hy_partner_intent_info b on a.id = b.partner_line_id + left join hy_partner_base_info bi on a.id = bi.partner_line_id LEFT JOIN hy_partner_user_info hpuinfo ON a.partner_id = hpuinfo.partner_id + LEFT join call_record cr on a.id = cr.partner_line_id where deleted = 0 and line_status!=3 + and (cr.id in ( + select max(id) maxId + from call_record group by partner_line_id) or cr.id is null) + + and (hpuinfo.mobile like concat('%',#{keyword},'%') or hpuinfo.username like concat('%',#{keyword},'%')) + + + and cr.call_status = #{callStatus} + + + and cr.call_status != 1 + + + and cr.create_time>#{lastFollowStartTime} and cr.create_time #{lastFollowEndTime} + + + + #{userChannelId} + + + + and + + bi.user_portrait like concat("%,", #{userPortraitId}, ",%") + + and a.investment_manager = #{userId} diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml index d41f33d6b..9a9b1b278 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml @@ -302,6 +302,9 @@ hpli.partner_id as partnerId, hpli.deadline as deadline, hpli.workflow_status as status, + cr.create_time as lastFollowTime, + cr.call_status as callStatus, + bi.user_portrait as userPortrait, a.id as interviewId, a.auth_code as authCode, a.approve_time as approveTime, @@ -315,24 +318,26 @@ hpci.intention_contract_no as intentionContractNo from hy_partner_line_info hpli left join hy_partner_interview a on hpli.id = a.partner_line_id + left join hy_partner_base_info bi on hpli.id = bi.partner_line_id left join hy_partner_interview_plan b on a.interview_plan_id = b.id left join hy_partner_certification_info hpci on hpci.partner_interview_id = a.id - - and hpli.deleted = 0 and hpli.line_status!=3 - - and b.deleted = 0 - - - and hpli.workflow_stage = #{workflowStage} - - - and hpli.workflow_status = #{workflowStatus} - - - and hpli.investment_manager = #{userId} - - - + LEFT join call_record cr on hpli.id = cr.partner_line_id + where hpli.deleted = 0 and hpli.line_status!=3 + and (cr.id in ( + select max(id) maxId + from call_record group by partner_line_id) or cr.id is null) + + and b.deleted = 0 + + + and hpli.workflow_stage = #{workflowStage} + + + and hpli.workflow_status = #{workflowStatus} + + + and hpli.investment_manager = #{userId} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml index ac8633191..e9268db43 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml @@ -441,12 +441,15 @@ a.update_time as updateTime, b.partner_id as partner_id, b.mobile as mobile, + b.user_channel_id as userChannelId, b.username as userName, b.want_shop_area as wantShopArea, b.accept_adjust_type as acceptAdjustType, + bi.user_portrait as userPortrait, hpl.phone_address as phoneAddress FROM hy_partner_line_info a inner JOIN hy_partner_user_info b on a.partner_id = b.partner_id + left join hy_partner_base_info bi on hpli.id = bi.partner_line_id LEFT JOIN hy_open_area_info hoai ON hoai.id = b.want_shop_area LEFT JOIN hy_phone_location hpl ON hpl.phone_number = b.mobile where a.line_status = 0 and a.deleted = 0 @@ -485,6 +488,7 @@ hpli.development_manager as developmentManager, hpli.line_status as lineStatus, hpli.update_time as updateTime, + hpuinfo.user_channel_id as userChannelId, hpuinfo.want_shop_area as wantShopArea, hpuinfo.accept_adjust_type as acceptAdjustType, hpuinfo.username as partnerUserName, @@ -493,11 +497,13 @@ hpuinfo.shop_name as storeName, hpuinfo.recommend_partner_name as recommendPartnerName, hpuinfo.recommend_partner_mobile as recommendPartnerMobile, + bi.user_portrait as userPortrait, eu.name as investmentManagerName, eu.mobile as investmentManagerMobile FROM hy_partner_line_info hpli LEFT JOIN hy_partner_intent_info hpii ON hpli.id = hpii.partner_line_id + left join hy_partner_base_info bi on hpli.id = bi.partner_line_id LEFT JOIN hy_partner_user_info hpuinfo ON hpli.partner_id = hpuinfo.partner_id LEFT JOIN enterprise_user eu ON hpli.investment_manager = eu.user_id LEFT JOIN hy_open_area_info hoai ON hoai.id = hpuinfo.want_shop_area diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserChannelMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserChannelMapper.xml index 87d0a611e..c0d72e331 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserChannelMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserChannelMapper.xml @@ -90,4 +90,19 @@ update_time = #{updateTime,jdbcType=TIMESTAMP} where id = #{id,jdbcType=BIGINT} + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerIntentApplyInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerIntentApplyInfoDTO.java index 05d9f67e9..488d39cd9 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerIntentApplyInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerIntentApplyInfoDTO.java @@ -19,6 +19,8 @@ public class PartnerIntentApplyInfoDTO { @ApiModelProperty("加盟商用户名称") private String partnerUserName; + private String mobile; + @ApiModelProperty("hy_partner_user_info.partner_id") private String partnerId; @@ -46,4 +48,17 @@ public class PartnerIntentApplyInfoDTO { @ApiModelProperty("子流程状态") private String workflowStatus; + @ApiModelProperty("上次跟进时间") + private String lastFollowTime; + + @ApiModelProperty("接通状态") + private Integer callStatus; + + @ApiModelProperty("来源名称") + private String userChannelName; + + private Integer userChannelId; + + private String userPortrait; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerInterviewInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerInterviewInfoDTO.java index 878979fab..20336a5eb 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerInterviewInfoDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PartnerInterviewInfoDTO.java @@ -61,4 +61,12 @@ public class PartnerInterviewInfoDTO { @ApiModelProperty("过程信息") private String processInfo; + @ApiModelProperty("上次跟进时间") + private Date lastFollowTime; + + @ApiModelProperty("接通状态") + private Integer callStatus; + + private String userPortrait; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PrivateSeaLineDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PrivateSeaLineDTO.java index fb42be349..44c6ea79a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PrivateSeaLineDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PrivateSeaLineDTO.java @@ -77,4 +77,8 @@ public class PrivateSeaLineDTO { private String recommendPartnerMobile; + private Integer userChannelId; + + private String userPortrait; + } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PublicSeaLineDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PublicSeaLineDTO.java index 53c0bf622..aa19139a3 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PublicSeaLineDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PublicSeaLineDTO.java @@ -29,4 +29,8 @@ public class PublicSeaLineDTO { private Date updateTime; private String phoneAddress; + + private Integer userChannelId; + + private String userPortrait; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/UserChannelDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/UserChannelDTO.java new file mode 100644 index 000000000..2f96a22ec --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/UserChannelDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.partner; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2023/8/10 11:12 + * @Version 1.0 + */ +@Data +public class UserChannelDTO { + + private Long userChannelId; + + private String userChannelName; + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java index 6302f7cd7..236f73978 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/HyPartnerUserInfoDO.java @@ -3,6 +3,8 @@ package com.cool.store.entity; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.util.Date; + +import io.swagger.models.auth.In; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/AddTagsRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/AddTagsRequest.java index 099cceb28..ae3bbfdcb 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/AddTagsRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/AddTagsRequest.java @@ -18,5 +18,5 @@ public class AddTagsRequest { @ApiModelProperty("加盟申请基本信息ID") private Long partnerBaseInfoId; @ApiModelProperty("标签列表") - private List Tags; + private List Tags; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/BatchTransferInvestmentManagerRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/BatchTransferInvestmentManagerRequest.java new file mode 100644 index 000000000..41d2d1c7e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/BatchTransferInvestmentManagerRequest.java @@ -0,0 +1,21 @@ +package com.cool.store.request; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/8/11 14:30 + * @Version 1.0 + */ +@Data +@ApiModel +public class BatchTransferInvestmentManagerRequest { + + private List lineIds; + + private String userId; + +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerIntentApplyInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerIntentApplyInfoVO.java index 10983242a..56fe3101b 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerIntentApplyInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerIntentApplyInfoVO.java @@ -8,8 +8,11 @@ import com.google.common.collect.Lists; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -23,6 +26,7 @@ import java.util.Map; */ @Data @ApiModel +@Slf4j public class PartnerIntentApplyInfoVO { @ApiModelProperty("") @@ -61,8 +65,20 @@ public class PartnerIntentApplyInfoVO { @ApiModelProperty("阶段状态") private String WorkflowStatus; + @ApiModelProperty("用户画像") + private List userPortraitList; - public static List convertList(List list, Map infoDOMap, Map wantShopAreaNameMap, String workflowStatus){ + @ApiModelProperty("上次跟进时间") + private String lastFollowTime; + + @ApiModelProperty("接通状态") + private Integer callStatus; + + @ApiModelProperty("来源名称") + private String userChannelName; + + public static List convertList(List list, Map wantShopAreaNameMap, String workflowStatus, + Map userChannelMap,Map userPortraitMap ){ if(CollectionUtils.isEmpty(list)){ return Lists.newArrayList(); } @@ -78,11 +94,34 @@ public class PartnerIntentApplyInfoVO { partnerIntentApplyInfoVO.setWantShopArea(partnerIntentApplyInfoDTO.getWantShopArea()); String deadLine = DateUtil.format(partnerIntentApplyInfoDTO.getDeadline(), CoolDateUtils.DATE_FORMAT_SEC_2); partnerIntentApplyInfoVO.setDeadline(deadLine); - HyPartnerUserInfoDO infoDOMapOrDefault = infoDOMap.getOrDefault(partnerIntentApplyInfoDTO.getPartnerId(), new HyPartnerUserInfoDO()); - partnerIntentApplyInfoVO.setPartnerUserName(infoDOMapOrDefault.getUsername()); - partnerIntentApplyInfoVO.setPartnerUserPhone(infoDOMapOrDefault.getMobile()); + partnerIntentApplyInfoVO.setPartnerUserName(partnerIntentApplyInfoDTO.getPartnerUserName()); + partnerIntentApplyInfoVO.setPartnerUserPhone(partnerIntentApplyInfoDTO.getMobile()); partnerIntentApplyInfoVO.setWorkflowStatus(workflowStatus); partnerIntentApplyInfoVO.setWantShopAreaName(wantShopAreaNameMap.get(partnerIntentApplyInfoDTO.getWantShopArea())); + + partnerIntentApplyInfoVO.setLastFollowTime(partnerIntentApplyInfoDTO.getLastFollowTime()); + Integer callStatus = null; + if(partnerIntentApplyInfoDTO.getCallStatus()!=null){ + callStatus = partnerIntentApplyInfoDTO.getCallStatus()==1?partnerIntentApplyInfoDTO.getCallStatus():0; + } + partnerIntentApplyInfoVO.setCallStatus(callStatus); + partnerIntentApplyInfoVO.setUserChannelName(userChannelMap.getOrDefault(partnerIntentApplyInfoDTO.getUserChannelId(),"")); + + List userPortraitList= new ArrayList<>(); + if(StringUtils.isNotEmpty(partnerIntentApplyInfoDTO.getUserPortrait())){ + String[] parts = partnerIntentApplyInfoDTO.getUserPortrait().split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (!trimmedPart.isEmpty()) { + try { + userPortraitList.add(userPortraitMap.get(Long.valueOf(part))); + } catch (NumberFormatException e) { + log.info("Invalid format: {}" , trimmedPart); + } + } + } + } + partnerIntentApplyInfoVO.setUserPortraitList(userPortraitList); resultList.add(partnerIntentApplyInfoVO); } return resultList; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerInterviewInfoVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerInterviewInfoVO.java index 8677e9507..f5fe8861d 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerInterviewInfoVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PartnerInterviewInfoVO.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; +import java.util.List; /** * @Author suzhuhong @@ -71,4 +72,16 @@ public class PartnerInterviewInfoVO { @ApiModelProperty("审批发起时间") private String approveTime; + + @ApiModelProperty("用户画像") + private List userPortraitList; + + @ApiModelProperty("上次跟进时间") + private String lastFollowTime; + + @ApiModelProperty("接通状态") + private Integer callStatus; + + @ApiModelProperty("来源名称") + private String userChannelName; } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PrivateSeaLineListVo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PrivateSeaLineListVo.java index 787c29e8b..7c156d12b 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PrivateSeaLineListVo.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PrivateSeaLineListVo.java @@ -7,6 +7,8 @@ import com.cool.store.utils.CoolDateUtils; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import java.util.ArrayList; @@ -21,6 +23,7 @@ import java.util.Map; */ @Data @ApiModel +@Slf4j public class PrivateSeaLineListVo { @@ -92,8 +95,15 @@ public class PrivateSeaLineListVo { private String investmentManagerMobile; + @ApiModelProperty("用户画像") + private List userPortraitList; - public static List convertList(List list, Map finalDevManagerMap, Map wantShopAreaNameMap,Map hyPartnerInterviewPlanDOMap){ + @ApiModelProperty("来源名称") + private String userChannelName; + + + public static List convertList(List list, Map finalDevManagerMap, Map wantShopAreaNameMap, + Map hyPartnerInterviewPlanDOMap,Map channelMap,Map userPortraitMap){ List resultList = new ArrayList<>(); for (PrivateSeaLineDTO x : list) { PrivateSeaLineListVo privateSeaLineListVo = new PrivateSeaLineListVo(); @@ -127,6 +137,22 @@ public class PrivateSeaLineListVo { privateSeaLineListVo.setStartTime(hyPartnerInterviewPlanDOMap.getOrDefault(x.getLineId(),new HyPartnerInterviewPlanDO()).getStartTime()); privateSeaLineListVo.setInterviewPlanId(hyPartnerInterviewPlanDOMap.getOrDefault(x.getLineId(),new HyPartnerInterviewPlanDO()).getId()); privateSeaLineListVo.setDevelopmentManagerName(finalDevManagerMap.get(x.getDevelopmentManager())); + privateSeaLineListVo.setUserChannelName(channelMap.get(x.getUserChannelId())); + List userPortraitList= new ArrayList<>(); + if(StringUtils.isNotEmpty(x.getUserPortrait())){ + String[] parts = x.getUserPortrait().split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (!trimmedPart.isEmpty()) { + try { + userPortraitList.add(userPortraitMap.get(Long.valueOf(part))); + } catch (NumberFormatException e) { + log.info("Invalid format: {}" , trimmedPart); + } + } + } + } + privateSeaLineListVo.setUserPortraitList(userPortraitList); resultList.add(privateSeaLineListVo); } return resultList; diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/PublicSeaLineListVo.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/PublicSeaLineListVo.java index e582816fb..825c67b0a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/PublicSeaLineListVo.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/PublicSeaLineListVo.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; +import java.util.List; /** * @Author suzhuhong @@ -71,4 +72,10 @@ public class PublicSeaLineListVo { private String updateTime; + @ApiModelProperty("用户画像") + private List userPortraitList; + + @ApiModelProperty("来源名称") + private String userChannelName; + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerIntentInfoService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerIntentInfoService.java index 13cbc9c40..1a4c58015 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerIntentInfoService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerIntentInfoService.java @@ -10,6 +10,8 @@ import com.cool.store.vo.PartnerIntentInfoVO; import com.cool.store.vo.PartnerUserInfoVO; import com.github.pagehelper.PageInfo; +import java.util.List; + /** * @Author suzhuhong * @Date 2023/6/9 14:54 @@ -26,7 +28,8 @@ public interface HyPartnerIntentInfoService { * @param pageNumber * @return */ - PageInfo getPartnerIntentApplyList(String userId, String type, Integer pageSize, Integer pageNumber); + PageInfo getPartnerIntentApplyList(String userId, String type, Integer pageSize, Integer pageNumber,String keyword, Integer callStatus, + List userPortraitIdList, Long lastFollowStartTime, Long lastFollowEndTime, String userChannelIdList); /** * 根据线索查询加盟商意向申请信息 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerLineInfoService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerLineInfoService.java index 13f82e519..c8fbbde4c 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerLineInfoService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerLineInfoService.java @@ -3,10 +3,7 @@ package com.cool.store.service; import com.cool.store.context.LoginUserInfo; import com.cool.store.entity.HyPartnerLineInfoDO; import com.cool.store.exception.ApiException; -import com.cool.store.request.CloseFollowRequest; -import com.cool.store.request.LineRequest; -import com.cool.store.request.PrivateSeaLineListRequest; -import com.cool.store.request.TransferInvestmentManagerRequest; +import com.cool.store.request.*; import com.cool.store.vo.*; import com.cool.store.vo.interview.InterviewVO; import com.github.pagehelper.PageInfo; @@ -60,6 +57,8 @@ public interface HyPartnerLineInfoService { */ Boolean transferInvestmentManager(LoginUserInfo user, TransferInvestmentManagerRequest request) throws ApiException; + Boolean batchTransferInvestmentManager(LoginUserInfo user, BatchTransferInvestmentManagerRequest request) throws ApiException; + /** * 分配招商经理 * @param userId @@ -117,7 +116,7 @@ public interface HyPartnerLineInfoService { * @param privateSeaLineListRequest * @return */ - PageInfo privateSeaLineList(String userId, PrivateSeaLineListRequest privateSeaLineListRequest) ; + PageInfo privateSeaLineList(String userId, PrivateSeaLineListRequest privateSeaLineListRequest,Boolean allPrivateSeaFlag) ; PartnerLineBaseInfoVO getPartnerLinBaseInfo(String partnerId); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerUserChannelService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerUserChannelService.java new file mode 100644 index 000000000..094d5a768 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/HyPartnerUserChannelService.java @@ -0,0 +1,21 @@ +package com.cool.store.service; + +import com.cool.store.dto.partner.UserChannelDTO; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/8/10 11:12 + * @Version 1.0 + */ +public interface HyPartnerUserChannelService { + + /** + * 查询所有的线索来源 + * @return + */ + List queryAllUserChannelList(); + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java index a0abffb8c..898f71d03 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/LabelService.java @@ -8,6 +8,7 @@ import com.cool.store.exception.ApiException; import com.cool.store.vo.LabelListVo; import java.util.List; +import java.util.Map; /** * @author Fun Li 2023/8/10 14:23 @@ -28,6 +29,21 @@ public interface LabelService { */ void addLabel(LabelAddDTO dto) throws ApiException; + /** + * 标签MAP + * @param userPortraitStrList + * @return + */ + Map getUserPortraitMap(List userPortraitStrList); + + /** + * 查询标签中文名称集合 + * @param userPortraitMap + * @param userPortraitStr + * @return + */ + List getUserPortraitList(Map userPortraitMap,String userPortraitStr); + /** * 修改标签信息 * @param dto 新标签信息 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerBaseInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerBaseInfoServiceImpl.java index 69313b7fb..502dff100 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerBaseInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerBaseInfoServiceImpl.java @@ -3,6 +3,7 @@ package com.cool.store.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; import com.cool.store.constants.RedisConstant; import com.cool.store.context.CurrentUserHolder; import com.cool.store.context.LoginUserInfo; @@ -36,6 +37,7 @@ import javax.annotation.Resource; import java.text.MessageFormat; import java.util.Collections; import java.util.Date; +import java.util.stream.Collectors; /** * @Author suzhuhong @@ -91,7 +93,8 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService { throw new ServiceException(ErrorCodeEnum.PARTNER_BASE_INFO_NOT_EXIST); } hyPartnerBaseInfo.setId(addTagsRequest.getPartnerBaseInfoId()); - hyPartnerBaseInfo.setUserPortrait(CollectionUtils.isNotEmpty(addTagsRequest.getTags())? JSONObject.toJSONString(addTagsRequest.getTags()):""); + hyPartnerBaseInfo.setUserPortrait(CollectionUtils.isNotEmpty(addTagsRequest.getTags())? + addTagsRequest.getTags().stream().map(Object::toString).collect(Collectors.joining(CommonConstants.COMMA, CommonConstants.COMMA, CommonConstants.COMMA)):""); hyPartnerBaseInfoDAO.updateByPrimaryKeySelective(hyPartnerBaseInfo); HyPartnerLineInfoDO line = hyPartnerLineInfoDAO.getByPartnerId(hyPartnerBaseInfo.getPartnerId()); //添加日志 diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerIntentInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerIntentInfoServiceImpl.java index aaa31408f..cf0306790 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerIntentInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerIntentInfoServiceImpl.java @@ -15,14 +15,13 @@ import com.cool.store.dto.partner.PartnerIntentApplyInfoDTO; import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.HyPartnerLabelMapper; +import com.cool.store.mapper.HyPartnerUserChannelMapper; import com.cool.store.request.BaseUserInfoRequest; import com.cool.store.request.IndustryCognitionInfoRequest; import com.cool.store.request.PartnerIntentInfoRequest; import com.cool.store.request.PartnerWantShopInfoRequest; -import com.cool.store.service.HyPartnerIntentInfoService; -import com.cool.store.service.HyPartnerLineInfoService; -import com.cool.store.service.HyPhoneLocationService; -import com.cool.store.service.LogService; +import com.cool.store.service.*; import com.cool.store.utils.CoolDateUtils; import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.StringUtil; @@ -73,12 +72,16 @@ public class HyPartnerIntentInfoServiceImpl implements HyPartnerIntentInfoServic HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO; @Autowired private LogService logService; - + @Resource + HyPartnerUserChannelMapper hyPartnerUserChannelMapper; + @Resource + LabelService labelService; @Autowired private NoticeService noticeService; @Override - public PageInfo getPartnerIntentApplyList(String userId, String type, Integer pageSize, Integer pageNumber) { + public PageInfo getPartnerIntentApplyList(String userId, String type, Integer pageSize, Integer pageNumber,String keyword, Integer callStatus, + List userPortraitIdList, Long lastFollowStartTime, Long lastFollowEndTime, String userChannelIdList) { PartnerIntentApplyInfoVO partnerIntentApplyInfoVO = new PartnerIntentApplyInfoVO(); String workflowStatus = ""; if (CommonConstants.PENDING.equals(type)) { @@ -87,22 +90,35 @@ public class HyPartnerIntentInfoServiceImpl implements HyPartnerIntentInfoServic if (CommonConstants.FOLLOW.equals(type)) { workflowStatus = WorkflowStatusEnum.INTENT_0.getCode(); } + String lastFollowStartTimeStr = null; + String lastFollowEndTimeStr = null; + if (lastFollowStartTime!=null||lastFollowEndTime!=null){ + lastFollowStartTimeStr = DateUtil.format(new Date(lastFollowStartTime), CoolDateUtils.DATE_FORMAT_SEC); + lastFollowEndTimeStr = DateUtil.format(new Date(lastFollowEndTime), CoolDateUtils.DATE_FORMAT_SEC); + } PageHelper.startPage(pageNumber,pageSize); - PageInfo partnerIntentApplyInfo = new PageInfo(hyPartnerIntentInfoDAO.selectPartnerIntentApplyInfoList(userId, WorkflowStageEnum.INTENT.getCode(), workflowStatus)); + PageInfo partnerIntentApplyInfo = new PageInfo(hyPartnerIntentInfoDAO.selectPartnerIntentApplyInfoList(userId, WorkflowStageEnum.INTENT.getCode(), workflowStatus,keyword + ,callStatus,userPortraitIdList,lastFollowStartTimeStr,lastFollowEndTimeStr,userChannelIdList)); if (partnerIntentApplyInfo==null){ return new PageInfo<>(); } List list = partnerIntentApplyInfo.getList(); - List partnerIds = list.stream().map(PartnerIntentApplyInfoDTO::getPartnerId).collect(Collectors.toList()); - List hyPartnerUserInfoDOS = hyPartnerUserInfoDAO.selectByPartnerIds(partnerIds); - Map infoDOMap = hyPartnerUserInfoDOS.stream().collect(Collectors.toMap(HyPartnerUserInfoDO::getPartnerId, data -> data)); + List userChannelIds = list.stream().filter(x -> x.getUserChannelId() != null).map(PartnerIntentApplyInfoDTO::getUserChannelId).collect(Collectors.toList()); + List userChannelList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(userChannelIds)){ + userChannelList = hyPartnerUserChannelMapper.getUserChannelByIds(userChannelIds); + } + List userPortraitList = list.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(PartnerIntentApplyInfoDTO::getUserPortrait).collect(Collectors.toList()); + Map userChannelMap = userChannelList.stream().collect(Collectors.toMap(HyPartnerUserChannelDO::getChannelId, HyPartnerUserChannelDO::getChannelName)); List wantShopAreaList = list.stream().filter(x->StringUtils.isNotEmpty(x.getWantShopArea())).map(PartnerIntentApplyInfoDTO::getWantShopArea).map(Long::parseLong).distinct().collect(Collectors.toList()); Map wantShopAreaNameMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaList); - List resultList = PartnerIntentApplyInfoVO.convertList(list, infoDOMap, wantShopAreaNameMap, workflowStatus); + List resultList = PartnerIntentApplyInfoVO.convertList(list, wantShopAreaNameMap, workflowStatus,userChannelMap,labelService.getUserPortraitMap(userPortraitList)); partnerIntentApplyInfo.setList(resultList); return partnerIntentApplyInfo; } + + @Override public Boolean updatePartnerIntentInfo(LoginUserInfo userInfo, BaseUserInfoRequest baseUserInfoRequest) { diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java index 1825f61bf..d2b226b2f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java @@ -5,6 +5,7 @@ import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; import com.cool.store.dto.message.RemindInterviewMsgDTO; import com.cool.store.dto.message.SendCardMessageDTO; +import com.cool.store.dto.partner.PartnerIntentApplyInfoDTO; import com.cool.store.dto.partner.PartnerInterviewInfoDTO; import com.cool.store.entity.*; import com.cool.store.enums.MessageTypeEnum; @@ -16,11 +17,13 @@ import com.cool.store.http.ISVHttpRequest; import com.cool.store.mapper.HyPartnerInterviewMapper; import com.cool.store.mapper.HyPartnerInterviewPlanMapper; import com.cool.store.mapper.HyPartnerLineInfoMapper; +import com.cool.store.mapper.HyPartnerUserChannelMapper; import com.cool.store.request.CloseFollowRequest; import com.cool.store.request.GetInterviewListReq; import com.cool.store.service.HyPartnerInterviewPlanService; import com.cool.store.service.HyPartnerLineInfoService; import com.cool.store.service.InterviewService; +import com.cool.store.service.LabelService; import com.cool.store.utils.CoolDateUtils; import com.cool.store.vo.InterviewDetailInfoVO; import com.cool.store.vo.PartnerInterviewInfoVO; @@ -78,6 +81,10 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan @Autowired private InterviewService interviewService; + @Resource + LabelService labelService; + @Resource + HyPartnerUserChannelMapper hyPartnerUserChannelMapper; @Value("${feishu.notice.link.url:null}") @@ -129,6 +136,9 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan List result = new ArrayList<>(); List partnerIds = list.stream().map(PartnerInterviewInfoDTO::getPartnerId).collect(Collectors.toList()); List hyPartnerUserInfoDOS = hyPartnerUserInfoDAO.selectByPartnerIds(partnerIds); + List userChannelIds = hyPartnerUserInfoDOS.stream().filter(x -> x.getUserChannelId() != null).map(HyPartnerUserInfoDO::getUserChannelId).collect(Collectors.toList()); + List userChannelList = hyPartnerUserChannelMapper.getUserChannelByIds(userChannelIds); + Map channelMap = userChannelList.stream().collect(Collectors.toMap(HyPartnerUserChannelDO::getChannelId, HyPartnerUserChannelDO::getChannelName)); List interviewerUserIds = list.stream().filter(x-> StringUtils.isNotEmpty(x.getInterviewer())).map(PartnerInterviewInfoDTO::getInterviewer).collect(Collectors.toList()); List userInfoByUserIds = enterpriseUserDAO.getUserInfoByUserIds(interviewerUserIds); Map interviewerUserMap = userInfoByUserIds.stream().collect(Collectors.toMap(EnterpriseUserDO::getUserId, data -> data)); @@ -136,8 +146,10 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan List lineIds = list.stream().map(PartnerInterviewInfoDTO::getPartnerLineId).collect(Collectors.toList()); List hyPartnerLineInfoDOS= hyPartnerLineInfoDAO.getHyPartnerLineInfoListByIds(lineIds); Map hyPartnerLineInfoDOMap = hyPartnerLineInfoDOS.stream().collect(Collectors.toMap(HyPartnerLineInfoDO::getId, data -> data)); + List userPortraitList = list.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(PartnerInterviewInfoDTO::getUserPortrait).collect(Collectors.toList()); + Map userPortraitMap = labelService.getUserPortraitMap(userPortraitList); list.stream().forEach(x->{ - PartnerInterviewInfoVO partnerInterviewInfoVO = convertPartnerInterviewInfoDTOToVo(x); + PartnerInterviewInfoVO partnerInterviewInfoVO = convertPartnerInterviewInfoDTOToVo(x,userPortraitMap,userNameMap.get(x.getPartnerId()),channelMap); partnerInterviewInfoVO.setPartnerName(userNameMap.getOrDefault(x.getPartnerId(),new HyPartnerUserInfoDO()).getUsername()); partnerInterviewInfoVO.setPartnerPhone(userNameMap.getOrDefault(x.getPartnerId(),new HyPartnerUserInfoDO()).getMobile()); partnerInterviewInfoVO.setInterviewerName(interviewerUserMap.getOrDefault(x.getInterviewer(),new EnterpriseUserDO()).getName()); @@ -170,12 +182,17 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan List partnerIds = list.stream().map(PartnerInterviewInfoDTO::getPartnerId).collect(Collectors.toList()); List hyPartnerUserInfoDOS = hyPartnerUserInfoDAO.selectByPartnerIds(partnerIds); Map userNameMap = hyPartnerUserInfoDOS.stream().collect(Collectors.toMap(HyPartnerUserInfoDO::getPartnerId, Data->Data)); + List userChannelIds = hyPartnerUserInfoDOS.stream().filter(x -> x.getUserChannelId() != null).map(HyPartnerUserInfoDO::getUserChannelId).collect(Collectors.toList()); + List userChannelList = hyPartnerUserChannelMapper.getUserChannelByIds(userChannelIds); + Map channelMap = userChannelList.stream().collect(Collectors.toMap(HyPartnerUserChannelDO::getChannelId, HyPartnerUserChannelDO::getChannelName)); List lineIds = list.stream().map(PartnerInterviewInfoDTO::getPartnerLineId).collect(Collectors.toList()); List hyPartnerLineInfoDOS= hyPartnerLineInfoDAO.getHyPartnerLineInfoListByIds(lineIds); Map hyPartnerLineInfoDOMap = hyPartnerLineInfoDOS.stream().collect(Collectors.toMap(HyPartnerLineInfoDO::getId, data -> data)); + List userPortraitList = list.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(PartnerInterviewInfoDTO::getUserPortrait).collect(Collectors.toList()); + Map userPortraitMap = labelService.getUserPortraitMap(userPortraitList); List result = new ArrayList<>(); list.stream().forEach(x->{ - PartnerInterviewInfoVO partnerInterviewInfoVO = convertPartnerInterviewInfoDTOToVo(x); + PartnerInterviewInfoVO partnerInterviewInfoVO = convertPartnerInterviewInfoDTOToVo(x,userPortraitMap,userNameMap.get(x.getPartnerId()),channelMap); partnerInterviewInfoVO.setPartnerName(userNameMap.getOrDefault(x.getPartnerId(),new HyPartnerUserInfoDO()).getUsername()); partnerInterviewInfoVO.setPartnerPhone(userNameMap.getOrDefault(x.getPartnerId(),new HyPartnerUserInfoDO()).getMobile()); partnerInterviewInfoVO.setLineStatus(hyPartnerLineInfoDOMap.getOrDefault(x.getPartnerLineId(),new HyPartnerLineInfoDO()).getLineStatus()); @@ -310,7 +327,7 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan * @param partnerInterviewInfoDTO * @return */ - private PartnerInterviewInfoVO convertPartnerInterviewInfoDTOToVo(PartnerInterviewInfoDTO partnerInterviewInfoDTO){ + private PartnerInterviewInfoVO convertPartnerInterviewInfoDTOToVo(PartnerInterviewInfoDTO partnerInterviewInfoDTO,Map userPortraitMap, HyPartnerUserInfoDO hyPartnerUserInfoDO,Map channelMap){ PartnerInterviewInfoVO partnerInterviewInfoVO = new PartnerInterviewInfoVO(); partnerInterviewInfoVO.setInterviewId(partnerInterviewInfoDTO.getInterviewId()); partnerInterviewInfoVO.setInterviewPlanId(partnerInterviewInfoDTO.getId()); @@ -325,6 +342,17 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan partnerInterviewInfoVO.setAuthCode(partnerInterviewInfoDTO.getIntentionContractNo()); partnerInterviewInfoVO.setEndTime(DateUtil.format(partnerInterviewInfoDTO.getEndTime(),CoolDateUtils.DATE_FORMAT_SEC_2)); partnerInterviewInfoVO.setApproveTime(DateUtil.format(partnerInterviewInfoDTO.getApproveTime(),CoolDateUtils.DATE_FORMAT_SEC_2)); + partnerInterviewInfoVO.setLastFollowTime(DateUtil.format(partnerInterviewInfoDTO.getLastFollowTime(),CoolDateUtils.DATE_FORMAT_SEC_2)); + Integer callStatus = null; + if(partnerInterviewInfoDTO.getCallStatus()!=null){ + callStatus = partnerInterviewInfoDTO.getCallStatus()==1?partnerInterviewInfoDTO.getCallStatus():0; + } + partnerInterviewInfoVO.setCallStatus(callStatus); + if (hyPartnerUserInfoDO!=null){ + partnerInterviewInfoVO.setUserChannelName(channelMap.get(hyPartnerUserInfoDO.getUserChannelId())); + } + List userPortrait = labelService.getUserPortraitList(userPortraitMap, partnerInterviewInfoDTO.getUserPortrait()); + partnerInterviewInfoVO.setUserPortraitList(userPortrait); return partnerInterviewInfoVO; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java index 3232ca86b..a3c08d110 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerLineInfoServiceImpl.java @@ -15,6 +15,7 @@ import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.exception.ApiException; import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.HyPartnerUserChannelMapper; import com.cool.store.request.*; import com.cool.store.service.*; import com.cool.store.utils.CoolDateUtils; @@ -24,6 +25,7 @@ import com.cool.store.vo.*; import com.cool.store.vo.interview.InterviewVO; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -77,9 +79,13 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO; @Resource HyPhoneLocationService hyPhoneLocationService; + @Resource + HyPartnerUserChannelMapper hyPartnerUserChannelMapper; @Autowired private NoticeService noticeService; + @Resource + LabelService labelService; @Autowired private SmsService smsService; @@ -103,6 +109,15 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); } PartnerLineInfoAndBaseInfoVO partnerLineInfoAndBaseInfoVO = convertPartnerLineInfoAndBaseInfoDTOToVo(partnerLineInfoAndBaseInfoDTO); + + String userPortrait = partnerLineInfoAndBaseInfoDTO.getUserPortrait(); + if (StringUtils.isNotEmpty(userPortrait)){ + Map userPortraitMap = labelService.getUserPortraitMap(Arrays.asList(userPortrait)); + List userPortraitList = userPortraitMap.values().stream() + .collect(Collectors.toList()); + partnerLineInfoAndBaseInfoVO.setUserPortrait(userPortraitList); + } + List userIds = new ArrayList<>(); if (StringUtils.isNotEmpty(partnerLineInfoAndBaseInfoDTO.getPassUserId())){ userIds.add(partnerLineInfoAndBaseInfoDTO.getPassUserId()); @@ -186,6 +201,24 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { return Boolean.TRUE; } + @Override + public Boolean batchTransferInvestmentManager(LoginUserInfo user, BatchTransferInvestmentManagerRequest request) throws ApiException { + if (CollectionUtils.isEmpty(request.getLineIds())||StringUtils.isEmpty(request.getUserId())){ + throw new ServiceException(ErrorCodeEnum.PARAMS_REQUIRED); + } + for (Long lineId:request.getLineIds()) { + TransferInvestmentManagerRequest transferInvestmentManagerRequest = new TransferInvestmentManagerRequest(); + transferInvestmentManagerRequest.setUserId(request.getUserId()); + transferInvestmentManagerRequest.setLineId(lineId); + try { + this.transferInvestmentManager(user,transferInvestmentManagerRequest); + } catch (ApiException e) { + log.info("transferInvestmentManager_success Transfer_interview_management_failed,lineId:{}",lineId); + } + } + return Boolean.TRUE; + } + @Override public Boolean allocationInvestmentManager(LoginUserInfo user, List lineIdList) { if (user==null|| CollectionUtils.isEmpty(lineIdList)){ @@ -472,6 +505,13 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { List wantShopAreaList = list.stream().map(PublicSeaLineDTO::getWantShopArea).filter(Objects::nonNull).map(Long::parseLong).distinct().collect(Collectors.toList()); Map wantShopAreaNameMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaList); + + List userChannelIds = list.stream().filter(x -> x.getUserChannelId() != null).map(PublicSeaLineDTO::getUserChannelId).collect(Collectors.toList()); + List userChannelList = hyPartnerUserChannelMapper.getUserChannelByIds(userChannelIds); + Map channelMap = userChannelList.stream().collect(Collectors.toMap(HyPartnerUserChannelDO::getChannelId, HyPartnerUserChannelDO::getChannelName)); + + List userPortraitList = list.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(PublicSeaLineDTO::getUserPortrait).collect(Collectors.toList()); + Map userPortraitMap = labelService.getUserPortraitMap(userPortraitList); List result = new ArrayList<>(); list.forEach(x->{ PublicSeaLineListVo publicSeaLineListVo = new PublicSeaLineListVo(); @@ -496,6 +536,9 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { String closeTime = DateUtil.format(hy.getCloseTime(), CoolDateUtils.DATE_FORMAT_SEC_2); publicSeaLineListVo.setLastCloseDate(closeTime); publicSeaLineListVo.setLastInvestmentManager(nameMobileMap.get(hy.getInvestmentManager())); + List userPortrait = labelService.getUserPortraitList(userPortraitMap, x.getUserPortrait()); + publicSeaLineListVo.setUserPortraitList(userPortrait); + publicSeaLineListVo.setUserChannelName(channelMap.get(x.getUserChannelId())); result.add(publicSeaLineListVo); }); publicSeaLineList.setList(result); @@ -506,8 +549,12 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { @Override - public PageInfo privateSeaLineList(String userId, PrivateSeaLineListRequest request) { - UserPositionAndUserScopeDTO userIdsByScope = enterpriseUserService.getUserIdsByScope(userId); + public PageInfo privateSeaLineList(String userId, PrivateSeaLineListRequest request,Boolean allPrivateSeaFlag) { + //allPrivateSeaFlag 为true的时候 查询全量私海 + UserPositionAndUserScopeDTO userIdsByScope = new UserPositionAndUserScopeDTO(); + if (!allPrivateSeaFlag){ + userIdsByScope = enterpriseUserService.getUserIdsByScope(userId); + } String intentAreaName = getIntentAreaName(request.getIntentArea()); PageHelper.startPage(request.getPageNum(),request.getPageSize()); PageInfo privateLineList = new PageInfo(hyPartnerLineInfoDAO.getPrivateSeaLineList(request.getKeyword(), request.getKeywordType(), request.getWorkflowStage(), @@ -530,7 +577,15 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { } List wantShopAreaList = list.stream().filter(x->StringUtils.isNotEmpty(x.getWantShopArea())).map(PrivateSeaLineDTO::getWantShopArea).map(Long::parseLong).distinct().collect(Collectors.toList()); Map wantShopAreaNameMap = hyOpenAreaInfoDAO.selectNameMapByIds(wantShopAreaList); - List result = PrivateSeaLineListVo.convertList(list, devManagerMap, wantShopAreaNameMap,hyPartnerInterviewPlanDOMap); + + List userChannelIds = list.stream().filter(x -> x.getUserChannelId() != null).map(PrivateSeaLineDTO::getUserChannelId).collect(Collectors.toList()); + List userChannelList = hyPartnerUserChannelMapper.getUserChannelByIds(userChannelIds); + Map channelMap = userChannelList.stream().collect(Collectors.toMap(HyPartnerUserChannelDO::getChannelId, HyPartnerUserChannelDO::getChannelName)); + + List userPortraitList = list.stream().filter(x -> StringUtils.isNotEmpty(x.getUserPortrait() )).map(PrivateSeaLineDTO::getUserPortrait).collect(Collectors.toList()); + Map userPortraitMap = labelService.getUserPortraitMap(userPortraitList); + + List result = PrivateSeaLineListVo.convertList(list, devManagerMap, wantShopAreaNameMap,hyPartnerInterviewPlanDOMap,channelMap,userPortraitMap); privateLineList.setList(result); return privateLineList; } @@ -806,9 +861,6 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { partnerLineInfoAndBaseInfoVO.setId(partnerLineInfoAndBaseInfoDTO.getId()); partnerLineInfoAndBaseInfoVO.setPartnerUserId(partnerLineInfoAndBaseInfoDTO.getPartnerId()); partnerLineInfoAndBaseInfoVO.setInvestmentManager(partnerLineInfoAndBaseInfoDTO.getInvestmentManager()); - if (StringUtils.isNotEmpty(partnerLineInfoAndBaseInfoDTO.getUserPortrait())){ - partnerLineInfoAndBaseInfoVO.setUserPortrait(JSONObject.parseArray(partnerLineInfoAndBaseInfoDTO.getUserPortrait(),String.class)); - } partnerLineInfoAndBaseInfoVO.setPartnerBaseInfoId(partnerLineInfoAndBaseInfoDTO.getPartnerBaseInfoId()); partnerLineInfoAndBaseInfoVO.setWorkflowStage(partnerLineInfoAndBaseInfoDTO.getWorkflowStage()); partnerLineInfoAndBaseInfoVO.setWorkflowStatus(partnerLineInfoAndBaseInfoDTO.getWorkflowStatus()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerUserChannelServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerUserChannelServiceImpl.java new file mode 100644 index 000000000..fbf9d4e60 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerUserChannelServiceImpl.java @@ -0,0 +1,36 @@ +package com.cool.store.service.impl; + +import com.cool.store.dto.partner.UserChannelDTO; +import com.cool.store.entity.HyPartnerUserChannelDO; +import com.cool.store.mapper.HyPartnerUserChannelMapper; +import com.cool.store.service.HyPartnerUserChannelService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/8/10 11:14 + * @Version 1.0 + */ +@Service +public class HyPartnerUserChannelServiceImpl implements HyPartnerUserChannelService { + + @Resource + HyPartnerUserChannelMapper hyPartnerUserChannelMapper; + + @Override + public List queryAllUserChannelList() { + List allUserChannel = hyPartnerUserChannelMapper.getAllUserChannel(); + List result = new ArrayList<>(); + allUserChannel.forEach(x->{ + UserChannelDTO userChannelDTO = new UserChannelDTO(); + userChannelDTO.setUserChannelId(x.getChannelId()); + userChannelDTO.setUserChannelName(x.getChannelName()); + result.add(userChannelDTO); + }); + return result; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java index 311266268..73e31e782 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LabelServiceImpl.java @@ -11,17 +11,22 @@ import com.cool.store.exception.ApiException; import com.cool.store.mapper.HyPartnerLabelMapper; import com.cool.store.service.LabelService; import com.cool.store.vo.LabelListVo; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; -import java.util.List; +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; /** * @author Fun Li 2023/8/10 14:24 * @version 1.0 */ @Service +@Slf4j public class LabelServiceImpl implements LabelService { @Autowired @@ -100,4 +105,47 @@ public class LabelServiceImpl implements LabelService { } return Boolean.FALSE; } + + @Override + public Map getUserPortraitMap(List userPortraitStrList){ + Set userPortraitIdList = new HashSet<>(); + for (String userPortrait:userPortraitStrList) { + String[] parts = userPortrait.split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (!trimmedPart.isEmpty()) { + try { + Long value = Long.parseLong(trimmedPart); + userPortraitIdList.add(value); + } catch (NumberFormatException e) { + log.info("Invalid format: {}" , trimmedPart); + } + } + } + } + List labelListByIds = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(userPortraitIdList)){ + labelListByIds = labelMapper.getLabelListByIds(new ArrayList<>(userPortraitIdList)); + } + return labelListByIds.stream().collect(Collectors.toMap(HyPartnerLabelDO::getId,HyPartnerLabelDO::getLabelName)); + } + + @Override + public List getUserPortraitList(Map userPortraitMap, String userPortraitStr) { + List userPortraitList= new ArrayList<>(); + if(StringUtils.isNotEmpty(userPortraitStr)){ + String[] parts = userPortraitStr.split(","); + for (String part : parts) { + String trimmedPart = part.trim(); + if (!trimmedPart.isEmpty()) { + try { + userPortraitList.add(userPortraitMap.get(Long.valueOf(part))); + } catch (NumberFormatException e) { + log.info("Invalid format: {}" , trimmedPart); + } + } + } + } + return userPortraitList; + } } diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/DeskController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/DeskController.java index 0ee748b7e..0b1ba7c4b 100644 --- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/DeskController.java +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/DeskController.java @@ -107,10 +107,17 @@ public class DeskController { @ApiImplicitParam(name = "pageSize", value = "10", required = false), }) public ResponseResult> queryIntentApplyList(@RequestParam(value = "type",required = false)String type, + @RequestParam(value = "keyword",required = false)String keyword, + @RequestParam(value = "callStatus",required = false)Integer callStatus, + @RequestParam(value = "userPortraitIdList",required = false)List userPortraitIdList, + @RequestParam(value = "lastFollowStartTime",required = false)Long lastFollowStartTime, + @RequestParam(value = "lastFollowEndTime",required = false)Long lastFollowEndTime, + @RequestParam(value = "userChannelIdList",required = false)String userChannelIdList, @RequestParam(value = "pageNumber",required = false,defaultValue = "1")Integer pageNumber, @RequestParam(value = "pageSize",required = false,defaultValue = "10")Integer pageSize){ String userId = CurrentUserHolder.getUserId(); - return ResponseResult.success(hyPartnerIntentInfoService.getPartnerIntentApplyList(userId,type,pageSize,pageNumber)); + return ResponseResult.success(hyPartnerIntentInfoService.getPartnerIntentApplyList(userId,type,pageSize,pageNumber,keyword,callStatus,userPortraitIdList, + lastFollowStartTime,lastFollowEndTime,userChannelIdList)); } @@ -205,6 +212,12 @@ public class DeskController { return ResponseResult.success(hyPartnerLineInfoService.transferInvestmentManager(CurrentUserHolder.getUser(),request )); } + @PostMapping(path = "/batchTransferInvestmentManager") + @ApiOperation("批量转让招商经理") + public ResponseResult batchTransferInvestmentManager(@RequestBody BatchTransferInvestmentManagerRequest request) throws ApiException { + return ResponseResult.success(hyPartnerLineInfoService.batchTransferInvestmentManager(CurrentUserHolder.getUser(),request )); + } + @PostMapping(path = "/queryPublicSeqLineList") @ApiOperation("公海列表") @@ -216,7 +229,14 @@ public class DeskController { @PostMapping(path = "/queryPrivateSeaLineList") @ApiOperation("私海列表") public ResponseResult> queryPrivateSeqLineList(@RequestBody PrivateSeaLineListRequest privateSeaLineListRequest){ - return ResponseResult.success(hyPartnerLineInfoService.privateSeaLineList(CurrentUserHolder.getUserId(),privateSeaLineListRequest)); + return ResponseResult.success(hyPartnerLineInfoService.privateSeaLineList(CurrentUserHolder.getUserId(),privateSeaLineListRequest,Boolean.FALSE)); + } + + + @PostMapping(path = "/queryAllPrivateSeqLineList") + @ApiOperation("全量私海") + public ResponseResult> queryAllPrivateSeqLineList(@RequestBody PrivateSeaLineListRequest privateSeaLineListRequest){ + return ResponseResult.success(hyPartnerLineInfoService.privateSeaLineList(CurrentUserHolder.getUserId(),privateSeaLineListRequest,Boolean.TRUE)); } @PostMapping(path = "/queryBlackList") diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/UserChannelController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/UserChannelController.java new file mode 100644 index 000000000..f045be0e1 --- /dev/null +++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/UserChannelController.java @@ -0,0 +1,33 @@ +package com.cool.store.controller; + +import com.cool.store.dto.partner.UserChannelDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.HyPartnerUserChannelService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2023/8/10 11:17 + * @Version 1.0 + */ +@RestController +@Api(tags = "线索来源") +@Slf4j +public class UserChannelController { + + @Resource + HyPartnerUserChannelService hyPartnerUserChannelService; + + @GetMapping(path = "/queryAllUserChannelList") + @ApiOperation("线索来源列表") + public ResponseResult> queryAllUserChannelList(){ + return ResponseResult.success(hyPartnerUserChannelService.queryAllUserChannelList()); + } +}