关于sql语句中IN(?)中参数不确定个数的解决方案

关于sql语句中IN(?)中参数不确定个数的解决方案

核心:将需要的参数拼接成字符串丢给IN函数

@Override
    public  List<FlowInstDto> getBacklogTaskByPage(PageObj pageObj, FlowDto flowDto) {
        String teamNameListStr1="";
        AuthInfo authInfo= SessionContent.getAuthInfoLocal();
        List<RoleDto> roleDtoList= authInfo.getRoles();
        boolean Monitor=false;
        boolean dutymanager=false;
        boolean staffInfo=false;
        for (RoleDto roleDto:
                roleDtoList) {
            if("Monitor".equals(roleDto.getRoleCode())){
                Monitor=true;
            }else if("dutymanager".equals(roleDto.getRoleCode())){
                dutymanager=true;
            }else if("staffInfo".equals(roleDto.getRoleCode())){
                staffInfo=true;
            }
        }
        Long staffId= authInfo.getStaffId();
        String dutyStaffId = Long.toString(staffId);
//根据值班经理id查出所属区域班组
        List<TeamConfigureDto> teamNameList=teamConfigureDao.getClassMsg(dutyStaffId);
        ArrayList<String> teamNameList1=new ArrayList<>();
        if (dutymanager){
            for (int i = 0; i <teamNameList.size() ; i++) {
                teamNameList1.add(teamNameList.get(i).getClassName());
            }
        }
        ArrayList<Object> params = new ArrayList<Object>();
        params.add(SessionContent.getAuthInfoLocal().getStaffId());
        if (teamNameList1.size()!=0){
            String teamNameListStr="";
            for (int i = 0; i < teamNameList1.size(); i++) {
                teamNameListStr+="'"+teamNameList1.get(i)+"'"+",";
            }
            teamNameListStr1=teamNameListStr.substring(0,teamNameListStr.length()-1);
//            params.add(teamNameListStr1);
        }else{
            //查出所有班组名字
            List<String> allTeamNames = platformClassScheduleDao.queryAllTeamName();
            String teamNameListStr="";
            for (int i = 0; i <allTeamNames.size() ; i++) {
                teamNameListStr+="'"+allTeamNames.get(i)+"'"+",";
            }
            teamNameListStr1=teamNameListStr.substring(0,teamNameListStr.length()-1);
        }
        String sql= "select otfi.FLOW_INST_ID,otfi.FLOW_NO,otfi.FLOW_NODE_INST_ID,otni.NODE_ID,otni.NODE_NO,otni.NODE_NAME,otfi.FLOW_NAME,otfi.CREATE_STAFF,ss.OPERATOR_NAME,otfi.END_TIME,otfi.CREATE_TIME,ot.TEAM_NAME  from  oms_tbl_flow_inst otfi\n" +
                "    left join (select distinct n.FLOW_INST_ID from  oms_tbl_node_inst n where  n.NODE_DEAL_PER=? ) mynodeInst\n" +
                "        on otfi.FLOW_INST_ID = mynodeInst.FLOW_INST_ID\n" +
                "    left join oms_tbl_node_inst otni on otfi.FLOW_NODE_INST_ID = otni.FLOW_NODE_INST_ID\n" +
                "    left join sys_staff ss on ss.STAFF_ID=otfi.CREATE_STAFF \n" +
                "    left join `oms_team_staff_rel` otsr on ss.STAFF_ID=otsr.STAFF_ID\n"+
                "    left join `oms_team` ot on ot.TEAM_ID=otsr.TEAM_ID\n"+
                "    where otfi.FLOW_INST_ID>0 AND ot.TEAM_NAME IN("+teamNameListStr1+")\n" +
                "    ORDER BY otfi.CREATE_TIME DESC";
        if (CommonUtil.hasValue(flowDto.getFlowNo())) {
            sql += "  and otfi.FLOW_NO = ? ";
            params.add(flowDto.getFlowNo());
        }
        return this.queryByPage(sql, params.toArray(), new RowMapper<FlowInstDto>() {
            @Override
            public FlowInstDto mapRow(ResultSet rs, int rowNum) throws SQLException {
                FlowInstDto dto = new FlowInstDto();
                dto.setFlowInstId(rs.getLong("FLOW_INST_ID"));
                dto.setFlowNo(rs.getString("FLOW_NO"));
                dto.setFlowNodeInstId(rs.getLong("FLOW_NODE_INST_ID"));
                dto.setNodeId(rs.getLong("NODE_ID"));
                dto.setNodeNo(rs.getString("NODE_NO"));
                dto.setNodeName(rs.getString("NODE_NAME"));
                dto.setFlowName(rs.getString("FLOW_NAME"));
                dto.setCreateStaff(rs.getLong("CREATE_STAFF"));
                dto.setCreateStaffName(rs.getString("OPERATOR_NAME"));
                dto.setEndTime(rs.getTimestamp("END_TIME"));
                dto.setCreateTime(rs.getTimestamp("CREATE_TIME"));
                return dto;
            }
        }, pageObj);
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值