feat: 企标制修订签章

This commit is contained in:
2024-01-31 15:28:26 +08:00
parent 9ce0616ba7
commit dd6865783c
7 changed files with 185 additions and 6 deletions
@@ -146,6 +146,7 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/onlyOffice/**", "anon");
filterChainDefinitionMap.put("/onlyoffice/**", "anon");
filterChainDefinitionMap.put("/file/**", "anon");
filterChainDefinitionMap.put("/sys/common/downloadWithoutToken/**", "anon");
//对接接口排除
filterChainDefinitionMap.put("/sync/**", "anon");
@@ -222,6 +222,18 @@ public class CommonController {
downloadAndView(id, response);
}
/**
* 下载文件(不带token)
*
* @param id 传入文件id
* @param response 响应
*/
@ApiOperation(value = "下载文件(不带token", notes = "下载文件(不带token")
@GetMapping(value = "/downloadWithoutToken/{id}")
public void downloadWithoutToken(@PathVariable String id, HttpServletResponse response) {
downloadAndView(id, response);
}
private void setResponse(HttpServletResponse response, String fileName) {
response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
// 设置强制下载不打开
@@ -198,7 +198,8 @@ public class MyGlobalEventListener implements ActivitiEventListener {
!isFirstNodeTask(approvalRecord) &&
(approvalRecord.getTaskName().contains("审批") ||
approvalRecord.getTaskName().contains("会签") ||
approvalRecord.getTaskName().equals("部所联络人校对"))) {
approvalRecord.getTaskName().equals("部所联络人校对") ||
approvalRecord.getTaskName().equals("其它起草人校对"))) {
if ((Boolean) variables.get("pass")) {
approvalRecord.setCommitFlag(CommitFlagEnum.PASS.getValue());
} else {
@@ -131,4 +131,15 @@ public class ESRevisionController {
return Result.OK();
}
/**
* 获取签署信息
*
*/
@AutoLog(value = "企标制修订流程-获取签署信息")
@ApiOperation(value="企标制修订流程-获取签署信息", notes="企标制修订流程-获取签署信息")
@GetMapping(value = "/getSignInfo")
public Result<?> getSignInfo(@RequestParam String processInstanceId) {
return Result.OK(revisionService.getSignInfo(processInstanceId));
}
}
@@ -0,0 +1,55 @@
package com.jero.modules.activiti.process.esRevision.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @author: Mzaxd
* @Date: 2024/1/31 9:58
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SignInfo {
/**
* 人员信息
*/
@ApiModelProperty(value = "人员信息")
private String userId;
/**
* 人员信息
*/
@ApiModelProperty(value = "人员姓名")
private String userName;
/**
* 签署日期
*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@ApiModelProperty(value = "签署日期")
private Date signTime;
/**
* 手写签字图片id
*/
@ApiModelProperty(value = "手写签字图片id")
private String avatarFileId;
/**
* 手写签字图片url
*/
@ApiModelProperty(value = "手写签字图片url")
private String avatarFileUrl;
}
@@ -2,9 +2,13 @@ package com.jero.modules.activiti.process.esRevision.service;
import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.esRevision.entity.SignInfo;
import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import java.util.List;
import java.util.Map;
/**
* @author ThinkBook
* @description 针对表【process_es_revision】的数据库操作Service
@@ -24,4 +28,6 @@ public interface EsRevisionService extends IService<ProcessEsRevision> {
void approval(ESRevisionDataVO revisionData, boolean pass);
void transfer(String taskId, String userId);
Map<String, List<SignInfo>> getSignInfo(String processInstanceId);
}
@@ -14,6 +14,8 @@ import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.process.common.entity.CommonVO;
import com.jero.modules.activiti.process.common.entity.CounterSignNodeNameConstants;
@@ -21,12 +23,9 @@ import com.jero.modules.activiti.process.common.enums.ProcessType;
import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectStatus;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPRevisionType;
import com.jero.modules.activiti.process.esRevision.entity.EsRevisionAdvice;
import com.jero.modules.activiti.process.esRevision.entity.HandleAdviceEnum;
import com.jero.modules.activiti.process.esRevision.entity.OperateTypeEnum;
import com.jero.modules.activiti.process.esRevision.entity.*;
import com.jero.modules.activiti.process.esRevision.entity.vo.InspectContentVO;
import com.jero.modules.activiti.process.esRevision.entity.vo.OtherDraftUserVO;
import com.jero.modules.activiti.process.esRevision.entity.ProcessEsRevision;
import com.jero.modules.activiti.process.esRevision.entity.vo.ESRevisionDataVO;
import com.jero.modules.activiti.process.esRevision.entity.vo.ReviewMeetingDetailVO;
import com.jero.modules.activiti.process.esRevision.service.EsRevisionAdviceService;
@@ -36,6 +35,7 @@ import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.laws.common.constant.MessageTemplateCodeCommon;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
@@ -45,6 +45,7 @@ import com.jero.modules.laws.system.service.ILawsContactManageService;
import com.jero.modules.sys.utils.UserUtils;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserDepartService;
import com.jero.modules.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
@@ -106,6 +107,12 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
@Resource
private ILawsContactManageService contactManageService;
@Resource
private ProcessApprovalRecordService parService;
@Resource
private ISysUserService userService;
@Override
public void startProcess(ESRevisionDataVO revisionData) {
// 执行流程发起前的操作
@@ -621,7 +628,6 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
saveOrUpdate(data);
// 给授权部门的所有人员发送消息
this.sendMessageToAuthDeptUser(processInstanceId);
// TODO 在线编辑 插入签章
break;
}
// 转办修改流程变量逻辑
@@ -669,6 +675,93 @@ public class EsRevisionServiceImpl extends ServiceImpl<EsRevisionMapper, Process
processHandleService.transfer(taskId, toUserId);
}
@Override
public Map<String, List<SignInfo>> getSignInfo(String processInstanceId) {
Map<String, List<SignInfo>> result = new LinkedHashMap<>();
LambdaQueryWrapper<ProcessApprovalRecord> parWrapper = new LambdaQueryWrapper<>();
parWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId);
parWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.COMPLETE.getValue());
LambdaQueryWrapper<ProcessEsRevision> revisionWrapper = new LambdaQueryWrapper<>();
revisionWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId);
ProcessEsRevision revision = getOne(revisionWrapper);
// 获取流程审批信息
List<ProcessApprovalRecord> approvalRecords = parService.list(parWrapper);
if (approvalRecords == null || approvalRecords.isEmpty()) {
throw new JeroBootException("流程审批记录为空");
}
Map<String, List<ProcessApprovalRecord>> parMap = approvalRecords.stream()
.collect(Collectors.groupingBy(ProcessApprovalRecord::getNodeId));
List<ProcessApprovalRecord> processApprovalRecords;
SignInfo singInfo;
// 获取主起草用户
processApprovalRecords = parMap.get(MAIN_DRAFT_USER_DISTRIBUTE);
singInfo = this.getSingInfo(processApprovalRecords.get(0));
result.put("起草签署", Collections.singletonList(singInfo));
// 获取其他起草人用户
List<SignInfo> otherDraftUsers = new ArrayList<>();
processApprovalRecords = parMap.get(OTHER_DRAFT_USER_CHECK);
List<String> proofreaderlist = Arrays.asList(revision.getProofreader().split(","));
// 剔除所有驳回和未审批的记录
processApprovalRecords.removeIf(ar -> CommitFlagEnum.REJECT.getValue().equals(ar.getCommitFlag()));
processApprovalRecords.removeIf(ar -> ar.getCommitFlag() == null);
// 将processApprovalRecords按照EndTime倒序排序
processApprovalRecords.sort(Comparator.comparing(ProcessApprovalRecord::getEndTime).reversed());
// 取list.size()个数据
processApprovalRecords = processApprovalRecords.subList(0, proofreaderlist.size());
for (ProcessApprovalRecord processApprovalRecord : processApprovalRecords) {
singInfo = this.getSingInfo(processApprovalRecord);
otherDraftUsers.add(singInfo);
}
result.put("校对签署", otherDraftUsers);
// 获取主管级领导审核用户
processApprovalRecords = parMap.get(LEADER_APPROVAL);
singInfo = this.getSingInfo(processApprovalRecords.get(0));
result.put("审核签署", Collections.singletonList(singInfo));
// 获取标准化签署+标准化审核用户
processApprovalRecords = parMap.get(STANDARDIZATION_APPROVAL);
singInfo = this.getSingInfo(processApprovalRecords.get(0));
result.put("标准化签署", Collections.singletonList(singInfo));
// 获取会签签署+相关部门领导用户
List<SignInfo> relatedLeaders = new ArrayList<>();
processApprovalRecords = parMap.get(RELATED_LEADER_APPROVAL);
List<String> list = Arrays.asList(revision.getRelatedLeader().split(","));
// 剔除所有驳回的记录
processApprovalRecords.removeIf(ar -> ar.getCommitFlag().equals(CommitFlagEnum.REJECT.getValue()));
// 将processApprovalRecords按照EndTime倒序排序
processApprovalRecords.sort(Comparator.comparing(ProcessApprovalRecord::getEndTime).reversed());
// 取list.size()个数据
processApprovalRecords = processApprovalRecords.subList(0, list.size());
for (ProcessApprovalRecord processApprovalRecord : processApprovalRecords) {
singInfo = this.getSingInfo(processApprovalRecord);
relatedLeaders.add(singInfo);
}
result.put("会签签署", relatedLeaders);
// 获取批准签署+总工程师用户姓名
processApprovalRecords = parMap.get(CHIEF_ENGINEER_APPROVAL);
singInfo = this.getSingInfo(processApprovalRecords.get(0));
result.put("批准签署", Collections.singletonList(singInfo));
return result;
}
private SignInfo getSingInfo(ProcessApprovalRecord approvalRecord) {
SignInfo signInfo = new SignInfo();
String userId = approvalRecord.getUserId();
signInfo.setUserId(userId);
SysUser user = userService.getById(userId);
signInfo.setUserName(user.getRealname().concat("(").concat(user.getUsername()).concat(")"));
signInfo.setAvatarFileId(user.getAvatar());
signInfo.setSignTime(approvalRecord.getEndTime());
signInfo.setAvatarFileUrl("/sys/common/downloadWithoutToken/".concat(user.getAvatar()));
return signInfo;
}
@Override
public void saveToDraft(ProcessInfoVO<ESRevisionDataVO> processInfoVO) {
ESRevisionDataVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();