Browse Source

新增优选和精选接口

夏文涛 2 years ago
parent
commit
e269f7f1bf

+ 174 - 0
mhotel/src/com/happy/action/AppHomePageAction.java

@@ -127,6 +127,180 @@ public class AppHomePageAction extends ActionSupport implements ServletRequestAw
 
 
     /**
+     * 进入首页,展示优选民宿数据列表
+     * 优选按总评分倒序排序
+     * queryValue 查询字段
+     * hotel_townshipId 所属乡镇
+     *
+     * @return
+     */
+    public String preferredPage() {
+        // 获取民宿列表
+        IPage<Hotel> iPage = appHomePageService.getPreferredHotelList(queryValue, hotel_township, type, page, rows);
+        if (iPage.getPageList() != null && iPage.getPageList().size() > 0) {
+            List<Integer> managerIds = iPage.getPageList().stream().map(Hotel::getManagerId).collect(Collectors.toList());
+
+            //2023-09-22 A-jax 获取最低价
+            if (managerIds.size() > 0) {
+                List<HotelPriceDataVo> prices = housePriceService.queryHotelPriceDatas(StringUtils.join(managerIds, ","), TimeExchange.getDateStr());
+
+                List<HotelPriceOneDataVo> oneDatas = new ArrayList<>();
+                //获取当天的
+                for (HotelPriceDataVo hp : prices) {
+                    HotelPriceOneDataVo oneData = new HotelPriceOneDataVo();
+                    oneData.setSetDate(TimeExchange.getDateStr());
+                    oneData.setCreateDate(hp.getCreateDate());
+                    oneData.setPrice(hp.getPrice());
+                    oneData.setManagerId(hp.getManagerId());
+                    oneDatas.add(oneData);
+                }
+
+                /**
+                 * 根据房型ID处理重复的数据
+                 */
+                List<HotelPriceOneDataVo> newOneDatas = new ArrayList<>();
+                if (oneDatas.size() > 0) {
+                    for (Integer managerId : managerIds) {
+                        Optional<HotelPriceOneDataVo> one = oneDatas.stream().filter(e -> e.getManagerId().equals(managerId)).sorted(Comparator.comparing(HotelPriceOneDataVo::getCreateDate, Comparator.reverseOrder())).findFirst();
+                        if (one != null && one.isPresent()) {
+                            HotelPriceOneDataVo oneData = new HotelPriceOneDataVo();
+                            oneData.setSetDate(one.get().getSetDate());
+                            oneData.setCreateDate(one.get().getCreateDate());
+                            oneData.setPrice(one.get().getPrice());
+                            oneData.setManagerId(one.get().getManagerId());
+                            newOneDatas.add(oneData);
+                        }
+                    }
+                }
+
+                /**
+                 * 获取商家集合中最低房型价格
+                 */
+                List<PriceHotelDataVo> mins = houseService.gethotelMinPrice(StringUtils.join(managerIds, ","));
+                DecimalFormat decimalFormat = new DecimalFormat("#####.##");
+                for (Hotel hotel : iPage.getPageList()) {
+                    //2023-11-09 A-jax 获取剩余房间数
+                    List<OwnerHouseDto> result = adminManagerService.getTotalManageCount(hotel_township, type);
+                    if(result != null && result.size() > 0){
+                        Optional<OwnerHouseDto> mhd = result.stream().filter(e -> e.getManagerId().equals(hotel.getManagerId())).findFirst();
+                        if(mhd != null && mhd.isPresent()){
+                            hotel.setRoomNumber(mhd.get().getResidueHouseNum());
+                            hotel.setRoom_number_calc(mhd.get().getTotalHouseNum().toString());
+                        }
+                    }
+
+                    Optional<HotelPriceOneDataVo> one = newOneDatas.stream().filter(e -> e.getManagerId().equals(hotel.getManagerId())).findFirst();
+                    Optional<PriceHotelDataVo> min = mins.stream().filter(e -> e.getManagerId().equals(hotel.getManagerId())).findFirst();
+                    if (one != null && one.isPresent() && min != null && min.isPresent()) {
+                        if(one.get().getPrice() > min.get().getPrice()){
+                            hotel.setMin_price(decimalFormat.format(min.get().getPrice()));
+                        }else {
+                            hotel.setMin_price(decimalFormat.format(one.get().getPrice()));
+                        }
+                    } else {
+                        if (min != null && min.isPresent()) {
+                            hotel.setMin_price(decimalFormat.format(min.get().getPrice()));
+                        }
+                    }
+                }
+
+            }
+        }
+
+        // 用户访问量数据
+        userVisitsDao.add(userId);
+        ResponseUtil.writeJsonIPage(ServletActionContext.getResponse(), iPage);
+        return null;
+    }
+
+    /**
+     * 进入首页,展示精选民宿数据列表
+     * 精选按总销售量倒序排序
+     * queryValue 查询字段
+     * hotel_townshipId 所属乡镇
+     *
+     * @return
+     */
+    public String selectedPage() {
+        // 获取民宿列表
+        IPage<Hotel> iPage = appHomePageService.getSelectedHotelList(queryValue, hotel_township, type, page, rows);
+        if (iPage.getPageList() != null && iPage.getPageList().size() > 0) {
+            List<Integer> managerIds = iPage.getPageList().stream().map(Hotel::getManagerId).collect(Collectors.toList());
+
+            //2023-09-22 A-jax 获取最低价
+            if (managerIds.size() > 0) {
+                List<HotelPriceDataVo> prices = housePriceService.queryHotelPriceDatas(StringUtils.join(managerIds, ","), TimeExchange.getDateStr());
+
+                List<HotelPriceOneDataVo> oneDatas = new ArrayList<>();
+                //获取当天的
+                for (HotelPriceDataVo hp : prices) {
+                    HotelPriceOneDataVo oneData = new HotelPriceOneDataVo();
+                    oneData.setSetDate(TimeExchange.getDateStr());
+                    oneData.setCreateDate(hp.getCreateDate());
+                    oneData.setPrice(hp.getPrice());
+                    oneData.setManagerId(hp.getManagerId());
+                    oneDatas.add(oneData);
+                }
+
+                /**
+                 * 根据房型ID处理重复的数据
+                 */
+                List<HotelPriceOneDataVo> newOneDatas = new ArrayList<>();
+                if (oneDatas.size() > 0) {
+                    for (Integer managerId : managerIds) {
+                        Optional<HotelPriceOneDataVo> one = oneDatas.stream().filter(e -> e.getManagerId().equals(managerId)).sorted(Comparator.comparing(HotelPriceOneDataVo::getCreateDate, Comparator.reverseOrder())).findFirst();
+                        if (one != null && one.isPresent()) {
+                            HotelPriceOneDataVo oneData = new HotelPriceOneDataVo();
+                            oneData.setSetDate(one.get().getSetDate());
+                            oneData.setCreateDate(one.get().getCreateDate());
+                            oneData.setPrice(one.get().getPrice());
+                            oneData.setManagerId(one.get().getManagerId());
+                            newOneDatas.add(oneData);
+                        }
+                    }
+                }
+
+                /**
+                 * 获取商家集合中最低房型价格
+                 */
+                List<PriceHotelDataVo> mins = houseService.gethotelMinPrice(StringUtils.join(managerIds, ","));
+                DecimalFormat decimalFormat = new DecimalFormat("#####.##");
+                for (Hotel hotel : iPage.getPageList()) {
+                    //2023-11-09 A-jax 获取剩余房间数
+                    List<OwnerHouseDto> result = adminManagerService.getTotalManageCount(hotel_township, type);
+                    if(result != null && result.size() > 0){
+                        Optional<OwnerHouseDto> mhd = result.stream().filter(e -> e.getManagerId().equals(hotel.getManagerId())).findFirst();
+                        if(mhd != null && mhd.isPresent()){
+                            hotel.setRoomNumber(mhd.get().getResidueHouseNum());
+                            hotel.setRoom_number_calc(mhd.get().getTotalHouseNum().toString());
+                        }
+                    }
+
+                    Optional<HotelPriceOneDataVo> one = newOneDatas.stream().filter(e -> e.getManagerId().equals(hotel.getManagerId())).findFirst();
+                    Optional<PriceHotelDataVo> min = mins.stream().filter(e -> e.getManagerId().equals(hotel.getManagerId())).findFirst();
+                    if (one != null && one.isPresent() && min != null && min.isPresent()) {
+                        if(one.get().getPrice() > min.get().getPrice()){
+                            hotel.setMin_price(decimalFormat.format(min.get().getPrice()));
+                        }else {
+                            hotel.setMin_price(decimalFormat.format(one.get().getPrice()));
+                        }
+                    } else {
+                        if (min != null && min.isPresent()) {
+                            hotel.setMin_price(decimalFormat.format(min.get().getPrice()));
+                        }
+                    }
+                }
+
+            }
+        }
+
+        // 用户访问量数据
+        userVisitsDao.add(userId);
+        ResponseUtil.writeJsonIPage(ServletActionContext.getResponse(), iPage);
+        return null;
+    }
+
+    /**
      * 进入首页,展示民宿数据列表
      * queryValue 查询字段
      * hotel_townshipId 所属乡镇

+ 12 - 10
mhotel/src/com/happy/action/articleTweetAction.java

@@ -728,16 +728,18 @@ public class articleTweetAction extends BaseController implements ModelDriven<Ar
             List<FileInfo> fileInfos = articleTweetService.queryList("and link_id in (" + articleIds + ")");
 
             for (ArticleListVo data : result.getPageList()) {
-                List<FileInfo> fileInfoList = fileInfos.stream().filter(e -> e.getLinkId().equals(data.getId().toString())).collect(Collectors.toList());
-                if (fileInfoList != null) {
-                    if (fileInfoList.size() > 1) {
-                        data.setImage(fileInfoList.get(0).getUrl());
-                    } else if (fileInfoList.size() == 1) {
-                        String url = fileInfoList.get(0).getUrl();
-                        if (!url.endsWith("jpg") && !url.endsWith("png")) {
-                            data.setVideo(fileInfoList.get(0).getUrl());
-                        } else {
-                            data.setImage(url);
+                if(fileInfos != null){
+                    List<FileInfo> fileInfoList = fileInfos.stream().filter(e -> e.getLinkId().equals(data.getId().toString())).collect(Collectors.toList());
+                    if (fileInfoList != null) {
+                        if (fileInfoList.size() > 1) {
+                            data.setImage(fileInfoList.get(0).getUrl());
+                        } else if (fileInfoList.size() == 1) {
+                            String url = fileInfoList.get(0).getUrl();
+                            if (!url.endsWith("jpg") && !url.endsWith("png")) {
+                                data.setVideo(fileInfoList.get(0).getUrl());
+                            } else {
+                                data.setImage(url);
+                            }
                         }
                     }
                 }

+ 23 - 0
mhotel/src/com/happy/dao/HotelDao.java

@@ -53,6 +53,7 @@ public interface HotelDao {
 
     int queryTotalPrice(String sqlx);
 
+
     /**
      * 描述:获取总条数
      * @param sqlx
@@ -76,4 +77,26 @@ public interface HotelDao {
      * 00
      */
     public List<Hotel> queryPagePrice(String sqlx, int page, int rows);
