fix(dms): 修复保养工单相关问题

- 修复保养项目名称为空的问题
- 优化保养工单明细项目查询逻辑
- 修复工作流启动和推进相关问题
- 优化数据更新逻辑,使用最新查询到的数据进行更新
- 添加创建者、创建时间等字段到 DmsBillsMaintDetailProjectVo
master
zangchenhao 2 weeks ago
parent a09bc48429
commit c7b73fc540

@ -2,6 +2,8 @@ package org.dromara.dms.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
@ -10,6 +12,7 @@ import org.dromara.dms.domain.DmsBillsMaintDetailProject;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@ -73,4 +76,29 @@ public class DmsBillsMaintDetailProjectVo implements Serializable {
/** 保养工单明细项目信息;检查每个项目的点巡检结果详情信息 */
/* private List<DmsBillsMaintDetailProject> dmsBillsMaintDetailProjectList;*/
/**
*
*/
private Long createDept;
/**
*
*/
private Long createBy;
/**
*
*/
private Date createTime;
/**
*
*/
private Long updateBy;
/**
*
*/
private Date updateTime;
}

@ -4,6 +4,8 @@ import org.dromara.dms.domain.DmsBillsMaintDetailProject;
import org.dromara.dms.domain.vo.DmsBillsMaintDetailProjectVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/**
* ;Mapper
*
@ -12,4 +14,12 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
*/
public interface DmsBillsMaintDetailProjectMapper extends BaseMapperPlus<DmsBillsMaintDetailProject, DmsBillsMaintDetailProjectVo> {
/**
*
*
* @param dmsBillsMaintDetailProject
* @return
*/
List<DmsBillsMaintDetailProjectVo> selectDmsBillsMaintDetailProjectWithProjectName(DmsBillsMaintDetailProject dmsBillsMaintDetailProject);
}

@ -65,6 +65,25 @@ public class DmsBillsMaintDetailProjectServiceImpl implements IDmsBillsMaintDeta
*/
@Override
public List<DmsBillsMaintDetailProjectVo> queryList(DmsBillsMaintDetailProjectBo bo) {
// 【修复保养项目名称为空问题】优先使用关联查询方法获取完整项目信息
if (bo.getBillsMaintDetailId() != null) {
// 转换为实体对象用于查询
DmsBillsMaintDetailProject queryEntity = MapstructUtils.convert(bo, DmsBillsMaintDetailProject.class);
queryEntity.setBillsMaintDetailId(bo.getBillsMaintDetailId());
queryEntity.setMaintDetailProjectId(bo.getMaintDetailProjectId());
queryEntity.setMaintProjectId(bo.getMaintProjectId());
queryEntity.setMaintProjectStatus(bo.getMaintProjectStatus());
// 使用关联查询方法,确保获取到项目名称
List<DmsBillsMaintDetailProjectVo> result = baseMapper.selectDmsBillsMaintDetailProjectWithProjectName(queryEntity);
// 如果关联查询有结果,直接返回
if (result != null && !result.isEmpty()) {
return result;
}
}
// 降级到默认查询方法
MPJLambdaWrapper<DmsBillsMaintDetailProject> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
@ -132,6 +151,6 @@ public class DmsBillsMaintDetailProjectServiceImpl implements IDmsBillsMaintDeta
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
return baseMapper.deleteBatchIds(ids) > 0;
}
}

