From 4cd71c0be46a461432989ae7c5d6d56d9e7bbbed Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 17 二月 2025 13:54:31 +0800
Subject: [PATCH] 查询待办任务时,判断是否挂起状态。增加一个临时导入项目的接口
---
flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java | 12 +++
flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java | 2
business/src/main/java/com/ycl/controller/ProjectInfoController.java | 31 +++++++
business/src/main/java/com/ycl/domain/excel/ProjectTempImport.java | 47 +++++++++++
flowable/src/main/java/com/ycl/service/common/TaskCommonService.java | 2
business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java | 9 ++
system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java | 2
business/src/main/java/com/ycl/listener/excel/CurrencyDataListener.java | 105 ++++++++++++++++++++++++++
system/src/main/resources/mapper/system/SysDeptMapper.xml | 4 +
9 files changed, 214 insertions(+), 0 deletions(-)
diff --git a/business/src/main/java/com/ycl/controller/ProjectInfoController.java b/business/src/main/java/com/ycl/controller/ProjectInfoController.java
index ee060f8..33bd028 100644
--- a/business/src/main/java/com/ycl/controller/ProjectInfoController.java
+++ b/business/src/main/java/com/ycl/controller/ProjectInfoController.java
@@ -1,18 +1,25 @@
package com.ycl.controller;
+import com.alibaba.excel.EasyExcel;
import com.ycl.common.base.Result;
import com.ycl.common.exception.base.BaseException;
import com.ycl.common.group.Add;
import com.ycl.common.group.Update;
import com.ycl.common.utils.ProjectCodeGenerator;
+import com.ycl.common.utils.bean.BeanUtils;
import com.ycl.common.utils.excel.OutputExcelUtils;
+import com.ycl.domain.entity.ProjectInfo;
import com.ycl.domain.excel.ProjectExcelTemplate;
+import com.ycl.domain.excel.ProjectTempImport;
import com.ycl.domain.form.DocumentInfoForm;
import com.ycl.domain.form.ProjectForm;
import com.ycl.domain.form.ProjectInfoForm;
import com.ycl.domain.query.ProjectExportQuery;
import com.ycl.domain.query.ProjectInfoQuery;
+import com.ycl.listener.excel.CurrencyDataListener;
import com.ycl.service.ProjectInfoService;
+import com.ycl.system.mapper.SysDeptMapper;
+import com.ycl.system.service.ISysDeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@@ -23,8 +30,10 @@
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import java.io.IOException;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
+import java.util.function.Consumer;
/**
* 椤圭洰绠$悊鍩虹淇℃伅琛� 鍓嶇鎺у埗鍣�
@@ -40,6 +49,28 @@
public class ProjectInfoController {
private final ProjectInfoService projectInfoService;
+ private final SysDeptMapper deptMapper;
+
+ @PostMapping("/import/temp")
+ @ApiOperation(value = "涓存椂瀵煎叆", notes = "涓存椂瀵煎叆")
+// @PreAuthorize("hasAuthority('projectInfo:add')")
+ public Result importTemp(@RequestPart("file") MultipartFile file) throws IOException {
+ Consumer<List<ProjectTempImport>> consumer = (data) -> {
+ for (ProjectTempImport project : data) {
+ ProjectInfo projectInfo = new ProjectInfo();
+ BeanUtils.copyProperties(project, projectInfo);
+ projectInfo.setYearInvestAmount(project.getTzje());
+ // 澶勭悊涓氫富鍗曚綅銆佷富绠¢儴闂╥d
+ Long yzId = deptMapper.selectByName(project.getProjectOwnerUnit());
+ projectInfo.setProjectOwnerUnit(yzId);
+ Long zgId = deptMapper.selectByName(project.getCompetentDepartment());
+ projectInfo.setCompetentDepartment(zgId + "");
+ projectInfoService.save(projectInfo);
+ }
+ };
+ EasyExcel.read(file.getInputStream(), ProjectTempImport.class, new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll();
+ return Result.ok();
+ }
@PostMapping
@ApiOperation(value = "娣诲姞", notes = "娣诲姞")
diff --git a/business/src/main/java/com/ycl/domain/excel/ProjectTempImport.java b/business/src/main/java/com/ycl/domain/excel/ProjectTempImport.java
new file mode 100644
index 0000000..398e299
--- /dev/null
+++ b/business/src/main/java/com/ycl/domain/excel/ProjectTempImport.java
@@ -0,0 +1,47 @@
+package com.ycl.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 椤圭洰涓存椂瀵煎叆妯℃澘
+ *
+ * @author锛歺p
+ * @date锛�2025/2/17 11:24
+ */
+@Data
+public class ProjectTempImport {
+
+ @ExcelProperty(value = "椤圭洰鍚嶇О")
+ private String projectName;
+
+ @ExcelProperty(value = "椤圭洰绫诲瀷")
+ private String projectType;
+
+ @ExcelProperty(value = "寤鸿鍐呭")
+ private String content;
+
+ @ExcelProperty(value = "涓氫富鍗曚綅")
+ private String projectOwnerUnit;
+
+ @ExcelProperty(value = "涓荤閮ㄩ棬")
+ private String competentDepartment;
+
+ @ExcelProperty(value = "璁″垝寮�宸ユ椂闂�")
+ private Date planStartTime;
+
+ @ExcelProperty(value = "璁″垝绔e伐鏃堕棿")
+ private Date planCompleteTime;
+
+ @ExcelProperty("骞村害鎶曡祫閲戦")
+ private BigDecimal tzje;
+
+ @ExcelProperty("琛屼笟涓荤閮ㄩ棬")
+ private String hyzgbm;
+
+ @ExcelProperty(value = "琛屾斂鍖哄垝")
+ private String area;
+}
diff --git a/business/src/main/java/com/ycl/listener/excel/CurrencyDataListener.java b/business/src/main/java/com/ycl/listener/excel/CurrencyDataListener.java
new file mode 100644
index 0000000..94862a5
--- /dev/null
+++ b/business/src/main/java/com/ycl/listener/excel/CurrencyDataListener.java
@@ -0,0 +1,105 @@
+package com.ycl.listener.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.metadata.data.ReadCellData;
+import com.alibaba.excel.read.listener.ReadListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+/**
+ * easyExcel 澶氳〃閫氱敤璇诲彇鐩戝惉鍣�
+ *
+ * @author xp
+ */
+public class CurrencyDataListener<T> implements ReadListener<T> {
+
+
+ private Consumer consumer;
+
+ /**
+ * 姣忛殧100鏉″瓨鍌ㄦ暟鎹簱锛岀劧鍚庢竻鐞唋ist 锛屾柟渚垮唴瀛樺洖鏀�
+ */
+ private static final int BATCH_COUNT = 100;
+
+ /**
+ * 缂撳瓨鐨勬暟鎹�
+ */
+ private List<T> cachedDataList = new ArrayList<>(BATCH_COUNT);
+
+ private final static Logger log = LoggerFactory.getLogger(CurrencyDataListener.class);
+
+ public CurrencyDataListener(Consumer<List<T>> consumer) {
+ this.consumer = consumer;
+ }
+
+ /**
+ * 璇诲彇鍑虹幇寮傚父澶勭悊
+ *
+ * @param e
+ * @param analysisContext
+ * @throws Exception
+ */
+ @Override
+ public void onException(Exception e, AnalysisContext analysisContext) throws Exception {
+
+ }
+
+ /**
+ * 澶勭悊琛ㄥご
+ * @param map
+ * @param analysisContext
+ */
+ @Override
+ public void invokeHead(Map<Integer, ReadCellData<?>> map, AnalysisContext analysisContext) {
+
+ }
+
+ /**
+ * 璇诲彇鏁版嵁,姣忎竴鏉℃暟鎹В鏋愰兘浼氭潵璋冪敤
+ *
+ * @param data
+ * @param analysisContext
+ */
+ @Override
+ public void invoke(T data, AnalysisContext analysisContext) {
+ cachedDataList.add(data);
+ // 杈惧埌BATCH_COUNT浜嗭紝闇�瑕佸幓瀛樺偍涓�娆℃暟鎹簱锛岄槻姝㈡暟鎹嚑涓囨潯鏁版嵁鍦ㄥ唴瀛橈紝瀹规槗OOM
+ if (cachedDataList.size() >= BATCH_COUNT) {
+ try {
+ // 蹇呴』瑕佹崟鑾峰紓甯革紝鍚﹀垯鍒楄〃涓嶄細娓呯┖
+ saveData();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ // 瀛樺偍瀹屾垚娓呯悊 list
+ cachedDataList = new ArrayList<>(BATCH_COUNT);
+ }
+ }
+
+ /**
+ * 璇诲彇瀹屾垚
+ *
+ * @param analysisContext
+ */
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+ saveData();
+ log.info("鎵�鏈夋暟鎹В鏋愬畬鎴愶紒");
+ }
+
+ @Override
+ public boolean hasNext(AnalysisContext analysisContext) {
+ return true;
+ }
+
+ private void saveData() {
+ log.info("{}鏉℃暟鎹紝寮�濮嬪瓨鍌ㄦ暟鎹簱锛�", cachedDataList.size());
+ consumer.accept(cachedDataList);
+ log.info("瀛樺偍鏁版嵁搴撴垚鍔燂紒");
+ }
+}
diff --git a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
index 268b945..c8fd1ba 100644
--- a/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
+++ b/business/src/main/java/com/ycl/service/impl/FlowTaskServiceImpl.java
@@ -15,6 +15,7 @@
import com.ycl.common.core.domain.entity.SysUser;
import com.ycl.common.enums.FlowComment;
import com.ycl.common.enums.business.ProcessLogEventTypeEnum;
+import com.ycl.common.enums.business.TaskStatusEnum;
import com.ycl.common.exception.CustomException;
import com.ycl.common.utils.SecurityUtils;
import com.ycl.domain.dto.FlowCommentDto;
@@ -1254,6 +1255,14 @@
parameters = taskService.getVariables(taskId);
}
List<FormDetailVO> beforeNodes = this.getBeforeNodeForm(parameters, task.getFormKey(), task.getName(), task.getProcessDefinitionId(), task.getTaskDefinitionKey(), Boolean.FALSE);
+ // 鍒ゆ柇褰撳墠浠诲姟鏄惁琚寕璧蜂腑
+ beforeNodes.stream().forEach(node -> {
+ if (node.getCurrent()) {
+ if (processLogService.taskIsHangup(taskId, task.getProcessInstanceId())) {
+ node.setTaskStatus(TaskStatusEnum.HANGUP);
+ }
+ }
+ });
return AjaxResult.success(beforeNodes);
}
diff --git a/flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java b/flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java
index 9f5e5ee..dc066bc 100644
--- a/flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java
+++ b/flowable/src/main/java/com/ycl/common/constant/ProcessConstants.java
@@ -104,6 +104,8 @@
public static final String EXTENSION_PROPERTY_CAN_WAIT_TEXT = "鏄惁鍏佽瀹圭己";
+ public static final String EXTENSION_PROPERTY_CAN_HANGUP_TEXT = "鏄惁鍏佽鎸傝捣";
+
public static final String EXTENSION_PROPERTY_VALUE = "鏄�";
diff --git a/flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java b/flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java
index eaa4c20..3528539 100644
--- a/flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java
+++ b/flowable/src/main/java/com/ycl/domain/vo/FormDetailVO.java
@@ -1,6 +1,7 @@
package com.ycl.domain.vo;
import com.alibaba.fastjson2.JSONObject;
+import com.ycl.common.enums.business.TaskStatusEnum;
import lombok.Data;
import java.util.Map;
@@ -34,6 +35,17 @@
private boolean canWait;
/**
+ * 鏄惁鍏佽鎸傝捣
+ *
+ */
+ private boolean canHangup;
+
+ /**
+ * 浠诲姟鐨勭姸鎬侊細鎸傝捣銆佸缂�
+ */
+ private TaskStatusEnum taskStatus;
+
+ /**
* 鍓嶇疆鑺傜偣瀹氫箟id
*
*/
diff --git a/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java b/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
index 9debdb2..ef455a5 100644
--- a/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
+++ b/flowable/src/main/java/com/ycl/service/common/TaskCommonService.java
@@ -105,6 +105,8 @@
}
formDetailVO.setCanJump(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_JUMP_TEXT));
formDetailVO.setCanWait(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_WAIT_TEXT));
+ formDetailVO.setCanHangup(this.checkHasExeProperty(currentElement.getExtensionElements().get("properties"), ProcessConstants.EXTENSION_PROPERTY_CAN_HANGUP_TEXT));
+
defKeys.add(formDetailVO);
this.beforeNodeInfo(currentElement, defKeys);
diff --git a/system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java b/system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java
index 49894b1..6d587cf 100644
--- a/system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java
+++ b/system/src/main/java/com/ycl/system/mapper/SysDeptMapper.java
@@ -120,4 +120,6 @@
String selectAncestors(Long userId);
+
+ Long selectByName(@Param("name") String projectOwnerUnit);
}
diff --git a/system/src/main/resources/mapper/system/SysDeptMapper.xml b/system/src/main/resources/mapper/system/SysDeptMapper.xml
index e0faa04..b21db8d 100644
--- a/system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -100,6 +100,10 @@
where SU.user_id = #{userId}
</select>
+ <select id="selectByName" parameterType="string" resultType="long">
+ SELECT dept_id FROM sys_dept WHERE dept_name = #{name} and del_flag = '0' limit 1
+ </select>
+
<insert id="insertDept" parameterType="SysDept">
insert into sys_dept(
<if test="deptId != null and deptId != 0">dept_id,</if>
--
Gitblit v1.8.0