guoshilong
2024-02-22 c999c167c21e9e07fb9101f422ce356ac30d325e
新巡查流程
7 files modified
252 ■■■■ changed files
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java 208 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java
@@ -64,6 +64,16 @@
    String TOTECH_KEY = "toTech";
    /**
     * 转送给主管部门负责人标识
     */
    String TOSUPERVISOR_KEY = "toSupervisor";
    /**
     * 转送给主管部门负责人标识
     */
    String TOADMIN_KEY = "toAdmin";
    /**
     * 同意代号
     */
    String PASS_ALIAS = "ok";
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java
@@ -52,6 +52,8 @@
    String DONE_LIST = "/done-list";
    String GET_BLADEFLOW = "/getBladeFlow";
    String HISTORY_FLOW_LIST = "/history-flow-list";
    /**
     * 开启流程
     *
@@ -124,4 +126,9 @@
    @PostMapping(DONE_LIST)
    R<BladeFlowPage> getDoneBladeFlowList(@RequestParam("size") Integer size, @RequestParam("current") Integer current, @RequestParam("currentUserId") String currentUserId, @RequestBody BladeFlowVO bladeFlow);
    @GetMapping(HISTORY_FLOW_LIST)
    R<List<BladeFlow>> historyFlowList(@RequestParam("processInstanceId") String processInstanceId,@RequestParam("startActivityId") String startActivityId,@RequestParam("endActivityId") String endActivityId);
}
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java
@@ -74,4 +74,10 @@
        return R.fail("远程调用失败");
    }
    @Override
    public R<List<BladeFlow>> historyFlowList(String processInstanceId, String startActivityId, String endActivityId) {
        return R.fail("远程调用失败");
    }
}
skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java
@@ -21,6 +21,7 @@
import cn.gistack.flow.core.feign.IFlowClient;
import cn.gistack.flow.core.utils.TaskUtil;
import cn.gistack.flow.core.vo.BladeFlowVO;
import cn.gistack.flow.engine.service.FlowEngineService;
import cn.gistack.sm.patrol.vo.BladeFlowPage;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
@@ -54,6 +55,7 @@
    private final IdentityService identityService;
    private final TaskService taskService;
    private final FlowBusinessService flowBusinessService;
    private final FlowEngineService flowEngineService;
    @Override
    @PostMapping(START_PROCESS_INSTANCE_BY_ID)
@@ -148,5 +150,12 @@
        return R.data(bladeFlowPage);
    }
    @Override
    @GetMapping(HISTORY_FLOW_LIST)
    public R<List<BladeFlow>> historyFlowList(String processInstanceId, String startActivityId, String endActivityId) {
        List<BladeFlow> bladeFlows = flowEngineService.historyFlowList(processInstanceId, startActivityId, endActivityId);
        return R.data(bladeFlows);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml
@@ -82,6 +82,9 @@
        <if test="patrolRecord.status !=null and patrolRecord.status != '' ">
            AND record.status = #{patrolRecord.status}
        </if>
        <if test="patrolRecord.solution !=null and patrolRecord.solution != '' ">
            AND record.solution = #{patrolRecord.solution}
        </if>
        <if test="patrolRecord.patrolType !=null and patrolRecord.patrolType !=''">
            AND record.patrolType = #{patrolRecord.patrolType}
        </if>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
@@ -44,8 +44,15 @@
    private final INkyClient nkyClient;
    private final IYwTermitesTaskService waterDataTermitesService;
    private final String PATROL_USER = "patrolUser";
    private final String TECH_USER = "techUser";
    private final String SUPERVISOR_USER = "supervisorUser";
    private final String ADMIN_USER = "adminUser";
    private final String DEPT_USER = "deptUser";
    /**
     * 自定义分页查询
     *
     * @param page
     * @param patrolTask
     * @return
@@ -54,7 +61,7 @@
    public IPage<PatrolTaskVO> selectPatrolTask(IPage<PatrolTaskVO> page, PatrolTaskVO patrolTask) {
//        List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTask(page, patrolTask);
        List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTaskPage(page.getCurrent()-1,page.getSize(),patrolTask);
        List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTaskPage(page.getCurrent() - 1, page.getSize(), patrolTask);
        long total = baseMapper.getPatrolTaskTotal(patrolTask);
        page.setRecords(patrolTaskList);
        page.setTotal(total);
@@ -64,6 +71,7 @@
    /**
     * 查询巡查人员统计数据信息
     *
     * @param patrolTask
     * @return
     */
