!116 fix(xispeak): 修复测试文档发现的 7 项问题
Merge pull request !116 from wsm/fix/xispeak_bug
This commit is contained in:
+1
-1
@@ -384,7 +384,7 @@ public class BgXiSpeakController extends JeecgController<BgXiSpeak, IBgXiSpeakSe
|
||||
@RequiresPermissions("bg.xispeak:bg_xi_speak:deleteBatch")
|
||||
@DeleteMapping(value = "/deleteBatch")
|
||||
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
|
||||
this.bgXiSpeakService.removeByIds(Arrays.asList(ids.split(",")));
|
||||
this.bgXiSpeakService.deleteBatchBgXiSpeak(Arrays.asList(ids.split(",")));
|
||||
return Result.OK("批量删除成功!");
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
<select id="queryListByPid" parameterType="java.lang.Object" resultType="org.jeecg.common.system.vo.SelectTreeModel">
|
||||
select
|
||||
id as "key",
|
||||
impl_status as "title",
|
||||
speak_status as "title",
|
||||
(case when has_child = '1' then 0 else 1 end) as isLeaf,
|
||||
pid as parentId
|
||||
from bg_xi_speak
|
||||
|
||||
+8
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.jeecg.common.exception.JeecgBootException;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -54,6 +55,13 @@ public interface IBgXiSpeakService extends IService<BgXiSpeak> {
|
||||
*/
|
||||
void deleteBgXiSpeak(String id) throws JeecgBootException;
|
||||
|
||||
/**
|
||||
* 批量删除节点(含级联清理关联的运行中流程、task_task 与反馈子表)
|
||||
*
|
||||
* @param ids
|
||||
*/
|
||||
void deleteBatchBgXiSpeak(Collection<String> ids);
|
||||
|
||||
/**
|
||||
* 查询所有数据,无分页
|
||||
*
|
||||
|
||||
+64
-3
@@ -11,11 +11,13 @@ import org.jeecg.common.util.oConvertUtils;
|
||||
import org.jeecg.common.system.vo.SelectTreeModel;
|
||||
import org.jeecg.modules.supervision.common.BpmStatus;
|
||||
import org.jeecg.modules.supervision.xispeak.entity.BgXiSpeak;
|
||||
import org.jeecg.modules.supervision.xispeak.entity.BgXiSpeakFeedback;
|
||||
import org.jeecg.modules.supervision.xispeak.entity.DeptApproveDetail;
|
||||
import org.jeecg.modules.supervision.xispeak.entity.DeptApproveDetailMap;
|
||||
import org.jeecg.modules.extbpm.process.entity.ExtActTaskCc;
|
||||
import org.jeecg.modules.extbpm.process.service.IExtActTaskCcService;
|
||||
import org.jeecg.modules.supervision.xispeak.mapper.BgXiSpeakMapper;
|
||||
import org.jeecg.modules.supervision.xispeak.service.IBgXiSpeakFeedbackService;
|
||||
import org.jeecg.modules.supervision.xispeak.service.IBgXiSpeakService;
|
||||
import org.jeecg.modules.taskapprovalopinion.entity.TaskApprovalOpinion;
|
||||
import org.jeecg.modules.taskapprovalopinion.service.ITaskApprovalOpinionService;
|
||||
@@ -48,6 +50,7 @@ public class BgXiSpeakServiceImpl extends ServiceImpl<BgXiSpeakMapper, BgXiSpeak
|
||||
private final HistoryService historyService;
|
||||
private final ITaskApprovalOpinionService taskApprovalOpinionService;
|
||||
private final IExtActTaskCcService extActTaskCcService;
|
||||
private final IBgXiSpeakFeedbackService bgXiSpeakFeedbackService;
|
||||
|
||||
@Override
|
||||
public void addBgXiSpeak(BgXiSpeak bgXiSpeak) {
|
||||
@@ -58,12 +61,18 @@ public class BgXiSpeakServiceImpl extends ServiceImpl<BgXiSpeakMapper, BgXiSpeak
|
||||
}
|
||||
if(oConvertUtils.isEmpty(bgXiSpeak.getPid())){
|
||||
bgXiSpeak.setPid(IBgXiSpeakService.ROOT_PID_VALUE);
|
||||
bgXiSpeak.setTreeDepth(0);
|
||||
}else{
|
||||
//如果当前节点父ID不为空 则设置父节点的hasChildren 为1
|
||||
BgXiSpeak parent = baseMapper.selectById(bgXiSpeak.getPid());
|
||||
if(parent!=null && !"1".equals(parent.getHasChild())){
|
||||
parent.setHasChild("1");
|
||||
baseMapper.updateById(parent);
|
||||
if(parent!=null){
|
||||
if(!"1".equals(parent.getHasChild())){
|
||||
parent.setHasChild("1");
|
||||
baseMapper.updateById(parent);
|
||||
}
|
||||
bgXiSpeak.setTreeDepth((parent.getTreeDepth() == null ? 0 : parent.getTreeDepth()) + 1);
|
||||
}else{
|
||||
bgXiSpeak.setTreeDepth(0);
|
||||
}
|
||||
}
|
||||
baseMapper.insert(bgXiSpeak);
|
||||
@@ -96,6 +105,7 @@ public class BgXiSpeakServiceImpl extends ServiceImpl<BgXiSpeakMapper, BgXiSpeak
|
||||
public void deleteBgXiSpeak(String id) throws JeecgBootException {
|
||||
//查询选中节点下所有子节点一并删除
|
||||
id = this.queryTreeChildIds(id);
|
||||
List<String> deletedIds = new ArrayList<>();
|
||||
if(id.indexOf(",")>0) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
String[] idArr = id.split(",");
|
||||
@@ -119,6 +129,7 @@ public class BgXiSpeakServiceImpl extends ServiceImpl<BgXiSpeakMapper, BgXiSpeak
|
||||
for(String pid : pidArr){
|
||||
this.updateOldParentNode(pid);
|
||||
}
|
||||
deletedIds.addAll(Arrays.asList(idArr));
|
||||
}else{
|
||||
BgXiSpeak bgXiSpeak = this.getById(id);
|
||||
if(bgXiSpeak==null) {
|
||||
@@ -126,7 +137,57 @@ public class BgXiSpeakServiceImpl extends ServiceImpl<BgXiSpeakMapper, BgXiSpeak
|
||||
}
|
||||
updateOldParentNode(bgXiSpeak.getPid());
|
||||
baseMapper.deleteById(id);
|
||||
deletedIds.add(id);
|
||||
}
|
||||
//清理每个被删节点关联的运行中流程、task_task 与反馈子表
|
||||
for (String deletedId : deletedIds) {
|
||||
if (oConvertUtils.isNotEmpty(deletedId)) {
|
||||
cleanupFlowAndRelated(deletedId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteBatchBgXiSpeak(Collection<String> ids) {
|
||||
for (String id : ids) {
|
||||
if (oConvertUtils.isEmpty(id)) {
|
||||
continue;
|
||||
}
|
||||
deleteBgXiSpeak(id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理业务记录关联的流程与子表数据:终止运行中的流程实例、删除 task_task / 审批意见 / 抄送 / 反馈子表
|
||||
*/
|
||||
private void cleanupFlowAndRelated(String id) {
|
||||
LambdaQueryWrapper<TaskTask> queryWrapper = new LambdaQueryWrapper<TaskTask>()
|
||||
.eq(TaskTask::getBusinessId, id);
|
||||
List<TaskTask> taskTaskList = taskTaskServiceImpl.list(queryWrapper);
|
||||
if (taskTaskList != null && !taskTaskList.isEmpty()) {
|
||||
for (TaskTask taskTask : taskTaskList) {
|
||||
String procId = taskTask.getProcessInstId();
|
||||
if (oConvertUtils.isEmpty(procId)) {
|
||||
continue;
|
||||
}
|
||||
long count = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(procId)
|
||||
.count();
|
||||
if (count > 0) {
|
||||
runtimeService.deleteProcessInstance(procId, "删除xispeak表单关联的流程, businessId: " + id);
|
||||
log.info("【习总书记讲话-删除清理】已中止运行中的流程实例, processInstanceId: {}, businessId: {}", procId, id);
|
||||
}
|
||||
taskApprovalOpinionService.remove(new LambdaQueryWrapper<TaskApprovalOpinion>()
|
||||
.eq(TaskApprovalOpinion::getProcessInstId, procId));
|
||||
extActTaskCcService.remove(new LambdaQueryWrapper<ExtActTaskCc>()
|
||||
.eq(ExtActTaskCc::getProcInstId, procId));
|
||||
}
|
||||
taskTaskServiceImpl.remove(queryWrapper);
|
||||
log.info("【习总书记讲话-删除清理】已清理关联taskTask记录, businessId: {}", id);
|
||||
}
|
||||
bgXiSpeakFeedbackService.remove(new LambdaQueryWrapper<BgXiSpeakFeedback>()
|
||||
.eq(BgXiSpeakFeedback::getMainId, id));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,6 +25,7 @@ YYYYMMDD_描述.sql
|
||||
| 2026-07-09 | DML | `20260709_新增反馈任务状态字典.sql` | 新增 feedback_status 字典(未开始/进行中/已完成) |
|
||||
| 2026-08-05 | DDL | `20260805_系统日志表新增操作人密级字段.sql` | sys_log 新增 user_security_level 列,记录操作人密级 |
|
||||
| 2026-08-05 | DDL | `20260805_系统日志表新增操作结果字段.sql` | sys_log 新增 operate_result 列,记录操作日志成功/失败 |
|
||||
| 2026-08-06 | DML | `20260806_纪检JJ部门用户挂靠修复.sql` | jj_worker_01/jj_leader_01 挂靠修正到纪检部门 2054466800692432898 |
|
||||
|
||||
## 使用方式
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
-- 修复纪检(JJ)部门用户挂靠:jj_worker_01 / jj_leader_01 原挂靠在不存在的部门 2058729446551752705,
|
||||
-- 导致反馈流程纪检节点 Task_1wfkrvj / Task_1ogk921 的 MI collection 为空、0 实例静默跳过。
|
||||
-- 现将其挂靠到实际存在的纪检部门 2054466800692432898(flow-biz.org.dept.jj)。
|
||||
-- 说明:getUsersListByDeptIdAndRoleIdLocalApi 走 sys_user_role.dept_id(LIKE %deptId%),
|
||||
-- 故 sys_user_role 为关键修复点;sys_user_depart 同步修正避免悬挂引用。
|
||||
|
||||
UPDATE sys_user_role SET dept_id = '2054466800692432898'
|
||||
WHERE user_id IN ('2058729787494141954','2058729946080776193')
|
||||
AND dept_id = '2058729446551752705';
|
||||
|
||||
UPDATE sys_user_depart SET dep_id = '2054466800692432898'
|
||||
WHERE user_id IN ('2058729787494141954','2058729946080776193')
|
||||
AND dep_id = '2058729446551752705';
|
||||
Reference in New Issue
Block a user