package com.huaxu.task.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.huaxu.client.UserCenterClient; import com.huaxu.model.AjaxMessage; import com.huaxu.model.LoginUser; import com.huaxu.model.Pagination; import com.huaxu.model.ResultStatus; import com.huaxu.order.entity.WorkFlowDetail; import com.huaxu.order.entity.WorkFlowLog; import com.huaxu.order.service.WorkFlowLogService; import com.huaxu.process.entity.ProcessDefinition; import com.huaxu.process.service.WorkFlowService; import com.huaxu.task.dto.PlanManageDto; import com.huaxu.task.entity.PlanManage; import com.huaxu.task.entity.TaskManage; import com.huaxu.task.entity.UserEntity; import com.huaxu.task.service.PlanManageService; import com.huaxu.util.DatesUtil; import com.huaxu.util.UserUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.activiti.engine.task.Task; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.util.*; import java.util.stream.Collectors; @RestController @RequestMapping("/workflow/task/") @Api(tags = "任务管理") public class PlanManageController { @Autowired PlanManageService planManageService; @Autowired WorkFlowService workFlowService; @Autowired WorkFlowLogService workFlowLogService; @Autowired private UserCenterClient userCenterClient; /** * 新增巡检计划 * @param planName 任务名称 * @param taskType 任务类型 * @param planStartDate 计划开始时间 * @param planEndDate 计划结束时间 * @param userId 计划巡检人ID * @param taskContent 任务内容 * @param taskAreaShape 任务区域坐标 * @param taskAreaName 任务区域名称 * @return */ @GetMapping("/plan/add") @ApiOperation(value = "新增巡检计划") public AjaxMessage addPlan(@ApiParam(value = "任务名称", required = true) @RequestParam(required = true) String planName, @ApiParam(value = "任务类型", required = true) @RequestParam(required = true) Integer taskType, @ApiParam(value = "计划开始时间", required = true) @RequestParam(required = true) String planStartDate, @ApiParam(value = "计划结束时间", required = true) @RequestParam(required = true) String planEndDate, @ApiParam(value = "计划巡检人ID", required = true) @RequestParam(required = true) String userId, @ApiParam(value = "任务内容", required = true) @RequestParam(required = true) String taskContent, @ApiParam(value = "任务区域坐标", required = true) @RequestParam(required = true) String taskAreaShape, @ApiParam(value = "任务区域名称", required = true) @RequestParam(required = true) String taskAreaName, @ApiParam(value = "任务签到点", required = false) @RequestParam(required = false) String taskChecked) { LoginUser loginUser = UserUtil.getCurrentUser(); String planId=DatesUtil.formatDate(new Date(),"yyyyMMddHHmmss")+String.valueOf((int) (Math.random()*(9999-1000)+1000)); PlanManage record = new PlanManage(); record.setUserId(userId); record.setPlanId(planId); record.setPlanName(planName); record.setTaskType(taskType); record.setTaskChecked(taskChecked); //record.setPlanDate(new Date()); record.setPlanStartDate(DatesUtil.parseDate(planStartDate,"yyyy-MM-dd")); record.setPlanEndDate(DatesUtil.parseDate(planEndDate,"yyyy-MM-dd")); record.setPlanStatus(0); record.setTaskContent(taskContent); record.setTaskAreaShape(taskAreaShape); record.setTaskAreaName(taskAreaName); record.setDateCreate(new Date()); if(loginUser.getId() != null) { record.setPlanUserId(String.valueOf(loginUser.getId())); record.setCreateBy(String.valueOf(loginUser.getId())); } if(loginUser.getTenantId() != null) { record.setTenantId(loginUser.getTenantId()); } int rows = planManageService.insertSelective(record); if(rows > 0) { return new AjaxMessage(ResultStatus.OK); } return new AjaxMessage(ResultStatus.ERROR); } @GetMapping("/plan/select") @ApiOperation(value = "查询巡检计划") public AjaxMessage> selectPlan( @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum, @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize, @ApiParam(value = "任务类型(巡检:7,侧漏:8,养护:9)", required = false) @RequestParam(required = false) Integer taskType, @ApiParam(value = "状态(0:巡检计划;null:所有任务;1:执行中;2:完成)", required = false) @RequestParam(required = false) Integer planStatus, @ApiParam(value = "计划单号或计划名称", required = false) @RequestParam(required = false) String key, @ApiParam(value = "计划起始日期(yyyy-MM-dd)", required = false) @RequestParam(required = false) String startDate, @ApiParam(value = "计划截至日期(yyyy-MM-dd)", required = false) @RequestParam(required = false) String endDate){ PlanManageDto planManageDto = new PlanManageDto(); //根据用户编号,获取用户的权限 LoginUser loginUser = UserUtil.getCurrentUser(); planManageDto.setKey(key); if(!StringUtils.isEmpty(startDate)&& !StringUtils.isEmpty(endDate)) { planManageDto.setStartDate(startDate); planManageDto.setEndDate(endDate); } planManageDto.setPlanStatus(planStatus); planManageDto.setTaskType(taskType); planManageDto.setTenantId(loginUser.getTenantId()); planManageDto.setProgramItems(loginUser.getProgramItemList()); planManageDto.setUserType(loginUser.getType()); //1是公司,2是公司及以下,3部门,4部门及以下,5自定义 planManageDto.setPermissonType(loginUser.getPermissonType()); IPage iPage = new Page<>(pageNum, pageSize); iPage = planManageService.selectPage(iPage, planManageDto); Pagination pages = new Pagination<>(iPage); setName(pages.getList()); return new AjaxMessage<>(ResultStatus.OK, pages); } @GetMapping("/plan/pending") @ApiOperation(value = "查询待处理任务") public AjaxMessage> selectPendingTask( @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum, @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize, @ApiParam(value = "任务类型(巡检:7,侧漏:8,养护:9)", required = false) @RequestParam(required = false) Integer taskType, @ApiParam(value = "计划单号或计划名称", required = false) @RequestParam(required = false) String key, @ApiParam(value = "计划起始日期(yyyy-MM-dd)", required = false) @RequestParam(required = false) String startDate, @ApiParam(value = "计划截至日期(yyyy-MM-dd)", required = false) @RequestParam(required = false) String endDate){ PlanManageDto planManageDto = new PlanManageDto(); //根据用户编号,获取用户的权限 LoginUser loginUser = UserUtil.getCurrentUser(); planManageDto.setKey(key); if(!StringUtils.isEmpty(startDate)&& !StringUtils.isEmpty(endDate)) { planManageDto.setStartDate(startDate); planManageDto.setEndDate(endDate); } planManageDto.setTaskType(taskType); if(loginUser.getId() != null) { planManageDto.setCurrentUsers(String.format("%s,", loginUser.getId())); } IPage iPage = new Page<>(pageNum, pageSize); iPage = planManageService.selectPage(iPage, planManageDto); Pagination pages = new Pagination<>(iPage); setName(pages.getList()); return new AjaxMessage<>(ResultStatus.OK, pages); } @GetMapping("/plan/pending/power") @ApiOperation(value = "待处理权限") public AjaxMessage selectPendingPower( @ApiParam(value = "任务ID", required = true) @RequestParam(required = true) Integer id){ String currentUsers = null; LoginUser loginUser = UserUtil.getCurrentUser(); if(loginUser.getId() != null) { currentUsers = String.format("%s,", loginUser.getId()); } Map map = new HashMap(); map.put("id",id); map.put("currentUsers",currentUsers); int rows = planManageService.selectPendingPower(map); if(rows>0){ return new AjaxMessage(ResultStatus.OK, true); } return new AjaxMessage(ResultStatus.OK, false); } /** * APP查询任务详情 * @return Response对象 */ @RequestMapping(value = "selectPlanDetail", method = RequestMethod.GET) @ApiOperation(value = "APP查询任务详情") public AjaxMessage selectPlanDetail( @ApiParam(value = "任务id", required = true) @RequestParam Integer flowId) { PlanManageDto result=planManageService.selectPlanDetail(flowId); setName(new ArrayList(){{ this.add(result); }}); return new AjaxMessage<>(ResultStatus.OK, result ); } @GetMapping("/plan/submit") @ApiOperation(value = "提交巡检计划") public AjaxMessage submitPlan( @ApiParam(value = "任务ID", required = true) @RequestParam(required = false) Integer id, @ApiParam(value = "任务类型", required = true) @RequestParam(required = true) String taskType){ LoginUser loginUser = UserUtil.getCurrentUser(); PlanManage planManage = planManageService.selectByPrimaryKey(id); // ProcessDefinition processDefinition = workFlowService.findProcessDefinition( // loginUser.getTenantId(), // loginUser.getCompanyId(), // planManage.getTaskType()); //流程查询, 测试参数:(test1 1 1) ProcessDefinition processDefinition = workFlowService.findProcessDefinition( "test1", 1, 1); if(processDefinition == null){ new AjaxMessage(ResultStatus.ERROR,"没有创建流程,不能提交!"); } Map vars = new HashMap<>(); vars.put("assineeFormUserId",planManage.getUserId()); //巡检发送系统消息所需参数 vars.put("任务类型",taskType); vars.put("任务编号",planManage.getId()); vars.put("templateId",4); vars.put("msgType",4); String startProcess = workFlowService.startProcess(processDefinition,vars); Task task = workFlowService.getProcessRuntimeTask(startProcess).get(0); Set taskParticipator = workFlowService.getTaskParticipator(task.getId(),false,null); String currentUsers = ""; for (String str : taskParticipator) { currentUsers += String.format("%s,",str); } currentUsers+="235,"; //更新计划表的流程相关字段值。 planManage.setPlanStatus(1);//已执行 if(loginUser.getId() != null) { planManage.setUpdateBy(String.valueOf(loginUser.getId())); } planManage.setPlanDate(new Date());// 提交时间 planManage.setDateUpdate(new Date());// 更新时间 planManage.setProcessInstanceId(task.getProcessInstanceId()); planManage.setProcessDefId(task.getProcessDefinitionId()); planManage.setCurrentTaskId(task.getId()); planManage.setCurrentUsers(currentUsers); planManage.setCurrentTaskName(task.getName()); int rows = planManageService.updateByPrimaryKeySelective(planManage); if(rows > 0) { return new AjaxMessage<>(ResultStatus.OK); } return new AjaxMessage<>(ResultStatus.ERROR); } @PostMapping("/plan/update") @ApiOperation(value = "修改巡检计划") public AjaxMessage updatePlan(@ApiParam(value = "修改巡检计划", required = true) @RequestBody PlanManage planManage) { PlanManage record = new PlanManage(); record.setId(planManage.getId()); record.setUserId(planManage.getUserId()); record.setPlanName(planManage.getPlanName()); record.setTaskType(planManage.getTaskType()); record.setTaskChecked(planManage.getTaskChecked()); record.setPlanStartDate(planManage.getPlanStartDate()); record.setPlanEndDate(planManage.getPlanEndDate()); record.setTaskContent(planManage.getTaskContent()); record.setTaskAreaShape(planManage.getTaskAreaShape()); record.setTaskAreaName(planManage.getTaskAreaName()); LoginUser loginUser = UserUtil.getCurrentUser(); if(loginUser.getId() != null) { record.setUpdateBy(String.valueOf(loginUser.getId())); } record.setDateUpdate(new Date()); int rows = planManageService.updateByPrimaryKeySelective(record); if(rows > 0) { return new AjaxMessage(ResultStatus.OK); } return new AjaxMessage(ResultStatus.ERROR); } @RequestMapping(value="batchDelete" , method = RequestMethod.DELETE) @ApiOperation(value = "批量删除") public AjaxMessage batchDelete( @ApiParam(value = "巡检计划ids") @RequestParam List ids){ return new AjaxMessage<>(ResultStatus.OK, planManageService.batchDelete(ids)); } @GetMapping("/plan/delProcInst") @ApiOperation(value = "终止流程") public AjaxMessage deleteProcessInstance( @ApiParam(value = "任务ID", required = true) @RequestParam(required = true) Integer id, @ApiParam(value = "流程ID", required = true) @RequestParam(required = true) String processInstanceId, @ApiParam(value = "流程备注", required = false) @RequestParam(required = false) String remark) { Boolean delFlow = workFlowService.deleteProcessInstance(processInstanceId,remark); if(delFlow ==true) { PlanManage planManage = new PlanManage(); planManage.setId(id); planManage.setPlanStatus(3);//任务终止状态 planManage.setCurrentUsers(""); planManageService.updateByPrimaryKeySelective(planManage); LoginUser currentUser = UserUtil.getCurrentUser(); WorkFlowLog workFlowLog=new WorkFlowLog(); workFlowLog.setFlowId(id); workFlowLog.setFlowType(1); workFlowLog.setFlowResult(remark); workFlowLog.setCreateBy(currentUser.getId()!=null?currentUser.getId().toString():null); workFlowLog.setDateCreate(new Date()); workFlowLog.setHandleUserId(currentUser.getId()!=null?currentUser.getId().toString():null); workFlowLog.setHandleUserName(currentUser.getUsername()); //记录日志 workFlowLogService.insert(workFlowLog); return new AjaxMessage<>(ResultStatus.OK); } return new AjaxMessage<>(ResultStatus.ERROR); } /** * 获取并设置用户、任务工单类型名称 * @param */ private void setName(List planManageDtoList){ try { if(planManageDtoList.size()>0) { List idList = new ArrayList(); for (PlanManageDto plan : planManageDtoList) { if(plan.getUserId() != null) { idList.add(Long.parseLong(plan.getUserId())); } if(plan.getPlanUserId() != null){ idList.add(Long.parseLong(plan.getPlanUserId())); } if(plan.getCreateBy() != null){ idList.add(Long.parseLong(plan.getCreateBy())); } if(plan.getUpdateBy() != null){ idList.add(Long.parseLong(plan.getUpdateBy())); } } Long[] ids = idList.toArray(new Long[0]); Map userMap = userCenterClient.findUserIdsByUserIds(ids).stream().collect(Collectors.toMap(UserEntity::getId, UserEntity::getUsername)); Map dictMap=userCenterClient.selectListByPCodes("SC_WORK_ORDER_TYPE,SC_TASK_TYPE"); for(int i=0; i