fix:MES待办列表查询

This commit is contained in:
2026-03-26 20:16:48 +08:00
parent 314bad14da
commit 3ed6e214af
4 changed files with 73 additions and 20 deletions

View File

@@ -2,6 +2,8 @@ package com.sdm.project.model.req;
import lombok.Data;
import java.util.List;
@Data
public class DemandQryReq {
/**
@@ -9,16 +11,16 @@ public class DemandQryReq {
*/
private String isMoldMaking;
/**
* 物料号
* 物料号列表
*/
private String materialNo;
private List<String> materialNoList;
/**
* 项目号对应simulation_node的nodeCode
* 项目号列表对应simulation_node的nodeCode
*/
private String projectCode;
private List<String> projectCodeList;
/**
* 工作空间编码对应simulation_node的nodeCode
* 工作空间编码列表对应simulation_node的nodeCode
*/
private String workspaceCode;
private List<String> workspaceCodeList;
}

View File

@@ -202,4 +202,9 @@ public class SpdmDemandVo extends BaseEntity {
@Schema(description= "关联的待办的结果文件路径")
private List<String> reportFileUrlList;
/**
* 执行人user_id列表逗号分隔
*/
private String eUserIds;
}

View File

@@ -1549,27 +1549,57 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
.distinct()
.collect(Collectors.toList());
// 收集所有eUserIds逗号分隔的字符串拆解成列表
List<Long> eUserIds = demandVoList.stream()
.map(SpdmDemandVo::getEUserIds)
.filter(StringUtils::isNotBlank)
.flatMap(eUserIdsStr -> Arrays.stream(eUserIdsStr.split(",")))
.map(String::trim)
.filter(StringUtils::isNotBlank)
.distinct()
.map(Long::valueOf)
.collect(Collectors.toList());
// 合并所有需要查询的用户ID
Set<Long> allUserIds = new HashSet<>();
allUserIds.addAll(pUserIds);
allUserIds.addAll(eUserIds);
// 批量查询用户信息
Map<Long, List<CIDUserResp>> userMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(pUserIds)) {
Map<Long, CIDUserResp> userMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(allUserIds)) {
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(
UserQueryReq.builder().userIds(pUserIds).build()
UserQueryReq.builder().userIds(new ArrayList<>(allUserIds)).build()
);
if (cidUserResp.isSuccess() && CollectionUtils.isNotEmpty(cidUserResp.getData())) {
userMap = cidUserResp.getData().stream().collect(Collectors.groupingBy(CIDUserResp::getUserId));
userMap = cidUserResp.getData().stream()
.collect(Collectors.toMap(CIDUserResp::getUserId, u -> u, (u1, u2) -> u1));
}
}
// 遍历设置pMemberList和文件信息
// 遍历设置pMemberList、eMemberList和文件信息
for (SpdmDemandVo demandVo : demandVoList) {
// 设置pMemberList
if (StringUtils.isNotBlank(demandVo.getPUserId())) {
Long userId = Long.valueOf(demandVo.getPUserId());
if (CollectionUtils.isNotEmpty(userMap.get(userId))) {
demandVo.setPMemberList(userMap.get(userId));
CIDUserResp user = userMap.get(userId);
if (user != null) {
demandVo.setPMemberList(Collections.singletonList(user));
}
}
// 设置eMemberList
if (StringUtils.isNotBlank(demandVo.getEUserIds())) {
List<CIDUserResp> eMemberList = Arrays.stream(demandVo.getEUserIds().split(","))
.map(String::trim)
.filter(StringUtils::isNotBlank)
.map(Long::valueOf)
.map(userMap::get)
.filter(Objects::nonNull)
.collect(Collectors.toList());
demandVo.setEMemberList(eMemberList);
}
// 设置文件信息
QueryDirReq dirReq = new QueryDirReq();
dirReq.setCurrent(1);

View File

@@ -191,16 +191,20 @@
is_mold.property_value AS isMoldMaking,
sdm.user_id AS pUserId,
project_node.nodeCode AS projectCode,
workspace_node.nodeCode AS workspaceCode
workspace_node.nodeCode AS workspaceCode,
euser.eUserIds AS eUserIds
FROM simulation_demand sd
INNER JOIN simulation_demand_extra is_mold ON sd.uuid = is_mold.demand_id AND is_mold.property_name = 'isMoldMaking'
<if test="req.isMoldMaking != null">
AND is_mold.property_value = #{req.isMoldMaking}
</if>
<choose>
<when test="req.materialNo != null and req.materialNo != ''">
<when test="req.materialNoList != null and req.materialNoList.size() > 0">
INNER JOIN simulation_demand_extra mold_material ON sd.uuid = mold_material.demand_id AND mold_material.property_name = 'materialNo'
AND mold_material.property_value = #{req.materialNo}
AND mold_material.property_value IN
<foreach collection="req.materialNoList" item="materialNo" open="(" separator="," close=")">
#{materialNo}
</foreach>
</when>
<otherwise>
LEFT JOIN simulation_demand_extra mold_material ON sd.uuid = mold_material.demand_id AND mold_material.property_name = 'materialNo'
@@ -208,23 +212,35 @@
</choose>
LEFT JOIN simulation_demand_member sdm ON sd.uuid = sdm.demand_id AND sdm.type = 0
<choose>
<when test="req.projectCode != null and req.projectCode != ''">
<when test="req.projectCodeList != null and req.projectCodeList.size() > 0">
INNER JOIN simulation_node project_node ON sd.project_id = project_node.uuid
AND project_node.nodeCode = #{req.projectCode}
AND project_node.nodeCode IN
<foreach collection="req.projectCodeList" item="projectCode" open="(" separator="," close=")">
#{projectCode}
</foreach>
</when>
<otherwise>
LEFT JOIN simulation_node project_node ON sd.project_id = project_node.uuid
</otherwise>
</choose>
<choose>
<when test="req.workspaceCode != null and req.workspaceCode != ''">
<when test="req.workspaceCodeList != null and req.workspaceCodeList.size() > 0">
INNER JOIN simulation_node workspace_node ON sd.workspace_id = workspace_node.uuid
AND workspace_node.nodeCode = #{req.workspaceCode}
AND workspace_node.nodeCode IN
<foreach collection="req.workspaceCodeList" item="workspaceCode" open="(" separator="," close=")">
#{workspaceCode}
</foreach>
</when>
<otherwise>
LEFT JOIN simulation_node workspace_node ON sd.workspace_id = workspace_node.uuid
</otherwise>
</choose>
LEFT JOIN (
SELECT t.demand_id, GROUP_CONCAT(DISTINCT tm.user_id) AS eUserIds
FROM simulation_task t
INNER JOIN simulation_task_member tm ON t.uuid = tm.task_id AND tm.type = 1
GROUP BY t.demand_id
) euser ON sd.uuid = euser.demand_id
</select>
<select id="getDemandListNoPermission" resultType="com.sdm.project.model.vo.SpdmDemandVo">