Browse Source

Merge remote-tracking branch 'origin/master'

tags/24080901
PoffyZhang 1 year ago
parent
commit
09b99fb088
11 changed files with 678 additions and 58 deletions
  1. +22
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/model/CommonPage.java
  2. +29
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/DictionaryAssembler.java
  3. +123
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/ExpertAdminExpertManageAssembler.java
  4. +50
    -50
      pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/ExpertUserInfoAssembler.java
  5. +29
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/TagAssembler.java
  6. +13
    -8
      pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertAdminManage.java
  7. +21
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/mapper/ExpertAdminManageMapper.java
  8. +117
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/mapper/ExpertAdminManageMapper.xml
  9. +138
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/model/dto/ExpertAdminExpertManageListDTO.java
  10. +24
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/service/ExpertAdminManageService.java
  11. +112
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/expert/service/impl/ExpertAdminManageServiceImpl.java

+ 22
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/model/CommonPage.java View File

@@ -0,0 +1,22 @@
package com.ningdatech.pmapi.common.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/4 上午11:34
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonPage<T> implements Serializable {
private static final long serialVersionUID = 1L;
private int currentPageNumber;
private Long itemsTotal;
private List<T> items;
}

+ 29
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/DictionaryAssembler.java View File

@@ -0,0 +1,29 @@
package com.ningdatech.pmapi.expert.assembler;

import cn.hutool.core.collection.CollectionUtil;
import com.ningdatech.pmapi.expert.model.DictionaryFieldInfo;
import com.ningdatech.pmapi.meta.model.entity.ExpertDictionary;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
* @author liuxinxin
* @date 2022/7/25 下午4:30
*/

public class DictionaryAssembler {

public static List<DictionaryFieldInfo> toDictionaryFieldInfoList(List<ExpertDictionary> expertDictionaryList) {
if (CollectionUtil.isEmpty(expertDictionaryList)) {
return new ArrayList<>();
}
return expertDictionaryList.stream().map(r -> {
DictionaryFieldInfo dictionaryFieldInfo = new DictionaryFieldInfo();
dictionaryFieldInfo.setDictionaryFieldName(r.getExpertInfoField());
dictionaryFieldInfo.setDictionaryCode(r.getDictionaryCode());
return dictionaryFieldInfo;
}).collect(Collectors.toList());
}
}

+ 123
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/ExpertAdminExpertManageAssembler.java View File

@@ -0,0 +1,123 @@
package com.ningdatech.pmapi.expert.assembler;

