Commit 8cda8fe1 authored by 韩桐桐's avatar 韩桐桐

需求3321 : 人员管理分类调整

parent af6cfc51
......@@ -216,13 +216,13 @@ public class TzsUserInfo extends BaseEntity {
/**
* 岗位子类型(多个逗号分割)
*/
@TableField("sub_post")
@TableField(value = "sub_post", updateStrategy = FieldStrategy.IGNORED)
private String subPost;
/**
* 岗位子类型名称(多个逗号分割)
*/
@TableField("sub_post_name")
@TableField(value = "sub_post_name", updateStrategy = FieldStrategy.IGNORED)
private String subPostName;
/**
......
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.tcm.api.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
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.DataDictionary;
import com.yeejoin.amos.boot.module.tcm.api.dto.GroupAndPersonInfoDto;
......@@ -81,4 +82,10 @@ public interface ITzsUserInfoService extends IService<TzsUserInfo> {
* @return 失败时返回失败信息,提供时返回success
*/
ResponseModel<?> importUserBatch(MultipartFile file);
String deletePersonSubtypeHistoricalData();
List<DataDictionary> postByUnitType(CompanyBo company);
List<DataDictionary> subPostByUnitType(CompanyBo company, String parentCode);
}
......@@ -25,6 +25,8 @@ import com.yeejoin.amos.boot.module.tcm.biz.service.impl.TzsUserInfoServiceImpl;
import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -393,8 +395,40 @@ public class TzsUserInfoController extends BaseController {
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/getJobItemBySubPost")
@ApiOperation(httpMethod = "GET", value = "根据人员子类型查询作业项目", notes = "根据人员子类型查询作业项目")
public ResponseModel<List<DictionarieValueModel> > getJobItemBySubPost(@RequestParam(value = "dicKey") String dicKey,
@RequestParam(value = "") String subPost) {
List<DictionarieValueModel> result = Systemctl.dictionarieClient.dictValues(dicKey).getResult();
// 包含 持证人员(P)6764 或 持证人员(R2)6765 并且不包含持证人员 6713 的情况下 只显示【移动式压力容器充装】和【气瓶充装】
if ((subPost.contains("6764") || subPost.contains("6765")) && !subPost.contains("6713")) {
List<DictionarieValueModel> collect = result.stream()
.filter(x -> x.getDictDataKey().equals("移动式压力容器充装") || x.getDictDataKey().equals("气瓶充装"))
.collect(Collectors.toList());
return ResponseHelper.buildResponse(collect);
}
return ResponseHelper.buildResponse(result);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/postByUnitType")
@ApiOperation(httpMethod = "GET", value = "根据单位类型查询对应的人员类型", notes = "根据单位类型查询对应的人员类型")
public ResponseModel<List<DataDictionary>> postByUnitType() {
CompanyBo company = getSelectedOrgInfo().getCompany();
return ResponseHelper.buildResponse(tzsUserInfoService.postByUnitType(company));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/subPostByUnitType")
@ApiOperation(httpMethod = "GET", value = "根据单位类型查询对应的人员类型子类型", notes = "根据单位类型查询对应的人员类型子类型")
public ResponseModel<List<DataDictionary>> subPostByUnitType(@RequestParam(value = "parentCode") String parentCode) {
CompanyBo company = getSelectedOrgInfo().getCompany();
return ResponseHelper.buildResponse(tzsUserInfoService.subPostByUnitType(company, parentCode));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/historicalOperatorHandling")
@ApiOperation(httpMethod = "GET", value = "【调用一次即可】需求3309 人员管理调整后:历史的维保人员(作业人员含电梯维修资质的刷入子类型:持证人员)", notes = "【调用一次即可】需求3309 人员管理调整后:历史的维保人员(作业人员含电梯维修资质的刷入子类型:持证人员)")
@ApiOperation(httpMethod = "GET", value = "【数据处理】【调用一次即可】需求3309 人员管理调整后:历史的维保人员(作业人员含电梯维修资质的刷入子类型:持证人员)", notes = "【数据处理】【调用一次即可】需求3309 人员管理调整后:历史的维保人员(作业人员含电梯维修资质的刷入子类型:持证人员)")
public ResponseModel<Object> historicalOperatorHandling() {
// userinfo表中旧的post字段保存了旧字典值6618(维保人员)
List<Long> sesqNbrs = tzsUserInfoService.getBaseMapper()
......@@ -410,4 +444,14 @@ public class TzsUserInfoController extends BaseController {
.in(TzsUserInfo::getSequenceNbr, sesqNbrs));
return ResponseHelper.buildResponse("更新数据:" + sesqNbrs.size() + "条");
}
/**
* 需求3321 人员管理分类调整,删除部分人员子类型对应的历史数据
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "【数据处理】需求3321 人员管理分类调整,删除部分人员子类型对应的历史数据", notes = "【数据处理】需求3321 人员管理分类调整,删除部分人员子类型对应的历史数据")
@GetMapping(value = "/deletePersonSubtypeHistoricalData")
public ResponseModel<String> deletePersonSubtypeHistoricalData() {
return ResponseHelper.buildResponse(tzsUserInfoService.deletePersonSubtypeHistoricalData());
}
}
......@@ -9,6 +9,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Sets;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
......@@ -48,6 +51,8 @@ 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.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
......@@ -60,9 +65,11 @@ 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.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.io.IOException;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -772,6 +779,7 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
public List<DataDictionary> getSubPostByParentsIds(String postIds) {
return iDataDictionaryService.lambdaQuery()
.in(DataDictionary::getParent, new ArrayList<>(Arrays.asList(postIds.split(","))))
.eq(DataDictionary::getIsDelete, Boolean.FALSE)
.orderByAsc(DataDictionary::getSortNum)
.list();
}
......@@ -1603,5 +1611,141 @@ public class TzsUserInfoServiceImpl extends BaseService<TzsUserInfoDto, TzsUserI
}
}
/**
* 需求3321 人员管理分类调整,删除部分人员子类型对应的历史数据
*
* @return 修正数据
*/
@Override
public String deletePersonSubtypeHistoricalData() {
int nums = 0;
// 要删除的岗位ID
List<String> subPostsToRemove = Arrays.asList("6711", "6710", "6709", "6712");
List<TzsUserInfo> tzsUserInfos = this.getBaseMapper().selectList(
new LambdaQueryWrapper<TzsUserInfo>()
.eq(TzsUserInfo::getIsDelete, Boolean.FALSE)
.like(TzsUserInfo::getNewPost, "6552")
.and(x -> x.like(TzsUserInfo::getSubPost, "6711")
.or().like(TzsUserInfo::getSubPost, "6710")
.or().like(TzsUserInfo::getSubPost, "6709")
.or().like(TzsUserInfo::getSubPost, "6712")
)
);
// 遍历处理数据
for (TzsUserInfo userInfo : tzsUserInfos) {
String subPostJson = userInfo.getSubPost();
ObjectMapper mapper = new ObjectMapper();
try {
List<String> subPosts = mapper.readValue(subPostJson, new TypeReference<List<String>>() {
});
// 过滤掉要删除的值
List<String> updatedSubPosts = subPosts.stream()
.filter(val -> !subPostsToRemove.contains(val))
.collect(Collectors.toList());
// 转回 JSON 字符串
String newSubPostJson = mapper.writeValueAsString(updatedSubPosts);
userInfo.setSubPost(updatedSubPosts.isEmpty() ? null : newSubPostJson);
if (updatedSubPosts.isEmpty()) {
userInfo.setSubPostName(null);
} else {
String newSubPostNameJson = iDataDictionaryService.lambdaQuery()
.in(DataDictionary::getCode, updatedSubPosts)
.orderByAsc(DataDictionary::getSortNum)
.select(DataDictionary::getName)
.list()
.stream()
.map(DataDictionary::getName)
.collect(Collectors.joining(","));
userInfo.setSubPostName(newSubPostNameJson);
}
this.getBaseMapper().updateById(userInfo);
++nums;
} catch (Exception e) {
e.printStackTrace();
}
}
return String.format("修正数据 %s 条。", nums);
}
@Value("classpath:/json/unitTypeLimitUserType.json")
private Resource unitTypeLimitUserType;
private JsonNode postData;
@PostConstruct
public void init() {
try {
postData = new ObjectMapper().readTree(unitTypeLimitUserType.getInputStream());
} catch (IOException e) {
throw new RuntimeException("Failed to read or parse JSON data", e);
}
}
@Override
public List<DataDictionary> postByUnitType(CompanyBo company) {
ArrayList<String> postDictCodeList = new ArrayList<>();
JsonNode companyTypeNode = postData.get(company.getCompanyType());
if (companyTypeNode != null && companyTypeNode.isObject()) {
Iterator<Map.Entry<String, JsonNode>> fields = companyTypeNode.fields();
while (fields.hasNext()) {
Map.Entry<String, JsonNode> entry = fields.next();
String postCode = entry.getKey();
postDictCodeList.add(postCode); // 主岗位
}
}
return this.getAllUserType().stream()
.filter(item -> postDictCodeList.contains(item.getCode()))
.collect(Collectors.toList());
}
/**
* 根据单位类型和父类型查询对应的人员类型子类型
* @param company 登录人公司信息
* @param parentCode 父人员类型code
* @return result
*/
@Override
public List<DataDictionary> subPostByUnitType(CompanyBo company, String parentCode) {
ArrayList<String> parentCodeList = new ArrayList<>(Arrays.asList(parentCode.split(",")));
List<DataDictionary> result = new ArrayList<>();
JsonNode companyTypeNode = postData.get(company.getCompanyType());
if (companyTypeNode != null && companyTypeNode.isObject()) {
Iterator<Map.Entry<String, JsonNode>> fields = companyTypeNode.fields();
while (fields.hasNext()) {
Map.Entry<String, JsonNode> entry = fields.next();
String postCode = entry.getKey();
if (parentCodeList.contains(postCode)) {
ArrayList<String> subPostDictCodeList = new ArrayList<>();
JsonNode subPosts = entry.getValue(); // 子岗位数组
if (subPosts.isArray()) {
for (JsonNode subPost : subPosts) {
if (!subPost.isNull()) {
subPostDictCodeList.add(subPost.asText()); // 子岗位
}
}
}
// subPostDictCodeList 值不为空说明有限制,按照限制来 ,为空按照父类型code查询所有
if (!subPostDictCodeList.isEmpty()) {
result.addAll(iDataDictionaryService.lambdaQuery()
.in(DataDictionary::getCode, subPostDictCodeList)
.eq(DataDictionary::getType, "QYRYGW")
.orderByAsc(DataDictionary::getSortNum)
.list());
} else {
result.addAll(iDataDictionaryService.lambdaQuery()
.in(DataDictionary::getParent, postCode)
.eq(DataDictionary::getType, "QYRYGW")
.orderByAsc(DataDictionary::getSortNum)
.list());
}
}
}
}
return result;
}
}
{
"检验检测机构": {
"6660": [],
"6667": [],
"66151": [],
"66152": [],
"6546": [],
"6616": [],
"6761": [],
"6762": []
},
"设计单位": {
"6660": [],
"6661": [],
"6546": [],
"6616": []
},
"制造单位": {
"6660": [],
"6661": [],
"6662": [],
"6619": [],
"6552": [],
"66151": [],
"66152": [],
"6546": [],
"6548": [],
"6550": [],
"6551": [],
"6616": []
},
"充装单位": {
"6660": [],
"6666": [],
"6552": ["6713"],
"6546": [],
"6547": [],
"6548": [],
"6551": [],
"6616": [],
"6763": [],
"": []
},
"安装改造维修单位": {
"6660": [],
"6662": [],
"6663": [],
"6664": [],
"6665": [],
"6619": [],
"6552": [],
"66151": [],
"66152": [],
"6546": [],
"6548": [],
"6550": [],
"6551": [],
"6616": [],
"6553": []
},
"使用单位": {
"6552": ["6713"],
"6546": [],
"6550": [],
"6548": [],
"6551": [],
"6616": [],
"6617": []
}
}
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