From dd6865783c0fc3161d2966e490b0bb4650255117 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Wed, 31 Jan 2024 15:28:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=81=E6=A0=87=E5=88=B6=E4=BF=AE?= =?UTF-8?q?=E8=AE=A2=E7=AD=BE=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jero/config/shiro/ShiroConfig.java | 1 + .../system/controller/CommonController.java | 12 ++ .../listener/MyGlobalEventListener.java | 3 +- .../controller/ESRevisionController.java | 11 ++ .../process/esRevision/entity/SignInfo.java | 55 ++++++++++ .../esRevision/service/EsRevisionService.java | 6 + .../service/impl/EsRevisionServiceImpl.java | 103 +++++++++++++++++- 7 files changed, 185 insertions(+), 6 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/SignInfo.java diff --git a/laws-base/laws-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/laws-base/laws-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java index 082f7b31..5a8c8cdf 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -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"); diff --git a/laws-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java b/laws-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java index e8a8f3b4..b7a68c08 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java @@ -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)); // 设置强制下载不打开 diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java index bdf7977a..d95be9e4 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/listener/MyGlobalEventListener.java @@ -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 { diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/controller/ESRevisionController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/controller/ESRevisionController.java index 8ef8f2be..dbc1e49b 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/controller/ESRevisionController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/controller/ESRevisionController.java @@ -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)); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/SignInfo.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/SignInfo.java new file mode 100644 index 00000000..342e2ac8 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/entity/SignInfo.java @@ -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; + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/EsRevisionService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/EsRevisionService.java index 5f20c259..2e7a13a3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/EsRevisionService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/EsRevisionService.java @@ -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 { void approval(ESRevisionDataVO revisionData, boolean pass); void transfer(String taskId, String userId); + + Map> getSignInfo(String processInstanceId); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java index ef91f817..1d171d2f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esRevision/service/impl/EsRevisionServiceImpl.java @@ -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> getSignInfo(String processInstanceId) { + Map> result = new LinkedHashMap<>(); + LambdaQueryWrapper parWrapper = new LambdaQueryWrapper<>(); + parWrapper.eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId); + parWrapper.eq(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.COMPLETE.getValue()); + LambdaQueryWrapper revisionWrapper = new LambdaQueryWrapper<>(); + revisionWrapper.eq(ProcessEsRevision::getProcessInstanceId, processInstanceId); + ProcessEsRevision revision = getOne(revisionWrapper); + // 获取流程审批信息 + List approvalRecords = parService.list(parWrapper); + if (approvalRecords == null || approvalRecords.isEmpty()) { + throw new JeroBootException("流程审批记录为空"); + } + Map> parMap = approvalRecords.stream() + .collect(Collectors.groupingBy(ProcessApprovalRecord::getNodeId)); + List processApprovalRecords; + SignInfo singInfo; + + // 获取主起草用户 + processApprovalRecords = parMap.get(MAIN_DRAFT_USER_DISTRIBUTE); + singInfo = this.getSingInfo(processApprovalRecords.get(0)); + result.put("起草签署", Collections.singletonList(singInfo)); + + // 获取其他起草人用户 + List otherDraftUsers = new ArrayList<>(); + processApprovalRecords = parMap.get(OTHER_DRAFT_USER_CHECK); + List 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 relatedLeaders = new ArrayList<>(); + processApprovalRecords = parMap.get(RELATED_LEADER_APPROVAL); + List 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 processInfoVO) { ESRevisionDataVO businessInfoDTO = processInfoVO.getBusinessInfoDTO();