import cn.hutool.core.collection.CollectionUtil;
import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
import com.ningdatech.pmapi.expert.constant.ExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.constant.QueryExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.model.DictionaryFieldInfo;
import com.ningdatech.pmapi.expert.model.TagFieldInfo;
import com.ningdatech.pmapi.expert.model.dto.ExpertAdminExpertManageListDTO;
import com.ningdatech.pmapi.expert.model.vo.ExpertAdminExpertManageListVO;
import com.ningdatech.pmapi.meta.helper.DictionaryCache;
import com.ningdatech.pmapi.meta.helper.impl.TagsCacheImpl;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import com.ningdatech.pmapi.meta.model.dto.DictionaryDTO;
import com.ningdatech.pmapi.meta.model.dto.TagDTO;
import com.ningdatech.pmapi.sys.model.dto.RegionDTO;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
* @author liuxinxin
* @date 2022/8/5 下午4:32
*/
@Component
@RequiredArgsConstructor
public class ExpertAdminExpertManageAssembler {

private final DictionaryCache dictionaryCache;
private final TagsCacheImpl tagCache;
private final RegionCacheHelper regionCache;

public List<ExpertAdminExpertManageListVO> toExpertAdminExpertManageListVOList(
List<ExpertAdminExpertManageListDTO> expertManageListDTOList) {
if (CollectionUtil.isEmpty(expertManageListDTOList)) {
return new ArrayList<>();
}
return expertManageListDTOList.stream().map(r -> {
ExpertAdminExpertManageListVO expertAdminExpertManageListVO = new ExpertAdminExpertManageListVO();
expertAdminExpertManageListVO.setUserId(r.getUserId());
expertAdminExpertManageListVO.setExpertName(r.getExpertName());
expertAdminExpertManageListVO.setPhoneNo(r.getPhoneNo());
expertAdminExpertManageListVO.setIsDingUser(r.getIsDingUser());
expertAdminExpertManageListVO.setCompany(r.getCompany());
expertAdminExpertManageListVO.setLegalEntityCode(r.getLegalEntityCode());

if (StringUtils.isNotBlank(r.getExpertAccountStatus())) {
ExpertAccountStatusEnum statusEnum = ExpertAccountStatusEnum.of(r.getExpertAccountStatus());
switch (statusEnum) {
case FREEZE:
expertAdminExpertManageListVO.setExpertAccountStatus(QueryExpertAccountStatusEnum.FREEZING.getKey());
break;
case AVAILABLE:
expertAdminExpertManageListVO.setExpertAccountStatus(QueryExpertAccountStatusEnum.NORMAL.getKey());
break;
default:
break;
}
}
ExpertRegionInfo expertRegionInfo = r.getExpertRegionInfo();
if (Objects.nonNull(expertRegionInfo)) {
Integer regionLevel = expertRegionInfo.getRegionLevel();
String regionCode = expertRegionInfo.getRegionCode();
RegionDTO regionDTO = regionCache.getByCodeAndLevel(regionCode, regionLevel);
if (Objects.nonNull(regionDTO)) {
expertRegionInfo.setRegionCode(regionDTO.getRegionCode());
expertRegionInfo.setRegionLevel(regionDTO.getRegionLevel());
expertRegionInfo.setRegionName(regionDTO.getRegionName());
expertAdminExpertManageListVO.setExpertRegionInfo(expertRegionInfo);
}
}
List<DictionaryFieldInfo> expertType = r.getExpertType();
if (CollectionUtils.isNotEmpty(expertType)) {
expertType = assembleDictionaryName(expertType);
expertAdminExpertManageListVO.setExpertType(expertType);
}
List<DictionaryFieldInfo> companyAttribute = r.getCompanyAttribute();
if (CollectionUtils.isNotEmpty(companyAttribute)) {
companyAttribute = assembleDictionaryName(companyAttribute);
expertAdminExpertManageListVO.setCompanyAttribute(companyAttribute);
}
List<DictionaryFieldInfo> titleLevel = r.getTitleLevel();
if (CollectionUtils.isNotEmpty(titleLevel)) {
titleLevel = assembleDictionaryName(titleLevel);
expertAdminExpertManageListVO.setTitleLevel(titleLevel);
}

List<TagFieldInfo> expertSource = r.getExpertSource();
if (CollectionUtils.isNotEmpty(expertSource)) {
expertSource = assembleTagName(expertSource);
expertAdminExpertManageListVO.setExpertSource(expertSource);
}
return expertAdminExpertManageListVO;
}).collect(Collectors.toList());

}

public List<DictionaryFieldInfo> assembleDictionaryName(List<DictionaryFieldInfo> collect) {
return collect.stream().peek(r -> {
DictionaryDTO dictionaryDTO = dictionaryCache.getByCode(r.getDictionaryCode());
if (Objects.nonNull(dictionaryDTO)) {
r.setDictionaryName(dictionaryDTO.getName());
}
}).collect(Collectors.toList());
}


public List<TagFieldInfo> assembleTagName(List<TagFieldInfo> collect) {
return collect.stream().peek(r -> {
TagDTO tagDTO = tagCache.getByTagCode(r.getTagCode());
if (Objects.nonNull(tagDTO)) {
r.setTagName(tagDTO.getTagName());
}
}).collect(Collectors.toList());
}

}

+ 50
- 50
pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/ExpertUserInfoAssembler.java View File

@@ -404,56 +404,56 @@ public class ExpertUserInfoAssembler {
return expertUserFullInfoDTO;
}

