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