diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java index 565f341e2..c5329cd09 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java @@ -68,6 +68,7 @@ public class CommonConstants { public static final String SQUAREBRACKETSRIGHT = "]"; public static final String PATH_SPILT = "/"; + public static final String ROOT_REGION_PATH = "/1/"; /** * rocketmq 消息最大重试次数 diff --git a/coolstore-partner-common/src/main/java/com/cool/store/exception/ServiceException.java b/coolstore-partner-common/src/main/java/com/cool/store/exception/ServiceException.java index b66102b4f..6685e0a14 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/exception/ServiceException.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/exception/ServiceException.java @@ -56,7 +56,6 @@ public class ServiceException extends RuntimeException{ * 构造函数 * @param errorMessage */ - @Deprecated public ServiceException(String errorMessage) { super(errorMessage); this.errorMessage = errorMessage; diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml index 4556e00e9..bf8536c1c 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerUserInfoMapper.xml @@ -52,16 +52,16 @@ diff --git a/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml index 6ca1f1eb0..194a9ccf8 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/RegionMapper.xml @@ -165,7 +165,7 @@ from region where - region_id in #{regionId} + deleted ='0' and region_id in #{regionId} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/enterprise/EnterpriseUserDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/enterprise/EnterpriseUserDTO.java index 2db6627f7..e83ad0c47 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/dto/enterprise/EnterpriseUserDTO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/enterprise/EnterpriseUserDTO.java @@ -1,6 +1,7 @@ package com.cool.store.dto.enterprise; import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; import com.cool.store.entity.EnterpriseUserDO; import com.cool.store.enums.FSEventTypeEnum; import com.cool.store.enums.UserStatusEnum; @@ -126,6 +127,10 @@ public class EnterpriseUserDTO implements Serializable { regionPaths.add(regionPathMap.get(departmentId)); } } + //挂跟节点 + if(CollectionUtils.isEmpty(regionPaths)){ + regionPaths.add(CommonConstants.ROOT_REGION_PATH); + } Collection deptIds = leaderDeptMap.get(user.getUserId()); if(CollectionUtils.isNotEmpty(deptIds)){ enterpriseUserDO.setIsLeader(Boolean.TRUE); @@ -162,9 +167,15 @@ public class EnterpriseUserDTO implements Serializable { List regionPaths = new ArrayList<>(); if(CollectionUtils.isNotEmpty(departmentLists)){ for (String departmentId : departmentLists) { - regionPaths.add(regionPathMap.get(departmentId)); + String regionPath = regionPathMap.get(departmentId); + if(StringUtils.isNotBlank(regionPath)){ + regionPaths.add(regionPath); + } } } + if(CollectionUtils.isEmpty(regionPaths)){ + regionPaths.add(CommonConstants.ROOT_REGION_PATH); + } //创建的时候给个默认值 if(FSEventTypeEnum.USER_CREATED.equals(eventType)){ enterpriseUserDO.setIsLeader(Boolean.FALSE); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/UserRegionMappingDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/UserRegionMappingDO.java index 3478dac98..447c77fcf 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/UserRegionMappingDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/UserRegionMappingDO.java @@ -1,5 +1,6 @@ package com.cool.store.entity; +import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.dto.enterprise.EnterpriseUserDTO; import com.cool.store.enums.DataSourceEnum; @@ -8,6 +9,7 @@ import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Builder; @@ -88,4 +90,30 @@ public class UserRegionMappingDO implements Serializable { } return resultList; } + + + public static List convertSyncDO(List userList){ + if(CollectionUtils.isEmpty(userList)){ + return Lists.newArrayList(); + } + List resultList = new ArrayList<>(); + for (EnterpriseUserDO user : userList) { + List userRegionIds = JSONObject.parseArray(user.getUserRegionIds(), String.class).stream().distinct().collect(Collectors.toList()); + for (String userRegionId : userRegionIds) { + String[] split = userRegionId.split(CommonConstants.PATH_SPILT); + if(split.length == 0){ + continue; + } + UserRegionMappingDO userRegion = new UserRegionMappingDO(); + userRegion.setRegionId(split[split.length-1]); + userRegion.setUserId(user.getUserId()); + userRegion.setType(DataSourceEnum.SYNC.getCode()); + userRegion.setCreateTime(System.currentTimeMillis()); + userRegion.setUpdateTime(System.currentTimeMillis()); + userRegion.setDeleted(Boolean.FALSE); + resultList.add(userRegion); + } + } + return resultList; + } } \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java b/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java index b2c9876de..0e26c0073 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/http/ISVHttpRequest.java @@ -1,6 +1,7 @@ package com.cool.store.http; import com.alibaba.fastjson.JSONObject; +import com.cool.store.constants.CommonConstants; import com.cool.store.dto.calendar.*; import com.cool.store.dto.enterprise.AuthInfoDTO; import com.cool.store.dto.enterprise.AuthScopeDTO; @@ -12,6 +13,7 @@ import com.cool.store.dto.response.ResultDTO; import com.cool.store.entity.EnterpriseUserDO; import com.cool.store.enums.ErrorCodeEnum; import com.cool.store.exception.ApiException; +import com.cool.store.exception.ServiceException; import com.cool.store.mq.util.HttpRestTemplateService; import com.cool.store.request.EnterpriseUserRequest; import com.cool.store.utils.RestTemplateUtil; @@ -56,6 +58,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } @@ -73,6 +76,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } @@ -89,6 +93,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } @@ -105,6 +110,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } @@ -122,6 +128,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } @@ -144,6 +151,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } @@ -160,6 +168,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } @@ -177,14 +186,15 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } public List getUserDetailByUserIds(List userIdList) { - String url = isvDomain + "/corp/getDepartmentUsers"; + String url = isvDomain + "/corp/getUserDetailByUserIds"; HashMap requestMap = new HashMap(); - requestMap.put("userIds", userIdList); + requestMap.put("userIds", String.join(CommonConstants.COMMA, userIdList)); ResultDTO responseEntity = null; try { responseEntity = httpRestTemplateService.getForObject(url, ResultDTO.class, requestMap); @@ -194,6 +204,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } @@ -212,6 +223,7 @@ public class ISVHttpRequest { } } catch (Exception e) { log.info("调用isv出错{}", e); + throw new ServiceException(e.getMessage()); } return null; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java index dfaf30931..0345e5d11 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EcSyncServiceImpl.java @@ -70,7 +70,6 @@ public class EcSyncServiceImpl implements EcSyncService { public boolean ecToApplet(List queryListData) { for (CustomerInfoRequest customerInfoItem : queryListData) { try { - Thread.sleep(500L); insertSelectiveSync(customerInfoItem); } catch (Exception e) { e.printStackTrace(); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java index 7fdfde394..53b08eca8 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EnterpriseSyncServiceImpl.java @@ -54,13 +54,15 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService { @Override public void syncAll() { + AuthScopeDTO authScope = isvHttpRequest.getAuthScope(); + List authUserIdList = authScope.getUserIdList(); //同步部门 Pair, Multimap> listMultimapPair = syncRegion(); List regionList = listMultimapPair.getKey(); Multimap leaderDeptMap = listMultimapPair.getValue(); Multimap roleUserMap = ArrayListMultimap.create(); //同步用户及部门 - syncUserAndUserRegion(regionList, roleUserMap, leaderDeptMap); + syncUserAndUserRegion(regionList, authUserIdList, roleUserMap, leaderDeptMap); //处理用户角色 删除多余的角色 if(!roleUserMap.isEmpty()){ List insertOrUpdateList = new ArrayList<>(); @@ -114,7 +116,7 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService { * @param roleUserMap * @param leaderDeptMap */ - private void syncUserAndUserRegion(List regionList, Multimap roleUserMap, Multimap leaderDeptMap){ + private void syncUserAndUserRegion(List regionList, List authUserIdList, Multimap roleUserMap, Multimap leaderDeptMap){ Map regionPathMap = regionList.stream().collect(Collectors.toMap(RegionDO::getRegionId, RegionDO::getRegionPath)); List userList = new ArrayList<>(); List userRegionList = new ArrayList<>(); @@ -141,6 +143,14 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService { userRegionList.clear(); } } + if(CollectionUtils.isNotEmpty(authUserIdList)){ + userIds.addAll(authUserIdList); + List userDetailList = isvHttpRequest.getUserDetailByUserIds(authUserIdList); + List enterpriseUserList = EnterpriseUserDTO.transUserDtoToDo(userDetailList, regionPathMap, leaderDeptMap, roleUserMap); + List userRegionMapping = UserRegionMappingDO.convertSyncDO(enterpriseUserList); + userRegionList.addAll(userRegionMapping); + userList.addAll(enterpriseUserList); + } enterpriseUserDAO.batchInsertOrUpdate(userList); userRegionMappingDAO.batchInsertOrUpdateUserRegion(userRegionList); //删除不存在的用户 @@ -185,9 +195,7 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService { leaderDeptMap = regionPair.getValue(); } regionPathMap = regionList.stream().collect(Collectors.toMap(k->k.getRegionId(), v->v.getRegionPath())); - userRegionMappingDAO.batchInsertOrUpdateUserRegion(UserRegionMappingDO.convertSyncDO(departmentLists, userDetail.getUserId())); } - userRegionMappingDAO.deleteUserRegionByUserId(userDetail.getUserId(), DataSourceEnum.SYNC, departmentLists); String jobTitle = userDetail.getJobTitle(); if(StringUtils.isNotBlank(jobTitle)){ SysRoleDO role = sysRoleDAO.getRoleByName(jobTitle, DataSourceEnum.SYNC); @@ -204,6 +212,8 @@ public class EnterpriseSyncServiceImpl implements EnterpriseSyncService { } EnterpriseUserDO enterpriseUser = EnterpriseUserDTO.transUserDtoToDo(userDetail, regionPathMap, leaderDeptMap, eventType); enterpriseUserDAO.batchInsertOrUpdate(new ArrayList<>(Arrays.asList(enterpriseUser))); + userRegionMappingDAO.batchInsertOrUpdateUserRegion(UserRegionMappingDO.convertSyncDO(Arrays.asList(enterpriseUser))); + userRegionMappingDAO.deleteUserRegionByUserId(userDetail.getUserId(), DataSourceEnum.SYNC, departmentLists); break; case USER_DELETED: //人员职位删除状态,角色职位删除状态,人员从部门去除 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 8f7c5aa53..ca44812f5 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 @@ -206,6 +206,7 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService { // 把旧线索的身份证号置空,状态改为待提交 HyPartnerBaseInfoDO oldBaseInfo = hyPartnerBaseInfoDAO.getByIdCard(idCard); HyPartnerLineInfoDO oldLineInfo = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(oldBaseInfo.getPartnerLineId()); + HyPartnerUserInfoDO oldPartnerUser = hyPartnerUserInfoDAO.selectByPartnerId(oldBaseInfo.getPartnerId()); // 该身份证当前申请状态同步至该账号下,原账号变为【加盟意向申请 待提交状态】 HyPartnerLineInfoDO newLineInfo = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(lineId); Long newLindId = newLineInfo.getId(); @@ -230,8 +231,15 @@ public class HyPartnerBaseInfoServiceImpl implements HyPartnerBaseInfoService { hyPartnerUserInfoDO.setUsername(oldBaseInfo.getUsername()); hyPartnerUserInfoDO.setWantShopArea(oldIntentInfo.getWantShopArea()); hyPartnerUserInfoDO.setAcceptAdjustType(oldIntentInfo.getAcceptAdjustType()); - hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO); + } + hyPartnerUserInfoDO.setRecommendPartnerId(oldPartnerUser.getRecommendPartnerId()); + hyPartnerUserInfoDO.setRecommendPartnerName(oldPartnerUser.getRecommendPartnerName()); + hyPartnerUserInfoDO.setRecommendPartnerMobile(oldPartnerUser.getRecommendPartnerMobile()); + hyPartnerUserInfoDO.setShopCode(oldPartnerUser.getShopCode()); + hyPartnerUserInfoDO.setShopName(oldPartnerUser.getShopName()); + hyPartnerUserInfoDO.setShopId(oldPartnerUser.getShopId()); + hyPartnerUserInfoDAO.updateByPrimaryKeySelective(hyPartnerUserInfoDO); // 老的身份证信息置空 fillBaseInfoIdCard(oldBaseInfo, null, null, null, null, null, null, null, null, null); oldBaseInfo.setStatus(Integer.valueOf(WorkflowStatusEnum.INTENT_0.getCode()));