新增 流程历史关联表,储存被拒绝的流程的 新老实力编号

新增 重新发起的流程,查看详情可以 查询到历史的流程内容以及审批记录
每个流程追加 通过流程实例编号查询详情借口
This commit is contained in:
furongxin 2024-09-01 09:59:08 +08:00
parent aeaaca5935
commit e363398132
57 changed files with 646 additions and 19 deletions

View File

@ -48,4 +48,16 @@ public class BpmOACashController {
return success(cashService.convertCash(cashDO)); return success(cashService.convertCash(cashDO));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得现金支出申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOACashRespVO> getCashByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOACashDO cashDO = cashService.getByProcessInstanceId(processInstanceId);
return success(cashService.convertCash(cashDO));
}
} }

View File

@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.contract.BpmOAContract
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAContractConvert; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAContractConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAContractDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAContractDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAContractService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAContractService;
import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -33,6 +35,12 @@ public class BpmOAContractController {
@Resource @Resource
private BpmOAContractService contractService; private BpmOAContractService contractService;
@Resource
private BpmHistoryProcessInstanceService historyProcessInstanceService;
@Resource
private BpmTaskService taskService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建请求申请") @Operation(summary = "创建请求申请")
public CommonResult<Long> createContract(@Valid @RequestBody BpmOAContractCreateReqVO createReqVO) { public CommonResult<Long> createContract(@Valid @RequestBody BpmOAContractCreateReqVO createReqVO) {
@ -48,4 +56,14 @@ public class BpmOAContractController {
return success(BpmOAContractConvert.INSTANCE.convert(contract)); return success(BpmOAContractConvert.INSTANCE.convert(contract));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得合同审批")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAContractRespVO> getContractByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAContractDO contract = contractService.getByProcessInstanceId(processInstanceId);
return success(BpmOAContractConvert.INSTANCE.convert(contract));
}
} }

View File

@ -66,6 +66,22 @@ public class BpmOAEntryController {
return success(respVO); return success(respVO);
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得入职申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAEntryRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAEntryDO entry = entryService.getEntryByProcessInstanceId(processInstanceId);
BpmOAEntryRespVO respVO = BpmOAEntryConvert.INSTANCE.convert(entry);
// 设备部门名称
respVO.setEntryDeptName(getDept(entry.getEntryDeptId()).getName());
// 设备岗位名称
respVO.setEntryPostName(getPost(entry.getEntryPostId()).getName());
return success(respVO);
}
/** /**
* 获得部门信息 * 获得部门信息
* @param deptId 部门id * @param deptId 部门id

View File

@ -49,4 +49,14 @@ public class BpmOAEvectionController {
return success(BpmOAEvectionConvert.INSTANCE.convert(evection)); return success(BpmOAEvectionConvert.INSTANCE.convert(evection));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得出差申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAEvectionRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAEvectionDO evection = evectionService.getByProcessInstanceId(processInstanceId);
return success(BpmOAEvectionConvert.INSTANCE.convert(evection));
}
} }

View File

@ -71,4 +71,14 @@ public class BpmOAImprestController {
return success(BpmOAImprestConvert.INSTANCE.convert(imprest)); return success(BpmOAImprestConvert.INSTANCE.convert(imprest));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得备用金表单")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAImprestRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAImprestDO imprest = imprestService.getByProcessInstanceId(processInstanceId);
return success(BpmOAImprestConvert.INSTANCE.convert(imprest));
}
} }

View File

@ -82,4 +82,33 @@ public class BpmOAIncentiveController {
bpmOAIncentiveRespVO.setUserInfo(userInfo); bpmOAIncentiveRespVO.setUserInfo(userInfo);
return success(bpmOAIncentiveRespVO); return success(bpmOAIncentiveRespVO);
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得奖惩申请")
@Parameter(name = "BpmOAIncentiveRespVO", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAIncentiveRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAIncentiveDO incentive = incentiveService.getByProcessInstanceId(processInstanceId);
//获得 用户信息集合
List<AdminUserRespDTO> userRespDTO = userApi.getUserListByDeptIds(incentive.getIncentiveDeptIds()).getCheckedData();
//获得 部门信息集合
Map<Long, DeptRespDTO> deptRespDTOS = deptApi.getDeptMap(incentive.getIncentiveDeptIds());
Map<String, List<String>> userInfo = new HashMap<>();
//遍历 部门map集合
deptRespDTOS.forEach((key, value) -> {
List<String> userName = userRespDTO.stream().filter(user -> user.getDeptId().toString().contains(key.toString())
&& incentive.getIncentiveUserIds().contains(user.getId()))
.map(AdminUserRespDTO::getNickname).collect(Collectors.toList());
userInfo.put(value.getName(), userName);
});
BpmOAIncentiveRespVO bpmOAIncentiveRespVO = BpmOAIncentiveConvert.INSTANCE.convert(incentive);
bpmOAIncentiveRespVO.setUserInfo(userInfo);
return success(bpmOAIncentiveRespVO);
}
} }

View File

@ -1,17 +1,16 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa; package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeaveCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeaveCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeavePageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeavePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeaveRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeaveRespVO;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOALeaveService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOALeaveService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import org.springframework.security.access.prepost.PreAuthorize; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -60,4 +59,12 @@ public class BpmOALeaveController {
return success(BpmOALeaveConvert.INSTANCE.convertPage(pageResult)); return success(BpmOALeaveConvert.INSTANCE.convertPage(pageResult));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得请假申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOALeaveRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOALeaveDO leave = leaveService.getByProcessInstanceId(processInstanceId);
return success(BpmOALeaveConvert.INSTANCE.convert(leave));
}
} }

View File

@ -49,4 +49,14 @@ public class BpmOAOvertimeController {
return success(BpmOAOvertimeConvert.INSTANCE.convert(overtime)); return success(BpmOAOvertimeConvert.INSTANCE.convert(overtime));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得加班申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAOvertimeRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAOvertimeDO overtime = overtimeService.getByProcessInstanceId(processInstanceId);
return success(BpmOAOvertimeConvert.INSTANCE.convert(overtime));
}
} }

View File

@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -69,4 +68,13 @@ public class BpmOAProcureController {
return success("操作成功"); return success("操作成功");
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得OA 采购申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAProcureRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAProcureDO oaProcure = bpmOaProcureService.getByProcessInstanceId(processInstanceId);
return success(BpmOAProcureConvert.INSTANCE.convert(oaProcure));
}
} }

View File

@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcurePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayRespVO;
@ -15,13 +14,11 @@ import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -86,5 +83,13 @@ public class BpmOAProcurePayController {
return success(BeanUtils.toBean(list, BpmOAProcureRespVO.class)); return success(BeanUtils.toBean(list, BpmOAProcureRespVO.class));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得采购支付")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAProcurePayRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAProcurePayDO oAProcurePay = oAProcurePayService.getByProcessInstanceId(processInstanceId);
return success(BeanUtils.toBean(oAProcurePay, BpmOAProcurePayRespVO.class));
}
} }

View File

@ -49,4 +49,14 @@ public class BpmOARegularController {
return success(BpmOARegularConvert.INSTANCE.convert(regular)); return success(BpmOARegularConvert.INSTANCE.convert(regular));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得转正申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOARegularRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOARegularDO regular = regularService.getByProcessInstanceId(processInstanceId);
return success(BpmOARegularConvert.INSTANCE.convert(regular));
}
} }

View File

@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementRespVO;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAReimbursementConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAReimbursementService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAReimbursementService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -57,4 +56,13 @@ public class BpmOAReimbursementController {
// return success(BpmOALeaveConvert.INSTANCE.convertPage(pageResult)); // return success(BpmOALeaveConvert.INSTANCE.convertPage(pageResult));
// } // }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得报销申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAReimbursementRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAReimbursementDO reimbursement = service.getByProcessInstanceId(processInstanceId);
return success(service.convert(reimbursement));
}
} }

View File

@ -49,4 +49,14 @@ public class BpmOASealController {
return success(BpmOASealConvert.INSTANCE.convert(seal)); return success(BpmOASealConvert.INSTANCE.convert(seal));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得用章申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOASealRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOASealDO seal = sealService.getByProcessInstanceId(processInstanceId);
return success(BpmOASealConvert.INSTANCE.convert(seal));
}
} }

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.BpmOASecondCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.BpmOASecondCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.second.BpmOASecondRespVO;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOASecondConvert; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOASecondConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASecondDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASecondDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOASecondService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOASecondService;
@ -40,8 +41,17 @@ public class BpmOASecondController {
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得借调申请") @Operation(summary = "获得借调申请")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<?> getLeave(@RequestParam("id") Long id) { public CommonResult<BpmOASecondRespVO> getLeave(@RequestParam("id") Long id) {
BpmOASecondDO second = service.getSecond(id); BpmOASecondDO second = service.getSecond(id);
return success(BpmOASecondConvert.INSTANCE.convert(second)); return success(BpmOASecondConvert.INSTANCE.convert(second));
} }
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得借调申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOASecondRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOASecondDO second = service.getByProcessInstanceId(processInstanceId);
return success(BpmOASecondConvert.INSTANCE.convert(second));
}
} }

View File

@ -53,7 +53,7 @@ public class BpmOAShiftjobsController {
} }
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得用章申请") @Operation(summary = "获得调岗申请")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<BpmOAShiftjobsRespVO> getShiftjobs(@RequestParam("id") Long id) { public CommonResult<BpmOAShiftjobsRespVO> getShiftjobs(@RequestParam("id") Long id) {
@ -74,6 +74,30 @@ public class BpmOAShiftjobsController {
//设置新负责人昵称 //设置新负责人昵称
bpmOAShiftjobsRespVO.setNewParentName(userApi.getUser(shiftjobs.getNewParentId()).getCheckedData().getNickname()); bpmOAShiftjobsRespVO.setNewParentName(userApi.getUser(shiftjobs.getNewParentId()).getCheckedData().getNickname());
return success(bpmOAShiftjobsRespVO);
}
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得调岗申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOAShiftjobsRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOAShiftjobsDO shiftjobs = shiftjobsService.getByProcessInstanceId(processInstanceId);
BpmOAShiftjobsRespVO bpmOAShiftjobsRespVO = BpmOAShiftjobsConvert.INSTANCE.convert(shiftjobs);
//设置原部门名称
bpmOAShiftjobsRespVO.setOldDeptName(deptApi.getDept(shiftjobs.getOldDeptId()).getCheckedData().getName());
//设置原岗位名称
bpmOAShiftjobsRespVO.setOldPostName(postApi.getPost(shiftjobs.getOldPostId()).getCheckedData().getName());
//设置原负责人昵称
bpmOAShiftjobsRespVO.setOldParentName(userApi.getUser(shiftjobs.getOldParentId()).getCheckedData().getNickname());
//设置新部门名称
bpmOAShiftjobsRespVO.setNewDeptName(deptApi.getDept(shiftjobs.getNewDeptId()).getCheckedData().getName());
//设置新岗位名称
bpmOAShiftjobsRespVO.setNewPostName(postApi.getPost(shiftjobs.getNewPostId()).getCheckedData().getName());
//设置新负责人昵称
bpmOAShiftjobsRespVO.setNewParentName(userApi.getUser(shiftjobs.getNewParentId()).getCheckedData().getNickname());
return success(bpmOAShiftjobsRespVO); return success(bpmOAShiftjobsRespVO);
} }

View File

@ -31,6 +31,12 @@ public class BpmOACashCreateReqVO {
@NotNull(message = "报销总金额不能为空") @NotNull(message = "报销总金额不能为空")
private BigDecimal totalMoney; private BigDecimal totalMoney;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
} }

View File

@ -2,11 +2,9 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.contract;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
@ -45,13 +43,22 @@ public class BpmOAContractCreateReqVO {
@Schema(description = "对方负责人", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "对方负责人", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String oHeadName; private String oHeadName;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
public BpmOAContractCreateReqVO() { public BpmOAContractCreateReqVO() {
} }
public BpmOAContractCreateReqVO(String contractName, String contractNumber, LocalDate signingDate, String mCompanyName, String mHeadName, String oCompanyName, String oHeadName, List<UploadUserFile> fileItems) { public BpmOAContractCreateReqVO(String contractName, String contractNumber, LocalDate signingDate,
String mCompanyName, String mHeadName, String oCompanyName,
String oHeadName, String processInstanceId, List<UploadUserFile> fileItems,
Integer result) {
this.contractName = contractName; this.contractName = contractName;
this.contractNumber = contractNumber; this.contractNumber = contractNumber;
this.signingDate = signingDate; this.signingDate = signingDate;
@ -59,13 +66,31 @@ public class BpmOAContractCreateReqVO {
this.mHeadName = mHeadName; this.mHeadName = mHeadName;
this.oCompanyName = oCompanyName; this.oCompanyName = oCompanyName;
this.oHeadName = oHeadName; this.oHeadName = oHeadName;
this.processInstanceId = processInstanceId;
this.result = result;
this.fileItems = fileItems; this.fileItems = fileItems;
} }
public Integer getResult() {
return result;
}
public void setResult(Integer result) {
this.result = result;
}
public String getContractName() { public String getContractName() {
return contractName; return contractName;
} }
public String getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(String processInstanceId) {
this.processInstanceId = processInstanceId;
}
public void setContractName(String contractName) { public void setContractName(String contractName) {
this.contractName = contractName; this.contractName = contractName;
} }

View File

@ -20,9 +20,6 @@ import java.util.List;
@Data @Data
public class BpmOAEntryCreateReqVO { public class BpmOAEntryCreateReqVO {
@Schema(description = "入职申请表单主键", example = "1")
private Long id;
@Schema(description = "新入职用户部门编号", example = "10237") @Schema(description = "新入职用户部门编号", example = "10237")
private Long entryDeptId; private Long entryDeptId;
@ -56,6 +53,12 @@ public class BpmOAEntryCreateReqVO {
@Schema(description = "薪资情况", example = "27005") @Schema(description = "薪资情况", example = "27005")
private String salary; private String salary;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;

View File

@ -51,6 +51,12 @@ public class BpmOAEvectionCreateReqVO {
@NotNull(message = "出差时长不能为空") @NotNull(message = "出差时长不能为空")
private BigDecimal timeLength; private BigDecimal timeLength;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
} }

View File

@ -42,6 +42,12 @@ public class BpmOAImprestCreateReqVO {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate date; private LocalDate date;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
} }

View File

@ -46,6 +46,12 @@ public class BpmOAIncentiveCreateReqVO {
@NotNull(message = "奖惩事由不能为空") @NotNull(message = "奖惩事由不能为空")
private String reason; private String reason;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems ; private List<UploadUserFile> fileItems ;
} }

View File

@ -35,6 +35,12 @@ public class BpmOALeaveBaseVO {
@NotNull(message = "原因不能为空") @NotNull(message = "原因不能为空")
private String reason; private String reason;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems ; private List<UploadUserFile> fileItems ;

View File

@ -43,6 +43,12 @@ public class BpmOAOvertimeCreateReqVO {
@NotNull(message = "加班时长不能为空") @NotNull(message = "加班时长不能为空")
private BigDecimal timeLength; private BigDecimal timeLength;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
} }

View File

@ -40,6 +40,12 @@ public class BpmOARegularCreateReqVO {
@Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String notes; private String notes;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
} }

View File

@ -47,6 +47,12 @@ public class BpmOAReimbursementCreateReqVO {
@NotNull(message = "报销发票总数不能为空") @NotNull(message = "报销发票总数不能为空")
private Integer totalQuantity ; private Integer totalQuantity ;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems ; private List<UploadUserFile> fileItems ;
} }

View File

@ -45,6 +45,12 @@ public class BpmOASealCreateReqVO {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate useDate; private LocalDate useDate;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
} }

View File

@ -34,6 +34,12 @@ public class BpmOASecondCreateReqVO {
@Schema(description = "押金", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "押金", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private Long deposit; private Long deposit;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems ; private List<UploadUserFile> fileItems ;
} }

View File

@ -47,6 +47,12 @@ public class BpmOAShiftjobsCreateReqVO {
@Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "备注", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String notes; private String notes;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
private Integer result;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
} }

View File

@ -1,11 +1,14 @@
package cn.iocoder.yudao.module.bpm.controller.admin.task; package cn.iocoder.yudao.module.bpm.controller.admin.task;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*;
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmHistoryProcessInstanceDO;
import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
@ -41,6 +44,9 @@ public class BpmTaskController {
@Resource @Resource
private AdminUserApi userApi; private AdminUserApi userApi;
@Resource
private BpmHistoryProcessInstanceService historyProcessInstanceService;
/** /**
* add by yaojun 2024.1.3 * add by yaojun 2024.1.3
* 流程审核添加了抄送用户多用户的功能 * 流程审核添加了抄送用户多用户的功能
@ -178,4 +184,19 @@ public class BpmTaskController {
return success(convertList(userIds, id -> userMap.get(Long.valueOf(id)))); return success(convertList(userIds, id -> userMap.get(Long.valueOf(id))));
} }
@GetMapping("/get-history-task")
@Operation(summary = "获得历史审批记录")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<Map<String, List<BpmTaskRespVO>>> getHistoryTask(@RequestParam("processInstanceId") String processInstanceId) {
List<BpmHistoryProcessInstanceDO> historyProcessInstanceDOs = historyProcessInstanceService.getHistoryProcessInstanceDO(processInstanceId);
if (CollectionUtil.isEmpty(historyProcessInstanceDOs)) {
return success(null);
}
List<String> historyProcessInstanceIds = convertList(historyProcessInstanceDOs, BpmHistoryProcessInstanceDO::getHistoryProcessInstanceId);
return success(taskService.getTaskListByProcessInstanceIds(historyProcessInstanceIds));
}
} }

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.bpm.dal.dataobject.task;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
/**
* Bpm 历史流程实例关联表
* 主要关联 被拒绝的流程实例
*/
@TableName(value = "bpm_history_process_instance", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmHistoryProcessInstanceDO extends BaseDO {
/**
* 编号自增
*/
@TableId
private Long id;
/**
* 流程实例的编号
* 关联 ProcessInstance id 属性
*/
private String processInstanceId;
/**
* 历史流程实例的编号组
*/
private String historyProcessInstanceId;
}

View File

@ -0,0 +1,9 @@
package cn.iocoder.yudao.module.bpm.dal.mysql.task;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmHistoryProcessInstanceDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BpmHistoryProcessInstanceMapper extends BaseMapperX<BpmHistoryProcessInstanceDO> {
}

View File

@ -20,6 +20,7 @@ import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOACashItemMapper;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOACashMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOACashMapper;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService; import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService;
import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.system.api.bank.BankApi; import cn.iocoder.yudao.module.system.api.bank.BankApi;
import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO; import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO;
@ -86,6 +87,10 @@ public class BpmOACashServiceImpl extends BpmOABaseService implements BpmOACashS
@Resource @Resource
private AdminUserApi userApi; private AdminUserApi userApi;
@Resource
@Lazy // 解决循环依赖
private BpmHistoryProcessInstanceService historyProcessInstanceService;
@Override @Override
public Long createCash(Long userId, BpmOACashCreateReqVO createReqVO) { public Long createCash(Long userId, BpmOACashCreateReqVO createReqVO) {
@ -109,6 +114,13 @@ public class BpmOACashServiceImpl extends BpmOABaseService implements BpmOACashS
// 将工作流的编号更新到 OA 现金支出单中 // 将工作流的编号更新到 OA 现金支出单中
cashMapper.updateById(new BpmOACashDO().setId(cash.getId()).setProcessInstanceId(processInstanceId)); cashMapper.updateById(new BpmOACashDO().setId(cash.getId()).setProcessInstanceId(processInstanceId));
// 判断是否为重新发起的流程
if (createReqVO.getProcessInstanceId() != null && createReqVO.getResult() == 3) {
// 将历史流程编号存入关联表中
historyProcessInstanceService.createHistoryProcessInstance(processInstanceId, createReqVO.getProcessInstanceId());
}
List<Long> procureIds = new ArrayList<>(); List<Long> procureIds = new ArrayList<>();
for (BpmOACashItemDO cashItemDO : bpmOACashItemDOS) { for (BpmOACashItemDO cashItemDO : bpmOACashItemDOS) {
//报销类别为 采购费时 //报销类别为 采购费时

View File

@ -31,4 +31,11 @@ public interface BpmOAContractService {
* @return 出差申请 * @return 出差申请
*/ */
BpmOAContractDO getContract(Long id); BpmOAContractDO getContract(Long id);
/**
* 获得指定出差申请
* @param processInstanceId 流程实例编号
* @return 出差申请
*/
BpmOAContractDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.bpm.service.oa; package cn.iocoder.yudao.module.bpm.service.oa;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.contract.BpmOAContractCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.contract.BpmOAContractCreateReqVO;
@ -87,4 +88,14 @@ public class BpmOAContractServiceImpl extends BpmOABaseService implements BpmOAC
return contractMapper.selectById(id); return contractMapper.selectById(id);
} }
@Override
public BpmOAContractDO getByProcessInstanceId(String processInstanceId) {
List<BpmOAContractDO> bpmOAContractDOS = contractMapper.selectList(BpmOAContractDO::getProcessInstanceId, processInstanceId);
if (CollectionUtil.isEmpty(bpmOAContractDOS)) {
return null;
}
return bpmOAContractDOS.get(0);
}
} }

View File

@ -37,4 +37,5 @@ public interface BpmOAEntryService {
* @return 入职申请信息 * @return 入职申请信息
*/ */
BpmOAEntryDO getEntryByProcessInstanceId(String processInstanceId); BpmOAEntryDO getEntryByProcessInstanceId(String processInstanceId);
} }

View File

@ -31,4 +31,11 @@ public interface BpmOAEvectionService {
* @return 出差申请 * @return 出差申请
*/ */
BpmOAEvectionDO getEvection(Long id); BpmOAEvectionDO getEvection(Long id);
/**
* 获得指定的出差申请
* @param processInstanceId 流程实例编号
* @return 出差申请
*/
BpmOAEvectionDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -83,4 +83,10 @@ public class BpmOAEvectionServiceImpl extends BpmOABaseService implements BpmOAE
return evectionMapper.selectById(id); return evectionMapper.selectById(id);
} }
@Override
public BpmOAEvectionDO getByProcessInstanceId(String processInstanceId) {
return evectionMapper.selectOne(BpmOAEvectionDO::getProcessInstanceId, processInstanceId);
}
} }

