| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- 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<Building> 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<Building> 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<Building> multilayer() {
- return null;
- }
- public List<Building> singleFloor() {
- return null;
- }
- /**
- * 最早入住时间
- *
- * @param query
- * @return
- */
- private String earliestCheckinTime(CarrierQueryDto query){
- if (query.getCount() != null && query.getCount() ==1){
- LocalDate earliestCheckinTime = LocalDate.now();
- List<BuildFloor> 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<BuildFloor> 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<ContractFloor> 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<BuildFloor> 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<ContractFloor> 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<BuildFloor> 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<ContractFloor> contractList = icContractService.findEndContractList(query.getDemandTime(), id);
- building.setContractList(contractList);
- }
- return building;
- }
- /**
- * 获取方案详情的楼层
- *
- * @param id
- * @return
- */
- private List<BuildFloor> findBuildingFloors(Integer id) {
- return floorService.findCarrierQueryDetailFloors(id);
- }
- }
|