src/main/java/org/springblade/flow/core/utils/FlowUtil.java
@@ -38,6 +38,8 @@ static { BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "blade_process_leave"); BUSINESS_TABLE.put(ProcessConstant.AUDIT_KEY, "sys_application"); BUSINESS_TABLE.put(ProcessConstant.DELAY_AUDIT,"sys_application_delay"); BUSINESS_TABLE.put(ProcessConstant.CAR_CHANGE_AUDIT,"sys_application_car_change"); } /** src/main/java/org/springblade/modules/application/controller/ApplicationController.java
@@ -42,6 +42,8 @@ import org.springblade.modules.application.service.IApplicationService; import org.springblade.core.boot.ctrl.BladeController; import java.util.List; /** * 申请表 控制器 * @@ -75,6 +77,16 @@ public R<IPage<ApplicationVO>> list(ApplicationEntity application, Query query) { IPage<ApplicationEntity> pages = applicationService.page(Condition.getPage(query), Condition.getQueryWrapper(application)); return R.data(ApplicationWrapper.build().pageVO(pages)); } /** * 申请表 查询全部 */ @GetMapping("/getAll") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入application") public R<List<ApplicationVO>> getAll(ApplicationVO applicationVO) { return R.data(applicationService.getAll(applicationVO)); } /** @@ -149,8 +161,8 @@ public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(applicationService.deleteLogic(Func.toLongList(ids))); } //================================工作流======================================== //================================工作流======================================== /** * 申请表 工作流开始 */ src/main/java/org/springblade/modules/application/entity/ApplicationEntity.java
@@ -103,10 +103,6 @@ */ private String processInstanceId; /** * 审批人 */ private String taskUser; /** * 工作流标识 */ @TableField(exist = false) src/main/java/org/springblade/modules/application/entity/CarEntity.java
@@ -88,6 +88,11 @@ */ @ApiModelProperty(value = "轴距") private String wheelbase; /** * 状态1启用 2废弃 */ @ApiModelProperty(value = "状态1启用 2废弃") private String status; public CarEntity (String applicationId){ this.setApplicationId(applicationId); src/main/java/org/springblade/modules/application/mapper/ApplicationMapper.java
@@ -16,6 +16,7 @@ */ package org.springblade.modules.application.mapper; import liquibase.pro.packaged.P; import org.apache.ibatis.annotations.Param; import org.springblade.modules.application.entity.ApplicationEntity; import org.springblade.modules.application.vo.ApplicationVO; @@ -47,4 +48,6 @@ ApplicationEntity getMaxNoEntity(); ApplicationEntity getByNo(@Param("no") String no); List<ApplicationVO> getAll(@Param("application") ApplicationVO applicationVO); } src/main/java/org/springblade/modules/application/mapper/ApplicationMapper.xml
@@ -48,6 +48,17 @@ <select id="getByNo" resultType="org.springblade.modules.application.entity.ApplicationEntity"> SELECT * FROM sys_application WHERE is_deleted = 0 AND no = #{no} </select> <select id="getAll" resultType="org.springblade.modules.application.vo.ApplicationVO"> SELECT app.*,basic.end_time FROM sys_application app LEFT JOIN sys_application_basic_info basic ON basic.application_id = app.id WHERE app.is_deleted = 0 <if test="application.userId !=null and application.userId !=''"> AND app.user_id = #{application.userId} </if> <if test="application.status !=null and application.status !=''"> AND app.status = #{application.status} </if> </select> </mapper> src/main/java/org/springblade/modules/application/service/IApplicationService.java
@@ -24,6 +24,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.modules.reject.entity.RejectEntity; import java.util.List; /** * 申请表 服务类 * @@ -71,4 +73,10 @@ Boolean completeTask(BladeFlow flow, ApplicationEntity applicationEntity, RejectEntity rejectEntity); Boolean userCompleteTask(BladeFlow flow, ApplicationEntity application, BasicInfoEntity basicInfoEntity, CarEntity carEntity, PlanEntity planEntity, SchemeEntity schemeEntity, GoodsEntity goodsEntity, RejectEntity rejectEntity); /** * 获取所有申请 * @return */ List<ApplicationVO> getAll(ApplicationVO applicationVO); } src/main/java/org/springblade/modules/application/service/impl/ApplicationServiceImpl.java
@@ -190,8 +190,7 @@ //启动流程 Kv variables = Kv.create() .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, basicInfoEntity.getName()) .set("taskUser", TaskUtil.getTaskUser(application.getTaskUser())); .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, basicInfoEntity.getName()); BladeFlow flow = flowService.startProcessInstanceById(application.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(application.getId())), variables); if (Func.isNotEmpty(flow)) { log.error("流程已启动,流程ID:" + flow.getProcessInstanceId()); @@ -297,6 +296,11 @@ return true; } @Override public List<ApplicationVO> getAll(ApplicationVO applicationVO) { return baseMapper.getAll(applicationVO); } /** * 获取最大编号 * src/main/java/org/springblade/modules/application/vo/ApplicationVO.java
@@ -73,4 +73,6 @@ * 法人 */ private String legalPerson; private String endTime; } src/main/java/org/springblade/modules/applicationCarChange/entity/ApplicationCarChangeEntity.java
@@ -23,6 +23,7 @@ import java.util.Date; import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; import org.springblade.flow.core.entity.FlowEntity; /** * 车辆变更申请表 实体类 @@ -34,17 +35,24 @@ @TableName("sys_application_car_change") @ApiModel(value = "ApplicationCarChange对象", description = "车辆变更申请表") @EqualsAndHashCode(callSuper = true) public class ApplicationCarChangeEntity extends TenantEntity { public class ApplicationCarChangeEntity extends FlowEntity { /** * 申请表主键 * 申请编号 */ @ApiModelProperty(value = "申请表主键") private String applicationId; @ApiModelProperty(value = "申请编号") private String no; /** * 变更车辆的车牌 * 车辆id主键 */ @ApiModelProperty(value = "变更车辆的车牌") private String licenseUrl; @ApiModelProperty(value = "申请编号") private String carId; /** * 变更车辆原因 */ @ApiModelProperty(value = "变更车辆原因") private String reason; } src/main/java/org/springblade/modules/applicationDelay/controller/ApplicationDelayController.java
@@ -23,11 +23,16 @@ import lombok.AllArgsConstructor; import javax.validation.Valid; import org.springblade.common.cache.UserCache; import org.springblade.core.secure.BladeUser; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.flow.core.entity.BladeFlow; import org.springblade.flow.demo.leave.entity.ProcessLeave; import org.springblade.modules.application.entity.ApplicationEntity; import org.springblade.modules.application.vo.ApplicationVO; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.modules.applicationDelay.entity.ApplicationDelayEntity; @@ -121,6 +126,38 @@ public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(applicationDelayService.deleteLogic(Func.toLongList(ids))); } //=======================工作流=================================== /** * 开始任务 * * @param applicationDelayEntity 延期信息 */ @PostMapping("start-process") public R startProcess(@RequestBody ApplicationDelayVO applicationDelayEntity) { return R.status(applicationDelayService.startProcess(applicationDelayEntity)); } /** * 完成任务 * * @param flow 延期信息 */ @PostMapping("complete-task") @ApiOperationSupport(order = 7) @ApiOperation(value = "完成任务", notes = "传入流程信息") public R completeTask(@ApiParam("任务信息") @RequestBody BladeFlow flow) { return R.status(applicationDelayService.completeTask(flow)); } /** * 详情 * * @param businessId 主键 */ @GetMapping("/process-detail") public R<ApplicationDelayEntity> detail(Long businessId) { ApplicationDelayEntity detail = applicationDelayService.getById(businessId); detail.getFlow().setAssigneeName(UserCache.getUser(detail.getCreateUser()).getName()); return R.data(detail); } } src/main/java/org/springblade/modules/applicationDelay/entity/ApplicationDelayEntity.java
@@ -17,12 +17,15 @@ package org.springblade.modules.applicationDelay.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.util.Date; import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; import org.springblade.flow.core.entity.FlowEntity; import org.springframework.format.annotation.DateTimeFormat; /** * 延期申请表 实体类 @@ -34,17 +37,49 @@ @TableName("sys_application_delay") @ApiModel(value = "ApplicationDelay对象", description = "延期申请表") @EqualsAndHashCode(callSuper = true) public class ApplicationDelayEntity extends TenantEntity { public class ApplicationDelayEntity extends FlowEntity { /** * 申请表主键 * 申请编号 */ @ApiModelProperty(value = "申请表主键") private String application; @ApiModelProperty(value = "申请编号") private String no; /** * 延期时间 * 延期后的开始时间 */ @ApiModelProperty(value = "延期时间") private Date delayTime; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") @ApiModelProperty(value = "延期后的开始时间") private Date delayStartTime; /** * 延期后的结束时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") @ApiModelProperty(value = "延期后的结束时间") private Date delayEndTime; /** * 延期行驶的路线 */ @ApiModelProperty(value = "延期行驶的路线") private String pathWay; /** * 延期原因 */ @ApiModelProperty(value = "延期原因") private String reason; /** * 备注 */ @ApiModelProperty(value = "备注") private String remark; /** * 流程定义id */ private String processDefinitionId; /** * 流程实例id */ private String processInstanceId; } src/main/java/org/springblade/modules/applicationDelay/service/IApplicationDelayService.java
@@ -16,6 +16,7 @@ */ package org.springblade.modules.applicationDelay.service; import org.springblade.flow.core.entity.BladeFlow; import org.springblade.modules.applicationDelay.entity.ApplicationDelayEntity; import org.springblade.modules.applicationDelay.vo.ApplicationDelayVO; import org.springblade.core.mp.base.BaseService; @@ -39,4 +40,7 @@ IPage<ApplicationDelayVO> selectApplicationDelayPage(IPage<ApplicationDelayVO> page, ApplicationDelayVO applicationDelay); Boolean startProcess(ApplicationDelayVO applicationDelayEntity); Boolean completeTask(BladeFlow flow); } src/main/java/org/springblade/modules/applicationDelay/service/impl/ApplicationDelayServiceImpl.java
@@ -16,6 +16,20 @@ */ package org.springblade.modules.applicationDelay.service.impl; import lombok.AllArgsConstructor; import org.flowable.engine.TaskService; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.flow.business.service.IFlowService; import org.springblade.flow.core.constant.ProcessConstant; import org.springblade.flow.core.entity.BladeFlow; import org.springblade.flow.core.utils.FlowUtil; import org.springblade.flow.core.utils.TaskUtil; import org.springblade.flow.demo.leave.entity.ProcessLeave; import org.springblade.modules.applicationDelay.entity.ApplicationDelayEntity; import org.springblade.modules.applicationDelay.vo.ApplicationDelayVO; import org.springblade.modules.applicationDelay.mapper.ApplicationDelayMapper; @@ -23,6 +37,9 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springframework.transaction.annotation.Transactional; import java.util.Map; /** * 延期申请表 服务实现类 @@ -31,12 +48,60 @@ * @since 2022-12-13 */ @Service @AllArgsConstructor public class ApplicationDelayServiceImpl extends BaseServiceImpl<ApplicationDelayMapper, ApplicationDelayEntity> implements IApplicationDelayService { private final IFlowService flowService; private final TaskService taskService; @Override public IPage<ApplicationDelayVO> selectApplicationDelayPage(IPage<ApplicationDelayVO> page, ApplicationDelayVO applicationDelay) { return page.setRecords(baseMapper.selectApplicationDelayPage(page, applicationDelay)); } @Override @Transactional(rollbackFor = Exception.class) public Boolean startProcess(ApplicationDelayVO applicationDelayEntity) { String businessTable = FlowUtil.getBusinessTable(ProcessConstant.DELAY_AUDIT); if (Func.isEmpty(applicationDelayEntity.getId())) { // 保存leave save(applicationDelayEntity); // 启动流程 Kv variables = Kv.create() .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserName()); BladeFlow flow = flowService.startProcessInstanceById(applicationDelayEntity.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(applicationDelayEntity.getId())), variables); if (Func.isNotEmpty(flow)) { log.debug("流程已启动,流程ID:" + flow.getProcessInstanceId()); // 返回流程id写入leave applicationDelayEntity.setProcessInstanceId(flow.getProcessInstanceId()); updateById(applicationDelayEntity); } else { throw new ServiceException("开启流程失败"); } } else { updateById(applicationDelayEntity); } return true; } @Override public Boolean completeTask(BladeFlow flow) { String taskId = flow.getTaskId(); String processInstanceId = flow.getProcessInstanceId(); String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT); // 增加评论 if (StringUtil.isNoneBlank(processInstanceId, comment)) { taskService.addComment(taskId, processInstanceId, comment); } // 创建变量 Map<String, Object> variables = flow.getVariables(); if (variables == null) { variables = Kv.create(); } variables.put(ProcessConstant.PASS_KEY, flow.isPass()); // 完成任务 taskService.complete(taskId, variables); return true; } } src/main/java/org/springblade/modules/applicationDelay/vo/ApplicationDelayVO.java
@@ -31,5 +31,4 @@ @EqualsAndHashCode(callSuper = true) public class ApplicationDelayVO extends ApplicationDelayEntity { private static final long serialVersionUID = 1L; }