|
@@ -28,9 +28,12 @@ import org.springblade.core.sms.model.SmsResponse;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.core.tool.jackson.JsonUtil;
|
|
|
import org.springblade.core.tool.utils.DateUtil;
|
|
|
+import org.springblade.core.tool.utils.Func;
|
|
|
import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
import org.springblade.flow.core.entity.BladeFlow;
|
|
|
import org.springblade.flow.core.feign.NewFlowClient;
|
|
|
+import org.springblade.manager.entity.ContractInfo;
|
|
|
+import org.springblade.manager.feign.ContractClient;
|
|
|
import org.springblade.resource.feign.CommonFileClient;
|
|
|
import org.springblade.resource.feign.NewISmsClient;
|
|
|
import org.springblade.system.entity.DictBiz;
|
|
@@ -59,465 +62,483 @@ import java.util.stream.Collectors;
|
|
|
@Api(value = "任务审核主表", tags = "任务审核主表接口")
|
|
|
public class TaskController extends BladeController {
|
|
|
|
|
|
- private final ITaskService taskService;
|
|
|
-
|
|
|
- private final ITaskParallelService taskParallelService;
|
|
|
-
|
|
|
- private final NewFlowClient newFlowClient;
|
|
|
-
|
|
|
- private final IDictBizClient dictBizClient;
|
|
|
-
|
|
|
- private final NewISmsClient newSmsClient;
|
|
|
-
|
|
|
- private final IDefaultConfigService defaultConfigService;
|
|
|
-
|
|
|
- private final ITaskBatchService taskBatchService;
|
|
|
-
|
|
|
- private final ITaskService iTaskService;
|
|
|
-
|
|
|
- private final WebSocket webSocket;
|
|
|
-
|
|
|
- private final CommonFileClient commonFileClient;
|
|
|
-
|
|
|
- private final ITrialSelfInspectionRecordService iTrialSelfInspectionRecordService;
|
|
|
-
|
|
|
- /**
|
|
|
- * 记录短信验证码超时时间
|
|
|
- */
|
|
|
- @GetMapping("/save-sms-timeout")
|
|
|
- @ApiOperationSupport(order = 13)
|
|
|
- @ApiOperation(value = "记录短信验证码超时时间")
|
|
|
- public void saveSmsTimeout(@RequestParam String code){
|
|
|
- //获取账户记录
|
|
|
- DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
|
|
|
- if(config != null){
|
|
|
- //获取当前时间
|
|
|
- Date now = DateUtil.now();
|
|
|
- //默认16小时后超时
|
|
|
- now = DateUtil.plusHours(now, 16);
|
|
|
-
|
|
|
- LambdaUpdateWrapper<DefaultConfig> wrapper = new LambdaUpdateWrapper<>();
|
|
|
- wrapper.set(DefaultConfig::getSmsTimeOut, DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
|
|
|
- if(!StringUtils.equals(config.getSmsCode(), code)){
|
|
|
- wrapper.set(DefaultConfig::getSmsCode, code);
|
|
|
- }
|
|
|
- //生成超时时间
|
|
|
- this.defaultConfigService.update(wrapper.eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验电签短信验证码
|
|
|
- */
|
|
|
- @PostMapping("/check-sms-code")
|
|
|
- @ApiOperationSupport(order = 12)
|
|
|
- @ApiOperation(value = "校验电签短信验证码")
|
|
|
- public R<String> checkSmsCode(){
|
|
|
- //获取账户验证码
|
|
|
- DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
|
|
|
-
|
|
|
- if(config != null){
|
|
|
- if(StringUtils.isNotEmpty(config.getSmsTimeOut())){
|
|
|
- //获取当前时间
|
|
|
- Date now = DateUtil.now();
|
|
|
- //先自行校验是否超时
|
|
|
- Duration duration = DateUtil.between(DateUtil.parse(config.getSmsTimeOut(), "yyyy-MM-dd HH:mm:ss"), now);
|
|
|
- if(duration.getSeconds() > 0){
|
|
|
- //说明已经超时,清空短信验证记录
|
|
|
- this.defaultConfigService.update(Wrappers.<DefaultConfig>lambdaUpdate().set(DefaultConfig::getSmsTimeOut, null).set(DefaultConfig::getSmsCode, null).eq(DefaultConfig::getId, config.getId()));
|
|
|
- }
|
|
|
- }
|
|
|
- return R.data(config.getSmsTimeOut());
|
|
|
- }
|
|
|
-
|
|
|
- return R.data(null);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量审批详情
|
|
|
- */
|
|
|
- @GetMapping("/batch-approval-parameter")
|
|
|
- @ApiOperationSupport(order = 11)
|
|
|
- @ApiOperation(value = "批量页详情")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name = "formDataId", value = "数据源", required = true),
|
|
|
- @ApiImplicitParam(name = "approvalType", value = "上报类型", required = true)
|
|
|
- })
|
|
|
- public R<TaskApprovalVO> getBatchApprovalTaskParameter(@RequestParam String formDataId, @RequestParam Integer approvalType){
|
|
|
- TaskApprovalVO result = new TaskApprovalVO();
|
|
|
- result.setFormDataId(formDataId);
|
|
|
- result.setApprovalType(approvalType);
|
|
|
-
|
|
|
- return R.data(this.taskService.queryBusinessData(result));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 短信验证
|
|
|
- */
|
|
|
- @PostMapping("/send-notice")
|
|
|
- @ApiOperationSupport(order = 10)
|
|
|
- @ApiOperation(value = "短信验证")
|
|
|
- public R<Boolean> sendNotice(@RequestParam String phone){
|
|
|
- String code = CommonUtil.getCharAndNumber(4);
|
|
|
- Map<String, String> params = new HashMap<>(3);
|
|
|
- params.put("code", code);
|
|
|
- R<SmsResponse> result = this.newSmsClient.sendMessage("test_code", JsonUtil.toJson(params), phone);
|
|
|
- if(result.getData().isSuccess()){
|
|
|
- //记录当前验证码
|
|
|
- DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
|
|
|
- if(config != null){
|
|
|
- //修改
|
|
|
- config.setSmsCode(code);
|
|
|
- this.defaultConfigService.updateById(config);
|
|
|
- } else {
|
|
|
- //新增
|
|
|
- config = new DefaultConfig();
|
|
|
- config.setSmsCode(code);
|
|
|
- config.setCreateUser(AuthUtil.getUserId());
|
|
|
- config.setCreateTime(new Date());
|
|
|
- this.defaultConfigService.save(config);
|
|
|
- }
|
|
|
- }
|
|
|
- return result.getData().isSuccess() ? R.data(200, true, code) : R.data(499, false, String.valueOf(JSONObject.parseObject(result.getData().getMsg(), Map.class).get("Message")));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取发起
|
|
|
- */
|
|
|
- @GetMapping("/query-user-start-flow")
|
|
|
- @ApiOperationSupport(order = 9)
|
|
|
- @ApiOperation(value = "获取发起")
|
|
|
- public R<IPage<TaskVO>> queryUserStartFlow(TaskQueryVO queryVO){
|
|
|
- //获取发起,只需要查询主表
|
|
|
- //先查询符合条件的流程
|
|
|
- LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getProjectId, queryVO.getProjectId()).eq(Task::getReportUser, AuthUtil.getUserId().toString());
|
|
|
- //设置查询参数
|
|
|
- this.integrationMethod(wrapper, queryVO);
|
|
|
- //获取主流程
|
|
|
- List<Task> masterTaskList = this.taskService.list(wrapper);
|
|
|
- if(masterTaskList != null && masterTaskList.size() > 0){
|
|
|
- //获取集合
|
|
|
- List<String> processInstanceIds = masterTaskList.stream().map(Task::getProcessInstanceId).distinct().collect(Collectors.toList());
|
|
|
- //设置主表map,方便获取
|
|
|
- Map<String, Task> masterTaskMap = new HashMap<>();
|
|
|
- masterTaskList.forEach(task -> masterTaskMap.put(task.getProcessInstanceId(), task));
|
|
|
-
|
|
|
- R<Object> rObject = this.newFlowClient.selectSendPage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", processInstanceIds));
|
|
|
- if(rObject.isSuccess()){
|
|
|
- Query query = new Query();
|
|
|
- query.setCurrent(queryVO.getCurrent());
|
|
|
- query.setSize(queryVO.getSize());
|
|
|
- //新建一个IPage的实例
|
|
|
- IPage<BladeFlow> newData = Condition.getPage(query);
|
|
|
- //使用实例获取具体的类型进行转换
|
|
|
- IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
|
|
|
- //本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
|
|
|
- List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
|
|
|
-
|
|
|
- //最终结果集合
|
|
|
- List<TaskVO> finalResult = new ArrayList<>();
|
|
|
- for(BladeFlow flow : result) {
|
|
|
- //获取实体
|
|
|
- Task task = masterTaskMap.get(flow.getProcessInstanceId());
|
|
|
- //类型转换
|
|
|
- TaskVO vo = new TaskVO();
|
|
|
- BeanUtils.copyProperties(task, vo);
|
|
|
- //设置关键信息
|
|
|
- vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
|
|
|
- vo.setTaskId(flow.getTaskId());
|
|
|
- vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
|
|
|
- //查询分支流程信息
|
|
|
- List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()));
|
|
|
- if (linkList != null && !linkList.isEmpty()) {
|
|
|
- this.integrationMethod(vo, linkList);
|
|
|
- }
|
|
|
- finalResult.add(vo);
|
|
|
- }
|
|
|
-
|
|
|
- // 手机app 需要排序接口
|
|
|
- if(queryVO.getOrdType()!=null && queryVO.getOrdType()==1){ // 降序
|
|
|
- finalResult.sort(Comparator.comparing(TaskVO::getCreateTime).reversed());
|
|
|
- }
|
|
|
- if(queryVO.getOrdType()!=null && queryVO.getOrdType()==2){ // 升序
|
|
|
- finalResult.sort(Comparator.comparing(TaskVO::getCreateTime));
|
|
|
- }
|
|
|
-
|
|
|
- //最终分页数据
|
|
|
- return this.getIPageR(query, flowIPage, finalResult);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return R.data(null);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 统合方法
|
|
|
- */
|
|
|
- private void integrationMethod(TaskVO vo, List<TaskParallel> linkList) {
|
|
|
- linkList.forEach(link -> vo.setWaitingUserList(link.getTaskUserName(), new Integer("999").equals(link.getEVisaStatus()) ? 999 : new Integer("2").equals(link.getStatus()) ? 2 : new Integer("3").equals(link.getStatus()) && new Integer("1").equals(link.getInitiative()) ? 3 : 1));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量审批
|
|
|
- */
|
|
|
- @PostMapping("/batch-complete-approval-task")
|
|
|
- @ApiOperationSupport(order = 8)
|
|
|
- @ApiOperation(value = "批量审批")
|
|
|
- public R<Boolean> batchCompleteApprovalTask(@RequestBody BatchTaskVO batchTaskVO) throws IOException {
|
|
|
- String taskIds = batchTaskVO.getTaskIds();
|
|
|
- String parallelProcessInstanceIds = batchTaskVO.getParallelProcessInstanceIds();
|
|
|
- if(StringUtils.isNotEmpty(taskIds)){
|
|
|
- String[] taskIdArray = taskIds.split(",");
|
|
|
- String[] parallelProcessInstanceIdArray = parallelProcessInstanceIds.split(",");
|
|
|
- String[] approvalType = batchTaskVO.getApprovalType().split(",");
|
|
|
- String[] formDataId = batchTaskVO.getFormDataId().split(",");
|
|
|
-
|
|
|
- List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
|
|
|
-
|
|
|
- for(int i = 0, l = taskIdArray.length; i < l; i ++){
|
|
|
- TaskApprovalVO approvalVO = new TaskApprovalVO();
|
|
|
- approvalVO.setTaskId(taskIdArray[i]);
|
|
|
- approvalVO.setParallelProcessInstanceId(parallelProcessInstanceIdArray[i]);
|
|
|
- approvalVO.setFlag(batchTaskVO.getFlag());
|
|
|
- approvalVO.setComment(batchTaskVO.getComment());
|
|
|
- approvalVO.setApprovalType(Integer.parseInt(approvalType[i]));
|
|
|
- approvalVO.setFormDataId(formDataId[i]);
|
|
|
-
|
|
|
- taskApprovalVOS.add(approvalVO);
|
|
|
- }
|
|
|
-
|
|
|
- //修改试验填报状态
|
|
|
- this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(taskApprovalVOS);
|
|
|
-
|
|
|
- //审批
|
|
|
- this.taskService.batchCompleteApprovalTask(taskApprovalVOS,AuthUtil.getUserId());
|
|
|
-
|
|
|
- //通过WebSocket推送数量条数
|
|
|
- if (ObjectUtil.isNotEmpty(AuthUtil.getUserId())) {
|
|
|
- Map<String, String> webSocketMessageMap = WebSocket.getWebSocketMessageMap();
|
|
|
- Set<Map.Entry<String, String>> message = webSocketMessageMap.entrySet();
|
|
|
- for (Map.Entry<String, String> entry : message) {
|
|
|
- String userId = entry.getKey();
|
|
|
- if (userId.equals(AuthUtil.getUserId().toString())) { //只推送当前用户
|
|
|
- String projectAndContractId = entry.getValue();
|
|
|
- if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
|
|
|
- String projectId = projectAndContractId.split(",")[0];
|
|
|
- String contractId = projectAndContractId.split(",")[1];
|
|
|
- Map<String, String> stringMap = iTaskService.getTaskCount(projectId, contractId, userId);
|
|
|
-
|
|
|
- webSocket.sendMessageByUserId(AuthUtil.getUserId().toString(), JSON.toJSONString(stringMap));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return R.data(true);
|
|
|
- }
|
|
|
- return R.data(false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前合同段的上报批次
|
|
|
- * @param projectId 项目ID
|
|
|
- * @param contractId 合同段ID
|
|
|
- */
|
|
|
- @GetMapping("/query-batch-list")
|
|
|
- @ApiOperationSupport(order = 7)
|
|
|
- @ApiOperation(value = "获取当前合同段的上报批次")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name = "projectId", value = "项目ID", required = true),
|
|
|
- @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
- })
|
|
|
- public R<List<Task>> queryBatchList(String projectId, String contractId){
|
|
|
- return R.data(this.taskService.queryBatchList(projectId, contractId));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前合同段有哪些上报批次
|
|
|
- * @param projectId 项目ID
|
|
|
- * @param contractId 合同段ID
|
|
|
- */
|
|
|
- @GetMapping("/query-batch-list-two")
|
|
|
- @ApiOperationSupport(order = 7)
|
|
|
- @ApiOperation(value = "获取当前合同段的上报批次")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name = "projectId", value = "项目ID", required = true),
|
|
|
- @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
- })
|
|
|
- public R<List<String>> queryBatchListTwo(String projectId, String contractId){
|
|
|
- return R.data(this.taskService.queryBatchListTwo(projectId, contractId));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取任务类型或任务状态
|
|
|
- */
|
|
|
- @GetMapping("/query-task-type-status")
|
|
|
- @ApiOperationSupport(order = 6)
|
|
|
- @ApiOperation(value = "获取任务类型或任务状态")
|
|
|
- public R<List<DictBiz>> queryTaskTypeOrStatus(String typeOrStatus){
|
|
|
- return this.dictBizClient.getList(typeOrStatus, "notRoot");
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取已办
|
|
|
- */
|
|
|
- @GetMapping("/query-user-done-task-list")
|
|
|
- @ApiOperationSupport(order = 5)
|
|
|
- @ApiOperation(value = "获取已办")
|
|
|
- public R<IPage<TaskVO>> queryUserDoneTaskList(TaskQueryVO queryVO){
|
|
|
- //设置获取参数
|
|
|
- Map<String,Task> masterTaskMap = new HashMap<>();
|
|
|
- Map<String,TaskParallel> parallelMap = new HashMap<>();
|
|
|
- List<String> parallelProcessInstanceIds = new ArrayList<>();
|
|
|
- //统合查询方法
|
|
|
- this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "2,3");
|
|
|
-
|
|
|
- //获取已办(基于原生已办)
|
|
|
- R<Object> rObject = this.newFlowClient.selectDonePage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
|
|
|
- //处理参数
|
|
|
- return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, false);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 审批页详情
|
|
|
- */
|
|
|
- @GetMapping("/query-approval-parameter")
|
|
|
- @ApiOperationSupport(order = 4)
|
|
|
- @ApiOperation(value = "审批页详情(单任务时)")
|
|
|
- public R<TaskApprovalVO> getApprovalTaskParameter(@RequestParam String parallelProcessInstanceId, @RequestParam String formDataId, @RequestParam Integer approvalType){
|
|
|
- TaskApprovalVO vo = new TaskApprovalVO();
|
|
|
- vo.setFormDataId(formDataId);
|
|
|
- vo.setApprovalType(approvalType);
|
|
|
- //获取具体业务数据
|
|
|
- return R.data(this.taskService.queryBusinessData(vo));
|
|
|
- }
|
|
|
- /**
|
|
|
- * 审批页pdf数量详情
|
|
|
- */
|
|
|
- @GetMapping("/query-approval-parameter-pdf-num")
|
|
|
- @ApiOperationSupport(order = 14)
|
|
|
- @ApiOperation(value = "审批页pdf数量详情")
|
|
|
- public R<Object> getApprovalTaskParameterPdfNum(@RequestParam String url){
|
|
|
- String pdfNum = this.commonFileClient.getPdfNum(url);
|
|
|
- return R.data(pdfNum);
|
|
|
- }
|
|
|
- /**
|
|
|
- * 获取当前用户待办流程
|
|
|
- */
|
|
|
- @GetMapping("/user-to-do-task-list")
|
|
|
- @ApiOperationSupport(order = 3)
|
|
|
- @ApiOperation(value = "获取当前用户待办流程")
|
|
|
- public R<IPage<TaskVO>> todoUserApprovalTask(TaskQueryVO queryVO){
|
|
|
- //设置获取参数
|
|
|
- Map<String,Task> masterTaskMap = new HashMap<>();
|
|
|
- Map<String,TaskParallel> parallelMap = new HashMap<>();
|
|
|
- List<String> parallelProcessInstanceIds = new ArrayList<>();
|
|
|
- //统合查询方法
|
|
|
- this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "1");
|
|
|
-
|
|
|
- //获取待办(基于原生待办)
|
|
|
- R<Object> rObject = this.newFlowClient.selectTodoPage(queryVO.getCurrent(), queryVO.getSize(),queryVO.getOrdType()==null?1:queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
|
|
|
- //处理参数
|
|
|
- return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, true);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 统合查询方法
|
|
|
- */
|
|
|
- private void integrationMethod(TaskQueryVO queryVO, Map<String,Task> masterTaskMap, Map<String,TaskParallel> parallelMap, List<String> parallelProcessInstanceIds, String status){
|
|
|
- //先查询符合条件的流程
|
|
|
- LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0)
|
|
|
- .eq(Task::getProjectId, queryVO.getProjectId()).eq(StringUtils.isNotBlank(queryVO.getBatch()),Task::getBatch,queryVO.getBatch());
|
|
|
- this.integrationMethod(wrapper, queryVO);
|
|
|
-
|
|
|
- //符合条件的集合
|
|
|
- List<Task> masterTaskList = this.taskService.list(wrapper);
|
|
|
- //根据主表获取附表且当前用户的记录
|
|
|
- List<String> processInstanceIds = new ArrayList<>();
|
|
|
- masterTaskList.forEach(task -> {
|
|
|
- masterTaskMap.put(task.getProcessInstanceId(), task);
|
|
|
- processInstanceIds.add(task.getProcessInstanceId());
|
|
|
- });
|
|
|
-
|
|
|
- if(processInstanceIds.size() > 0){
|
|
|
- List<TaskParallel> parallelTaskList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().in(TaskParallel::getProcessInstanceId, processInstanceIds).eq(TaskParallel::getTaskUser, AuthUtil.getUserId().toString()).eq(TaskParallel::getIsDeleted, 0).in(TaskParallel::getStatus, Arrays.asList(status.split(","))));
|
|
|
- parallelTaskList.forEach(parallel -> {
|
|
|
- parallelMap.put(parallel.getParallelProcessInstanceId(), parallel);
|
|
|
- parallelProcessInstanceIds.add(parallel.getParallelProcessInstanceId());
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void integrationMethod(LambdaQueryWrapper<Task> wrapper, TaskQueryVO queryVO){
|
|
|
- //任务类型
|
|
|
- if(StringUtils.isNotEmpty(queryVO.getTaskType())){
|
|
|
- wrapper.eq(Task::getType, queryVO.getTaskType());
|
|
|
- }
|
|
|
- //任务状态
|
|
|
- if(StringUtils.isNotEmpty(queryVO.getTaskStatus())){
|
|
|
- wrapper.eq(Task::getStatus, queryVO.getTaskStatus());
|
|
|
- }
|
|
|
- //合同段ID
|
|
|
- if(StringUtils.isNotEmpty(queryVO.getContractId())){
|
|
|
- wrapper.eq(Task::getContractId, queryVO.getContractId());
|
|
|
- }
|
|
|
- //开始结束时间
|
|
|
- if(StringUtils.isNotEmpty(queryVO.getStartTime()) && StringUtils.isNotEmpty(queryVO.getEndTime())){
|
|
|
- wrapper.between(Task::getStartTime, queryVO.getStartTime(), queryVO.getEndTime());
|
|
|
- }
|
|
|
- //关键字查询
|
|
|
- if(StringUtils.isNotEmpty(queryVO.getQueryValue())){
|
|
|
- wrapper.like(Task::getTaskName, queryVO.getQueryValue());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 统合处理方法
|
|
|
- */
|
|
|
- private R<IPage<TaskVO>> integrationMethod(TaskQueryVO queryVO, R<Object> rObject, Map<String,Task> masterTaskMap, Map<String,TaskParallel> parallelMap, boolean isToDo){
|
|
|
- Query query = new Query();
|
|
|
- query.setCurrent(queryVO.getCurrent());
|
|
|
- query.setSize(queryVO.getSize());
|
|
|
- //最终集合
|
|
|
- List<TaskVO> finalResult = new ArrayList<>();
|
|
|
- if(rObject.isSuccess()){
|
|
|
- //新建一个IPage的实例
|
|
|
- IPage<BladeFlow> newData = Condition.getPage(query);
|
|
|
- //使用实例获取具体的类型进行转换
|
|
|
- IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
|
|
|
- //本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
|
|
|
- List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
|
|
|
-
|
|
|
- if(result != null && result.size() > 0){
|
|
|
- //获取相关信息
|
|
|
- result.forEach(flow -> {
|
|
|
- TaskParallel taskParallel = parallelMap.get(flow.getProcessInstanceId());
|
|
|
- if(taskParallel != null){
|
|
|
- //查询主表数据
|
|
|
- Task task = masterTaskMap.get(taskParallel.getProcessInstanceId());
|
|
|
-
|
|
|
- if(task != null){
|
|
|
- //复制数据
|
|
|
- TaskVO vo = new TaskVO();
|
|
|
- BeanUtils.copyProperties(task, vo);
|
|
|
- //设置关键信息
|
|
|
- vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
|
|
|
- vo.setParallelProcessInstanceId(flow.getProcessInstanceId());
|
|
|
- vo.setTaskId(flow.getTaskId());
|
|
|
- vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
|
|
|
- vo.setEVisaContent(taskParallel.getEVisaContent());
|
|
|
- //获取主流程下所有相关的审批人
|
|
|
- List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0));
|
|
|
- if(linkList != null && linkList.size() > 0){
|
|
|
- this.integrationMethod(vo, linkList);
|
|
|
- }
|
|
|
-
|
|
|
- //设置最终集合
|
|
|
- finalResult.add(vo);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
+ private final ITaskService taskService;
|
|
|
+
|
|
|
+ private final ITaskParallelService taskParallelService;
|
|
|
+
|
|
|
+ private final NewFlowClient newFlowClient;
|
|
|
+
|
|
|
+ private final IDictBizClient dictBizClient;
|
|
|
+
|
|
|
+ private final NewISmsClient newSmsClient;
|
|
|
+
|
|
|
+ private final IDefaultConfigService defaultConfigService;
|
|
|
+
|
|
|
+ private final ITaskBatchService taskBatchService;
|
|
|
+
|
|
|
+ private final ITaskService iTaskService;
|
|
|
+
|
|
|
+ private final WebSocket webSocket;
|
|
|
+
|
|
|
+ private final CommonFileClient commonFileClient;
|
|
|
+
|
|
|
+ private final ContractClient contractClient;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 记录短信验证码超时时间
|
|
|
+ */
|
|
|
+ @GetMapping("/save-sms-timeout")
|
|
|
+ @ApiOperationSupport(order = 13)
|
|
|
+ @ApiOperation(value = "记录短信验证码超时时间")
|
|
|
+ public void saveSmsTimeout(@RequestParam String code) {
|
|
|
+ //获取账户记录
|
|
|
+ DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
|
|
|
+ if (config != null) {
|
|
|
+ //获取当前时间
|
|
|
+ Date now = DateUtil.now();
|
|
|
+ //默认16小时后超时
|
|
|
+ now = DateUtil.plusHours(now, 16);
|
|
|
+
|
|
|
+ LambdaUpdateWrapper<DefaultConfig> wrapper = new LambdaUpdateWrapper<>();
|
|
|
+ wrapper.set(DefaultConfig::getSmsTimeOut, DateUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
|
|
|
+ if (!StringUtils.equals(config.getSmsCode(), code)) {
|
|
|
+ wrapper.set(DefaultConfig::getSmsCode, code);
|
|
|
+ }
|
|
|
+ //生成超时时间
|
|
|
+ this.defaultConfigService.update(wrapper.eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验电签短信验证码
|
|
|
+ */
|
|
|
+ @PostMapping("/check-sms-code")
|
|
|
+ @ApiOperationSupport(order = 12)
|
|
|
+ @ApiOperation(value = "校验电签短信验证码")
|
|
|
+ public R<String> checkSmsCode() {
|
|
|
+ //获取账户验证码
|
|
|
+ DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
|
|
|
+
|
|
|
+ if (config != null) {
|
|
|
+ if (StringUtils.isNotEmpty(config.getSmsTimeOut())) {
|
|
|
+ //获取当前时间
|
|
|
+ Date now = DateUtil.now();
|
|
|
+ //先自行校验是否超时
|
|
|
+ Duration duration = DateUtil.between(DateUtil.parse(config.getSmsTimeOut(), "yyyy-MM-dd HH:mm:ss"), now);
|
|
|
+ if (duration.getSeconds() > 0) {
|
|
|
+ //说明已经超时,清空短信验证记录
|
|
|
+ this.defaultConfigService.update(Wrappers.<DefaultConfig>lambdaUpdate().set(DefaultConfig::getSmsTimeOut, null).set(DefaultConfig::getSmsCode, null).eq(DefaultConfig::getId, config.getId()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(config.getSmsTimeOut());
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量审批详情
|
|
|
+ */
|
|
|
+ @GetMapping("/batch-approval-parameter")
|
|
|
+ @ApiOperationSupport(order = 11)
|
|
|
+ @ApiOperation(value = "批量页详情")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "formDataId", value = "数据源", required = true),
|
|
|
+ @ApiImplicitParam(name = "approvalType", value = "上报类型", required = true)
|
|
|
+ })
|
|
|
+ public R<List<TaskApprovalVO>> getBatchApprovalTaskParameter(@RequestParam String formDataId, @RequestParam Integer approvalType) {
|
|
|
+ List<String> longs = Func.toStrList(formDataId);
|
|
|
+ List<TaskApprovalVO> taskApprovalVOList = new ArrayList<>();
|
|
|
+ for (String aLong : longs) {
|
|
|
+ TaskApprovalVO result = new TaskApprovalVO();
|
|
|
+ result.setFormDataId(aLong);
|
|
|
+ result.setApprovalType(approvalType);
|
|
|
+ taskApprovalVOList.add(this.taskService.queryBusinessData(result));
|
|
|
+ }
|
|
|
+ return R.data(taskApprovalVOList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 短信验证
|
|
|
+ */
|
|
|
+ @PostMapping("/send-notice")
|
|
|
+ @ApiOperationSupport(order = 10)
|
|
|
+ @ApiOperation(value = "短信验证")
|
|
|
+ public R<Boolean> sendNotice(@RequestParam String phone) {
|
|
|
+ String code = CommonUtil.getCharAndNumber(4);
|
|
|
+ Map<String, String> params = new HashMap<>(3);
|
|
|
+ params.put("code", code);
|
|
|
+ R<SmsResponse> result = this.newSmsClient.sendMessage("test_code", JsonUtil.toJson(params), phone);
|
|
|
+ if (result.getData().isSuccess()) {
|
|
|
+ //记录当前验证码
|
|
|
+ DefaultConfig config = this.defaultConfigService.getOne(Wrappers.<DefaultConfig>lambdaQuery().eq(DefaultConfig::getCreateUser, AuthUtil.getUserId()));
|
|
|
+ if (config != null) {
|
|
|
+ //修改
|
|
|
+ config.setSmsCode(code);
|
|
|
+ this.defaultConfigService.updateById(config);
|
|
|
+ } else {
|
|
|
+ //新增
|
|
|
+ config = new DefaultConfig();
|
|
|
+ config.setSmsCode(code);
|
|
|
+ config.setCreateUser(AuthUtil.getUserId());
|
|
|
+ config.setCreateTime(new Date());
|
|
|
+ this.defaultConfigService.save(config);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result.getData().isSuccess() ? R.data(200, true, code) : R.data(499, false, String.valueOf(JSONObject.parseObject(result.getData().getMsg(), Map.class).get("Message")));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取发起
|
|
|
+ */
|
|
|
+ @GetMapping("/query-user-start-flow")
|
|
|
+ @ApiOperationSupport(order = 9)
|
|
|
+ @ApiOperation(value = "获取发起")
|
|
|
+ public R<IPage<TaskVO>> queryUserStartFlow(TaskQueryVO queryVO) {
|
|
|
+ //获取发起,只需要查询主表
|
|
|
+ //先查询符合条件的流程
|
|
|
+ LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getProjectId, queryVO.getProjectId()).eq(Task::getReportUser, AuthUtil.getUserId().toString());
|
|
|
+ //设置查询参数
|
|
|
+ this.integrationMethod(wrapper, queryVO);
|
|
|
+ //获取主流程
|
|
|
+ List<Task> masterTaskList = this.taskService.list(wrapper);
|
|
|
+ if (masterTaskList != null && masterTaskList.size() > 0) {
|
|
|
+ //获取集合
|
|
|
+ List<String> processInstanceIds = masterTaskList.stream().map(Task::getProcessInstanceId).distinct().collect(Collectors.toList());
|
|
|
+ //设置主表map,方便获取
|
|
|
+ Map<String, Task> masterTaskMap = new HashMap<>();
|
|
|
+ masterTaskList.forEach(task -> masterTaskMap.put(task.getProcessInstanceId(), task));
|
|
|
+
|
|
|
+ R<Object> rObject = this.newFlowClient.selectSendPage(queryVO.getCurrent(), queryVO.getSize(), queryVO.getOrdType() == null ? 1 : queryVO.getOrdType(), String.join(",", processInstanceIds));
|
|
|
+ if (rObject.isSuccess()) {
|
|
|
+ Query query = new Query();
|
|
|
+ query.setCurrent(queryVO.getCurrent());
|
|
|
+ query.setSize(queryVO.getSize());
|
|
|
+ //新建一个IPage的实例
|
|
|
+ IPage<BladeFlow> newData = Condition.getPage(query);
|
|
|
+ //使用实例获取具体的类型进行转换
|
|
|
+ IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
|
|
|
+ //本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
|
|
|
+ List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
|
|
|
+
|
|
|
+ //最终结果集合
|
|
|
+ List<TaskVO> finalResult = new ArrayList<>();
|
|
|
+ for (BladeFlow flow : result) {
|
|
|
+ //获取实体
|
|
|
+ Task task = masterTaskMap.get(flow.getProcessInstanceId());
|
|
|
+ //类型转换
|
|
|
+ TaskVO vo = new TaskVO();
|
|
|
+ BeanUtils.copyProperties(task, vo);
|
|
|
+ //设置关键信息
|
|
|
+ vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
|
|
|
+ vo.setTaskId(flow.getTaskId());
|
|
|
+ vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
|
|
|
+ //查询分支流程信息
|
|
|
+ List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()));
|
|
|
+ if (linkList != null && !linkList.isEmpty()) {
|
|
|
+ this.integrationMethod(vo, linkList);
|
|
|
+ }
|
|
|
+ finalResult.add(vo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 手机app 需要排序接口
|
|
|
+ if (queryVO.getOrdType() != null && queryVO.getOrdType() == 1) { // 降序
|
|
|
+ finalResult.sort(Comparator.comparing(TaskVO::getCreateTime).reversed());
|
|
|
+ }
|
|
|
+ if (queryVO.getOrdType() != null && queryVO.getOrdType() == 2) { // 升序
|
|
|
+ finalResult.sort(Comparator.comparing(TaskVO::getCreateTime));
|
|
|
+ }
|
|
|
+
|
|
|
+ //最终分页数据
|
|
|
+ return this.getIPageR(query, flowIPage, finalResult);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统合方法
|
|
|
+ */
|
|
|
+ private void integrationMethod(TaskVO vo, List<TaskParallel> linkList) {
|
|
|
+ linkList.forEach(link -> vo.setWaitingUserList(link.getTaskUserName(), new Integer("999").equals(link.getEVisaStatus()) ? 999 : new Integer("2").equals(link.getStatus()) ? 2 : new Integer("3").equals(link.getStatus()) && new Integer("1").equals(link.getInitiative()) ? 3 : 1));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量审批
|
|
|
+ */
|
|
|
+ @PostMapping("/batch-complete-approval-task")
|
|
|
+ @ApiOperationSupport(order = 8)
|
|
|
+ @ApiOperation(value = "批量审批")
|
|
|
+ public R<Boolean> batchCompleteApprovalTask(@RequestBody BatchTaskVO batchTaskVO) throws IOException {
|
|
|
+ String taskIds = batchTaskVO.getTaskIds();
|
|
|
+ String parallelProcessInstanceIds = batchTaskVO.getParallelProcessInstanceIds();
|
|
|
+ if (StringUtils.isNotEmpty(taskIds)) {
|
|
|
+ String[] taskIdArray = taskIds.split(",");
|
|
|
+ String[] parallelProcessInstanceIdArray = parallelProcessInstanceIds.split(",");
|
|
|
+ String[] approvalType = batchTaskVO.getApprovalType().split(",");
|
|
|
+ String[] formDataId = batchTaskVO.getFormDataId().split(",");
|
|
|
+
|
|
|
+ List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
|
|
|
+
|
|
|
+ for (int i = 0, l = taskIdArray.length; i < l; i++) {
|
|
|
+ TaskApprovalVO approvalVO = new TaskApprovalVO();
|
|
|
+ approvalVO.setTaskId(taskIdArray[i]);
|
|
|
+ approvalVO.setParallelProcessInstanceId(parallelProcessInstanceIdArray[i]);
|
|
|
+ approvalVO.setFlag(batchTaskVO.getFlag());
|
|
|
+ approvalVO.setComment(batchTaskVO.getComment());
|
|
|
+ approvalVO.setApprovalType(Integer.parseInt(approvalType[i]));
|
|
|
+ approvalVO.setFormDataId(formDataId[i]);
|
|
|
+
|
|
|
+ taskApprovalVOS.add(approvalVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ //审批
|
|
|
+ this.taskService.batchCompleteApprovalTask(taskApprovalVOS, AuthUtil.getUserId());
|
|
|
+
|
|
|
+ //通过WebSocket推送数量条数
|
|
|
+ if (ObjectUtil.isNotEmpty(AuthUtil.getUserId())) {
|
|
|
+ Map<String, String> webSocketMessageMap = WebSocket.getWebSocketMessageMap();
|
|
|
+ Set<Map.Entry<String, String>> message = webSocketMessageMap.entrySet();
|
|
|
+ for (Map.Entry<String, String> entry : message) {
|
|
|
+ String userId = entry.getKey();
|
|
|
+ if (userId.equals(AuthUtil.getUserId().toString())) { //只推送当前用户
|
|
|
+ String projectAndContractId = entry.getValue();
|
|
|
+ if (StringUtils.isNotEmpty(projectAndContractId) && StringUtils.isNotEmpty(userId)) {
|
|
|
+ String projectId = projectAndContractId.split(",")[0];
|
|
|
+ String contractId = projectAndContractId.split(",")[1];
|
|
|
+ Map<String, String> stringMap = iTaskService.getTaskCount(projectId, contractId, userId);
|
|
|
+
|
|
|
+ webSocket.sendMessageByUserId(AuthUtil.getUserId().toString(), JSON.toJSONString(stringMap));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.data(true);
|
|
|
+ }
|
|
|
+ return R.data(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前合同段的上报批次
|
|
|
+ *
|
|
|
+ * @param projectId 项目ID
|
|
|
+ * @param contractId 合同段ID
|
|
|
+ */
|
|
|
+ @GetMapping("/query-batch-list")
|
|
|
+ @ApiOperationSupport(order = 7)
|
|
|
+ @ApiOperation(value = "获取当前合同段的上报批次")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "projectId", value = "项目ID", required = true),
|
|
|
+ @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
+ })
|
|
|
+ public R<List<Task>> queryBatchList(String projectId, String contractId) {
|
|
|
+ return R.data(this.taskService.queryBatchList(projectId, contractId));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前合同段有哪些上报批次
|
|
|
+ *
|
|
|
+ * @param projectId 项目ID
|
|
|
+ * @param contractId 合同段ID
|
|
|
+ */
|
|
|
+ @GetMapping("/query-batch-list-two")
|
|
|
+ @ApiOperationSupport(order = 7)
|
|
|
+ @ApiOperation(value = "获取当前合同段的上报批次")
|
|
|
+ @ApiImplicitParams({
|
|
|
+ @ApiImplicitParam(name = "projectId", value = "项目ID", required = true),
|
|
|
+ @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
|
|
|
+ })
|
|
|
+ public R<List<String>> queryBatchListTwo(String projectId, String contractId, String type) {
|
|
|
+ if (StringUtils.isBlank(type)) {
|
|
|
+ //为空,以information为主表查询填报资料批次
|
|
|
+ return R.data(this.taskService.queryBatchListTwo(projectId, contractId));
|
|
|
+ } else {
|
|
|
+ //如果type为1内页台账不需要去查询首件批次,type为2只查标记为首件的,type为3只查首件
|
|
|
+ return R.data(this.taskService.queryBatchListThree(projectId, contractId, type));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取任务类型或任务状态
|
|
|
+ */
|
|
|
+ @GetMapping("/query-task-type-status")
|
|
|
+ @ApiOperationSupport(order = 6)
|
|
|
+ @ApiOperation(value = "获取任务类型或任务状态")
|
|
|
+ public R<List<DictBiz>> queryTaskTypeOrStatus(String typeOrStatus) {
|
|
|
+ return this.dictBizClient.getList(typeOrStatus, "notRoot");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取已办
|
|
|
+ */
|
|
|
+ @GetMapping("/query-user-done-task-list")
|
|
|
+ @ApiOperationSupport(order = 5)
|
|
|
+ @ApiOperation(value = "获取已办")
|
|
|
+ public R<IPage<TaskVO>> queryUserDoneTaskList(TaskQueryVO queryVO) {
|
|
|
+ //设置获取参数
|
|
|
+ Map<String, Task> masterTaskMap = new HashMap<>();
|
|
|
+ Map<String, TaskParallel> parallelMap = new HashMap<>();
|
|
|
+ List<String> parallelProcessInstanceIds = new ArrayList<>();
|
|
|
+ //统合查询方法
|
|
|
+ this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "2,3");
|
|
|
+
|
|
|
+ //获取已办(基于原生已办)
|
|
|
+ R<Object> rObject = this.newFlowClient.selectDonePage(queryVO.getCurrent(), queryVO.getSize(), queryVO.getOrdType() == null ? 1 : queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
|
|
|
+ //处理参数
|
|
|
+ return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 审批页详情
|
|
|
+ */
|
|
|
+ @GetMapping("/query-approval-parameter")
|
|
|
+ @ApiOperationSupport(order = 4)
|
|
|
+ @ApiOperation(value = "审批页详情(单任务时)")
|
|
|
+ public R<TaskApprovalVO> getApprovalTaskParameter(@RequestParam String parallelProcessInstanceId, @RequestParam String formDataId, @RequestParam Integer approvalType) {
|
|
|
+ TaskApprovalVO vo = new TaskApprovalVO();
|
|
|
+ vo.setFormDataId(formDataId);
|
|
|
+ vo.setApprovalType(approvalType);
|
|
|
+ //获取具体业务数据
|
|
|
+ return R.data(this.taskService.queryBusinessData(vo));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 审批页pdf数量详情
|
|
|
+ */
|
|
|
+ @GetMapping("/query-approval-parameter-pdf-num")
|
|
|
+ @ApiOperationSupport(order = 14)
|
|
|
+ @ApiOperation(value = "审批页pdf数量详情")
|
|
|
+ public R<Object> getApprovalTaskParameterPdfNum(@RequestParam String url) {
|
|
|
+ String pdfNum = this.commonFileClient.getPdfNum(url);
|
|
|
+ return R.data(pdfNum);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前用户待办流程
|
|
|
+ */
|
|
|
+ @GetMapping("/user-to-do-task-list")
|
|
|
+ @ApiOperationSupport(order = 3)
|
|
|
+ @ApiOperation(value = "获取当前用户待办流程")
|
|
|
+ public R<IPage<TaskVO>> todoUserApprovalTask(TaskQueryVO queryVO) {
|
|
|
+ //设置获取参数
|
|
|
+ Map<String, Task> masterTaskMap = new HashMap<>();
|
|
|
+ Map<String, TaskParallel> parallelMap = new HashMap<>();
|
|
|
+ List<String> parallelProcessInstanceIds = new ArrayList<>();
|
|
|
+ //统合查询方法
|
|
|
+ this.integrationMethod(queryVO, masterTaskMap, parallelMap, parallelProcessInstanceIds, "1");
|
|
|
+ if (masterTaskMap.size() == 0) {
|
|
|
+ return R.data(null);
|
|
|
+ }
|
|
|
+ //获取待办(基于原生待办)
|
|
|
+ R<Object> rObject = this.newFlowClient.selectTodoPage(queryVO.getCurrent(), queryVO.getSize(), queryVO.getOrdType() == null ? 1 : queryVO.getOrdType(), String.join(",", parallelProcessInstanceIds));
|
|
|
+ //处理参数
|
|
|
+ return this.integrationMethod(queryVO, rObject, masterTaskMap, parallelMap, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统合查询方法
|
|
|
+ */
|
|
|
+ private void integrationMethod(TaskQueryVO queryVO, Map<String, Task> masterTaskMap, Map<String, TaskParallel> parallelMap, List<String> parallelProcessInstanceIds, String status) {
|
|
|
+ //先查询符合条件的流程
|
|
|
+ LambdaQueryWrapper<Task> wrapper = Wrappers.<Task>lambdaQuery().eq(Task::getIsDeleted, 0)
|
|
|
+ .eq(Task::getProjectId, queryVO.getProjectId()).eq(StringUtils.isNotBlank(queryVO.getBatch()), Task::getBatch, queryVO.getBatch());
|
|
|
+ this.integrationMethod(wrapper, queryVO);
|
|
|
+
|
|
|
+ //符合条件的集合
|
|
|
+ List<Task> masterTaskList = this.taskService.list(wrapper);
|
|
|
+ //根据主表获取附表且当前用户的记录
|
|
|
+ List<String> processInstanceIds = new ArrayList<>();
|
|
|
+ masterTaskList.forEach(task -> {
|
|
|
+ masterTaskMap.put(task.getProcessInstanceId(), task);
|
|
|
+ processInstanceIds.add(task.getProcessInstanceId());
|
|
|
+ });
|
|
|
+
|
|
|
+ if (processInstanceIds.size() > 0) {
|
|
|
+ List<TaskParallel> parallelTaskList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().in(TaskParallel::getProcessInstanceId, processInstanceIds).eq(TaskParallel::getTaskUser, AuthUtil.getUserId().toString()).eq(TaskParallel::getIsDeleted, 0).in(TaskParallel::getStatus, Arrays.asList(status.split(","))));
|
|
|
+ parallelTaskList.forEach(parallel -> {
|
|
|
+ parallelMap.put(parallel.getParallelProcessInstanceId(), parallel);
|
|
|
+ parallelProcessInstanceIds.add(parallel.getParallelProcessInstanceId());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void integrationMethod(LambdaQueryWrapper<Task> wrapper, TaskQueryVO queryVO) {
|
|
|
+ //任务类型
|
|
|
+ if (StringUtils.isNotEmpty(queryVO.getTaskType())) {
|
|
|
+ wrapper.eq(Task::getType, queryVO.getTaskType());
|
|
|
+ }
|
|
|
+ //任务状态
|
|
|
+ if (StringUtils.isNotEmpty(queryVO.getTaskStatus())) {
|
|
|
+ wrapper.eq(Task::getStatus, queryVO.getTaskStatus());
|
|
|
+ }
|
|
|
+ //合同段ID
|
|
|
+ if (StringUtils.isNotEmpty(queryVO.getContractId())) {
|
|
|
+ ContractInfo contractInfo = contractClient.getContractById(Long.valueOf(queryVO.getContractId()));
|
|
|
+ if (contractInfo.getContractType() == 2) {
|
|
|
+ wrapper.eq(Task::getProjectId, queryVO.getProjectId());
|
|
|
+ } else {
|
|
|
+ wrapper.eq(Task::getContractId, queryVO.getContractId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //开始结束时间
|
|
|
+ if (StringUtils.isNotEmpty(queryVO.getStartTime()) && StringUtils.isNotEmpty(queryVO.getEndTime())) {
|
|
|
+ wrapper.between(Task::getStartTime, queryVO.getStartTime(), queryVO.getEndTime());
|
|
|
+ }
|
|
|
+ //关键字查询
|
|
|
+ if (StringUtils.isNotEmpty(queryVO.getQueryValue())) {
|
|
|
+ wrapper.like(Task::getTaskName, queryVO.getQueryValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统合处理方法
|
|
|
+ */
|
|
|
+ private R<IPage<TaskVO>> integrationMethod(TaskQueryVO queryVO, R<Object> rObject, Map<String, Task> masterTaskMap, Map<String, TaskParallel> parallelMap, boolean isToDo) {
|
|
|
+ Query query = new Query();
|
|
|
+ query.setCurrent(queryVO.getCurrent());
|
|
|
+ query.setSize(queryVO.getSize());
|
|
|
+ //最终集合
|
|
|
+ List<TaskVO> finalResult = new ArrayList<>();
|
|
|
+ if (rObject.isSuccess()) {
|
|
|
+ //新建一个IPage的实例
|
|
|
+ IPage<BladeFlow> newData = Condition.getPage(query);
|
|
|
+ //使用实例获取具体的类型进行转换
|
|
|
+ IPage flowIPage = JSONObject.parseObject(JSONObject.toJSONString(rObject.getData()), newData.getClass());
|
|
|
+ //本质上这里获取到的集合属于List<JSONObject>,所以需要在这进行一次类型转换,将JSONObject转为BladeFlow
|
|
|
+ List<BladeFlow> result = JSONArray.parseArray(JSONObject.toJSONString(flowIPage.getRecords()), BladeFlow.class);
|
|
|
+
|
|
|
+ if (result != null && result.size() > 0) {
|
|
|
+ //获取相关信息
|
|
|
+ result.forEach(flow -> {
|
|
|
+ TaskParallel taskParallel = parallelMap.get(flow.getProcessInstanceId());
|
|
|
+ if (taskParallel != null) {
|
|
|
+ //查询主表数据
|
|
|
+ Task task = masterTaskMap.get(taskParallel.getProcessInstanceId());
|
|
|
+
|
|
|
+ if (task != null) {
|
|
|
+ //复制数据
|
|
|
+ TaskVO vo = new TaskVO();
|
|
|
+ BeanUtils.copyProperties(task, vo);
|
|
|
+ //设置关键信息
|
|
|
+ vo.setTypeValue(new Integer("1").equals(vo.getType()) ? "普通任务" : new Integer("2").equals(vo.getType()) ? "验收任务" : "移交任务");
|
|
|
+ vo.setParallelProcessInstanceId(flow.getProcessInstanceId());
|
|
|
+ vo.setTaskId(flow.getTaskId());
|
|
|
+ vo.setTaskStatus(new Integer("1").equals(task.getStatus()) ? "待审批" : new Integer("2").equals(task.getStatus()) ? "已审批" : "已废除", task.getStatus());
|
|
|
+ vo.setEVisaContent(taskParallel.getEVisaContent());
|
|
|
+ //获取主流程下所有相关的审批人
|
|
|
+ List<TaskParallel> linkList = this.taskParallelService.list(Wrappers.<TaskParallel>lambdaQuery().eq(TaskParallel::getProcessInstanceId, task.getProcessInstanceId()).eq(TaskParallel::getIsDeleted, 0));
|
|
|
+ if (linkList != null && linkList.size() > 0) {
|
|
|
+ this.integrationMethod(vo, linkList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置最终集合
|
|
|
+ finalResult.add(vo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
// //待办的原生方法并没有对数据做分页,所以需要在这里进行手动分页,而已办的原生方法已经做了分页处理
|
|
|
// if(!isToDo){
|
|
@@ -533,76 +554,70 @@ public class TaskController extends BladeController {
|
|
|
// //最终分页数据
|
|
|
// return this.getIPageR(query, flowIPage, finalFlowList);
|
|
|
// } else {
|
|
|
- //最终分页数据
|
|
|
- return this.getIPageR(query, flowIPage, finalResult);
|
|
|
+ //最终分页数据
|
|
|
+ return this.getIPageR(query, flowIPage, finalResult);
|
|
|
// }
|
|
|
- }
|
|
|
- }
|
|
|
- return R.data(null);
|
|
|
- }
|
|
|
-
|
|
|
- @NotNull
|
|
|
- private R<IPage<TaskVO>> getIPageR(Query query, IPage flowIPage, List<TaskVO> finalFlowList) {
|
|
|
- IPage<TaskVO> finalPage = Condition.getPage(query);
|
|
|
- finalPage.setTotal(flowIPage.getTotal());
|
|
|
- finalPage.setSize(query.getSize());
|
|
|
- finalPage.setCurrent(query.getCurrent());
|
|
|
- finalPage.setRecords(finalFlowList);
|
|
|
-
|
|
|
- return R.data(finalPage);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 完成/审批任务
|
|
|
- */
|
|
|
- @PostMapping("/complete-approval-task")
|
|
|
- @ApiOperationSupport(order = 2)
|
|
|
- @ApiOperation(value = "完成/审批任务")
|
|
|
- public R<Boolean> completeApprovalTask(@RequestBody TaskApprovalVO taskApprovalVO) throws FileNotFoundException {
|
|
|
- //检查当前用户是否存在等待批次
|
|
|
- //System.out.println(AuthUtil.getUserId());
|
|
|
- long batchCount = this.taskBatchService.count(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()));
|
|
|
-
|
|
|
- if(batchCount > 0){
|
|
|
- this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
|
|
|
- .set(TaskParallel::getEVisaContent, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........")
|
|
|
- .eq(TaskParallel::getParallelProcessInstanceId, taskApprovalVO.getParallelProcessInstanceId()));
|
|
|
-
|
|
|
- //生成等待批次,任务完成后删除
|
|
|
- List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
|
|
|
- taskApprovalVOS.add(taskApprovalVO);
|
|
|
-
|
|
|
- //存在批次,当前审批的追加进队列
|
|
|
- TaskBatch taskBatch = new TaskBatch(taskApprovalVO.getParallelProcessInstanceId(), JSONObject.toJSONString(taskApprovalVOS));
|
|
|
- taskBatch.setCreateUser(AuthUtil.getUserId());
|
|
|
- taskBatch.setCreateTime(new Date());
|
|
|
- this.taskBatchService.save(taskBatch);
|
|
|
-
|
|
|
- //修改试验填报状态 TODO 暂时不清楚该接口是否需要
|
|
|
- this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(taskApprovalVOS);
|
|
|
-
|
|
|
- return R.data(true, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........");
|
|
|
- } else {
|
|
|
- //生成等待批次,任务完成后删除
|
|
|
- List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
|
|
|
- taskApprovalVOS.add(taskApprovalVO);
|
|
|
- this.taskService.batchCompleteApprovalTask(taskApprovalVOS,AuthUtil.getUserId());
|
|
|
-
|
|
|
- //修改试验填报状态 TODO 暂时不清楚该接口是否需要
|
|
|
- this.iTrialSelfInspectionRecordService.updateTrialSelfInspectionRecordStatus(taskApprovalVOS);
|
|
|
-
|
|
|
- return R.data(true, "提交成功");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 上报
|
|
|
- */
|
|
|
- @PostMapping("/start-approval")
|
|
|
- @ApiOperationSupport(order = 1)
|
|
|
- @ApiOperation(value = "上报", notes = "taskVO对象")
|
|
|
- public R<Boolean> startApproval(@RequestBody TaskVO taskVO){
|
|
|
- return this.taskService.startApproval(taskVO) ? R.data(200, true, "操作成功") : R.data(200, false, "操作失败,请联系管理员");
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ @NotNull
|
|
|
+ private R<IPage<TaskVO>> getIPageR(Query query, IPage flowIPage, List<TaskVO> finalFlowList) {
|
|
|
+ IPage<TaskVO> finalPage = Condition.getPage(query);
|
|
|
+ finalPage.setTotal(flowIPage.getTotal());
|
|
|
+ finalPage.setSize(query.getSize());
|
|
|
+ finalPage.setCurrent(query.getCurrent());
|
|
|
+ finalPage.setRecords(finalFlowList);
|
|
|
+
|
|
|
+ return R.data(finalPage);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 完成/审批任务
|
|
|
+ */
|
|
|
+ @PostMapping("/complete-approval-task")
|
|
|
+ @ApiOperationSupport(order = 2)
|
|
|
+ @ApiOperation(value = "完成/审批任务")
|
|
|
+ public R<Boolean> completeApprovalTask(@RequestBody TaskApprovalVO taskApprovalVO) throws FileNotFoundException {
|
|
|
+ //检查当前用户是否存在等待批次
|
|
|
+ //System.out.println(AuthUtil.getUserId());
|
|
|
+ long batchCount = this.taskBatchService.count(Wrappers.<TaskBatch>lambdaQuery().eq(TaskBatch::getCreateUser, AuthUtil.getUserId()));
|
|
|
+
|
|
|
+ if (batchCount > 0) {
|
|
|
+ this.taskParallelService.update(Wrappers.<TaskParallel>lambdaUpdate()
|
|
|
+ .set(TaskParallel::getEVisaContent, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........")
|
|
|
+ .eq(TaskParallel::getParallelProcessInstanceId, taskApprovalVO.getParallelProcessInstanceId()));
|
|
|
+
|
|
|
+ //生成等待批次,任务完成后删除
|
|
|
+ List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
|
|
|
+ taskApprovalVOS.add(taskApprovalVO);
|
|
|
+
|
|
|
+ //存在批次,当前审批的追加进队列
|
|
|
+ TaskBatch taskBatch = new TaskBatch(taskApprovalVO.getParallelProcessInstanceId(), JSONObject.toJSONString(taskApprovalVOS));
|
|
|
+ taskBatch.setCreateUser(AuthUtil.getUserId());
|
|
|
+ taskBatch.setCreateTime(new Date());
|
|
|
+ this.taskBatchService.save(taskBatch);
|
|
|
+
|
|
|
+ return R.data(true, "当前等待电签的批次较多,请等待几分钟后刷新页面查看........");
|
|
|
+ } else {
|
|
|
+ //生成等待批次,任务完成后删除
|
|
|
+ List<TaskApprovalVO> taskApprovalVOS = new ArrayList<>();
|
|
|
+ taskApprovalVOS.add(taskApprovalVO);
|
|
|
+ this.taskService.batchCompleteApprovalTask(taskApprovalVOS, AuthUtil.getUserId());
|
|
|
+
|
|
|
+ return R.data(true, "提交成功");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 上报
|
|
|
+ */
|
|
|
+ @PostMapping("/start-approval")
|
|
|
+ @ApiOperationSupport(order = 1)
|
|
|
+ @ApiOperation(value = "上报", notes = "taskVO对象")
|
|
|
+ public R<Boolean> startApproval(@RequestBody TaskVO taskVO) {
|
|
|
+ return this.taskService.startApproval(taskVO) ? R.data(200, true, "操作成功") : R.data(200, false, "操作失败,请联系管理员");
|
|
|
+ }
|
|
|
|
|
|
}
|