From 8169e50be7e88d72c3a0ec3d6807f7234f7a283f Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Sat, 14 May 2022 00:40:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BD=92=E6=A1=A3=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/activiti/dao/oa/IOaOnFileDao.java | 102 +++++ .../activiti/pojo/dtos/oa/OaOnFileDTO.java | 99 +++++ .../activiti/pojo/pos/oa/OaOnFilePO.java | 122 ++++++ .../activiti/pojo/vos/oa/OaOnFileVO.java | 73 ++++ .../service/oa/IOaFormReportService.java | 1 + .../activiti/service/oa/IOaOnFileService.java | 297 +++++++++++++ .../service/oa/impl/OaCcServiceImpl.java | 40 +- .../oa/impl/OaFormReportServiceImpl.java | 3 +- .../service/oa/impl/OaOnFileServiceImpl.java | 409 ++++++++++++++++++ .../mybatis/mapper/oa/oa-on-file-mapper.xml | 319 ++++++++++++++ .../templates/oa/list-read-of-mine.html | 2 +- .../templates/oa/list-unread-of-mine.html | 2 +- 12 files changed, 1449 insertions(+), 20 deletions(-) create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/IOaOnFileDao.java create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaOnFileDTO.java create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/pojo/pos/oa/OaOnFilePO.java create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/OaOnFileVO.java create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaOnFileService.java create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaOnFileServiceImpl.java create mode 100644 module-activiti/src/main/resources/mybatis/mapper/oa/oa-on-file-mapper.xml diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/IOaOnFileDao.java b/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/IOaOnFileDao.java new file mode 100644 index 00000000..1d6c8387 --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/IOaOnFileDao.java @@ -0,0 +1,102 @@ +package ink.wgink.module.activiti.dao.oa; + +import ink.wgink.exceptions.RemoveException; +import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.interfaces.init.IInitBaseTable; +import ink.wgink.module.activiti.pojo.dtos.oa.OaOnFileDTO; +import ink.wgink.module.activiti.pojo.pos.oa.OaOnFilePO; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName: IOaOnFileDao + * @Description: 归档 + * @Author: wanggeng + * @Date: 2022/5/13 09:49 + * @Version: 1.0 + */ +@Repository +public interface IOaOnFileDao extends IInitBaseTable { + + /** + * 新增 + * + * @param params + * @throws SaveException + */ + void save(Map params) throws SaveException; + + /** + * 删除 + * + * @param params + * @throws RemoveException + */ + void remove(Map params) throws RemoveException; + + + /** + * 删除(物理) + * + * @param params + * @throws RemoveException + */ + void delete(Map params) throws RemoveException; + + /** + * 列表 + * + * @param params + * @return + */ + OaOnFileDTO get(Map params); + + /** + * 列表 + * + * @param params + * @return + */ + OaOnFilePO getPO(Map params); + + /** + * 列表 + * + * @param params + * @return + * @throws SearchException + */ + List listPO(Map params) throws SearchException; + + /** + * 列表 + * + * @param params + * @return + * @throws SearchException + */ + List list(Map params) throws SearchException; + + /** + * 未归档的流程实例ID列表 + * + * @param params + * @return + * @throws SearchException + */ + List listUnOnFileProcessInstanceId(Map params) throws SearchException; + + /** + * 统计 + * + * @param params + * @return + * @throws SearchException + */ + Integer count(Map params) throws SearchException; + + +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaOnFileDTO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaOnFileDTO.java new file mode 100644 index 00000000..2c39da81 --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/OaOnFileDTO.java @@ -0,0 +1,99 @@ +package ink.wgink.module.activiti.pojo.dtos.oa; + +import io.swagger.annotations.ApiModel; + +import java.io.Serializable; + +/** + * @ClassName: OaOnFilePO + * @Description: 归档 + * @Author: wanggeng + * @Date: 2022/5/13 09:51 + * @Version: 1.0 + */ +@ApiModel +public class OaOnFileDTO implements Serializable { + + private static final long serialVersionUID = 8758404155432312142L; + private String onFileId; + private String formCode; + private Integer formVersion; + private String processInstanceId; + private String reportUid; + private String mainTitle; + private String processDefinitionName; + private String processStartTime; + private String processEndTime; + + public String getOnFileId() { + return onFileId == null ? "" : onFileId.trim(); + } + + public void setOnFileId(String onFileId) { + this.onFileId = onFileId; + } + + public String getFormCode() { + return formCode == null ? "" : formCode.trim(); + } + + public void setFormCode(String formCode) { + this.formCode = formCode; + } + + public Integer getFormVersion() { + return formVersion == null ? 0 : formVersion; + } + + public void setFormVersion(Integer formVersion) { + this.formVersion = formVersion; + } + + public String getProcessInstanceId() { + return processInstanceId == null ? "" : processInstanceId.trim(); + } + + public void setProcessInstanceId(String processInstanceId) { + this.processInstanceId = processInstanceId; + } + + public String getReportUid() { + return reportUid == null ? "" : reportUid.trim(); + } + + public void setReportUid(String reportUid) { + this.reportUid = reportUid; + } + + public String getMainTitle() { + return mainTitle == null ? "" : mainTitle.trim(); + } + + public void setMainTitle(String mainTitle) { + this.mainTitle = mainTitle; + } + + public String getProcessDefinitionName() { + return processDefinitionName == null ? "" : processDefinitionName.trim(); + } + + public void setProcessDefinitionName(String processDefinitionName) { + this.processDefinitionName = processDefinitionName; + } + + public String getProcessStartTime() { + return processStartTime == null ? "" : processStartTime.trim(); + } + + public void setProcessStartTime(String processStartTime) { + this.processStartTime = processStartTime; + } + + public String getProcessEndTime() { + return processEndTime == null ? "" : processEndTime.trim(); + } + + public void setProcessEndTime(String processEndTime) { + this.processEndTime = processEndTime; + } +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/pos/oa/OaOnFilePO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/pos/oa/OaOnFilePO.java new file mode 100644 index 00000000..b1c4d26f --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/pos/oa/OaOnFilePO.java @@ -0,0 +1,122 @@ +package ink.wgink.module.activiti.pojo.pos.oa; + +import java.io.Serializable; + +/** + * @ClassName: OaOnFilePO + * @Description: 归档 + * @Author: wanggeng + * @Date: 2022/5/13 09:51 + * @Version: 1.0 + */ +public class OaOnFilePO implements Serializable { + + private Long id; + private String onFileId; + private String formCode; + private Integer formVersion; + private String processInstanceId; + private String reportUid; + private String mainTitle; + private String creator; + private String gmtCreate; + private String modifier; + private String gmtModified; + private Integer isDelete; + + public Long getId() { + return id == null ? 0 : id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getOnFileId() { + return onFileId == null ? "" : onFileId.trim(); + } + + public void setOnFileId(String onFileId) { + this.onFileId = onFileId; + } + + public String getFormCode() { + return formCode == null ? "" : formCode.trim(); + } + + public void setFormCode(String formCode) { + this.formCode = formCode; + } + + public Integer getFormVersion() { + return formVersion == null ? 0 : formVersion; + } + + public void setFormVersion(Integer formVersion) { + this.formVersion = formVersion; + } + + public String getProcessInstanceId() { + return processInstanceId == null ? "" : processInstanceId.trim(); + } + + public void setProcessInstanceId(String processInstanceId) { + this.processInstanceId = processInstanceId; + } + + public String getReportUid() { + return reportUid == null ? "" : reportUid.trim(); + } + + public void setReportUid(String reportUid) { + this.reportUid = reportUid; + } + + public String getMainTitle() { + return mainTitle == null ? "" : mainTitle.trim(); + } + + public void setMainTitle(String mainTitle) { + this.mainTitle = mainTitle; + } + + public String getCreator() { + return creator == null ? "" : creator.trim(); + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getGmtCreate() { + return gmtCreate == null ? "" : gmtCreate.trim(); + } + + public void setGmtCreate(String gmtCreate) { + this.gmtCreate = gmtCreate; + } + + public String getModifier() { + return modifier == null ? "" : modifier.trim(); + } + + public void setModifier(String modifier) { + this.modifier = modifier; + } + + public String getGmtModified() { + return gmtModified == null ? "" : gmtModified.trim(); + } + + public void setGmtModified(String gmtModified) { + this.gmtModified = gmtModified; + } + + public Integer getIsDelete() { + return isDelete == null ? 0 : isDelete; + } + + public void setIsDelete(Integer isDelete) { + this.isDelete = isDelete; + } +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/OaOnFileVO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/OaOnFileVO.java new file mode 100644 index 00000000..6b04b23f --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/OaOnFileVO.java @@ -0,0 +1,73 @@ +package ink.wgink.module.activiti.pojo.vos.oa; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; + +/** + * @ClassName: OaOnFilePO + * @Description: 归档 + * @Author: wanggeng + * @Date: 2022/5/13 09:51 + * @Version: 1.0 + */ +@ApiModel +public class OaOnFileVO implements Serializable { + + @ApiModelProperty(name = "formCode", value = "表单编码") + private String formCode; + @ApiModelProperty(name = "formVersion", value = "表单版本") + private Integer formVersion; + @ApiModelProperty(name = "processInstanceId", value = "实例ID") + private String processInstanceId; + @ApiModelProperty(name = "reportUid", value = "上报ID") + private String reportUid; + + public String getFormCode() { + return formCode == null ? "" : formCode.trim(); + } + + public void setFormCode(String formCode) { + this.formCode = formCode; + } + + public Integer getFormVersion() { + return formVersion == null ? 0 : formVersion; + } + + public void setFormVersion(Integer formVersion) { + this.formVersion = formVersion; + } + + public String getProcessInstanceId() { + return processInstanceId == null ? "" : processInstanceId.trim(); + } + + public void setProcessInstanceId(String processInstanceId) { + this.processInstanceId = processInstanceId; + } + + public String getReportUid() { + return reportUid == null ? "" : reportUid.trim(); + } + + public void setReportUid(String reportUid) { + this.reportUid = reportUid; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("{"); + sb.append("\"formCode\":\"") + .append(formCode).append('\"'); + sb.append(",\"formVersion\":") + .append(formVersion); + sb.append(",\"processInstanceId\":\"") + .append(processInstanceId).append('\"'); + sb.append(",\"reportUid\":\"") + .append(reportUid).append('\"'); + sb.append('}'); + return sb.toString(); + } +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java index 9c22ea34..1c8febbb 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaFormReportService.java @@ -19,6 +19,7 @@ public interface IOaFormReportService { String KEY_FORM_CODE = "formCode"; String KEY_FORM_VERSION = "formVersion"; String KEY_REPORT_UID = "reportUid"; + String KEY_MAIN_TITLE = "MAIN_TITLE"; String KEY_ASSIGNEE_USER = "assigneeUser"; String KEY_ASSIGNEE_USER_NAME = "assigneeUserName"; String KEY_START_ASSIGNEE_USER = "startAssigneeUser"; diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaOnFileService.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaOnFileService.java new file mode 100644 index 00000000..fb40964f --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/IOaOnFileService.java @@ -0,0 +1,297 @@ +package ink.wgink.module.activiti.service.oa; + +import ink.wgink.module.activiti.pojo.dtos.oa.OaOnFileDTO; +import ink.wgink.module.activiti.pojo.pos.oa.OaOnFilePO; +import ink.wgink.module.activiti.pojo.vos.oa.OaOnFileVO; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.result.SuccessResultList; + +import java.util.List; +import java.util.Map; + +/** + * @ClassName: IOaOnFileService + * @Description: oa归档 + * @Author: wanggeng + * @Date: 2022/5/13 09:58 + * @Version: 1.0 + */ +public interface IOaOnFileService { + /** + * 已完成 + */ + String KEY_FINISHED = "finished"; + /** + * 未完成 + */ + String KEY_UN_FINISHED = "unFinished"; + + /** + * 新增 + * + * @param oaOnFileVO + */ + void save(OaOnFileVO oaOnFileVO); + + /** + * 新增 + * + * @param oaOnFileVO + * @return + */ + String saveAndReturnId(OaOnFileVO oaOnFileVO); + + /** + * 删除 + * + * @param ids + */ + void remove(List ids); + + /** + * 删除(物理) + * + * @param ids + */ + void delete(List ids); + + /** + * 详情 + * + * @param params + * @return + */ + OaOnFileDTO get(Map params); + + /** + * 详情 + * + * @param onFileId + * @return + */ + OaOnFileDTO getById(String onFileId); + + /** + * 详情 + * + * @param processInstanceId + * @return + */ + OaOnFileDTO getByProcessInstanceId(String processInstanceId); + + /** + * 详情 + * + * @param reportUid + * @return + */ + OaOnFileDTO getByReportUid(String reportUid); + + /** + * 详情 + * + * @param params + * @return + */ + OaOnFilePO getPO(Map params); + + /** + * 详情 + * + * @param onFileId + * @return + */ + OaOnFilePO getPOById(String onFileId); + + /** + * 详情 + * + * @param processInstanceId + * @return + */ + OaOnFilePO getPOByProcessInstanceId(String processInstanceId); + + /** + * 详情 + * + * @param reportUid + * @return + */ + OaOnFilePO getPOByReportUid(String reportUid); + + /** + * 列表 + * + * @param params + * @return + */ + List listPO(Map params); + + /** + * 列表 + * + * @param onFileIds + * @return + */ + List listPOByIds(List onFileIds); + + /** + * 列表 + * + * @param formCode + * @param formVersion + * @return + */ + List listPOByFormCodeAndFormVersion(String formCode, Integer formVersion); + + /** + * 列表 + * + * @param processInstanceIds + * @return + */ + List listPOByProcessInstanceIds(List processInstanceIds); + + /** + * 列表 + * + * @param reportUids + * @return + */ + List listPOByReportUids(List reportUids); + + /** + * 列表 + * + * @param params + * @return + */ + List list(Map params); + + /** + * 列表 + * + * @param onFileIds + * @return + */ + List listByIds(List onFileIds); + + /** + * 列表 + * + * @param formCode + * @param formVersion + * @return + */ + List listByFormCodeAndFormVersion(String formCode, Integer formVersion); + + /** + * 列表 + * + * @param processInstanceIds + * @return + */ + List listByProcessInstanceIds(List processInstanceIds); + + /** + * 列表 + * + * @param reportUids + * @return + */ + List listByReportUids(List reportUids); + + /** + * 未归档 + * + * @return + */ + List listUnOnFile(); + + /** + * 未完成且未归档 + * + * @return + */ + List listUnFinishedUnOnFile(); + + /** + * 已完成且未归档 + * + * @return + */ + List listFinishedUnOnFile(); + + /** + * 分页列表 + * + * @param page + * @return + */ + SuccessResultList> listPage(ListPage page); + + /** + * 分页列表 + * + * @param onFileIds + * @param page + * @return + */ + SuccessResultList> listPageByIds(List onFileIds, ListPage page); + + /** + * 分页列表 + * + * @param formCode + * @param formVersion + * @param page + * @return + */ + SuccessResultList> listPageByFormCodeAndFormVersion(String formCode, Integer formVersion, ListPage page); + + /** + * 分页列表 + * + * @param processInstanceIds + * @param page + * @return + */ + SuccessResultList> listPageByProcessInstanceIds(List processInstanceIds, ListPage page); + + /** + * 分页列表 + * + * @param reportUids + * @param page + * @return + */ + SuccessResultList> listPageByReportUids(List reportUids, ListPage page); + + /** + * 未归档分页 + * + * @param page + * @return + */ + SuccessResultList> listPageUnOnFile(ListPage page); + + + /** + * 未完成且未归档分页列表 + * + * @param page + * @return + */ + SuccessResultList> listPageUnFinishedUnOnFile(ListPage page); + + + /** + * 已完成且未归档分页列表 + * + * @param page + * @return + */ + SuccessResultList> listPageFinishedUnOnFile(ListPage page); + + +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaCcServiceImpl.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaCcServiceImpl.java index b91accd6..e89edde1 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaCcServiceImpl.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaCcServiceImpl.java @@ -10,12 +10,14 @@ import ink.wgink.module.activiti.pojo.pos.oa.OaCcPO; import ink.wgink.module.activiti.pojo.vos.oa.OaCcVO; import ink.wgink.module.activiti.service.oa.IOaCcService; import ink.wgink.module.form.service.design.IFormDesignService; -import ink.wgink.module.form.service.report.IFormReportService; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.dtos.user.UserDTO; import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.util.ArrayListUtil; import ink.wgink.util.UUIDUtil; import ink.wgink.util.map.HashMapUtil; +import org.activiti.engine.HistoryService; +import org.activiti.engine.history.HistoricProcessInstance; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -37,7 +39,7 @@ public class OaCcServiceImpl extends DefaultBaseService implements IOaCcService @Autowired private IUserBaseService userBaseService; @Autowired - private IFormReportService formReportService; + private HistoryService historyService; @Override @@ -154,25 +156,29 @@ public class OaCcServiceImpl extends DefaultBaseService implements IOaCcService /** * 设置主标题 * - * @param oaCcDTOS + * @param oaCcDTOs */ - private void setMainTitle(List oaCcDTOS) { - if (oaCcDTOS.isEmpty()) { + private void setMainTitle(List oaCcDTOs) { + if (oaCcDTOs.isEmpty()) { return; } - oaCcDTOS.forEach(oaCcDTO -> { - Map reportMap = formReportService.get(oaCcDTO.getFormCode(), oaCcDTO.getFormVersion(), oaCcDTO.getReportUid()); - Object mainTitleObj = reportMap.get(IFormDesignService.FIELD_MAIN_TITLE); - if (mainTitleObj == null) { - oaCcDTO.setMainTitle("您有一条待阅内容"); - return; + List processInstanceIds = ArrayListUtil.listBeanStringIdValue(oaCcDTOs, "processInstanceId", OaCcDTO.class); + List processInstances = historyService.createHistoricProcessInstanceQuery() + .processInstanceIds(new HashSet<>(processInstanceIds)) + .includeProcessVariables().list(); + oaCcDTOs.forEach(oaCcDTO -> { + for (HistoricProcessInstance processInstance : processInstances) { + if (StringUtils.equals(oaCcDTO.getProcessInstanceId(), processInstance.getId())) { + Map processVariables = processInstance.getProcessVariables(); + String mainTitle = (String) processVariables.get(IFormDesignService.FIELD_MAIN_TITLE); + if (StringUtils.isBlank(mainTitle)) { + oaCcDTO.setMainTitle("您有一条待阅内容"); + } else { + oaCcDTO.setMainTitle(mainTitle); + } + break; + } } - String mainTitle = mainTitleObj.toString(); - if (StringUtils.isBlank(mainTitle)) { - oaCcDTO.setMainTitle("您有一条待阅内容"); - return; - } - oaCcDTO.setMainTitle(mainTitle); }); } diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java index a0b7570c..79bdb8d0 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaFormReportServiceImpl.java @@ -17,6 +17,7 @@ import ink.wgink.module.activiti.pojo.vos.oa.UpdateTaskAssigneeVO; import ink.wgink.module.activiti.service.activiti.IActivitiModelService; import ink.wgink.module.activiti.service.oa.IOaCcService; import ink.wgink.module.activiti.service.oa.IOaFormReportService; +import ink.wgink.module.form.service.design.IFormDesignService; import ink.wgink.module.form.service.design.IFormFieldService; import ink.wgink.module.form.service.report.IFormReportService; import ink.wgink.pojo.ListPage; @@ -446,7 +447,7 @@ public class OaFormReportServiceImpl extends DefaultBaseService implements IOaFo public Map get(String formCode, Integer formVersion, String uid) { Map detail = formReportService.get(formCode, formVersion, uid); // 查询会签列表 - String processInstanceId = detail.get("process_instance_id").toString(); + String processInstanceId = detail.get(IFormDesignService.PROCESS_INSTANCE_ID).toString(); LOG.debug("设置签批内容(流程变量)"); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().processInstanceId(processInstanceId).singleResult(); if (historicProcessInstance == null) { diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaOnFileServiceImpl.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaOnFileServiceImpl.java new file mode 100644 index 00000000..bc2851c5 --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/OaOnFileServiceImpl.java @@ -0,0 +1,409 @@ +package ink.wgink.module.activiti.service.oa.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.module.activiti.dao.oa.IOaOnFileDao; +import ink.wgink.module.activiti.pojo.dtos.oa.OaOnFileDTO; +import ink.wgink.module.activiti.pojo.pos.oa.OaOnFilePO; +import ink.wgink.module.activiti.pojo.vos.oa.OaOnFileVO; +import ink.wgink.module.activiti.service.oa.IOaFormReportService; +import ink.wgink.module.activiti.service.oa.IOaOnFileService; +import ink.wgink.module.form.service.design.IFormDesignService; +import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.result.SuccessResultList; +import ink.wgink.util.ArrayListUtil; +import ink.wgink.util.UUIDUtil; +import ink.wgink.util.date.DateUtil; +import ink.wgink.util.map.HashMapUtil; +import org.activiti.engine.HistoryService; +import org.activiti.engine.history.HistoricProcessInstance; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @ClassName: OaOnFileServiceImpl + * @Description: OA归档 + * @Author: wanggeng + * @Date: 2022/5/13 09:58 + * @Version: 1.0 + */ +@Service +public class OaOnFileServiceImpl extends DefaultBaseService implements IOaOnFileService { + + @Autowired + private IOaOnFileDao oaOnFileDao; + @Autowired + private HistoryService historyService; + + @Override + public void save(OaOnFileVO oaOnFileVO) { + saveAndReturnId(oaOnFileVO); + } + + @Override + public String saveAndReturnId(OaOnFileVO oaOnFileVO) { + String onFileId = UUIDUtil.getUUID(); + Map params = HashMapUtil.beanToMap(oaOnFileVO); + params.put("onFileId", onFileId); +// setSaveInfo(params); + params.put("isDelete", 0); + oaOnFileDao.save(params); + return onFileId; + } + + @Override + public void remove(List ids) { + Map params = getHashMap(2); + params.put("onFileIds", ids); + setUpdateInfo(params); + oaOnFileDao.remove(params); + } + + @Override + public void delete(List ids) { + Map params = getHashMap(2); + params.put("onFileIds", ids); + oaOnFileDao.delete(params); + } + + @Override + public OaOnFileDTO get(Map params) { + params = params == null ? getHashMap(0) : params; + return oaOnFileDao.get(params); + } + + @Override + public OaOnFileDTO getById(String onFileId) { + Map params = getHashMap(2); + params.put("onFileId", onFileId); + return get(params); + } + + @Override + public OaOnFileDTO getByProcessInstanceId(String processInstanceId) { + Map params = getHashMap(2); + params.put(IFormDesignService.PARAM_PROCESS_INSTANCE_ID, processInstanceId); + return get(params); + } + + @Override + public OaOnFileDTO getByReportUid(String reportUid) { + Map params = getHashMap(2); + params.put(IOaFormReportService.KEY_REPORT_UID, reportUid); + return get(params); + } + + @Override + public OaOnFilePO getPO(Map params) { + params = params == null ? getHashMap(0) : params; + return oaOnFileDao.getPO(params); + } + + @Override + public OaOnFilePO getPOById(String onFileId) { + Map params = getHashMap(2); + params.put("onFileId", onFileId); + return getPO(params); + } + + @Override + public OaOnFilePO getPOByProcessInstanceId(String processInstanceId) { + Map params = getHashMap(2); + params.put(IFormDesignService.PARAM_PROCESS_INSTANCE_ID, processInstanceId); + return getPO(params); + } + + @Override + public OaOnFilePO getPOByReportUid(String reportUid) { + Map params = getHashMap(2); + params.put(IOaFormReportService.KEY_REPORT_UID, reportUid); + return getPO(params); + } + + @Override + public List listPO(Map params) { + params = params == null ? getHashMap(0) : params; + return oaOnFileDao.listPO(params); + } + + @Override + public List listPOByIds(List onFileIds) { + if (onFileIds == null || onFileIds.isEmpty()) { + return new ArrayList<>(); + } + Map params = getHashMap(2); + params.put("onFileIds", onFileIds); + return listPO(params); + } + + @Override + public List listPOByFormCodeAndFormVersion(String formCode, Integer formVersion) { + if (StringUtils.isBlank(formCode) || formVersion == null) { + return new ArrayList<>(); + } + Map params = getHashMap(4); + params.put(IFormDesignService.PARAM_FORM_CODE, formCode); + params.put(IFormDesignService.PARAM_FORM_VERSION, formVersion); + return listPO(params); + } + + @Override + public List listPOByProcessInstanceIds(List processInstanceIds) { + if (processInstanceIds == null || processInstanceIds.isEmpty()) { + return new ArrayList<>(); + } + Map params = getHashMap(2); + params.put("processInstanceIds", processInstanceIds); + return listPO(params); + } + + @Override + public List listPOByReportUids(List reportUids) { + if (reportUids == null || reportUids.isEmpty()) { + return new ArrayList<>(); + } + Map params = getHashMap(2); + params.put("reportUids", reportUids); + return listPO(params); + } + + @Override + public List list(Map params) { + params = params == null ? getHashMap(0) : params; + List oaOnFileDTOs = oaOnFileDao.list(params); + setProcessInstanceParams(oaOnFileDTOs); + return oaOnFileDTOs; + } + + @Override + public List listByIds(List onFileIds) { + if (onFileIds == null || onFileIds.isEmpty()) { + return new ArrayList<>(); + } + Map params = getHashMap(2); + params.put("onFileIds", onFileIds); + return list(params); + } + + @Override + public List listByFormCodeAndFormVersion(String formCode, Integer formVersion) { + if (StringUtils.isBlank(formCode) || formVersion == null) { + return new ArrayList<>(); + } + Map params = getHashMap(4); + params.put(IFormDesignService.PARAM_FORM_CODE, formCode); + params.put(IFormDesignService.PARAM_FORM_VERSION, formVersion); + return list(params); + } + + @Override + public List listByProcessInstanceIds(List processInstanceIds) { + if (processInstanceIds == null || processInstanceIds.isEmpty()) { + return new ArrayList<>(); + } + Map params = getHashMap(2); + params.put("processInstanceIds", processInstanceIds); + return list(params); + } + + @Override + public List listByReportUids(List reportUids) { + if (reportUids == null || reportUids.isEmpty()) { + return new ArrayList<>(); + } + Map params = getHashMap(2); + params.put("reportUids", reportUids); + return list(params); + } + + @Override + public List listUnOnFile() { + Map params = getHashMap(0); + List processInstanceIds = oaOnFileDao.listUnOnFileProcessInstanceId(params); + return listUnOnFile(new HashSet<>(processInstanceIds)); + } + + @Override + public List listUnFinishedUnOnFile() { + Map params = getHashMap(2); + params.put(KEY_UN_FINISHED, ISystemConstant.IS_TRUE); + List processInstanceIds = oaOnFileDao.listUnOnFileProcessInstanceId(params); + return listUnFinishedUnOnFile(new HashSet<>(processInstanceIds)); + } + + @Override + public List listFinishedUnOnFile() { + Map params = getHashMap(2); + params.put(KEY_FINISHED, ISystemConstant.IS_TRUE); + List processInstanceIds = oaOnFileDao.listUnOnFileProcessInstanceId(params); + return listFinishedUnOnFile(new HashSet<>(processInstanceIds)); + } + + @Override + public SuccessResultList> listPage(ListPage page) { + PageHelper.startPage(page.getPage(), page.getRows()); + List oaOnFileDTOs = oaOnFileDao.list(page.getParams()); + PageInfo pageInfo = new PageInfo<>(oaOnFileDTOs); + setProcessInstanceParams(oaOnFileDTOs); + return new SuccessResultList<>(oaOnFileDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } + + @Override + public SuccessResultList> listPageByIds(List onFileIds, ListPage page) { + page.getParams().put("onFileIds", onFileIds); + return listPage(page); + } + + @Override + public SuccessResultList> listPageByFormCodeAndFormVersion(String formCode, Integer formVersion, ListPage page) { + page.getParams().put(IFormDesignService.PARAM_FORM_CODE, formCode); + page.getParams().put(IFormDesignService.PARAM_FORM_VERSION, formVersion); + return listPage(page); + } + + @Override + public SuccessResultList> listPageByProcessInstanceIds(List processInstanceIds, ListPage page) { + page.getParams().put("processInstanceIds", processInstanceIds); + return listPage(page); + } + + @Override + public SuccessResultList> listPageByReportUids(List reportUids, ListPage page) { + page.getParams().put("reportUids", reportUids); + return listPage(page); + } + + @Override + public SuccessResultList> listPageUnOnFile(ListPage page) { + Map params = getHashMap(2); + PageHelper.startPage(page.getPage(), page.getRows()); + List processInstanceIds = oaOnFileDao.listUnOnFileProcessInstanceId(params); + PageInfo pageInfo = new PageInfo<>(processInstanceIds); + List oaOnFileDTOs = listUnOnFile(new HashSet<>(processInstanceIds)); + return new SuccessResultList<>(oaOnFileDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } + + @Override + public SuccessResultList> listPageUnFinishedUnOnFile(ListPage page) { + Map params = getHashMap(2); + params.put(KEY_UN_FINISHED, ISystemConstant.IS_TRUE); + PageHelper.startPage(page.getPage(), page.getRows()); + List processInstanceIds = oaOnFileDao.listUnOnFileProcessInstanceId(params); + PageInfo pageInfo = new PageInfo<>(processInstanceIds); + List oaOnFileDTOs = listUnFinishedUnOnFile(new HashSet<>(processInstanceIds)); + return new SuccessResultList<>(oaOnFileDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } + + @Override + public SuccessResultList> listPageFinishedUnOnFile(ListPage page) { + Map params = getHashMap(2); + params.put(KEY_FINISHED, ISystemConstant.IS_TRUE); + PageHelper.startPage(page.getPage(), page.getRows()); + List processInstanceIds = oaOnFileDao.listUnOnFileProcessInstanceId(params); + PageInfo pageInfo = new PageInfo<>(processInstanceIds); + List oaOnFileDTOs = listFinishedUnOnFile(new HashSet<>(processInstanceIds)); + return new SuccessResultList<>(oaOnFileDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } + + /** + * 设置流程参数 + * + * @param oaOnFileDTOs + */ + private void setProcessInstanceParams(List oaOnFileDTOs) { + List processInstanceIds = ArrayListUtil.listBeanStringIdValue(oaOnFileDTOs, "processInstanceId", OaOnFileDTO.class); + List historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processInstanceIds(new HashSet<>(processInstanceIds)) + .includeProcessVariables() + .list(); + for (OaOnFileDTO oaOnFileDTO : oaOnFileDTOs) { + for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) { + if (StringUtils.equals(oaOnFileDTO.getProcessInstanceId(), historicProcessInstance.getId())) { + Map processVariables = historicProcessInstance.getProcessVariables(); + String mainTitle = (String) processVariables.get(IOaFormReportService.KEY_MAIN_TITLE); + oaOnFileDTO.setProcessDefinitionName(historicProcessInstance.getProcessDefinitionName()); + oaOnFileDTO.setProcessStartTime(DateUtil.getDateTime(historicProcessInstance.getStartTime())); + if (historicProcessInstance.getEndTime() != null) { + oaOnFileDTO.setProcessEndTime(DateUtil.getDateTime(historicProcessInstance.getEndTime())); + } + oaOnFileDTO.setMainTitle(mainTitle); + break; + } + } + } + } + + /** + * 未归档列表 + * + * @param processInstanceIdSet + * @return + */ + private List listUnOnFile(Set processInstanceIdSet) { + return historyService.createHistoricProcessInstanceQuery() + .processInstanceIds(processInstanceIdSet) + .includeProcessVariables() + .list() + .stream().map(historicProcessInstance -> getOnFileDTO(historicProcessInstance)).collect(Collectors.toList()); + } + + /** + * 未完成的未归档列表 + * + * @param processInstanceIdSet + * @return + */ + private List listUnFinishedUnOnFile(Set processInstanceIdSet) { + if (processInstanceIdSet.isEmpty()) { + return new ArrayList<>(); + } + return historyService.createHistoricProcessInstanceQuery() + .processInstanceIds(new HashSet<>(processInstanceIdSet)) + .unfinished() + .includeProcessVariables() + .list() + .stream().map(historicProcessInstance -> getOnFileDTO(historicProcessInstance)).collect(Collectors.toList()); + } + + /** + * 已完成的未归档列表 + * + * @param processInstanceIdSet + * @return + */ + private List listFinishedUnOnFile(Set processInstanceIdSet) { + return historyService.createHistoricProcessInstanceQuery() + .processInstanceIds(new HashSet<>(processInstanceIdSet)) + .finished() + .includeProcessVariables() + .list() + .stream().map(historicProcessInstance -> getOnFileDTO(historicProcessInstance)).collect(Collectors.toList()); + } + + private OaOnFileDTO getOnFileDTO(HistoricProcessInstance historicProcessInstance) { + Map processVariables = historicProcessInstance.getProcessVariables(); + String formCode = (String) processVariables.get(IOaFormReportService.KEY_FORM_CODE); + Integer formVersion = (Integer) processVariables.get(IOaFormReportService.KEY_FORM_VERSION); + String reportUid = (String) processVariables.get(IOaFormReportService.KEY_REPORT_UID); + String mainTitle = (String) processVariables.get(IOaFormReportService.KEY_MAIN_TITLE); + OaOnFileDTO oaOnFileDTO = new OaOnFileDTO(); + oaOnFileDTO.setFormCode(formCode); + oaOnFileDTO.setFormVersion(formVersion); + oaOnFileDTO.setProcessInstanceId(historicProcessInstance.getId()); + oaOnFileDTO.setProcessDefinitionName(historicProcessInstance.getProcessDefinitionName()); + oaOnFileDTO.setProcessStartTime(DateUtil.getDateTime(historicProcessInstance.getStartTime())); + if (historicProcessInstance.getEndTime() != null) { + oaOnFileDTO.setProcessEndTime(DateUtil.getDateTime(historicProcessInstance.getEndTime())); + } + oaOnFileDTO.setReportUid(reportUid); + oaOnFileDTO.setMainTitle(mainTitle); + return oaOnFileDTO; + } + +} diff --git a/module-activiti/src/main/resources/mybatis/mapper/oa/oa-on-file-mapper.xml b/module-activiti/src/main/resources/mybatis/mapper/oa/oa-on-file-mapper.xml new file mode 100644 index 00000000..95e2a82c --- /dev/null +++ b/module-activiti/src/main/resources/mybatis/mapper/oa/oa-on-file-mapper.xml @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CREATE TABLE IF NOT EXISTS `oa_on_file` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `on_file_id` char(36) DEFAULT NULL, + `form_code` varchar(255) DEFAULT NULL COMMENT '表单编码', + `form_version` int(11) DEFAULT NULL COMMENT '表单版本', + `process_instance_id` char(36) DEFAULT NULL COMMENT '流程实例ID', + `report_uid` char(36) DEFAULT NULL COMMENT '上报ID', + `creator` char(36) DEFAULT NULL COMMENT '创建人', + `gmt_create` date DEFAULT NULL COMMENT '创建时间', + `is_delete` int(1) DEFAULT NULL COMMENT '是否删除', + PRIMARY KEY (`id`), + UNIQUE KEY `on_file_id` (`on_file_id`), + KEY `form_code` (`form_code`,`form_version`), + KEY `process_instance_id` (`process_instance_id`), + KEY `report_uid` (`report_uid`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='OA归档'; + + + + + INSERT INTO oa_on_file( + on_file_id, + form_code, + form_version, + process_instance_id, + report_uid, + gmt_create, + creator, + gmt_modified, + modifier, + is_delete + ) VALUES( + #{onFileId}, + #{formCode}, + #{formVersion}, + #{processInstanceId}, + #{reportUid}, + #{gmtCreate}, + #{creator}, + #{gmtModified}, + #{modifier}, + #{isDelete} + ) + + + + + UPDATE + oa_on_file + SET + is_delete = 0, + modifier = #{modifier}, + gmt_modified = #{gmtModified} + WHERE + + oa_file_id IN + + #{oaFileIds[${index}]} + + + + + + + DELETE FROM + oa_on_file + WHERE + + oa_file_id IN + + #{oaFileIds[${index}]} + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/module-activiti/src/main/resources/templates/oa/list-read-of-mine.html b/module-activiti/src/main/resources/templates/oa/list-read-of-mine.html index e2a13815..9323ebc0 100644 --- a/module-activiti/src/main/resources/templates/oa/list-read-of-mine.html +++ b/module-activiti/src/main/resources/templates/oa/list-read-of-mine.html @@ -93,7 +93,7 @@ return rowData; } }, - {field: 'form', width: 100, title: '操作', align:'center', + {field: 'form', width: 100, title: '操作', align:'center', fixed: 'right', templet: function(row) { return '
' + ''+ diff --git a/module-activiti/src/main/resources/templates/oa/list-unread-of-mine.html b/module-activiti/src/main/resources/templates/oa/list-unread-of-mine.html index 3f4cdfd0..a2ca836f 100644 --- a/module-activiti/src/main/resources/templates/oa/list-unread-of-mine.html +++ b/module-activiti/src/main/resources/templates/oa/list-unread-of-mine.html @@ -84,7 +84,7 @@ return rowData; } }, - {field: 'form', width: 100, title: '操作', align:'center', + {field: 'form', width: 100, title: '操作', align:'center', fixed: 'right', templet: function(row) { return '
' + ''+