yxk-20260729

改善提案
Task_improve005 不显示 TaskHandleInnerContent。评委选择“投票通过”或“投票反对”后弹出确认框;确认即锁定个人投票并直接完成当前流程任务。
This commit is contained in:
ye1023
2026-07-29 10:59:14 +08:00
parent 8751c8e86b
commit 47bef7b81f
3 changed files with 40 additions and 6 deletions
@@ -226,9 +226,9 @@ public class ImprovementProposalController {
}
@PostMapping(value = "/bpm/submitInstituteVote")
@Operation(summary = "锁定所级评委投票并汇总结果")
public Result<String> submitInstituteVote(@RequestBody ImprovementProposalBpmActionDTO action) {
return handleBpmAction(() -> improvementProposalService.submitInstituteVote(action, currentUser()));
@Operation(summary = "确认所级评委投票并直接完成流程任务")
public Result<String> submitInstituteVote(@RequestBody ImprovementProposalBpmActionDTO action, HttpServletRequest request) {
return handleBpmAction(() -> improvementProposalService.submitInstituteVoteAndComplete(action, currentUser(), request));
}
private LoginUser currentUser() {
@@ -8,6 +8,7 @@ import org.jeecg.modules.improvementproposal.dto.ImprovementInstituteVoteCandida
import org.jeecg.modules.improvementproposal.dto.ImprovementProposalBpmActionDTO;
import org.jeecg.common.system.vo.LoginUser;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
@@ -91,6 +92,9 @@ public interface IImprovementProposalService extends IService<ImprovementProposa
/** 锁定当前所级评委的投票并在全员完成后汇总投票结果。 */
void submitInstituteVote(ImprovementProposalBpmActionDTO action, LoginUser loginUser);
/** 锁定投票后,使用通用流程办理能力直接完成当前所级评委任务。 */
void submitInstituteVoteAndComplete(ImprovementProposalBpmActionDTO action, LoginUser loginUser, HttpServletRequest request);
/**
* 获取指定年度最新提案编号中的XXXX部分
*
@@ -14,6 +14,7 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.extbpm.process.service.impl.BpmBaseExtApiImpl;
import org.jeecg.modules.extbpm.process.service.IExtActTaskCcService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
@@ -37,6 +38,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import javax.servlet.http.HttpServletRequest;
/**
* @Description: improvement_proposal
@@ -79,6 +81,8 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
private TaskService taskService;
@Autowired
private ISysRoleService sysRoleService;
@Autowired
private IExtActTaskCcService extActTaskCcService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -434,19 +438,25 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
@Override
@Transactional(rollbackFor = Exception.class)
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 lockedProposal = improvementProposalMapper.selectByIdForUpdate(proposal.getId());
if (lockedProposal == null || !action.getProcessInstanceId().equals(lockedProposal.getProcessInstanceId())) {
throw new IllegalStateException("提案流程状态已变化,请刷新后重试");
}
ImprovementInstituteVote vote = findInstituteVote(lockedProposal.getId(), loginUser.getId());
if (!"voted".equals(vote.getVoteStatus())) {
if (!"agree".equals(vote.getVoteResult()) && !"disagree".equals(vote.getVoteResult())) {
throw new IllegalStateException("请先选择投票通过或投票反对");
if ("voted".equals(vote.getVoteStatus())) {
// 网络异常导致流程任务未完成时,允许使用已确认的同一结果重试办理;不允许改票。
if (!action.getVoteResult().equals(vote.getVoteResult())) {
throw new IllegalStateException("投票已确认,不能修改投票结果");
}
} else {
int updated = improvementInstituteVoteMapper.update(null, new LambdaUpdateWrapper<ImprovementInstituteVote>()
.eq(ImprovementInstituteVote::getId, vote.getId())
.eq(ImprovementInstituteVote::getVoteStatus, "pending")
.set(ImprovementInstituteVote::getVoteResult, action.getVoteResult())
.set(ImprovementInstituteVote::getVoteStatus, "voted")
.set(ImprovementInstituteVote::getVoteTime, new Date())
.set(ImprovementInstituteVote::getProcessTaskId, action.getTaskId()));
@@ -457,6 +467,26 @@ public class ImprovementProposalServiceImpl extends ServiceImpl<ImprovementPropo
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) {
return improvementInstituteVoteMapper.selectByMainId(mainId).stream()
.filter(item -> voterId.equals(item.getVoterId()))