按照用户名和角色查询用户liferay

需求:当登录的用户输入用户的名字和角色的时候,模糊查询,然后就是Ajax的异步请求刷新界面

首先在一个工具类中写上一条你要写的sql语句代码如下:

package com.ebizwindow.crm.utils;

import java.util.List;

import com.ebizwindow.crm.constants.SqlConst;
import com.ebizwindow.crm.constants.TableConst;
import com.ebizwindow.crm.model.TableDefinition;
import com.ebizwindow.crm.portlet.base.SystemStatus;
import com.ebizwindow.crm.service.OpportunityLocalServiceUtil;
import com.ebizwindow.crm.service.TableDefinitionLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.StringPool;

public class SQLUtil {
    private static final String PK_COLUMN_CREATEUSERID = "createUserId";
    private static final String PK_COLUMN_EDITUSERID = "editUserId";
    private static final String PK_COLUMN_AUDITUSERID = "auditUserId";
    private static final String PK_COLUMN_CLOSEUSERID = "closeUserId";
    private static final String PK_COLUMN_CONFIRMUSERID = "confirmUserId";
    private static final String PK_COLUMN_REQUESTUSERID = "requestUserId";
    private static final String PK_COLUMN_EXECUTORID = "executorId";
    private static final String PK_COLUMN_SUBMITUSERID = "submitUserId";
    private static final String PK_COLUMN_OWNERID = "ownerId";
    private static final String PK_COLUMN_UPID = "upId";
    private static final String PK_COLUMN_CUSTOMERID = "customerId";
    private static final String PK_COLUMN_CONTACTID = "contactId";
    private static final String PK_COLUMN_CONTRACTID = "contractId";
    private static final String PK_COLUMN_OPPORTUNITYID = "opportunityId";
    private static final String PK_COLUMN_QUOTATIONID = "quotationId";
    private static final String PK_COLUMN_CLUEID = "clueId";
    private static final String PK_COLUMN_ACTIVITYID = "activityId";
    private static final String PK_COLUMN_MARKETID = "marketId";
    private static final String PK_COLUMN_SALESTEMPLATEID = "salesTemplateId";
    private static final String PK_COLUMN_DEPARTMENTID = "departmentId";
    private static final String PK_COLUMN_PRODUCTID = "productId";
    private static final String PK_COLUMN_PROJECTID = "projectId";

    public static String getQueryValue(String queryValue, String columnName, long companyId) throws SystemException {
        String results = StringPool.BLANK;
        String query = StringPool.BLANK;
        if (columnName.equals(PK_COLUMN_CREATEUSERID)
                || columnName.equals(PK_COLUMN_EDITUSERID)
                || columnName.equals(PK_COLUMN_AUDITUSERID)
                || columnName.equals(PK_COLUMN_OWNERID)
                || columnName.equals(PK_COLUMN_CLOSEUSERID)
                || columnName.equals(PK_COLUMN_CONFIRMUSERID)
                || columnName.equals(PK_COLUMN_REQUESTUSERID)
                || columnName.equals(PK_COLUMN_SUBMITUSERID)
                || columnName.equals(PK_COLUMN_EXECUTORID) ) {

            query = "select userId from User_ where firstName like '%" + queryValue + "%'";
            
        } else if (columnName.equals(PK_COLUMN_UPID) || columnName.equals(PK_COLUMN_CUSTOMERID)) {
            
            query = "select customerId from CRM_Customer where chineseName like '%" + queryValue + "%'";
        
        } else if (columnName.equals(PK_COLUMN_CONTACTID)) {
            
            query = "select contactId from CRM_Contact where chineseName like '%" + queryValue + "%'";

        } else if (columnName.equals(PK_COLUMN_MARKETID)) {
            
            query = "select marketId from CRM_Market where name like '%" + queryValue + "%'";
    
        } else if (columnName.equals(PK_COLUMN_CLUEID)) {
            
            query = "select clueId from CRM_Clue where name like '%" + queryValue + "%'";
    
        } else if (columnName.equals(PK_COLUMN_OPPORTUNITYID)) {
            
            query = "select opportunityId from CRM_Opportunity where topic like '%" + queryValue + "%'";
    
        } else if (columnName.equals(PK_COLUMN_QUOTATIONID)) {
            
            query = "select quotationId from CRM_Quotation where name like '%" + queryValue + "%'";
    
        } else if (columnName.equals(PK_COLUMN_CONTRACTID)) {
            
            query = "select contractId from CRM_Contract where name like '%" + queryValue + "%'";
    
        } else if (columnName.equals(PK_COLUMN_ACTIVITYID)) {
            
            query = "select activityId from CRM_Activity where name like '%" + queryValue + "%'";
    
        } else if (columnName.equals(PK_COLUMN_SALESTEMPLATEID)) {
            
            query = "select salesTemplateId from CRM_SalesTemplate where name like '%" + queryValue + "%'";
    
        } else if (columnName.equals(PK_COLUMN_PRODUCTID)) {
            
            query = "select productId from CRM_Product where name like '%" + queryValue + "%'";
            
        } else if (columnName.equals(PK_COLUMN_DEPARTMENTID)) {
            
            query = "select departmentId from OPERATOR_Department where departmentName like '%" + queryValue + "%'";

        } else if (columnName.equals(PK_COLUMN_PROJECTID)) {
            
            query = "select projectId from CRM_Project where name like '%" + queryValue + "%'";

        }
        
        query += " and companyId = '" + companyId + "'";
        
        List<Long> entityIDs = OpportunityLocalServiceUtil.searchBySQLQueryString(query, -1, -1);
        
        String entityIDsStr = entityIDs.toString();
        results = StringPool.OPEN_PARENTHESIS + entityIDsStr.subSequence(1, entityIDsStr.length() - 1) + StringPool.CLOSE_PARENTHESIS;

        return results;
    }
    
