Commit 16df87ff authored by suhuiguang's avatar suhuiguang

1.人员导入

parent 64ee542e
package com.yeejoin.amos.boot.module.tcm.api.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.util.HashMap;
import java.util.Map;
public class CertificateTypeConverter implements Converter<String> {
private static final Map<String, String> CODE_MAP = new HashMap<>();
static {
CODE_MAP.put("身份证", "344");
CODE_MAP.put("军官证", "345");
}
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
String cellDataStr = cellData.getStringValue();
return CODE_MAP.getOrDefault(cellDataStr, "344");
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
}
package com.yeejoin.amos.boot.module.tcm.api.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.util.HashMap;
import java.util.Map;
public class EducationConverter implements Converter<String> {
private static final Map<String,String> CODE_MAP = new HashMap<>();
static {
CODE_MAP.put("其他","6545");
CODE_MAP.put("专科","6544");
CODE_MAP.put("本科","6543");
CODE_MAP.put("硕士研究生","6542");
CODE_MAP.put("博士研究生","6541");
}
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
String cellDataStr = cellData.getStringValue();
return CODE_MAP.get(cellDataStr);
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
}
package com.yeejoin.amos.boot.module.tcm.api.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.util.HashMap;
import java.util.Map;
public class EquipTypeConverter implements Converter<String> {
private static final Map<String, String> CODE_MAP = new HashMap<>();
static {
CODE_MAP.put("锅炉", "1000");
CODE_MAP.put("压力容器", "2000");
CODE_MAP.put("电梯", "3000");
CODE_MAP.put("起重机械", "4000");
CODE_MAP.put("场(厂)内专用机动车辆", "5000");
CODE_MAP.put("大型游乐设施", "6000");
CODE_MAP.put("压力管道", "8000");
CODE_MAP.put("客运索道", "9000");
}
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
String cellDataStr = cellData.getStringValue();
return CODE_MAP.get(cellDataStr);
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
}
package com.yeejoin.amos.boot.module.tcm.api.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.util.HashMap;
import java.util.Map;
public class GenderConverter implements Converter<String> {
private static final Map<String,String> CODE_MAP = new HashMap<>();
static {
CODE_MAP.put("男","1");
CODE_MAP.put("女","0");
}
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
return CODE_MAP.get(cellData.getStringValue());
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
return null;
}
}
package com.yeejoin.amos.boot.module.tcm.api.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.util.HashMap;
import java.util.Map;
public class PostTypeConverter implements Converter<String> {
private static final Map<String, String> CODE_MAP = new HashMap<>();
static {
CODE_MAP.put("安全员", "6549");
CODE_MAP.put("主要负责人", "6548");
CODE_MAP.put("安全总监", "6547");
CODE_MAP.put("普通员工", "6546");
CODE_MAP.put("作业人员", "6552");
CODE_MAP.put("质量安全员", "6551");
CODE_MAP.put("质量安全总监", "6550");
CODE_MAP.put("业务办理人员", "6616");
CODE_MAP.put("安改维负责人", "6553");
CODE_MAP.put("安全管理员", "6617");
CODE_MAP.put("维保人员", "6618");
CODE_MAP.put("检验人员", "66151");
CODE_MAP.put("检测人员", "66152");
CODE_MAP.put("质量保证体系人员", "6619");
}
@Override
public Class supportJavaTypeKey() {
return String.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
String cellDataStr = cellData.getStringValue();
return CODE_MAP.getOrDefault(cellDataStr, "6546");
}
@Override
public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
return null;
}
}
package com.yeejoin.amos.boot.module.tcm.api.customer;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomerEquipTypeValidator.class)
public @interface CustomerEquipTypeCheck {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
package com.yeejoin.amos.boot.module.tcm.api.customer;
import com.yeejoin.amos.boot.module.tcm.api.dto.UserImportDto;
import org.apache.commons.lang3.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CustomerEquipTypeValidator implements ConstraintValidator<CustomerEquipTypeCheck, UserImportDto> {
/**
* 需要填写设备类型的单位类型(字符串汉字数据库如此)及人员类型
*/
private static final Map<String, List<String>> NEED_EQUIP_TYPE_UNIT_TYPE = new HashMap<>();
static {
// ("安全总监", "6547");
// ("安全员", "6549");
// ("质量安全总监", "6550");
// ("质量安全员", "6551");
NEED_EQUIP_TYPE_UNIT_TYPE.put("使用单位", Arrays.asList("6547", "6549"));
NEED_EQUIP_TYPE_UNIT_TYPE.put("安装改造维修单位", Arrays.asList("6550", "6551"));
}
@Override
public boolean isValid(UserImportDto userImportDto, ConstraintValidatorContext context) {
if (NEED_EQUIP_TYPE_UNIT_TYPE.containsKey(userImportDto.getUnitType())) {
List<String> postTypes = NEED_EQUIP_TYPE_UNIT_TYPE.get(userImportDto.getUnitType());
// 单位类型是指定的且设备类型未空时校验不通过
return !postTypes.contains(userImportDto.getPost()) || !StringUtils.isEmpty(userImportDto.getEquipType());
} else {
return true;
}
}
}
package com.yeejoin.amos.boot.module.tcm.api.dto;
import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.yeejoin.amos.boot.module.tcm.api.converter.*;
import com.yeejoin.amos.boot.module.tcm.api.customer.CustomerEquipTypeCheck;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
@Data
public class UserImportDto {
@NotBlank(message = "单位名称不能为空")
@ExcelProperty(value = "单位名称")
private String unitName;
@NotBlank(message = "单位统一信用代码不能为空")
@ExcelProperty(value = "单位统一信用代码")
private String unitCode;
@NotBlank(message = "单位类型不能为空")
@ExcelProperty(value = "单位类型")
private String unitType;
@NotBlank(message = "姓名不能为空")
@ExcelProperty(value = "姓名")
private String name;
@NotBlank(message = "联系电话不能为空")
@ExcelProperty(value = "联系电话")
private String phone;
@NotBlank(message = "证件类型不能为空")
@ExcelProperty(value = "证件类型", converter = CertificateTypeConverter.class)
private String certificateType;
@NotBlank(message = "证件编号不能为空")
@ExcelProperty(value = "证件编号")
private String certificateNum;
@NotBlank(message = "人员类型不能为空")
@ExcelProperty(value = "人员类型", converter = PostTypeConverter.class)
private String post;
@CustomerEquipTypeCheck(message = "设备类型不能为空")
@ExcelProperty(value = "设备类型", converter = EquipTypeConverter.class)
private String equipType;
@ExcelProperty(value = "性别", converter = GenderConverter.class)
private String gender;
@ExcelProperty(value = "出生日期")
@DateTimeFormat("yyyy-MM-dd")
private Date birthday;
@ExcelProperty(value = "学历", converter = EducationConverter.class)
private String education;
@ExcelProperty(value = "住址")
private String address;
@ExcelProperty(value = "邮箱")
private String email;
@ExcelProperty(value = "职称")
private String jobTitle;
@ExcelProperty(value = "专业")
private String speciality;
/**
* 存放单位类型:List人员类型的对象
*/
@ExcelIgnore
private Map<String, Set<String>> unitTypePostMap;
@ExcelProperty
private Long seq;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserImportDto that = (UserImportDto) o;
return Objects.equals(phone, that.phone);
}
@Override
public int hashCode() {
return Objects.hash(phone);
}
}
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.tcm.api.dto.EquEnterDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -43,6 +44,9 @@ public interface TzBaseEnterpriseInfoMapper extends BaseMapper<TzBaseEnterpriseI
TzBaseEnterpriseInfo selectByUseUnit(String useUnit);
CompanyModel getOneByCompanyCode(String companyCode);
IPage<TzBaseEnterpriseInfoDto> page(Page<TzBaseEnterpriseInfoDto> page, TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto);
IPage<TzBaseEnterpriseInfoDto> pageList(Page<TzBaseEnterpriseInfoDto> page, TzBaseEnterpriseInfoDto tzBaseEnterpriseInfoDto, List orgCodeList);
......
......@@ -9,6 +9,8 @@ import com.yeejoin.amos.boot.module.tcm.api.dto.TzsEquipListDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsUserInfoDto;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzsUserQualifications;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
......@@ -62,4 +64,11 @@ public interface ITzsUserInfoService extends IService<TzsUserInfo> {
TzIndividualityDto updateIndividualityInfo(TzIndividualityDto individualityDto);
void userInfoExport(HttpServletResponse response, List<String> ids);
/**
* 批量导入人员
* @param file 导入的文件
* @return 失败时返回失败信息,提供时返回success
*/
ResponseModel<?> importUserBatch(MultipartFile file);
}
......@@ -175,5 +175,8 @@
<select id="getProblemInfoBySourceId" resultType="java.util.Map">
select * from tzs_safety_problem_tracing where source_id = #{sourceId} order by rec_date desc limit 1
</select>
<select id="getOneByCompanyCode" resultType="com.yeejoin.amos.feign.privilege.model.CompanyModel">
select sequence_nbr, org_code, company_code, company_name, company_type from privilege_company where company_code = #{companyCode} and is_deleted = false limit 1
</select>
</mapper>
package com.yeejoin.amos.boot.module.tcm.biz.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
@Configuration
public class ValidationConfig {
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
return validatorFactory.getValidator();
}
}
......@@ -29,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
......@@ -36,6 +37,7 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
......@@ -351,4 +353,11 @@ public class TzsUserInfoController extends BaseController {
List<JGUserInfoVo> exportData = JSON.parseArray(JSON.toJSONString(userPermissionDtos.getRecords()), JGUserInfoVo.class);
ExcelUtil.createTemplate(response, "人员列表数据", "人员列表", exportData, JGUserInfoVo.class, null, false);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/import")
@ApiOperation(value = "人员导入",httpMethod = "POST")
public ResponseModel<?> importUser(@RequestBody MultipartFile file) {
return tzsUserInfoService.importUserBatch(file);
}
}
......@@ -7,48 +7,56 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Sets;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.excel.ExcelUtil;
import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
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.tcm.api.dto.*;
import com.yeejoin.amos.boot.module.tcm.api.entity.*;
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.enums.*;
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.TzsUserInfoMapper;
import com.yeejoin.amos.boot.module.tcm.api.service.ITzsUserInfoService;
import com.yeejoin.amos.boot.module.tcm.api.vo.TzsUserInfoVo;
import com.yeejoin.amos.boot.module.tcm.api.vo.UserInfoVo;
import com.yeejoin.amos.boot.module.tcm.flc.biz.service.impl.RegUnitInfoServiceImpl;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.component.robot.AmosRequestContext;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.privilege.model.GroupModel;
import com.yeejoin.amos.feign.privilege.model.RoleModel;
import com.yeejoin.amos.feign.privilege.util.DesUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
......@@ -75,8 +83,6 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
@Autowired
TzsBaseIndividualityMapper individualityMapper;
@Autowired
AmosRequestContext amosRequestContext;
@Autowired
private TzsUserInfoMapper tzsUserInfoMapper;
@Autowired
private TzsUserEquipMapper tzsUserEquipMapper;
......@@ -89,6 +95,9 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
@Autowired
private TzsUserPermissionServiceImpl tzsUserPermissionServiceImpl;
@Autowired
private RegUnitInfoServiceImpl regUnitInfoService;
private static Map<String, String> statusColorMap = new HashMap<>();
static {
......@@ -98,6 +107,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
statusColorMap.put("正常", "#18B100");
}
private static Map<String, List<String>> menuMap = new HashMap<>();
static {
......@@ -125,6 +135,13 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
menuMap.put("qtry", Collections.singletonList("6546"));
}
@Autowired
private Validator validator;
@Autowired
SnowflakeIdUtil sequence;
@Override
public Page<TzsUserInfoDto> page(TzsUserInfoDto dto, Page<TzsUserInfoDto> page) {
dto.setMenuTypeUnderPost(menuMap.get(dto.getMenuType()));
......@@ -961,6 +978,219 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
ExcelUtil.createTemplate(response, "人员列表数据", "人员列表", exportData, UserInfoVo.class, null, false);
}
private List<String> checkFieldIsValid(List<UserImportDto> userItems) {
List<String> errors = new ArrayList<>();
// 1.必输校验
for(int i = 0; i< userItems.size(); i++){
UserImportDto userImportDto = userItems.get(i);
Set<ConstraintViolation<UserImportDto>> violations = validator.validate(userImportDto);
for(ConstraintViolation<UserImportDto> violation : violations){
errors.add("第" + i + "行" + violation.getMessage());
}
}
if(!errors.isEmpty()){
return errors;
}
// 2.手机号重复检验,手机号全局唯一,不同单位下的手机号不能相同
Map<String, Long> phoneCheckRepeatCount = userItems.stream().collect(Collectors.groupingBy((v)-> v.getPhone()+"_" + v.getUnitCode(), Collectors.counting()));
phoneCheckRepeatCount.forEach(((k,v)->{
if(v > 1){
String phone = k.split("_")[0];
errors.add(String.format("手机号%s重复%d次,请检查后进行上传!", phone , v));
}
}));
return errors;
}
@Override
@Transactional(rollbackFor = Exception.class)
public ResponseModel<?> importUserBatch(MultipartFile multipartFile) {
try {
List<UserImportDto> userItems = ExcelUtil.readFirstSheetExcel(multipartFile, UserImportDto.class, 2);
// 1.数据检验
List<String> errors = checkFieldIsValid(userItems);
// 1.1存在检验不通过的数据则进行提示,不在向下写入库
if(!errors.isEmpty()){
return ResponseHelper.buildResponse(errors);
}
// 2.数据处理
// 2.1数据合并:按照手机号数据去重合并
Set<UserImportDto> userSet = new HashSet<>(userItems);
// 2.2合并构造单位类型+人员类型,处理一个人有多个单位类型+多个人员类型
this.buildMergeFields(userItems, userSet);
// 3.数据入库
// 3.1业务库入库
Map<Long, TzsUserInfo> userInfoMap = this.saveImportData2Db(userSet);
// 3.2部分类型用户平台创建人员
this.createAmosUser(userInfoMap, userSet);
} catch (Exception e) {
throw new RuntimeException(e);
}
return ResponseHelper.buildResponse("succese");
}
private void createAmosUser(Map<Long, TzsUserInfo> userInfoMap, Set<UserImportDto> userSet) {
// 公司缓存
Map<String, CompanyModel> companyCodeCompanyMap = new ConcurrentHashMap<>();
Map<Long, UserImportDto> userSeqImportDataMap = userSet.stream().collect(Collectors.toMap(UserImportDto::getSeq, Function.identity()))
userInfoMap.forEach((k,v)->{
createOneUser(v, userSeqImportDataMap.get(k), companyCodeCompanyMap);
});
}
private Map<Long, TzsUserInfo> saveImportData2Db(Set<UserImportDto> userSet) {
List<TzsUserInfo> userInfos = userSet.parallelStream().map(dto->{
TzsUserInfo userInfo = new TzsUserInfo();
userInfo.setRecUserId(RequestContext.getExeUserId());
userInfo.setRecDate(new Date());
userInfo.setName(dto.getName());
userInfo.setSequenceNbr(dto.getSeq());
userInfo.setGender(dto.getGender());
userInfo.setEmail(dto.getEmail());
userInfo.setPhone(dto.getPhone());
userInfo.setAddress(dto.getAddress());
// TODO 无资质导入,默认post = newPost
userInfo.setPost(JSON.toJSONString(dto.getPost().split(",")));
// TODO 无资质导入,默认post = newPost
userInfo.setNewPost(JSON.toJSONString(dto.getPost().split(",")));
String postName = this.setPostName(userInfo.getNewPost());
userInfo.setPostName(postName);
userInfo.setBirthday(dto.getBirthday());
userInfo.setEducation(dto.getEducation());
userInfo.setSpeciality(dto.getSpeciality());
userInfo.setUnitName(dto.getUnitName());
userInfo.setIsDelete(false);
userInfo.setLockStatus(UNLOCK);
userInfo.setUnitCode(dto.getUnitCode());
userInfo.setEquipType(dto.getEquipType());
userInfo.setJobTitle(dto.getJobTitle());
return userInfo;
}).collect(Collectors.toList());
this.saveOrUpdateBatch(userInfos);
return userInfos.stream().collect(Collectors.toMap(BaseEntity::getSequenceNbr,Function.identity()));
}
private void buildMergeFields(List<UserImportDto> userItems, Set<UserImportDto> userSet) {
for (UserImportDto userImportDto : userSet) {
List<UserImportDto> distinctData = userItems.stream().filter(u->u.getPhone().equals(userImportDto.getPhone())).collect(Collectors.toList());
for (UserImportDto user : distinctData) {
Map<String, Set<String>> map = userImportDto.getUnitTypePostMap();
if(map == null){
map = new HashMap<>();
map.put(user.getUnitType(), Sets.newHashSet(user.getPost()));
} else {
map.get(user.getUnitType()).add(user.getPost());
}
}
userImportDto.setSeq(sequence.nextId());
}
}
public void createOneUser(TzsUserInfo tzsUserInfo, UserImportDto userImportDto, Map<String, CompanyModel> companyCodeCompanyMap) {
CompanyModel companyModel;
if(companyCodeCompanyMap.get(tzsUserInfo.getUnitCode()) != null){
companyModel = companyCodeCompanyMap.get(tzsUserInfo.getUnitCode());
} else {
companyModel = baseEnterpriseInfoService.getBaseMapper().getOneByCompanyCode(tzsUserInfo.getUnitCode());
companyCodeCompanyMap.put(tzsUserInfo.getUnitCode(), companyModel);
}
String companyType = companyModel.getCompanyType();
// 默认的密码
String passwd = DesUtil.encode("a_" + tzsUserInfo.getPhone(), "qaz");
// 默认都有:普通用户对应的角色、字在企业人员用户组下
String roles = "1554";
String roleGroupCode = "6596";
Set<String> appCodesSet = new HashSet<>();
List<DataDictionary> unitTypeList = regUnitInfoService.setAndGetUnitTypeList();
Map<String, DataDictionary> dataDictionaryMap = unitTypeList.stream().collect(Collectors.toMap(DataDictionary::getCode, Function.identity(), (k1, k2) -> k1));
userImportDto.getUnitTypePostMap().forEach((k,v)->{
DataDictionary unitType = dataDictionaryMap.get(k);
String appCode = unitType.getTypeDesc() != null ? unitType.getTypeDesc() : "";
String[] appCodes = appCode.split(",");
Collections.addAll(appCodesSet, appCodes);
});
FeignClientResult<AgencyUserModel> userResult = null;
try {
AgencyUserModel agencyUserModel = new AgencyUserModel();
agencyUserModel.setUserName(tzsUserInfo.getPhone());
agencyUserModel.setRealName(tzsUserInfo.getName());
agencyUserModel.setLockStatus("UNLOCK");
agencyUserModel.setPassword(passwd);
agencyUserModel.setRePassword(passwd);
agencyUserModel.setAgencyCode("tzs");
agencyUserModel.setMobile(tzsUserInfo.getPhone());
agencyUserModel.setEmail(tzsUserInfo.getEmail());
List<RoleModel> allRoleList = new ArrayList<>();
List<Long> roleIds = new ArrayList<>();
DataDictionary unitType = iDataDictionaryService
.getOne(new LambdaQueryWrapper<DataDictionary>().eq(DataDictionary::getCode, roles).eq(DataDictionary::getType, USER_ROLE));
String role = unitType.getExtend() != null ? unitType.getExtend() : "";
for (String s : role.split(",")) {
RoleModel roleModel = Privilege.roleClient.seleteOne(Long.valueOf(s)).getResult();
allRoleList.add(roleModel);
}
allRoleList.forEach(r -> {
if (!roleIds.contains(r.getSequenceNbr())) {
roleIds.add(r.getSequenceNbr());
}
});
// 添加人员管理角色
String post = tzsUserInfo.getPost();
if (post.contains(PersonManageRoleEnum.code.getId().toString())) {
if (companyType.contains(PersonManageRoleEnum.jyjc.getName())) {
roleIds.add(PersonManageRoleEnum.jyjc.getId());
}
if (companyType.contains(PersonManageRoleEnum.use.getName())) {
roleIds.add(PersonManageRoleEnum.use.getId());
}
if (companyType.contains(PersonManageRoleEnum.agw.getName())) {
roleIds.add(PersonManageRoleEnum.agw.getId());
}
}
Map<Long, List<Long>> roleSeqMap = new HashMap<>();
Map<Long, List<RoleModel>> orgRoles = new HashMap<>();
roleSeqMap.put(companyModel.getSequenceNbr(), roleIds);
orgRoles.put(companyModel.getSequenceNbr(), allRoleList);
agencyUserModel.setAppCodes(new ArrayList<>(appCodesSet));
agencyUserModel.setOrgRoles(orgRoles);
agencyUserModel.setOrgRoleSeqs(roleSeqMap);
userResult = Privilege.agencyUserClient.create(agencyUserModel);
if (userResult.getStatus() == 200) {
tzsUserInfo.setAmosUserId(userResult.getResult().getUserId());
tzsUserInfo.setAmosUserName(userResult.getResult().getUserName());
tzsUserInfo.setLockStatus("UNLOCK");
// 绑定企业整改用户组
List<String> userIds = new ArrayList<>();
userIds.add(userResult.getResult().getUserId());
DataDictionary roleGroup = iDataDictionaryService
.getOne(new LambdaQueryWrapper<DataDictionary>().eq(DataDictionary::getCode, roleGroupCode).eq(DataDictionary::getType, ROLE_GROUP));
if (!ObjectUtils.isEmpty(roleGroup) && roleGroup.getExtend() != null) {
Privilege.groupUserClient.create(Long.valueOf(roleGroup.getExtend()), userIds);
}
// 绑定两个规定用户组
post = post.replace("[", "").replace("]", "").replace("\"", "");
for (String code : post.split(",")) {
DataDictionary groupId = iDataDictionaryService
.getOne(new LambdaQueryWrapper<DataDictionary>().eq(DataDictionary::getCode, code).likeRight(DataDictionary::getType, QYRYGW));
if (!ObjectUtils.isEmpty(groupId) && groupId.getExtend() != null) {
Privilege.groupUserClient.create(Long.valueOf(groupId.getExtend()), userIds);
}
}
tzsUserInfoMapper.updateById(tzsUserInfo);
}
} catch (Exception e) {
if (userResult != null && userResult.getResult() != null
&& StringUtils.isNotEmpty(userResult.getResult().getUserId())) {
Privilege.agencyUserClient.multDeleteUser(userResult.getResult().getUserId());
}
log.error(e.getMessage(), e);
throw new BadRequest(e.getMessage());
}
}
}
......@@ -141,9 +141,6 @@ public class RegUnitInfoServiceImpl extends BaseService<RegUnitInfoDto, RegUnitI
@Autowired
TzsBaseInstitutionMapper tzsBaseInstitutionMapper;
@Autowired
TzsUserInfoServiceImpl tzsUserInfoService;
private final Logger logger = LogManager.getLogger(RegUnitInfoServiceImpl.class);
/**
......
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