package platform.modules.carrier.service; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xiaoleilu.hutool.getter.ListTypeGetter; import jdk.nashorn.internal.ir.IdentNode; import org.apache.commons.lang3.StringUtils; import org.apache.xmlbeans.impl.xb.xsdschema.Public; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import platform.common.Constant; import platform.common.base.service.DictionaryItemService; import platform.modules.build.entity.BuildFloor; import platform.modules.build.service.FloorService; import platform.modules.carrier.dao.BuildingDao; import platform.modules.carrier.dto.BuildingFloorVo; import platform.modules.carrier.dto.CarrierQueryDto; import platform.modules.carrier.entity.Building; import platform.modules.carrier.entity.ContractFloor; import platform.modules.carrier.entity.Park; import platform.modules.government.entity.Street; import platform.modules.government.service.StreetService; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.function.DoubleToIntFunction; /** * @author kevin * @since 2019/7/26 9:59 AM */ @Service public class CarrierQueryService { private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); @Autowired private BuildingService buildingService; @Autowired private BuildingDao buildingDao; @Autowired private FloorService floorService; @Autowired private IcContractService icContractService; @Autowired private DictionaryItemService dictionaryItemService; @Autowired private ParkService parkService; @Autowired private StreetService streetService; /** * 载体查询 * * @param query * @return */ public PageInfo refactorBuildingsByQuery(CarrierQueryDto query) { if (StringUtils.isNotEmpty(query.getDemandTime())){ LocalDate localDate = LocalDate.now().plusMonths(Integer.parseInt(query.getDemandTime())); query.setDemandDate(localDate.toString()); } PageHelper.startPage(query.getPageNum(), query.getPageSize()); List buildingList = buildingDao.getBuildingsByQuery(query); for (Building building : buildingList) { building.setCarrier_attriute_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FACTORY_TYPE, building.getCarrier_attriute() + "")); building.setBuild_use_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.BUILDING_USES, building.getBuild_use() + "")); building.setCarrier_structure_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.CARRIER_STRUCTURE, building.getCarrier_structure() + "")); query.setBuilding_id(building.getId()); building.setRemain_area(buildingDao.findBuildingRemainArea(query)); //最早入住时间 building.setEarliest_checkin_date(earliestCheckinTime(query)); } return new PageInfo<>(buildingList); } public List multilayer() { return null; } public List singleFloor() { return null; } /** * 最早入住时间 * * @param query * @return */ private String earliestCheckinTime(CarrierQueryDto query){ if (query.getCount() != null && query.getCount() ==1){ LocalDate earliestCheckinTime = LocalDate.now(); List floorList = floorService.findListByQuery(query); for (BuildFloor floor : floorList) { // LocalDate floorEarlestCheckinTime = singleEarliestCheckinTime(query, floor); if (singleEarliestCheckinTime(query, floor).isAfter(LocalDate.now())){ earliestCheckinTime = singleEarliestCheckinTime(query, floor); } } return earliestCheckinTime.toString(); } else { return multilayerEarliestCheckinTime(query); } } /** * 多层最早入住时间 * * @param query * @return */ private String multilayerEarliestCheckinTime(CarrierQueryDto query) { //获取最早入住时间 if (StringUtils.isNotEmpty(query.getDemandTime())){ return getEarlistCheckInTime(query, buildingDao.findBuildingRemainArea(query)).toString(); } return LocalDate.now().toString(); } /** * 单层最早入住时间 * * @param query */ private LocalDate singleEarliestCheckinTime(CarrierQueryDto query, BuildFloor floor) { // List floorList = floorService.findListByQuery(query); // for (BuildFloor floor : floorList) { Double remainArea = floor.getRemain_area(); //最小面积 if (query.getMinArea() != null && query.getMinArea() > 0) { if (floor.getRemain_area() < query.getMinArea()) { //获取最早入住时间 // if (StringUtils.isNotEmpty(query.getDemandTime())){ return getEarlistCheckInTime(query, remainArea); // } } } // } return LocalDate.now(); } /** * 计算最早入住时间 * * @param query * @param remainArea * @return */ private LocalDate getEarlistCheckInTime(CarrierQueryDto query, Double remainArea) { List endContractList = icContractService.findEndContractList(query.getDemandDate(), query.getBuilding_id()); for (ContractFloor contract : endContractList) { remainArea += contract.getFloor_area(); if (remainArea >= query.getMinArea()) { return LocalDate.parse(contract.getContract_end(), df); } } return LocalDate.now(); } /** * 入住详情 * * @return */ public Building checkinDetatil(Integer id, CarrierQueryDto query){ Building building = buildingService.findById(id); if (building != null){ building.setCarrier_attriute_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FACTORY_TYPE, building.getCarrier_attriute() + "")); building.setBuild_use_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.BUILDING_USES, building.getBuild_use() + "")); building.setCarrier_structure_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.CARRIER_STRUCTURE, building.getCarrier_structure() + "")); building.setDriving_type_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_TYPE, building.getDriving_type() + "")); building.setDriving_load_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_LOAD, building.getDriving_load() + "")); building.setDriving_spqn_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_SPQN, building.getDriving_spqn() + "")); building.setFire_rating_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FIRE_RATING, building.getFire_rating() + "")); building.setSpqn_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.SPQN, building.getSpqn() + "")); //最早入住时间 List buildingFloors = findBuildingFloors(id); for (BuildFloor floor : buildingFloors) { if (query.getCount() != null && query.getCount() == 1){ floor.setEarliest_checkin_date(singleEarliestCheckinTime(query, floor).toString()); } else { floor.setEarliest_checkin_date(multilayerEarliestCheckinTime(query)); } } building.setFloorList(buildingFloors); building.setEarliest_checkin_date(earliestCheckinTime(query)); //获取园区基本信息 Park park = parkService.findById(building.getPark_id()); Street street = streetService.findById(park.getStreet_id()); park.setStreetName(street.getName()); building.setPark(park); //合同到期企业 List contractList = icContractService.findEndContractList(query.getDemandTime(), id); building.setContractList(contractList); } return building; } /** * * @param no * @param query * @return */ public Building checkinDetatilByNo(String no, CarrierQueryDto query) { Building building = buildingService.findByNo(no); Integer id = building.getId(); if (building != null){ building.setCarrier_attriute_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FACTORY_TYPE, building.getCarrier_attriute() + "")); building.setBuild_use_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.BUILDING_USES, building.getBuild_use() + "")); building.setCarrier_structure_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.CARRIER_STRUCTURE, building.getCarrier_structure() + "")); building.setDriving_type_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_TYPE, building.getDriving_type() + "")); building.setDriving_load_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_LOAD, building.getDriving_load() + "")); building.setDriving_spqn_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.DRIVING_SPQN, building.getDriving_spqn() + "")); building.setFire_rating_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.FIRE_RATING, building.getFire_rating() + "")); building.setSpqn_desc(dictionaryItemService.findNameByTypeAndValue(Constant.DictionaryType.SPQN, building.getSpqn() + "")); //最早入住时间 List buildingFloors = findBuildingFloors(id); for (BuildFloor floor : buildingFloors) { if (query.getCount() != null && query.getCount() == 1){ floor.setEarliest_checkin_date(singleEarliestCheckinTime(query, floor).toString()); } else { floor.setEarliest_checkin_date(multilayerEarliestCheckinTime(query)); } } building.setFloorList(buildingFloors); building.setEarliest_checkin_date(earliestCheckinTime(query)); //获取园区基本信息 Park park = parkService.findById(building.getPark_id()); Street street = streetService.findById(park.getStreet_id()); park.setStreetName(street.getName()); building.setPark(park); //合同到期企业 List contractList = icContractService.findEndContractList(query.getDemandTime(), id); building.setContractList(contractList); } return building; } /** * 获取方案详情的楼层 * * @param id * @return */ private List findBuildingFloors(Integer id) { return floorService.findCarrierQueryDetailFloors(id); } }