// public static ExpertAdminExpertManageListDTO buildExpertAdminExpertManageListDTO(ExpertUserFullInfo expertUserFullInfo
// , Map<Long, List<ExpertDictionary>> expertDictionaryMap, Map<Long, List<ExpertTag>> expertTagMap) {
// Long userId = expertUserFullInfo.getUserId();
// ExpertAdminExpertManageListDTO expertAdminExpertManageListDTO = new ExpertAdminExpertManageListDTO();
// expertAdminExpertManageListDTO.setUserId(expertUserFullInfo.getUserId());
// expertAdminExpertManageListDTO.setExpertName(expertUserFullInfo.getName());
// expertAdminExpertManageListDTO.setPhoneNo(expertUserFullInfo.getPhoneNo());
// expertAdminExpertManageListDTO.setIsDingUser(BoolDisplayEnum.judgeBoolean(expertUserFullInfo.getIsDingUser()));
// expertAdminExpertManageListDTO.setCompany(expertUserFullInfo.getCompany());
// expertAdminExpertManageListDTO.setLegalEntityCode(expertUserFullInfo.getLegalEntityCode());
// expertAdminExpertManageListDTO.setExpertAccountStatus(expertUserFullInfo.getExpertAccountStatus());
//
// // 装配字典数据
// List<ExpertDictionary> userExpertDictionaryList = Objects.isNull(expertDictionaryMap.get(userId)) ? new ArrayList<>() : expertDictionaryMap.get(userId);
// Map<String, List<ExpertDictionary>> fieldExpertDictionaryMap = userExpertDictionaryList.stream().collect(Collectors.groupingBy(ExpertDictionary::getExpertInfoField));
// expertAdminExpertManageListDTO.setExpertType(
// DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.EXPERT_TYPE.getKey())));
// expertAdminExpertManageListDTO.setCompanyAttribute(
// DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.COMPANY_ATTRIBUTE.getKey())));
// expertAdminExpertManageListDTO.setTitleLevel(
// DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.TITLE_LEVEL.getKey())));
// // 装配标签数据
// List<ExpertTag> expertTagList = Objects.isNull(expertTagMap.get(userId)) ? new ArrayList<>() : expertTagMap.get(userId);
// Map<String, List<ExpertTag>> fieldExpertTagMap = expertTagList.stream().collect(Collectors.groupingBy(ExpertTag::getExpertInfoField));
// expertAdminExpertManageListDTO.setExpertSource(
// TagAssembler.toTagFieldInfoList(fieldExpertTagMap.get(ExpertTagEnum.EXPERT_SOURCE.getKey())));
//
// if (StringUtils.isNotBlank(expertUserFullInfo.getRegionCode()) && Objects.nonNull(expertUserFullInfo.getRegionLevel())) {
// ExpertRegionInfo expertRegionInfo = new ExpertRegionInfo();
// expertRegionInfo.setRegionLevel(expertUserFullInfo.getRegionLevel());
// expertRegionInfo.setRegionCode(expertUserFullInfo.getRegionCode());
// expertAdminExpertManageListDTO.setExpertRegionInfo(expertRegionInfo);
// }
//
// // 以下数据为专家excel导出使用
// expertAdminExpertManageListDTO.setGender(expertUserFullInfo.getGender());
// expertAdminExpertManageListDTO.setBirth(expertUserFullInfo.getBirth());
// expertAdminExpertManageListDTO.setHometown(expertUserFullInfo.getHometown());
// expertAdminExpertManageListDTO.setNationality(expertUserFullInfo.getNationality());
// expertAdminExpertManageListDTO.setPolitical(
// DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.POLITICAL.getKey())));
// expertAdminExpertManageListDTO.setIdCard(expertUserFullInfo.getIdCard());
// expertAdminExpertManageListDTO.setBankNo(expertUserFullInfo.getBankNo());
// expertAdminExpertManageListDTO.setEdu(
// DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.EDU.getKey())));
// expertAdminExpertManageListDTO.setRecommendedWay(
// DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.RECOMMENDED_WAY.getKey())));
// return expertAdminExpertManageListDTO;
//
// }
public static ExpertAdminExpertManageListDTO buildExpertAdminExpertManageListDTO(ExpertUserFullInfo expertUserFullInfo
, Map<Long, List<ExpertDictionary>> expertDictionaryMap, Map<Long, List<ExpertTag>> expertTagMap) {
Long userId = expertUserFullInfo.getUserId();
ExpertAdminExpertManageListDTO expertAdminExpertManageListDTO = new ExpertAdminExpertManageListDTO();
expertAdminExpertManageListDTO.setUserId(expertUserFullInfo.getUserId());
expertAdminExpertManageListDTO.setExpertName(expertUserFullInfo.getExpertName());
expertAdminExpertManageListDTO.setPhoneNo(expertUserFullInfo.getPhoneNo());
expertAdminExpertManageListDTO.setIsDingUser(BoolDisplayEnum.judgeBoolean(expertUserFullInfo.getIsDingUser()));
expertAdminExpertManageListDTO.setCompany(expertUserFullInfo.getCompany());
expertAdminExpertManageListDTO.setLegalEntityCode(expertUserFullInfo.getLegalEntityCode());
expertAdminExpertManageListDTO.setExpertAccountStatus(expertUserFullInfo.getExpertAccountStatus());
// 装配字典数据
List<ExpertDictionary> userExpertDictionaryList = Objects.isNull(expertDictionaryMap.get(userId)) ? new ArrayList<>() : expertDictionaryMap.get(userId);
Map<String, List<ExpertDictionary>> fieldExpertDictionaryMap = userExpertDictionaryList.stream().collect(Collectors.groupingBy(ExpertDictionary::getExpertInfoField));
expertAdminExpertManageListDTO.setExpertType(
DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.EXPERT_TYPE.getKey())));
expertAdminExpertManageListDTO.setCompanyAttribute(
DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.COMPANY_ATTRIBUTE.getKey())));
expertAdminExpertManageListDTO.setTitleLevel(
DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.TITLE_LEVEL.getKey())));
// 装配标签数据
List<ExpertTag> expertTagList = Objects.isNull(expertTagMap.get(userId)) ? new ArrayList<>() : expertTagMap.get(userId);
Map<String, List<ExpertTag>> fieldExpertTagMap = expertTagList.stream().collect(Collectors.groupingBy(ExpertTag::getExpertInfoField));
expertAdminExpertManageListDTO.setExpertSource(
TagAssembler.toTagFieldInfoList(fieldExpertTagMap.get(ExpertTagEnum.EXPERT_SOURCE.getKey())));
if (StringUtils.isNotBlank(expertUserFullInfo.getRegionCode()) && Objects.nonNull(expertUserFullInfo.getRegionLevel())) {
ExpertRegionInfo expertRegionInfo = new ExpertRegionInfo();
expertRegionInfo.setRegionLevel(expertUserFullInfo.getRegionLevel());
expertRegionInfo.setRegionCode(expertUserFullInfo.getRegionCode());
expertAdminExpertManageListDTO.setExpertRegionInfo(expertRegionInfo);
}
// 以下数据为专家excel导出使用
expertAdminExpertManageListDTO.setGender(expertUserFullInfo.getGender());
expertAdminExpertManageListDTO.setBirth(expertUserFullInfo.getBirth());
expertAdminExpertManageListDTO.setHometown(expertUserFullInfo.getHometown());
expertAdminExpertManageListDTO.setNationality(expertUserFullInfo.getNationality());
expertAdminExpertManageListDTO.setPolitical(
DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.POLITICAL.getKey())));
expertAdminExpertManageListDTO.setIdCard(expertUserFullInfo.getIdCard());
expertAdminExpertManageListDTO.setBankNo(expertUserFullInfo.getBankNo());
expertAdminExpertManageListDTO.setEdu(
DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.EDU.getKey())));
expertAdminExpertManageListDTO.setRecommendedWay(
DictionaryAssembler.toDictionaryFieldInfoList(fieldExpertDictionaryMap.get(DictExpertInfoTypeEnum.RECOMMENDED_WAY.getKey())));
return expertAdminExpertManageListDTO;
}


}