    //private static Log _log = LogFactoryUtil.getLog(BasePortlet.class);

    public static String symbolToString(String symbol, String value) {
        String str = StringPool.BLANK;
        if (!symbol.equals(StringPool.BLANK)) {
            if (symbol.equals("eq") || symbol.equals(StringPool.EQUAL)) {

                str = " = '" + value + "'";

            } else if (symbol.equals("gt") || symbol.equals(StringPool.GREATER_THAN)) {

                str = " > '" + value + "'";

            } else if (symbol.equals("lt") || symbol.equals(StringPool.LESS_THAN)) {

                str = " < '" + value + "'";

            } else if (symbol.equals("gteq") || symbol.equals(StringPool.GREATER_THAN_OR_EQUAL)) {

                str = " >= '" + value + "'";

            } else if (symbol.equals("lteq") || symbol.equals(StringPool.LESS_THAN_OR_EQUAL)) {

                str = " <= '" + value + "'";

            } else if (symbol.equals("ne") || symbol.equals(StringPool.NOT_EQUAL)) {

                str = " <> '" + value + "'";

            } else if (symbol.equals("c")) {

                str = " like '%" + value + "%'";

            } else if (symbol.equals("sl")) {

                str = " like '" + value + "%'";
                
            } else if (symbol.equals("sr")) {

                str = " like '%" + value + "'";

            } else if (symbol.equals("nn")) {

                str = " <> '' ";

            } else if (symbol.equals("n")) {

                str = " = '' ";
                
            } else if (symbol.equals("isn")) {

                str = " is null ";
            } else if (symbol.equals("!eq")) {
                
                str = " != '" + value + "'";
                
            } else if (symbol.equals("tc")) {
                
                str = " in " + value + " ";
                
            }
        } else {
            str = " = '' ";
        }
        return str;
    }

    public static String getActivitySQL(long userId) throws SystemException {
        StringBuffer sb = new StringBuffer("select activity.activityId from CRM_Activity activity where (activity.executorId in ")
            .append(OperatorUtil.searchViewOperatorIds(userId,TableConst.ACTIVITY))
            .append(" or activity.createUserId in ")
            .append(OperatorUtil.searchViewOperatorIds(userId,TableConst.ACTIVITY))
            .append(")");
        return sb.toString();
    }
    
    public static String getCustomerSQL(long userId) throws SystemException {
        String sql = "select customer.customerId from CRM_Customer customer where 1=1 and (customer.ownerId in "
            + OperatorUtil.searchViewOperatorIds(userId, TableConst.CUSTOMER) + ")";
        
        return sql;
    }

    public static String getCustomerSQL4Dialog(long userId) throws SystemException {
        String sql = "select customer.customerId from CRM_Customer customer where customer.ownerId = '" + userId + "'";
        return sql;
    }
    
