mg
2022-10-14 622d26ba10bb7d37d006c73e240082a6f6c69db9
修改处置流程。
12个文件已修改
2个文件已添加
220 ■■■■■ 已修改文件
ycl-common/src/main/java/com/ycl/controller/user/UmsAdminController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/caseHandler/BaseCaseController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/caseHandler/DispatchHandleController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/message/MessageSmsTemplateController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/entity/caseHandler/BaseCaseDetail.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/entity/caseHandler/DisposeRecord.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/entity/message/SmsTemplate.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/caseHandler/IBaseCaseService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/caseHandler/IDisposeRecordService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/BaseCaseServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/CheckHandleServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/DisposeRecordServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/IDispatchHandleServiceImpl.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/resources/mapper/caseHandler/WorkflowConfigStepMapper.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/controller/user/UmsAdminController.java
@@ -102,6 +102,7 @@
        String username = principal.getName();
        UmsAdmin umsAdmin = adminService.getAdminByUsername(username);
        Map<String, Object> data = new HashMap<>();
        data.put("userId", umsAdmin.getId());
        data.put("username", umsAdmin.getUsername());
        data.put("menus", roleService.getMenuList(umsAdmin.getId()));
        data.put("icon", umsAdmin.getIcon());
ycl-platform/src/main/java/com/ycl/controller/caseHandler/BaseCaseController.java
@@ -260,8 +260,8 @@
    @ApiOperation(value = "结案")
    @PutMapping("/end_case")
    @LogSave(operationType = "事项处置管理",contain = "案件结案")
    public CommonResult endCase(@RequestParam Long caseId, @RequestParam String result) {
        baseCaseService.endCase(caseId, result);
    public CommonResult endCase(@RequestParam Long caseId, @RequestParam String result,@RequestParam String opinion) {
        baseCaseService.endCase(caseId, result,opinion);
        return CommonResult.success("end case success~!");
    }
ycl-platform/src/main/java/com/ycl/controller/caseHandler/DispatchHandleController.java
@@ -6,6 +6,7 @@
import com.ycl.api.CommonResult;
import com.ycl.bo.AdminUserDetails;
import com.ycl.common.constant.BaseCaseStatus;
import com.ycl.common.constant.StepName;
import com.ycl.dto.caseHandler.DispatchInfoParam;
import com.ycl.dto.dispatch.UploadDisposingResultParam;
import com.ycl.entity.caseHandler.*;
@@ -99,14 +100,15 @@
            iWritService.save(writ);
        }
        baseCaseService.update(new LambdaUpdateWrapper<BaseCase>().eq(BaseCase::getId, caseId).set(BaseCase::getState, BaseCaseStatus.DISPOSE));
        String stepName = StepName.CHECK.getName();
        DisposeRecord disposeRecord = new DisposeRecord();
        disposeRecord.setBaseCaseId(caseId);
        disposeRecord.setState(0);
        disposeRecord.setCreateTime(LocalDateTime.now());
        disposeRecord.setCreateUser(user.getUserId().longValue());
        disposeRecord.setStepName("核查");
        disposeRecord.setStepName(stepName);
        disposeRecord.setStartTime(LocalDateTime.now());
        iDisposeRecordService.save(disposeRecord);
        iDisposeRecordService.addRecord(disposeRecord);
        return CommonResult.success("add success");
    }
}
ycl-platform/src/main/java/com/ycl/controller/message/MessageSmsTemplateController.java
New file
@@ -0,0 +1,19 @@
package com.ycl.controller.message;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 短信模板管理  前端控制器
 * </p>
 *
 * @author mg
 * @since 2022-10-14
 */
@RestController
@RequestMapping("/message_sms_template")
@Api(tags = "用户消息栏目设置")
public class MessageSmsTemplateController {
}
ycl-platform/src/main/java/com/ycl/entity/caseHandler/BaseCaseDetail.java
@@ -3,7 +3,6 @@
import com.ycl.vo.casePool.CurrentSitVo;
import com.ycl.vo.casePool.FilesPictureVo;
import com.ycl.vo.casePool.HandlePassVo;
import com.ycl.vo.casePool.ProblemProVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -41,8 +40,8 @@
    /**
     * 问题处理
     */
    @ApiModelProperty(value = "问题处理")
    private ProblemProVo problemProVo;
    //@ApiModelProperty(value = "问题处理")
    //private ProblemProVo problemProVo;
    /**
     * 现场处理
     */
