Commit 6525a32e authored by suhuiguang's avatar suhuiguang

1.人员导入

parent 16df87ff
...@@ -20,7 +20,10 @@ import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil; ...@@ -20,7 +20,10 @@ import com.yeejoin.amos.boot.biz.common.utils.SnowflakeIdUtil;
import com.yeejoin.amos.boot.module.common.api.dto.UserPermissionDto; import com.yeejoin.amos.boot.module.common.api.dto.UserPermissionDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.*; import com.yeejoin.amos.boot.module.tcm.api.dto.*;
import com.yeejoin.amos.boot.module.tcm.api.entity.*; import com.yeejoin.amos.boot.module.tcm.api.entity.*;
import com.yeejoin.amos.boot.module.tcm.api.enums.*; import com.yeejoin.amos.boot.module.tcm.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.boot.module.tcm.api.enums.PersonManageRoleEnum;
import com.yeejoin.amos.boot.module.tcm.api.enums.TwoStipulateGroupEnum;
import com.yeejoin.amos.boot.module.tcm.api.enums.UnitTypeEnum;
import com.yeejoin.amos.boot.module.tcm.api.mapper.TzsBaseIndividualityMapper; import com.yeejoin.amos.boot.module.tcm.api.mapper.TzsBaseIndividualityMapper;
import com.yeejoin.amos.boot.module.tcm.api.mapper.TzsUserEquipMapper; import com.yeejoin.amos.boot.module.tcm.api.mapper.TzsUserEquipMapper;
import com.yeejoin.amos.boot.module.tcm.api.mapper.TzsUserInfoMapper; import com.yeejoin.amos.boot.module.tcm.api.mapper.TzsUserInfoMapper;
...@@ -96,7 +99,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -96,7 +99,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
private TzsUserPermissionServiceImpl tzsUserPermissionServiceImpl; private TzsUserPermissionServiceImpl tzsUserPermissionServiceImpl;
@Autowired @Autowired
private RegUnitInfoServiceImpl regUnitInfoService; private RegUnitInfoServiceImpl regUnitInfoService;
private static Map<String, String> statusColorMap = new HashMap<>(); private static Map<String, String> statusColorMap = new HashMap<>();
...@@ -147,8 +150,8 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -147,8 +150,8 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
dto.setMenuTypeUnderPost(menuMap.get(dto.getMenuType())); dto.setMenuTypeUnderPost(menuMap.get(dto.getMenuType()));
// 其他人员管理 包含 普通员工、安全管理员、安改维负责人 // 其他人员管理 包含 普通员工、安全管理员、安改维负责人
// 上面menuMap中的其他人员只是在新增人员时为页面赋默认值 // 上面menuMap中的其他人员只是在新增人员时为页面赋默认值
if ("qtry".equals(dto.getMenuType())){ if ("qtry".equals(dto.getMenuType())) {
dto.setMenuTypeUnderPost(Arrays.asList("6546","6617","6553")); dto.setMenuTypeUnderPost(Arrays.asList("6546", "6617", "6553"));
} }
Page<TzsUserInfoDto> tzsUserInfoDtoPage = tzsUserInfoMapper.selectPageMessage(page, dto); Page<TzsUserInfoDto> tzsUserInfoDtoPage = tzsUserInfoMapper.selectPageMessage(page, dto);
tzsUserInfoDtoPage.getRecords().forEach(item -> { tzsUserInfoDtoPage.getRecords().forEach(item -> {
...@@ -970,7 +973,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -970,7 +973,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
* 人员列表列表数据导出 * 人员列表列表数据导出
* *
* @param response 响应 * @param response 响应
* @param ids 数据id * @param ids 数据id
*/ */
@Override @Override
public void userInfoExport(HttpServletResponse response, List<String> ids) { public void userInfoExport(HttpServletResponse response, List<String> ids) {
...@@ -981,22 +984,48 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -981,22 +984,48 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
private List<String> checkFieldIsValid(List<UserImportDto> userItems) { private List<String> checkFieldIsValid(List<UserImportDto> userItems) {
List<String> errors = new ArrayList<>(); List<String> errors = new ArrayList<>();
// 1.必输校验 // 1.必输校验
for(int i = 0; i< userItems.size(); i++){ for (int i = 0; i < userItems.size(); i++) {
UserImportDto userImportDto = userItems.get(i); UserImportDto userImportDto = userItems.get(i);
Set<ConstraintViolation<UserImportDto>> violations = validator.validate(userImportDto); Set<ConstraintViolation<UserImportDto>> violations = validator.validate(userImportDto);
for(ConstraintViolation<UserImportDto> violation : violations){ for (ConstraintViolation<UserImportDto> violation : violations) {
errors.add("第" + i + "行" + violation.getMessage()); errors.add("第" + i + "行" + violation.getMessage());
} }
} }
if(!errors.isEmpty()){ if (!errors.isEmpty()) {
return errors; return errors;
} }
// 2.手机号重复检验,手机号全局唯一,不同单位下的手机号不能相同 // 2.手机号重复检验,手机号全局唯一,不同单位下的手机号不能相同 todo 新写判断逻辑
Map<String, Long> phoneCheckRepeatCount = userItems.stream().collect(Collectors.groupingBy((v)-> v.getPhone()+"_" + v.getUnitCode(), Collectors.counting())); Map<String, Set<String>> phoneCheckRepeatCount = new HashMap<>();
phoneCheckRepeatCount.forEach(((k,v)->{ userItems.forEach(v -> {
if(v > 1){ if (phoneCheckRepeatCount.containsKey(v.getPhone())) {
phoneCheckRepeatCount.get(v.getPhone()).add(v.getUnitCode());
} else {
Set<String> set = new HashSet<>();
set.add(v.getUnitCode());
phoneCheckRepeatCount.put(v.getPhone(), set);
}
});
phoneCheckRepeatCount.forEach(((k, v) -> {
if (v.size() > 1) {
String phone = k.split("_")[0];
errors.add(String.format("手机号%s重复%d次,请检查后进行上传!", phone, v));
}
}));
// 2.手机号重复检验,手机号全局唯一,不同单位下的手机号不能相同 todo 新写判断逻辑
Map<String, Set<String>> certNoCheckRepeatCount = new HashMap<>();
userItems.forEach(v -> {
if (certNoCheckRepeatCount.containsKey(v.getPhone())) {
certNoCheckRepeatCount.get(v.getPhone()).add(v.getCertificateNum());
} else {
Set<String> set = new HashSet<>();
set.add(v.getCertificateNum());
certNoCheckRepeatCount.put(v.getPhone(), set);
}
});
certNoCheckRepeatCount.forEach(((k, v) -> {
if (v.size() > 1) {
String phone = k.split("_")[0]; String phone = k.split("_")[0];
errors.add(String.format("手机号%s重复%d次,请检查后进行上传!", phone , v)); errors.add(String.format("存在手机号%s相同,但是证件号码不一样的数据:证件号码:%s,请检查后进行上传!", phone, StringUtils.join(v, ",")));
} }
})); }));
return errors; return errors;
...@@ -1010,7 +1039,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -1010,7 +1039,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
// 1.数据检验 // 1.数据检验
List<String> errors = checkFieldIsValid(userItems); List<String> errors = checkFieldIsValid(userItems);
// 1.1存在检验不通过的数据则进行提示,不在向下写入库 // 1.1存在检验不通过的数据则进行提示,不在向下写入库
if(!errors.isEmpty()){ if (!errors.isEmpty()) {
return ResponseHelper.buildResponse(errors); return ResponseHelper.buildResponse(errors);
} }
// 2.数据处理 // 2.数据处理
...@@ -1031,15 +1060,15 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -1031,15 +1060,15 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
private void createAmosUser(Map<Long, TzsUserInfo> userInfoMap, Set<UserImportDto> userSet) { private void createAmosUser(Map<Long, TzsUserInfo> userInfoMap, Set<UserImportDto> userSet) {
// 公司缓存 // 公司缓存
Map<String, CompanyModel> companyCodeCompanyMap = new ConcurrentHashMap<>(); Map<String, CompanyModel> companyCodeCompanyMap = new ConcurrentHashMap<>();
Map<Long, UserImportDto> userSeqImportDataMap = userSet.stream().collect(Collectors.toMap(UserImportDto::getSeq, Function.identity())) Map<Long, UserImportDto> userSeqImportDataMap = userSet.stream().collect(Collectors.toMap(UserImportDto::getSeq, Function.identity()))
userInfoMap.forEach((k,v)->{ userInfoMap.forEach((k, v) -> {
createOneUser(v, userSeqImportDataMap.get(k), companyCodeCompanyMap); createOneUser(v, userSeqImportDataMap.get(k), companyCodeCompanyMap);
}); });
} }
private Map<Long, TzsUserInfo> saveImportData2Db(Set<UserImportDto> userSet) { private Map<Long, TzsUserInfo> saveImportData2Db(Set<UserImportDto> userSet) {
List<TzsUserInfo> userInfos = userSet.parallelStream().map(dto->{ List<TzsUserInfo> userInfos = userSet.parallelStream().map(dto -> {
TzsUserInfo userInfo = new TzsUserInfo(); TzsUserInfo userInfo = new TzsUserInfo();
userInfo.setRecUserId(RequestContext.getExeUserId()); userInfo.setRecUserId(RequestContext.getExeUserId());
userInfo.setRecDate(new Date()); userInfo.setRecDate(new Date());
...@@ -1067,15 +1096,15 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -1067,15 +1096,15 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
return userInfo; return userInfo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
this.saveOrUpdateBatch(userInfos); this.saveOrUpdateBatch(userInfos);
return userInfos.stream().collect(Collectors.toMap(BaseEntity::getSequenceNbr,Function.identity())); return userInfos.stream().collect(Collectors.toMap(BaseEntity::getSequenceNbr, Function.identity()));
} }
private void buildMergeFields(List<UserImportDto> userItems, Set<UserImportDto> userSet) { private void buildMergeFields(List<UserImportDto> userItems, Set<UserImportDto> userSet) {
for (UserImportDto userImportDto : userSet) { for (UserImportDto userImportDto : userSet) {
List<UserImportDto> distinctData = userItems.stream().filter(u->u.getPhone().equals(userImportDto.getPhone())).collect(Collectors.toList()); List<UserImportDto> distinctData = userItems.stream().filter(u -> u.getPhone().equals(userImportDto.getPhone())).collect(Collectors.toList());
for (UserImportDto user : distinctData) { for (UserImportDto user : distinctData) {
Map<String, Set<String>> map = userImportDto.getUnitTypePostMap(); Map<String, Set<String>> map = userImportDto.getUnitTypePostMap();
if(map == null){ if (map == null) {
map = new HashMap<>(); map = new HashMap<>();
map.put(user.getUnitType(), Sets.newHashSet(user.getPost())); map.put(user.getUnitType(), Sets.newHashSet(user.getPost()));
} else { } else {
...@@ -1089,7 +1118,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -1089,7 +1118,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
public void createOneUser(TzsUserInfo tzsUserInfo, UserImportDto userImportDto, Map<String, CompanyModel> companyCodeCompanyMap) { public void createOneUser(TzsUserInfo tzsUserInfo, UserImportDto userImportDto, Map<String, CompanyModel> companyCodeCompanyMap) {
CompanyModel companyModel; CompanyModel companyModel;
if(companyCodeCompanyMap.get(tzsUserInfo.getUnitCode()) != null){ if (companyCodeCompanyMap.get(tzsUserInfo.getUnitCode()) != null) {
companyModel = companyCodeCompanyMap.get(tzsUserInfo.getUnitCode()); companyModel = companyCodeCompanyMap.get(tzsUserInfo.getUnitCode());
} else { } else {
companyModel = baseEnterpriseInfoService.getBaseMapper().getOneByCompanyCode(tzsUserInfo.getUnitCode()); companyModel = baseEnterpriseInfoService.getBaseMapper().getOneByCompanyCode(tzsUserInfo.getUnitCode());
...@@ -1104,7 +1133,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI ...@@ -1104,7 +1133,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
Set<String> appCodesSet = new HashSet<>(); Set<String> appCodesSet = new HashSet<>();
List<DataDictionary> unitTypeList = regUnitInfoService.setAndGetUnitTypeList(); List<DataDictionary> unitTypeList = regUnitInfoService.setAndGetUnitTypeList();
Map<String, DataDictionary> dataDictionaryMap = unitTypeList.stream().collect(Collectors.toMap(DataDictionary::getCode, Function.identity(), (k1, k2) -> k1)); Map<String, DataDictionary> dataDictionaryMap = unitTypeList.stream().collect(Collectors.toMap(DataDictionary::getCode, Function.identity(), (k1, k2) -> k1));
userImportDto.getUnitTypePostMap().forEach((k,v)->{ userImportDto.getUnitTypePostMap().forEach((k, v) -> {
DataDictionary unitType = dataDictionaryMap.get(k); DataDictionary unitType = dataDictionaryMap.get(k);
String appCode = unitType.getTypeDesc() != null ? unitType.getTypeDesc() : ""; String appCode = unitType.getTypeDesc() != null ? unitType.getTypeDesc() : "";
String[] appCodes = appCode.split(","); String[] appCodes = appCode.split(",");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment