HousePriceServiceImpl.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package com.happy.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.happy.Model.House;
  4. import com.happy.Model.HousePrice;
  5. import com.happy.Until.DateUtil;
  6. import com.happy.Until.Excel.toExcel;
  7. import com.happy.Until.Func;
  8. import com.happy.Until.ResponseUtil;
  9. import com.happy.Until.UUIDUtil;
  10. import com.happy.dao.HouseDao;
  11. import com.happy.dao.HousePriceDao;
  12. import com.happy.dto.HousePriceDto;
  13. import com.happy.dto.IPage;
  14. import com.happy.service.HousePriceService;
  15. import lombok.SneakyThrows;
  16. import org.apache.commons.lang.StringUtils;
  17. import org.apache.struts2.ServletActionContext;
  18. import org.springframework.beans.BeanUtils;
  19. import org.springframework.stereotype.Service;
  20. import javax.annotation.Resource;
  21. import java.util.*;
  22. import java.util.stream.Collectors;
  23. @Service("housePriceService")
  24. public class HousePriceServiceImpl implements HousePriceService {
  25. @Resource(name = "housePriceDao")
  26. private HousePriceDao housePriceDao;
  27. @Resource(name = "HouseDao")
  28. private HouseDao houseDao;
  29. @SneakyThrows
  30. @Override
  31. public void modifyPriceBatch(List<String> dateList, List<HousePrice> priceList) {
  32. List<HousePrice> housePriceList = new ArrayList<>();
  33. Date now = DateUtil.formateDate(DateUtil.getCurrentDate(), DateUtil.Time_Formatter_Second);
  34. priceList.forEach(item -> {
  35. item.setCreateDate(now);
  36. item.setStatus(1);
  37. dateList.forEach(date -> {
  38. HousePrice housePrice = new HousePrice();
  39. BeanUtils.copyProperties(item, housePrice);
  40. housePrice.setId(Func.newGuid());
  41. housePrice.setSetDate(date);
  42. housePriceList.add(housePrice);
  43. });
  44. });
  45. housePriceDao.insertBatch(housePriceList);
  46. }
  47. @SneakyThrows
  48. @Override
  49. public void modifyPrice(HousePriceDto housePriceDto) {
  50. Date now = DateUtil.formateDate(DateUtil.getCurrentDate(), DateUtil.Time_Formatter_Second);
  51. housePriceDto.setId(Func.newGuid());
  52. housePriceDto.setCreateDate(now);
  53. housePriceDto.setStatus(1);
  54. housePriceDao.insertBatch(Collections.singletonList(housePriceDto));
  55. }
  56. @Override
  57. public JSONObject queryPage(HousePriceDto housePriceDto, Integer pageNumber, Integer pageSize) {
  58. List<JSONObject> pageJsonObjectList = new ArrayList<>(Collections.emptyList());
  59. int total = housePriceDao.queryTotalOne(housePriceDto);
  60. if (total != 0) {
  61. List<HousePriceDto> pageList = housePriceDao.queryListOne(housePriceDto, pageNumber, pageSize);
  62. String startDateStr = housePriceDto.getSetDate();
  63. Date startDate = DateUtil.parseDateOnly(startDateStr);
  64. Date endDate = DateUtil.addDate(startDate, Calendar.DATE, 20);
  65. //region 周期内的改价记录
  66. housePriceDto.setSetDate(String.format("%s,%s", startDateStr, DateUtil.parseDateToStr(endDate, DateUtil.Time_Formatter_Day)));
  67. List<String> houseIdList = pageList.stream().map(HousePriceDto::getHouseId).collect(Collectors.toList());
  68. housePriceDto.setHouseIdList(houseIdList);
  69. List<HousePriceDto> housePriceDtoList = housePriceDao.queryListTwo(housePriceDto);
  70. //endregion
  71. List<Date> dateListBetween = DateUtil.getDateListBetween(startDate, endDate);
  72. pageList.forEach(item -> {
  73. JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
  74. jsonObject.put("id", item.getHouseId());
  75. jsonObject.put("houseName", item.getHouseName());
  76. dateListBetween.forEach(date -> jsonObject.put(DateUtil.parseDateToStr(date, DateUtil.Time_Formatter_Day), getPrice(date, item, housePriceDtoList)));
  77. pageJsonObjectList.add(jsonObject);
  78. });
  79. }
  80. JSONObject result = new JSONObject();
  81. result.put("pageList", pageJsonObjectList);
  82. result.put("page", pageNumber);
  83. result.put("rows", pageSize);
  84. result.put("total", total);
  85. result.put("totalPage", (int) Math.ceil((double) total / pageSize));
  86. return result;
  87. }
  88. @Override
  89. public IPage<HousePriceDto> queryPageHistory(HousePriceDto housePriceDto, Integer pageNumber, Integer pageSize) {
  90. List<HousePriceDto> pageList = Collections.emptyList();
  91. int total = housePriceDao.queryTotalThree(housePriceDto);
  92. if (total != 0) {
  93. pageList = housePriceDao.queryListThree(housePriceDto, pageNumber, pageSize);
  94. }
  95. IPage<HousePriceDto> result = new IPage<>();
  96. result.setPageList(pageList);
  97. result.setPage(pageNumber);
  98. result.setRows(pageSize);
  99. result.setTotal(total);
  100. result.setTotalPage((int) Math.ceil((double) total / pageSize));
  101. return result;
  102. }
  103. @Override
  104. public List<House> queryHouseListByManagerId(String managerId) {
  105. if (StringUtils.isBlank(managerId)) return Collections.emptyList();
  106. String sqlx = String.format(" and manager_id = %s %s", managerId, " order by create_date desc");
  107. return houseDao.queryList(sqlx);
  108. }
  109. @Override
  110. public void exportHistory(HousePriceDto housePriceDto) {
  111. if (StringUtils.isBlank(housePriceDto.getManagerId())) return;
  112. List<HousePriceDto> list = housePriceDao.queryListThree(housePriceDto, null, null);
  113. if (list == null || list.isEmpty()) return;
  114. // List<Vector<Object>> vectorsList = new ArrayList<>();
  115. List<Vector> vectorsList = new ArrayList<>();
  116. list.forEach(housePrice -> {
  117. Vector columnValue = new Vector<>();
  118. columnValue.add(housePrice.getHouseName());
  119. columnValue.add(housePrice.getSetDate());
  120. columnValue.add(housePrice.getPrice());
  121. columnValue.add(housePrice.getOperationName());
  122. columnValue.add(housePrice.getOperationTime());
  123. vectorsList.add(columnValue);
  124. });
  125. // 项目路径地址
  126. String path = ServletActionContext.getRequest().getSession().getServletContext()
  127. .getRealPath("/download/");// File.separator
  128. Vector<String> columnName = new Vector<>();
  129. columnName.add("房型");
  130. columnName.add("价格日期");
  131. columnName.add("修改后价格");
  132. columnName.add("操作人");
  133. columnName.add("操作时间");
  134. String filePathName = "改价记录" + UUIDUtil.generateID() + "Report.xls";
  135. // 导出文件
  136. new toExcel().book(vectorsList, path + filePathName,
  137. "sheet1", columnName);
  138. String url = "https://chtech.ncjti.edu.cn/hotelReservation/mhotel";
  139. JSONObject result = new JSONObject();
  140. result.put("downurl", url + "/download/" + filePathName);
  141. result.put("code", 200);
  142. result.put("message", "导出成功");
  143. ResponseUtil.writeJson(ServletActionContext.getResponse(),
  144. result.toString());
  145. }
  146. /**
  147. * 获取房型指定日期的价格
  148. *
  149. * @return 原价 or 周日内最新一条改价记录的价格
  150. */
  151. private Double getPrice(Date dateIn, HousePriceDto housePriceDto, List<HousePriceDto> housePriceDtoList) {
  152. Double price = housePriceDto.getOriginalPrice();
  153. if (housePriceDtoList == null || housePriceDtoList.isEmpty()) return price;
  154. for (HousePriceDto priceDto : housePriceDtoList) {
  155. String[] date = priceDto.getSetDate().split(",");
  156. Date startDate = DateUtil.parseDateOnly(date[0]);
  157. Date endDate = DateUtil.parseDateOnly(date[1]);
  158. assert startDate != null;
  159. boolean flag = DateUtil.isEffectiveDate(dateIn, startDate, endDate) && housePriceDto.getHouseId().equals(priceDto.getHouseId());
  160. if (flag) {
  161. price = priceDto.getPrice();
  162. break;
  163. }
  164. }
  165. return price;
  166. }
  167. }