View File

@ -37,4 +37,11 @@ public interface BpmOAIncentiveService {
* @return 奖惩申请 * @return 奖惩申请
*/ */
BpmOAIncentiveDO getIncentive(Long id); BpmOAIncentiveDO getIncentive(Long id);
/**
* 获得指定奖惩流程
* @param processInstanceId 流程实例编号
* @return 奖惩申请
*/
BpmOAIncentiveDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.bpm.service.oa; package cn.iocoder.yudao.module.bpm.service.oa;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.incentive.BpmOAIncentiveCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.incentive.BpmOAIncentiveCreateReqVO;
@ -83,4 +84,14 @@ public class BpmOAIncentiveServiceImpl extends BpmOABaseService implements BpmOA
return incentiveMapper.selectById(id); return incentiveMapper.selectById(id);
} }
@Override
public BpmOAIncentiveDO getByProcessInstanceId(String processInstanceId) {
List<BpmOAIncentiveDO> bpmOAIncentiveDOS = incentiveMapper.selectList(BpmOAIncentiveDO::getProcessInstanceId, processInstanceId);
if (CollectionUtil.isEmpty(bpmOAIncentiveDOS)) {
return null;
}
return bpmOAIncentiveDOS.get(0);
}
} }

View File

@ -58,4 +58,11 @@ public interface BpmOALeaveService {
* @return * @return
*/ */
List<BpmOALeaveRpcVO> getLeaveListByTime(String time); List<BpmOALeaveRpcVO> getLeaveListByTime(String time);
/**
* 获得指定请假申请
* @param processInstanceId 流程实例编号
* @return 出差申请
*/
BpmOALeaveDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.bpm.service.oa; package cn.iocoder.yudao.module.bpm.service.oa;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.pojo.BpmOALeaveDTO; import cn.iocoder.yudao.framework.common.pojo.BpmOALeaveDTO;
@ -143,4 +144,13 @@ public class BpmOALeaveServiceImpl extends BpmOABaseService implements BpmOALeav
return leaveMapper.getLeaveListByTime(time); return leaveMapper.getLeaveListByTime(time);
} }
@Override
public BpmOALeaveDO getByProcessInstanceId(String processInstanceId) {
List<BpmOALeaveDO> list = leaveMapper.selectList(BpmOALeaveDO::getProcessInstanceId, processInstanceId);
if (CollectionUtil.isEmpty(list)) {
return null;
}
return list.get(0);
}
} }