    public static String getContactSQL(long userId) throws SystemException {
        String sql = "select contact.contactId from CRM_Contact contact where (contact.ownerId in "
            + OperatorUtil.searchViewOperatorIds(userId,TableConst.CONTACT) + ")";
        return sql;
    }
    
    public static String getContactTop10SQL(long userId) throws SystemException {
        String sql = "select contact.contactId from CRM_Contact contact where (contact.ownerId in "
                + OperatorUtil.searchViewOperatorIds(userId,TableConst.CONTACT) + ") order by contact.createDate limit 10 ";
        return sql;
    }

    public static String getContractSQL(long userId) throws SystemException {
        String sql = "select contract.contractId from CRM_Contract contract where (contract.ownerId in "
                + OperatorUtil.searchViewOperatorIds(userId,TableConst.CONTRACT) + ")";
        return sql;
    }
    
    public static String getMarketSQL(long userId) throws SystemException {
        String sql = "select market.marketId from CRM_Market market where (market.ownerId in "
                + OperatorUtil.searchViewOperatorIds(userId,TableConst.MARKET)  + ")";
        return sql;
    }

    public static String getClueSQL(long userId) throws SystemException {
        String sql = "select clue.clueId from CRM_Clue clue where (clue.ownerId in "
            + OperatorUtil.searchViewOperatorIds(userId,TableConst.CLUE) + ") and clue.auditStatus='"+SystemStatus.Audit.getStatus()+"'";
        return sql;
    }
    
    public static String getOpportunitySQL(long userId) throws SystemException {
        String sql = "select opportunity.opportunityId from CRM_Opportunity opportunity where (opportunity.ownerId in "
            + OperatorUtil.searchViewOperatorIds(userId,TableConst.OPPORTUNITY) + ")";
        return sql;
    }

    public static String getOpportunityTop10SQL(long userId) throws SystemException {
        String sql = "select opportunity.opportunityId from CRM_Opportunity opportunity where (opportunity.ownerId in "
                + OperatorUtil.searchViewOperatorIds(userId,TableConst.OPPORTUNITY) + ") order by opportunity.createDate limit 10";
        return sql;
    }

    public static String getQuotationSQL(long userId) throws SystemException {
        String sql = "select quotation.quotationId from CRM_Quotation quotation where (quotation.ownerId in "
                + OperatorUtil.searchViewOperatorIds(userId,TableConst.QUOTATION) + ")";
        return sql;
    }
    
    public static String getOrderSQL(long userId) throws SystemException {
        String sql = "select order_.orderId from CRM_Order order_ where (order_.ownerId in "
            + OperatorUtil.searchViewOperatorIds(userId,TableConst.ORDER) + ")";
        
        return sql;
    }

    public static String getProductSQL(long companyId) throws SystemException {
        String sql = "select product.productId from CRM_Product product where product.companyId = '" + companyId + "'";
        return sql;
    }

    public static String getProjectSQL(long companyId) throws SystemException {
        String sql = "select project.projectId from CRM_Project project where project.companyId = '" + companyId + "'";
        return sql;
    }

    public static String getRPlanSQL(long userId) throws SystemException {
        String sql = "select receivablesPlan.receivablesPlanId from CRM_ReceivablesPlan receivablesPlan where (receivablesPlan.ownerId in "
             + OperatorUtil.searchViewOperatorIds(userId,TableConst.RPLAN) + ")";
        return sql;
    }
    
    public static String getRRecordSQL(long userId) throws SystemException{
        String sql = "select receivablesRecord.receivablesRecordId from CRM_ReceivablesRecord receivablesRecord where (receivablesRecord.ownerId in "
             + OperatorUtil.searchViewOperatorIds(userId,TableConst.RRECORD) + ")";
        return sql;
    }
    
    public static String getCreditRightsSQL(long userId) throws SystemException{
        String sql = "select credit.CRId from CR_CreditRights credit where (credit.ownerId in " +
            OperatorUtil.searchViewOperatorIds(userId,TableConst.CreditRights)+" ) ";
        return sql;
    }
    
    //得到部门下的所有的用户
    public static String getOperatorSQL(long departmentId) throws SystemException{
        //select operator.operatorId from Operator_operator as operator where operator.departmentId in (204);
        String sql = "select operator.operatorId from Operator_operator as operator where (operator.operatorId in "+OperatorUtil.searchViewOperatorIds(departmentId,TableConst.OPERATOR_Operator)+")";
        
        return sql;
        
    }

