待办中心-认证参数-列表查询

This commit is contained in:
liyawei
2022-10-12 10:53:00 +08:00
parent 34f93771e3
commit 019c8b372b
7 changed files with 402 additions and 3 deletions
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.cert.collect.entity.ParamsManifestEO;
import com.jero.modules.cert.collect.vo.ParamsManifestVO;
import com.jero.modules.todoCenter.entity.ParamsManifestTodoCenterEO;
import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -24,6 +26,8 @@ public interface ParamsManifestEOMapper extends BaseMapper<ParamsManifestEO> {
List<ParamsManifestVO> listInfoAll(@Param("idList") List<String> idList);
List<ParamsManifestTodoCenterEO> listForTodoCenter(ParamsManifestTodoCenterEOPage paramsManifestTodoCenterEOPage);
ParamsManifestVO getProjectById(@Param("projectId") String projectId);
List<Map<String, String>> labelListForProjectDetails(@Param("projectId") String projectId);
@@ -114,6 +114,29 @@
</select>
<select id="listForTodoCenter" resultType="com.jero.modules.todoCenter.entity.ParamsManifestTodoCenterEO" parameterType="com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage">
select tmp_tb.* from(
select
pm.id as id,
pm.title as title,
pm.state as state,
pm.project_id as project_id,
pm.create_time as create_time,
concat(pni.project_name,'-',pyni.year_name,'-',plb.target_market,'-',pm.version) as project_name
from params_manifest pm
left join project_library_base as plb on plb.id = pm.project_id
left join project_name_info as pni on plb.project_name_id = pni.id
left join project_year_name_info as pyni on plb.year_name_id=pyni.id
) tmp_tb
where 1=1 and state = #{state}
<if test="projectName !=null and projectName !=''">
AND project_name LIKE CONCAT(CONCAT('%',#{projectName}),'%')
</if>
<if test="title !=null and title !=''">
AND title LIKE CONCAT(CONCAT('%',#{title}),'%')
</if>
</select>
<select id="getProjectById" resultMap="ParamsManifestEOResultMapForCopy">
select tmp_tb.* from(
select
@@ -1,7 +1,15 @@
package com.jero.modules.todoCenter.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.modules.todoCenter.service.IParamsManifestTodoCenterService;
import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -16,4 +24,16 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/todoCenter/params/manifest")
@Slf4j
public class ParamsManifestTodoCenterController {
@Autowired
private IParamsManifestTodoCenterService paramsManifestTodoCenterService;
@AutoLog(value = "分页查询")
@ApiOperation(value="分页查询", notes="分页查询")
@GetMapping(value = "/page")
// @RequiresPermissions("params:collectManifest:list")
public Result<?> page(ParamsManifestTodoCenterEOPage pageVO) {
IPage page = paramsManifestTodoCenterService.queryPage(pageVO);
return Result.OK(page);
}
}
@@ -2,6 +2,8 @@ package com.jero.modules.todoCenter.entity;
import lombok.Data;
import java.util.Date;
@Data
public class ParamsManifestTodoCenterEO {
/**
@@ -25,18 +27,21 @@ public class ParamsManifestTodoCenterEO {
private String projectVersion;
/**
* 待发起数量
* 待发起数量 包括状态:待发起收集,变更,工程接口人退回
*/
private Integer waitCollectNum;
/**
* 待工程接口人处理数量(即待分配)
* 待工程接口人处理数量(即待分配) 包括状态:待工程接口人处理,填写人退回
*/
private Integer waitSdtNum;
/**
* 待填写数量
* 待填写数量 包括状态:待填写,认证工程师退回
*/
private Integer waitFillNum;
private Date createTime;
private String state;
private String projectId;
}
@@ -1,5 +1,8 @@
package com.jero.modules.todoCenter.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage;
/**
* @Author: liyawei
* @Description:
@@ -7,4 +10,7 @@ package com.jero.modules.todoCenter.service;
*/
public interface IParamsManifestTodoCenterService {
// 分页查询当前登录人待办清单列表
IPage queryPage(ParamsManifestTodoCenterEOPage pageVO);
}
@@ -1,8 +1,33 @@
package com.jero.modules.todoCenter.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.system.vo.LoginUser;
import com.jero.modules.cert.collect.entity.ParamsCollectManifestEO;
import com.jero.modules.cert.collect.enums.CollectManifestStateEnum;
import com.jero.modules.cert.collect.enums.CollectManifestUserTypeEnum;
import com.jero.modules.cert.collect.enums.ManifestStateEnum;
import com.jero.modules.cert.collect.mapper.ParamsCollectManifestEOMapper;
import com.jero.modules.cert.collect.mapper.ParamsManifestEOMapper;
import com.jero.modules.project.entity.ProjectLibraryBase;
import com.jero.modules.project.entity.ProjectRelatedPersonnel;
import com.jero.modules.project.mapper.ProjectLibraryBaseMapper;
import com.jero.modules.project.service.IProjectRelatedPersonnelService;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import com.jero.modules.todoCenter.entity.ParamsManifestTodoCenterEO;
import com.jero.modules.todoCenter.service.IParamsManifestTodoCenterService;
import com.jero.modules.todoCenter.vo.ParamsManifestTodoCenterEOPage;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author: liyawei
* @Description:
@@ -10,4 +35,275 @@ import org.springframework.stereotype.Service;
*/
@Service
public class ParamsManifestTodoCenterServiceImpl implements IParamsManifestTodoCenterService {
@Autowired
private ProjectLibraryBaseMapper projectLibraryBaseMapper;
@Autowired
private ISysUserService sysUserService;
@Autowired
private IProjectRelatedPersonnelService projectRelatedPersonnelService;
@Autowired
private ParamsCollectManifestEOMapper paramsCollectManifestEOMapper;
@Autowired
private ParamsManifestEOMapper paramsManifestEOMapper;
@Override
public IPage queryPage(ParamsManifestTodoCenterEOPage pageVO) {
// 查询所有项目下的 状态为收集中的清单
pageVO.setState(ManifestStateEnum.COLLECTING.getValue());
List<ParamsManifestTodoCenterEO> paramsManifestEOListAll = paramsManifestEOMapper.listForTodoCenter(pageVO);
// 筛选出当前登录人能在清单中是homo/sdt/dre角色的清单,并分页
LambdaQueryWrapper<ProjectLibraryBase> projectLibraryBaseLambdaQueryWrapper = new LambdaQueryWrapper<>();
List<ProjectLibraryBase> projectLibraryBaseListAll = projectLibraryBaseMapper.selectList(projectLibraryBaseLambdaQueryWrapper);
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 获取当前登录用户
List<ParamsManifestTodoCenterEO> paramsManifestEOList = new ArrayList<>();
List<ProjectLibraryBase> projectLibraryBaseList = new ArrayList<>();
Map<String, Boolean> manifestUserTypeOfHomo = new HashMap<>();
String userType = "";
for(ParamsManifestTodoCenterEO paramsManifestEO : paramsManifestEOListAll) {
// 判断是不是homo角色
projectLibraryBaseList = projectLibraryBaseListAll.stream().filter(e->paramsManifestEO.getProjectId().equals(e.getId())).collect(Collectors.toList());
userType = getLoginUserTypeOfHomo(projectLibraryBaseList, loginUser);
if(StringUtils.isNotBlank(userType)) {
paramsManifestEOList.add(paramsManifestEO);
manifestUserTypeOfHomo.put(paramsManifestEO.getId(), true);
continue;
} else {
manifestUserTypeOfHomo.put(paramsManifestEO.getId(), false);
}
// 查询清单的所有参数项
ParamsCollectManifestEO paramsCollectManifestEO = new ParamsCollectManifestEO();
paramsCollectManifestEO.setParamsManifestId(paramsManifestEO.getId());
List<ParamsCollectManifestEO> pcmList = paramsCollectManifestEOMapper.listInfo(paramsCollectManifestEO);
// 判断是不是sdt角色
userType = getLoginUserTypeOfSdt(pcmList, loginUser);
if(StringUtils.isNotBlank(userType)) {
paramsManifestEOList.add(paramsManifestEO);
continue;
}
// 判断是不是dre角色
userType = getLoginUserTypeOfDre(pcmList, loginUser);
if(StringUtils.isNotBlank(userType)) {
paramsManifestEOList.add(paramsManifestEO);
continue;
}
}
// 分页
paramsManifestEOList = paramsManifestEOList.stream()
.sorted(Comparator.comparing(ParamsManifestTodoCenterEO::getCreateTime).reversed())
.collect(Collectors.toList());
List<ParamsManifestTodoCenterEO> result = new ArrayList<>();
int pageNo = pageVO.getPageNo();
int pageSize = pageVO.getPageSize();
IPage page = new Page(pageNo, pageSize);
page.setTotal(paramsManifestEOList.size());
int subSize = pageVO.getPageSize(); // 每页记录数
int subCount = paramsManifestEOList.size(); // 总记录数
int subPageTotal = (subCount / subSize) + ((subCount % subSize > 0) ? 1 : 0); //总页数
// 分页计算
int fromIndex = (pageNo-1) * subSize;
int toIndex = ((pageNo == subPageTotal) ? subCount : (pageNo * subSize));
if( fromIndex <= subCount && toIndex <= subCount) {
result = paramsManifestEOList.subList(fromIndex, toIndex);
} else {
result = new ArrayList();
}
// 统计清单中的待办参数数据
List<ParamsManifestTodoCenterEO> records = getStatistics(result, manifestUserTypeOfHomo, loginUser);
page.setRecords(records);
return page;
}
public List<ParamsManifestTodoCenterEO> getStatistics(List<ParamsManifestTodoCenterEO> paramsManifestEOList, Map<String, Boolean> manifestUserTypeOfHomo, LoginUser loginUser) {
List<ParamsManifestTodoCenterEO> paramsManifestTodoCenterEOList = new ArrayList<>();
for(ParamsManifestTodoCenterEO paramsManifestTodoCenterEO : paramsManifestEOList) {
// 查询清单的所有参数项
ParamsCollectManifestEO paramsCollectManifestEO = new ParamsCollectManifestEO();
paramsCollectManifestEO.setParamsManifestId(paramsManifestTodoCenterEO.getId());
List<ParamsCollectManifestEO> pcmList = paramsCollectManifestEOMapper.listInfo(paramsCollectManifestEO);
int count = 0;
// 统计待发起数量 包括状态:待发起收集,变更,工程接口人退回
if (manifestUserTypeOfHomo.get(paramsManifestTodoCenterEO.getId())) {
count = (int) pcmList.stream().filter(e-> CollectManifestStateEnum.WAIT_COLLECT.getValue().equals(e.getState())
|| CollectManifestStateEnum.SDT_BACK.getValue().equals(e.getState())
|| CollectManifestStateEnum.CHANGE.getValue().equals(e.getState())).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitCollectNum(count);
}
}
// 统计待分配数量 包括状态:待工程接口人处理,填写人退回
count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_SDT.getValue().equals(e.getState())
|| CollectManifestStateEnum.DRE_BACK.getValue().equals(e.getState()))
&& loginUser.getUsername().equals(e.getSdt())).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitSdtNum(count);
}
// 统计待填写数量 包括状态:待填写,认证工程师退回
count = (int) pcmList.stream().filter(e-> (CollectManifestStateEnum.WAIT_FILL.getValue().equals(e.getState())
|| CollectManifestStateEnum.CERT_BACK.getValue().equals(e.getState()))
&& loginUser.getUsername().equals(e.getDre())).count();
if (count > 0) {
paramsManifestTodoCenterEO.setWaitFillNum(count);
}
paramsManifestTodoCenterEOList.add(paramsManifestTodoCenterEO);
}
return paramsManifestTodoCenterEOList;
}
/**
* 根据项目id,清单id查询当前登录人的Homo角色
* @param projectId
* @param paramsManifestId
* @return
*/
public List<String> getLoginUserTypes(String projectId, String paramsManifestId, LoginUser loginUser) {
List<String> userTypeList = new ArrayList<>(); // 一个用户可以有多个用户类型
// LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // 获取当前登录用户
// 查询项目下所有责任领域下的 homo人员
List<ProjectLibraryBase> projectLibraryBaseList = projectLibraryBaseMapper.queryById(projectId);
List<String> homoList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(projectLibraryBaseList)) {
String homoIdStr = projectLibraryBaseList.get(0).getCertificationEngineer();
if (StringUtils.isNotEmpty(homoIdStr)) {
List<String> homoIdList = Arrays.asList(homoIdStr.split(",")).stream().distinct().collect(Collectors.toList());
homoList = sysUserService.listByIds(homoIdList).stream().map(SysUser::getUsername).collect(Collectors.toList());
}
}
// 查询项目下所有责任领域下的 sdt人员
List<String> sdtList = new ArrayList<>();
LambdaQueryWrapper<ProjectRelatedPersonnel> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProjectRelatedPersonnel::getProjectId, projectId);
List<ProjectRelatedPersonnel> prpList = projectRelatedPersonnelService.list(queryWrapper);
// String homoIdStr = prpList.stream().map(e -> e.getCertificationEngineer()).collect(Collectors.joining(","));
String sdtIdStr = prpList.stream().map(e -> e.getEngineeringInterfacePerson()).collect(Collectors.joining(","));
// 项目下有homo-->不一定有sdt
if(StringUtils.isNotBlank(sdtIdStr)) {
List<String> sdtIdList = Arrays.asList(sdtIdStr.split(",")).stream().distinct().collect(Collectors.toList());
sdtList = sysUserService.listByIds(sdtIdList).stream().map(SysUser::getUsername).collect(Collectors.toList());
}
// 查询项目下参数清单下收集参数项中的 sdt,dre人员
ParamsCollectManifestEO paramsCollectManifestEO = new ParamsCollectManifestEO();
paramsCollectManifestEO.setParamsManifestId(paramsManifestId);
List<ParamsCollectManifestEO> pcmList = paramsCollectManifestEOMapper.listInfo(paramsCollectManifestEO);
List<String> sdtListOfPCM = pcmList.stream()
.filter(e->StringUtils.isNotEmpty(e.getSdt()))
.map(ParamsCollectManifestEO::getSdt)
.distinct()
.collect(Collectors.toList());
sdtList.addAll(sdtListOfPCM); // 需要取并集,因为存在参数项开始收集但 人员相关名单中sdt被修改的情况
List<String> dreListOfPCM = pcmList.stream()
.filter(e->StringUtils.isNotEmpty(e.getDre()))
.map(ParamsCollectManifestEO::getDre)
.distinct()
.collect(Collectors.toList());
String loginUserName = loginUser.getUsername().toLowerCase();
homoList = toLowerCaseOfList(homoList);
sdtList = toLowerCaseOfList(sdtList);
dreListOfPCM = toLowerCaseOfList(dreListOfPCM);
if (homoList.contains(loginUserName)) {
userTypeList.add(CollectManifestUserTypeEnum.HOMO.getValue());
}
if (sdtList.contains(loginUserName)) {
userTypeList.add(CollectManifestUserTypeEnum.SDT.getValue());
}
if (dreListOfPCM.contains(loginUserName)) {
userTypeList.add(CollectManifestUserTypeEnum.DRE.getValue());
}
return userTypeList;
}
public String getLoginUserTypeOfHomo(List<ProjectLibraryBase> projectLibraryBaseList, LoginUser loginUser) {
String userType = ""; // 一个用户可以有多个用户类型
// 查询项目下的 homo人员
List<String> homoList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(projectLibraryBaseList)) {
String homoIdStr = projectLibraryBaseList.get(0).getCertificationEngineer();
if (StringUtils.isNotEmpty(homoIdStr)) {
List<String> homoIdList = Arrays.asList(homoIdStr.split(",")).stream().distinct().collect(Collectors.toList());
homoList = sysUserService.listByIds(homoIdList).stream().map(SysUser::getUsername).collect(Collectors.toList());
}
}
String loginUserName = loginUser.getUsername().toLowerCase();
homoList = toLowerCaseOfList(homoList);
if (homoList.contains(loginUserName)) {
userType = CollectManifestUserTypeEnum.HOMO.getValue();
}
return userType;
}
public String getLoginUserTypeOfSdt(List<ParamsCollectManifestEO> pcmList, LoginUser loginUser) {
String userType = ""; // 一个用户可以有多个用户类型
List<String> sdtListOfPCM = pcmList.stream()
.filter(e->StringUtils.isNotEmpty(e.getSdt()))
.map(ParamsCollectManifestEO::getSdt)
.distinct()
.collect(Collectors.toList());
String loginUserName = loginUser.getUsername().toLowerCase();
sdtListOfPCM = toLowerCaseOfList(sdtListOfPCM);
if (sdtListOfPCM.contains(loginUserName)) {
userType = CollectManifestUserTypeEnum.SDT.getValue();
}
return userType;
}
public String getLoginUserTypeOfDre(List<ParamsCollectManifestEO> pcmList, LoginUser loginUser) {
String userType = ""; // 一个用户可以有多个用户类型
List<String> dreListOfPCM = pcmList.stream()
.filter(e->StringUtils.isNotEmpty(e.getDre()))
.map(ParamsCollectManifestEO::getDre)
.distinct()
.collect(Collectors.toList());
String loginUserName = loginUser.getUsername().toLowerCase();
dreListOfPCM = toLowerCaseOfList(dreListOfPCM);
if (dreListOfPCM.contains(loginUserName)) {
userType = CollectManifestUserTypeEnum.DRE.getValue();
}
return userType;
}
private List<String> toLowerCaseOfList(List<String> list) {
List<String> newList = list;
if (CollectionUtil.isNotEmpty(list)) {
newList = list.stream().map(String::toLowerCase).collect(Collectors.toList());
}
return newList;
}
}
@@ -0,0 +1,45 @@
package com.jero.modules.todoCenter.vo;
import lombok.Data;
@Data
public class ParamsManifestTodoCenterEOPage {
/**
* 参数清单id
*/
private String id;
/**
* 相关项目名称
*/
private String projectName;
/**
* 参数清单标题
*/
private String title;
/**
* 相关项目版本
*/
private String projectVersion;
/**
* 待发起数量 包括状态:待发起收集,变更,工程接口人退回
*/
private Integer waitCollectNum;
/**
* 待工程接口人处理数量(即待分配) 包括状态:待工程接口人处理,填写人退回
*/
private Integer waitSdtNum;
/**
* 待填写数量 包括状态:待填写,认证工程师退回
*/
private Integer waitFillNum;
private int pageNo;
private int pageSize;
private String state;
}