From a6a6093dd92c19dd7b2e9f152d13760b4c9eee6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 16 Jun 2023 10:09:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=81=E6=B5=B7=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/dao/HyPartnerLineInfoDAO.java | 25 +++++- .../store/mapper/HyPartnerLineInfoMapper.java | 41 ++++++++- .../mapper/HyPartnerLineInfoMapper.xml | 63 +++++++++++++- .../cool/store/dto/partner/LineCountDTO.java | 17 ++++ .../store/dto/partner/PublicSeaLineDTO.java | 28 ++++++ .../com/cool/store/request/LineRequest.java | 14 ++- .../cool/store/vo/PrivateSeaLineListVo.java | 14 +++ .../cool/store/vo/PublicSeaLineListVo.java | 4 + .../service/HyPartnerLineInfoService.java | 13 ++- .../impl/HyPartnerLineInfoServiceImpl.java | 87 ++++++++++++++++--- .../cool/store/controller/DeskController.java | 12 +-- 11 files changed, 282 insertions(+), 36 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/partner/LineCountDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PublicSeaLineDTO.java diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java index 5ee627712..532d95b82 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java @@ -3,6 +3,7 @@ package com.cool.store.dao; import com.cool.store.dto.partner.PartnerBlackListDTO; import com.cool.store.dto.partner.PartnerLineInfoAndBaseInfoDTO; import com.cool.store.dto.partner.StageCountDTO; +import com.cool.store.dto.partner.*; import com.cool.store.entity.HyPartnerLineInfoDO; import com.cool.store.mapper.HyPartnerLineInfoMapper; import com.github.pagehelper.PageInfo; @@ -12,6 +13,8 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -111,8 +114,8 @@ public class HyPartnerLineInfoDAO { } - public PageInfo getBlackList( String keyWord, String intentArea , Integer acceptAdjustType){ - return hyPartnerLineInfoMapper.getBlackList(keyWord,intentArea,acceptAdjustType); + public PageInfo getBlackList( String userNameKeyword,String phoneKeyword, String intentArea , Integer acceptAdjustType){ + return hyPartnerLineInfoMapper.getBlackList(userNameKeyword,phoneKeyword,intentArea,acceptAdjustType); } @@ -123,6 +126,17 @@ public class HyPartnerLineInfoDAO { return hyPartnerLineInfoMapper.joinAndRemoveBlack(lineId,status,joinReason,removeReason); } + public PageInfo getPublicSeaLineList( String userNameKeyword, String phoneKeyword, String intentArea, Integer acceptAdjustType, Date updateStartTime, Date updateEndTime, List userIdList){ + return hyPartnerLineInfoMapper.getPublicSeaLineList(userNameKeyword,phoneKeyword,intentArea,acceptAdjustType,updateStartTime,updateEndTime,userIdList); + } + + + public List getPartnerLastLine(List partnerIdList){ + if (CollectionUtils.isEmpty(partnerIdList)){ + return new ArrayList<>(); + } + return hyPartnerLineInfoMapper.getPartnerLastLine(partnerIdList); + } public HyPartnerLineInfoDO getByPartnerId(String partnerId){ if (StringUtils.isEmpty(partnerId)){ return null; @@ -131,4 +145,11 @@ public class HyPartnerLineInfoDAO { } + public List getFollowCountList( List partnerIdList){ + if (CollectionUtils.isEmpty(partnerIdList)){ + return new ArrayList<>(); + } + return hyPartnerLineInfoMapper.getFollowCountList(partnerIdList); + } + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java index 88e518079..2e878544f 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerLineInfoMapper.java @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.partner.*; import com.cool.store.dto.partner.PartnerBlackListDTO; import com.cool.store.dto.partner.PartnerLineInfoAndBaseInfoDTO; import com.cool.store.dto.partner.StageCountDTO; @@ -7,6 +8,7 @@ import com.cool.store.entity.HyPartnerLineInfoDO; import com.github.pagehelper.PageInfo; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; /** @@ -107,12 +109,14 @@ public interface HyPartnerLineInfoMapper { /** * 查询黑名单列表 - * @param keyWord + * @param userNameKeyword + * @param phoneKeyword * @param intentArea * @param acceptAdjustType * @return */ - PageInfo getBlackList(@Param("keyWord") String keyWord, + PageInfo getBlackList(@Param("userNameKeyword") String userNameKeyword, + @Param("phoneKeyword") String phoneKeyword, @Param("intentArea") String intentArea , @Param("acceptAdjustType") Integer acceptAdjustType); @@ -133,4 +137,37 @@ public interface HyPartnerLineInfoMapper { HyPartnerLineInfoDO getByPartnerId(@Param("partnerId") String partnerId); + + /** + * 查询公海线索 + * @param userNameKeyword + * @param phoneKeyword + * @param intentArea + * @param acceptAdjustType + * @param updateStartTime + * @param updateEndTime + * @param userIdList + * @return + */ + PageInfo getPublicSeaLineList(@Param("userNameKeyword") String userNameKeyword, + @Param("phoneKeyword") String phoneKeyword, + @Param("intentArea") String intentArea, + @Param("acceptAdjustType") Integer acceptAdjustType, + @Param("updateStartTime") Date updateStartTime, + @Param("updateEndTime") Date updateEndTime, + @Param("userIdList") List userIdList); + + /** + * 查询对应的加盟商最近线索 + * @param partnerIdList + * @return + */ + List getPartnerLastLine(@Param("partnerIdList") List partnerIdList); + + /** + * 加盟商跟进次数 + * @param partnerIdList + * @return + */ + List getFollowCountList(@Param("partnerIdList") List partnerIdList); } \ 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 8e9a4387f..64e399d3b 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerLineInfoMapper.xml @@ -357,8 +357,11 @@ from hy_partner_line_info a inner join hy_partner_user_info b where a.partner_id = b.partner_id where deleted = 0 and line_status = 3 - - and (b.username like concat('%', #{keyWord}, '%') or b.mobile like concat('%', #{keyWord}, '%')) + + and b.username like concat('%', #{userNameKeyword}, '%') + + + and b.mobile like concat('%', #{phoneKeyword}, '%') and b.want_shop_area = #{intentArea} @@ -391,4 +394,60 @@ where partner_id = #{partnerId} + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/LineCountDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/LineCountDTO.java new file mode 100644 index 000000000..c7256636e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/LineCountDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.partner; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2023/6/15 21:19 + * @Version 1.0 + */ +@Data +public class LineCountDTO { + + private String partnerId; + + private Integer followCount; + +} 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 new file mode 100644 index 000000000..0b4a07792 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/partner/PublicSeaLineDTO.java @@ -0,0 +1,28 @@ +package com.cool.store.dto.partner; + +import lombok.Data; + +import java.util.Date; + +/** + * @Author suzhuhong + * @Date 2023/6/15 20:21 + * @Version 1.0 + */ +@Data +public class PublicSeaLineDTO { + + private Date createTime; + + private Long lineId; + + private String partnerId; + + private String userName; + + private String mobile; + + private String wantShopArea; + + private String acceptAdjustType; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/LineRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/LineRequest.java index 06f75a1ce..b0e4169af 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/LineRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/LineRequest.java @@ -17,8 +17,11 @@ import java.util.Date; public class LineRequest extends PageInfoRequest{ - @ApiModelProperty("关键字") - private String keyWord; + @ApiModelProperty("用户名关键字") + private String userNameKeyword; + + @ApiModelProperty("手机号关键字") + private String phoneKeyword; @ApiModelProperty("意向区域") private String intentArea; @@ -26,8 +29,11 @@ public class LineRequest extends PageInfoRequest{ @ApiModelProperty("调剂类型") private Integer acceptAdjustType; - @ApiModelProperty("更新时间") - private Date updateTime; + @ApiModelProperty("更新开始时间") + private Date updateStartTime; + + @ApiModelProperty("更新结束时间") + private Date updateEndTime; 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 f0c81cec9..3128e7d9f 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 @@ -55,8 +55,22 @@ public class PrivateSeaLineListVo { @ApiModelProperty("0不接受调剂、1全国调剂、2省内调剂、3市内调剂") private Integer acceptAdjustType; + @ApiModelProperty("更新时间") + private Date updateTime; + @ApiModelProperty("门店编码") + private String storeCode; + @ApiModelProperty("门店名称") + private String storeName; + @ApiModelProperty("线索状态") + private Integer lineStatus; + + @ApiModelProperty("推荐加盟商ID") + private String recommendPartnerId; + + @ApiModelProperty("推荐加盟商名称") + private String recommendPartnerName; } 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 bbf5f5acb..848d704ee 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 @@ -59,5 +59,9 @@ public class PublicSeaLineListVo { @ApiModelProperty("跟进次数") private Integer followCount; + @ApiModelProperty("意向开店区域ID") + private String wantShopArea; + + private String acceptAdjustType; } 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 244fbf860..0b7f0b30a 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 @@ -2,10 +2,7 @@ package com.cool.store.service; import com.cool.store.request.CloseFollowRequest; import com.cool.store.request.LineRequest; -import com.cool.store.vo.BlackListVO; -import com.cool.store.vo.PartnerLineInfoAndBaseInfoVO; -import com.cool.store.vo.PartnerLineInfoVO; -import com.cool.store.vo.StageCountVO; +import com.cool.store.vo.*; import com.github.pagehelper.PageInfo; import java.util.List; @@ -99,5 +96,13 @@ public interface HyPartnerLineInfoService { */ Boolean closeOrPassFollow(String userId,CloseFollowRequest closeFollowRequest); + /** + * 公海线索 + * @param userId + * @param lineRequest + * @return + */ + PageInfo publicSeaLineList(String userId,LineRequest lineRequest); + } 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 10ec43267..e4b456878 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 @@ -2,11 +2,12 @@ package com.cool.store.service.impl; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; +import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.HyPartnerLineInfoDAO; import com.cool.store.dao.HyPartnerUserInfoDAO; -import com.cool.store.dto.partner.PartnerBlackListDTO; -import com.cool.store.dto.partner.PartnerLineInfoAndBaseInfoDTO; -import com.cool.store.dto.partner.StageCountDTO; +import com.cool.store.dao.UserRegionMappingDAO; +import com.cool.store.dto.partner.*; +import com.cool.store.entity.EnterpriseUserDO; import com.cool.store.entity.HyPartnerLineInfoDO; import com.cool.store.entity.HyPartnerUserInfoDO; import com.cool.store.enums.ErrorCodeEnum; @@ -16,24 +17,20 @@ import com.cool.store.enums.WorkflowStatusEnum; import com.cool.store.exception.ServiceException; import com.cool.store.request.CloseFollowRequest; import com.cool.store.request.LineRequest; +import com.cool.store.service.EnterpriseUserService; import com.cool.store.service.HyPartnerLineInfoService; import com.cool.store.utils.CoolDateUtils; import com.cool.store.utils.StringUtil; -import com.cool.store.vo.BlackListVO; -import com.cool.store.vo.PartnerLineInfoAndBaseInfoVO; -import com.cool.store.vo.PartnerLineInfoVO; -import com.cool.store.vo.StageCountVO; +import com.cool.store.vo.*; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -48,6 +45,10 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { HyPartnerLineInfoDAO hyPartnerLineInfoDAO; @Resource HyPartnerUserInfoDAO hyPartnerUserInfoDAO; + @Resource + EnterpriseUserDAO enterpriseUserDAO; + @Resource + UserRegionMappingDAO userRegionMappingDAO; @Override public StageCountVO selectStagePendingCount(String userId) { @@ -138,7 +139,7 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { @Override public PageInfo getBlackList(LineRequest LineRequest) { PageHelper.startPage(LineRequest.getPageNum(),LineRequest.getPageSize()); - PageInfo blackListDTOPageInfo = hyPartnerLineInfoDAO.getBlackList(LineRequest.getKeyWord(), LineRequest.getIntentArea(), LineRequest.getAcceptAdjustType()); + PageInfo blackListDTOPageInfo = hyPartnerLineInfoDAO.getBlackList(LineRequest.getUserNameKeyword(), LineRequest.getPhoneKeyword(),LineRequest.getIntentArea(), LineRequest.getAcceptAdjustType()); List list = blackListDTOPageInfo.getList(); List result = new ArrayList<>(); list.stream().forEach(x->{ @@ -228,6 +229,68 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService { hyPartnerLineInfoDAO.updateByPrimaryKeySelective(hyPartnerLineInfoDO); return Boolean.TRUE; } + + @Override + public PageInfo publicSeaLineList(String userId, LineRequest lineRequest) { + //确认是招商经理还是部门负责人 + EnterpriseUserDO userInfo = enterpriseUserDAO.getUserInfoById(userId); + List userIds = new ArrayList<>(); + if (userInfo.getIsLeader()){ + if (StringUtil.isNotEmpty(userInfo.getLeaderDeptIds())){ + List regionIds = JSONObject.parseArray(userInfo.getLeaderDeptIds(), String.class); + List enterpriseUserDOS = enterpriseUserDAO.searchUserByRegionIdsAndKeyword(regionIds, null, true); + userIds =enterpriseUserDOS.stream().map(EnterpriseUserDO::getUserId).collect(Collectors.toList()); + } + }else { + userIds = Arrays.asList(userId); + } + PageHelper.startPage(lineRequest.getPageNum(),lineRequest.getPageSize()); + PageInfo publicSeaLineList = hyPartnerLineInfoDAO.getPublicSeaLineList(lineRequest.getUserNameKeyword(), lineRequest.getPhoneKeyword(), + lineRequest.getIntentArea(), lineRequest.getAcceptAdjustType(), lineRequest.getUpdateStartTime(), lineRequest.getUpdateEndTime(), userIds); + + List list = publicSeaLineList.getList(); + if (CollectionUtils.isEmpty(list)){ + return new PageInfo<>(); + } + //上一次结束的线索 + List partnerIdList = list.stream().map(PublicSeaLineDTO::getPartnerId).collect(Collectors.toList()); + List partnerLastLine = hyPartnerLineInfoDAO.getPartnerLastLine(partnerIdList); + List investmentManagerIds = partnerLastLine.stream().map(HyPartnerLineInfoDO::getInvestmentManager).collect(Collectors.toList()); + List userInfoList = enterpriseUserDAO.getUserInfoByUserIds(investmentManagerIds); + Map mobileMap = userInfoList.stream().filter(x -> + StringUtil.isNotEmpty(x.getMobile())).collect(Collectors.toMap(EnterpriseUserDO::getUserId, EnterpriseUserDO::getMobile)); + Map hyPartnerLineInfoDOMap = partnerLastLine.stream().collect(Collectors.toMap(HyPartnerLineInfoDO::getPartnerId, data -> data)); + + List followCountList = hyPartnerLineInfoDAO.getFollowCountList(partnerIdList); + Map countMap = followCountList.stream().collect(Collectors.toMap(LineCountDTO::getPartnerId, LineCountDTO::getFollowCount)); + + List result = new ArrayList<>(); + list.forEach(x->{ + PublicSeaLineListVo publicSeaLineListVo = new PublicSeaLineListVo(); + + publicSeaLineListVo.setPartnerId(x.getPartnerId()); + publicSeaLineListVo.setCreateTime(x.getCreateTime()); + publicSeaLineListVo.setPartnerUserName(x.getUserName()); + publicSeaLineListVo.setPartnerUserPhone(x.getMobile()); + // TODO: 2023/6/15 手机号归属地 + publicSeaLineListVo.setPhoneAddress(""); + publicSeaLineListVo.setWantShopArea(x.getWantShopArea()); + publicSeaLineListVo.setId(x.getLineId()); + publicSeaLineListVo.setAcceptAdjustType(x.getAcceptAdjustType()); + publicSeaLineListVo.setFollowCount(countMap.getOrDefault(x.getPartnerId(),0)); + + HyPartnerLineInfoDO hy = hyPartnerLineInfoDOMap.getOrDefault(x.getPartnerId(), new HyPartnerLineInfoDO()); + publicSeaLineListVo.setRejectPublicReason(hy.getRejectPublicReason()); + publicSeaLineListVo.setRejectRealReason(hy.getRejectRealReason()); + publicSeaLineListVo.setLastCloseDate(hy.getCloseTime()); + publicSeaLineListVo.setLastInvestmentManager(hy.getInvestmentManager()); + publicSeaLineListVo.setPartnerUserPhone(mobileMap.get(hy.getInvestmentManager())); + result.add(publicSeaLineListVo); + }); + publicSeaLineList.setList(result); + return publicSeaLineList; + } + /** * convertPartnerBlackListDTOToVo * @param partnerBlackListDTO 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 3098e57d5..c4fe96c72 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 @@ -82,8 +82,7 @@ public class DeskController { @ApiImplicitParam(name = "type", value = "类型 待处理-Pending 待跟进-follow", required = false), }) public ResponseResult queryStageCount(@RequestParam(value = "type",required = false)String type){ - String userId = ""; - return ResponseResult.success(deskService.getStageCountByType(userId,type)); + return ResponseResult.success(deskService.getStageCountByType(CurrentUserHolder.getUserId(),type)); } @GetMapping(path = "/queryInterviewPlan") @@ -204,7 +203,6 @@ public class DeskController { } - @PostMapping(path = "/queryPublicSeqLineList") @ApiOperation("公海列表") public ResponseResult> queryPublicSeaLineList(@RequestBody LineRequest LineRequest){ @@ -213,8 +211,6 @@ public class DeskController { } - - @PostMapping(path = "/queryPrivateSeaLineList") @ApiOperation("私海列表") public ResponseResult> queryPrivateSeqLineList(@RequestBody PrivateSeaLineListRequest privateSeaLineListRequest){ @@ -222,8 +218,6 @@ public class DeskController { return ResponseResult.success(); } - - @PostMapping(path = "/queryBlackList") @ApiOperation("黑名单列表") public ResponseResult> queryBlackList(@RequestBody LineRequest LineRequest){ @@ -250,9 +244,7 @@ public class DeskController { @PostMapping(path = "/closeOrPassFollow") @ApiOperation("意向申请审核 结束跟进/通过流程") public ResponseResult closeOrPassFollow(@RequestBody CloseFollowRequest closeFollowRequest){ - - String userId = ""; - return ResponseResult.success(hyPartnerLineInfoService.closeOrPassFollow(userId,closeFollowRequest)); + return ResponseResult.success(hyPartnerLineInfoService.closeOrPassFollow(CurrentUserHolder.getUserId(),closeFollowRequest)); } @PostMapping(path = "/changeIntentInfo")