@@ -74,6 +82,7 @@
    /**
     * 自定义编辑(空间坐标编辑)
     *
     * @param patrolTask
     * @return
     */
@@ -84,11 +93,12 @@
        enhancementServicesTool.resolveEntity(patrolTask);
        Integer update = baseMapper.updatePatrolTask(patrolTask);
        //返回
        return update>0?true:false;
        return update > 0 ? true : false;
    }
    /**
     * 自定义添加
     *
     * @param patrolTask
     * @return
     */
@@ -101,11 +111,12 @@
        // 新增
        Integer save = baseMapper.savePatrolTask(patrolTask);
        //返回
        return save>0?true:false;
        return save > 0 ? true : false;
    }
    /**
     * 自定义通过id查询
     *
     * @param id
     * @return
     */
@@ -120,11 +131,23 @@
        String businessTable = FlowUtil.getBusinessTable(ProcessConstant.PATROL_KEY);
        if (Func.isEmpty(patrolTask.getId())) {
            save(patrolTask);
            // 启动流程
//            Kv variables = Kv.create()
//                //设置创建人
//                .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserId())
//                //指定任务处理人
//                .set("taskUser", TaskUtil.getTaskUser(patrolTask.getToUserId()));
//            R<BladeFlow> result = flowClient.startProcessInstanceById(patrolTask.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(patrolTask.getId())), variables);
            Kv variables = Kv.create()
                //设置创建人
                .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserId())
                .set("taskUser", TaskUtil.getTaskUser(patrolTask.getToUserId()));
                //指定巡查责任人
                .set(PATROL_USER, TaskUtil.getTaskUser(patrolTask.getToUserId()));
            R<BladeFlow> result = flowClient.startProcessInstanceById(patrolTask.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(patrolTask.getId())), variables);
            if (result.isSuccess()) {
                log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
                // 返回流程id写入leave
@@ -141,78 +164,147 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean patrolCompleteTask(PatrolTaskVO patrolTask,String currentUserId,String taskUser) {
        R<BladeFlow> res = flowClient.getBladeFlow(patrolTask.getId().toString(),currentUserId);
        if (res.isSuccess()){
    public boolean patrolCompleteTask(PatrolTaskVO patrolTask, String currentUserId, String taskUser) {
        R<BladeFlow> res = flowClient.getBladeFlow(patrolTask.getId().toString(), currentUserId);
        if (res.isSuccess()) {
            BladeFlow flow = res.getData();
            String taskId = flow.getTaskId();
            String processInstanceId = patrolTask.getProcessInstanceId();
//            String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
            String comment = "完成";
            String comment = patrolTask.getReport() ? "巡查任务发现问题" : "巡查任务完成,未发现问题";
            // 创建变量
            Map<String, Object> variables = flow.getVariables();
            if (variables == null) {
                variables = Kv.create();
            }
            variables.put(ProcessConstant.REPORT_KEY,patrolTask.getReport());
            variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser));
            //设置是否上报标识
            variables.put(ProcessConstant.REPORT_KEY, patrolTask.getReport());
//            variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser));
            variables.put(TECH_USER, TaskUtil.getTaskUser(taskUser));
            // 完成任务
            flowClient.completeTask(taskId,processInstanceId,comment,variables);
            flowClient.completeTask(taskId, processInstanceId, comment, variables);
            //保存巡查记录
            patrolRecordService.saveBatch(patrolTask.getPatrolRecordList());
            //保存上报
            //停用
//            saveReport(patrolTask);
            //查监测预警表,看是否有这个任务,有的话修改任务状态
            Boolean finishDamTask = nkyClient.finishTask(patrolTask.getId().toString());
            if (!finishDamTask){
                //查白蚁表,看是否有这个任务,有的话修改任务状态
                Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTask.getId().toString());
            }
//            //查监测预警表,看是否有这个任务,有的话修改任务状态
//            Boolean finishDamTask = nkyClient.finishTask(patrolTask.getId().toString());
//            if (!finishDamTask){
//                //查白蚁表,看是否有这个任务,有的话修改任务状态
//                Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTask.getId().toString());
//            }
            return baseMapper.updateById(patrolTask) >0;
        }else {
            return  false;
            return baseMapper.updateById(patrolTask) > 0;
        } else {
            return false;
        }
    }
    @Override
    public boolean chargeCompletePerson(BladeFlowTask bladeFlowTask) {
        //判断是否上报
//        boolean isReport = false;
//        List<PatrolReport> collect = bladeFlowTask.getPatrolReportList().stream().filter(report -> Func.equals(report.getStatus(), 2)).collect(Collectors.toList());
//        if (collect.size()>0){
//        if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())){
//            isReport = true;
//        }
//        //更新report表
//        boolean update = patrolReportService.updateBatchById(bladeFlowTask.getPatrolReportList());
//
//        String taskId = bladeFlowTask.getTaskId();
//        String processInstanceId = bladeFlowTask.getProcessInstanceId();
//        String comment = "完成";
//        // 创建变量
//        Map<String, Object> variables = new HashMap<>();
//        if (variables == null) {
//            variables = Kv.create();
//        }
//        //指定下一个人
//        variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, bladeFlowTask.getTaskUser()));
//        //指定是否上报
//        variables.put(ProcessConstant.REPORT_KEY,isReport);
//        //指定是否上报给部门
//        variables.put(ProcessConstant.TODEPT_KEY,bladeFlowTask.getToDept());
//        //指定是否转交
//        variables.put(ProcessConstant.TOTECH_KEY,bladeFlowTask.getToTech());
//        //完成任务
//        flowClient.completeTask(taskId, processInstanceId, comment, variables);
//        return true;
        boolean isReport = false;
        if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())){
            isReport = true;
        }
        String taskId = bladeFlowTask.getTaskId();
        String processInstanceId = bladeFlowTask.getProcessInstanceId();
        String comment = "完成";
        String comment = bladeFlowTask.getComment();
        // 创建变量
        Map<String, Object> variables = new HashMap<>();
        if (variables == null) {
            variables = Kv.create();
        }
        //指定下一个人
        variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, bladeFlowTask.getTaskUser()));
        //指定是否上报
        variables.put(ProcessConstant.REPORT_KEY,isReport);
        //指定是否上报给部门
        variables.put(ProcessConstant.TODEPT_KEY,bladeFlowTask.getToDept());
        //指定是否转交
        variables.put(ProcessConstant.TOTECH_KEY,bladeFlowTask.getToTech());
        //完成任务
        //默认不上报
        boolean isReport = false;
        if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())) {
            //指定了下一个人,修改状态为上报
            isReport = true;
        }
        //techPerson   supervisorPerson  adminPerson department
        //获取当前节点
        BladeFlow currentNode = getFlowNode(processInstanceId, 1);
        switch (currentNode.getHistoryActivityId()) {
            case "techPerson":
                variables.put(bladeFlowTask.getToDept()?DEPT_USER:SUPERVISOR_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
                break;
            case "supervisorPerson":
                variables.put(bladeFlowTask.getToDept()?DEPT_USER:ADMIN_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
                break;
            case "adminPerson":
                variables.put(DEPT_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser()));
                break;
            case "department":
                //当前节点为水行政部门,需要指定回复给谁
                //获取前一个节点
                BladeFlow beforeNode = getFlowNode(processInstanceId, 2);
                String beforeId = beforeNode.getHistoryActivityId();
                if (beforeId.equals("techPerson")) {
                    //前一个节点是技术责任人
                    variables.put(ProcessConstant.TOTECH_KEY, true);
                }else if (beforeId.equals("supervisorPerson")){
                    variables.put(ProcessConstant.TOSUPERVISOR_KEY, true);
                }else if (beforeId.equals("adminPerson")){
                    variables.put(ProcessConstant.TOADMIN_KEY, true);
                }
                break;
            default:
                break;
        }
        variables.put(ProcessConstant.REPORT_KEY, isReport);
        variables.put(ProcessConstant.TODEPT_KEY, bladeFlowTask.getToDept());
        flowClient.completeTask(taskId, processInstanceId, comment, variables);
        return true;
    }
    /**
     * 获取节点信息,倒数第一个是自己,第二个是上一节点
     *
     * @param processInstanceId
     * @param i                 倒数第几
     * @return
     */
    private BladeFlow getFlowNode(String processInstanceId, int i) {
        R<List<BladeFlow>> res = flowClient.historyFlowList(processInstanceId, "start", "finish");
        if (res.isSuccess()) {
            //历史流程
            List<BladeFlow> data = res.getData();
            //size减1为当前节点,-2为上一节点
            BladeFlow bladeFlow = data.get(data.size() - i);
            return bladeFlow;
        } else {
            return null;
        }
    }
    @Override
