HousePriceDaoImpl.java 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package com.happy.dao.impl;
  2. import com.happy.Model.HousePrice;
  3. import com.happy.Until.BeanMapTool;
  4. import com.happy.dao.HousePriceDao;
  5. import com.happy.dto.HousePriceDto;
  6. import org.apache.commons.lang.StringUtils;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  9. import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
  10. import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils;
  11. import org.springframework.stereotype.Repository;
  12. import java.util.List;
  13. import java.util.Map;
  14. @Repository("housePriceDao")
  15. public class HousePriceDaoImpl implements HousePriceDao {
  16. @Autowired
  17. private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
  18. static final String KEY_START_SET_DATE = "startSetDate";
  19. static final String KEY_END_SET_DATE = "endSetDate";
  20. @Override
  21. public void insertBatch(List<HousePrice> housePriceList) {
  22. final String sql = "insert into house_price values (:id, :managerId, :houseId, :price, :remark, :setDate, :createId, :createDate, :modifyDate, :status)";
  23. namedParameterJdbcTemplate.batchUpdate(sql, SqlParameterSourceUtils.createBatch(housePriceList.toArray()));
  24. }
  25. @Override
  26. public List<HousePriceDto> queryListOne(HousePriceDto housePriceDto, Integer pageNumber, Integer pageSize) {
  27. final String SQL_HEAD = "select t1.id as houseId, t1.h_name as houseName, t1.price as originalPrice, t1.create_date from house t1 where t1.status = 1";
  28. final String SQL_TAIL = " order by t1.create_date desc";
  29. Map<String, Object> paramMap = buildParamMap(housePriceDto, pageNumber, pageSize);
  30. StringBuilder sql = buildSqlHouse(SQL_HEAD, "", housePriceDto, pageNumber, pageSize);
  31. return namedParameterJdbcTemplate.query(sql.toString(), paramMap, new BeanPropertyRowMapper<>(HousePriceDto.class));
  32. }
  33. @Override
  34. public int queryTotalOne(HousePriceDto housePriceDto) {
  35. final String SQL_HEAD = "select count(1) from house t1 where t1.status = 1";
  36. Map<String, Object> paramMap = buildParamMap(housePriceDto, null, null);
  37. StringBuilder sql = buildSqlHouse(SQL_HEAD, "", housePriceDto, null, null);
  38. return namedParameterJdbcTemplate.queryForObject(sql.toString(), paramMap, Integer.class);
  39. }
  40. @Override
  41. public List<HousePriceDto> queryListTwo(HousePriceDto housePriceDto) {
  42. final String SQL_HEAD = "select t1.id, t1.manager_id, t1.house_id, t1.price, t1.remark, t1.set_date, t1.create_id, t1.create_date, t1.modify_date, t1.status from house_price t1 where t1.status = 1";
  43. final String SQL_TAIL = " order by create_date desc";
  44. Map<String, Object> paramMap = buildParamMap(housePriceDto, null, null);
  45. StringBuilder sql = buildSqlHousePrice(SQL_HEAD, SQL_TAIL, housePriceDto, null, null);
  46. return namedParameterJdbcTemplate.query(sql.toString(), paramMap, new BeanPropertyRowMapper<>(HousePriceDto.class));
  47. }
  48. @Override
  49. public List<HousePriceDto> queryListThree(HousePriceDto housePriceDto, Integer pageNumber, Integer pageSize) {
  50. final String SQL_HEAD = "select t.* from(select t1.id, t1.house_id, t2.h_name as houseName, group_concat(replace(t1.set_date, ',', ' 至 ')) as set_date, t1.price, t1.create_id, date_format(t1.create_date, '%Y-%m-%d %H:%i:%s') as operationTime from house_price t1 left join house t2 on t1.status = t2.status and t1.manager_id = t2.manager_id and t1.house_id = t2.id where t1.status = 1";
  51. final String SQL_TAIL = " group by t1.id) t order by t.operationTime desc";
  52. Map<String, Object> paramMap = buildParamMap(housePriceDto, pageNumber, pageSize);
  53. StringBuilder sql = buildSqlHousePrice(SQL_HEAD, SQL_TAIL, housePriceDto, pageNumber, pageSize);
  54. return namedParameterJdbcTemplate.query(sql.toString(), paramMap, new BeanPropertyRowMapper<>(HousePriceDto.class));
  55. }
  56. @Override
  57. public int queryTotalThree(HousePriceDto housePriceDto) {
  58. final String SQL_HEAD = "select count(1) from (select 1 from house_price t1 left join house t2 on t1.status = t2.status and t1.manager_id = t2.manager_id and t1.house_id = t2.id where t1.status = 1";
  59. final String SQL_TAIL = ") t";
  60. Map<String, Object> paramMap = buildParamMap(housePriceDto, null, null);
  61. StringBuilder sql = buildSqlHousePrice(SQL_HEAD, SQL_TAIL, housePriceDto, null, null);
  62. return namedParameterJdbcTemplate.queryForObject(sql.toString(), paramMap, Integer.class);
  63. }
  64. /**
  65. * 构建主表t1为house_price的sql查询条件
  66. */
  67. private StringBuilder buildSqlHousePrice(String sqlHead, String sqlTail, HousePriceDto housePriceDto, Integer pageNumber, Integer pageSize) {
  68. StringBuilder sql = new StringBuilder(sqlHead);
  69. if (StringUtils.isNotBlank(housePriceDto.getManagerId())) {
  70. sql.append(" and t1.manager_id=:managerId");
  71. }
  72. if (housePriceDto.getHouseIdList() != null && !housePriceDto.getHouseIdList().isEmpty()) {
  73. sql.append(" and t1.house_id in (:houseIdList)");
  74. }
  75. if (StringUtils.isNotBlank(housePriceDto.getHouseId())) {
  76. sql.append(" and t1.house_id=:houseId");
  77. }
  78. String setDate = housePriceDto.getSetDate();
  79. if (StringUtils.isNotBlank(setDate) && setDate.split(",").length == 2) {
  80. sql.append(String.format(" and(substring_index(t1.set_date, ',', 1) between :%s and :%s", KEY_START_SET_DATE, KEY_END_SET_DATE))
  81. .append(String.format(" or substring_index(t1.set_date, ',', -1) between :%s and :%s)", KEY_START_SET_DATE, KEY_END_SET_DATE));
  82. }
  83. sql.append(sqlTail).append(buildSqlPage(pageNumber, pageSize));
  84. return sql;
  85. }
  86. /**
  87. * 构建主表t1为house的sql查询条件
  88. */
  89. private StringBuilder buildSqlHouse(String sqlHead, String sqlTail, HousePriceDto housePriceDto, Integer pageNumber, Integer pageSize) {
  90. StringBuilder sql = new StringBuilder(sqlHead);
  91. if (StringUtils.isNotBlank(housePriceDto.getManagerId())) {
  92. sql.append(" and t1.manager_id=:managerId");
  93. }
  94. if (StringUtils.isNotBlank(housePriceDto.getHouseId())) {
  95. sql.append(" and t1.id=:houseId");
  96. }
  97. sql.append(sqlTail).append(buildSqlPage(pageNumber, pageSize));
  98. return sql;
  99. }
  100. /**
  101. * 构建分页查询条件
  102. */
  103. private String buildSqlPage(Integer pageNumber, Integer pageSize) {
  104. String result = "";
  105. if (pageNumber != null && pageSize != null) {
  106. result = " limit :pageNumber, :pageSize";
  107. } else if (pageSize != null) {
  108. result = " limit :pageSize";
  109. }
  110. return result;
  111. }
  112. /**
  113. * 构建sql查询参数
  114. */
  115. private Map<String, Object> buildParamMap(HousePriceDto housePriceDto, Integer pageNumber, Integer pageSize) {
  116. Map<String, Object> paramMap = BeanMapTool.beanToMap(housePriceDto);
  117. String setDate = housePriceDto.getSetDate();
  118. if (StringUtils.isNotBlank(setDate) && setDate.split(",").length == 2) {
  119. String[] setDateArr = setDate.split(",");
  120. paramMap.put(KEY_START_SET_DATE, setDateArr[0]);
  121. paramMap.put(KEY_END_SET_DATE, setDateArr[1]);
  122. }
  123. return putPageParams(pageNumber, pageSize, paramMap);
  124. }
  125. /**
  126. * 追加sql查询分页参数
  127. */
  128. static Map<String, Object> putPageParams(Integer pageNumber, Integer pageSize, Map<String, Object> paramMap) {
  129. if (pageNumber != null && pageSize != null) {
  130. paramMap.put("pageNumber", (pageNumber - 1) * pageSize);
  131. paramMap.put("pageSize", pageSize);
  132. } else if (pageSize != null) {
  133. paramMap.put("pageSize", pageSize);
  134. }
  135. return paramMap;
  136. }
  137. }