Merge remote-tracking branch 'origin/cc_20230520_partner' into cc_20230520_partner

This commit is contained in:
pserimal
2023-06-20 11:10:49 +08:00
68 changed files with 896 additions and 1658 deletions

View File

@@ -1,11 +1,9 @@
package com.cool.store.service;
import com.cool.store.dto.buser.UserPositionAndUserScopeDTO;
import com.cool.store.entity.EnterpriseUserDO;
import com.cool.store.request.EnterpriseUserRequest;
import com.cool.store.vo.EnterpriseUserSingleInfoVO;
import com.cool.store.vo.buser.EnterpriseUserPageVO;
import java.util.List;
import java.util.Map;
/**
* @author zhangchenbiao
@@ -25,4 +23,16 @@ public interface EnterpriseUserService {
*/
List<EnterpriseUserSingleInfoVO> getInvestmentManagerList(String type,String userId,String keyword);
/**
* 获取用户角色已用户管辖的员工范围
* @param userId
* @return
*/
UserPositionAndUserScopeDTO getUserIdsByScope(String userId);
List<EnterpriseUserSingleInfoVO> getDevelopmentDirectorList(String wantShopArea);
}

View File

@@ -23,7 +23,11 @@ public interface HyPartnerBaseInfoService {
PartnerBaseInfoVO queryPartnerBaseInfo(String partnerId, Long lineId);
PartnerBaseInfoVO getByPartnerLineId(Long lineId);
Long getLineIdByIdCard(String idCard);
Boolean changeBinding(String idCard, Long lineId);
}

View File

@@ -123,5 +123,14 @@ public interface HyPartnerLineInfoService {
*/
List<LineFollowHistoryVO> getLineFollowHistory(String partnerId);
/**
* 是否分配跟进人
* @param lineId
* @return
*/
Boolean assignFollowUser(Long lineId);
}

View File