View File

@ -37,4 +37,11 @@ public interface BpmOAOvertimeService {
* @return 加班申请 * @return 加班申请
*/ */
BpmOAOvertimeDO getOvertime(Long id); BpmOAOvertimeDO getOvertime(Long id);
/**
* 获得指定的加班申请
* @param processInstanceId 流程实例编号
* @return 加班申请
*/
BpmOAOvertimeDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.bpm.service.oa; package cn.iocoder.yudao.module.bpm.service.oa;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime.BpmOAOvertimeCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.overtime.BpmOAOvertimeCreateReqVO;
@ -83,4 +84,14 @@ public class BpmOAOvertimeServiceImpl extends BpmOABaseService implements BpmOAO
return overtimeMapper.selectById(id); return overtimeMapper.selectById(id);
} }
@Override
public BpmOAOvertimeDO getByProcessInstanceId(String processInstanceId) {
List<BpmOAOvertimeDO> bpmOAOvertimeDOS = overtimeMapper.selectList(BpmOAOvertimeDO::getProcessInstanceId, processInstanceId);
if (!CollectionUtil.isEmpty(bpmOAOvertimeDOS)) {
return bpmOAOvertimeDOS.get(0);
}
return null;
}
} }

View File

@ -66,4 +66,11 @@ public interface BpmOAProcureService {
* @param result * @param result
*/ */
void updateEvectionResult(Long id, Integer result); void updateEvectionResult(Long id, Integer result);
/**
* 获得指定的采购申请
* @param processInstanceId 流程实例编号
* @return 采购申请
*/
BpmOAProcureDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.bpm.service.oa; package cn.iocoder.yudao.module.bpm.service.oa;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@ -13,7 +14,6 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureSa
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile; import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAProcureConvert; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAProcureConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcureMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcureMapper;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -114,4 +114,14 @@ public class BpmOAProcureServiceImpl extends BpmOABaseService implements BpmOAPr
bpmOaProcureMapper.updateById(new BpmOAProcureDO().setId(id).setResult(result)); bpmOaProcureMapper.updateById(new BpmOAProcureDO().setId(id).setResult(result));
} }
@Override
public BpmOAProcureDO getByProcessInstanceId(String processInstanceId) {
List<BpmOAProcureDO> list = bpmOaProcureMapper.selectList(BpmOAProcureDO::getProcessInstanceId, processInstanceId);
if (!CollectionUtil.isEmpty(list)) {
return list.get(0);
}
return null;
}
} }