+ 29
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/assembler/TagAssembler.java View File

@@ -0,0 +1,29 @@
package com.ningdatech.pmapi.expert.assembler;

import cn.hutool.core.collection.CollectionUtil;
import com.ningdatech.pmapi.expert.model.TagFieldInfo;
import com.ningdatech.pmapi.meta.model.entity.ExpertTag;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
* @author liuxinxin
* @date 2022/7/25 下午4:30
*/

public class TagAssembler {

public static List<TagFieldInfo> toTagFieldInfoList(List<ExpertTag> expertTagList) {
if (CollectionUtil.isEmpty(expertTagList)) {
return new ArrayList<>();
}
return expertTagList.stream().map(r -> {
TagFieldInfo dictionaryFieldInfo = new TagFieldInfo();
dictionaryFieldInfo.setTagFieldName(r.getExpertInfoField());
dictionaryFieldInfo.setTagCode(r.getTagCode());
return dictionaryFieldInfo;
}).collect(Collectors.toList());
}
}

+ 13
- 8
pmapi/src/main/java/com/ningdatech/pmapi/expert/manage/ExpertAdminManage.java View File

@@ -7,6 +7,8 @@ import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.pmapi.common.enumeration.BoolDisplayEnum;
import com.ningdatech.pmapi.common.helper.RegionLimitHelper;
import com.ningdatech.pmapi.common.model.CommonPage;
import com.ningdatech.pmapi.expert.assembler.ExpertAdminExpertManageAssembler;
import com.ningdatech.pmapi.expert.assembler.ExpertInfoCmdAssembler;
import com.ningdatech.pmapi.expert.constant.ExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.constant.ExpertApplyStatusEnum;
@@ -19,12 +21,14 @@ import com.ningdatech.pmapi.expert.model.*;
import com.ningdatech.pmapi.expert.model.bo.ExpertInfoSensitiveFieldCheckBO;
import com.ningdatech.pmapi.expert.model.cmd.ExpertAdminExpertManageQueryCmd;
import com.ningdatech.pmapi.expert.model.cmd.ExpertInfoModifyCmd;
import com.ningdatech.pmapi.expert.model.dto.ExpertAdminExpertManageListDTO;
import com.ningdatech.pmapi.expert.model.query.ExpertDictionaryQuery;
import com.ningdatech.pmapi.expert.model.query.ExpertTagQuery;
import com.ningdatech.pmapi.expert.model.req.AdminExpertBasicInfoModifyRequest;
import com.ningdatech.pmapi.expert.model.req.MetaApplyResultRequest;
import com.ningdatech.pmapi.expert.model.vo.ExpertAdminExpertManageListVO;
import com.ningdatech.pmapi.expert.model.vo.ExpertBasicInfoModifyResultVO;
import com.ningdatech.pmapi.expert.service.ExpertAdminManageService;
import com.ningdatech.pmapi.expert.service.ExpertInfoService;
import com.ningdatech.pmapi.expert.service.IExpertMetaApplyService;
import com.ningdatech.pmapi.meta.constant.DictExpertInfoTypeEnum;
@@ -54,6 +58,8 @@ public class ExpertAdminManage {
private final ExpertInfoSensitiveFieldModifyCheckHelper expertInfoSensitiveFieldModifyCheckHelper;
private final ExpertInfoService expertInfoService;
private final ExpertMetaApplyManage expertMetaApplyManage;
private final ExpertAdminManageService expertAdminManageService;
private final ExpertAdminExpertManageAssembler expertAdminExpertManageAssembler;

/**
* 专家管理员使用 专家库列表查询
@@ -64,14 +70,13 @@ public class ExpertAdminManage {
public PageVo<ExpertAdminExpertManageListVO> getExpertLibraryList(ExpertAdminExpertManageQuery query) {
Long userId = LoginUserUtil.getUserId();
ExpertAdminExpertManageQueryCmd expertAdminExpertManageQueryCmd = buildExpertAdminExpertManageQueryCmd(query, userId);
// CommonPage<ExpertAdminExpertManageListDTO> pageResult =
// expertAdminManageService.getExpertLibraryList(expertAdminExpertManageQueryCmd);
//
// PageVo<ExpertAdminExpertManageListVO> pageVo = new PageVo<>();
// pageVo.setTotal(pageResult.getItemsTotal());
// pageVo.setRecords(expertAdminExpertManageAssembler.toExpertAdminExpertManageListVOList(pageResult.getItems()));
// return pageVo;
return null;
CommonPage<ExpertAdminExpertManageListDTO> pageResult =
expertAdminManageService.getExpertLibraryList(expertAdminExpertManageQueryCmd);

PageVo<ExpertAdminExpertManageListVO> pageVo = new PageVo<>();
pageVo.setTotal(pageResult.getItemsTotal());
pageVo.setRecords(expertAdminExpertManageAssembler.toExpertAdminExpertManageListVOList(pageResult.getItems()));
return pageVo;
}




+ 21
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/mapper/ExpertAdminManageMapper.java View File

@@ -0,0 +1,21 @@
package com.ningdatech.pmapi.expert.mapper;

import com.ningdatech.pmapi.expert.model.query.ListExpertQuery;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/5 上午10:27
*/
public interface ExpertAdminManageMapper {

/**
* 获取所有符合查询条件的专家user_id
*
* @param query
* @return
*/
List<Long> listExpertUserId(@Param("query") ListExpertQuery query);
}

+ 117
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/mapper/ExpertAdminManageMapper.xml View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ningdatech.pmapi.expert.mapper.ExpertAdminManageMapper">

<sql id="Expert_Full_Info_Region">
SELECT user_id FROM nd_expert_user_full_info
<where>
<if test="query.expertName != null and query.expertName !='' ">
AND expert_name LIKE CONCAT('%',#{query.expertName, jdbcType=BIGINT},'%')
</if>
<if test="query.company != null and query.company !='' ">
AND company LIKE CONCAT('%',#{query.company, jdbcType=BIGINT},'%')
</if>
<if test="query.expertAccountStatusList != null and query.expertAccountStatusList.size >0 ">
AND expert_account_status IN
<foreach collection="query.expertAccountStatusList" item="expertAccountStatus" index="index" open="("
close=")"
separator=",">
#{expertAccountStatus}
</foreach>
</if>
<if test="query.regionCode != null and query.regionCode != '' and query.regionLevel != null and query.regionLevel != '' ">
AND region_code = #{query.regionCode} AND region_level = #{query.regionLevel}
</if>
<if test="query.isDingUser != null and query.isDingUser == true ">
AND is_ding_user = 'Y'
</if>
<if test="query.isDingUser != null and query.isDingUser == false ">
AND is_ding_user = 'N'
</if>
<if test="query.regionContainsList != null and query.regionContainsList.size >0 ">
AND (
<foreach collection="query.regionContainsList" item="regionContains" index="index" separator="OR">
(<![CDATA[ region_level>= #{regionContains.parentRegionTreeLevel} AND region_code IN ]]>
<foreach collection="regionContains.containsRegionCodeList" item="containsRegionCode" index="index"
open="("
close=")"
separator=",">#{containsRegionCode}
</foreach>
)
</foreach>
)
</if>
</where>
-- ORDER BY create_on DESC

</sql>

<sql id="Expert_Tag_Relation">
SELECT
user_id
FROM
(
SELECT DISTINCT
et.user_id,
et.expert_info_field
FROM
expert_tag et
WHERE
<foreach collection="query.expertTagQueryList" item="expertTagQuery" index="index" separator="OR">
(et.expert_info_field = #{expertTagQuery.expertInfoField}
AND et.tag_code IN
<foreach collection="expertTagQuery.tagCodeList" item="tagCode" index="index" open="(" close=")"
separator=",">
#{tagCode}
</foreach>)
</foreach>
) temp
GROUP BY
user_id
HAVING
count( user_id )= ${query.expertTagQueryList.size()}
</sql>


<sql id="Expert_Dictionary_Relation">
SELECT
user_id
FROM
(
SELECT DISTINCT
ed.user_id,
ed.expert_info_field
FROM
expert_dictionary ed
WHERE
<foreach collection="query.expertDictionaryQueryList" item="expertDictionaryQuery" index="index" separator="OR">
(ed.expert_info_field = #{expertDictionaryQuery.expertInfoField}
AND ed.dictionary_code IN
<foreach collection="expertDictionaryQuery.dictionaryCodeList" item="dictionaryCode" index="index" open="("
close=")"
separator=",">
#{dictionaryCode}
</foreach>)
</foreach>
) temp
GROUP BY
user_id
HAVING
count( user_id )= ${query.expertDictionaryQueryList.size()}
</sql>


<select id="listExpertUserId" resultType="java.lang.Long"
parameterType="com.ningdatech.pmapi.expert.model.query.ListExpertQuery">
<include refid="Expert_Full_Info_Region"/>
<if test="query.expertTagQueryList != null and query.expertTagQueryList.size >0 ">
INTERSECT
<include refid="Expert_Tag_Relation"/>
</if>
<if test="query.expertDictionaryQueryList != null and query.expertDictionaryQueryList.size >0 ">
INTERSECT
<include refid="Expert_Dictionary_Relation"/>
</if>
</select>

</mapper>

+ 138
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/model/dto/ExpertAdminExpertManageListDTO.java View File

@@ -0,0 +1,138 @@
package com.ningdatech.pmapi.expert.model.dto;


import com.ningdatech.pmapi.expert.model.DictionaryFieldInfo;
import com.ningdatech.pmapi.expert.model.TagFieldInfo;
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/4 上午11:36
*/
@Data
public class ExpertAdminExpertManageListDTO {

/**
* 用户id
*/
private Long userId;

/**
* 专家姓名
*/
private String expertName;

/**
* 工作单位
*/
private String company;

/**
* 单位属性(字典code)
*/
private List<DictionaryFieldInfo> companyAttribute;

/**
* 专家联系方式
*/
private String phoneNo;

/**
* 性别
*/
private String gender;

/**
* 出生日期
*/
private LocalDateTime birth;


/**
* 籍贯
*/
private String hometown;

/**
* 民族
*/
private String nationality;

/**
* 政治面貌(字典code)
*/
private List<DictionaryFieldInfo> political;

/**
* 身份证号码
*/
private String idCard;


/**
* 专家层级
*/
private ExpertRegionInfo expertRegionInfo;


/**
* 银行卡号
*/
private String bankNo;


/**
* 开户银行
*/
private String bank;

/**
* 学历(字典code)
*/
private List<DictionaryFieldInfo> edu;


/**
* 学位(字典code)
*/
private List<DictionaryFieldInfo> degree;

/**
* 职称级别
*/
private List<DictionaryFieldInfo> titleLevel;

/**
* 推荐方式
*/
private List<DictionaryFieldInfo> recommendedWay;

/**
* 单位法人编号
*/
private String legalEntityCode;

/**
* 专家类型(内外围)
*/
private List<DictionaryFieldInfo> expertType;

/**
* 是否浙政钉用户
*/
private Boolean isDingUser;

/**
* 账号状态
*/
private String expertAccountStatus;

/**
* 专家来源
*/
private List<TagFieldInfo> expertSource;
}

+ 24
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/service/ExpertAdminManageService.java View File

@@ -0,0 +1,24 @@
package com.ningdatech.pmapi.expert.service;


import com.ningdatech.pmapi.common.model.CommonPage;
import com.ningdatech.pmapi.expert.model.cmd.ExpertAdminExpertManageQueryCmd;
import com.ningdatech.pmapi.expert.model.dto.ExpertAdminExpertManageListDTO;

import java.util.List;

/**
* @author liuxinxin
* @date 2022/8/4 上午11:32
*/
public interface ExpertAdminManageService {

/**
* 专家库条件筛选(管理员使用)
*
* @param expertAdminExpertManageQueryCmd
* @return
*/
CommonPage<ExpertAdminExpertManageListDTO> getExpertLibraryList(ExpertAdminExpertManageQueryCmd expertAdminExpertManageQueryCmd);

}

+ 112
- 0
pmapi/src/main/java/com/ningdatech/pmapi/expert/service/impl/ExpertAdminManageServiceImpl.java View File

@@ -0,0 +1,112 @@
package com.ningdatech.pmapi.expert.service.impl;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.model.CommonPage;
import com.ningdatech.pmapi.expert.assembler.ExpertUserInfoAssembler;
import com.ningdatech.pmapi.expert.constant.ExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.constant.ExpertUserInfoStepEnum;
import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
import com.ningdatech.pmapi.expert.mapper.ExpertAdminManageMapper;
import com.ningdatech.pmapi.expert.model.cmd.ExpertAdminExpertManageQueryCmd;
import com.ningdatech.pmapi.expert.model.dto.ExpertAdminExpertManageListDTO;
import com.ningdatech.pmapi.expert.model.query.ListExpertQuery;
import com.ningdatech.pmapi.expert.service.ExpertAdminManageService;
import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService;
import com.ningdatech.pmapi.meta.model.entity.ExpertDictionary;
import com.ningdatech.pmapi.meta.model.entity.ExpertTag;
import com.ningdatech.pmapi.meta.service.IExpertDictionaryService;
import com.ningdatech.pmapi.meta.service.IExpertTagService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* @author liuxinxin
* @date 2023/3/10 上午10:37
*/
@Service
@RequiredArgsConstructor
public class ExpertAdminManageServiceImpl implements ExpertAdminManageService {

private final IExpertUserFullInfoService iExpertUserFullInfoService;
private final IExpertDictionaryService iExpertDictionaryService;
private final IExpertTagService iExpertTagService;
private final ExpertAdminManageMapper expertAdminManageMapper;


@Override
public CommonPage<ExpertAdminExpertManageListDTO> getExpertLibraryList(ExpertAdminExpertManageQueryCmd req) {
ListExpertQuery listExpertQuery = buildListExpertQuery(req);
List<Long> userIdList = expertAdminManageMapper.listExpertUserId(listExpertQuery);

List<ExpertUserFullInfo> evidenceHasBeenSubmittedExpertInfoList = iExpertUserFullInfoService.list(Wrappers.lambdaQuery(ExpertUserFullInfo.class)
.eq(ExpertUserFullInfo::getUserInfoStep, ExpertUserInfoStepEnum.EVIDENCE_HAS_BEEN_SUBMITTED.getKey()));
List<Long> evidenceHasBeenSubmittedExpertUserIdList = evidenceHasBeenSubmittedExpertInfoList
.stream().map(ExpertUserFullInfo::getUserId)
.distinct().collect(Collectors.toList());

Iterator<Long> iterator = userIdList.iterator();
while (iterator.hasNext()) {
if (!evidenceHasBeenSubmittedExpertUserIdList.contains(iterator.next())) {
userIdList.remove(iterator.next());
}
}

CommonPage<ExpertAdminExpertManageListDTO> commonPage = new CommonPage<>();
commonPage.setCurrentPageNumber(req.getPageNumber());
commonPage.setItemsTotal((long) userIdList.size());

List<ExpertAdminExpertManageListDTO> recordList = new ArrayList<>();

if (userIdList.size() != 0) {
List<Long> currPageUserIdList = CollUtil.page(req.getPageNumber() - 1, req.getPageSize(), userIdList);
List<ExpertUserFullInfo> expertUserList = iExpertUserFullInfoService.listByUserIds(currPageUserIdList);

// 获取专家字典数据
LambdaQueryWrapper<ExpertDictionary> in = Wrappers.lambdaQuery(ExpertDictionary.class)
.in(ExpertDictionary::getUserId, userIdList);
List<ExpertDictionary> expertDictionaryList = iExpertDictionaryService.list(in);
Map<Long, List<ExpertDictionary>> expertDictMap = CollUtils.group(expertDictionaryList, ExpertDictionary::getUserId);

// 获取专家标签数据
LambdaQueryWrapper<ExpertTag> tagIn = Wrappers.lambdaQuery(ExpertTag.class)
.in(ExpertTag::getUserId, userIdList);
List<ExpertTag> expertTagList = iExpertTagService.list(tagIn);
Map<Long, List<ExpertTag>> expertTagMap = CollUtils.group(expertTagList, ExpertTag::getUserId);
for (ExpertUserFullInfo expertUserFullInfo : expertUserList) {
ExpertAdminExpertManageListDTO expertAdminExpertManageListDTO =
ExpertUserInfoAssembler.buildExpertAdminExpertManageListDTO(expertUserFullInfo, expertDictMap, expertTagMap);
recordList.add(expertAdminExpertManageListDTO);
}
}
commonPage.setItems(recordList);
return commonPage;
}

public ListExpertQuery buildListExpertQuery(ExpertAdminExpertManageQueryCmd queryCmd) {
ListExpertQuery listExpertQuery = new ListExpertQuery();
listExpertQuery.setExpertName(queryCmd.getExpertName());
listExpertQuery.setCompany(queryCmd.getCompany());
listExpertQuery.setExpertDictionaryQueryList(queryCmd.getExpertDictionaryQueryList());
listExpertQuery.setExpertTagQueryList(queryCmd.getExpertTagQueryList());
listExpertQuery.setRegionContainsList(queryCmd.getRegionContainsList());
listExpertQuery.setIsDingUser(queryCmd.getIsDingUser());
listExpertQuery.setLimit(queryCmd.getLimit());
listExpertQuery.setOffset(queryCmd.getOffset());
listExpertQuery.setIsDingUser(queryCmd.getIsDingUser());
if (CollectionUtils.isNotEmpty(queryCmd.getExpertAccountStatusList())) {
listExpertQuery.setExpertAccountStatusList(
queryCmd.getExpertAccountStatusList().stream().map(ExpertAccountStatusEnum::getKey).collect(Collectors.toList()));
}
return listExpertQuery;
}
}

Loading…
Cancel
Save