guoshilong
2023-04-24 fc030d197a869d5fecab582d36ff17be7e67cc3f
巡查工作流接入
29 files modified
3 files added
682 ■■■■■ changed files
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java 20 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java 21 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java 28 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/FlowBusinessService.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/impl/FlowBusinessServiceImpl.java 47 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/vo/UserVO.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolGroupController.java 16 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolTaskController.java 75 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/dto/PatrolGroupDTO.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolReport.java 49 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolTask.java 33 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.xml 38 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.xml 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolGroupService.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolTaskService.java 20 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolGroupServiceImpl.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolReportServiceImpl.java 17 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java 141 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java 23 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolReportVO.java 28 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolTaskVO.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/controller/UserController.java 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java 2 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java
@@ -24,6 +24,11 @@
public interface ProcessConstant {
    /**
     * 巡查流程标识
     */
    String PATROL_KEY = "Patrol";
    /**
     * 请假流程标识
     */
    String LEAVE_KEY = "Leave";
@@ -39,6 +44,21 @@
    String PASS_KEY = "pass";
    /**
     * 上报标识
     */
    String REPORT_KEY = "report";
    /**
     * 上报至部门标识
     */
    String TODEPT_KEY = "toDept";
    /**
     * 转送给技术负责人标识
     */
    String TOTECH_KEY = "toTech";
    /**
     * 同意代号
     */
    String PASS_ALIAS = "ok";
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java
@@ -16,6 +16,7 @@
 */
package cn.gistack.flow.core.feign;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.tool.api.R;
import cn.gistack.flow.core.entity.BladeFlow;
@@ -25,6 +26,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
/**
@@ -44,6 +46,8 @@
    String COMPLETE_TASK = API_PREFIX + "/complete-task";
    String TASK_VARIABLE = API_PREFIX + "/task-variable";
    String TASK_VARIABLES = API_PREFIX + "/task-variables";
    String TODO_LIST = "/todo-list";
    String GET_BLADEFLOW = "/getBladeFlow";
    /**
     * 开启流程
@@ -97,4 +101,21 @@
     */
    @GetMapping(TASK_VARIABLES)
    R<Map<String, Object>> taskVariables(@RequestParam("taskId") String taskId);
    /**
     * 获取流程变量集合
     *
     * @param businessId 业务id
     * @return R
     */
    @GetMapping(GET_BLADEFLOW)
    R<BladeFlow> getBladeFlow(@RequestParam("businessId") String businessId,@RequestParam("currentUserId") String currentUserId);
    /**
     * 获取待办业务
     *
     * @return R
     */
    @PostMapping(TODO_LIST)
    R<List<BladeFlow>> getTodoBladeFlowList(@RequestParam("size") Integer size,@RequestParam("current") Integer current,@RequestParam("currentUserId") String currentUserId,@RequestBody BladeFlow bladeFlow);
}
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java
@@ -16,10 +16,12 @@
 */
package cn.gistack.flow.core.feign;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.tool.api.R;
import cn.gistack.flow.core.entity.BladeFlow;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
@@ -55,4 +57,14 @@
        return R.fail("远程调用失败");
    }
    @Override
    public R<BladeFlow> getBladeFlow(String businessId,String currentUserId) {
        return R.fail("远程调用失败");
    }
    @Override
    public R<List<BladeFlow>> getTodoBladeFlowList(Integer size, Integer current, String currentUserId, BladeFlow bladeFlow) {
        return R.fail("远程调用失败");
    }
}
skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java
@@ -37,6 +37,7 @@
    static {
        BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "blade_process_leave");
        BUSINESS_TABLE.put(ProcessConstant.PATROL_KEY,"sm_patrol_task");
    }
    /**
skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java
@@ -16,24 +16,26 @@
 */
package cn.gistack.flow.business.feign;
import cn.gistack.flow.business.service.FlowBusinessService;
import cn.gistack.flow.core.entity.BladeFlow;
import cn.gistack.flow.core.feign.IFlowClient;
import cn.gistack.flow.core.utils.TaskUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.flowable.engine.IdentityService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
@@ -49,6 +51,7 @@
    private final RuntimeService runtimeService;
    private final IdentityService identityService;
    private final TaskService taskService;
    private final FlowBusinessService flowBusinessService;
    @Override
    @PostMapping(START_PROCESS_INSTANCE_BY_ID)