View File

@ -37,4 +37,11 @@ public interface BpmOARegularService {
* @return 转正申请 * @return 转正申请
*/ */
BpmOARegularDO getRegular(Long id); BpmOARegularDO getRegular(Long id);
/**
* 获得指定的转正申请
* @param processInstanceId 流程实例编号
* @return 转正申请
*/
BpmOARegularDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -83,4 +83,10 @@ public class BpmOARegularServiceImpl extends BpmOABaseService implements BpmOARe
return regularMapper.selectById(id); return regularMapper.selectById(id);
} }
@Override
public BpmOARegularDO getByProcessInstanceId(String processInstanceId) {
return regularMapper.selectOne(BpmOARegularDO::getProcessInstanceId, processInstanceId);
}
} }

View File

@ -37,4 +37,11 @@ public interface BpmOASealService {
* @return 用章申请 * @return 用章申请
*/ */
BpmOASealDO getSeal(Long id); BpmOASealDO getSeal(Long id);
/**
* 获得指定的用章申请
* @param processInstanceId 流程实例编号
* @return 用章申请
*/
BpmOASealDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -83,4 +83,10 @@ public class BpmOASealServiceImpl extends BpmOABaseService implements BpmOASealS
return sealMapper.selectById(id); return sealMapper.selectById(id);
} }
@Override
public BpmOASealDO getByProcessInstanceId(String processInstanceId) {
return sealMapper.selectOne(BpmOASealDO::getProcessInstanceId, processInstanceId);
}
} }

