CarrierQueryService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. package platform.modules.carrier.service;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.xiaoleilu.hutool.getter.ListTypeGetter;
  5. import jdk.nashorn.internal.ir.IdentNode;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.apache.xmlbeans.impl.xb.xsdschema.Public;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import platform.common.Constant;
  11. import platform.common.base.service.DictionaryItemService;
  12. import platform.modules.build.entity.BuildFloor;
  13. import platform.modules.build.service.FloorService;
  14. import platform.modules.carrier.dao.BuildingDao;
  15. import platform.modules.carrier.dto.BuildingFloorVo;
  16. import platform.modules.carrier.dto.CarrierQueryDto;
  17. import platform.modules.carrier.entity.Building;
  18. import platform.modules.carrier.entity.ContractFloor;
  19. import platform.modules.carrier.entity.Park;
  20. import platform.modules.government.entity.Street;
  21. import platform.modules.government.service.StreetService;
  22. import java.time.LocalDate;
  23. import java.time.format.DateTimeFormatter;
  24. import java.time.temporal.ChronoUnit;
  25. import java.util.ArrayList;
  26. import java.util.List;
  27. import java.util.function.DoubleToIntFunction;
  28. /**
  29. * @author kevin
  30. * @since 2019/7/26 9:59 AM
  31. */
  32. @Service
  33. public class CarrierQueryService {
  34. private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  35. @Autowired
  36. private BuildingService buildingService;
  37. @Autowired
  38. private BuildingDao buildingDao;
  39. @Autowired
  40. private FloorService floorService;
  41. @Autowired
  42. private IcContractService icContractService;
  43. @Autowired
  44. private DictionaryItemService dictionaryItemService;
  45. @Autowired
  46. private ParkService parkService;
  47. @Autowired
  48. private StreetService streetService;
  49. /**
  50. * 载体查询
  51. *
  52. * @param query
  53. * @return
  54. */
  55. public PageInfo<Building> refactorBuildingsByQuery(CarrierQueryDto query) {
  56. if (StringUtils.isNotEmpty(query.getDemandTime())){
  57. LocalDate localDate = LocalDate.now().plusMonths(Integer.parseInt(query.getDemandTime()));
  58. query.setDemandDate(localDate.toString());
  59. }
  60. PageHelper.startPage(query.getPageNum(), query.getPageSize());
  61. List<Building> buildingList = buildingDao.getBuildingsByQuery(query);
  62. for (Building building : buildingList) {
  63. building.setCarrier_attriute_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FACTORY_TYPE, building.getCarrier_attriute() + ""));
  64. building.setBuild_use_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.BUILDING_USES, building.getBuild_use() + ""));
  65. building.setCarrier_structure_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.CARRIER_STRUCTURE, building.getCarrier_structure() + ""));
  66. query.setBuilding_id(building.getId());
  67. building.setRemain_area(buildingDao.findBuildingRemainArea(query));
  68. //最早入住时间
  69. building.setEarliest_checkin_date(earliestCheckinTime(query));
  70. }
  71. return new PageInfo<>(buildingList);
  72. }
  73. public List<Building> multilayer() {
  74. return null;
  75. }
  76. public List<Building> singleFloor() {
  77. return null;
  78. }
  79. /**
  80. * 最早入住时间
  81. *
  82. * @param query
  83. * @return
  84. */
  85. private String earliestCheckinTime(CarrierQueryDto query){
  86. if (query.getCount() != null && query.getCount() ==1){
  87. LocalDate earliestCheckinTime = LocalDate.now();
  88. List<BuildFloor> floorList = floorService.findListByQuery(query);
  89. for (BuildFloor floor : floorList) {
  90. // LocalDate floorEarlestCheckinTime = singleEarliestCheckinTime(query, floor);
  91. if (singleEarliestCheckinTime(query, floor).isAfter(LocalDate.now())){
  92. earliestCheckinTime = singleEarliestCheckinTime(query, floor);
  93. }
  94. }
  95. return earliestCheckinTime.toString();
  96. }
  97. else {
  98. return multilayerEarliestCheckinTime(query);
  99. }
  100. }
  101. /**
  102. * 多层最早入住时间
  103. *
  104. * @param query
  105. * @return
  106. */
  107. private String multilayerEarliestCheckinTime(CarrierQueryDto query) {
  108. //获取最早入住时间
  109. if (StringUtils.isNotEmpty(query.getDemandTime())){
  110. return getEarlistCheckInTime(query, buildingDao.findBuildingRemainArea(query)).toString();
  111. }
  112. return LocalDate.now().toString();
  113. }
  114. /**
  115. * 单层最早入住时间
  116. *
  117. * @param query
  118. */
  119. private LocalDate singleEarliestCheckinTime(CarrierQueryDto query, BuildFloor floor) {
  120. // List<BuildFloor> floorList = floorService.findListByQuery(query);
  121. // for (BuildFloor floor : floorList) {
  122. Double remainArea = floor.getRemain_area();
  123. //最小面积
  124. if (query.getMinArea() != null && query.getMinArea() > 0) {
  125. if (floor.getRemain_area() < query.getMinArea()) {
  126. //获取最早入住时间
  127. // if (StringUtils.isNotEmpty(query.getDemandTime())){
  128. return getEarlistCheckInTime(query, remainArea);
  129. // }
  130. }
  131. }
  132. // }
  133. return LocalDate.now();
  134. }
  135. /**
  136. * 计算最早入住时间
  137. *
  138. * @param query
  139. * @param remainArea
  140. * @return
  141. */
  142. private LocalDate getEarlistCheckInTime(CarrierQueryDto query, Double remainArea) {
  143. List<ContractFloor> endContractList =
  144. icContractService.findEndContractList(query.getDemandDate(), query.getBuilding_id());
  145. for (ContractFloor contract : endContractList) {
  146. remainArea += contract.getFloor_area();
  147. if (remainArea >= query.getMinArea()) {
  148. return LocalDate.parse(contract.getContract_end(), df);
  149. }
  150. }
  151. return LocalDate.now();
  152. }
  153. /**
  154. * 入住详情
  155. *
  156. * @return
  157. */
  158. public Building checkinDetatil(Integer id, CarrierQueryDto query){
  159. Building building = buildingService.findById(id);
  160. if (building != null){
  161. building.setCarrier_attriute_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FACTORY_TYPE, building.getCarrier_attriute() + ""));
  162. building.setBuild_use_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.BUILDING_USES, building.getBuild_use() + ""));
  163. building.setCarrier_structure_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.CARRIER_STRUCTURE, building.getCarrier_structure() + ""));
  164. building.setDriving_type_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_TYPE, building.getDriving_type() + ""));
  165. building.setDriving_load_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_LOAD, building.getDriving_load() + ""));
  166. building.setDriving_spqn_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_SPQN, building.getDriving_spqn() + ""));
  167. building.setFire_rating_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FIRE_RATING, building.getFire_rating() + ""));
  168. building.setSpqn_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.SPQN, building.getSpqn() + ""));
  169. //最早入住时间
  170. List<BuildFloor> buildingFloors = findBuildingFloors(id);
  171. for (BuildFloor floor : buildingFloors) {
  172. if (query.getCount() != null && query.getCount() == 1){
  173. floor.setEarliest_checkin_date(singleEarliestCheckinTime(query, floor).toString());
  174. }
  175. else {
  176. floor.setEarliest_checkin_date(multilayerEarliestCheckinTime(query));
  177. }
  178. }
  179. building.setFloorList(buildingFloors);
  180. building.setEarliest_checkin_date(earliestCheckinTime(query));
  181. //获取园区基本信息
  182. Park park = parkService.findById(building.getPark_id());
  183. Street street = streetService.findById(park.getStreet_id());
  184. park.setStreetName(street.getName());
  185. building.setPark(park);
  186. //合同到期企业
  187. List<ContractFloor> contractList = icContractService.findEndContractList(query.getDemandTime(), id);
  188. building.setContractList(contractList);
  189. }
  190. return building;
  191. }
  192. /**
  193. *
  194. * @param no
  195. * @param query
  196. * @return
  197. */
  198. public Building checkinDetatilByNo(String no, CarrierQueryDto query) {
  199. Building building = buildingService.findByNo(no);
  200. Integer id = building.getId();
  201. if (building != null){
  202. building.setCarrier_attriute_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FACTORY_TYPE, building.getCarrier_attriute() + ""));
  203. building.setBuild_use_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.BUILDING_USES, building.getBuild_use() + ""));
  204. building.setCarrier_structure_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.CARRIER_STRUCTURE, building.getCarrier_structure() + ""));
  205. building.setDriving_type_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_TYPE, building.getDriving_type() + ""));
  206. building.setDriving_load_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_LOAD, building.getDriving_load() + ""));
  207. building.setDriving_spqn_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_SPQN, building.getDriving_spqn() + ""));
  208. building.setFire_rating_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FIRE_RATING, building.getFire_rating() + ""));
  209. building.setSpqn_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.SPQN, building.getSpqn() + ""));
  210. //最早入住时间
  211. List<BuildFloor> buildingFloors = findBuildingFloors(id);
  212. for (BuildFloor floor : buildingFloors) {
  213. if (query.getCount() != null && query.getCount() == 1){
  214. floor.setEarliest_checkin_date(singleEarliestCheckinTime(query, floor).toString());
  215. }
  216. else {
  217. floor.setEarliest_checkin_date(multilayerEarliestCheckinTime(query));
  218. }
  219. }
  220. building.setFloorList(buildingFloors);
  221. building.setEarliest_checkin_date(earliestCheckinTime(query));
  222. //获取园区基本信息
  223. Park park = parkService.findById(building.getPark_id());
  224. Street street = streetService.findById(park.getStreet_id());
  225. park.setStreetName(street.getName());
  226. building.setPark(park);
  227. //合同到期企业
  228. List<ContractFloor> contractList = icContractService.findEndContractList(query.getDemandTime(), id);
  229. building.setContractList(contractList);
  230. }
  231. return building;
  232. }
  233. /**
  234. * 获取方案详情的楼层
  235. *
  236. * @param id
  237. * @return
  238. */
  239. private List<BuildFloor> findBuildingFloors(Integer id) {
  240. return floorService.findCarrierQueryDetailFloors(id);
  241. }
  242. }