@@ -30,7 +30,7 @@ public interface OpenAreaService {
* @param flag
* @return
*/
List<OpenAreaTreeVO> queryAllOpenAreaByKeyword(String keyword,Boolean flag);
List<OpenAreaTreeVO> queryAllOpenAreaByKeyword(String keyword,Boolean applyFlag,Boolean flag);
/**

View File

@@ -1,6 +1,7 @@
package com.cool.store.service;
import com.cool.store.entity.HyPartnerUserInfoDO;
import com.cool.store.request.PartnerUserInfoRequest;
import com.cool.store.vo.InviteCodeDetailVO;
public interface PartnerUserInfoService {
@@ -12,4 +13,7 @@ public interface PartnerUserInfoService {
Boolean completeJoinNotice(String partnerId);
InviteCodeDetailVO selectInviteCodeDetail(String partnerId);
Boolean updatePartnerUserInfo(PartnerUserInfoRequest partnerUserInfoRequest);
}

View File

@@ -14,7 +14,7 @@ public interface WechatMiniAppService {
PartnerUserInfoVO miniProgramLogin(MiniProgramLoginDTO param);
Boolean updateUserPhoneNumber(MobileUpdateRequest request, PartnerUserInfoVO userInfoVO);
String updateUserPhoneNumber(MobileUpdateRequest request, PartnerUserInfoVO userInfoVO);
PartnerUserInfoVO getUserInfo(String mobile, String openId);
}

View File

@@ -243,9 +243,20 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService {
break;
case DEPARTMENT_DELETED:
boolean leafNode = regionDAO.isLeafNode(departmentDetail.getId());
if(leafNode){
boolean isExistUser = enterpriseUserDAO.isExistDeptUser(departmentDetail.getId());
if(leafNode && !isExistUser){
//叶子节点的时候会删除部门
regionDAO.deleteRegionByRegionId(departmentDetail.getId());
//清除负责人信息
List<EnterpriseUserDO> leaderUserList = enterpriseUserDAO.getUserListByDeptLeader(departmentDetail.getId());
for (EnterpriseUserDO enterpriseUser : leaderUserList) {
List<String> existDeptIds = JSONObject.parseArray(enterpriseUser.getLeaderDeptIds()).stream().map(String::valueOf).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(existDeptIds)){
existDeptIds.remove(departmentDetail.getId());
}
enterpriseUser.setLeaderDeptIds(JSONObject.toJSONString(existDeptIds));
}
enterpriseUserDAO.batchInsertOrUpdate(leaderUserList);
}else{
syncAll();
}

View File

@@ -1,8 +1,13 @@
package com.cool.store.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dao.*;
import com.cool.store.dto.buser.UserPositionAndUserScopeDTO;
import com.cool.store.entity.*;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.UserPositionEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.service.EnterpriseUserService;
import com.cool.store.service.ZoneService;
import com.cool.store.vo.EnterpriseUserSingleInfoVO;
@@ -10,10 +15,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author zhangchenbiao
@@ -31,11 +34,13 @@ public class EnterpriseUserServiceImpl implements EnterpriseUserService {
@Resource
private EnterpriseUserRoleDAO enterpriseUserRoleDAO;
@Resource
ZoneService zoneService;
private ZoneService zoneService;
@Resource
RegionDAO regionDAO;
private RegionDAO regionDAO;
@Resource
UserRegionMappingDAO userRegionMappingDAO;
private UserRegionMappingDAO userRegionMappingDAO;
@Resource
private HyIntendDevZoneInfoDAO hyIntendDevZoneInfoDAO;
@@ -87,4 +92,52 @@ public class EnterpriseUserServiceImpl implements EnterpriseUserService {
});
return enterpriseUserSingleInfoVOS;
}
@Override
public UserPositionAndUserScopeDTO getUserIdsByScope(String userId) {
EnterpriseUserDO userInfo = enterpriseUserDAO.getUserInfoById(userId);
if(Objects.isNull(userInfo)){
throw new ServiceException(ErrorCodeEnum.USER_NOT_EXIST);
}
UserPositionAndUserScopeDTO result = new UserPositionAndUserScopeDTO();
if(!userInfo.getIsLeader()){
result.setDevelopmentUserIds(Arrays.asList(userId));
result.setInvestmentUserIds(Arrays.asList(userId));
return result;
}
List<String> leadDeptIds = JSONObject.parseArray(userInfo.getLeaderDeptIds()).stream().map(String::valueOf).collect(Collectors.toList());
//获取这些区域的子节点
List<String> subRegionIds = regionDAO.getSubRegionIds(leadDeptIds);
//这些部门是否关联了意向区域
List<HyIntendDevZoneInfoDO> zoneInfoList = hyIntendDevZoneInfoDAO.getZoneInfoByRegionIds(subRegionIds);
if(CollectionUtils.isEmpty(zoneInfoList)){
result.setDevelopmentUserIds(Arrays.asList(userId));
result.setInvestmentUserIds(Arrays.asList(userId));
return result;
}
//意向区域
List<String> intendList = zoneInfoList.stream().filter(o -> "intent".equals(o.getType())).flatMap(o->JSONObject.parseArray(o.getAssociatedRegionId(), String.class).stream()).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(intendList)){
//获取负责的区域
intendList.retainAll(subRegionIds);
List<String> userList = userRegionMappingDAO.getUserListByRegionIds(intendList);
userList.add(userId);
result.setInvestmentUserIds(userList);
}
//开发区域
List<String> developmentList = zoneInfoList.stream().filter(o -> "developement".equals(o.getType())).flatMap(o->JSONObject.parseArray(o.getAssociatedRegionId(), String.class).stream()).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(developmentList)){
//获取负责的区域
developmentList.retainAll(subRegionIds);
List<String> userList = userRegionMappingDAO.getUserListByRegionIds(developmentList);
userList.add(userId);
result.setDevelopmentUserIds(userList);
}
return result;
}
@Override
public List<EnterpriseUserSingleInfoVO> getDevelopmentDirectorList(String wantShopArea) {
return null;
}
}

View File

@@ -67,11 +67,29 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService {
return baseInfoVO;
}
@Override
public PartnerBaseInfoVO getByPartnerLineId(Long lineId) {
HyPartnerBaseInfoDO hyPartnerBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerLineId(lineId);
if (hyPartnerBaseInfoDO == null){
throw new ServiceException(ErrorCodeEnum.PARTNER_BASEINFO_NOT_EXIST);
}
PartnerBaseInfoVO baseInfoVO = new PartnerBaseInfoVO();
BeanUtil.copyProperties(hyPartnerBaseInfoDO, baseInfoVO);
return baseInfoVO;
}
@Override
public Long getLineIdByIdCard(String idCard) {
return hyPartnerBaseInfoDAO.getLineIdByIdCard(idCard);
}
@Override
public Boolean changeBinding(String idCard, Long lineId) {
// 先把之前状态置为 待提交,清空身份证号 ,把新的绑定身份证号
HyPartnerBaseInfoDO hyPartnerBaseInfoDO = hyPartnerBaseInfoDAO.getByPartnerLineId(lineId);
return true;
}
private void fillBaseInfo(HyPartnerBaseInfoDO baseInfoDO, PartnerBaseInfoRequest request) {
baseInfoDO.setPartnerId(request.getPartnerId());
baseInfoDO.setPartnerLineId(request.getPartnerLineId());

View File

@@ -3,23 +3,21 @@ 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.dao.EnterpriseUserDAO;
import com.cool.store.dao.HyPartnerLineInfoDAO;
import com.cool.store.dao.HyPartnerUserInfoDAO;
import com.cool.store.dao.UserRegionMappingDAO;
import com.cool.store.dao.*;
import com.cool.store.dto.buser.UserPositionAndUserScopeDTO;
import com.cool.store.dto.partner.*;
import com.cool.store.entity.EnterpriseUserDO;
import com.cool.store.entity.HyOpenAreaInfoDO;
import com.cool.store.entity.HyPartnerLineInfoDO;
import com.cool.store.entity.HyPartnerUserInfoDO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.enums.LineStatusEnum;
import com.cool.store.enums.WorkflowStageEnum;
import com.cool.store.enums.WorkflowStatusEnum;
import com.cool.store.enums.*;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.CloseFollowRequest;
import com.cool.store.request.LineRequest;
import com.cool.store.request.PrivateSeaLineListRequest;
import com.cool.store.service.EnterpriseUserService;
import com.cool.store.service.HyPartnerLineInfoService;
import com.cool.store.utils.CoolDateUtils;
import com.cool.store.utils.RedisUtilPool;
@@ -56,6 +54,10 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
UserRegionMappingDAO userRegionMappingDAO;
@Resource
private RedisUtilPool redisUtilPool;
@Resource
HyOpenAreaInfoDAO hyOpenAreaInfoDAO;
@Resource
EnterpriseUserService enterpriseUserService;
@Override
public StageCountVO selectStagePendingCount(String userId) {
@@ -303,13 +305,16 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
return publicSeaLineList;
}
@Override
public PageInfo<PrivateSeaLineListVo> privateSeaLineList(String userId, PrivateSeaLineListRequest request) {
// TODO: 2023/6/19 su userlist计算
UserPositionAndUserScopeDTO userIdsByScope = enterpriseUserService.getUserIdsByScope(userId);
PageHelper.startPage(request.getPageNum(),request.getPageSize());
PageInfo privateLineList = new PageInfo(hyPartnerLineInfoDAO.getPrivateSeaLineList(request.getKeyword(), request.getKeywordType(), request.getWorkflowStage(),
request.getWorkflowStatus(), request.getDeadlineStart(), request.getDeadlineEnd(),
request.getIntentArea(), request.getAcceptAdjustType(), request.getStoreKeyword(), request.getStoreKeywordType(), null));
request.getIntentArea(), request.getAcceptAdjustType(), request.getStoreKeyword(),
request.getStoreKeywordType(), userIdsByScope.getInvestmentUserIds(),userIdsByScope.getDevelopmentUserIds()));
List<PrivateSeaLineDTO> list = privateLineList.getList();
if (CollectionUtils.isEmpty(list)){
return new PageInfo<>();
@@ -378,6 +383,47 @@ public class HyPartnerLineInfoServiceImpl implements HyPartnerLineInfoService {
return result;
}
@Override
public Boolean assignFollowUser(Long lineId) {
HyPartnerLineInfoDO hyPartnerLineInfoDO = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(lineId);
if (hyPartnerLineInfoDO==null){
throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST);
}
List<HyPartnerLineInfoDO> lineFollowHistoryList = hyPartnerLineInfoDAO.getLineFollowHistoryList(hyPartnerLineInfoDO.getPartnerId());
//如果是私海线索 不需要重新分配招商经理 或者跟进次数大于1
if (hyPartnerLineInfoDO.getLineStatus()==1||CollectionUtils.isEmpty(lineFollowHistoryList)){
return Boolean.FALSE;
}
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(hyPartnerLineInfoDO.getPartnerId());
HyOpenAreaInfoDO hyOpenAreaInfoDO = hyOpenAreaInfoDAO.selectById(Long.valueOf(hyPartnerUserInfoDO.getWantShopArea()));
if (AreaStatusEnum.OPEN.getCode().equals(hyOpenAreaInfoDO.getAreaStatus()) || AreaStatusEnum.KEY_OPEN.getCode().equals(hyOpenAreaInfoDO.getAreaStatus())){
return Boolean.TRUE;
}
if (AreaStatusEnum.NOT_OPEN.getCode().equals(hyOpenAreaInfoDO.getAreaStatus()) || AreaStatusEnum.SATURATED.getCode().equals(hyOpenAreaInfoDO.getAreaStatus())){
if (AcceptAdjustTypeEnum.NOT_ACCEPT.getCode().equals(hyPartnerUserInfoDO.getAcceptAdjustType())){
return Boolean.FALSE;
}
//全国调剂 默认分配呗 有啥好说的
if (AcceptAdjustTypeEnum.NATIONAL_ADJUSTMENT.getCode().equals(hyPartnerUserInfoDO.getAcceptAdjustType())){
return Boolean.TRUE;
}
//省内调剂 有重点或者开放的 分配
if (AcceptAdjustTypeEnum.PROVINCIAL_ADJUSTMENT.getCode().equals(hyPartnerUserInfoDO.getAcceptAdjustType())){
Integer apply = hyOpenAreaInfoDAO.getChildrenCount("apply", hyOpenAreaInfoDO.getId());
if (apply>CommonConstants.ZERO){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
//市内调剂 不分配
if (AcceptAdjustTypeEnum.LOCAL_ADJUSTMENT.getCode().equals(hyPartnerUserInfoDO.getAcceptAdjustType())){
return Boolean.FALSE;
}
}
return Boolean.FALSE;
}
/**
* convertPartnerBlackListDTOToVo
* @param partnerBlackListDTO

View File

@@ -38,7 +38,7 @@ public class OpenAreaServiceImpl implements OpenAreaService {
Map<Long, HyOpenAreaInfoDO> longHyOpenAreaInfoDOMap = openArea.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));
//查询关键字下所有的数据 原始的数据
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,areaStatus,flag);
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,null,areaStatus,flag);
Set<Long> longSet = hyOpenAreaInfoDOS.stream().map(HyOpenAreaInfoDO::getId).collect(Collectors.toSet());
List<HyOpenAreaInfoDO> result = new ArrayList<>();
@@ -60,13 +60,13 @@ public class OpenAreaServiceImpl implements OpenAreaService {
}
@Override
public List<OpenAreaTreeVO> queryAllOpenAreaByKeyword(String keyword, Boolean flag) {
public List<OpenAreaTreeVO> queryAllOpenAreaByKeyword(String keyword,Boolean applyFlag, Boolean flag) {
//先查出所有的一级菜单
List<HyOpenAreaInfoDO> openArea = hyOpenAreaInfoDAO.queryFirstLevel();
Map<Long, HyOpenAreaInfoDO> longHyOpenAreaInfoDOMap = openArea.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));
//查询关键字下所有的数据 原始的数据
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,null,flag);
List<HyOpenAreaInfoDO> hyOpenAreaInfoDOS = hyOpenAreaInfoDAO.queryByKeyword(keyword,applyFlag,null,flag);
Map<Long, HyOpenAreaInfoDO> hyMap = hyOpenAreaInfoDOS.stream().collect(Collectors.toMap(HyOpenAreaInfoDO::getId, x -> x));

View File

@@ -5,6 +5,8 @@ import com.cool.store.dao.HyPartnerUserInfoDAO;
import com.cool.store.entity.HyPartnerUserInfoDO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.request.BaseUserInfoRequest;
import com.cool.store.request.PartnerUserInfoRequest;
import com.cool.store.service.PartnerUserInfoService;
import com.cool.store.vo.InviteCodeDetailVO;
import org.springframework.beans.factory.annotation.Autowired;
@@ -53,4 +55,26 @@ public class PartnerUserInfoServiceImpl implements PartnerUserInfoService {
inviteCodeDetailVO.setStoreName(hyPartnerUserInfoDO.getShopName());
return inviteCodeDetailVO;
}
@Override
public Boolean updatePartnerUserInfo(PartnerUserInfoRequest partnerUserInfoRequest) {
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByPartnerId(String.valueOf(partnerUserInfoRequest.getPartnerId()));
if (hyPartnerUserInfoDO==null){
throw new ServiceException(ErrorCodeEnum.PARTNER_USER_NOT_EXIST);
}
hyPartnerUserInfoDO.setUsername(partnerUserInfoRequest.getUsername());
hyPartnerUserInfoDO.setMobile(partnerUserInfoRequest.getMobile());
hyPartnerUserInfoDO.setLiveArea(partnerUserInfoRequest.getLiveArea());
hyPartnerUserInfoDO.setWantShopArea(partnerUserInfoRequest.getWantShopArea());
hyPartnerUserInfoDO.setAcceptAdjustType(partnerUserInfoRequest.getAcceptAdjustType());
hyPartnerUserInfoDO.setInviteCode(partnerUserInfoRequest.getInviteCode());
hyPartnerUserInfoDO.setShopCode(partnerUserInfoRequest.getShopCode());
hyPartnerUserInfoDO.setShopName(partnerUserInfoRequest.getShopName());
hyPartnerUserInfoDO.setShopId(partnerUserInfoRequest.getShopId());
hyPartnerUserInfoDO.setRecommendPartnerId(partnerUserInfoRequest.getRecommendPartnerId());
hyPartnerUserInfoDO.setRecommendPartnerName(partnerUserInfoRequest.getRecommendPartnerName());
hyPartnerUserInfoDO.setRecommendPartnerMobile(partnerUserInfoRequest.getRecommendPartnerMobile());
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO);
return Boolean.TRUE;
}
}

View File

@@ -120,7 +120,8 @@ public class WechatMiniAppServiceImpl implements WechatMiniAppService {
}
@Override
public Boolean updateUserPhoneNumber(MobileUpdateRequest request, PartnerUserInfoVO userInfoVO) {
public String updateUserPhoneNumber(MobileUpdateRequest request, PartnerUserInfoVO userInfoVO) {
String newMobile = "";
HyPartnerUserInfoDO oldUserInfo = hyPartnerUserInfoDAO.selectByMobile(userInfoVO.getMobile());
if (oldUserInfo == null) {
throw new ServiceException(ErrorCodeEnum.PARTNER_USER_NOT_EXIST);
@@ -130,19 +131,26 @@ public class WechatMiniAppServiceImpl implements WechatMiniAppService {
// 获取手机号码
PhoneInfoDTO phoneInfoDTO = wechatRest.getUserPhoneNumber(request.getMobileCode(), accessToken);
if(phoneInfoDTO != null && phoneInfoDTO.getPhoneInfo() != null && StringUtils.isNotBlank(phoneInfoDTO.getPhoneInfo().getPhoneNumber())){
HyPartnerUserInfoDO newUserInfo = hyPartnerUserInfoDAO.selectByMobile(phoneInfoDTO.getPhoneInfo().getPhoneNumber());
newMobile = phoneInfoDTO.getPhoneInfo().getPhoneNumber();
HyPartnerUserInfoDO newUserInfo = hyPartnerUserInfoDAO.selectByMobile(newMobile);
if (newUserInfo != null) {
throw new ServiceException(ErrorCodeEnum.NEW_MOBILE_HAS_EXIST);
}
oldUserInfo.setMobile(phoneInfoDTO.getPhoneInfo().getPhoneNumber());
oldUserInfo.setMobile(newMobile);
hyPartnerUserInfoDAO.updateByPrimaryKeySelective(oldUserInfo);
}
return true;
return newMobile;
}
@Override
public PartnerUserInfoVO getUserInfo(String mobile, String openId) {
PartnerUserInfoVO userInfoVO = new PartnerUserInfoVO();
if(CommonConstants.FIX_MOBILE_OPENID_TEST.equals(mobile) || CommonConstants.FIX_MOBILE_OPENID_ONLINE.equals(mobile) ){
userInfoVO.setMobile(mobile);
userInfoVO.setOpenid(mobile);
userInfoVO.setPartnerId("");
return userInfoVO;
}
HyPartnerUserInfoDO hyPartnerUserInfoDO = hyPartnerUserInfoDAO.selectByMobile(mobile);
BeanUtil.copyProperties(hyPartnerUserInfoDO, userInfoVO);
HyPartnerUserPlatformBindDO hyPartnerUserPlatformBindDO = hyPartnerUserPlatformBindDAO.getByPartnerId(hyPartnerUserInfoDO.getPartnerId());