ycl-platform/src/main/java/com/ycl/entity/caseHandler/DisposeRecord.java
@@ -122,4 +122,10 @@
    @TableField(value = "linkTime",exist = false)
    @ApiModelProperty(value = "环节用时")
    private String linkTime;
    /**
     *  处理人
     */
    @TableField(value = "handler_text",exist = false)
    @ApiModelProperty(value = "处理人")
    private String handlerText;
}
ycl-platform/src/main/java/com/ycl/entity/message/SmsTemplate.java
New file
@@ -0,0 +1,12 @@
package com.ycl.entity.message;
/**
 * <p>
 * 类说明
 * </p>
 *
 * @author mg
 * @since 2022-10-14
 */
public class SmsTemplate {
}
ycl-platform/src/main/java/com/ycl/service/caseHandler/IBaseCaseService.java
@@ -49,5 +49,5 @@
    ArrayList<String> listCaseImages(Integer id, Integer type);
    void endCase(Long caseId, String result);
    void endCase(Long caseId, String result,String opinion);
}
ycl-platform/src/main/java/com/ycl/service/caseHandler/IDisposeRecordService.java
@@ -17,4 +17,6 @@
public interface IDisposeRecordService extends IService<DisposeRecord> {
    List<MyBacklogVO> listMyTask(String num, Long userId);
    Boolean addRecord(DisposeRecord disposeRecord);
}
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/BaseCaseServiceImpl.java
@@ -3,18 +3,21 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.bo.AdminUserDetails;
import com.ycl.bo.casePool.CasePoolIllegalBuildingDO;
import com.ycl.bo.casePool.CasePoolViolationDO;
import com.ycl.common.constant.BaseCaseStatus;
import com.ycl.common.constant.StepName;
import com.ycl.common.util.DateUtil;
import com.ycl.dto.casePool.IllegalBuildingParam;
import com.ycl.dto.casePool.ViolationParam;
import com.ycl.entity.caseHandler.*;
import com.ycl.entity.common.ImageResources;
import com.ycl.entity.video.VideoAlarmReport;
import com.ycl.exception.ApiException;
import com.ycl.mapper.caseHandler.*;
import com.ycl.mapper.common.ImageResourcesMapper;
import com.ycl.mapper.dict.DataDictionaryMapper;
@@ -212,9 +215,15 @@
    }
    private void setDisposeRecord(Long id) {
        String stepName = "调度";
        String stepName = StepName.DISPATCH.getName();
        QueryWrapper<WorkflowConfigStep> stepqurey = new QueryWrapper<>();
        stepqurey.eq("name", stepName);
        WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepqurey);
        Integer state = 0;
        DisposeRecord disposeRecord = new DisposeRecord();
        disposeRecord.setWorkflowConfigStepId(workflowConfigStep.getId());
        disposeRecord.setHandlerRoleId(workflowConfigStep.getRoleId());
        disposeRecord.setBaseCaseId(id);
        disposeRecord.setState(state);
        disposeRecord.setCreateTime(LocalDateTime.now());
@@ -266,20 +275,12 @@
        //2.1查询处置流程配置
        HandlePassVo handlePassVo = new HandlePassVo();
        QueryWrapper<WorkflowConfig> wrapperWc = new QueryWrapper<>();
        wrapperWc.lambda().eq(WorkflowConfig::getCode, "ddlc").or().eq(WorkflowConfig::getCode, "wtcllc");
        wrapperWc.lambda().eq(WorkflowConfig::getCode, "ddlc");
        List<WorkflowConfig> wcs = workflowConfigMapper.selectList(wrapperWc);
        Integer ddlcId = 0, wtcllcId = 0;
        for (WorkflowConfig wc : wcs) {
            if ("ddlc".equals(wc.getCode())) {
                ddlcId = wc.getId();
            }
            if ("wtcllc".equals(wc.getCode())) {
                wtcllcId = wc.getId();
            }
        }
        //2.2查询处置流程环节配置
        Map mapWcs = new HashMap();
        mapWcs.put("workflowConfigId", ddlcId);
        mapWcs.put("workflowConfigId", wcs.get(0).getId());
        mapWcs.put("baseCaseId", baseCase.getId());
        List<WorkflowConfigStep> listWcs = workflowConfigStepMapper.selectRecordByWorkflowConfigStepId(mapWcs);
        //处理用环节时间