View File

@ -37,4 +37,11 @@ public interface BpmOASecondService {
* @return 借调申请 * @return 借调申请
*/ */
BpmOASecondDO getSecond(Long id); BpmOASecondDO getSecond(Long id);
/**
* 获得指定的借调申请
* @param processInstanceId 流程实例编号
* @return 借调申请
*/
BpmOASecondDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -80,4 +80,10 @@ public class BpmOASecondServiceImpl extends BpmOABaseService implements BpmOASec
return secondMapper.selectById(id); return secondMapper.selectById(id);
} }
@Override
public BpmOASecondDO getByProcessInstanceId(String processInstanceId) {
return secondMapper.selectOne(BpmOASecondDO::getProcessInstanceId, processInstanceId);
}
} }

View File

@ -37,4 +37,11 @@ public interface BpmOAShiftjobsService {
* @return 调岗申请 * @return 调岗申请
*/ */
BpmOAShiftjobsDO getShiftjobs(Long id); BpmOAShiftjobsDO getShiftjobs(Long id);
/**
* 获得指定的调岗申请
* @param processInstanceId 流程实例编号
* @return 调岗申请
*/
BpmOAShiftjobsDO getByProcessInstanceId(String processInstanceId);
} }

View File

@ -83,4 +83,10 @@ public class BpmOAShiftjobsServiceImpl extends BpmOABaseService implements BpmOA
return shiftjobsMapper.selectById(id); return shiftjobsMapper.selectById(id);
} }
@Override
public BpmOAShiftjobsDO getByProcessInstanceId(String processInstanceId) {
return shiftjobsMapper.selectByProcessInstanceId(processInstanceId);
}
} }

