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); } }