@@ -289,11 +290,11 @@
                continue;
            }
            for (DisposeRecord record : records) {
                if (record != null && record.getCreateTime() != null) {
                if (record != null && record.getEndTime() != null) {
                    record.setLinkTime(
                            DateUtil.getDistanceDateTime(
                                    DateUtil.fromLocalDateTime(baseCase.getAlarmTime()),
                                    DateUtil.fromLocalDateTime(record.getCreateTime())));
                                    DateUtil.fromLocalDateTime(record.getEndTime())));
                }
            }
            step.setDisposeRecords(records);
@@ -309,13 +310,13 @@
        filesPictureVo.setImageResources(irs);
        bcd.setFilesPictureVo(filesPictureVo);
        //4.查询问题处理信息
        ProblemProVo problemProVo = new ProblemProVo();
        /*ProblemProVo problemProVo = new ProblemProVo();
        //4.2查询处置流程环节配置
        mapWcs.put("workflowConfigId", wtcllcId);
        List<WorkflowConfigStep> listWcsPp = workflowConfigStepMapper.selectRecordByWorkflowConfigStepId(mapWcs);
        List<WorkflowConfigStep> listWcsPp = new ArrayList<>();
        //4.3设置调度流程
        problemProVo.setWorkflowConfigSteps(listWcsPp);
        bcd.setProblemProVo(problemProVo);
        bcd.setProblemProVo(problemProVo);*/
        //5.查询现场情况信息
        CurrentSitVo currentSitVo = new CurrentSitVo();
        QueryWrapper<ArrivalSituation> wrapperAs = new QueryWrapper<>();
@@ -366,23 +367,31 @@
    }
    @Override
    public void endCase(Long caseId, String result) {
    public void endCase(Long caseId, String result,String opinion) {
        //获取当前登陆用户信息
        AdminUserDetails user = (AdminUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        Integer state = 1;
        String endCaseName = "结案";
        String endCaseName = StepName.CLOSING_REGISTER.getName();
        BaseCase baseCase = new BaseCase();
        baseCase.setState(BaseCaseStatus.CLOSING_REGISTER);
        baseCase.setId(caseId);
        baseCase.setFinalOpinion(opinion);
        baseCaseMapper.updateById(baseCase);
        QueryWrapper<WorkflowConfigStep> stepQurey = new QueryWrapper<>();
        stepQurey.eq("name", endCaseName);
        WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepQurey);
        if (workflowConfigStep == null) {
            throw new ApiException("未查询到该流程环节");
        }
        UpdateWrapper<DisposeRecord> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("base_case_id", baseCase.getId()).eq("workflow_config_step_id",workflowConfigStep.getId());
        //修改结案记录
        DisposeRecord disposeRecord = new DisposeRecord();
        disposeRecord.setBaseCaseId(caseId);
        disposeRecord.setWorkflowConfigStepId(workflowConfigStepMapper
                .selectOne(new LambdaQueryWrapper<WorkflowConfigStep>().eq(WorkflowConfigStep::getName, endCaseName))
                .getWorkflowConfigId());
        disposeRecord.setCreateUser(user.getUserId().longValue());
        disposeRecord.setResult(result);
        disposeRecord.setState(state);
        disposeRecord.setCreateTime(LocalDateTime.now());
        disposeRecordMapper.insert(disposeRecord);
        disposeRecord.setHandlerId(user.getUserId().longValue());
        //结案已结束
        disposeRecord.setState(1);
        disposeRecord.setEndTime(LocalDateTime.now());
        disposeRecordMapper.update(disposeRecord, updateWrapper);
    }
}
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/CheckHandleServiceImpl.java
@@ -1,6 +1,7 @@
package com.ycl.service.caseHandler.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.constant.BaseCaseStatus;
import com.ycl.common.constant.StepName;
@@ -49,28 +50,25 @@
        baseCaseMapper.updateById(baseCase);
        QueryWrapper<WorkflowConfigStep> stepqurey = new QueryWrapper<>();
        stepqurey.eq("name", StepName.CHECK.getName());
        WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepqurey);
        QueryWrapper<WorkflowConfigStep> stepQurey = new QueryWrapper<>();
        stepQurey.eq("name", StepName.CHECK.getName());
        WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepQurey);
        if (workflowConfigStep == null) {
            throw new ApiException("未查询到该流程环节");
        }
        //添加调度记录
        DisposeRecord disposeRecord = new DisposeRecord();
        disposeRecord.setBaseCaseId(baseCase.getId());
        disposeRecord.setWorkflowConfigStepId(workflowConfigStep.getId());
        disposeRecord.setStepName(workflowConfigStep.getName());
        disposeRecord.setHandlerRoleId(workflowConfigStep.getRoleId());
        disposeRecord.setHandlerId(chechParam.getCurrentUser());
        disposeRecord.setState(1);
        disposeRecord.setStartTime(LocalDateTime.now());
        disposeRecord.setEndTime(LocalDateTime.now());
        disposeRecord.setResult(chechParam.getResult());
        disposeRecord.setCreateUser(chechParam.getCurrentUser());
        disposeRecord.setCreateTime(LocalDateTime.now());
        disposeRecordMapper.insert(disposeRecord);
        UpdateWrapper<DisposeRecord> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("base_case_id", baseCase.getId()).eq("workflow_config_step_id",workflowConfigStep.getId());
        //修改核查记录
        DisposeRecord disposeRecord = new DisposeRecord();
        disposeRecord.setHandlerId(chechParam.getCurrentUser());
        //核查已结束
        disposeRecord.setState(1);
        disposeRecord.setEndTime(LocalDateTime.now());
        disposeRecordMapper.update(disposeRecord, updateWrapper);
        QueryWrapper<WorkflowConfigStep> stepNextqurey = new QueryWrapper<>();
        stepNextqurey.eq("workflow_config_id", workflowConfigStep.getWorkflowConfigId());
        stepNextqurey.eq("seq", workflowConfigStep.getSeq() + 1);