@@ -226,15 +318,15 @@
    }
    @Override
    public IPage<PatrolTaskReport> getTaskReportPage(IPage<PatrolTaskReport> page,PatrolTaskReport patrolTaskReport) {
        List<PatrolTaskReport> list  = new ArrayList<>();
    public IPage<PatrolTaskReport> getTaskReportPage(IPage<PatrolTaskReport> page, PatrolTaskReport patrolTaskReport) {
        List<PatrolTaskReport> list = new ArrayList<>();
        //获取行政区划统计报表
        if (patrolTaskReport.getRegionFlag().equals("1")){
            list = baseMapper.getRegionReportPage(page,patrolTaskReport);
        }else {
        if (patrolTaskReport.getRegionFlag().equals("1")) {
            list = baseMapper.getRegionReportPage(page, patrolTaskReport);
        } else {
            //获取水库巡查报表
            list = baseMapper.getReservoirReportPage(page,patrolTaskReport);
            list = baseMapper.getReservoirReportPage(page, patrolTaskReport);
        }
        return page.setRecords(list);
    }
@@ -244,9 +336,9 @@
        List<PatrolTaskReport> list = new ArrayList();
        //获取行政区划统计报表
        if (patrolTaskReport.getRegionFlag().equals("1")){
        if (patrolTaskReport.getRegionFlag().equals("1")) {
            list = baseMapper.getRegionReportList(patrolTaskReport);
        }else {
        } else {
            //获取水库巡查报表
            list = baseMapper.getReservoirReportList(patrolTaskReport);
        }
@@ -274,10 +366,10 @@
        TaskStatus taskStatus = baseMapper.getTaskStatus(patrolTaskVO);
        TaskStatusCount unfinished = new TaskStatusCount("未完成","1",taskStatus.getUnfinished());
        TaskStatusCount processing = new TaskStatusCount("进行中","2",taskStatus.getProcessing());
        TaskStatusCount finished = new TaskStatusCount("已完成","3",taskStatus.getFinished());
        TaskStatusCount all = new TaskStatusCount("全部","",taskStatus.getTotal());
        TaskStatusCount unfinished = new TaskStatusCount("未完成", "1", taskStatus.getUnfinished());
        TaskStatusCount processing = new TaskStatusCount("进行中", "2", taskStatus.getProcessing());
        TaskStatusCount finished = new TaskStatusCount("已完成", "3", taskStatus.getFinished());
        TaskStatusCount all = new TaskStatusCount("全部", "", taskStatus.getTotal());
        list.add(unfinished);
        list.add(processing);
@@ -304,14 +396,14 @@
        List<PatrolTaskReport> list = new ArrayList();
        list = baseMapper.getTaskReportDetailRegion(page,patrolTaskReport);
        list = baseMapper.getTaskReportDetailRegion(page, patrolTaskReport);
        return page.setRecords(list);
    }
    @Transactional(rollbackFor = Exception.class)
    public void saveReport(PatrolTask patrolTask){
    public void saveReport(PatrolTask patrolTask) {
        //拿到当前任务下的异常巡查记录
        PatrolRecord patrolRecord = new PatrolRecord();
        patrolRecord.setTaskId(patrolTask.getId().toString());
@@ -320,7 +412,7 @@
        List<PatrolRecord> list = patrolRecordService.list(Condition.getQueryWrapper(patrolRecord));
        //向上报表中添加数据
        list.forEach(record->{
        list.forEach(record -> {
            PatrolReport patrolReport = new PatrolReport();
            patrolReport.setContent(record.getContent());
            patrolReport.setImages(record.getImages());
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java
@@ -8,16 +8,17 @@
@Data
public class BladeFlowTask {
    private List<PatrolReport> patrolReportList;
    //流程任务id
    private String taskId;
    //实例id
    private String processInstanceId;
    //指定人
    private String taskUser;
    //上报给水行政部门
    private Boolean toDept;
    private Boolean toTech;
    private String comment;
}