shop--10.店铺列表(后台)

 分页读取与无限滚动

多条件排列组合查询店铺信息

dao层在查询店铺列表时,加上parentId不为空时,进行二级子列表的查询

<select id="queryShopList" resultMap="shopMap">
        SELECT
        s.shop_id,
        s.shop_name,
        s.shop_desc,
        s.shop_addr,
        s.phone,
        s.shop_img,
        s.priority,
        s.create_time,
        s.last_edit_time,
        s.status,
        s.advice,
        a.area_id,
        a.area_name,
        sc.shop_category_id,
        sc.shop_category_name
        FROM
        shop s,
        area a,
        shop_category sc
        <where>
            <if test="shopCondition.shopCategory != null and
            shopCondition.shopCategory.shopCategoryId != null">
                AND s.shop_category_id=#{shopCondition.shopCategory.shopCategoryId}
            </if>
            <if test="shopCondition.shopCategory != null
            and shopCondition.shopCategory.parent != null
            and shopCondition.shopCategory.parent.ShopCategoryId != null">
                AND s.shop_category_id IN (
                SELECT shop_category_id
                FROM shop_category
                WHERE parent_id=#{shopCondition.shopCategory.parent.shopCategoryId})
            </if>
            <if test="shopCondition.area != null and shopCondition.area.areaId != null">
                AND s.area_id=#{shopCondition.area.areaId}
            </if>
            <if test="shopCondition.status != null">
                AND s.status=#{shopCondition.status}
            </if>
            <if test="shopCondition.owner != null and shopCondition.owner.userId != null">
                AND s.owner_id=#{shopCondition.owner.userId}
            </if>
            <if test="shopCondition.shopName != null">
                AND s.shop_name LIKE '%${shopCondition.shopName}%'
            </if>
            AND
            s.area_id=a.area_id
            AND
            s.shop_category_id=sc.shop_category_id
        </where>
        ORDER BY
        s.priority DESC
        LIMIT #{rowIndex},#{pageSize};
    </select>




    <!--public int queryShopCount(@Param("shopCondition")Shop shopCondition);-->
    <select id="queryShopCount" resultType="int" parameterType="com.shop.bean.Shop">
        SELECT
        count(1),
        s.shop_id,
        s.shop_name,
        s.shop_desc,
        s.shop_addr,
        s.phone,
        s.shop_img,
        s.priority,
        s.create_time,
        s.last_edit_time,
        s.status,
        s.advice,
        a.area_id,
        a.area_name,
        sc.shop_category_id,
        sc.shop_category_name
        FROM
        shop s,
        area a,
        shop_category sc
        <where>
            <if test="shopCondition.shopCategory != null and
            shopCondition.shopCategory.shopCategoryId != null">
                AND s.shop_category_id=#{shopCondition.shopCategory.shopCategoryId}
            </if>
            <if test="shopCondition.shopCategory != null
            and shopCondition.shopCategory.parent != null
            and shopCondition.shopCategory.parent.ShopCategoryId != null">
                AND s.shop_category_id IN (
                SELECT shop_category_id
                FROM shop_category
                WHERE parent_id=#{shopCondition.shopCategory.parent.shopCategoryId})
            </if>
            <if test="shopCondition.area != null and shopCondition.area.areaId != null">
                AND s.area_id=#{shopCondition.area.areaId}
            </if>
            <if test="shopCondition.status != null">
                AND s.status=#{shopCondition.status}
            </if>
            <if test="shopCondition.owner != null and shopCondition.owner.userId != null">
                AND s.owner_id=#{shopCondition.owner.userId}
            </if>
            <if test="shopCondition.shopName != null">
                AND s.shop_name LIKE '%${shopCondition.shopName}%'
            </if>
            AND
            s.area_id=a.area_id
            AND
            s.shop_category_id=sc.shop_category_id
        </where>

  

service层不变

controller层

/**
     * 返回商品列表里的ShopCategory列表(一级或二级),以及区域信息列表
     * @param request
     * @return
     */
    @RequestMapping(value="/listshoppageinfo", method= RequestMethod.GET)
    @ResponseBody
    private Map<String, Object> listShopPageInfo(HttpServletRequest request){
        Map<String, Object> modelMap = new HashMap<>(  );

        //从前端获取parentId
        long parentId = HttpServletRequestUtil.getLong(request, "parentId");

        List<ShopCategory> shopCategoryList = null;
        //如果parentId不为null,则是点击某一个商品列表时进行的查询,则取出该parent级别下的二级shopCategory列表
        if(parentId != -1){
            try{
                ShopCategory shopCategoryCondition = new ShopCategory();
                ShopCategory parentShopCategory = new ShopCategory();
                parentShopCategory.setShopCategoryId( parentId );
                shopCategoryCondition.setParent( parentShopCategory );
                shopCategoryList = shopCategoryService.getShopCategoryList( shopCategoryCondition );
            } catch (Exception e){
                modelMap.put( "success", false );
                modelMap.put( "errMsg", e.toString() );
            }
        } else{
            try{
                //如果parentId不存在,则是点击全部商品时进行的查询,则取出所有商品类别的列表
                shopCategoryList = shopCategoryService.getShopCategoryList( null );
            } catch (Exception e){
                modelMap.put( "success", false );
                modelMap.put( "errMsg", e.toString() );
            }
        }
        modelMap.put( "shopCategoryList", shopCategoryList );


        //获取区域列表信息
        List<Area> areaList = null;
        try{
            areaList = areaService.getAreaList();
            modelMap.put( "areaList", areaList );
        } catch(Exception e){
            modelMap.put( "success", false );
            modelMap.put( "errMsg", e.toString() );
        }

        modelMap.put( "success", true );
        return modelMap;
    }


    /**
     * 获取指定查询条件下的店铺信息
     * @param request
     * @return
     */
    @RequestMapping(value="/listshop", method=RequestMethod.GET)
    @ResponseBody
    private Map<String, Object> listShop(HttpServletRequest request){
        Map<String, Object> modelMap = new HashMap<>(  );
        //获取页码pageIndex
        int pageIndex = HttpServletRequestUtil.getInt( request, "pageIndex" );
        //获取一页需要的数据条数pageSize
        int pageSize = HttpServletRequestUtil.getInt( request, "pageSize" );
        //非空判断
        if(pageIndex > -1 && pageSize > -1){
            //试着获取一级类别Id
            long parentId = HttpServletRequestUtil.getLong( request, "parentId");
            //试着获取指定的二级类别Id
            long shopCategoryId = HttpServletRequestUtil.getLong( request, "shopCategoryId" );
            //试着获取区域Id
            int areaId = HttpServletRequestUtil.getInt( request, "areaId" );
            //试着获取模糊查询的名字
            String shopName = HttpServletRequestUtil.getString( request,  "shopName");
            //获取组合后的查询条件
            Shop shopCondition = compactShopConditionForSearch(parentId, shopCategoryId, areaId, shopName);
            //根据查询条件和分页信息获取店铺列表,并返回总数
            ShopExecution shopExecution = shopService.getShopList( shopCondition, pageIndex, pageSize );

            modelMap.put( "shopList", shopExecution.getShopList() );
            modelMap.put( "count", shopExecution.getCount() );
            modelMap.put( "success", true );
        } else{
            modelMap.put( "success", false );
            modelMap.put( "errMsg", "empty pageSize or pageIndex");
        }
        return modelMap;
    }

    /**
     * 组合查询条件,封装进shopCondition中
     * @param parentId
     * @param shopCategoryId
     * @param areaId
     * @param shopName
     * @return
     */
    private Shop compactShopConditionForSearch(long parentId, long shopCategoryId, int areaId, String shopName) {
        Shop shopCondition = new Shop();
        if(parentId != -1){
            //查询parentId下的二级店铺列表
            ShopCategory childCategory = new ShopCategory();
            ShopCategory parentCategory = new ShopCategory();
            parentCategory.setShopCategoryId( parentId );
            childCategory.setParent( parentCategory );
            shopCondition.setShopCategory( childCategory );
        }

        if(shopCategoryId != -1){
            //查询某个二级类别下的店铺列表
            ShopCategory shopCategory = new ShopCategory();
            shopCategory.setShopCategoryId( shopCategoryId );
            shopCondition.setShopCategory( shopCategory );
        }

        if(areaId != -1){
            //查询位于某个区域下的店铺列表
            Area area = new Area();
            area.setAreaId( areaId );
            shopCondition.setArea( area );
        }

        if(shopName != null){
            //模糊查询  查询店铺名中包含shopName的店铺列表
            shopCondition.setShopName( shopName );
        }

        //同时设置只展示status = 1 的店铺
        shopCondition.setStatus( 1 );
        return shopCondition;
    }

  

 

posted @ 2018-05-11 15:58  SkyeAngel  阅读(426)  评论(0编辑  收藏  举报