@@ -82,7 +80,6 @@
        stepNextRecord.setWorkflowConfigStepId(stepNext.getId());
        stepNextRecord.setStepName(stepNext.getName());
        stepNextRecord.setHandlerRoleId(stepNext.getRoleId());
        stepNextRecord.setHandlerId(chechParam.getCurrentUser());
        //上传处置未结束
        stepNextRecord.setState(0);
        stepNextRecord.setStartTime(LocalDateTime.now());
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/DisposeRecordServiceImpl.java
@@ -1,18 +1,25 @@
package com.ycl.service.caseHandler.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.constant.StepName;
import com.ycl.entity.caseHandler.BaseCase;
import com.ycl.entity.caseHandler.DisposeRecord;
import com.ycl.entity.caseHandler.WorkflowConfigStep;
import com.ycl.exception.ApiException;
import com.ycl.mapper.caseHandler.BaseCaseMapper;
import com.ycl.mapper.caseHandler.DisposeRecordMapper;
import com.ycl.mapper.caseHandler.WorkflowConfigStepMapper;
import com.ycl.service.caseHandler.IDisposeRecordService;
import com.ycl.vo.MyBacklogVO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
@@ -32,6 +39,8 @@
    @Resource
    DisposeRecordMapper disposeRecordMapper;
    @Resource
    WorkflowConfigStepMapper workflowConfigStepMapper;
    @Override
    public List<MyBacklogVO> listMyTask(String num, Long userId) {
@@ -62,4 +71,35 @@
                    return myBacklogVO;
                }).collect(Collectors.toList());
    }
    @Override
    public Boolean addRecord(DisposeRecord disposeRecord) {
        //结束上传处置流程
        String stepName = StepName.DISPOSE.getName();
        QueryWrapper<WorkflowConfigStep> qureyDispatch = new QueryWrapper<>();
        qureyDispatch.eq("name", stepName);
        WorkflowConfigStep dispatchStep = workflowConfigStepMapper.selectOne(qureyDispatch);
        UpdateWrapper<DisposeRecord> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("base_case_id", disposeRecord.getBaseCaseId()).eq("workflow_config_step_id",dispatchStep.getId());
        DisposeRecord updateRecord = new DisposeRecord();
        updateRecord.setState(1);
        updateRecord.setEndTime(LocalDateTime.now());
        updateRecord.setHandlerId(disposeRecord.getCreateUser());
        baseMapper.update(updateRecord, updateWrapper);
        QueryWrapper<WorkflowConfigStep> stepQurey = new QueryWrapper<>();
        stepQurey.eq("name", disposeRecord.getStepName());
        WorkflowConfigStep workflowConfigStep = workflowConfigStepMapper.selectOne(stepQurey);
        if (workflowConfigStep == null) {
            throw new ApiException("未查询到该流程环节");
        }
        //设置流程环节数据
        disposeRecord.setWorkflowConfigStepId(workflowConfigStep.getId());
        disposeRecord.setHandlerRoleId(workflowConfigStep.getRoleId());
        baseMapper.insert(disposeRecord);
        return true;
    }
}
ycl-platform/src/main/java/com/ycl/service/caseHandler/impl/IDispatchHandleServiceImpl.java
@@ -1,6 +1,7 @@
package com.ycl.service.caseHandler.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.common.constant.BaseCaseStatus;
import com.ycl.common.constant.StepName;
@@ -62,21 +63,16 @@
            throw new ApiException("未查询到该流程环节");
        }
        //添加调度记录
        UpdateWrapper<DisposeRecord> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("base_case_id", baseCase.getId()).eq("workflow_config_step_id",workflowConfigStep.getId());
        //修改调度记录
        DisposeRecord disposeRecord = new DisposeRecord();
        disposeRecord.setBaseCaseId(baseCase.getId());
        disposeRecord.setWorkflowConfigStepId(workflowConfigStep.getId());
        disposeRecord.setStepName(workflowConfigStep.getName());
        disposeRecord.setHandlerRoleId(workflowConfigStep.getRoleId());
        disposeRecord.setHandlerId(dispatchInfo.getCreateUser());
        //调度已结束
        disposeRecord.setState(1);
        disposeRecord.setStartTime(LocalDateTime.now());
        disposeRecord.setEndTime(LocalDateTime.now());
        disposeRecord.setCreateUser(dispatchInfo.getCreateUser());
        disposeRecord.setCreateTime(LocalDateTime.now());
        disposeRecordMapper.insert(disposeRecord);
        disposeRecordMapper.update(disposeRecord, updateWrapper);
        QueryWrapper<WorkflowConfigStep> stepNextqurey = new QueryWrapper<>();
        stepNextqurey.eq("workflow_config_id", workflowConfigStep.getWorkflowConfigId());
