yxk-20260729
改善提案 Task_improve005 不显示 TaskHandleInnerContent。评委选择“投票通过”或“投票反对”后弹出确认框;确认即锁定个人投票并直接完成当前流程任务。
This commit is contained in:
+3
-3
@@ -226,9 +226,9 @@ public class ImprovementProposalController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/bpm/submitInstituteVote")
|
@PostMapping(value = "/bpm/submitInstituteVote")
|
||||||
@Operation(summary = "锁定所级评委投票并汇总结果")
|
@Operation(summary = "确认所级评委投票并直接完成流程任务")
|
||||||
public Result<String> submitInstituteVote(@RequestBody ImprovementProposalBpmActionDTO action) {
|
public Result<String> submitInstituteVote(@RequestBody ImprovementProposalBpmActionDTO action, HttpServletRequest request) {
|
||||||
return handleBpmAction(() -> improvementProposalService.submitInstituteVote(action, currentUser()));
|
return handleBpmAction(() -> improvementProposalService.submitInstituteVoteAndComplete(action, currentUser(), request));
|
||||||
}
|
}
|
||||||
|
|
||||||
private LoginUser currentUser() {
|
private LoginUser currentUser() {
|
||||||
|
|||||||
+4
@@ -8,6 +8,7 @@ import org.jeecg.modules.improvementproposal.dto.ImprovementInstituteVoteCandida
|
|||||||
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO;
|
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO;
|
||||||
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.common.system.vo.LoginUser;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -91,6 +92,9 @@ public interface IImprovementProposalService extends IService<ImprovementProposa
|
|||||||
/** 锁定当前所级评委的投票并在全员完成后汇总投票结果。 */
|
/** 锁定当前所级评委的投票并在全员完成后汇总投票结果。 */
|
||||||
void submitInstituteVote(ImprovementProposalBpmActionDTO action, LoginUser loginUser);
|
void submitInstituteVote(ImprovementProposalBpmActionDTO action, LoginUser loginUser);
|
||||||
|
|
||||||
|
/** 锁定投票后,使用通用流程办理能力直接完成当前所级评委任务。 */
|
||||||
|
void submitInstituteVoteAndComplete(ImprovementProposalBpmActionDTO action, LoginUser loginUser, HttpServletRequest request);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定年度最新提案编号中的XXXX部分
|
* 获取指定年度最新提案编号中的XXXX部分
|
||||||
*
|
*
|
||||||
|
|||||||
+33
-3
@@ -14,6 +14,7 @@ import org.jeecg.common.api.vo.Result;
|
|||||||
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.common.util.oConvertUtils;
|
||||||
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.common.system.vo.LoginUser;
|
||||||
import org.jeecg.modules.extbpm.process.service.impl.BpmBaseExtApiImpl;
|
import org.jeecg.modules.extbpm.process.service.impl.BpmBaseExtApiImpl;
|
||||||
|
import org.jeecg.modules.extbpm.process.service.IExtActTaskCcService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -37,6 +38,7 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: improvement_proposal
|
* @Description: improvement_proposal
|
||||||
@@ -79,6 +81,8 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
|
|||||||
private TaskService taskService;
|
private TaskService taskService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISysRoleService sysRoleService;
|
private ISysRoleService sysRoleService;
|
||||||
|
@Autowired
|
||||||
|
private IExtActTaskCcService extActTaskCcService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@@ -434,19 +438,25 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
|
|||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void submitInstituteVote(ImprovementProposalBpmActionDTO action, LoginUser loginUser) {
|
public void submitInstituteVote(ImprovementProposalBpmActionDTO action, LoginUser loginUser) {
|
||||||
|
if (!"agree".equals(action.getVoteResult()) && !"disagree".equals(action.getVoteResult())) {
|
||||||
|
throw new IllegalStateException("投票结果只能是同意或不同意");
|
||||||
|
}
|
||||||
ImprovementProposal proposal = validateRunningTask(action, loginUser, TASK_INSTITUTE_VOTE);
|
ImprovementProposal proposal = validateRunningTask(action, loginUser, TASK_INSTITUTE_VOTE);
|
||||||
ImprovementProposal lockedProposal = improvementProposalMapper.selectByIdForUpdate(proposal.getId());
|
ImprovementProposal lockedProposal = improvementProposalMapper.selectByIdForUpdate(proposal.getId());
|
||||||
if (lockedProposal == null || !action.getProcessInstanceId().equals(lockedProposal.getProcessInstanceId())) {
|
if (lockedProposal == null || !action.getProcessInstanceId().equals(lockedProposal.getProcessInstanceId())) {
|
||||||
throw new IllegalStateException("提案流程状态已变化,请刷新后重试");
|
throw new IllegalStateException("提案流程状态已变化,请刷新后重试");
|
||||||
}
|
}
|
||||||
ImprovementInstituteVote vote = findInstituteVote(lockedProposal.getId(), loginUser.getId());
|
ImprovementInstituteVote vote = findInstituteVote(lockedProposal.getId(), loginUser.getId());
|
||||||
if (!"voted".equals(vote.getVoteStatus())) {
|
if ("voted".equals(vote.getVoteStatus())) {
|
||||||
if (!"agree".equals(vote.getVoteResult()) && !"disagree".equals(vote.getVoteResult())) {
|
// 网络异常导致流程任务未完成时,允许使用已确认的同一结果重试办理;不允许改票。
|
||||||
throw new IllegalStateException("请先选择投票通过或投票反对");
|
if (!action.getVoteResult().equals(vote.getVoteResult())) {
|
||||||
|
throw new IllegalStateException("投票已确认,不能修改投票结果");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
int updated = improvementInstituteVoteMapper.update(null, new LambdaUpdateWrapper<ImprovementInstituteVote>()
|
int updated = improvementInstituteVoteMapper.update(null, new LambdaUpdateWrapper<ImprovementInstituteVote>()
|
||||||
.eq(ImprovementInstituteVote::getId, vote.getId())
|
.eq(ImprovementInstituteVote::getId, vote.getId())
|
||||||
.eq(ImprovementInstituteVote::getVoteStatus, "pending")
|
.eq(ImprovementInstituteVote::getVoteStatus, "pending")
|
||||||
|
.set(ImprovementInstituteVote::getVoteResult, action.getVoteResult())
|
||||||
.set(ImprovementInstituteVote::getVoteStatus, "voted")
|
.set(ImprovementInstituteVote::getVoteStatus, "voted")
|
||||||
.set(ImprovementInstituteVote::getVoteTime, new Date())
|
.set(ImprovementInstituteVote::getVoteTime, new Date())
|
||||||
.set(ImprovementInstituteVote::getProcessTaskId, action.getTaskId()));
|
.set(ImprovementInstituteVote::getProcessTaskId, action.getTaskId()));
|
||||||
@@ -457,6 +467,26 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
|
|||||||
updateInstituteVoteSummaryIfComplete(lockedProposal, action.getProcessInstanceId());
|
updateInstituteVoteSummaryIfComplete(lockedProposal, action.getProcessInstanceId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void submitInstituteVoteAndComplete(ImprovementProposalBpmActionDTO action, LoginUser loginUser, HttpServletRequest request) {
|
||||||
|
submitInstituteVote(action, loginUser);
|
||||||
|
|
||||||
|
// 复用通用办理服务,确保审批日志、流程状态及多实例收敛逻辑与普通办理保持一致。
|
||||||
|
HashMap<String, String> processParams = new HashMap<>(4);
|
||||||
|
processParams.put("taskId", action.getTaskId());
|
||||||
|
processParams.put("processModel", "1");
|
||||||
|
processParams.put("nextCodeCount", "1");
|
||||||
|
// Task5 只有正常流转分支;通用办理服务以 end + 单分支执行 taskService.complete。
|
||||||
|
processParams.put("nextnode", "end");
|
||||||
|
Result<Object> result = extActTaskCcService.processComplete(processParams, request);
|
||||||
|
if (result == null || !result.isSuccess()) {
|
||||||
|
throw new IllegalStateException(result == null || oConvertUtils.isEmpty(result.getMessage())
|
||||||
|
? "投票已确认,但流程办理失败"
|
||||||
|
: result.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ImprovementInstituteVote findInstituteVote(String mainId, String voterId) {
|
private ImprovementInstituteVote findInstituteVote(String mainId, String voterId) {
|
||||||
return improvementInstituteVoteMapper.selectByMainId(mainId).stream()
|
return improvementInstituteVoteMapper.selectByMainId(mainId).stream()
|
||||||
.filter(item -> voterId.equals(item.getVoterId()))
|
.filter(item -> voterId.equals(item.getVoterId()))
|
||||||
|
|||||||
Reference in New Issue
Block a user