多选下拉框查询接口如何做处理?分页总条数出问题又怎么处理?

我们这里使用一个字段存储,存储为字符串的json数组格式:
ServiceProAddr:[{“Name”:”地毯清洗”,”ParentName”:”清洁服务”},{“Name”:”空调清洗”,”ParentName”:”清洁服务”}]
存储时放数组后JSON.stringify(filedata)一下即可;
查询时带参: serviceItemName: [“洗衣机”,”长途搬家”,”空调移机”]
下面具体代码:
@Override
public MyResult findRecords(HttpServletRequest request, HttpServletResponse response,
EnterpriseService record, int pagenow, int pagesize) {
int limitStart = (pagenow-1)*pagesize;
int limitEnd = pagesize;
List list = null;
try {
//用户ID
String userId = getUserId(request, response);
if (userId==null)
return MyResult.error(“查询失败,请登录!”);
record.setUserIdAdd(userId);
List entr = new ArrayList();
List ids = new ArrayList();
int count = 0;

        if(record.getServiceProAddr() != null && !record.getServiceProAddr().equals("")){
            JSONArray str_pro = (JSONArray) JSON.parse(record.getServiceProAddr());
            if(record.getServiceItemName() != null  && !record.getServiceItemName().equals("")){
                JSONArray str_item = (JSONArray) JSON.parse(record.getServiceItemName());
                //for 地址项目
                for (int i = 0; i < str_pro.length(); i++) {
                    record.setServiceProAddr(str_pro.get(i).toString());
                    for (int k = 0; k < str_item.length(); k++) {
                        record.setServiceItemName(str_item.get(k).toString());
                        list = enterpriseServiceDao.findByRecord(record, limitStart, limitEnd);
                        for (int j = 0; j < list.size(); j++) {
                            if(!ids.contains(list.get(j).getId())){
                                ids.add(list.get(j).getId());
                                entr.add(list.get(j));
                                count++;
                            }
                        }
                    }
                }
                list = new ArrayList<EnterpriseService>();
                list.addAll(entr);
            }else{
                for (int i = 0; i < str_pro.length(); i++) {
                    record.setServiceProAddr(str_pro.get(i).toString());
                    list = enterpriseServiceDao.findByRecord(record, limitStart, limitEnd);
                    for (int j = 0; j < list.size(); j++) {
                        if(!ids.contains(list.get(j).getId())){
                            ids.add(list.get(j).getId());
                            entr.add(list.get(j));
                            count++;
                        }
                    }
                }
                list = new ArrayList<EnterpriseService>();
                list.addAll(entr);
            }
        }else if(record.getServiceItemName() != null && !record.getServiceItemName().equals("")){
            //for 项目
            JSONArray str_item = (JSONArray) JSON.parse(record.getServiceItemName());
            for (int k = 0; k < str_item.length(); k++) {
                record.setServiceItemName(str_item.get(k).toString());
                list = enterpriseServiceDao.findByRecord(record, limitStart, limitEnd);
                for (int j = 0; j < list.size(); j++) {
                    if(!ids.contains(list.get(j).getId())){
                        ids.add(list.get(j).getId());
                        entr.add(list.get(j));
                        count++;
                    }
                }
            }
            list = new ArrayList<EnterpriseService>();
            list.addAll(entr);
        }else{
            //list
            list = enterpriseServiceDao.findByRecord(record, limitStart, limitEnd);
            count = enterpriseServiceDao.findByRecordCount(record);
        }
        enterpriseServiceDao.truncateTemp();
        for (int i = 0; i < list.size(); i++) {
            EnterpriseService es = list.get(i);
            enterpriseServiceDao.insertTemp(es);
        }
        List<EnterpriseService> el = enterpriseServiceDao.findByTempRecord(null, limitStart, limitEnd);
        int counts = enterpriseServiceDao.findByTempRecordCount(null);
        return MyResult.ok(counts, el);
    } catch (Exception e) {
        e.printStackTrace();
        return MyResult.error("查询失败");  
    }
}

用JSON.parse(str)转化为json数组后,把数组内容放一个查一次,查的时候 !ids.contains(list.get(j).getId()),避免重复,此处不包含查询分页,先把条件带进去查出结果,清空临时表后再插入到临时表,然后带上分页查询临时表,查出结果返回即可。

猜你喜欢

转载自blog.csdn.net/qq_28710139/article/details/81776813