@@ -89,7 +85,6 @@
        stepNextRecord.setWorkflowConfigStepId(stepNext.getId());
        stepNextRecord.setStepName(stepNext.getName());
        stepNextRecord.setHandlerRoleId(stepNext.getRoleId());
        stepNextRecord.setHandlerId(dispatchInfo.getCreateUser());
        //上传处置未结束
        stepNextRecord.setState(0);
        stepNextRecord.setStartTime(LocalDateTime.now());
ycl-platform/src/main/resources/mapper/caseHandler/WorkflowConfigStepMapper.xml
@@ -28,15 +28,17 @@
            <result column="handler_id" property="handlerId" />
            <result column="create_user" property="createUser" />
            <result column="create_time" property="createTime" />
            <result column="handler_text" property="handlerText" />
        </collection>
    </resultMap>
    <select id="selectRecordByWorkflowConfigStepId" parameterType="map" resultMap="RecordResultMap">
        SELECT
            uwcs.*,udr.*,udr.id record_id
            uwcs.*,udr.*,udr.id record_id,ua.nick_name handler_text
        FROM
            ums_workflow_config_step uwcs
                LEFT JOIN ums_dispose_record udr ON uwcs.id = udr.workflow_config_step_id AND udr.base_case_id = #{baseCaseId}
                LEFT JOIN ums_admin ua ON udr.handler_id = ua.id
        WHERE
            uwcs.workflow_config_id = #{workflowConfigId}
    </select>