Merge remote-tracking branch 'origin/main'

This commit is contained in:
2026-03-18 10:14:18 +08:00
17 changed files with 360 additions and 66 deletions

View File

@@ -13,8 +13,6 @@ public class LyricParamConstants {
public static final String SYSTEM_CODE = "spdm";
// 表名称
public static final String TABLE_NAME = "oa_three_d_review";
// 字段名称
public static final String COLUMN_NAME = "simulation_table";
// 权限编码
public static final String FILE_POWER = "2456236750149124114";
// 系统id
@@ -23,10 +21,16 @@ public class LyricParamConstants {
public static final Long FORM_ID = 1847115435993071616L;
// 有限元控件id
public static final Long FINITE_ELEMENT_COMPONENT_INST_ID = 8000004142460000204L;
// 有限元字段名称
public static final String FINITE_ELEMENT_COLUMN_NAME = "simulation_table";
// 机器人控件id
public static final Long ROBOT_COMPONENT_INST_ID = 8000004142460000204L;
public static final Long ROBOT_COMPONENT_INST_ID = 8000004142460000228L;
// 机器人字段名称
public static final String ROBOT_COLUMN_NAME = "robot_table";
// 公差控件id
public static final Long TOLERANCE_COMPONENT_INST_ID = 8000004142460000204L;
public static final Long TOLERANCE_COMPONENT_INST_ID = 8000004144780000369L;
// 公差字段名称
public static final String TOLERANCE_COLUMN_NAME = "checkproducts_enclosure";
}

View File

@@ -31,7 +31,7 @@ public enum FileBizTypeEnum {
* 云图文件
*/
@Schema(description = "云图文件", example = "5")
CLOUD_FILE(5, "文件"),
CLOUD_FILE(5, "图文件"),
/**
* 流程脚本
@@ -128,12 +128,4 @@ public enum FileBizTypeEnum {
return value;
}
public static String getDirNameByValue(int value) {
for (FileBizTypeEnum fileBizTypeEnum : values()) {
if (fileBizTypeEnum.value == value) {
return fileBizTypeEnum.getDirName();
}
}
return null;
}
}

View File

@@ -15,72 +15,108 @@ public class TagReq {
@Schema(description = "标签1")
private String tag1;
@Schema(description = "标签1编号")
private String tag1Code;
@Schema(description = "标签1名称")
private String tag1Name;
@Schema(description = "标签2")
private String tag2;
@Schema(description = "标签2编号")
private String tag2Code;
@Schema(description = "标签2名称")
private String tag2Name;
@Schema(description = "标签3")
private String tag3;
@Schema(description = "标签3编号")
private String tag3Code;
@Schema(description = "标签3名称")
private String tag3Name;
@Schema(description = "标签4")
private String tag4;
@Schema(description = "标签4编号")
private String tag4Code;
@Schema(description = "标签4名称")
private String tag4Name;
@Schema(description = "标签5")
private String tag5;
@Schema(description = "标签5编号")
private String tag5Code;
@Schema(description = "标签5名称")
private String tag5Name;
@Schema(description = "标签6")
private String tag6;
@Schema(description = "标签6编号")
private String tag6Code;
@Schema(description = "标签6名称")
private String tag6Name;
@Schema(description = "标签7")
private String tag7;
@Schema(description = "标签7编号")
private String tag7Code;
@Schema(description = "标签7名称")
private String tag7Name;
@Schema(description = "标签8")
private String tag8;
@Schema(description = "标签8编号")
private String tag8Code;
@Schema(description = "标签8名称")
private String tag8Name;
@Schema(description = "标签9")
private String tag9;
@Schema(description = "标签9编号")
private String tag9Code;
@Schema(description = "标签9名称")
private String tag9Name;
@Schema(description = "标签10")
private String tag10;
@Schema(description = "标签10编号")
private String tag10Code;
@Schema(description = "标签10名称")
private String tag10Name;
@Schema(description= "任务ID")
private String taskId;
@Schema(description= "任务编号")
private String taskCode;
@Schema(description= "任务名称")
private String taskName;
@Schema(description= "算例ID")
private String runId;
@Schema(description= "算例编号")
private String runCode;
@Schema(description= "算例名称")
private String runName;
}

View File

@@ -38,4 +38,7 @@ public class SimulationTaskResultCurveResp extends BaseResp {
@Schema(description = "排序号")
private Integer sortOrder;
@Schema(description = "创建人")
private Long creatorId;
}

View File

@@ -39,6 +39,10 @@ public class SpdmTaskVo extends BaseEntity {
* 当前节点类型
*/
private String nodeType;
/**
* 节点编码
*/
private String nodeCode;
/**

View File

@@ -4,12 +4,15 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.system.LaunchApproveReq;
import com.sdm.common.entity.req.task.TaskExportExcelFormat;
import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.common.feign.inter.project.ISimulationProjectFeignClient;
import com.sdm.common.log.annotation.SysLog;
import com.sdm.project.model.bo.ModifyProjectNode;
import com.sdm.project.model.req.ProjectTreeListReq;
import com.sdm.project.model.req.ProjectTreeTagReq;
import com.sdm.project.model.req.SpdmNodeReq;
import com.sdm.project.model.req.WorkspaceReportListReq;
import com.sdm.project.model.resp.WorkspaceReportListResp;
import com.sdm.project.service.IProjectService;
import com.sdm.project.service.ITaskService;
import io.swagger.v3.oas.annotations.Operation;
@@ -21,6 +24,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping(value = "/project")
@@ -107,4 +111,10 @@ public class SimulationProjectController implements ISimulationProjectFeignClien
return projectService.queryDesignVersions(projectId, phaseId);
}
@PostMapping("/getWorkspaceReportList")
@Operation(summary = "查询工位下的报告列表", description = "根据工位id和tagMap配置查询工位下的报告文件列表")
public SdmResponse<PageDataResp<List<WorkspaceReportListResp>>> getWorkspaceReportList(@RequestBody @Validated WorkspaceReportListReq req) {
return projectService.getWorkspaceReportList(req);
}
}

View File

@@ -10,4 +10,8 @@ public class SpdmMergeQueryNodeReq {
@Schema(description = "查询类型")
private String type;
// 返回值类型1-name2-code
@Schema(description = "返回值类型")
private Integer resultType = 1;
}

View File

@@ -152,6 +152,9 @@ public class SpdmTaskListReq {
private List<String> filterDiscipline;
// 二次查询过滤学科
private String discipline;
private String taskId;
/**

View File

@@ -0,0 +1,28 @@
package com.sdm.project.model.req;
import com.sdm.project.model.bo.TaskNodeTag;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Data
@Schema(description = "工位报告列表查询请求")
public class WorkspaceReportListReq {
@NotNull(message = "workspaceId不能为空")
@Schema(description = "工位id")
private String workspaceId;
@Schema(description = "标签映射配置用于指定哪个tag对应工位")
private List<TaskNodeTag> tagMap;
@NotNull(message = "当前页码不能为空")
@Schema(description = "当前页码")
private Integer current;
@NotNull(message = "每页数量不能为空")
@Schema(description = "每页数量")
private Integer size;
}

View File

@@ -0,0 +1,38 @@
package com.sdm.project.model.resp;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@Schema(description = "工位报告列表响应")
public class WorkspaceReportListResp {
@Schema(description = "文件id")
private Long fileId;
@Schema(description = "文件名称")
private String originalName;
@Schema(description = "文件大小(格式化后)")
private String formatFileSize;
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@Schema(description = "所属任务名称")
private String taskName;
@Schema(description = "任务uuid")
private String taskUuid;
@Schema(description = "审批状态")
private String approvalStatus;
@Schema(description = "创建人")
private Long creator;
private String creatorName;
}

View File

@@ -4,8 +4,10 @@ import com.alibaba.fastjson2.JSONObject;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.system.LaunchApproveReq;
import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.project.model.bo.ModifyProjectNode;
import com.sdm.project.model.req.*;
import com.sdm.project.model.resp.WorkspaceReportListResp;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Service;
@@ -41,4 +43,6 @@ public interface IProjectService {
void editTaskList(List<TaskEditNodeReq> taskEditNodeReqList);
SdmResponse<PageDataResp<List<WorkspaceReportListResp>>> getWorkspaceReportList(WorkspaceReportListReq req);
}

View File

@@ -532,6 +532,8 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
// }
req.setCreator(usernameToUserIdMap.get(todo.getIntroduceBy()));
req.setTenantId(tenantId);
// 20260318 需求的描述也要拉取
req.setDescription(todo.getDescribes());
// 补充项目/阶段/工位ID
@@ -1620,10 +1622,13 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
Integer pushType = req.getPushType();
if (pushType == 1) {
uploadFileReq.setComponentInstId(LyricParamConstants.FINITE_ELEMENT_COMPONENT_INST_ID);
uploadFileReq.setColumnName(LyricParamConstants.FINITE_ELEMENT_COLUMN_NAME);
}else if (pushType == 2) {
uploadFileReq.setComponentInstId(LyricParamConstants.ROBOT_COMPONENT_INST_ID);
uploadFileReq.setColumnName(LyricParamConstants.ROBOT_COLUMN_NAME);
}else {
uploadFileReq.setComponentInstId(LyricParamConstants.TOLERANCE_COMPONENT_INST_ID);
uploadFileReq.setColumnName(LyricParamConstants.TOLERANCE_COLUMN_NAME);
}
uploadFileReq.setWaterMarkFlag(false);
uploadFileReq.setWaterMarkContent(LyricParamConstants.SYSTEM_CODE);
@@ -1631,7 +1636,6 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
uploadFileReq.setSysId(LyricParamConstants.SYSTEM_ID);
uploadFileReq.setFormId(LyricParamConstants.FORM_ID);
uploadFileReq.setTableName(LyricParamConstants.TABLE_NAME);
uploadFileReq.setColumnName(LyricParamConstants.COLUMN_NAME);
uploadFileReq.setXmh(req.getProjectCode());
uploadFileReq.setGwh(req.getWorkspaceCode());
uploadFileReq.setFiles(Collections.singletonList(zipFilePath));

View File

@@ -3,7 +3,9 @@ package com.sdm.project.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageInfo;
import com.sdm.common.common.ResultCode;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext;
@@ -18,10 +20,13 @@ import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat;
import com.sdm.common.entity.req.task.TaskTreeExportExcelParam;
import com.sdm.common.entity.resp.capability.FlowTemplateResp;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.common.entity.resp.data.SimulationTaskResultCurveResp;
import com.sdm.common.entity.resp.project.SpdmTaskVo;
import com.sdm.common.entity.resp.project.TaskNodeExtraPo;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.feign.impl.capability.SimulationFlowFeignClientImpl;
import com.sdm.common.feign.impl.data.DataAnalysisFeignClientImpl;
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
import com.sdm.common.feign.impl.system.ApproveFeignClientImpl;
import com.sdm.common.feign.impl.system.MessageFeignClientImpl;
@@ -32,6 +37,7 @@ import com.sdm.common.log.constants.OperateTypeConstants;
import com.sdm.common.log.dto.SysLogDTO;
import com.sdm.common.service.BaseService;
import com.sdm.common.service.TagMapService;
import com.sdm.common.utils.PageUtils;
import com.sdm.common.utils.RandomUtil;
import com.sdm.common.utils.SystemOperate;
import com.sdm.common.utils.excel.ExcelUtil;
@@ -47,6 +53,7 @@ import com.sdm.project.model.bo.*;
import com.sdm.project.model.entity.*;
import com.sdm.project.model.po.*;
import com.sdm.project.model.req.*;
import com.sdm.project.model.resp.WorkspaceReportListResp;
import com.sdm.project.model.vo.SpdmNodeExtraVo;
import com.sdm.project.model.vo.SpdmNodeMemberVo;
import com.sdm.project.model.vo.SpdmNodeVo;
@@ -89,6 +96,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
@Autowired
private DataClientFeignClientImpl dataClientFeignClient;
@Autowired
private DataAnalysisFeignClientImpl dataAnalysisFeignClient;
@Autowired
private ISimulationTaskMemberService simulationTaskMemberService;
@@ -2763,6 +2773,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
@Override
public SdmResponse modifyWithApprove(ModifyProjectNode req) {
log.info("modifyWithApprove executing");
Long tenantId = ThreadLocalContext.getTenantId();
Long userId = ThreadLocalContext.getUserId();
// 如果需要评审 发起评审
@@ -2780,7 +2791,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
// 不需要评审 直接升版 or 不升
// 构造查询任务树的入参
ProjectTreeTagReq getTaskTreeReq = req.getTaskTreeReq;
log.info("获取修改前的任务树开始");
SdmResponse beforeTreeResp = getTaskTree(getTaskTreeReq);
log.info("获取修改前的任务树结束");
// 获取修改前的任务树
String beforeContents = null;
if (beforeTreeResp.getData() != null) {
@@ -2788,12 +2801,16 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
}
// 修改当前策划版本
log.info("修改当前策划版本开始");
SdmResponse response = modify(req);
log.info("修改当前策划版本结束");
if (!response.isSuccess()) {
return response;
} else {
// 获取修改过后的任务树
log.info("获取修改过后的任务树开始");
SdmResponse treeRespond = getTaskTree(getTaskTreeReq);
log.info("获取修改过后的任务树结束");
if (treeRespond.getData() != null) {
String viewContents = JSONObject.toJSONString(treeRespond.getData());
List<SimulationDesignVersions> designVersions = simulationDesignVersionsService.lambdaQuery()
@@ -3684,4 +3701,92 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
return SdmResponse.success(versions);
}
@Override
public SdmResponse<PageDataResp<List<WorkspaceReportListResp>>> getWorkspaceReportList(WorkspaceReportListReq req) {
log.info("查询工位报告列表,参数:{}", req);
// 1. 从tagMap中找到key为workspace的配置获取对应的tag字段名
String workspaceTagField = req.getTagMap().stream()
.filter(tag -> "workspace".equals(tag.getKey()))
.map(TaskNodeTag::getValue)
.findFirst()
.orElse(null);
// 2. 查询simulation_task根据workspaceTagField字段等于workspaceId查询任务列表
List<SimulationTask> taskList = taskMapper.selectList(
new QueryWrapper<SimulationTask>().eq(workspaceTagField, req.getWorkspaceId())
);
if (CollectionUtils.isEmpty(taskList)) {
log.info("未查询到工位{}下的任务", req.getWorkspaceId());
return SdmResponse.success(new PageDataResp<>());
}
// 3. 构建任务uuid到任务信息的映射
Map<String, SimulationTask> taskMap = taskList.stream()
.collect(Collectors.toMap(SimulationTask::getUuid, t -> t));
// 4. 拼接所有任务uuid批量调用data服务查询报告文件
String taskIds = String.join(",", taskMap.keySet());
List<WorkspaceReportListResp> allReports = new ArrayList<>();
try {
GetSimulationTaskFileReq fileReq = new GetSimulationTaskFileReq();
fileReq.setUuid(taskIds); // 逗号分隔的多个任务id
fileReq.setCurrent(1);
fileReq.setSize(taskList.size() * 1000); // 设置足够大的分页
fileReq.setFileTypeDictClass(FileDictTagEnum.FILE_TYPE.getDictClass());
fileReq.setFileTypeDictValue(String.valueOf(FileBizTypeEnum.REPORT_FILE.getValue()));
fileReq.setDictTags(Arrays.asList(FileDictTagEnum.FILE_TYPE.getDictClassFieldName(), FileDictTagEnum.FILE_TYPE.getDictValueFieldName()));
TagReq tagReq = new TagReq();
tagReq.setTaskId(taskIds); // 逗号分隔的多个任务id
fileReq.setTagReq(tagReq);
SdmResponse<PageDataResp<List<SimulationTaskResultCurveResp>>> response = dataAnalysisFeignClient.getSimulationTaskFile(fileReq);
if (response != null && response.isSuccess() && response.getData() != null) {
List<SimulationTaskResultCurveResp> files = response.getData().getData();
if (CollectionUtils.isNotEmpty(files)) {
for (SimulationTaskResultCurveResp file : files) {
// 从tagReq中获取文件所属的任务id
String taskUuid = file.getTagReq() != null ? file.getTagReq().getTaskId() : null;
SimulationTask task = taskMap.get(taskUuid);
if (task != null) {
WorkspaceReportListResp reportResp = new WorkspaceReportListResp();
reportResp.setFileId(file.getId());
reportResp.setOriginalName(file.getOriginalName());
reportResp.setFormatFileSize(file.getFormatFileSize());
reportResp.setCreateTime(file.getCreateTime());
reportResp.setTaskName(task.getTaskName());
reportResp.setTaskUuid(task.getUuid());
reportResp.setApprovalStatus(String.valueOf(task.getApprovalStatus()));
reportResp.setCreator(file.getCreatorId());
allReports.add(reportResp);
}
}
}
}
} catch (Exception e) {
log.error("批量查询工位{}的报告文件失败", req.getWorkspaceId(), e);
}
// 5. 分页处理
int total = allReports.size();
int fromIndex = (req.getCurrent() - 1) * req.getSize();
int toIndex = Math.min(fromIndex + req.getSize(), total);
List<WorkspaceReportListResp> pagedList;
if (fromIndex >= total) {
pagedList = new ArrayList<>();
} else {
pagedList = allReports.subList(fromIndex, toIndex);
}
PageInfo<WorkspaceReportListResp> pageInfo = new PageInfo<>(pagedList);
pageInfo.setTotal(allReports.size());
pageInfo.setPageNum(req.getCurrent());
pageInfo.setPageSize(req.getSize());
return PageUtils.getJsonObjectSdmResponse(pagedList, pageInfo);
}
}

View File

@@ -45,6 +45,7 @@ import com.sdm.common.feign.impl.flowable.FlowableClientFeignClientImpl;
import com.sdm.common.feign.impl.system.ApproveFeignClientImpl;
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
import com.sdm.common.service.DataFileService;
import com.sdm.common.service.FileBizTypeService;
import com.sdm.common.utils.CommonUtils;
import com.sdm.common.utils.PageUtils;
import com.sdm.common.utils.RandomUtil;
@@ -123,6 +124,9 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
@Autowired
private ISimulationExpResultService simulationExpResultService;
@Autowired
FileBizTypeService fileBizTypeService;
@Autowired
SysUserFeignClientImpl sysUserFeignClient;
@@ -1371,7 +1375,6 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
// 审批通过 设置任务进度为100状态关闭
if (NumberConstants.TWO == approveStatus) {
simulationTask.setProgress(100);
simulationTask.setExeStatus(TaskExeStatusEnum.CLOSED.getCode());
simulationTask.setApprovalStatus(ApprovalStatusEnum.PASSED.getCode());
simulationTask.setExeStatus(TaskExeStatusEnum.COMPLETED.getCode());
simulationTaskService.updateById(simulationTask);
@@ -2812,7 +2815,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
CopyFileToTaskReq copyFileToTaskReq = new CopyFileToTaskReq();
copyFileToTaskReq.setSourceFileId(fileId);
Long parentDirId = getParentDirId(simulationRun.getTaskId(), FileBizTypeEnum.getDirNameByValue(req.getFileType()));
Long parentDirId = getParentDirId(simulationRun.getTaskId(), fileBizTypeService.getFileName(String.valueOf(req.getFileType())));
copyFileToTaskReq.setParentDirId(parentDirId);
SdmResponse response = dataFeignClient.copyFileToTask(copyFileToTaskReq);
if (!response.isSuccess()) {
@@ -2942,7 +2945,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
@Override
public SdmResponse<List<BatchAddFileInfoResp>> batchAddFileInfoForTask(UploadFilesReq req) {
// 3D模型、计算模型、图片文件、曲线文件、仿真报告 获取文件夹名
String dirName = FileBizTypeEnum.getDirNameByValue(req.getFileType());
String dirName = fileBizTypeService.getFileName(String.valueOf(req.getFileType()));
// 获取文件夹id
Long parentId = getParentDirId(req.getUuid(), dirName);
req.setDirId(parentId);

View File

@@ -138,6 +138,9 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
log.warn("新增报工失败任务ID为空请求参数{}", req);
return SdmResponse.failed("任务ID不能为空");
}
if (ObjectUtils.isEmpty(req.getOwner())) {
return SdmResponse.failed("负责人不能为空");
}
try {
@@ -182,7 +185,7 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
/**
* 类型0更新开始时间
*/
private boolean updateStartWork(Long workId, String curDateStr, SpdmWorkReq req) {
private SdmResponse updateStartWork(Long workId, String curDateStr, SpdmWorkReq req) {
// 启动报告 调用EP创建任务接口
// 批次
@@ -223,9 +226,15 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
// 计划开始时间
simulationWork.getPlanBeginTime();
if (ObjectUtils.isEmpty(simulationWork.getPlanBeginTime())) {
return SdmResponse.failed("计划开始时间不能为空");
}
// 计划完成时间
simulationWork.getPlanFinishTime();
if (ObjectUtils.isEmpty(simulationWork.getPlanFinishTime())) {
return SdmResponse.failed("计划完成时间不能为空");
}
// 实际开始时间
@@ -233,6 +242,9 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
// 计划工时
simulationWork.getPlanWorkHour();
if (ObjectUtils.isEmpty(simulationWork.getPlanWorkHour())) {
return SdmResponse.failed("计划工时不能为空");
}
// 标准工时
simulationWork.getPlanWorkHour();
@@ -262,27 +274,36 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
}
return this.lambdaUpdate()
boolean updateFlag = this.lambdaUpdate()
.set(SimulationWork::getBeginTime, curDateStr)
.eq(SimulationWork::getId, workId)
.update();
if (updateFlag) {
return SdmResponse.success();
} else {
return SdmResponse.failed("启动报工失败");
}
}
/**
* 类型1更新完成时间
*/
private boolean updateFinishWork(Long workId, String curDateStr) {
return this.lambdaUpdate()
private SdmResponse updateFinishWork(Long workId, String curDateStr) {
boolean updateFlag = this.lambdaUpdate()
.set(SimulationWork::getFinishTime, curDateStr)
.eq(SimulationWork::getId, workId)
.update();
if (updateFlag) {
return SdmResponse.success();
} else {
return SdmResponse.failed("完成报工失败");
}
}
/**
* 类型2编辑报工
*/
private boolean updateEditWork(SpdmWorkReq req, Long workId) {
private SdmResponse updateEditWork(SpdmWorkReq req, Long workId) {
LambdaUpdateChainWrapper<SimulationWork> updateWrapper = this.lambdaUpdate();
Integer actualWorkHour = req.getActualWorkHour();
@@ -317,7 +338,11 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
syncTaskProgress(workId, actualProgress, shouldProgress);
}
return updateFlag;
if (updateFlag) {
return SdmResponse.success();
} else {
return SdmResponse.failed("编辑报工失败");
}
}
/**
@@ -416,23 +441,23 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
String curDateStr = DateUtil.formatDateTime(DateUtil.date());
// 2. 根据不同类型执行更新逻辑
boolean updateFlag = false;
SdmResponse updateResp = null;
switch (type) {
case WORK_TYPE_START:
updateFlag = updateStartWork(workId, curDateStr, req);
updateResp = updateStartWork(workId, curDateStr, req);
break;
case WORK_TYPE_FINISH:
updateFlag = updateFinishWork(workId, curDateStr);
updateResp = updateFinishWork(workId, curDateStr);
break;
case WORK_TYPE_EDIT:
updateFlag = updateEditWork(req, workId);
updateResp = updateEditWork(req, workId);
break;
default:
updateFlag = false;
updateResp = new SdmResponse();
}
// 3. 返回更新结果
return updateFlag ? SdmResponse.success() : SdmResponse.failed("更新报工信息失败");
return updateResp;
}
@@ -485,35 +510,35 @@ public class SimulationWorkServiceImpl extends ServiceImpl<SimulationWorkMapper,
// 判断是否传了taskId
if (StringUtils.isNotBlank(req.getTaskId())) {
// 传了taskId按原逻辑查询
// 传了taskId查询该任务下当前用户是创建人或负责人的报工
PageHelper.startPage(req.getCurrent(), req.getSize());
workList = this.lambdaQuery().eq(SimulationWork::getTaskId, req.getTaskId()).list();
if (CollectionUtils.isEmpty(workList)) {
PageInfo<SimulationWork> page = new PageInfo<>(workList);
return PageUtils.getJsonObjectSdmResponse(workList, page);
}
// 当前用户需要是报工条目的创建人或负责人
workList = workList.stream().filter(work -> userId.equals(work.getOwner()) || userId.equals(work.getCreator())).collect(Collectors.toList());
workList = this.lambdaQuery()
.eq(SimulationWork::getTaskId, req.getTaskId())
.and(wrapper -> wrapper
.eq(SimulationWork::getOwner, userId)
.or()
.eq(SimulationWork::getCreator, userId))
.list();
} else {
// 不传taskId根据type查询
// 不传taskId根据type查询将filteredTaskIds条件加入SQL
PageHelper.startPage(req.getCurrent(), req.getSize());
if (req.getType() != null && req.getType() == 0) {
// type=0查询当前登录人为creator我确认的
workList = this.lambdaQuery().eq(SimulationWork::getCreator, userId).list();
workList = this.lambdaQuery()
.eq(SimulationWork::getCreator, userId)
.in(filteredTaskIds != null, SimulationWork::getTaskId, filteredTaskIds)
.list();
} else if (req.getType() != null && req.getType() == 1) {
// type=1查询当前登录人为owner我执行的
workList = this.lambdaQuery().eq(SimulationWork::getOwner, userId).list();
workList = this.lambdaQuery()
.eq(SimulationWork::getOwner, userId)
.in(filteredTaskIds != null, SimulationWork::getTaskId, filteredTaskIds)
.list();
} else {
// type为空或其他值查询全部
workList = this.lambdaQuery().list();
}
// 如果有筛选条件过滤workList
if (filteredTaskIds != null && CollectionUtils.isNotEmpty(workList)) {
List<String> finalFilteredTaskIds = filteredTaskIds;
workList = workList.stream()
.filter(work -> finalFilteredTaskIds.contains(work.getTaskId()))
.collect(Collectors.toList());
// type为空或其他值查询全部需要带taskId筛选
workList = this.lambdaQuery()
.in(filteredTaskIds != null, SimulationWork::getTaskId, filteredTaskIds)
.list();
}
}

View File

@@ -1177,6 +1177,10 @@ public class TaskServiceImpl implements ITaskService {
}
StopWatch stopWatch = new StopWatch("所有任务方法计时");
stopWatch.start("查所有任务");
// 二次查询过滤学科
if (StringUtils.isNotBlank(req.getDiscipline())) {
req.setFilterDiscipline(Collections.singletonList(req.getDiscipline()));
}
List<SpdmTaskVo> allTaskList = mapper.optimisedGtTaskList(tenantId, req);
stopWatch.stop();
JSONObject jsonObject = buildEmptyJsonResp(req);
@@ -1286,32 +1290,37 @@ public class TaskServiceImpl implements ITaskService {
}
// 通用的标签设置方法
private void setTagField(TagReq tagReq, String tagValue, String tagName,
private void setTagField(TagReq tagReq, String tagValue, String tagName,String tagCode,
BiConsumer<TagReq, String> tagSetter,
BiConsumer<TagReq, String> tagNameSetter) {
BiConsumer<TagReq, String> tagNameSetter,
BiConsumer<TagReq, String> tagCodeSetter) {
if (tagValue != null) {
tagSetter.accept(tagReq, tagValue);
}
if (tagName != null) {
tagNameSetter.accept(tagReq, tagName);
}
if (tagCode != null) {
tagCodeSetter.accept(tagReq, tagCode);
}
}
private void fillTaskTagReq(List<SpdmNewTaskVo> newTaskList) {
for (SpdmNewTaskVo spdmNewTaskVo : newTaskList) {
TagReq tagReq = new TagReq();
setTagField(tagReq, spdmNewTaskVo.getNewTag1(), spdmNewTaskVo.getTag1(), TagReq::setTag1, TagReq::setTag1Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag2(), spdmNewTaskVo.getTag2(), TagReq::setTag2, TagReq::setTag2Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag3(), spdmNewTaskVo.getTag3(), TagReq::setTag3, TagReq::setTag3Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag4(), spdmNewTaskVo.getTag4(), TagReq::setTag4, TagReq::setTag4Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag5(), spdmNewTaskVo.getTag5(), TagReq::setTag5, TagReq::setTag5Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag6(), spdmNewTaskVo.getTag6(), TagReq::setTag6, TagReq::setTag6Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag7(), spdmNewTaskVo.getTag7(), TagReq::setTag7, TagReq::setTag7Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag8(), spdmNewTaskVo.getTag8(), TagReq::setTag8, TagReq::setTag8Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag9(), spdmNewTaskVo.getTag9(), TagReq::setTag9, TagReq::setTag9Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag10(), spdmNewTaskVo.getTag10(), TagReq::setTag10, TagReq::setTag10Name);
setTagField(tagReq, spdmNewTaskVo.getNewTag1(), spdmNewTaskVo.getTag1(),spdmNewTaskVo.getTag1Code(), TagReq::setTag1, TagReq::setTag1Name, TagReq::setTag1Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag2(), spdmNewTaskVo.getTag2(), spdmNewTaskVo.getTag2Code(),TagReq::setTag2, TagReq::setTag2Name, TagReq::setTag2Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag3(), spdmNewTaskVo.getTag3(), spdmNewTaskVo.getTag3Code(),TagReq::setTag3, TagReq::setTag3Name, TagReq::setTag3Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag4(), spdmNewTaskVo.getTag4(), spdmNewTaskVo.getTag4Code(),TagReq::setTag4, TagReq::setTag4Name, TagReq::setTag4Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag5(), spdmNewTaskVo.getTag5(), spdmNewTaskVo.getTag5Code(),TagReq::setTag5, TagReq::setTag5Name, TagReq::setTag5Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag6(), spdmNewTaskVo.getTag6(), spdmNewTaskVo.getTag6Code(),TagReq::setTag6, TagReq::setTag6Name, TagReq::setTag6Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag7(), spdmNewTaskVo.getTag7(), spdmNewTaskVo.getTag7Code(),TagReq::setTag7, TagReq::setTag7Name, TagReq::setTag7Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag8(), spdmNewTaskVo.getTag8(), spdmNewTaskVo.getTag8Code(),TagReq::setTag8, TagReq::setTag8Name,TagReq::setTag8Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag9(), spdmNewTaskVo.getTag9(), spdmNewTaskVo.getTag9Code(),TagReq::setTag9, TagReq::setTag9Name, TagReq::setTag9Code);
setTagField(tagReq, spdmNewTaskVo.getNewTag10(), spdmNewTaskVo.getTag10(), spdmNewTaskVo.getTag10Code(),TagReq::setTag10, TagReq::setTag10Name, TagReq::setTag10Code);
tagReq.setTaskId(spdmNewTaskVo.getUuid());
tagReq.setTaskName(spdmNewTaskVo.getTaskName());
tagReq.setTaskCode(spdmNewTaskVo.getTaskCode());
spdmNewTaskVo.setTagReq(tagReq);
}
}
@@ -2589,7 +2598,9 @@ public class TaskServiceImpl implements ITaskService {
if (ObjectUtils.isEmpty(eachTaskVo)) {
continue;
}
TagReq taskTagReq = eachTaskVo.getTagReq();
// 创建新的TagReq对象避免多个taskRunPo共享同一个引用导致数据被覆盖
TagReq taskTagReq = new TagReq();
BeanUtils.copyProperties(eachTaskVo.getTagReq(), taskTagReq);
taskTagReq.setRunId(taskRunPo.getUuid());
taskTagReq.setRunName(taskRunPo.getRunName());
taskRunPo.setTagReq(taskTagReq);
@@ -3164,6 +3175,11 @@ public class TaskServiceImpl implements ITaskService {
}
}
}
// 设置扩展信息
List<TaskNodeExtraPo> taskExtraList = mapper.getTaskExtraList(Collections.singletonList(taskVo.getUuid()));
if (CollectionUtils.isNotEmpty(taskExtraList)) {
taskVo.setExtras(taskExtraList);
}
return SdmResponse.success(taskVo);
}
@@ -4995,6 +5011,7 @@ public class TaskServiceImpl implements ITaskService {
if (MapUtils.isEmpty(tagMap)) {
return SdmResponse.failed("未查询到节点标签的配置");
}
Integer resultType = req.getResultType();
List<NodeMergeQueryResp> mergeQueryRespList = new ArrayList<>();
// 如果是任务或算例就传task或run其他的传tag1到tag10
String type = req.getType();
@@ -5018,7 +5035,12 @@ public class TaskServiceImpl implements ITaskService {
}
if (MERGE_QUERY_TASK.equals(type)) {
// 查询任务
Map<String, List<SpdmNewTaskVo>> taskMap = taskVoList.stream().collect(Collectors.groupingBy(SpdmNewTaskVo::getTaskName));
Map<String, List<SpdmNewTaskVo>> taskMap;
if (resultType == 1) {
taskMap = taskVoList.stream().collect(Collectors.groupingBy(SpdmNewTaskVo::getTaskName));
}else {
taskMap = taskVoList.stream().collect(Collectors.groupingBy(SpdmNewTaskVo::getTaskCode));
}
for (Map.Entry<String, List<SpdmNewTaskVo>> taskEntry : taskMap.entrySet()) {
NodeMergeQueryResp taskMergeQueryResp = new NodeMergeQueryResp();
taskMergeQueryResp.setName(taskEntry.getKey());
@@ -5052,7 +5074,12 @@ public class TaskServiceImpl implements ITaskService {
if (CollectionUtils.isEmpty(nodeList)) {
return SdmResponse.success(Collections.emptyList());
}
Map<String, List<SimulationNode>> nodeMap = nodeList.stream().collect(Collectors.groupingBy(SimulationNode::getNodeName));
Map<String, List<SimulationNode>> nodeMap;
if (resultType == 1) {
nodeMap = nodeList.stream().filter(node -> StringUtils.isNotBlank(node.getNodeName())).collect(Collectors.groupingBy(SimulationNode::getNodeName));
}else {
nodeMap = nodeList.stream().filter(node -> StringUtils.isNotBlank(node.getNodeCode())).collect(Collectors.groupingBy(SimulationNode::getNodeCode));
}
for (Map.Entry<String, List<SimulationNode>> nodeEntry : nodeMap.entrySet()) {
NodeMergeQueryResp nodeMergeQueryResp = new NodeMergeQueryResp();
nodeMergeQueryResp.setName(nodeEntry.getKey());

View File

@@ -187,6 +187,10 @@
sectionName = #{taskNode.section},
</if>
<if test="taskNode.group != null and taskNode.group != ''">
groupName = #{taskNode.group},
</if>
<if test="taskNode.bCapacity != null and taskNode.bCapacity != ''">
bCapacity = #{taskNode.bCapacity},