Commit c5802787 authored by suhuiguang's avatar suhuiguang

Merge branch 'develop_tzs_bugfix' into develop_tzs_register

parents fb9abf4b b3dcf0dc
......@@ -55,6 +55,8 @@ import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.context.RequestContext;
......@@ -117,8 +119,6 @@ public class CommonEquipDataProcessService {
private final RestHighLevelClient restHighLevelClient;
private final IdxBizJgProjectContraptionServiceImplService idxBizJgProjectContraptionServiceImpl;
private final JgUseRegistrationServiceImpl jgUseRegistrationService;
private final CommonServiceImpl commonService;
......@@ -142,6 +142,9 @@ public class CommonEquipDataProcessService {
public static final String BASE_COLUMN_REC_DATE = "\"REC_DATE\"";
public static final String BASE_COLUMN_REC_USERID = "\"REC_USER_ID\"";
@Autowired
@Lazy
private IdxBizJgProjectContraptionServiceImplService idxBizJgProjectContraptionServiceImpl;
@PostConstruct
public void init() {
......
......@@ -288,6 +288,7 @@ public class CommonServiceImpl implements ICommonService {
private String qrcodePrefix;
@Autowired
@Lazy
private RemindServiceImpl remindServiceImpl;
@Autowired
......
......@@ -38,6 +38,7 @@ import lombok.extern.slf4j.Slf4j;
import lombok.var;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
......@@ -102,6 +103,7 @@ public class IdxBizJgProjectContraptionServiceImplService extends BaseEntityServ
@Autowired
private TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper;
@Autowired
@Lazy
private CommonServiceImpl commonService;
@Autowired
private JgVehicleInformationMapper jgVehicleInformationMapper;
......
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 QualificationLevelConverter implements Converter<String> {
private static final Map<String,String> CODE_MAP = new HashMap<>();
static {
CODE_MAP.put("检验员","JYY");
CODE_MAP.put("检验师","JYS");
CODE_MAP.put("高级检验师","GJJYS");
}
@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 QualificationProjectConverter implements Converter<String> {
private static final Map<String,String> CODE_MAP = new HashMap<>();
static {
CODE_MAP.put("机电类设备检验","JDG");
CODE_MAP.put("承压类设备检验","CYG");
CODE_MAP.put("大型游乐设施检验","YLY");
CODE_MAP.put("型式试验","CXY");
CODE_MAP.put("锅炉检验","GLY");
CODE_MAP.put("锅炉能效测试","GNY");
CODE_MAP.put("锅炉水(介)质检验","GSY");
CODE_MAP.put("压力容器检验","RQY");
CODE_MAP.put("气瓶检验","QPY");
CODE_MAP.put("压力管道检验","GDY");
CODE_MAP.put("电梯检验","DTY");
CODE_MAP.put("起重机械检验","QZY");
CODE_MAP.put("客运索道检验","SDY");
CODE_MAP.put("场(厂)内专用机动车辆检验","CCY");
}
@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.dto;
import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.fastjson.JSONArray;
import com.yeejoin.amos.boot.module.tcm.api.converter.*;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.*;
@Data
public class CompanyUserImportDto {
@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)
@ExcelProperty(value = "人员类型")
private String post;
@ExcelIgnore
private String newPost;
// @ExcelProperty(value = "人员子类型", converter = PostTypeConverter.class)
@ExcelProperty(value = "人员子类型")
private String subPost;
@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;
@ExcelIgnore()
private JSONArray permissionData66151 = new JSONArray();
@ExcelIgnore()
private JSONArray permissionData66152 = new JSONArray();
@ExcelIgnore()
private JSONArray permissionData6552 = new JSONArray();
/**
* 检验资质信息
*/
@Data
public static class InspectQualification {
@NotBlank(message = "证件编号不能为空!")
@ExcelProperty(value = "证件编号")
private String certificateNum;
@NotBlank(message = "发证机关不能为空!")
@ExcelProperty(value = "发证机关")
private String approvedOrgan;
@NotBlank(message = "检验资质级别不能为空!")
@ExcelProperty(value = "级别", converter = QualificationLevelConverter.class)
private String permissionLevel;
@NotBlank(message = "检验资质项目不能为空!")
@ExcelProperty(value = "项目", converter = QualificationProjectConverter.class)
private String permissionItem;
@NotBlank(message = "检验资质发证日期不能为空!")
@ExcelProperty(value = "发证日期")
@DateTimeFormat("yyyy-MM-dd")
private String issueDate;
@NotBlank(message = "检验资质有效期不能为空!")
@ExcelProperty(value = "有效期")
@DateTimeFormat("yyyy-MM-dd")
private String expiryDate;
}
/**
* 检测资质信息
*/
@Data
public static class TestingQualification {
@NotBlank(message = "证件编号不能为空!")
@ExcelProperty(value = "证件编号")
private String certificateNum;
@NotBlank(message = "发证机关不能为空!")
@ExcelProperty(value = "发证机关")
private String approvedOrgan;
@NotBlank(message = "检测资质级别不能为空!")
@ExcelProperty(value = "级别", converter = QualificationLevelConverter.class)
private String permissionLevel;
@NotBlank(message = "检测资质项目不能为空!")
@ExcelProperty(value = "项目", converter = QualificationProjectConverter.class)
private String permissionItem;
@NotBlank(message = "检测资质发证日期不能为空!")
@ExcelProperty(value = "发证日期")
@DateTimeFormat("yyyy-MM-dd")
private String issueDate;
@NotBlank(message = "检测资质有效期不能为空!")
@ExcelProperty(value = "有效期")
@DateTimeFormat("yyyy-MM-dd")
private String expiryDate;
}
/**
* 作业人员资质信息
*/
@Data
public static class OperatorQualifications {
@NotBlank(message = "作业人员资质证件编号不能为空!")
@ExcelProperty(value = "证件编号")
private String certificateNum;
@NotBlank(message = "作业人员资质发证机关不能为空!")
@ExcelProperty(value = "证书编号")
private String certNo;
@NotBlank(message = "作业人员资质证书类型不能为空!")
@ExcelProperty(value = "发证机关")
private String approvedOrgan;
@NotBlank(message = "作业人员资质证书类型不能为空!")
@ExcelProperty(value = "证书类型")
private String certType;
@NotBlank(message = "作业人员资质作业项目不能为空!")
@ExcelProperty(value = "作业项目")
private String jobItemStr;
@ExcelIgnore
private JSONArray jobItem;
@ExcelProperty(value = "金属焊接操作-项目代号")
private String JSHJCZItemCode;
@ExcelProperty(value = "非金属焊接操作-项目代号")
private String FJSHJCZItemCode;
@ExcelProperty(value = "其他作业项目")
private String otherItem;
@NotBlank(message = "检测资质发证日期不能为空!")
@ExcelProperty(value = "发证日期")
@DateTimeFormat("yyyy-MM-dd")
private String issueDate;
@NotBlank(message = "检测资质有效期不能为空!")
@ExcelProperty(value = "有效期")
@DateTimeFormat("yyyy-MM-dd")
private String expiryDate;
}
}
......@@ -85,6 +85,14 @@ public interface ITzsUserInfoService extends IService<TzsUserInfo> {
*/
ResponseModel<?> importUserBatch(MultipartFile file);
/**
* 企业人员导入
*
* @param file 导入的文件
* @return 失败时返回失败信息,提供时返回success
*/
ResponseModel<?> importCompanyUser(MultipartFile file, ReginParams reginParams);
String deletePersonSubtypeHistoricalData();
List<DataDictionary> postByUnitType(CompanyBo company);
......
......@@ -382,6 +382,13 @@ public class TzsUserInfoController extends BaseController {
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/company/import")
@ApiOperation(value = "企业人员导入", httpMethod = "POST", notes = "企业人员导入")
public ResponseModel<?> importCompanyUser(@RequestBody MultipartFile file) {
return tzsUserInfoService.importCompanyUser(file, getSelectedOrgInfo());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/personnelTransferOut")
@ApiOperation(httpMethod = "GET", value = "人员转出:逻辑删除人员并删除关联的系统账号", notes = "人员转出:逻辑删除人员并删除关联的系统账号")
public ResponseModel<Boolean> personnelTransferOut(@RequestParam(value = "userSeqNbrs") String userSeqNbrs) {
......
......@@ -2,6 +2,11 @@ package com.yeejoin.amos.boot.module.tcm.biz.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
......@@ -70,7 +75,7 @@ import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.io.IOException;
import java.io.*;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -182,6 +187,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
});
return optionalSortMap.orElse(null);
}
/**
* 驼峰转下划线
*
......@@ -202,7 +208,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
}
@Override
public Page<TzsUserInfoDto> page(TzsUserInfoDto dto, Page<TzsUserInfoDto> page,String sort) {
public Page<TzsUserInfoDto> page(TzsUserInfoDto dto, Page<TzsUserInfoDto> page, String sort) {
SortVo sortMap = this.sortFieldConversion(sort);
// dto.setMenuTypeUnderPost(menuMap.get(dto.getMenuType()));
Page<TzsUserInfoDto> tzsUserInfoDtoPage = tzsUserInfoMapper.selectPageMessage(page, dto, sortMap);
......@@ -325,9 +331,9 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
// 2:多种单位类型的企业编辑另一种单位类型下的人员
// 监管机构查看所有
List<String> unitTypeAllPostCode;
if (!reginParams.getCompany().getCompanyType().equals("监管机构")){
if (!reginParams.getCompany().getCompanyType().equals("监管机构")) {
unitTypeAllPostCode = this.postByUnitType(reginParams.getCompany()).stream().map(DataDictionary::getCode).collect(Collectors.toList());
}else {
} else {
unitTypeAllPostCode = this.getAllUserType().stream().map(DataDictionary::getCode).collect(Collectors.toList());
}
Map<String, Object> maps = new HashMap<>();
......@@ -1339,6 +1345,343 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
return errors;
}
/**
* 企业人员导入
*
* @param multipartFile 导入的文件
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public ResponseModel<?> importCompanyUser(MultipartFile multipartFile, ReginParams reginParams) {
CompanyBo company = reginParams.getCompany();
List<CompanyUserImportDto> dataList = new ArrayList<>();
JSONArray resultError = new JSONArray();
// 用于手机号唯一判断 key:姓名-身份证号 value :手机号
// key保证数据唯一性
Map<String, String> phoneOnly = new HashMap<>();
Map<String, String> certificateNumOnly = new HashMap<>();
try {
InputStream inputStream = multipartFile.getInputStream();
ExcelReader excelReader = EasyExcel.read(inputStream).build();
List<ReadSheet> sheetList = excelReader.excelExecutor().sheetList(); // 获取所有 sheet
for (ReadSheet readSheet : sheetList) {
String sheetName = readSheet.getSheetName();
int sheetNo = readSheet.getSheetNo();
// 忽略 sheet页:企业人员录入限制(参考)
if (sheetName.contains("企业人员录入限制")) {
continue;
}
ArrayList<String> sheetError = new ArrayList<>();
// 人员信息 sheet页
if (sheetName.contains("人员信息")) {
EasyExcel.read(multipartFile.getInputStream(), CompanyUserImportDto.class, new AnalysisEventListener<CompanyUserImportDto>() {
@Override
public void invoke(CompanyUserImportDto data, AnalysisContext context) {
companyUserCheckField(sheetError, sheetName, dataList, data, context.readRowHolder().getRowIndex() + 1, phoneOnly, certificateNumOnly, company);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (!ValidationUtil.isEmpty(sheetError)) {
resultError.add(sheetError);
}
}
}).headRowNumber(2).sheet(sheetNo, sheetName).doRead();
}
// 检验资质信息 sheet页
if (sheetName.contains("检验资质信息")) {
EasyExcel.read(multipartFile.getInputStream(), CompanyUserImportDto.InspectQualification.class, new AnalysisEventListener<CompanyUserImportDto.InspectQualification>() {
@Override
public void invoke(CompanyUserImportDto.InspectQualification data, AnalysisContext context) {
companyUserInspectCheckField(sheetError, sheetName, dataList, data, context.readRowHolder().getRowIndex() + 1);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (!ValidationUtil.isEmpty(sheetError)) {
resultError.add(sheetError);
}
}
}).headRowNumber(2).sheet(sheetNo, sheetName).doRead();
}
// 检测资质信息 sheet页
if (sheetName.contains("检测资质信息")) {
EasyExcel.read(multipartFile.getInputStream(), CompanyUserImportDto.TestingQualification.class, new AnalysisEventListener<CompanyUserImportDto.TestingQualification>() {
@Override
public void invoke(CompanyUserImportDto.TestingQualification data, AnalysisContext context) {
companyUserTestCheckField(sheetError, sheetName, dataList, data, context.readRowHolder().getRowIndex() + 1);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (!ValidationUtil.isEmpty(sheetError)) {
resultError.add(sheetError);
}
}
}).headRowNumber(2).sheet(sheetNo, sheetName).doRead();
}
// 作业人员资质信息 sheet页
if (sheetName.contains("作业人员资质信息")) {
EasyExcel.read(multipartFile.getInputStream(), CompanyUserImportDto.OperatorQualifications.class, new AnalysisEventListener<CompanyUserImportDto.OperatorQualifications>() {
@Override
public void invoke(CompanyUserImportDto.OperatorQualifications data, AnalysisContext context) {
companyUserOperatorQuaCheckField(sheetError, sheetName, dataList, data, context.readRowHolder().getRowIndex() + 1);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
if (!ValidationUtil.isEmpty(sheetError)) {
resultError.add(sheetError);
}
}
}).headRowNumber(2).sheet(sheetNo, sheetName).doRead();
}
}
// 存在检验不通过的数据则返回错误信息,不在向下写入库
if (!resultError.isEmpty()) {
return ResponseHelper.buildResponse(resultError);
}
// 3.数据入库
dataList.forEach(data -> {
TzsUserInfoDto dto = new TzsUserInfoDto();
BeanUtils.copyProperties(data, dto);
this.saveUserInfo(dto);
});
} catch (Exception e) {
throw new RuntimeException(e);
}
return ResponseHelper.buildResponse("success");
}
private void companyUserCheckField(ArrayList<String> sheetError, String sheetName, List<CompanyUserImportDto> dataList,
CompanyUserImportDto userItems, int excelRowNum, Map<String, String> phoneOnly, Map<String, String> certificateNumOnly,
CompanyBo company) {
ArrayList<String> errors = new ArrayList<>();
// 1.必输校验
Set<ConstraintViolation<CompanyUserImportDto>> violations = validator.validate(userItems);
for (ConstraintViolation<CompanyUserImportDto> violation : violations) {
errors.add("第" + excelRowNum + "行,错误信息->" + violation.getMessage());
}
// 2.手机号重复检验,手机号在本单位下唯一
String key = userItems.getName() + "-" + userItems.getCertificateNum();
// 2.1 当前上传数据比较
if (!ValidationUtil.isEmpty(phoneOnly.get(key))) {
errors.add("第" + excelRowNum + "行,错误信息->" + "手机号与" + key + "重复");
} else if (!this.baseMapper.selectList(new LambdaQueryWrapper<TzsUserInfo>()
.select(TzsUserInfo::getSequenceNbr)
.eq(TzsUserInfo::getPhone, userItems.getPhone())
.eq(TzsUserInfo::getUnitCode, company.getCompanyCode())
.eq(TzsUserInfo::getIsDelete, Boolean.FALSE)).isEmpty()) { //2.2 本单位人员比较
errors.add("第" + excelRowNum + "行,错误信息->" + "手机号已经绑定本单位人员");
} else {
phoneOnly.put(key, userItems.getPhone());
}
// 3.身份证重复检验,身份证在本单位下唯一
// 3.1 当前上传数据比较
if (!ValidationUtil.isEmpty(certificateNumOnly.get(userItems.getCertificateNum()))) {
errors.add("第" + excelRowNum + "行,错误信息->" + "证件编号与" + userItems.getName() + "重复");
} else if (!this.baseMapper.selectList(new LambdaQueryWrapper<TzsUserInfo>()
.select(TzsUserInfo::getSequenceNbr)
.eq(TzsUserInfo::getCertificateNum, userItems.getCertificateNum())
.eq(TzsUserInfo::getUnitCode, company.getCompanyCode())
.eq(TzsUserInfo::getIsDelete, Boolean.FALSE)).isEmpty()) { //2.2 本单位人员比较
errors.add("第" + excelRowNum + "行,错误信息->" + "证件编号已经绑定本单位人员");
} else {
certificateNumOnly.put(userItems.getCertificateNum(), userItems.getName());
}
// 4.登录账号的单位类型和人员类型校验
Map<String, String> allPostNames = this.postByUnitType(company).stream().collect(Collectors.toMap(DataDictionary::getName, DataDictionary::getCode));
String postNameStr = userItems.getPost();
if (!ValidationUtil.isEmpty(postNameStr)) {
List<String> postNameList = Arrays.asList(postNameStr.replace(",", ",").replace("-", ",").split(","));
// postNameList 中,不存在于 allPostNames 中的元素
List<String> notExistPosts = postNameList.stream()
.filter(p -> !allPostNames.containsKey(p))
.collect(Collectors.toList());
if (!notExistPosts.isEmpty()) {
errors.add("第" + excelRowNum + "行,错误信息->" + "不可以录入以下人员类型的数据:" + String.join(",", notExistPosts));
}
// 人员类型为:"质量保证体系人员", "设计人员", "检查人员"时候,子类型为必填
List<String> mustHasSub = Arrays.asList("质量保证体系人员", "设计人员", "检查人员", "作业人员");
List<String> mustPost = postNameList.stream().filter(mustHasSub::contains).collect(Collectors.toList());
if (!mustPost.isEmpty() && ValidationUtil.isEmpty(userItems.getSubPost())) {
errors.add("第" + excelRowNum + "行,错误信息->" + "以下人员类型必须包含对应子类型:" + String.join(",", mustPost));
}
// 转化post
userItems.setNewPost(new JSONArray(postNameList.stream().map(allPostNames::get).filter(Objects::nonNull).collect(Collectors.toList())).toString());
postNameList.forEach(postName -> {
// 5.人员类型和人员子类型的匹配
String subPost = userItems.getSubPost();
if (!ValidationUtil.isEmpty(subPost)) {
String subPostStr = subPost.replace(",", ",").replace("-", ",");
List<String> subPostList = Arrays.asList(subPostStr.split(","));
String postCode = this.postByUnitType(company).stream().filter(item -> item.getName().equals(postName)).map(DataDictionary::getCode).findFirst().orElse("");
Map<String, String> allSubPostNames = this.subPostByUnitType(company, postCode).stream().collect(Collectors.toMap(DataDictionary::getName, DataDictionary::getCode));
if (ValidationUtil.isEmpty(allSubPostNames)) {
return;
}
// postList 中,不存在于 allPostNames 中的元素
List<String> notExistSubPosts = subPostList.stream()
.filter(p -> !allSubPostNames.containsKey(p))
.collect(Collectors.toList());
if (!notExistSubPosts.isEmpty()) {
errors.add("第" + excelRowNum + "行,错误信息->" + "不可以录入以下人员类型的数据:" + String.join(",", notExistSubPosts));
}
// 转化subPost
userItems.setSubPost(subPostList.stream().map(allSubPostNames::get).collect(Collectors.joining(",")));
}
});
}
if (!errors.isEmpty()) {
sheetError.add(sheetName + "sheet页," + errors);
}
// 汇总用户信息
dataList.add(userItems);
}
/**
* 检验资质信息
*/
private void companyUserInspectCheckField(ArrayList<String> sheetError, String sheetName, List<CompanyUserImportDto> dataList,
CompanyUserImportDto.InspectQualification inspectItem, int excelRowNum) {
ArrayList<String> errors = new ArrayList<>();
// 1.必输校验
Set<ConstraintViolation<CompanyUserImportDto.InspectQualification>> violations = validator.validate(inspectItem);
for (ConstraintViolation<CompanyUserImportDto.InspectQualification> violation : violations) {
errors.add("第" + excelRowNum + "行,错误信息->" + violation.getMessage());
}
if (!errors.isEmpty()) {
sheetError.add(sheetName + "sheet页," + errors);
}
if (!ValidationUtil.isEmpty(inspectItem.getCertificateNum())) {
dataList.forEach(data -> {
if (!ValidationUtil.isEmpty(data.getCertificateNum()) && data.getCertificateNum().equals(inspectItem.getCertificateNum())) {
JSONArray permissionData66151 = data.getPermissionData66151();
permissionData66151.add(inspectItem);
data.setPermissionData66151(permissionData66151);
}
});
}
}
/**
* 检测资质信息
*/
private void companyUserTestCheckField(ArrayList<String> sheetError, String sheetName, List<CompanyUserImportDto> dataList,
CompanyUserImportDto.TestingQualification testQua, int excelRowNum) {
ArrayList<String> errors = new ArrayList<>();
// 1.必输校验
Set<ConstraintViolation<CompanyUserImportDto.TestingQualification>> violations = validator.validate(testQua);
for (ConstraintViolation<CompanyUserImportDto.TestingQualification> violation : violations) {
errors.add("第" + excelRowNum + "行,错误信息->" + violation.getMessage());
}
if (!errors.isEmpty()) {
sheetError.add(sheetName + "sheet页," + errors);
}
if (!ValidationUtil.isEmpty(testQua.getCertificateNum())) {
dataList.forEach(data -> {
if (!ValidationUtil.isEmpty(data.getCertificateNum()) && data.getCertificateNum().equals(testQua.getCertificateNum())) {
JSONArray permissionData66152 = data.getPermissionData66152();
permissionData66152.add(testQua);
data.setPermissionData66152(permissionData66152);
}
});
}
}
/**
* 作业人员资质信息
*/
private void companyUserOperatorQuaCheckField(ArrayList<String> sheetError, String sheetName, List<CompanyUserImportDto> dataList,
CompanyUserImportDto.OperatorQualifications OperatorQua, int excelRowNum) {
ArrayList<String> errors = new ArrayList<>();
// 1.必输校验
Set<ConstraintViolation<CompanyUserImportDto.OperatorQualifications>> violations = validator.validate(OperatorQua);
for (ConstraintViolation<CompanyUserImportDto.OperatorQualifications> violation : violations) {
errors.add("第" + excelRowNum + "行,错误信息->" + violation.getMessage());
}
if (!errors.isEmpty()) {
sheetError.add(sheetName + "sheet页," + errors);
}
if (!ValidationUtil.isEmpty(OperatorQua.getCertificateNum())) {
dataList.forEach(data -> {
if (!ValidationUtil.isEmpty(data.getCertificateNum()) && data.getCertificateNum().equals(OperatorQua.getCertificateNum())) {
JSONArray permissionData6552 = data.getPermissionData6552();
JSONArray objects = new JSONArray();
objects.add(OperatorQua.getJobItemStr());
OperatorQua.setJobItem(objects);
permissionData6552.add(OperatorQua);
data.setPermissionData6552(permissionData6552);
}
});
}
}
// private Map<Long, CompanyUserImportDto> saveCompanyUserImportData2Db(Set<CompanyUserImportDto> 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());
// Set<String> postSet = dto.getUnitTypePostMap().values().stream().flatMap(Collection::stream).collect(Collectors.toSet());
// // TODO 无资质导入,默认post = newPost
// userInfo.setPost(JSON.toJSONString(postSet));
// // TODO 无资质导入,默认post = newPost
// userInfo.setNewPost(JSON.toJSONString(postSet));
// 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.setCertificateNum(dto.getCertificateNum());
// userInfo.setCertificateType(dto.getCertificateType());
// userInfo.setIsDelete(false);
// userInfo.setLockStatus(UNLOCK);
// userInfo.setUnitCode(dto.getUnitCode());
// userInfo.setEquipType(dto.getEquipType());
// userInfo.setJobTitle(dto.getJobTitle());
// userInfo.setEquipType(JSON.toJSONString(dto.getEquipTypeList()));
// return userInfo;
// }).collect(Collectors.toList());
// super.saveOrUpdateBatch(userInfos);
// return userInfos.stream().collect(Collectors.toMap(BaseEntity::getSequenceNbr, Function.identity()));
// }
private void createAmosUserWithCompanyImport(Map<Long, TzsUserInfo> userInfoMap, Set<UserImportDto> userSet) {
// 1.公共数据处理
// 1.1公司缓存
Map<String, CompanyModel> companyCodeCompanyMap = new ConcurrentHashMap<>();
Map<Long, UserImportDto> userSeqImportDataMap = userSet.stream().collect(Collectors.toMap(UserImportDto::getSeq, Function.identity()));
// 1.2单位类型下角色缓存
List<DataDictionary> unitTypeList = regUnitInfoService.setAndGetUnitTypeList();
Map<String, DataDictionary> dataDictionaryMap = unitTypeList.stream().collect(Collectors.toMap(DataDictionary::getName, Function.identity(), (k1, k2) -> k1));
// 1.3通用角色-普通用户处理
List<RoleModel> allRoleList = getCommonRoleModels();
// 2.用户创建
// 2.1创建前检验-单位类型是否合法(用户的单位类型不能大于所在公司的注册时的单位类型)
userInfoMap.forEach((k, v) -> {
checkOneUser(v, userSeqImportDataMap.get(k), companyCodeCompanyMap);
});
// 2.2创建
userInfoMap.forEach((k, v) -> {
createOneUser(v, userSeqImportDataMap.get(k), companyCodeCompanyMap, dataDictionaryMap, allRoleList);
});
// 3.绑定用户到用户组
this.bindUserToGroup(userInfoMap.values());
}
@Override
@Transactional(rollbackFor = Exception.class)
public ResponseModel<?> importUserBatch(MultipartFile multipartFile) {
......@@ -1705,7 +2048,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
@Override
public List<DataDictionary> postByUnitType(CompanyBo company) {
ArrayList<String> postDictCodeList = new ArrayList<>();
if (company.getCompanyType().equals("监管机构")){
if (company.getCompanyType().equals("监管机构")) {
return this.getAllUserType();
}
TzBaseEnterpriseInfo enterpriseInfo = baseEnterpriseInfoService.lambdaQuery()
......@@ -1731,6 +2074,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
/**
* 根据单位类型和父类型查询对应的人员类型子类型
* * 接口用于人员详情界面 企业 + 监管单位 都会看到
*
* @param company 登录人公司信息
* @param parentCode 父人员类型code
* @return result
......
......@@ -109,7 +109,7 @@ public class TzsUserPermissionServiceImpl extends BaseService<TzsUserPermissionD
JSONArray permissionData6552 = userInfoDto.getPermissionData6552();
if (!ValidationUtil.isEmpty(permissionData6552)) {
permissionData6552.forEach(item -> {
JSONObject itempermissionData6552 = (JSONObject) item;
JSONObject itempermissionData6552 = JSONObject.parseObject(JSON.toJSONString(item));
// 前端无法处理后端手动判断
// 作业项目中含有【金属焊接操作】,则【金属焊接操作-项目代号】必填
// 作业项目中含有【非金属焊接操作】,则【非金属焊接操作-项目代号】必填
......
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