View File

@ -0,0 +1,20 @@
package cn.iocoder.yudao.module.bpm.service.task;
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmHistoryProcessInstanceDO;
import java.util.List;
/**
* 历史流程实例 Service 接口
*/
public interface BpmHistoryProcessInstanceService {
/**
* 创建历史流程关联记录
* @param ProcessInstanceId 流程实例ID
* @param historyProcessInstanceId 历史流程实例ID
*/
void createHistoryProcessInstance(String ProcessInstanceId, String historyProcessInstanceId);
List<BpmHistoryProcessInstanceDO> getHistoryProcessInstanceDO(String processInstanceId);
}

View File

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.bpm.service.task;
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmHistoryProcessInstanceDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmHistoryProcessInstanceMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
/**
* BPM 历史流程实例 Service 实现类
*/
@Service
@Slf4j
@Validated
public class BpmHistoryProcessInstanceServiceImpl implements BpmHistoryProcessInstanceService{
@Resource
private BpmHistoryProcessInstanceMapper historyProcessInstanceMapper;
@Override
public void createHistoryProcessInstance(String ProcessInstanceId, String historyProcessInstanceId) {
BpmHistoryProcessInstanceDO historyProcessInstanceDO = new BpmHistoryProcessInstanceDO()
.setProcessInstanceId(ProcessInstanceId)
.setHistoryProcessInstanceId(historyProcessInstanceId);
historyProcessInstanceMapper.insert(historyProcessInstanceDO);
}
@Override
public List<BpmHistoryProcessInstanceDO> getHistoryProcessInstanceDO(String processInstanceId) {
return historyProcessInstanceMapper.selectList(BpmHistoryProcessInstanceDO::getProcessInstanceId, processInstanceId);
}
}