+
+    /**
+     * 优选查询列表,加最底房价
+     * @param sqlx
+     * @param page
+     * @param rows
+     * @return
+     * 00
+     */
+    public List<Hotel> queryPreferredPagePrice(String sqlx, int page, int rows);
+
+    /**
+     * 精选查询列表,加最底房价
+     * @param sqlx
+     * @param page
+     * @param rows
+     * @return
+     * 00
+     */
+    public List<Hotel> querySelectedPagePrice(String sqlx, int page, int rows);
+
+
 }

+ 57 - 2
mhotel/src/com/happy/dao/impl/HotelImplDao.java

@@ -171,13 +171,13 @@ public class HotelImplDao implements HotelDao {
     public List<Hotel> queryPagePrice(String sqlx, int page, int rows) {
         SqlUtil.filterKeyword(sqlx);
         int start = (page - 1) * rows;// 每页的起始下标
-        String sql = "SELECT a.*,b.min_price,c.hotel_township,d.hotel_township_name, e.h_type_name,c.hotel_name,c.link_pro_url,(SELECT round( AVG( score ), 1 ) as score FROM `booking_comment` bc where bc.comment_parent_id IS NULL AND bc.hotel_id = a.id AND `status` = 1) as score" +
+        String sql = "SELECT a.*,(select Count(*) from booking where hotel_id = a.id and order_status = 5) as booking_num,b.min_price,c.hotel_township,d.hotel_township_name, e.h_type_name,c.hotel_name,c.link_pro_url,(SELECT round( AVG( score ), 1 ) as score FROM `booking_comment` bc where bc.comment_parent_id IS NULL AND bc.hotel_id = a.id AND `status` = 1) as score" +
                 " FROM `hotel` a " +
                 "left join (select manager_id,min(price) min_price from house where status=1 group by manager_id) b on a.manager_id = b.manager_id " +
                 "left join (select id,manager_id,hotel_township,hotel_name,type,status,link_pro_url from admin_manager ) c on a.manager_id = c.id " +
                 "LEFT JOIN (  SELECT  id,name as hotel_township_name,status  FROM  hotel_dict GROUP BY  id) d ON d.id = c.hotel_township " +
                 "LEFT JOIN (  SELECT  id,name as h_type_name  FROM  hotel_dict GROUP BY  id) e ON e.id = a.htype      " +
-                " WHERE hstatus = 1 and a.status=1 and c.status = 1 "+sqlx+" ORDER BY id DESC limit :start,:rows ";
+                " WHERE hstatus = 1 and a.status=1 and c.status = 1 "+sqlx+" ORDER BY booking_num DESC limit :start,:rows ";
         MapSqlParameterSource sps = new MapSqlParameterSource();
         sps.addValue("start", start);
         sps.addValue("rows", rows);
@@ -186,6 +186,61 @@ public class HotelImplDao implements HotelDao {
         if (list != null && list.size() > 0) return list;
         return null;
     }
+
+    /**
+     * 优选 按评分倒序排序
+     * @param sqlx
+     * @param page
+     * @param rows
+     * @return
+     */
+    @Override
+    public List<Hotel> queryPreferredPagePrice(String sqlx, int page, int rows) {
+        SqlUtil.filterKeyword(sqlx);
+        int start = (page - 1) * rows;// 每页的起始下标
+        String sql = "SELECT a.*,(SELECT round( AVG( score ), 1 ) as score FROM booking_comment WHERE comment_parent_id IS NULL AND hotel_id = a.id AND status = 1) as score_num,b.min_price,c.hotel_township,d.hotel_township_name, e.h_type_name,c.hotel_name,c.link_pro_url,(SELECT round( AVG( score ), 1 ) as score FROM `booking_comment` bc where bc.comment_parent_id IS NULL AND bc.hotel_id = a.id AND `status` = 1) as score" +
+                " FROM `hotel` a " +
+                "left join (select manager_id,min(price) min_price from house where status=1 group by manager_id) b on a.manager_id = b.manager_id " +
+                "left join (select id,manager_id,hotel_township,hotel_name,type,status,link_pro_url from admin_manager ) c on a.manager_id = c.id " +
+                "LEFT JOIN (  SELECT  id,name as hotel_township_name,status  FROM  hotel_dict GROUP BY  id) d ON d.id = c.hotel_township " +
+                "LEFT JOIN (  SELECT  id,name as h_type_name  FROM  hotel_dict GROUP BY  id) e ON e.id = a.htype      " +
+                " WHERE hstatus = 1 and a.status=1 and c.status = 1 "+sqlx+" ORDER BY score_num DESC limit :start,:rows ";
+        MapSqlParameterSource sps = new MapSqlParameterSource();
+        sps.addValue("start", start);
+        sps.addValue("rows", rows);
+        List<Hotel> list = namedParameterJdbcTemplate.query(sql, sps,
+                new BeanPropertyRowMapper<>(Hotel.class));
+        if (list != null && list.size() > 0) return list;
+        return null;
+    }
+
+    /**
+     * 精选 按销售量倒序排序
+     * @param sqlx
+     * @param page
+     * @param rows
+     * @return
+     */
+    @Override
+    public List<Hotel> querySelectedPagePrice(String sqlx, int page, int rows) {
+        SqlUtil.filterKeyword(sqlx);
+        int start = (page - 1) * rows;// 每页的起始下标
+        String sql = "SELECT a.*,(select Count(*) from booking where hotel_id = a.id and order_status = 5) as booking_num,b.min_price,c.hotel_township,d.hotel_township_name, e.h_type_name,c.hotel_name,c.link_pro_url,(SELECT round( AVG( score ), 1 ) as score FROM `booking_comment` bc where bc.comment_parent_id IS NULL AND bc.hotel_id = a.id AND `status` = 1) as score" +
+                " FROM `hotel` a " +
+                "left join (select manager_id,min(price) min_price from house where status=1 group by manager_id) b on a.manager_id = b.manager_id " +
+                "left join (select id,manager_id,hotel_township,hotel_name,type,status,link_pro_url from admin_manager ) c on a.manager_id = c.id " +
+                "LEFT JOIN (  SELECT  id,name as hotel_township_name,status  FROM  hotel_dict GROUP BY  id) d ON d.id = c.hotel_township " +
+                "LEFT JOIN (  SELECT  id,name as h_type_name  FROM  hotel_dict GROUP BY  id) e ON e.id = a.htype      " +
+                " WHERE hstatus = 1 and a.status=1 and c.status = 1 "+sqlx+" ORDER BY booking_num DESC limit :start,:rows ";
+        MapSqlParameterSource sps = new MapSqlParameterSource();
+        sps.addValue("start", start);
+        sps.addValue("rows", rows);
+        List<Hotel> list = namedParameterJdbcTemplate.query(sql, sps,
+                new BeanPropertyRowMapper<>(Hotel.class));
+        if (list != null && list.size() > 0) return list;
+        return null;
+    }
+
     @Override
     public int queryTotalPrice(String sqlx) {
 //        String sql = "SELECT count(*) FROM`hotel` a " +

+ 18 - 0
mhotel/src/com/happy/service/AppHomePageService.java

@@ -31,6 +31,24 @@ public interface AppHomePageService {
     IPage<Hotel> getHotelList(String queryValue,String hotel_township,int type, int page, int rows);
 
     /**
+     * APP端进入首页优选查询功能
+     * @param queryValue
+     * @param page
+     * @param rows
+     * @return
+     */
+    IPage<Hotel> getPreferredHotelList(String queryValue,String hotel_township,int type, int page, int rows);
+
+    /**
+     * APP端进入首页精选查询功能
+     * @param queryValue
+     * @param page
+     * @param rows
+     * @return
+     */
+    IPage<Hotel> getSelectedHotelList(String queryValue,String hotel_township,int type, int page, int rows);
+
+    /**
      * 通过id 查询酒店信息
      * @param ids
      * @param page

+ 18 - 0
mhotel/src/com/happy/service/HotelService.java

@@ -63,6 +63,24 @@ public interface HotelService {
     IPage<Hotel> queryPagePrice(String sqlx, int page, int rows);
 
     /**
+     * 描述:优选分页查询带最低价
+     * @param sqlx
+     * @param page
+     * @param rows
+     * @return
+     */
+    IPage<Hotel> queryPreferredPagePrice(String sqlx, int page, int rows);
+
+    /**
+     * 描述:精选分页查询带最低价
+     * @param sqlx
+     * @param page
+     * @param rows
+     * @return
+     */
+    IPage<Hotel> querySelectedPagePrice(String sqlx, int page, int rows);
+
+    /**
      * 描述:查询列表
      * @param sqlx
      * @return

+ 48 - 0
mhotel/src/com/happy/service/impl/AppHomePageImplService.java

@@ -66,6 +66,54 @@ public class AppHomePageImplService implements AppHomePageService {
         return hotelService.queryPagePrice(strSql.toString(),page,rows);
     }
 
+    /**
+     * 优选
+     * @param queryValue
+     * @param hotel_township
+     * @param type
+     * @param page
+     * @param rows
+     * @return
+     */
+    @Override
+    public IPage<Hotel> getPreferredHotelList(String queryValue, String hotel_township, int type, int page, int rows) {
+        StringBuilder strSql = new StringBuilder(" and hstatus=1 "); // 酒店正在营业中才显示
+        if (!Func.checkNull(queryValue)){
+            strSql.append(" and hname like '%").append(queryValue).append("%' ");
+        }
+        if (!Func.checkNull(hotel_township)){
+            strSql.append(" and c.hotel_township = '").append(hotel_township).append("' ");
+        }
+        if (!Func.checkNull(String.valueOf(type))){
+            strSql.append(" and c.type = '").append(type).append("' ");
+        }
+        return hotelService.queryPreferredPagePrice(strSql.toString(),page,rows);
+    }
+
+    /**
+     * 精选
+     * @param queryValue
+     * @param hotel_township
+     * @param type
+     * @param page
+     * @param rows
+     * @return
+     */
+    @Override
+    public IPage<Hotel> getSelectedHotelList(String queryValue, String hotel_township, int type, int page, int rows) {
+        StringBuilder strSql = new StringBuilder(" and hstatus=1 "); // 酒店正在营业中才显示
+        if (!Func.checkNull(queryValue)){
+            strSql.append(" and hname like '%").append(queryValue).append("%' ");
+        }
+        if (!Func.checkNull(hotel_township)){
+            strSql.append(" and c.hotel_township = '").append(hotel_township).append("' ");
+        }
+        if (!Func.checkNull(String.valueOf(type))){
+            strSql.append(" and c.type = '").append(type).append("' ");
+        }
+        return hotelService.querySelectedPagePrice(strSql.toString(),page,rows);
+    }
+
     @Override
     public IPage<Hotel> getHotelList(List<String> ids, int page, int rows) {
         if (ids == null || ids.size() <= 0 )

+ 26 - 0
mhotel/src/com/happy/service/impl/HotelImplService.java

@@ -73,6 +73,32 @@ public class HotelImplService implements HotelService {
         return iPage;
     }
 
+    @Override
+    public IPage<Hotel> queryPreferredPagePrice(String sqlx, int page, int rows) {
+        IPage<Hotel> iPage = new IPage();
+        List<Hotel> hotelList = hotelDao.queryPreferredPagePrice(sqlx,page,rows);
+        int total = hotelDao.queryTotalPrice(sqlx);
+        iPage.setPageList(hotelList);
+        iPage.setPage(page);
+        iPage.setTotalPage( (int)Math.ceil((double)total/rows));
+        iPage.setRows(rows);
+        iPage.setTotal(total);
+        return iPage;
+    }
+
+    @Override
+    public IPage<Hotel> querySelectedPagePrice(String sqlx, int page, int rows) {
+        IPage<Hotel> iPage = new IPage();
+        List<Hotel> hotelList = hotelDao.querySelectedPagePrice(sqlx,page,rows);
+        int total = hotelDao.queryTotalPrice(sqlx);
+        iPage.setPageList(hotelList);
+        iPage.setPage(page);
+        iPage.setTotalPage( (int)Math.ceil((double)total/rows));
+        iPage.setRows(rows);
+        iPage.setTotal(total);
+        return iPage;
+    }
+
     public Map queryHotelDicMap()
     {
         Map map = new HashMap<>();