夏文涛 преди 2 години
родител
ревизия
9f0d0d35b3

+ 73 - 0
mhotel/src/com/happy/Until/TimeExchange.java

@@ -55,6 +55,29 @@ public class TimeExchange {
     }
 
     /**
+     * String(yyyy-MM-dd HH:mm:ss) 转 Date
+     *
+     * @param time
+     * @return
+     * @throws ParseException
+     */
+    // String date = "2010/05/04 12:34:23";
+    public static Date StringToDate(String time, String formatStr) throws ParseException {
+
+        Date date = new Date();
+        // 注意format的格式要与日期String的格式相匹配
+        DateFormat dateFormat = new SimpleDateFormat(formatStr);
+        try {
+            date = dateFormat.parse(time);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return date;
+    }
+
+
+    /**
      * Date转为String(yyyy-MM-dd HH:mm:ss)
      *
      * @param time
@@ -423,8 +446,58 @@ public class TimeExchange {
     }
 
     /**
+     * 比较时间1是否小于时间2
+     * 如果时间1小于时间2,接口返回true
+     * 如果时间1大于时间2,接口返回false
+     *
+     * @param dateOne 时间1
+     * @param dateTwo 时间2
+     * @param Forma   时间格式
+     * @return
+     * @throws ParseException
+     */
+    public static boolean CompareDate(String dateOne, String dateTwo, String Forma) throws ParseException {
+        SimpleDateFormat df = new SimpleDateFormat(Forma);
+        Date sd1 = df.parse(dateOne);
+        Date sd2 = df.parse(dateTwo);
+        return sd1.before(sd2);
+    }
+
+    /**
+     * 时间加减天数
+     *
+     * @param time   时间
+     * @param amount 天数 负的为减多少天 正的为加多少天
+     * @return
+     * @throws ParseException
+     */
+    public static String TimeDesD(String time, int amount) throws ParseException {
+        Calendar nowTime2 = Calendar.getInstance();
+        nowTime2.setTime(StringToDate(time, "yyyy-MM-dd"));
+        nowTime2.add(Calendar.DATE, amount);
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        return simpleDateFormat.format(nowTime2.getTime());
+    }
+
+    /**
+     * 相差的天数
+     */
+    public static int daysBetween(String smdate, String bdate) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(sdf.parse(smdate));
+        long time1 = cal.getTimeInMillis();
+        cal.setTime(sdf.parse(bdate));
+        long time2 = cal.getTimeInMillis();
+        long between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+        return Integer.parseInt(String.valueOf(between_days));
+    }
+
+    /**
      * 获取一周的开始时间和结束时间
      * 获取本周星期一作为一周的第一天的起始时间和结束时间
+     *
      * @return 返回的数据中第一个是开始时间 第二个是结束时间
      */
     public static String[] getCurrentWeekTimeFrame() {

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

@@ -2,6 +2,7 @@ package com.happy.action;
 
 import com.baidubce.model.User;
 import com.happy.Model.Hotel;
+import com.happy.Model.House;
 import com.happy.Model.weixin.Users;
 import com.happy.Until.*;
 import com.happy.Until.Enum.B;
@@ -11,6 +12,8 @@ import com.happy.dao.UserVisitsDao;
 import com.happy.dto.IPage;
 import com.happy.dto.townshipCountDTO;
 import com.happy.service.*;
+import com.happy.vo.HousePriceDataVo;
+import com.happy.vo.HousePriceOneDataVo;
 import com.opensymphony.xwork2.ActionSupport;
 import net.sf.json.JSONObject;
 import org.apache.struts2.ServletActionContext;
@@ -19,7 +22,11 @@ import org.apache.struts2.interceptor.ServletRequestAware;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * 首页进去Action请求交互
@@ -41,6 +48,8 @@ public class AppHomePageAction extends ActionSupport implements ServletRequestAw
     public FileService fileService;
     @Resource
     public AdminManagerService adminManagerService;
+    @Resource(name = "housePriceService")
+    private HousePriceService housePriceService;
 
     public int page; // 当前页
     public int rows;// 每页显示的行数rows
@@ -198,6 +207,54 @@ public class AppHomePageAction extends ActionSupport implements ServletRequestAw
         if (!Func.checkNull(userId))
            appHomePageService.assignCollect(userId, hotel);
 
+        //region 2023-09-12 A-jax 添加房型均价:入住的每一天的价格之和 / 入住天数
+        List<HousePriceDataVo> hprd = housePriceService.queryHousePriceDatas(hotel.getManagerId(), queryStartTime, TimeExchange.TimeDesD(queryEndTime, -1));
+        List<HousePriceOneDataVo> oneDatas = new ArrayList<>();
+        //将数据处理成单天的
+        for (HousePriceDataVo hp : hprd) {
+            if (hp.getStartTime().equals(hp.getEndTime())) {
+                HousePriceOneDataVo oneData = new HousePriceOneDataVo();
+                oneData.setSetDate(hp.getStartTime());
+                oneData.setCreateDate(hp.getCreateDate());
+                oneData.setPrice(hp.getPrice());
+                oneData.setHouseId(hp.getHouseId());
+                oneDatas.add(oneData);
+            } else {
+                int beDateNum = TimeExchange.daysBetween(hp.getStartTime(), hp.getEndTime());
+                for (int i = 0; i <= beDateNum; i++) {
+                    String date = TimeExchange.TimeDesD(hp.getStartTime(), i);
+                    if (date.equals(queryEndTime)) {
+                        break;
+                    }
+                    HousePriceOneDataVo oneData = new HousePriceOneDataVo();
+                    oneData.setSetDate(TimeExchange.TimeDesD(hp.getStartTime(), i));
+                    oneData.setCreateDate(hp.getCreateDate());
+                    oneData.setPrice(hp.getPrice());
+                    oneData.setHouseId(hp.getHouseId());
+                    oneDatas.add(oneData);
+                }
+            }
+        }
+
+        List<String> dateStrs = new ArrayList<>();
+        int dateNum = TimeExchange.daysBetween(queryStartTime, TimeExchange.TimeDesD(queryEndTime, -1));
+        for (int i = 0; i <= dateNum; i++) {
+            String date = TimeExchange.TimeDesD(queryStartTime, i);
+            dateStrs.add(date);
+        }
+
+        for (House houseData : hotel.getHouseList()) {
+            for (String dateStr:dateStrs){
+                Optional<HousePriceOneDataVo> oneData = oneDatas.stream().filter(e -> e.getHouseId().equals(houseData.getId()) && e.getSetDate().equals(dateStr)).sorted(Comparator.comparing(HousePriceOneDataVo::getCreateDate,Comparator.reverseOrder())).findFirst();
+                if(oneData != null && oneData.isPresent()){
+                    houseData.setPrice(houseData.getPrice() + oneData.get().getPrice());
+                }
+            }
+            if(dateStrs.size() > 0){
+                houseData.setPrice(houseData.getPrice() == 0.0 ? 0.0 : (houseData.getPrice() / dateStrs.size()));
+            }
+        }
+        //endregion
 
         // 通过时间区间查询房间信息,并带好是否有房标识给前台
         jsonObject.put(B.code,ResultStatusCode.OK.getStatus());

+ 253 - 3
mhotel/src/com/happy/action/HousePriceAction.java

@@ -2,19 +2,48 @@ package com.happy.action;
 
 import com.alibaba.fastjson.JSONObject;
 import com.happy.Model.HousePrice;
-import com.happy.Until.GetHttpParam;
-import com.happy.Until.ResUtil;
+import com.happy.Until.*;
 import com.happy.common.controller.BaseController;
 import com.happy.dto.HousePriceDto;
 import com.happy.service.HousePriceService;
+import com.happy.service.HouseService;
+import com.happy.vo.DailyPriceVo;
+import com.happy.vo.HousePriceDataVo;
+import com.happy.vo.HousePriceOneDataVo;
+import com.happy.vo.HousePriceResultVo;
 import com.opensymphony.xwork2.ModelDriven;
 import lombok.SneakyThrows;
 import org.apache.struts2.ServletActionContext;
 
 import javax.annotation.Resource;
-import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.text.ParseException;
+import java.util.*;
+import java.util.stream.Collectors;
 
 public class HousePriceAction extends BaseController implements ModelDriven<HousePriceDto> {
+
+    private HttpServletRequest request;
+    public HttpServletResponse response;
+
+    /**
+     * 房型ID
+     */
+    public Integer sadad;
+    /**
+     * 民宿商家ID
+     */
+    public Integer homestayId;
+    /**
+     * 入住时间
+     */
+    public String startTime;
+    /**
+     * 离店时间
+     */
+    public String endTime;
+
     private final HousePriceDto housePriceDto = new HousePriceDto();
 
     @Override
@@ -25,6 +54,9 @@ public class HousePriceAction extends BaseController implements ModelDriven<Hous
     @Resource(name = "housePriceService")
     private HousePriceService housePriceService;
 
+    @Resource
+    private HouseService houseService;
+
     /**
      * 批量改价 房态管理-房价管理
      * 约定body数据格式:{"dateList":["2023-08-11,2023-08-20"],"priceList":[{"managerId":"1586005529","houseId":"1379573861","price":"180"}]}
@@ -89,4 +121,222 @@ public class HousePriceAction extends BaseController implements ModelDriven<Hous
     public void exportHistory() {
         housePriceService.exportHistory(housePriceDto);
     }
+
+    /**
+     * 获取价格日历
+     * managerId:民宿商家ID
+     * startTime:入住时间
+     * endTime:离店时间
+     *
+     * @return
+     */
+    public String priceCalendar() throws ParseException {
+        JSONObject resultJson = new JSONObject();
+        if (homestayId == null) {
+            resultJson.put("message", "商家不能为空");
+            resultJson.put("code", 500);
+            ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+            return null;
+        }
+        if (startTime == null) {
+            resultJson.put("message", "入住时间不能为空");
+            resultJson.put("code", 500);
+            ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+            return null;
+        }
+
+        List<HousePriceResultVo> result = new ArrayList<>();
+        List<String> dateStrs = new ArrayList<>();
+        String DateNow = TimeExchange.DateToString(new Date(), "yyyy-MM-dd");
+        //离店时间为空的话 则拿入店时间的前三天和后七天数据
+        boolean IsDurStart = TimeExchange.CompareDate(DateNow, startTime, "yyyy-MM-dd");
+        if (IsDurStart) {
+            for (int i = 1; i <= 3; i++) {
+                String date = TimeExchange.TimeDesD(startTime, -i);
+                if (date.equals(DateNow)) {
+                    dateStrs.add(date);
+                    break;
+                }
+                dateStrs.add(date);
+            }
+        }
+
+        dateStrs.add(startTime);
+
+        int dateNum = 7;
+        if (endTime != null) {
+            //后七天
+            dateNum = TimeExchange.daysBetween(startTime, endTime);
+        }
+
+        for (int i = 1; i <= dateNum; i++) {
+            String date = TimeExchange.TimeDesD(startTime, i);
+            dateStrs.add(date);
+        }
+
+        Collections.sort(dateStrs);
+
+        List<HousePriceDataVo> hprd = housePriceService.queryHousePriceDatas(homestayId, dateStrs.get(0), dateStrs.get(dateStrs.size() - 1));
+        List<HousePriceOneDataVo> oneDatas = new ArrayList<>();
+        //将数据处理成单天的
+        for (HousePriceDataVo hp : hprd) {
+            if (hp.getStartTime().equals(hp.getEndTime())) {
+                HousePriceOneDataVo oneData = new HousePriceOneDataVo();
+                oneData.setSetDate(hp.getStartTime());
+                oneData.setCreateDate(hp.getCreateDate());
+                oneData.setPrice(hp.getPrice());
+                oneData.setHouseId(hp.getHouseId());
+                oneDatas.add(oneData);
+            } else {
+                int beDateNum = TimeExchange.daysBetween(hp.getStartTime(), hp.getEndTime());
+                for (int i = 0; i <= beDateNum; i++) {
+                    HousePriceOneDataVo oneData = new HousePriceOneDataVo();
+                    oneData.setSetDate(TimeExchange.TimeDesD(hp.getStartTime(), i));
+                    oneData.setCreateDate(hp.getCreateDate());
+                    oneData.setPrice(hp.getPrice());
+                    oneData.setHouseId(hp.getHouseId());
+                    oneDatas.add(oneData);
+                }
+            }
+        }
+
+        /**
+         * 根据房型ID处理重复的数据
+         */
+        List<HousePriceOneDataVo> newOneDatas = new ArrayList<>();
+        List<Integer> houseIds = oneDatas.stream().map(HousePriceOneDataVo::getHouseId).distinct().collect(Collectors.toList());
+        for (Integer houseId : houseIds) {
+            for (String str : dateStrs) {
+                Optional<HousePriceOneDataVo> one = oneDatas.stream().filter(e -> e.getSetDate().equals(str) && e.getHouseId().equals(houseId)).sorted(Comparator.comparing(HousePriceOneDataVo::getCreateDate, Comparator.reverseOrder())).findFirst();
+                if (one != null && one.isPresent()) {
+                    HousePriceOneDataVo oneData = new HousePriceOneDataVo();
+                    oneData.setSetDate(one.get().getSetDate());
+                    oneData.setCreateDate(one.get().getCreateDate());
+                    oneData.setPrice(one.get().getPrice());
+                    oneData.setHouseId(one.get().getHouseId());
+                    newOneDatas.add(oneData);
+                }
+            }
+        }
+
+        /**
+         * 获取该民宿下最低房型价格
+         */
+        Double minPrice = houseService.getHouseMinPrice(homestayId);
+
+        for (String str : dateStrs) {
+            HousePriceResultVo data = new HousePriceResultVo();
+            data.setDate(str);
+            List<HousePriceOneDataVo> priceDatas = oneDatas.stream().filter(e -> e.getSetDate().equals(str)).sorted(Comparator.comparing(HousePriceOneDataVo::getPrice)).collect(Collectors.toList());
+
+            if (priceDatas.size() > 0) {
+                data.setTopinfo("¥" + priceDatas.get(0).getPrice());
+            } else {
+                data.setTopinfo("¥" + minPrice);
+            }
+            result.add(data);
+        }
+
+        resultJson.put("message", "查询成功");
+        resultJson.put("code", 200);
+        resultJson.put("data", result);
+        ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+        return null;
+    }
+
+    /**
+     * 根据房型ID获取每日价格
+     * houseId:房型ID
+     * startTime:入住时间
+     * endTime:离店时间
+     *
+     * @return
+     */
+    public String dailyPrice() throws ParseException {
+        JSONObject resultJson = new JSONObject();
+
+        if (sadad == null) {
+            resultJson.put("message", "房型不能为空");
+            resultJson.put("code", 500);
+            ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+            return null;
+        }
+        if (startTime == null) {
+            resultJson.put("message", "入住时间不能为空");
+            resultJson.put("code", 500);
+            ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+            return null;
+        }
+        if (endTime == null) {
+            resultJson.put("message", "离店时间不能为空");
+            resultJson.put("code", 500);
+            ResponseUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+            return null;
+        }
+        List<HousePriceDataVo> priceDatas = housePriceService.queryPriceByHouseId(sadad, startTime, TimeExchange.TimeDesD(endTime, -1));
+
+        List<HousePriceOneDataVo> oneDatas = new ArrayList<>();
+        //将数据处理成单天的
+        for (HousePriceDataVo hp : priceDatas) {
+            if (hp.getStartTime().equals(hp.getEndTime())) {
+                HousePriceOneDataVo oneData = new HousePriceOneDataVo();
+                oneData.setSetDate(hp.getStartTime());
+                oneData.setCreateDate(hp.getCreateDate());
+                oneData.setPrice(hp.getPrice());
+                oneData.setHouseId(hp.getHouseId());
+                oneDatas.add(oneData);
+            } else {
+                int beDateNum = TimeExchange.daysBetween(hp.getStartTime(), hp.getEndTime());
+                for (int i = 0; i <= beDateNum; i++) {
+                    HousePriceOneDataVo oneData = new HousePriceOneDataVo();
+                    oneData.setSetDate(TimeExchange.TimeDesD(hp.getStartTime(), i));
+                    oneData.setCreateDate(hp.getCreateDate());
+                    oneData.setPrice(hp.getPrice());
+                    oneData.setHouseId(hp.getHouseId());
+                    oneDatas.add(oneData);
+                }
+            }
+        }
+
+        List<String> dateStrs = new ArrayList<>();
+        int dateNum = TimeExchange.daysBetween(startTime, endTime);
+        for (int i = 1; i <= dateNum; i++) {
+            String date = TimeExchange.TimeDesD(startTime, i);
+            dateStrs.add(date);
+        }
+
+        /**
+         * 获取该房型默认价格
+         */
+        Double housePrice = houseService.queryPriceByHouseId(sadad);
+
+        DailyPriceVo dpv = new DailyPriceVo();
+        dpv.setList(new ArrayList<>());
+        for (String dateStr : dateStrs) {
+            HousePriceResultVo data = new HousePriceResultVo();
+            data.setDate(dateStr);
+            List<HousePriceOneDataVo> datas = oneDatas.stream().filter(e -> e.getSetDate().equals(dateStr)).sorted(Comparator.comparing(HousePriceOneDataVo::getPrice)).collect(Collectors.toList());
+
+            if(dateStr.equals(endTime)){
+                data.setTopinfo("离店时间");
+            }else{
+                if (datas.size() > 0) {
+                    data.setTopinfo("11晚 共" + datas.get(0).getPrice());
+                    dpv.setTotalPrice((dpv.getTotalPrice() == null ? 0 : dpv.getTotalPrice()) + datas.get(0).getPrice());
+                } else {
+                    data.setTopinfo("1晚 共" + housePrice);
+                    dpv.setTotalPrice((dpv.getTotalPrice() == null ? 0 : dpv.getTotalPrice()) + housePrice);
+                }
+            }
+
+            dpv.getList().add(data);
+        }
+
+        resultJson.put("message", "查询成功");
+        resultJson.put("code", 200);
+        resultJson.put("data", dpv);
+        ResUtil.writeJson(ServletActionContext.getResponse(), resultJson.toString());
+        return null;
+    }
+
 }

+ 13 - 0
mhotel/src/com/happy/dao/HouseDao.java

@@ -85,4 +85,17 @@ public interface HouseDao {
      */
     int getHouseSum(int managerId);
 
+    /**
+     * 获取该商家所有房型中最低价格
+     * @param managerId
+     * @return
+     */
+    Double getHouseMinPrice(int managerId);
+
+    /**
+     * 根据房型获取默认价格
+     * @param houseId
+     * @return
+     */
+    Double queryPriceByHouseId(int houseId);
 }

+ 1 - 0
mhotel/src/com/happy/dao/HouseNumberDao.java

@@ -24,4 +24,5 @@ public interface HouseNumberDao {
     void modifyHouseStatus(HouseNumberDto houseNumberDto);
 
     List<HouseNumber> queryByHouseId(String houseId);
+
 }

+ 19 - 0
mhotel/src/com/happy/dao/HousePriceDao.java

@@ -2,6 +2,7 @@ package com.happy.dao;
 
 import com.happy.Model.HousePrice;
 import com.happy.dto.HousePriceDto;
+import com.happy.vo.HousePriceDataVo;
 
 import java.util.List;
 
@@ -36,4 +37,22 @@ public interface HousePriceDao {
      * @param housePriceDto 查询参数
      */
     int queryTotalThree(HousePriceDto housePriceDto);
+
+    /**
+     * 根据商户ID查询每日价格
+     * @param managerId
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<HousePriceDataVo> queryHousePriceDatas(Integer managerId, String startTime, String endTime);
+
+    /**
+     * 根据房型ID查询每日价格
+     * @param houseId
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<HousePriceDataVo> queryPriceByHouseId(Integer houseId, String startTime, String endTime);
 }

+ 20 - 0
mhotel/src/com/happy/dao/impl/HouseImplDao.java

@@ -9,6 +9,8 @@ import com.happy.Until.SqlUtil;
 import com.happy.Until.UUIDUtil;
 import com.happy.dao.HouseDao;
 import com.happy.dto.HouseSumEto;
+import com.happy.vo.HousePriceDataVo;
+import com.happy.vo.PriceDataVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
@@ -180,6 +182,24 @@ public class HouseImplDao implements HouseDao {
         return namedParameterJdbcTemplate.queryForInt(sql, sps);
     }
 
+    @Override
+    public Double getHouseMinPrice(int managerId){
+        String sql = "select MIN(price) as price from house where status = 1 and manager_id = :manager_id";
+        MapSqlParameterSource sps = new MapSqlParameterSource();
+        sps.addValue("manager_id",managerId);
+        List<PriceDataVo> list = namedParameterJdbcTemplate.query(sql, sps, new BeanPropertyRowMapper<>(PriceDataVo.class));
+        return list.size() > 0 ? list.get(0).getPrice() : 0;
+    }
+
+    @Override
+    public Double queryPriceByHouseId(int houseId) {
+        String sql = "select price from house where status = 1 and id = :houseId";
+        MapSqlParameterSource sps = new MapSqlParameterSource();
+        sps.addValue("houseId",houseId);
+        List<PriceDataVo> list = namedParameterJdbcTemplate.query(sql, sps, new BeanPropertyRowMapper<>(PriceDataVo.class));
+        return list.size() > 0 ? list.get(0).getPrice() : 0;
+    }
+
     private void appendValue(House house, StringBuffer stringBuffer, MapSqlParameterSource sps){
         if (!Func.checkNull(String.valueOf(house.getManagerId()))){
             stringBuffer.append(" manager_id=:manager_id ,");

+ 5 - 0
mhotel/src/com/happy/dao/impl/HouseNumberImplDao.java

@@ -1,6 +1,7 @@
 package com.happy.dao.impl;
 
 import com.happy.Model.Booking;
+import com.happy.Model.HotelCoupon;
 import com.happy.Model.HouseNumber;
 import com.happy.Until.BeanMapTool;
 import com.happy.Until.UUIDUtil;
@@ -15,8 +16,12 @@ import org.springframework.jdbc.core.namedparam.SqlParameterSource;
 import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
 import org.springframework.stereotype.Repository;
 
+import java.awt.print.Book;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 @Repository("HouseNumberDao")

+ 52 - 0
mhotel/src/com/happy/dao/impl/HousePriceDaoImpl.java

@@ -2,15 +2,19 @@ package com.happy.dao.impl;
 
 import com.happy.Model.HousePrice;
 import com.happy.Until.BeanMapTool;
+import com.happy.Until.TimeExchange;
 import com.happy.dao.HousePriceDao;
 import com.happy.dto.HousePriceDto;
+import com.happy.vo.HousePriceDataVo;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
 import org.springframework.stereotype.Repository;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -139,6 +143,54 @@ public class HousePriceDaoImpl implements HousePriceDao {
     }
 
     /**
+     * 获取价格日历数据
+     * @param managerId 商家ID
+     * @param startTime 入住时间
+     * @param endTime 离店时间
+     * @return
+     */
+    @Override
+    public List<HousePriceDataVo> queryHousePriceDatas(Integer managerId, String startTime, String endTime) {
+        String sql = "select * from (SELECT house_id,price,SUBSTRING_INDEX(set_date,',',1) as start_time,SUBSTRING_INDEX(set_date,',',-1) as end_time,create_date from house_price\n" +
+                     "where status = 1 and manager_id =:managerId) t\n" +
+                     "where (t.start_time <=:startTime and t.end_time >=:endTime) \n" +
+                     "or (t.start_time >=:startTime and t.start_time <=:endTime and t.end_time >=:endTime) \n" +
+                     "or (t.start_time <=:startTime and t.end_time >=:startTime and t.end_time <=:endTime)\n" +
+                     "or (t.start_time >=:startTime and t.end_time <=:endTime)";
+        MapSqlParameterSource sps = new MapSqlParameterSource();
+        sps.addValue("managerId", managerId);
+        sps.addValue("startTime", startTime);
+        sps.addValue("endTime", endTime);
+        List<HousePriceDataVo> list = namedParameterJdbcTemplate.query(sql, sps, new BeanPropertyRowMapper<>(HousePriceDataVo.class));
+
+        return list;
+    }
+
+    /**
+     * 获取价格日历数据
+     * @param houseId 房型ID
+     * @param startTime 入住时间
+     * @param endTime 离店时间
+     * @return
+     */
+    @Override
+    public List<HousePriceDataVo> queryPriceByHouseId(Integer houseId, String startTime, String endTime) {
+        String sql = "select * from (SELECT house_id,price,SUBSTRING_INDEX(set_date,',',1) as start_time,SUBSTRING_INDEX(set_date,',',-1) as end_time,create_date from house_price\n" +
+                "where status = 1 and house_id =:houseId) t\n" +
+                "where (t.start_time <=:startTime and t.end_time >=:endTime) \n" +
+                "or (t.start_time >=:startTime and t.start_time <=:endTime and t.end_time >=:endTime) \n" +
+                "or (t.start_time <=:startTime and t.end_time >=:startTime and t.end_time <=:endTime)\n" +
+                "or (t.start_time >=:startTime and t.end_time <=:endTime)";
+        MapSqlParameterSource sps = new MapSqlParameterSource();
+        sps.addValue("houseId", houseId);
+        sps.addValue("startTime", startTime);
+        sps.addValue("endTime", endTime);
+        List<HousePriceDataVo> list = namedParameterJdbcTemplate.query(sql, sps, new BeanPropertyRowMapper<>(HousePriceDataVo.class));
+
+        return list;
+    }
+
+    /**
      * 构建sql查询参数
      */
     private Map<String, Object> buildParamMap(HousePriceDto housePriceDto, Integer pageNumber, Integer pageSize) {

+ 20 - 0
mhotel/src/com/happy/service/HousePriceService.java

@@ -5,6 +5,7 @@ import com.happy.Model.House;
 import com.happy.Model.HousePrice;
 import com.happy.dto.HousePriceDto;
 import com.happy.dto.IPage;
+import com.happy.vo.HousePriceDataVo;
 
 import java.util.List;
 
@@ -48,4 +49,23 @@ public interface HousePriceService {
      * 导出表格数据 房态管理-房价管理-改价记录
      */
     void exportHistory(HousePriceDto housePriceDto);
+
+    /**
+     * 价格日历数据获取
+     * @param managerId 商家ID
+     * @param startTime 入住时间
+     * @param endTime 离店时间
+     * @return
+     */
+    List<HousePriceDataVo> queryHousePriceDatas(Integer managerId, String startTime, String endTime);
+
+    /**
+     * 根据房型查询每日价格
+     * @param houseId
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<HousePriceDataVo> queryPriceByHouseId(Integer houseId, String startTime, String endTime);
+
 }

+ 13 - 0
mhotel/src/com/happy/service/HouseService.java

@@ -76,4 +76,17 @@ public interface HouseService {
      * @return
      */
     int getHouseSum(int managerId);
+
+    /**
+     * 获取该商家所有房型中最低价格
+     * @param managerId
+     * @return
+     */
+    Double getHouseMinPrice(int managerId);
+
+    /**
+     * 根据房型查询默认价格
+     * @return
+     */
+    Double queryPriceByHouseId(int managerId);
 }

+ 10 - 0
mhotel/src/com/happy/service/impl/HouseImplService.java

@@ -91,4 +91,14 @@ public class HouseImplService implements HouseService {
     public int getHouseSum(int managerId) {
         return houseDao.getHouseSum(managerId);
     }
+
+    @Override
+    public Double getHouseMinPrice(int managerId) {
+        return houseDao.getHouseMinPrice(managerId);
+    }
+
+    @Override
+    public Double queryPriceByHouseId(int houseId) {
+        return houseDao.queryPriceByHouseId(houseId);
+    }
 }

+ 14 - 0
mhotel/src/com/happy/service/impl/HousePriceServiceImpl.java

@@ -13,6 +13,7 @@ import com.happy.dao.HousePriceDao;
 import com.happy.dto.HousePriceDto;
 import com.happy.dto.IPage;
 import com.happy.service.HousePriceService;
+import com.happy.vo.HousePriceDataVo;
 import lombok.SneakyThrows;
 import org.apache.commons.lang.StringUtils;
 import org.apache.struts2.ServletActionContext;
@@ -177,4 +178,17 @@ public class HousePriceServiceImpl implements HousePriceService {
         }
         return price;
     }
+
+    @Override
+    public List<HousePriceDataVo> queryHousePriceDatas(Integer managerId, String startTime, String endTime) {
+        List<HousePriceDataVo> result = housePriceDao.queryHousePriceDatas(managerId, startTime, endTime);
+        return result;
+    }
+
+
+    @Override
+    public List<HousePriceDataVo> queryPriceByHouseId(Integer houseId, String startTime, String endTime){
+        List<HousePriceDataVo> result = housePriceDao.queryPriceByHouseId(houseId, startTime, endTime);
+        return result;
+    }
 }

+ 37 - 0
mhotel/src/com/happy/vo/DailyPriceVo.java

@@ -0,0 +1,37 @@
+package com.happy.vo;
+
+import java.util.List;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/9/12 星期二 14:18
+ * @Description: com.happy.vo
+ * @Version: 1.0
+ */
+public class DailyPriceVo {
+    /**
+     * 每日价格
+     */
+    private List<HousePriceResultVo> list;
+
+    /**
+     * 总价
+     */
+    private Double totalPrice;
+
+    public List<HousePriceResultVo> getList() {
+        return list;
+    }
+
+    public void setList(List<HousePriceResultVo> list) {
+        this.list = list;
+    }
+
+    public Double getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(Double totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+}

+ 70 - 0
mhotel/src/com/happy/vo/HousePriceDataVo.java

@@ -0,0 +1,70 @@
+package com.happy.vo;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/9/11 星期一 15:15
+ * @Description: com.happy.vo
+ * @Version: 1.0
+ */
+public class HousePriceDataVo {
+    /**
+     * 价格
+     */
+    private Double price;
+    /**
+     * 开始时间
+     */
+    private String startTime;
+    /**
+     * 结束时间
+     */
+    private String endTime;
+    /**
+     * 房型ID
+     */
+    private Integer houseId;
+    /**
+     * 创建时间
+     */
+    private String createDate;
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+
+    public Integer getHouseId() {
+        return houseId;
+    }
+
+    public void setHouseId(Integer houseId) {
+        this.houseId = houseId;
+    }
+
+    public String getCreateDate() {
+        return createDate;
+    }
+
+    public void setCreateDate(String createDate) {
+        this.createDate = createDate;
+    }
+}

+ 59 - 0
mhotel/src/com/happy/vo/HousePriceOneDataVo.java

@@ -0,0 +1,59 @@
+package com.happy.vo;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/9/11 星期一 15:15
+ * @Description: com.happy.vo
+ * @Version: 1.0
+ */
+public class HousePriceOneDataVo {
+    /**
+     * 价格
+     */
+    private Double price;
+    /**
+     * 开始时间
+     */
+    private String setDate;
+    /**
+     * 创建时间
+     */
+    private String createDate;
+    /**
+     * 房型ID
+     */
+    private Integer houseId;
+
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+
+    public String getSetDate() {
+        return setDate;
+    }
+
+    public void setSetDate(String setDate) {
+        this.setDate = setDate;
+    }
+
+    public String getCreateDate() {
+        return createDate;
+    }
+
+    public void setCreateDate(String createDate) {
+        this.createDate = createDate;
+    }
+
+    public Integer getHouseId() {
+        return houseId;
+    }
+
+    public void setHouseId(Integer houseId) {
+        this.houseId = houseId;
+    }
+}

+ 35 - 0
mhotel/src/com/happy/vo/HousePriceResultVo.java

@@ -0,0 +1,35 @@
+package com.happy.vo;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/9/11 星期一 17:03
+ * @Description: com.happy.vo
+ * @Version: 1.0
+ */
+public class HousePriceResultVo {
+    /**
+     * 日期
+     */
+    private String date;
+
+    /**
+     * 价格
+     */
+    private String topinfo;
+
+    public String getDate() {
+        return date;
+    }
+
+    public void setDate(String date) {
+        this.date = date;
+    }
+
+    public String getTopinfo() {
+        return topinfo;
+    }
+
+    public void setTopinfo(String topinfo) {
+        this.topinfo = topinfo;
+    }
+}

+ 19 - 0
mhotel/src/com/happy/vo/PriceDataVo.java

@@ -0,0 +1,19 @@
+package com.happy.vo;
+
+/**
+ * @Author: binguo
+ * @Date: 2023/9/11 星期一 17:46
+ * @Description: com.happy.vo
+ * @Version: 1.0
+ */
+public class PriceDataVo {
+    private Double price;
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+}