    public static String getSQLBeginningByTableDefinitionId(long tableDefinitionId) throws PortalException, SystemException {
        String result = "";
        TableDefinition tableDefinition = TableDefinitionLocalServiceUtil.getTableDefinition(tableDefinitionId);
        String tableName = tableDefinition.getTableName();
        if (tableName.equals(TableConst.CRM_Customer)) {
            result = SqlConst.CUSTOMER_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Customer)) {
            result = SqlConst.CUSTOMER_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Contact)) {
            result = SqlConst.CONTACT_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Market)) {
            result = SqlConst.MARKET_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Clue)) {
            result = SqlConst.CLUE_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Activity)) {
            result = SqlConst.ACTIVITY_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Opportunity)) {
            result = SqlConst.OPPORTUNITY_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Quotation)) {
            result = SqlConst.QUOTATION_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Contract)) {
            result = SqlConst.CONTRACT_SQL_BEGINNING;
        } else if (tableName.equals(TableConst.CRM_Product)) {
            result = SqlConst.PRODUCT_SQL_BEGINNING;
        } else {
            result = SqlConst.CUSTOMER_SQL_BEGINNING;
        }
        return result;
    }
    
    public static String filterQuery(String columnName){
        if (columnName.equals("type") || columnName.equals("code")) {
            return columnName + StringPool.UNDERLINE;
        } else {
            return columnName;
        }
    }
    
    //private static Log _log = LogFactoryUtil.getLog(SQLUtil.class);

}
上述红色部分就是相应的代码部分,这个部分的代码,意思是找到所有的id,我们可以根据这个id找到这个实体的对象,就找到相应的数据了。

其次我们需要在我们的项目中写上一个按照sql语句查询的方法,这个是我们自己定义的,因为在liferay中,我们只能定义一些基本的增加修改和删除,在service.xml中我们是不能

做模糊查询的,里面定义的finder全部是精确查询。

我们首先应该在service.persistence这个包中写上一个你要查询的实体的类XXFinderImpl然后继承BasePersistenceImpl实现XXFinder接口比如:

package com.ebizwindow.operator.service.persistence;

import java.util.List;

import com.ebizwindow.operator.model.Operator;
import com.liferay.portal.kernel.dao.orm.Query;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.SQLQuery;
import com.liferay.portal.kernel.dao.orm.Session;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;

public class OperatorFinderImpl extends BasePersistenceImpl<Operator> implements OperatorFinder{

    //自己定义的查询的方法。
    public List<Long> findBySQLQueryString(String queryString, int start,
            int end) throws SystemException {
    
        List<Long> list = null;
        if (list == null) {
            Session session = null;
            try {
                session = openSession();
                SQLQuery q = session.createSQLQuery(queryString);
                list = (List<Long>) QueryUtil.list(q, getDialect(), start, end);
            } catch (Exception e) {
                throw new SystemException(e);
            } finally {
                closeSession(session);
            }
        }
        
        return list;
    }
    
    //自己定义的HQL查询的方法
    //传过来的用户的条件是,操作员的name,和role,分页查询的方法
    public List<Operator> findOperators(String queryString,int start,int end,String name,String role) throws SystemException{
        List<Operator> list = null;
        
        if (list == null) {
            Session session = null;
            try{
                session = openSession();
                Query query = session.createQuery(queryString);
                query.setString(0, name);
                query.setString(1, role);
                list = (List) QueryUtil.list(query, getDialect(), start, end);
                
            }catch(Exception e){
                throw new SystemException(e);
            }finally{
                closeSession(session);
            }
        }
        return list;
    }
 
}

然后我们就在portlet中写上自己的实现就行了,比如:

