@@ -10,9 +10,9 @@ import java.util.List; | |||
* @author liuxinxin | |||
* @date 2022/7/28 下午2:14 | |||
*/ | |||
public class DictUtils { | |||
public class DictUtil { | |||
private DictUtils() { | |||
private DictUtil() { | |||
} | |||
public static Boolean isValueEquals(List<DictFieldInfoDTO> list1, List<DictFieldInfoDTO> list2) { |
@@ -0,0 +1,65 @@ | |||
package com.hz.pm.api.common.util; | |||
import cn.hutool.core.collection.CollUtil; | |||
import com.hz.pm.api.common.model.ExpertRegionModifyDiffBO; | |||
import com.hz.pm.api.expert.model.RegionDtoMapKey; | |||
import com.hz.pm.api.meta.model.ExpertRegionInfo; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.stream.Collectors; | |||
/** | |||
* @author liuxinxin | |||
* @since 2022/7/28 下午4:33 | |||
*/ | |||
public class ExpertRegionInfoUtil { | |||
private ExpertRegionInfoUtil() { | |||
} | |||
public static ExpertRegionModifyDiffBO diff(List<ExpertRegionInfo> preRegions, List<ExpertRegionInfo> currRegions) { | |||
ExpertRegionModifyDiffBO diff = new ExpertRegionModifyDiffBO(); | |||
List<ExpertRegionInfo> addList = new ArrayList<>(); | |||
List<ExpertRegionInfo> removeList = new ArrayList<>(); | |||
if (CollUtil.isEmpty(preRegions) && CollUtil.isEmpty(currRegions)) { | |||
diff.setAddList(addList); | |||
diff.setRemoveList(removeList); | |||
} else if (CollUtil.isEmpty(preRegions)) { | |||
diff.setAddList(currRegions); | |||
diff.setRemoveList(removeList); | |||
} else if (CollUtil.isEmpty(currRegions)) { | |||
diff.setAddList(addList); | |||
diff.setRemoveList(preRegions); | |||
} else { | |||
List<RegionDtoMapKey> preRegionMapKey = convert(preRegions); | |||
List<RegionDtoMapKey> currRegionMapKey = convert(currRegions); | |||
removeList.addAll(notContains(currRegionMapKey, preRegionMapKey)); | |||
addList.addAll(notContains(preRegionMapKey, currRegionMapKey)); | |||
diff.setAddList(addList); | |||
diff.setRemoveList(removeList); | |||
} | |||
return diff; | |||
} | |||
private static List<ExpertRegionInfo> notContains(List<RegionDtoMapKey> source, List<RegionDtoMapKey> target) { | |||
return target.stream().filter(w -> !source.contains(w)).map(key -> { | |||
ExpertRegionInfo expertRegionInfo = new ExpertRegionInfo(); | |||
expertRegionInfo.setRegionCode(key.getRegionCode()); | |||
expertRegionInfo.setRegionLevel(key.getRegionLevel()); | |||
return expertRegionInfo; | |||
}).collect(Collectors.toList()); | |||
} | |||
private static List<RegionDtoMapKey> convert(List<ExpertRegionInfo> regionInfos) { | |||
return regionInfos.stream().map(r -> { | |||
RegionDtoMapKey regionDtoMapKey = new RegionDtoMapKey(); | |||
regionDtoMapKey.setRegionLevel(r.getRegionLevel()); | |||
regionDtoMapKey.setRegionCode(r.getRegionCode()); | |||
return regionDtoMapKey; | |||
}).collect(Collectors.toList()); | |||
} | |||
} |
@@ -1,73 +0,0 @@ | |||
package com.hz.pm.api.common.util; | |||
import com.hz.pm.api.common.model.ExpertRegionModifyDiffBO; | |||
import com.hz.pm.api.expert.model.RegionDtoMapKey; | |||
import com.hz.pm.api.meta.model.ExpertRegionInfo; | |||
import org.apache.commons.collections4.CollectionUtils; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.stream.Collectors; | |||
/** | |||
* @author liuxinxin | |||
* @date 2022/7/28 下午4:33 | |||
*/ | |||
public class ExpertRegionInfoUtils { | |||
public static ExpertRegionModifyDiffBO modifyDiff(List<ExpertRegionInfo> beforeList, List<ExpertRegionInfo> afterList) { | |||
ExpertRegionModifyDiffBO expertRegionModifyDiffBO = new ExpertRegionModifyDiffBO(); | |||
List<ExpertRegionInfo> addList = new ArrayList<>(); | |||
List<ExpertRegionInfo> removeList = new ArrayList<>(); | |||
if (CollectionUtils.isEmpty(beforeList) && CollectionUtils.isEmpty(afterList)) { | |||
expertRegionModifyDiffBO.setAddList(addList); | |||
expertRegionModifyDiffBO.setRemoveList(removeList); | |||
return expertRegionModifyDiffBO; | |||
} else if (CollectionUtils.isEmpty(beforeList)) { | |||
expertRegionModifyDiffBO.setAddList(afterList); | |||
expertRegionModifyDiffBO.setRemoveList(removeList); | |||
return expertRegionModifyDiffBO; | |||
} else if (CollectionUtils.isEmpty(afterList)) { | |||
expertRegionModifyDiffBO.setAddList(addList); | |||
expertRegionModifyDiffBO.setRemoveList(beforeList); | |||
return expertRegionModifyDiffBO; | |||
} | |||
List<RegionDtoMapKey> beforeRegionDtoMapKeyList = beforeList.stream().map(r -> { | |||
RegionDtoMapKey regionDtoMapKey = new RegionDtoMapKey(); | |||
regionDtoMapKey.setRegionLevel(r.getRegionLevel()); | |||
regionDtoMapKey.setRegionCode(r.getRegionCode()); | |||
return regionDtoMapKey; | |||
}).collect(Collectors.toList()); | |||
List<RegionDtoMapKey> afterRegionDtoMapKeyList = afterList.stream().map(r -> { | |||
RegionDtoMapKey regionDtoMapKey = new RegionDtoMapKey(); | |||
regionDtoMapKey.setRegionLevel(r.getRegionLevel()); | |||
regionDtoMapKey.setRegionCode(r.getRegionCode()); | |||
return regionDtoMapKey; | |||
}).collect(Collectors.toList()); | |||
for (RegionDtoMapKey key : beforeRegionDtoMapKeyList) { | |||
if (!afterRegionDtoMapKeyList.contains(key)) { | |||
ExpertRegionInfo expertRegionInfo = new ExpertRegionInfo(); | |||
expertRegionInfo.setRegionCode(key.getRegionCode()); | |||
expertRegionInfo.setRegionLevel(key.getRegionLevel()); | |||
removeList.add(expertRegionInfo); | |||
} | |||
} | |||
for (RegionDtoMapKey key : afterRegionDtoMapKeyList) { | |||
if (!beforeRegionDtoMapKeyList.contains(key)) { | |||
ExpertRegionInfo expertRegionInfo = new ExpertRegionInfo(); | |||
expertRegionInfo.setRegionCode(key.getRegionCode()); | |||
expertRegionInfo.setRegionLevel(key.getRegionLevel()); | |||
addList.add(expertRegionInfo); | |||
} | |||
} | |||
expertRegionModifyDiffBO.setAddList(addList); | |||
expertRegionModifyDiffBO.setRemoveList(removeList); | |||
return expertRegionModifyDiffBO; | |||
} | |||
} |
@@ -1,268 +0,0 @@ | |||
package com.hz.pm.api.common.util; | |||
import cn.hutool.core.bean.BeanUtil; | |||
import cn.hutool.core.map.MapUtil; | |||
import cn.hutool.json.JSONUtil; | |||
import cn.hutool.poi.excel.ExcelReader; | |||
import cn.hutool.poi.excel.ExcelUtil; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.hz.pm.api.common.helper.RegionCacheHelper; | |||
import com.hz.pm.api.expert.controller.ExpertController; | |||
import com.hz.pm.api.expert.model.*; | |||
import com.hz.pm.api.expert.model.req.ExpertRegistrationRequest; | |||
import com.hz.pm.api.meta.constant.DictTypeEnum; | |||
import com.hz.pm.api.meta.constant.ExpertTagEnum; | |||
import com.hz.pm.api.meta.helper.DictionaryCache; | |||
import com.hz.pm.api.meta.helper.TagCache; | |||
import com.hz.pm.api.meta.model.ExpertRegionInfo; | |||
import com.hz.pm.api.meta.model.dto.DictionaryDTO; | |||
import com.hz.pm.api.meta.model.dto.TagDTO; | |||
import com.hz.pm.api.organization.model.entity.DingOrganization; | |||
import com.hz.pm.api.organization.service.IDingOrganizationService; | |||
import com.hz.pm.api.sys.model.dto.RegionDTO; | |||
import java.io.File; | |||
import java.time.LocalDate; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.Map; | |||
/** | |||
* <p> | |||
* ExpertRegisterUtil | |||
* </p> | |||
* | |||
* @author WendyYang | |||
* @since 10:03 2023/11/21 | |||
*/ | |||
public class ExpertRegisterUtil { | |||
private ExpertRegisterUtil() { | |||
} | |||
private static final String SEPARATOR = ",|,|\\n"; | |||
public static RegionCacheHelper regionCacheHelper; | |||
public static DictionaryCache dictionaryCache; | |||
public static IDingOrganizationService organizationService; | |||
public static TagCache tagCache; | |||
public static ExpertController expertController; | |||
public static void registerExpertBatch(String path) { | |||
ExcelReader reader = ExcelUtil.getReader(new File(path)); | |||
List<Map<String, Object>> experts = reader.readAll(); | |||
experts.forEach(w -> { | |||
ExpertRegistrationRequest request = new ExpertRegistrationRequest(); | |||
ExpertBasicInfo basic = new ExpertBasicInfo(); | |||
basic.setBank(MapUtil.getStr(w, "开户行")); | |||
basic.setBankNo(MapUtil.getStr(w, "银行卡号")); | |||
basic.setName(MapUtil.getStr(w, "*姓名")); | |||
basic.setPhoneNo(MapUtil.getStr(w, "*手机")); | |||
basic.setGender("男".equals(MapUtil.getStr(w, "性别")) ? "1" : "0"); | |||
// 政治面貌 | |||
basic.setPolitical(new ArrayList<>()); | |||
String political = MapUtil.getStr(w, "政治面貌"); | |||
List<DictionaryDTO> politicalDicts = dictionaryCache.listDictByDictType(DictTypeEnum.POLITICAL.getKey()); | |||
if (!politicalDicts.isEmpty()) { | |||
politicalDicts.stream() | |||
.filter(dict -> dict.getName().equals(political)) | |||
.findFirst().ifPresent(dictionary -> { | |||
DictFieldInfoDTO dict = new DictFieldInfoDTO(); | |||
dict.setDictionaryName(dictionary.getName()); | |||
dict.setDictionaryCode(dictionary.getDictionaryCode()); | |||
dict.setDictionaryFieldName(dictionary.getDictionaryType()); | |||
basic.getPolitical().add(dict); | |||
}); | |||
} | |||
ExpertEduInfo eduInfo = new ExpertEduInfo(); | |||
eduInfo.setSchool("暂无"); | |||
eduInfo.setAcademicTitle("暂无"); | |||
eduInfo.setGraduatedAt(LocalDate.now()); | |||
eduInfo.setEdu(new ArrayList<>()); | |||
eduInfo.setDegree(new ArrayList<>()); | |||
// 学历 | |||
String eduStr = MapUtil.getStr(w, "学历"); | |||
List<DictionaryDTO> eduDicts = dictionaryCache.listDictByDictType(DictTypeEnum.EDU.getKey()); | |||
if (!eduDicts.isEmpty()) { | |||
eduDicts.stream() | |||
.filter(dict -> dict.getName().equals(eduStr)) | |||
.findFirst().ifPresent(dictionary -> { | |||
DictFieldInfoDTO dict = new DictFieldInfoDTO(); | |||
dict.setDictionaryName(dictionary.getName()); | |||
dict.setDictionaryCode(dictionary.getDictionaryCode()); | |||
dict.setDictionaryFieldName(dictionary.getDictionaryType()); | |||
eduInfo.getEdu().add(dict); | |||
}); | |||
} | |||
// 学位 | |||
String degreeStr = MapUtil.getStr(w, "学位"); | |||
List<DictionaryDTO> degreeDicts = dictionaryCache.listDictByDictType(DictTypeEnum.DEGREE.getKey()); | |||
if (!degreeDicts.isEmpty()) { | |||
degreeDicts.stream() | |||
.filter(dict -> dict.getName().equals(degreeStr)) | |||
.findFirst().ifPresent(dictionary -> { | |||
DictFieldInfoDTO dict = new DictFieldInfoDTO(); | |||
dict.setDictionaryName(dictionary.getName()); | |||
dict.setDictionaryCode(dictionary.getDictionaryCode()); | |||
dict.setDictionaryFieldName(dictionary.getDictionaryType()); | |||
eduInfo.getDegree().add(dict); | |||
}); | |||
} | |||
request.setEduInfo(eduInfo); | |||
// 专家层级 | |||
String expertRegionStr = MapUtil.getStr(w, "*专家层级").replace("景宁县", "景宁畲族自治县"); | |||
RegionDTO expertRegion = regionCacheHelper.getByRegionName(expertRegionStr); | |||
if (expertRegion != null) { | |||
basic.setExpertRegionInfo(BeanUtil.copyProperties(expertRegion, ExpertRegionInfo.class)); | |||
} | |||
// 履职意向 | |||
String intentionRegions = MapUtil.getStr(w, "*履职意向").replace("景宁县", "景宁畲族自治县"); | |||
basic.setExpertIntentionWorkRegions(new ArrayList<>()); | |||
for (String intentionRegionStr : intentionRegions.split("")) { | |||
RegionDTO currRegion = regionCacheHelper.getByRegionName(intentionRegionStr); | |||
if (currRegion != null) { | |||
basic.getExpertIntentionWorkRegions().add(BeanUtil.copyProperties(currRegion, ExpertRegionInfo.class)); | |||
} | |||
} | |||
request.setBasicInfo(basic); | |||
// 职业信息 | |||
ExpertJobInfo jobInfo = new ExpertJobInfo(); | |||
jobInfo.setAddress("暂无"); | |||
jobInfo.setExperience("暂无"); | |||
jobInfo.setJobStatus(new ArrayList<>()); | |||
jobInfo.setCompany(MapUtil.getStr(w, "*工作单位")); | |||
List<DingOrganization> organizations = organizationService.list(Wrappers.lambdaQuery(DingOrganization.class) | |||
.eq(DingOrganization::getOrganizationName, jobInfo.getCompany())); | |||
if (organizations.size() == 1) { | |||
jobInfo.setCompanyUniqCode(organizations.get(0).getOrganizationCode()); | |||
} | |||
jobInfo.setAdministrativeDuties(MapUtil.getStr(w, "行政职务")); | |||
jobInfo.setAdministrativeRank(new ArrayList<>()); | |||
String administrativeRankStr = MapUtil.getStr(w, "行政职级"); | |||
List<DictionaryDTO> administrativeRankDicts = dictionaryCache.listDictByDictType(DictTypeEnum.ADMINISTRATIVE_RANK.getKey()); | |||
if (!administrativeRankDicts.isEmpty()) { | |||
administrativeRankDicts.stream() | |||
.filter(dict -> dict.getName().equals(administrativeRankStr)) | |||
.findFirst().ifPresent(dictionary -> { | |||
DictFieldInfoDTO dict = new DictFieldInfoDTO(); | |||
dict.setDictionaryName(dictionary.getName()); | |||
dict.setDictionaryCode(dictionary.getDictionaryCode()); | |||
dict.setDictionaryFieldName(dictionary.getDictionaryType()); | |||
jobInfo.getAdministrativeRank().add(dict); | |||
}); | |||
} | |||
jobInfo.setCompanyAttribute(new ArrayList<>()); | |||
String companyTypeStr = MapUtil.getStr(w, "*单位类型"); | |||
List<DictionaryDTO> companyTypeDicts = dictionaryCache.listDictByDictType(DictTypeEnum.COMPANY_ATTRIBUTE.getKey()); | |||
if (!companyTypeDicts.isEmpty()) { | |||
companyTypeDicts.stream() | |||
.filter(dict -> dict.getName().equals(companyTypeStr)) | |||
.findFirst().ifPresent(dictionary -> { | |||
DictFieldInfoDTO dict = new DictFieldInfoDTO(); | |||
dict.setDictionaryName(dictionary.getName()); | |||
dict.setDictionaryCode(dictionary.getDictionaryCode()); | |||
dict.setDictionaryFieldName(dictionary.getDictionaryType()); | |||
jobInfo.getCompanyAttribute().add(dict); | |||
}); | |||
} | |||
request.setJobInfo(jobInfo); | |||
ExpertProfessionalInfo professionalInfo = new ExpertProfessionalInfo(); | |||
professionalInfo.setAwards("暂无"); | |||
professionalInfo.setIndustrySector(new ArrayList<>()); | |||
professionalInfo.setOther(new ArrayList<>()); | |||
Map<String, TagDTO> tagMap = tagCache.getNameTagMap(); | |||
String otherTagStr = MapUtil.getStr(w, "其他标签"); | |||
if (StrUtils.isNotBlank(otherTagStr)) { | |||
for (String othTag : otherTagStr.split(SEPARATOR)) { | |||
tagMap.entrySet().stream() | |||
.filter(tag -> tag.getValue().getParentCode().equals(ExpertTagEnum.OTHER.getKey()) | |||
&& tag.getValue().getTagName().equals(othTag)) | |||
.forEach(tag -> { | |||
TagFieldInfo expertTag = new TagFieldInfo(); | |||
expertTag.setTagCode(tag.getValue().getTagCode()); | |||
expertTag.setTagFieldName(tag.getValue().getParentCode()); | |||
expertTag.setTagName(tag.getValue().getTagName()); | |||
professionalInfo.getOther().add(expertTag); | |||
}); | |||
} | |||
} | |||
String avoidCompanyStr = MapUtil.getStr(w, "*回避单位"); | |||
professionalInfo.setAvoidCompanyList(new ArrayList<>()); | |||
List<DingOrganization> avoidOrges = organizationService.list(Wrappers.lambdaQuery(DingOrganization.class) | |||
.in(DingOrganization::getOrganizationName, avoidCompanyStr.split(SEPARATOR))); | |||
if (!avoidOrges.isEmpty()) { | |||
avoidOrges.forEach(org -> { | |||
ExpertAvoidCompanyInfo companyInfo = new ExpertAvoidCompanyInfo(); | |||
companyInfo.setCompanyName(org.getOrganizationName()); | |||
companyInfo.setCompanyUniqCode(org.getOrganizationCode()); | |||
professionalInfo.getAvoidCompanyList().add(companyInfo); | |||
}); | |||
} | |||
professionalInfo.setGoodAt(new ArrayList<>()); | |||
String goodAtStr = MapUtil.getStr(w, "*擅长方向"); | |||
for (String othTag : goodAtStr.split(SEPARATOR)) { | |||
tagMap.entrySet().stream() | |||
.filter(tag -> tag.getValue().getTagName().equals(othTag)) | |||
.forEach(tag -> { | |||
TagFieldInfo expertTag = new TagFieldInfo(); | |||
expertTag.setTagCode(tag.getValue().getTagCode()); | |||
expertTag.setTagFieldName(ExpertTagEnum.GOOD_AT.getKey()); | |||
expertTag.setTagName(tag.getValue().getTagName()); | |||
professionalInfo.getGoodAt().add(expertTag); | |||
}); | |||
} | |||
String industrySectorStr = MapUtil.getStr(w, "行业领域"); | |||
for (String othTag : industrySectorStr.split(SEPARATOR)) { | |||
tagMap.entrySet().stream() | |||
.filter(tag -> tag.getValue().getTagName().equals(othTag)) | |||
.forEach(tag -> { | |||
TagFieldInfo expertTag = new TagFieldInfo(); | |||
expertTag.setTagCode(tag.getValue().getTagCode()); | |||
expertTag.setTagFieldName(ExpertTagEnum.INDUSTRY_SECTOR.getKey()); | |||
expertTag.setTagName(tag.getValue().getTagName()); | |||
professionalInfo.getIndustrySector().add(expertTag); | |||
}); | |||
} | |||
professionalInfo.setTechnicalExpertise(new ArrayList<>()); | |||
String techStr = MapUtil.getStr(w, "技术专长"); | |||
for (String othTag : techStr.split(SEPARATOR)) { | |||
tagMap.entrySet().stream() | |||
.filter(tag -> tag.getValue().getTagName().equals(othTag)) | |||
.forEach(tag -> { | |||
TagFieldInfo expertTag = new TagFieldInfo(); | |||
expertTag.setTagCode(tag.getValue().getTagCode()); | |||
expertTag.setTagFieldName(ExpertTagEnum.TECHNICAL_EXPERTISE.getKey()); | |||
expertTag.setTagName(tag.getValue().getTagName()); | |||
professionalInfo.getTechnicalExpertise().add(expertTag); | |||
}); | |||
} | |||
professionalInfo.setTitleLevel(new ArrayList<>()); | |||
String titleLevel = MapUtil.getStr(w, "*职称级别"); | |||
List<DictionaryDTO> titleLevelDicts = dictionaryCache.listDictByDictType(DictTypeEnum.TITLE_LEVEL.getKey()); | |||
if (!titleLevelDicts.isEmpty()) { | |||
titleLevelDicts.stream() | |||
.filter(dict -> dict.getName().equals(titleLevel)) | |||
.findFirst().ifPresent(dictionary -> { | |||
DictFieldInfoDTO dict = new DictFieldInfoDTO(); | |||
dict.setDictionaryName(dictionary.getName()); | |||
dict.setDictionaryCode(dictionary.getDictionaryCode()); | |||
dict.setDictionaryFieldName(dictionary.getDictionaryType()); | |||
professionalInfo.getTitleLevel().add(dict); | |||
}); | |||
} | |||
professionalInfo.setTechnicalTitles(MapUtil.getStr(w, "技术职称")); | |||
request.setProfessionalInfo(professionalInfo); | |||
ExpertRecommendInfo recommendInfo = new ExpertRecommendInfo(); | |||
recommendInfo.setRecommendedWay(new ArrayList<>()); | |||
request.setRecommendInfo(recommendInfo); | |||
try { | |||
expertController.expertBasicInfoSubmit(request); | |||
} catch (Exception e) { | |||
System.out.println(JSONUtil.toJsonStr(request)); | |||
} | |||
}); | |||
} | |||
} |
@@ -6,12 +6,20 @@ import org.slf4j.LoggerFactory; | |||
import java.nio.charset.StandardCharsets; | |||
import java.security.MessageDigest; | |||
public class Md5Utils { | |||
/** | |||
* <p> | |||
* Md5Utils | |||
* </p> | |||
* | |||
* @author WendyYang | |||
* @since 19:21 2024/2/21 | |||
*/ | |||
public class Md5Util { | |||
private Md5Utils() { | |||
private Md5Util() { | |||
} | |||
private static final Logger LOGGER = LoggerFactory.getLogger(Md5Utils.class); | |||
private static final Logger LOGGER = LoggerFactory.getLogger(Md5Util.class); | |||
public static byte[] md5(String s) { | |||
MessageDigest algorithm; |
@@ -24,7 +24,7 @@ public class RefreshKeyUtil { | |||
// 刷新秘钥 | |||
HttpUtil httpUtil = HttpUtil.getInstance(); | |||
log.info("请求密钥" + appSecret); | |||
String sign = Md5Utils.hash (appKey + appSecret + requestTime); | |||
String sign = Md5Util.hash (appKey + appSecret + requestTime); | |||
String refreshUrl = "http://interface.zjzwfw.gov.cn/gateway/app/refreshTokenByKey.htm"; | |||
log.info(refreshUrl); | |||
Map<String,String> map = new HashMap<>(); | |||
@@ -44,7 +44,7 @@ public class RefreshKeyUtil { | |||
// 刷新秘钥 | |||
HttpUtil httpUtil = HttpUtil.getInstance(); | |||
log.info("刷新密钥" + refreshSecret); | |||
String refreshSign = Md5Utils.hash (appKey + refreshSecret + requestTime); | |||
String refreshSign = Md5Util.hash (appKey + refreshSecret + requestTime); | |||
String refreshUrl = "http://interface.zjzwfw.gov.cn/gateway/app/refreshTokenBySec.htm"; | |||
log.info(refreshUrl); | |||
Map<String,String> map = new HashMap<>(); | |||
@@ -8,11 +8,11 @@ import java.util.List; | |||
/** | |||
* @author liuxinxin | |||
* @date 2022/7/28 下午2:27 | |||
* @since 2022/7/28 下午2:27 | |||
*/ | |||
public class RegionUtils { | |||
public class RegionUtil { | |||
private RegionUtils() { | |||
private RegionUtil() { | |||
} | |||
public static Boolean isValueEquals(ExpertRegionInfo regionInfo1, ExpertRegionInfo regionInfo2) { |
@@ -1,73 +0,0 @@ | |||
package com.hz.pm.api.common.util; | |||
import com.hz.pm.api.todocenter.bean.entity.WorkNoticeInfo; | |||
import com.ningdatech.basic.model.GenericResult; | |||
import com.ningdatech.zwdd.client.ZwddClient; | |||
import lombok.RequiredArgsConstructor; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; | |||
import org.springframework.stereotype.Component; | |||
import java.util.concurrent.CompletableFuture; | |||
import java.util.concurrent.ExecutionException; | |||
import java.util.concurrent.ThreadPoolExecutor; | |||
/** | |||
* 异步发送工作通知工具类 | |||
* | |||
* @author CMM | |||
* @since 2023/02/23 13:50 | |||
*/ | |||
@Slf4j | |||
@Component | |||
@RequiredArgsConstructor | |||
public class SendWorkNoticeUtil { | |||
private final ZwddClient zwddClient; | |||
/** | |||
* 初始化线程池 | |||
*/ | |||
public static final ThreadPoolTaskExecutor EXECUTOR; | |||
static { | |||
EXECUTOR = new ThreadPoolTaskExecutor(); | |||
EXECUTOR.setCorePoolSize(2); | |||
EXECUTOR.setMaxPoolSize(4); | |||
EXECUTOR.setQueueCapacity(200); | |||
EXECUTOR.setKeepAliveSeconds(120); | |||
EXECUTOR.setThreadNamePrefix("sendWorkNotice-"); | |||
EXECUTOR.setWaitForTasksToCompleteOnShutdown(true); | |||
EXECUTOR.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); | |||
EXECUTOR.initialize(); | |||
} | |||
public Boolean sendWorkNotice(WorkNoticeInfo workNoticeInfo) { | |||
// 将发送工作通知交给异步任务Future | |||
String msg = workNoticeInfo.getMsg(); | |||
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> { | |||
// 调用浙政钉的接口发送工作通知 | |||
long startTime = System.currentTimeMillis(); | |||
GenericResult<Void> result = | |||
zwddClient.sendWorkNotice(workNoticeInfo.getReceiverUserId(), workNoticeInfo.getBizMsgId(), msg); | |||
String resultMsg = result.getMsg(); | |||
if ("success".equals(resultMsg)) { | |||
log.info("异步任务执行完成, " + workNoticeInfo.getBizMsgId() + " 当前线程:" + Thread.currentThread().getName()); | |||
long endTime = System.currentTimeMillis(); | |||
log.info("方法执行完成返回,耗时:" + (endTime - startTime)); | |||
} else { | |||
return "发送工作通知失败!"; | |||
} | |||
return "发送工作通知成功!"; | |||
}, EXECUTOR); | |||
try { | |||
future.get(); | |||
} catch (InterruptedException | ExecutionException e) { | |||
log.error("获取异步线程处理结果失败!", e); | |||
Thread.currentThread().interrupt(); | |||
} | |||
return Boolean.TRUE; | |||
} | |||
} |
@@ -0,0 +1,46 @@ | |||
package com.hz.pm.api.common.util; | |||
import cn.hutool.core.collection.CollUtil; | |||
import com.hz.pm.api.expert.model.TagFieldInfo; | |||
import org.apache.commons.collections4.CollectionUtils; | |||
import java.util.Comparator; | |||
import java.util.List; | |||
/** | |||
* @author liuxinxin | |||
* @since 2022/7/28 下午2:14 | |||
*/ | |||
public class TagUtil { | |||
private TagUtil() { | |||
} | |||
private static final Comparator<TagFieldInfo> COMPARATOR = Comparator.comparing(TagFieldInfo::getTagFieldName) | |||
.thenComparing(TagFieldInfo::getTagCode); | |||
public static Boolean isValEq(List<TagFieldInfo> list1, List<TagFieldInfo> list2) { | |||
if (CollUtil.isEmpty(list1) && CollUtil.isEmpty(list2)) { | |||
return true; | |||
} | |||
boolean collStatusNotEq = (CollUtil.isEmpty(list1) && CollUtil.isNotEmpty(list2)) | |||
|| (CollUtil.isEmpty(list2) && CollUtil.isNotEmpty(list1)); | |||
if (collStatusNotEq) { | |||
return false; | |||
} | |||
if (list1.size() != list2.size()) { | |||
return false; | |||
} | |||
list1.sort(COMPARATOR); | |||
list2.sort(COMPARATOR); | |||
for (int i = 0; i < list1.size(); i++) { | |||
if (!StrUtils.trimEquals(list1.get(i).getTagFieldName(), list2.get(i).getTagFieldName()) | |||
|| !StrUtils.trimEquals(list1.get(i).getTagCode(), list2.get(i).getTagCode())) { | |||
return false; | |||
} | |||
} | |||
return true; | |||
} | |||
} |
@@ -1,42 +0,0 @@ | |||
package com.hz.pm.api.common.util; | |||
import com.hz.pm.api.expert.model.TagFieldInfo; | |||
import org.apache.commons.collections4.CollectionUtils; | |||
import java.util.Comparator; | |||
import java.util.List; | |||
/** | |||
* @author liuxinxin | |||
* @date 2022/7/28 下午2:14 | |||
*/ | |||
public class TagUtils { | |||
private TagUtils() { | |||
} | |||
public static Boolean isValueEquals(List<TagFieldInfo> list1, List<TagFieldInfo> list2) { | |||
if (CollectionUtils.isEmpty(list1) && CollectionUtils.isEmpty(list2)) { | |||
return true; | |||
} | |||
boolean collectionStatusNotEquals = (CollectionUtils.isEmpty(list1) && CollectionUtils.isNotEmpty(list2)) | |||
|| (CollectionUtils.isEmpty(list2) && CollectionUtils.isNotEmpty(list1)); | |||
if (collectionStatusNotEquals) { | |||
return false; | |||
} | |||
if (list1.size() != list2.size()) { | |||
return false; | |||
} | |||
list1.sort(Comparator.comparing(TagFieldInfo::getTagFieldName).thenComparing(TagFieldInfo::getTagCode)); | |||
list2.sort(Comparator.comparing(TagFieldInfo::getTagFieldName).thenComparing(TagFieldInfo::getTagCode)); | |||
for (int i = 0; i < list1.size(); i++) { | |||
if (!StrUtils.trimEquals(list1.get(i).getTagFieldName(), list2.get(i).getTagFieldName()) | |||
|| !StrUtils.trimEquals(list1.get(i).getTagCode(), list2.get(i).getTagCode())) { | |||
return false; | |||
} | |||
} | |||
return true; | |||
} | |||
} |
@@ -1,10 +1,10 @@ | |||
package com.hz.pm.api.expert.model; | |||
import com.hz.pm.api.common.util.DictUtils; | |||
import com.hz.pm.api.common.util.RegionUtils; | |||
import com.hz.pm.api.common.util.DictUtil; | |||
import com.hz.pm.api.common.util.RegionUtil; | |||
import com.hz.pm.api.common.util.StrUtils; | |||
import com.hz.pm.api.common.util.TagUtils; | |||
import com.hz.pm.api.common.util.TagUtil; | |||
import com.hz.pm.api.expert.constant.ExpertSensitiveFieldTypeEnum; | |||
import com.hz.pm.api.expert.constant.ExpertUserInfoSensitiveFieldEnum; | |||
import com.hz.pm.api.meta.model.ExpertRegionInfo; | |||
@@ -55,19 +55,19 @@ public class SensitiveModifySegment { | |||
} | |||
case administrative_rank: | |||
case title_level: { | |||
return DictUtils.isValueEquals((List<DictFieldInfoDTO>) this.original | |||
return DictUtil.isValueEquals((List<DictFieldInfoDTO>) this.original | |||
, (List<DictFieldInfoDTO>) this.apply); | |||
} | |||
case good_at: | |||
case technical_expertise: | |||
case industry_sector: | |||
case other: { | |||
return TagUtils.isValueEquals((List<TagFieldInfo>) this.original, (List<TagFieldInfo>) this.apply); | |||
return TagUtil.isValEq((List<TagFieldInfo>) this.original, (List<TagFieldInfo>) this.apply); | |||
} | |||
case expert_region: | |||
return RegionUtils.isValueEquals((ExpertRegionInfo) this.original, (ExpertRegionInfo) this.apply); | |||
return RegionUtil.isValueEquals((ExpertRegionInfo) this.original, (ExpertRegionInfo) this.apply); | |||
case expert_intention_work_region: | |||
return RegionUtils.isValueEquals((List<ExpertRegionInfo>) this.original, (List<ExpertRegionInfo>) this.apply); | |||
return RegionUtil.isValueEquals((List<ExpertRegionInfo>) this.original, (List<ExpertRegionInfo>) this.apply); | |||
default: | |||
return Objects.equals(this.original, this.apply); | |||
} | |||
@@ -2,6 +2,7 @@ package com.hz.pm.api.expert.service.impl; | |||
import cn.hutool.core.bean.BeanUtil; | |||
import cn.hutool.core.collection.CollUtil; | |||
import cn.hutool.core.util.ObjectUtil; | |||
import cn.hutool.core.util.PhoneUtil; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
@@ -9,7 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.hz.pm.api.common.enumeration.BoolDisplayEnum; | |||
import com.hz.pm.api.common.model.ExpertRegionModifyDiffBO; | |||
import com.hz.pm.api.common.util.ExpertRegionInfoUtils; | |||
import com.hz.pm.api.common.util.ExpertRegionInfoUtil; | |||
import com.hz.pm.api.common.util.GzipUtil; | |||
import com.hz.pm.api.expert.assembler.ExpertUserInfoAssembler; | |||
import com.hz.pm.api.expert.constant.ExpertApplyStatusEnum; | |||
@@ -543,7 +544,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService { | |||
SensitiveModifySegment segment = expertIntentionFieldSegmentList.get(0); | |||
List<ExpertRegionInfo> apply = (List<ExpertRegionInfo>) segment.getApply(); | |||
List<ExpertRegionInfo> original = (List<ExpertRegionInfo>) segment.getOriginal(); | |||
ExpertRegionModifyDiffBO expertRegionModifyDiffBO = ExpertRegionInfoUtils.modifyDiff(original, apply); | |||
ExpertRegionModifyDiffBO expertRegionModifyDiffBO = ExpertRegionInfoUtil.diff(original, apply); | |||
List<ExpertRegionInfo> addList = expertRegionModifyDiffBO.getAddList(); | |||
List<ExpertRegionInfo> removeList = expertRegionModifyDiffBO.getRemoveList(); | |||
@@ -571,7 +572,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService { | |||
@Transactional(rollbackFor = Exception.class) | |||
public Long createExpertInfoModifyApply(List<SensitiveModifySegment> expertSensitiveInfoFieldSegmentList | |||
, ExpertUserFullInfo originalExpertUserFullInfo, ModifyApplyExtraInfoDTO modifyApplyExtraInfo) { | |||
expertSensitiveInfoFieldSegmentList = expertSensitiveInfoFieldSegmentList.stream().filter(r -> !r.isValueEquals()).collect(Collectors.toList()); | |||
expertSensitiveInfoFieldSegmentList.removeIf(SensitiveModifySegment::isValueEquals); | |||
String compressedModifyJsonStr = GzipUtil.zip(JSONObject.toJSONString(expertSensitiveInfoFieldSegmentList)); | |||
ExpertMetaApply expertMetaApply = new ExpertMetaApply(); | |||
@@ -629,9 +630,9 @@ public class ExpertInfoServiceImpl implements ExpertInfoService { | |||
/** | |||
* 创建层级变更审核 | |||
* | |||
* @param expertRegionFieldSegmentList | |||
* @param originalExpertUserFullInfo | |||
* @param modifyApplyExtraInfo | |||
* @param expertRegionFieldSegmentList \ | |||
* @param originalExpertUserFullInfo \ | |||
* @param modifyApplyExtraInfo \ | |||
*/ | |||
private Long createExpertRegionModifyApply(List<SensitiveModifySegment> expertRegionFieldSegmentList | |||
, ExpertUserFullInfo originalExpertUserFullInfo, ModifyApplyExtraInfoDTO modifyApplyExtraInfo) { | |||
@@ -1,19 +1,13 @@ | |||
package com.hz.pm.api.irs; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.google.common.collect.Maps; | |||
import com.ningdatech.irs.service.IRefreshTokenService; | |||
import com.hz.pm.api.AppTests; | |||
import com.hz.pm.api.common.util.CryptUtils; | |||
import com.hz.pm.api.common.util.HttpUtil; | |||
import com.hz.pm.api.common.util.Md5Utils; | |||
import com.hz.pm.api.common.util.RefreshKeyUtil; | |||
import com.hz.pm.api.gov.model.req.ProjectPushReq; | |||
import com.hz.pm.api.common.util.Md5Util; | |||
import com.hz.pm.api.irs.model.dto.ForwardDTO; | |||
import lombok.extern.slf4j.Slf4j; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.junit.Test; | |||
import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.http.*; | |||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; | |||
import org.springframework.web.client.RestTemplate; | |||
@@ -87,7 +81,7 @@ public class CoreTest {//extends AppTests | |||
dto.setAppKey(appKey); | |||
dto.setSecret(secret); | |||
dto.setRequestTime(requestTime); | |||
String sign = Md5Utils.hash(appKey + secret + requestTime); | |||
String sign = Md5Util.hash(appKey + secret + requestTime); | |||
dto.setSign(sign); | |||
HttpHeaders headers = new HttpHeaders(); | |||
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); | |||