@@ -10,9 +10,9 @@ import java.util.List; | |||||
* @author liuxinxin | * @author liuxinxin | ||||
* @date 2022/7/28 下午2:14 | * @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) { | 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.nio.charset.StandardCharsets; | ||||
import java.security.MessageDigest; | 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) { | public static byte[] md5(String s) { | ||||
MessageDigest algorithm; | MessageDigest algorithm; |
@@ -24,7 +24,7 @@ public class RefreshKeyUtil { | |||||
// 刷新秘钥 | // 刷新秘钥 | ||||
HttpUtil httpUtil = HttpUtil.getInstance(); | HttpUtil httpUtil = HttpUtil.getInstance(); | ||||
log.info("请求密钥" + appSecret); | 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"; | String refreshUrl = "http://interface.zjzwfw.gov.cn/gateway/app/refreshTokenByKey.htm"; | ||||
log.info(refreshUrl); | log.info(refreshUrl); | ||||
Map<String,String> map = new HashMap<>(); | Map<String,String> map = new HashMap<>(); | ||||
@@ -44,7 +44,7 @@ public class RefreshKeyUtil { | |||||
// 刷新秘钥 | // 刷新秘钥 | ||||
HttpUtil httpUtil = HttpUtil.getInstance(); | HttpUtil httpUtil = HttpUtil.getInstance(); | ||||
log.info("刷新密钥" + refreshSecret); | 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"; | String refreshUrl = "http://interface.zjzwfw.gov.cn/gateway/app/refreshTokenBySec.htm"; | ||||
log.info(refreshUrl); | log.info(refreshUrl); | ||||
Map<String,String> map = new HashMap<>(); | Map<String,String> map = new HashMap<>(); | ||||
@@ -8,11 +8,11 @@ import java.util.List; | |||||
/** | /** | ||||
* @author liuxinxin | * @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) { | 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; | 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.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.ExpertSensitiveFieldTypeEnum; | ||||
import com.hz.pm.api.expert.constant.ExpertUserInfoSensitiveFieldEnum; | import com.hz.pm.api.expert.constant.ExpertUserInfoSensitiveFieldEnum; | ||||
import com.hz.pm.api.meta.model.ExpertRegionInfo; | import com.hz.pm.api.meta.model.ExpertRegionInfo; | ||||
@@ -55,19 +55,19 @@ public class SensitiveModifySegment { | |||||
} | } | ||||
case administrative_rank: | case administrative_rank: | ||||
case title_level: { | case title_level: { | ||||
return DictUtils.isValueEquals((List<DictFieldInfoDTO>) this.original | |||||
return DictUtil.isValueEquals((List<DictFieldInfoDTO>) this.original | |||||
, (List<DictFieldInfoDTO>) this.apply); | , (List<DictFieldInfoDTO>) this.apply); | ||||
} | } | ||||
case good_at: | case good_at: | ||||
case technical_expertise: | case technical_expertise: | ||||
case industry_sector: | case industry_sector: | ||||
case other: { | 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: | 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: | 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: | default: | ||||
return Objects.equals(this.original, this.apply); | 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.bean.BeanUtil; | ||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import cn.hutool.core.util.ObjectUtil; | |||||
import cn.hutool.core.util.PhoneUtil; | import cn.hutool.core.util.PhoneUtil; | ||||
import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 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.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.hz.pm.api.common.enumeration.BoolDisplayEnum; | import com.hz.pm.api.common.enumeration.BoolDisplayEnum; | ||||
import com.hz.pm.api.common.model.ExpertRegionModifyDiffBO; | 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.common.util.GzipUtil; | ||||
import com.hz.pm.api.expert.assembler.ExpertUserInfoAssembler; | import com.hz.pm.api.expert.assembler.ExpertUserInfoAssembler; | ||||
import com.hz.pm.api.expert.constant.ExpertApplyStatusEnum; | import com.hz.pm.api.expert.constant.ExpertApplyStatusEnum; | ||||
@@ -543,7 +544,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService { | |||||
SensitiveModifySegment segment = expertIntentionFieldSegmentList.get(0); | SensitiveModifySegment segment = expertIntentionFieldSegmentList.get(0); | ||||
List<ExpertRegionInfo> apply = (List<ExpertRegionInfo>) segment.getApply(); | List<ExpertRegionInfo> apply = (List<ExpertRegionInfo>) segment.getApply(); | ||||
List<ExpertRegionInfo> original = (List<ExpertRegionInfo>) segment.getOriginal(); | 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> addList = expertRegionModifyDiffBO.getAddList(); | ||||
List<ExpertRegionInfo> removeList = expertRegionModifyDiffBO.getRemoveList(); | List<ExpertRegionInfo> removeList = expertRegionModifyDiffBO.getRemoveList(); | ||||
@@ -571,7 +572,7 @@ public class ExpertInfoServiceImpl implements ExpertInfoService { | |||||
@Transactional(rollbackFor = Exception.class) | @Transactional(rollbackFor = Exception.class) | ||||
public Long createExpertInfoModifyApply(List<SensitiveModifySegment> expertSensitiveInfoFieldSegmentList | public Long createExpertInfoModifyApply(List<SensitiveModifySegment> expertSensitiveInfoFieldSegmentList | ||||
, ExpertUserFullInfo originalExpertUserFullInfo, ModifyApplyExtraInfoDTO modifyApplyExtraInfo) { | , 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)); | String compressedModifyJsonStr = GzipUtil.zip(JSONObject.toJSONString(expertSensitiveInfoFieldSegmentList)); | ||||
ExpertMetaApply expertMetaApply = new ExpertMetaApply(); | 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 | private Long createExpertRegionModifyApply(List<SensitiveModifySegment> expertRegionFieldSegmentList | ||||
, ExpertUserFullInfo originalExpertUserFullInfo, ModifyApplyExtraInfoDTO modifyApplyExtraInfo) { | , ExpertUserFullInfo originalExpertUserFullInfo, ModifyApplyExtraInfoDTO modifyApplyExtraInfo) { | ||||
@@ -1,19 +1,13 @@ | |||||
package com.hz.pm.api.irs; | package com.hz.pm.api.irs; | ||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.google.common.collect.Maps; | import com.google.common.collect.Maps; | ||||
import com.ningdatech.irs.service.IRefreshTokenService; | 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.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 com.hz.pm.api.irs.model.dto.ForwardDTO; | ||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.http.*; | import org.springframework.http.*; | ||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; | import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; | ||||
import org.springframework.web.client.RestTemplate; | import org.springframework.web.client.RestTemplate; | ||||
@@ -87,7 +81,7 @@ public class CoreTest {//extends AppTests | |||||
dto.setAppKey(appKey); | dto.setAppKey(appKey); | ||||
dto.setSecret(secret); | dto.setSecret(secret); | ||||
dto.setRequestTime(requestTime); | dto.setRequestTime(requestTime); | ||||
String sign = Md5Utils.hash(appKey + secret + requestTime); | |||||
String sign = Md5Util.hash(appKey + secret + requestTime); | |||||
dto.setSign(sign); | dto.setSign(sign); | ||||
HttpHeaders headers = new HttpHeaders(); | HttpHeaders headers = new HttpHeaders(); | ||||
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); | MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); | ||||