else if(actionName.equals("operator.search")) {//查询的方法
                    //得到界面上传过来的值
                    String name = ParamUtil.getString(actionRequest, "customer_name",StringPool.BLANK);
                    //select * from operator_operator as operator where operator.roleId in
                    //(select roleId from operator_role where roleName like "%员%" ) and operator.name like "%张妍妍%";
                    String role = ParamUtil.getString(actionRequest, "customer_role",StringPool.BLANK);
                    //得到所在的部门
                    long departmentId = ParamUtil.getLong(actionRequest, "departmentId", 0L);
                    
                    //根据id,用逗号隔开select roleId from operator_role where roleName like "%员%";
                    String idsql = "select roleId from OPERATOR_Role where roleName like '%" + role + "%'";
                    
                    List<Long> ids = OperatorLocalServiceUtil.searchBySQLQueryString(idsql, QueryUtil.ALL_POS, QueryUtil.ALL_POS);
                    String strsql = ids.toString();
                    String ss = StringPool.OPEN_PARENTHESIS + strsql.subSequence(1, strsql.length() - 1)+ StringPool.CLOSE_PARENTHESIS;
                    
                    StringBuffer query = new StringBuffer();
                    query.append("select operator.operatorId from ");
                    query.append(TableConst.OPERATOR_Operator);
                    query.append(" as operator ");
                    query.append(" where 1=1 ");
                    
                    if (!"".equals(role) &&!ss.equals("()")) {
                        query.append(" and ");
                        query.append(" operator.roleId in ");
                        query.append(ss);
                    }
                    if (!"".equals(name)) {
                        query.append(" and ");
                        query.append("operator.name ");
                        query.append(" like '%");
                        query.append(name);
                        query.append("%'");
                    }
                    
                    if (departmentId != 0) {
                        
                        List<Operator> alloperator =  getOperatorByDepartmentId(departmentId);
                        
                        String operatorids = "(";
                        
                        for (int i = 0;i<alloperator.size();i++) {
                            operatorids+=alloperator.get(i).getOperatorId();
                            if (i != alloperator.size()-1) {
                                operatorids+=",";
                            }
                            
                            
                        }
                        operatorids+=")";
                        
                        
                        query.append(" and ");
                        query.append(" operator.operatorId in ");
                        query.append(operatorids);
                    }
                    
                    listOperator(actionRequest,query.toString());
                    
                    //这个地方就是把前台传过来的name,role传给界面上显示出来。
                    
                    actionRequest.setAttribute("customer_name", name);
                    actionRequest.setAttribute("customer_role", role);
                    
                    forward = "/jsp/operator/operator-list.jsp";

 

//根据sql语句查找数据
    private void listOperator(PortletRequest portletRequest,String query) throws PortalException, SystemException {
        
        List<Long> operatorIds = OperatorLocalServiceUtil.searchBySQLQueryString(query, QueryUtil.ALL_POS, QueryUtil.ALL_POS);//查找所有的
        
        List<Operator> operators = new ArrayList<Operator>();
        
        for (int i = 0;i<operatorIds.size();i++) {
            Long operatorId = Long.valueOf(String.valueOf(operatorIds.get(i)));
            Operator operator = OperatorLocalServiceUtil.getOperator(operatorId);
            operators.add(operator);
            
        }
    
        portletRequest.setAttribute("operators", operators);
        
    }

好吧!后台代码已经写成了,在界面上我们需要定义自己的路径然后找到这个地址。

    function search(){
        var url ='<%=searchCustomerURL %>';
        var customerName = $("input[name='customer_name']").val();
        var customerRole = $("input[name='customer_role']").val();
        $.get(url, {customer_name:customerName,customer_role:customerRole}, function(response) {
            if (response.length > 0) {
                //$('#<portlet:namespace/>reportTips').html(treeNode.name);
                $('#<portlet:namespace/>reportListBox').empty().html(response);
            }
        });
        
        
    }

 

<portlet:actionURL var="searchCustomerURL" windowState="<%=LiferayWindowState.EXCLUSIVE.toString() %>">
        <portlet:param name="operation" value="operator.search"/>
        <portlet:param name="departmentId" value="<%=String.valueOf(departmentId) %>"/>
    </portlet:actionURL>


    <div class="list-wrapper">
        <div id="searchCustomer" align="right">
            姓名&nbsp;<input class="" id="aui_3_4_0_1_2004" name="customer_name" id = "customer_name" type="text" value="<%=name %>">
            角色&nbsp;<input class="" id="aui_3_4_0_1_1962" name="customer_role" id = "customer_role" type="text" value = "<%=roleName %>">
            <input value="搜索" type="button" οnclick="search();">
        </div>

很简单的查询就实现了

 

转载于:https://www.cnblogs.com/airycode/p/4910309.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值