@@ -104,4 +107,21 @@
        return R.data(taskService.getVariables(taskId));
    }
    @Override
    @GetMapping(GET_BLADEFLOW)
    public R<BladeFlow> getBladeFlow(String businessId,String currentUserId) {
        return R.data(flowBusinessService.getBladeFlowByBusinessId(businessId,currentUserId));
    }
    @Override
    @PostMapping(TODO_LIST)
    public R<List<BladeFlow>> getTodoBladeFlowList(Integer size, Integer current, String currentUserId, BladeFlow bladeFlow) {
        Query query = new Query();
        query.setCurrent(current);
        query.setSize(size);
        IPage<BladeFlow> bladeFlowIPage = flowBusinessService.selectTodoPage(Condition.getPage(query), bladeFlow, currentUserId);
        return R.data(bladeFlowIPage.getRecords());
    }
}
skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/FlowBusinessService.java
@@ -45,6 +45,15 @@
    IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
    /**
     * 流程待办列表
     *
     * @param page      分页工具
     * @param bladeFlow 流程类
     * @return
     */
    IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow,String currentUserId);
    /**
     * 流程已发列表
     *
     * @param page      分页工具
@@ -69,4 +78,6 @@
     * @return boolean
     */
    boolean completeTask(BladeFlow leave);
    BladeFlow getBladeFlowByBusinessId(String businessId,String currentUserId);
}
skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -32,6 +32,7 @@
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
@@ -42,6 +43,8 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
/**
 * 流程业务实现类
@@ -90,6 +93,29 @@
    @Override
    public IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
        String taskUser = TaskUtil.getTaskUser();
        List<BladeFlow> flowList = new LinkedList<>();
        // 已签收的任务
        TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(taskUser).active()
            .includeProcessVariables().orderByTaskCreateTime().desc();
        // 构建列表数据
        buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
        // 计算总数
        long count = todoQuery.count();
        // 设置页数
        page.setSize(count);
        // 设置总数
        page.setTotal(count);
        // 设置数据
        page.setRecords(flowList);
        return page;
    }
    @Override
    public IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow,String currentUserId) {
        String taskUser = StringUtil.format("{}{}", TASK_USR_PREFIX, currentUserId);
        List<BladeFlow> flowList = new LinkedList<>();
        // 已签收的任务
@@ -268,6 +294,27 @@
        return true;
    }
    @Override
    public BladeFlow getBladeFlowByBusinessId(String businessId,String target) {
        String taskUser = StringUtil.format("{}{}", TASK_USR_PREFIX, target);
        List<BladeFlow> flowList = new LinkedList<>();
        // 已签收的任务
        TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(taskUser).active()
            .includeProcessVariables().orderByTaskCreateTime().desc();
        BladeFlow bladeFlow = new BladeFlow();
        // 构建列表数据
        buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
        BladeFlow flow = new BladeFlow();
        flowList.forEach(e->{
            if (Func.equals(e.getBusinessId(),businessId)){
                flow.setTaskId(e.getTaskId());
            }
        });
        return flow;
    }
    /**
     * 构建流程
     *
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/vo/UserVO.java
@@ -81,4 +81,9 @@
     * 拓展信息
     */
    private String userExt;
    /**
     * 行政区划编码
     */
    private String adCode;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
@@ -41,6 +41,12 @@
            <artifactId>skjcmanager-sm-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-flow-api</artifactId>
            <version>3.0.1.RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolGroupController.java