View File

@ -89,6 +89,14 @@ public interface BpmTaskService {
*/ */
List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId); List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId);
/**
* 获得指令流程实例的流程任务列表包括所有状态的
*
* @param processInstanceIds 流程实例的编号
* @return 流程任务列表
*/
Map<String, List<BpmTaskRespVO>> getTaskListByProcessInstanceIds(List<String> processInstanceIds);
/** /**
* 通过任务 ID 集合获取任务扩展表信息集合 * 通过任务 ID 集合获取任务扩展表信息集合
@ -229,4 +237,6 @@ public interface BpmTaskService {
* @return task * @return task
*/ */
BpmTaskExtDO getTaskByProcessInstanceIdAndResult(String processInstanceId, Integer result); BpmTaskExtDO getTaskByProcessInstanceIdAndResult(String processInstanceId, Integer result);
} }

View File

@ -344,6 +344,52 @@ public class BpmTaskServiceImpl implements BpmTaskService {
return BpmTaskConvert.INSTANCE.convertChildrenList(result); return BpmTaskConvert.INSTANCE.convertChildrenList(result);
} }
@Override
public Map<String, List<BpmTaskRespVO>> getTaskListByProcessInstanceIds(List<String> processInstanceIds) {
Map<String, List<BpmTaskRespVO>> respVOS = new HashMap<>();
// 获得任务列表
List<HistoricTaskInstance> tasks = historyService.createHistoricTaskInstanceQuery()
.processInstanceIdIn(processInstanceIds)
.orderByHistoricTaskInstanceStartTime().desc() // 创建时间倒序
.list();
if (CollUtil.isEmpty(tasks)) {
return null;
}
// 获得任务列表
List<BpmTaskExtDO> bpmTaskExtDOs = taskExtMapper.selectList(BpmTaskExtDO::getProcessInstanceId, processInstanceIds);
/* 剔除自动审批的Task记录 */
bpmTaskExtDOs = bpmTaskExtDOs.stream()
.filter(bpmTaskExtDO -> !BpmConstants.AUTO_APPRAVAL.equals(bpmTaskExtDO.getReason()) || BpmConstants.SELF_TASK_NAME.equals(bpmTaskExtDO.getName()))
.collect(Collectors.toList());
List<String> taskIds = convertList(bpmTaskExtDOs, BpmTaskExtDO::getTaskId);
tasks = tasks.stream().filter(task -> taskIds.contains(task.getId())).collect(Collectors.toList());
// 获得 User Map
Set<Long> userIds = convertSet(bpmTaskExtDOs, BpmTaskExtDO::getAssigneeUserId);
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds);
// 获得 Dept Map
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId));
// 获得BpmTaskExtDO map
Map<String, BpmTaskExtDO> bpmTaskExtDOMap = convertMap(bpmTaskExtDOs, BpmTaskExtDO::getTaskId);
// 获得 task MAP
Map<String, List<HistoricTaskInstance>> taskMap = convertMultiMap(tasks, HistoricTaskInstance::getProcessInstanceId);
taskMap.forEach((processInstanceId, taskList) -> {
// 拼接数据
List<BpmTaskRespVO> result = BpmTaskConvert.INSTANCE.convertList3(taskList, bpmTaskExtDOMap, null, userMap, deptMap);
respVOS.put(processInstanceId, result);
});
return respVOS;
}
@Override @Override
public List<BpmTaskExtDO> getTaskListByTaskIdList(List<String> taskIdList) { public List<BpmTaskExtDO> getTaskListByTaskIdList(List<String> taskIdList) {
return taskExtMapper.selectListByTaskIds(taskIdList); return taskExtMapper.selectListByTaskIds(taskIdList);