@ -17,6 +17,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.uuid.Seq;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.dms.domain.*;
import org.dromara.dms.domain.bo.DmsBillsMaintDetailBo;
import org.dromara.dms.domain.bo.DmsBillsMaintDetailProjectBo;
@ -322,11 +323,11 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
dmsBillsMaintInstance.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_MAINTING);
// 设置实际开始保养时间为当前时间
dmsBillsMaintInstance.setRealBeginTime(currentDate);
// 【关键修复】检查工作流是否已经启动 - 先重新查询最新数据
// 重新查询保养实例确保获取到最新的工作流ID避免使用缓存中的旧数据
DmsBillsMaintInstance latestInstance = baseMapper.selectById(dmsBillsMaintInstance.getMaintInstanceId());
if (latestInstance != null && latestInstance.getWfDefinitionId() == null) {
// 【工作流启动】创建远程启动流程对象
RemoteStartProcess startProcess = new RemoteStartProcess();
@ -336,22 +337,22 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
String businessId = dmsBillsMaintInstance.getMaintInstanceId().toString();
// 设置业务ID
startProcess.setBusinessId(businessId);
try {
// 启动工作流程
RemoteStartProcessReturn remoteStartProcessReturn = remoteWorkflowService.startWorkFlow(startProcess);
// 【关键修复】获取流程实例ID和任务ID
Long processInstanceId = remoteStartProcessReturn.getProcessInstanceId();
Long taskId = remoteStartProcessReturn.getTaskId();
// 如果流程实例ID为空抛出流程启动失败异常
if (processInstanceId == null) {
throw new ServiceException("保养工作流启动失败");
} else {
// 【关键修复】存储流程实例ID到wfDefinitionId
dmsBillsMaintInstance.setWfDefinitionId(processInstanceId);
// ** 异步线程上下文传递【核心问题】 **
// 1. 【捕获Token】: 在主线程里,我们先用 StpUtil.getTokenValue() 把Token拿出来存好。
final String tokenValue = StpUtil.getTokenValue();
@ -385,21 +386,22 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
}
}
} else if (latestInstance != null) {
// 【关键修复】工作流已启动根据流程实例ID查询当前活跃任务
// 使用最新查询到的工作流ID
Long processInstanceId = latestInstance.getWfDefinitionId();
dmsBillsMaintInstance.setWfDefinitionId(processInstanceId); // 同步更新到当前对象
log.info("保养工单 {} 工作流已启动流程实例ID: {},查询当前活跃任务",
log.info("保养工单 {} 工作流已启动流程实例ID: {},查询当前活跃任务",
dmsBillsMaintInstance.getMaintInstanceId(), processInstanceId);
// 根据流程实例ID获取当前活跃任务ID
Long currentActiveTaskId = remoteWorkflowService.getCurrentTaskIdByInstanceId(processInstanceId);
if (currentActiveTaskId != null) {
log.info("保养工单 {} 找到当前活跃任务ID: {}",
log.info("保养工单 {} 找到当前活跃任务ID: {}",
dmsBillsMaintInstance.getMaintInstanceId(), currentActiveTaskId);
// 直接推进工作流
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
remoteCompleteTask.setTaskId(currentActiveTaskId);
@ -408,7 +410,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
List<String> messageTypes = new ArrayList<>();
messageTypes.add("user"); // 用户操作
remoteCompleteTask.setMessageType(messageTypes);
boolean taskCompleted = remoteWorkflowService.completeTask(remoteCompleteTask);
if (!taskCompleted) {
log.error("保养工作流推进失败任务ID: {}", currentActiveTaskId);
@ -429,13 +431,15 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
// 更新保养明细信息
dmsBillsMaintDetailMapper.updateById(dmsBillsMaintDetail);
// 更新保养工单信息
baseMapper.updateById(dmsBillsMaintInstance);
}
// else {//保养中
// // 更新人不为空,则设置更新人为当前用户,更新时间为当前时间
// dmsBillsMaintDetail.setUpdateBy(userName);
// dmsBillsMaintDetail.setUpdateTime(currentDate);
// dmsBillsMaintDetailMapper.updateDmsBillsMaintDetail(dmsBillsMaintDetail);
// }
else {//保养中
// 更新人不为空,则设置更新人为当前用户,更新时间为当前时间
dmsBillsMaintDetail.setUpdateBy(LoginHelper.getUserId());
dmsBillsMaintDetail.setUpdateTime(currentDate);
dmsBillsMaintDetailMapper.updateById(dmsBillsMaintDetail);
}
// 创建查询保养明细项目的对象
DmsBillsMaintDetailProjectBo queryBillsMaintDetailProject = new DmsBillsMaintDetailProjectBo();
@ -445,13 +449,13 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
List<DmsBillsMaintDetailProjectVo> dmsBillsMaintDetailProjects = dmsBillsMaintInstanceProjectService.queryList(queryBillsMaintDetailProject);
// 设置保养明细的项目列表
dmsBillsMaintDetail.setDmsBillsMaintDetailProjectList(dmsBillsMaintDetailProjects);
// 【关键修复】重新查询完整的保养明细信息,包含关联字段
// 使用关联查询方法获取完整的保养明细信息,包括设备名称、保养部位名称等
DmsBillsMaintDetail queryDetail = new DmsBillsMaintDetail();
queryDetail.setBillsMaintDetailId(dmsBillsMaintDetail.getBillsMaintDetailId());
List<DmsBillsMaintDetailVo> detailVoList = dmsBillsMaintDetailMapper.selectDmsBillsMaintDetailJoinList(queryDetail);
if (!detailVoList.isEmpty()) {
DmsBillsMaintDetailVo detailVo = detailVoList.get(0);
// 将关联查询到的字段赋值给返回对象
@ -462,7 +466,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
dmsBillsMaintDetail.setMaintProtocol(detailVo.getMaintProtocol());
dmsBillsMaintDetail.setMaintOperationDescription(detailVo.getMaintOperationDescription());
}
// 返回更新后的保养明细对象
return dmsBillsMaintDetail;
}
@ -483,7 +487,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
log.error("保养工单工作流信息更新失败maintInstanceId: {}", dmsBillsMaintInstance.getMaintInstanceId());
return false;
}
// 【自动推进工作流】完成第一步任务,推进到下一步
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
// 设置任务ID
@ -500,7 +504,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
if (!b){
return false;
}else{
// 更新保养实例信息
// 更新保养工单信息
int i = baseMapper.updateById(dmsBillsMaintInstance);
return i > 0;
}
@ -564,7 +568,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
// 而是根据业务ID动态获取当前活跃的任务ID
String businessId = maintInstanceId.toString();
Long currentActiveTaskId = remoteWorkflowService.getCurrentActiveTaskId(businessId);
if (currentActiveTaskId != null) {
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
remoteCompleteTask.setTaskId(currentActiveTaskId); // 使用当前活跃任务ID

@ -129,7 +129,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dfia.repair_content repair_content,
dfia.protected_method protected_method,
dfia.repairer repairer,
dfia.repair_confirm repair_confirm,
dbfi.repair_confirm repair_confirm,
dfia.confirm_time confirm_time,dfia.components_parts_id components_parts_id
from dms_bills_fault_instance dbfi
left join prod_base_machine_info dbdl on dbfi.machine_id=dbdl.machine_id

@ -4,4 +4,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.dms.mapper.DmsBillsMaintDetailProjectMapper">
<resultMap type="DmsBillsMaintDetailProjectVo" id="DmsBillsMaintDetailProjectResult">
<result property="maintDetailProjectId" column="maint_detail_project_id" />
<result property="billsMaintDetailId" column="bills_maint_detail_id" />
<result property="maintProjectId" column="maint_project_id" />
<result property="maintProjectName" column="maint_project_name" />
<result property="maintProjectDesc" column="maint_project_desc" />
<result property="maintProjectStatus" column="maint_project_status" />
<result property="remark" column="remark" />
<result property="createTime" column="create_time" />
</resultMap>
<sql id="selectDmsBillsMaintDetailProjectVo">
select
dbmdp.maint_detail_project_id,
dbmdp.bills_maint_detail_id,
dbmdp.maint_project_id,
COALESCE(dbmdp.maint_project_name, dbmp.maint_project_name) as maint_project_name,
COALESCE(dbmdp.maint_project_desc, dbmp.maint_project_desc) as maint_project_desc,
dbmdp.maint_project_status,
dbmdp.remark,
dbmdp.create_time
from
dms_bills_maint_detail_project dbmdp
left join dms_base_maint_project dbmp on dbmdp.maint_project_id = dbmp.maint_project_id
</sql>
<select id="selectDmsBillsMaintDetailProjectWithProjectName" parameterType="DmsBillsMaintDetailProject" resultMap="DmsBillsMaintDetailProjectResult">
<include refid="selectDmsBillsMaintDetailProjectVo"/>
<where>
<if test="maintDetailProjectId != null"> and dbmdp.maint_detail_project_id = #{maintDetailProjectId}</if>
<if test="billsMaintDetailId != null"> and dbmdp.bills_maint_detail_id = #{billsMaintDetailId}</if>
<if test="maintProjectId != null"> and dbmdp.maint_project_id = #{maintProjectId}</if>
<if test="maintProjectStatus != null and maintProjectStatus != ''"> and dbmdp.maint_project_status = #{maintProjectStatus}</if>
</where>
order by dbmdp.create_time desc
</select>
</mapper>

Loading…
Cancel
Save