@@ -156,4 +156,20 @@
    public R getAllPatrolGroupByTaskId(String taskId) {
        return R.data(patrolGroupService.getAllPatrolGroupByTaskId(taskId));
    }
    /**
     * 根据任务id获取巡查组,返回组下的record
     */
    @GetMapping(value = "/getPatrolGroupDTO")
    public R getPatrolGroupDTO(String taskId) {
        return R.data(patrolGroupService.getPatrolGroupDTO(taskId));
    }
    /**
     * 根据任务id获取巡查组
     */
    @GetMapping(value = "/getPatrolGroupByTaskId")
    public R getPatrolGroupByTaskId(String taskId) {
        return R.data(patrolGroupService.getPatrolGroupByTaskId(taskId));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolTaskController.java
@@ -1,20 +1,33 @@
package cn.gistack.sm.patrol.controller;
import cn.gistack.flow.core.entity.BladeFlow;
import cn.gistack.flow.core.feign.IFlowClient;
import cn.gistack.sm.patrol.entity.PatrolReport;
import cn.gistack.sm.patrol.entity.PatrolTask;
import cn.gistack.sm.patrol.entity.PatrolTask;
import cn.gistack.sm.patrol.service.IPatrolTaskService;
import cn.gistack.sm.patrol.vo.BladeFlowTask;
import cn.gistack.sm.patrol.vo.PatrolTaskVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.redisson.executor.TasksService;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import javax.sound.midi.Soundbank;
import java.net.http.HttpRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -28,6 +41,7 @@
@AllArgsConstructor
public class PatrolTaskController extends BladeController {
   private IPatrolTaskService patrolTaskService;
   private IFlowClient flowClient;
   /**
    * 分页列表查询
@@ -156,5 +170,66 @@
        return R.data(patrolTaskService.getPatrolTaskStatistic(patrolTask));
    }
    /**====================工作流==========================**/
    /**
     * 新增或修改
     *
     * @param patrolTask 任务
     */
    @PostMapping("start-process")
    public R startProcess(@RequestBody PatrolTask patrolTask) {
        return R.status(patrolTaskService.startProcess(patrolTask));
    }
    /**
     * 巡查人员完成任务
     *
     * @param patrolTask 任务
     */
    @PostMapping("patrol-complete-task")
    @ApiOperation(value = "完成任务", notes = "传入流程信息")
    public R completeTask(PatrolTask patrolTask, String currentUserId) {
        return R.status(patrolTaskService.patrolCompleteTask(patrolTask,currentUserId));
    }
    /**
     * 责任人完成任务
     */
    @PostMapping("charge-complete-task")
    @ApiOperation(value = "完成任务", notes = "传入流程信息")
    public R chargeCompletePerson(@RequestBody BladeFlowTask bladeFlowTask) {
        return R.status(patrolTaskService.chargeCompletePerson(bladeFlowTask));
    }
    /**
     * 查询待办
     *
     * @param patrolTask 任务
     */
    @PostMapping("patrol-todo-list")
    @ApiOperation(value = "查询待办")
    public R patrolTodoList(PatrolTaskVO patrolTask, Query query) {
        BladeFlow bladeFlow2 = new BladeFlow();
        R<List<BladeFlow>> res = flowClient.getTodoBladeFlowList(query.getSize(),query.getCurrent(),patrolTask.getCurrentUserId(), bladeFlow2);
        IPage<PatrolTask> patrolTaskIPage = new Page<>();
        List<PatrolTask> patrolTaskList = new ArrayList<>();
        if (res.isSuccess()){
            List<BladeFlow> data = res.getData();
            data.forEach(bladeFlow -> {
                PatrolTask byId = patrolTaskService.customizeGetById(bladeFlow.getBusinessId());
                byId.setFlow(bladeFlow);
                patrolTaskList.add(byId);
            });
        }
        //设置数据集
        patrolTaskIPage.setRecords(patrolTaskList);
        //设置当前页
        patrolTaskIPage.setCurrent(query.getCurrent());
        //设置大小
        patrolTaskIPage.setSize(query.getSize());
        return R.data(patrolTaskIPage);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/dto/PatrolGroupDTO.java
New file
@@ -0,0 +1,15 @@
package cn.gistack.sm.patrol.dto;
import cn.gistack.sm.patrol.entity.PatrolGroup;
import cn.gistack.sm.patrol.entity.PatrolRecord;
import cn.gistack.sm.patrol.vo.PatrolRecordVO;
import cn.gistack.sm.patrol.vo.PatrolReportVO;
import lombok.Data;
import java.util.List;
@Data
public class PatrolGroupDTO extends PatrolGroup {
    private List<PatrolReportVO> patrolReportList;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolReport.java
@@ -1,6 +1,9 @@
package cn.gistack.sm.patrol.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,27 +15,53 @@
 * @Description: 巡查类型
 */
@Data
@TableName("sm_patrol_report")
@TableName( value = "sm_patrol_report",autoResultMap = true)
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "sm_patrol_report", description = "巡查记录")
public class PatrolReport extends BaseEntity {
    /**
     * 水库id
     * 巡查现场图片
     */
    @ApiModelProperty("水库id")
    private String reservoirId;
    @ApiModelProperty("处理图片")
    @TableField(value = "images",typeHandler = FastjsonTypeHandler.class)
    private Object[] images;
    /**
     * 报告数量
     * 巡查现场视频
     */
    @ApiModelProperty("报告数量")
    private Integer groupNum;
    @ApiModelProperty("处理视频")
    @TableField(value = "videos",typeHandler = FastjsonTypeHandler.class)
    private Object[] videos;
    /**
     * 异常数量
     * 巡查内容
     */
    @ApiModelProperty("异常数量")
    private Integer errorNum;
    @ApiModelProperty("处理内容")
    private String content;
    /**
     * 巡查记录id
     */
    @ApiModelProperty("巡查记录id")
    private String recordId;
    /**
     * 任务id
     */
    @ApiModelProperty("任务id")
    private String taskId;
    /**
     * 解决方案
     */
    @ApiModelProperty("解决方案")
    private String solution;
    /**
     * 指标项id
     */
    @ApiModelProperty("指标项id")
    private String itemId;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolTask.java
@@ -1,5 +1,7 @@
package cn.gistack.sm.patrol.entity;
import cn.gistack.flow.core.entity.FlowEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
@@ -12,14 +14,14 @@
import org.springframework.format.annotation.DateTimeFormat;
/**
 * @Description: 巡查类型
 * @Description: 巡查任务
 */
@Data
@TableName("sm_patrol_task")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "sm_patrol_task对象", description = "巡查任务")
public class PatrolTask extends TenantEntity {
public class PatrolTask extends FlowEntity {
    /**
     * 标题
     */
@@ -124,4 +126,31 @@
     */
    @ApiModelProperty(value = "问题数量")
    private Integer problemCount;
    /**
     * 流程定义id
     */
    private String processDefinitionId;
    /**
     * 流程实例id
     */
    private String processInstanceId;
    /**
     * 工作流标识 是否上报
     */
    @TableField(exist = false)
    private Boolean report;
    /**
     * 工作流标识 是否上报至部门
     */
    @TableField(exist = false)
    private Boolean toDept;
    /**
     * 工作流标识 是否转送至技术负责人
     */
    @TableField(exist = false)
    private Boolean toTech;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.java
@@ -1,6 +1,7 @@
package cn.gistack.sm.patrol.mapper;
import cn.gistack.common.node.TreeNode;
import cn.gistack.sm.patrol.dto.PatrolGroupDTO;
import cn.gistack.sm.patrol.entity.PatrolGroup;
import cn.gistack.sm.patrol.vo.PatrolGroupVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -32,4 +33,8 @@
    List<PatrolGroup> getPatrolGroupByItemId(@Param("itemIds") String itemIds);
    List<PatrolGroupVO> getAllPatrolGroupByTaskId(@Param("taskId") String taskId);
    List<PatrolGroupDTO> getPatrolGroupDTO(@Param("taskId") String taskId);
    List<PatrolGroup> getPatrolGroupByTaskId(String taskId);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.xml
@@ -92,4 +92,42 @@
        WHERE IS_DELETED = 0
        ORDER BY G.CREATE_TIME
    </select>
    <resultMap id="patrolGroupDTO" type="cn.gistack.sm.patrol.dto.PatrolGroupDTO">
        <id property="id" column="id"/>
        <result property="name" column="gname"/>
        <collection property="patrolReportList" javaType="java.util.List" ofType="cn.gistack.sm.patrol.vo.PatrolReportVO">
            <result property="id" column="rId"/>
            <result property="videos" column="videos" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
            <result property="images" column="images" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
            <result property="status" column="status"/>
            <result property="isDeleted" column="isDeleted"/>
            <result property="itemId" column="itemId"/>
            <result property="itemsName" column="itemsName"/>
            <result property="taskId" column="taskId"/>
            <result property="solution" column="solution"/>
            <result property="content" column="content"/>
            <result property="recordId" column="recordId"/>
        </collection>
    </resultMap>
    <select id="getPatrolGroupDTO" resultMap="patrolGroupDTO">
       SELECT G.ID,G.NAME gname,
        R.ID rId, R.VIDEOS,R.IMAGES,R.STATUS,R.IS_DELETED,R.ITEM_ID itemId,R.record_id recordId,
        I.ITEMS_NAME itemsName,R.TASK_ID,R.SOLUTION,R.CONTENT FROM SM_PATROL_GROUP G
       LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID
       LEFT JOIN SM_PATROL_REPORT R ON R.ITEM_ID = I.ID
       WHERE G.IS_DELETED = 0
       AND R.STATUS = 2
       AND R.TASK_ID = #{taskId}
    </select>
    <select id="getPatrolGroupByTaskId" resultType="cn.gistack.sm.patrol.entity.PatrolGroup">
       SELECT G.ID,G.NAME FROM SM_PATROL_GROUP G
       LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID
       LEFT JOIN SM_PATROL_REPORT R ON R.ITEM_ID = I.ID
       WHERE G.IS_DELETED = 0
       AND R.STATUS = 2
       AND R.TASK_ID = #{taskId}
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml
@@ -34,7 +34,7 @@
    <select id="selectPatrolRecord" resultMap="selectPatrolRecordList">
        SELECT
        record.id,record.patrol_type,record.device_ids,record.images,record.videos,record.content,record.status,record.item_id,record.task_id,record.patrol_route,record.update_time,record.solution
        record.id,record.patrol_type,record.device_ids,record.images,record.videos,record.content,record.status,record.item_id,record.task_id,record.patrol_route,record.update_time,record.solution,
        task.route_coordinates taskRoute,item.items_name itemsName,item.description
        FROM SM_PATROL_RECORD record
        LEFT JOIN sm_patrol_type type ON type.id = record.patrol_type
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.java
@@ -46,4 +46,6 @@
     * @return
     */
    PatrolTask getPatrolTaskById(@Param("id")String id);
    PatrolTask customizeGetById(@Param("id") String id);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.xml
@@ -127,4 +127,12 @@
        FROM sm_patrol_task spt
        where spt.id = #{id}
    </select>
    <select id="customizeGetById" resultType="cn.gistack.sm.patrol.entity.PatrolTask">
        SELECT T.ID,T.TITLE,T.TO_USER_ID,A.PROBLEM_COUNT,T.PROJECT_ID FROM SM_PATROL_TASK T
        LEFT JOIN (
            SELECT COUNT(*) PROBLEM_COUNT,R.TASK_ID FROM SM_PATROL_REPORT R WHERE R.TASK_ID = #{id} AND R.STATUS = 2 GROUP BY R.TASK_ID
        )A ON A.TASK_ID = T.ID
        WHERE T.ID = #{id}
        AND T.IS_DELETED = 0
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolGroupService.java
@@ -1,5 +1,6 @@
package cn.gistack.sm.patrol.service;
import cn.gistack.sm.patrol.dto.PatrolGroupDTO;
import cn.gistack.sm.patrol.entity.PatrolGroup;
import cn.gistack.sm.patrol.vo.PatrolGroupVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -36,4 +37,8 @@
    List<PatrolGroup> getPatrolGroupByItemId(String itemIds);
    List<PatrolGroupVO> getAllPatrolGroupByTaskId(String taskId);
    List<PatrolGroupDTO> getPatrolGroupDTO(String taskId);
    List<PatrolGroup> getPatrolGroupByTaskId(String taskId);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolTaskService.java
@@ -1,9 +1,15 @@
package cn.gistack.sm.patrol.service;
import cn.gistack.flow.core.entity.BladeFlow;
import cn.gistack.sm.patrol.entity.PatrolReport;
import cn.gistack.sm.patrol.entity.PatrolTask;
import cn.gistack.sm.patrol.vo.BladeFlowTask;
import cn.gistack.sm.patrol.vo.PatrolTaskVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import java.net.http.HttpRequest;
import java.util.List;
public interface IPatrolTaskService extends BaseService<PatrolTask> {
@@ -42,4 +48,18 @@
     * @return
     */
    PatrolTask getPatrolTaskById(String id);
    /**
     * 开启流程
     *
     * @param patrolTask 任务实体
     * @return boolean
     */
    boolean startProcess(PatrolTask patrolTask);
    boolean patrolCompleteTask(PatrolTask patrolTask,String currentUserId);
    boolean chargeCompletePerson(BladeFlowTask bladeFlowTask);
    PatrolTask customizeGetById(String businessId);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolGroupServiceImpl.java
@@ -3,6 +3,7 @@
import cn.gistack.common.node.TreeNode;
import cn.gistack.common.utils.NodeTreeUtil;
import cn.gistack.sm.patrol.dto.PatrolGroupDTO;
import cn.gistack.sm.patrol.entity.PatrolGroup;
import cn.gistack.sm.patrol.mapper.PatrolGroupMapper;
import cn.gistack.sm.patrol.service.IPatrolGroupService;
@@ -55,4 +56,14 @@
    public List<PatrolGroupVO> getAllPatrolGroupByTaskId(String taskId) {
        return baseMapper.getAllPatrolGroupByTaskId(taskId);
    }
    @Override
    public List<PatrolGroupDTO> getPatrolGroupDTO(String taskId) {
        return baseMapper.getPatrolGroupDTO(taskId);
    }
    @Override
    public List<PatrolGroup> getPatrolGroupByTaskId(String taskId) {
        return baseMapper.getPatrolGroupByTaskId(taskId);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolReportServiceImpl.java
@@ -3,15 +3,32 @@
import cn.gistack.sm.patrol.entity.PatrolConfig;
import cn.gistack.sm.patrol.entity.PatrolReport;
import cn.gistack.sm.patrol.mapper.PatrolReportMapper;
import cn.gistack.sm.patrol.service.IPatrolRecordService;
import cn.gistack.sm.patrol.service.IPatrolReportService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.utils.Func;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class PatrolReportServiceImpl  extends BaseServiceImpl<PatrolReportMapper, PatrolReport> implements IPatrolReportService {
    private final IPatrolRecordService patrolRecordService;
    @Override
    public IPage<PatrolConfig> selectPatrolReport(IPage<PatrolReport> page, PatrolConfig patrolConfig) {
        return null;
    }
    @Override
    public boolean save(PatrolReport entity) {
        if (Func.equals(entity.getStatus(),1)){
        }
        return super.save(entity);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
@@ -1,26 +1,51 @@
package cn.gistack.sm.patrol.service.impl;
import cn.gistack.flow.core.constant.ProcessConstant;
import cn.gistack.flow.core.entity.BladeFlow;
import cn.gistack.flow.core.feign.IFlowClient;
import cn.gistack.flow.core.utils.FlowUtil;
import cn.gistack.flow.core.utils.TaskUtil;
import cn.gistack.sm.patrol.entity.PatrolRecord;
import cn.gistack.sm.patrol.entity.PatrolReport;
import cn.gistack.sm.patrol.entity.PatrolTask;
import cn.gistack.sm.patrol.mapper.PatrolTaskMapper;
import cn.gistack.sm.patrol.service.IPatrolRecordService;
import cn.gistack.sm.patrol.service.IPatrolReportService;
import cn.gistack.sm.patrol.service.IPatrolTaskService;
import cn.gistack.sm.patrol.util.EnhancementServicesTool;
import cn.gistack.sm.patrol.util.IdWorker;
import cn.gistack.sm.patrol.vo.BladeFlowTask;
import cn.gistack.sm.patrol.vo.PatrolTaskVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.net.http.HttpRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
@Service
@AllArgsConstructor
public class PatrolTaskServiceImpl extends BaseServiceImpl<PatrolTaskMapper, PatrolTask> implements IPatrolTaskService {
    private final IFlowClient flowClient;
    private final IPatrolRecordService patrolRecordService;
    private final IPatrolReportService patrolReportService;
    /**
     * 自定义分页查询
@@ -85,4 +110,118 @@
    public PatrolTask getPatrolTaskById(String id) {
        return baseMapper.getPatrolTaskById(id);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean startProcess(PatrolTask patrolTask) {
        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);
            if (result.isSuccess()) {
                log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
                // 返回流程id写入leave
                patrolTask.setProcessInstanceId(result.getData().getProcessInstanceId());
                updateById(patrolTask);
            } else {
                throw new ServiceException("开启流程失败");
            }
        } else {
            updateById(patrolTask);
        }
        return true;
    }
    @Override
    @Transactional
    public boolean patrolCompleteTask(PatrolTask patrolTask,String currentUserId) {
        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 = "完成";
            // 创建变量
            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, "1650048152667467777"));
            // 完成任务
            flowClient.completeTask(taskId,processInstanceId,comment,variables);
            saveReport(patrolTask);
            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){
            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 update;
    }
    @Override
    public PatrolTask customizeGetById(String businessId) {
        return baseMapper.customizeGetById(businessId);
    }
    public void saveReport(PatrolTask patrolTask){
        //拿到当前任务下的异常巡查记录
        PatrolRecord patrolRecord = new PatrolRecord();
        patrolRecord.setTaskId(patrolTask.getId().toString());
        patrolRecord.setStatus(2);
        patrolRecord.setSolution("2");
        List<PatrolRecord> list = patrolRecordService.list(Condition.getQueryWrapper(patrolRecord));
        //向上报表中添加数据
        list.forEach(record->{
            PatrolReport patrolReport = new PatrolReport();
            patrolReport.setContent(record.getContent());
            patrolReport.setImages(record.getImages());
            patrolReport.setVideos(record.getVideos());
            patrolReport.setItemId(record.getItemId());
            patrolReport.setSolution(record.getSolution());
            patrolReport.setTaskId(record.getTaskId());
            patrolReport.setRecordId(record.getId().toString());
            patrolReport.setStatus(record.getStatus());
            patrolReportService.save(patrolReport);
        });
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java
New file
@@ -0,0 +1,23 @@
package cn.gistack.sm.patrol.vo;
import cn.gistack.flow.core.entity.BladeFlow;
import cn.gistack.sm.patrol.entity.PatrolReport;
import lombok.Data;
import java.util.List;
@Data
public class BladeFlowTask {
    private List<PatrolReport> patrolReportList;
    private String taskId;
    private String processInstanceId;
    private String taskUser;
    private Boolean toDept;
    private Boolean toTech;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolReportVO.java
New file
@@ -0,0 +1,28 @@
package cn.gistack.sm.patrol.vo;
import cn.gistack.sm.patrol.entity.PatrolReport;
import lombok.Data;
@Data
public class PatrolReportVO extends PatrolReport {
    /**
     * 组名称
     */
    private String groupName;
    /**
     * 组id
     */
    private String groupId;
    /**
     * 项名称
     */
    private String itemsName;
    /**
     * 项描述
     */
    private String description;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolTaskVO.java
@@ -31,4 +31,9 @@
     * 角色名
     */
    private String roleName;
    /**
     * 当前用户id
     */
    private String currentUserId;
}
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/controller/UserController.java
@@ -98,6 +98,30 @@
        return R.data(UserWrapper.build().entityVO(detail));
    }
    /**
     * 查询单条
     */
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "查看详情", notes = "传入id")
    @GetMapping("/customizeGetDetail")
    public R<User> customizeGetDetail(User user) {
        User detail = userService.getOne(Condition.getQueryWrapper(user));
        return R.data(UserWrapper.build().entityVO(detail));
    }
    /**
     * 自定义查询用户列表
     * @param user
     * @return
     */
    @GetMapping("/customizeGetList")
    public R<List<User>> customizeGetList(UserVO user){
        List<User> userList = userService.customizeGetList(user);
        return R.data(userList);
    }
    /**
     * 用户列表
     */
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.java
@@ -18,6 +18,7 @@
import cn.gistack.system.user.entity.User;
import cn.gistack.system.user.excel.UserExcel;
import cn.gistack.system.user.vo.UserVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -60,4 +61,5 @@
     */
    List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
    List<User> customizeGetList(@Param("user") UserVO user);
}
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.xml
@@ -72,5 +72,10 @@
    <select id="exportUser" resultType="cn.gistack.system.user.excel.UserExcel">
        SELECT id, tenant_id, user_type, account, name, real_name, email, phone, birthday, role_id, dept_id, post_id FROM blade_user ${ew.customSqlSegment}
    </select>
    <select id="customizeGetList" resultType="cn.gistack.system.user.entity.User">
        select U.* from BLADE_USER U
        left join BLADE_DEPT D on D.ID = U.DEPT_ID
        where D.AD_CODE = #{user.adCode} and U.ROLE_ID like CONCAT('%',(select id from BLADE_ROLE where ROLE_ALIAS = 'qxgly'),'%')
    </select>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java
@@ -205,4 +205,6 @@
     * @return
     */
    UserVO platformDetail(User user);
    List<User> customizeGetList(UserVO user);
}
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java
@@ -430,4 +430,9 @@
        return userVO;
    }
    @Override
    public List<User> customizeGetList(UserVO user) {
        return baseMapper.customizeGetList(user);
    }
}