From 926253601956c51116e8342b4af9e9ca04ed2c1c Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 27 二月 2025 17:00:51 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/xiaochen991015/xizang --- ruoyi-system/src/main/java/com/ruoyi/system/dto/RevokeDTO.java | 19 ++++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java | 12 +- ruoyi-admin/pom.xml | 6 ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java | 16 +++ ruoyi-common/src/main/java/com/ruoyi/common/enums/TaskEventType.java | 146 ++++++++++++++++++++++++++++++++++++ ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java | 20 +++++ ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java | 7 + 8 files changed, 217 insertions(+), 11 deletions(-) diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 97f4520..96e7388 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -140,17 +140,17 @@ <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> - <version>3.0.3</version> + <version>4.3.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> - <version>3.0.3</version> + <version>4.3.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> - <version>3.0.3</version> + <version>4.3.0</version> </dependency> <!-- 阿里云短信 --> diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java index 58982f4..f5c0bcb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java @@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.util.ObjectUtil; +import com.aizuda.bpm.engine.core.FlowCreator; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; @@ -289,16 +290,17 @@ @Log(title = "合同管理-撤销审批", businessType = BusinessType.UPDATE) @ApiOperation(value = "撤销审批") @PreAuthorize("@ss.hasPermi('system:contract:revoke')") - - @GetMapping(value = "/updateContractStatus") - public R<Boolean> updateContractStatus(String id) { - TContract contract = contractService.getById(id); + @PostMapping(value = "/updateContractStatus") + public R<Boolean> updateContractStatus(@RequestBody RevokeDTO dto) { + TContract contract = contractService.getById(dto.getContractId()); contract.setStatus("1"); contractService.updateById(contract); + // 撤销审批实例 + stateProcessTemplateService.revoke(dto.getInstanceId()); + return R.ok(); } @PreAuthorize("@ss.hasPermi('system:contract:confirm')") - @Log(title = "合同管理-确认结算", businessType = BusinessType.UPDATE) @ApiOperation(value = "确认结算") @PostMapping(value = "/confirmSettlement") diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java index 0731a2e..5062df4 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TContractController.java @@ -2,13 +2,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.DictConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.model.LoginUserApplet; +import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.dto.RevokeDTO; import com.ruoyi.system.dto.SignContractDTO; import com.ruoyi.system.model.TContract; import com.ruoyi.system.model.TContractRentType; @@ -23,6 +26,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; @@ -52,6 +56,8 @@ private TokenService tokenService; @Autowired private TTenantService tTenantService; + @Autowired + private StateProcessTemplateService stateProcessTemplateService; @ApiOperation(value = " 签订合同") @PostMapping(value = "/signContract") public R signContract(@RequestBody SignContractDTO dto) { @@ -67,6 +73,20 @@ query.setTenantId(loginUserApplet.getUserId()); return R.ok(contractService.contractAppletList(query)); } + + @Log(title = "合同管理-撤销审批", businessType = BusinessType.UPDATE) + @ApiOperation(value = "撤销审批") + @PreAuthorize("@ss.hasPermi('system:contract:revoke')") + @PostMapping(value = "/updateContractStatus") + public R<Boolean> updateContractStatus(@RequestBody RevokeDTO dto) { + TContract contract = contractService.getById(dto.getContractId()); + contract.setStatus("1"); + contractService.updateById(contract); + // 撤销审批实例 + stateProcessTemplateService.revoke(dto.getInstanceId()); + + return R.ok(); + } @ApiOperation(value = "查询合同信息信息") @GetMapping(value = "/getContractById") public R<TContractAppletVO> getContractById(@RequestParam String id) { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/TaskEventType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TaskEventType.java new file mode 100644 index 0000000..f96fc9c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/TaskEventType.java @@ -0,0 +1,146 @@ +/* + * Copyright 2023-2025 Licensed under the Dual Licensing + * website: https://aizuda.com + */ +package com.ruoyi.common.enums; + +/** + * 流程引擎监听类型 + * + * <p> + * <a href="https://aizuda.com">官网</a>尊重知识产权,不允许非法使用,后果自负 + * </p> + * + * @author lizhongyuan + * @since 1.0 + */ +public enum TaskEventType { + /** + * 发起 + */ + start, + /** + * 创建 + */ + create, + /** + * 再创建,仅用于流程回退 + */ + recreate, + /** + * 抄送 + */ + cc, + /** + * 分配 + */ + assignment, + /** + * 委派任务解决 + */ + delegateResolve, + /** + * 任务加签 + */ + addTaskActor, + /** + * 任务减签 + */ + removeTaskActor, + /** + * 驳回至上一步处理 + */ + reject, + /** + * 角色认领 + */ + claimRole, + /** + * 部门认领 + */ + claimDepartment, + /** + * 拿回未执行任务 + */ + reclaim, + /** + * 撤回指定任务 + */ + withdraw, + /** + * 唤醒历史任务 + */ + resume, + /** + * 完成 + */ + complete, + /** + * 撤销 + */ + revoke, + /** + * 终止 + */ + terminate, + /** + * 更新 + */ + update, + /** + * 删除 + */ + delete, + /** + * 调用外部流程任务【办理子流程】 + */ + callProcess, + /** + * 超时 + */ + timeout, + /** + * 跳转 + */ + jump, + /** + * 自动跳转 + */ + autoJump, + /** + * 驳回跳转 + */ + rejectJump, + /** + * 路由跳转 + */ + routeJump, + /** + * 驳回重新审批跳转 + */ + reApproveJump, + /** + * 自动审批完成 + */ + autoComplete, + /** + * 自动审批拒绝 + */ + autoReject, + /** + * 触发器任务 + */ + trigger, + /** + * 结束 + */ + end; + + public boolean eq(TaskEventType eventType) { + return this == eventType; + } + + public boolean ne(TaskEventType eventType) { + return this != eventType; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/RevokeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/RevokeDTO.java new file mode 100644 index 0000000..324f9ce --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/RevokeDTO.java @@ -0,0 +1,19 @@ +package com.ruoyi.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel(value = "撤销DTO") +public class RevokeDTO implements Serializable { + + @ApiModelProperty(value = "审批流实例id") + private Long instanceId; + + @ApiModelProperty(value = "合同id") + private String contractId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java index a20f50d..3511a69 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/StateProcessTemplateService.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service; +import com.aizuda.bpm.engine.core.FlowCreator; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; @@ -41,6 +42,12 @@ //拒绝 void refuse(ProcessRefuseBO processRefuseBO); + /** + * 流程实例撤销(用于错误发起审批申请,发起人主动撤销) + * + * @param instanceId 流程实例ID + */ + void revoke(Long instanceId); PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTemplatePageBO); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java index fdf87e5..afbd802 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/StateProcessTemplateServiceImpl.java @@ -7,8 +7,11 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.aizuda.bpm.engine.FlowLongEngine; +import com.aizuda.bpm.engine.TaskService; import com.aizuda.bpm.engine.core.FlowCreator; +import com.aizuda.bpm.engine.core.enums.InstanceState; import com.aizuda.bpm.engine.core.enums.TaskType; +import com.aizuda.bpm.engine.dao.FlwInstanceDao; import com.aizuda.bpm.engine.entity.*; import com.aizuda.bpm.engine.model.NodeModel; import com.aizuda.bpm.mybatisplus.mapper.*; @@ -24,6 +27,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.enums.StateProcessActionEnum; +import com.ruoyi.common.enums.TaskEventType; import com.ruoyi.common.exception.GlobalException; import com.ruoyi.common.exception.state.StateErrorCode; import com.ruoyi.common.utils.SecurityUtils; @@ -47,6 +51,7 @@ import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; +import java.util.function.Supplier; import java.util.stream.Collectors; @Service @@ -64,6 +69,8 @@ private FlwTaskActorMapper flwTaskActorMapper; @Autowired private FlwTaskMapper flwTaskMapper; + @Autowired + private TaskService taskService; @Autowired private StateTaskCenterService stateTaskCenterService; @Autowired @@ -935,6 +942,11 @@ record.setPictures(processRefuseBO.getPictures()); stateProcessInstanceActionService.save(record); } + @Override + public void revoke(Long instanceId) { + FlowCreator flowCreator = FlowCreator.of(String.valueOf(SecurityUtils.getUserId()), SecurityUtils.getLoginUser().getUser().getNickName()); + flowLongEngine.runtimeService().revoke(instanceId, flowCreator); + } @Override public PageInfo<ProcessTaskListVO> dealAndWaitTaskPage(ProcessTaskListBO processTaskListBO) { @@ -1198,8 +1210,8 @@ List<FlwHisTask> flwHisTasks = flwHisTaskMapper.selectList(Wrappers.<FlwHisTask>lambdaQuery().eq(FlwHisTask::getInstanceId, instanceId)); processDetailVO.setFlwHisTasks(flwHisTasks); - List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, flwTask.getInstanceId()) - .orderByDesc(StateProcessInstanceAction::getCreateTime)); + List<StateProcessInstanceAction> list = stateProcessInstanceActionService.list(Wrappers.<StateProcessInstanceAction>lambdaQuery().eq(StateProcessInstanceAction::getInstanceId, instanceId) + .orderByAsc(StateProcessInstanceAction::getCreateTime)); for (StateProcessInstanceAction stateProcessInstanceAction : list) { SysUser sysUser = sysUserService.selectUserById(Long.valueOf(stateProcessInstanceAction.getAuditorId())); if(Objects.nonNull(sysUser)){ diff --git a/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml index e8e7dfe..fa366f5 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml @@ -99,7 +99,7 @@ #{item} </foreach> </if> - <if test="query.ids != null and query.ids.size()=0"> + <if test="query.ids == null or query.ids.size()==0"> <if test="query.partyTwoName != null and query.partyTwoName != ''"> and t1.party_two_name like concat('%',#{query.partyTwoName},'%') </if> -- Gitblit v1.7.1