package com.zteits.park.biz; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.clouds.common.cache.park.ParkingLotCacheUtil; import com.clouds.common.constants.ParkConstant.OptFlag; import com.clouds.common.constants.ParkLotEnum; import com.clouds.common.utils.BeanValidatorsUtils; import com.github.pagehelper.PageInfo; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.DataStatusEnum; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; import com.zteits.clouds.api.dto.park.dto.TpPRegionAreaDTO; import com.zteits.clouds.api.dto.park.param.BatchSaveTpPRegionAreaRequest; import com.zteits.clouds.api.dto.park.param.DeleteTpPRegionAreaRequest; import com.zteits.clouds.api.dto.park.param.QueryTpPRegionAreaByBerthNoRequest; import com.zteits.clouds.api.dto.park.param.QueryTpPRegionAreaByPlNoAndParkAreaCodeRequest; import com.zteits.clouds.api.dto.park.param.QueryTpPRegionAreaForPageRequest; import com.zteits.clouds.api.dto.park.param.SaveOrUpdateTpPRegionAreaRequest; import com.zteits.clouds.api.dto.park.param.TpPRegionAreaByBerthRangeNosQueryReq; import com.zteits.clouds.api.dto.park.param.TpPRegionAreaQueryByPlNosReq; import com.zteits.clouds.api.service.park.TpPRegionAreaService; import com.zteits.park.dao.BerthsDao; import com.zteits.park.dao.TpPRegionAreaDao; import com.zteits.park.domain.TpPRegionArea; import com.zteits.park.domain.TpPRegionAreaDO; import com.zteits.park.pagepager.PageBeanUtil; import io.jsonwebtoken.lang.Collections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service("com.zteits.park.biz.TpPRegionAreaServiceImpl") public class TpPRegionAreaServiceImpl implements TpPRegionAreaService { private static final Logger logger = LoggerFactory.getLogger(TpPRegionAreaServiceImpl.class); @Autowired private TpPRegionAreaDao tpPRegionAreaDao; @Autowired private BerthsDao berthsDao; @Override public BizResult saveOrUpdateTpPRegionArea(SaveOrUpdateTpPRegionAreaRequest request) { logger.info("开始保存或修改区间信息请求参数:" + JSONObject.toJSONString(request)); TpPRegionArea tpPRegionArea = new TpPRegionArea(); BeanUtils.copyProperties(request, tpPRegionArea); tpPRegionArea.setCreateTime(new Date()); tpPRegionArea.setModifyTime(new Date()); tpPRegionArea.setModifyOp(request.getCreateEmpid()); tpPRegionArea.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); boolean b = true; long id = tpPRegionAreaDao.saveOrUpdateTpPRegionArea(tpPRegionArea); if (id <= 0) { b = false; } return new BizResult<>(b); } @Override @Transactional public BizResult deleteTpPRegionArea(DeleteTpPRegionAreaRequest request) { BeanValidatorsUtils.validateWithException(request); logger.info("开始删除区间信息请求参数:" + JSONObject.toJSONString(request)); Boolean b = tpPRegionAreaDao.deleteTpPRegionArea(request.getIds(), request.getOpId()); return new BizResult<>(b); } @Override public BizResult> queryTpPRegionAreaForPage(QueryTpPRegionAreaForPageRequest request) { logger.info("泊位区间管理分页查询查询泊位区间信息入参:" + JSON.toJSONString(request)); PageInfo pageInfo = tpPRegionAreaDao.queryTpPRegionAreaForPage(request.getPlNos(), request.getParkAreaName(), request.getBaseRequest().getPageNum(), request.getBaseRequest().getPageSize(), request.getParkAreaCode()); PageBean pageBean = new PageBean<>(); if (pageInfo == null) { return new BizResult<>(pageBean); } PageBeanUtil.copyProperties(pageInfo, pageBean, TpPRegionAreaDTO.class); return new BizResult<>(pageBean); } @Override public BizResult> queryTpPRegionAreaByPlNos(TpPRegionAreaQueryByPlNosReq req) { if (Collections.isEmpty(req.getPlNos())) { throw new BizException(ErrorType.PARAMM_NULL, "停车场编号"); } List dtoList = new ArrayList<>(); List areaList = tpPRegionAreaDao.queryTpPRegionAreaByPlNos(req.getPlNos()); if (!Collections.isEmpty(areaList)) { for (TpPRegionArea area : areaList) { TpPRegionAreaDTO dto = new TpPRegionAreaDTO(); BeanUtils.copyProperties(area, dto); dtoList.add(dto); } } return new BizResult<>(dtoList); } @Override public BizResult queryTpPRegionAreaByBerthNo(QueryTpPRegionAreaByBerthNoRequest request) { logger.info("根据停车场和车位号查询泊位信息:" + JSON.toJSONString(request)); if (StringUtils.isBlank(request.getBerthNo()) || StringUtils.isBlank(request.getPlNo())) { throw new BizException(ErrorType.PARAMM_NULL, "停车场或车位编码为空"); } TpPRegionAreaDTO dto = new TpPRegionAreaDTO(); List pRegionAreas = tpPRegionAreaDao.queryRegionAreaByBerthNo(request.getPlNo(), request.getBerthNo()); if (CollectionUtils.isEmpty(pRegionAreas)) { return new BizResult<>(dto); } BeanUtils.copyProperties(pRegionAreas.get(0), dto); return new BizResult<>(dto); } @Override public BizResult> queryTpPRegionAreaByPlNos(QueryTpPRegionAreaForPageRequest request) { PageBean pageBean = new PageBean(); PageInfo pageInfo = tpPRegionAreaDao.queryTpPRegionAreaForPage(request.getPlNos(), request.getParkAreaName(), request.getBaseRequest().getPageNum(), request.getBaseRequest().getPageSize(), request.getParkAreaCode()); if (pageInfo != null) { PageBeanUtil.copyProperties(pageInfo, pageBean, TpPRegionAreaDTO.class); } return new BizResult<>(pageBean); } @Override public BizResult queryBerthCountByPlNoAndParkAreaCode( QueryTpPRegionAreaByPlNoAndParkAreaCodeRequest request) { logger.info("通过停车场编号和泊位区间编号查询泊位总数:" + JSON.toJSONString(request)); Integer count = berthsDao.queryBerthCountByPlNoAndParkAreaCode(request.getPlNo(), request.getParkAreaCode()); return new BizResult<>(count); } @Transactional @Override public BizResult batchSaveTpPRegionArea(BatchSaveTpPRegionAreaRequest request) { logger.info("批量保存泊位区间:" + JSON.toJSONString(request)); for (String parkArea : request.getParkAreaNames()) { TpPRegionArea regionArea = new TpPRegionArea(); regionArea.setParkAreaName(parkArea); regionArea.setCreateOp(request.getCreateEmpid()); regionArea.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); regionArea.setModifyOp(request.getCreateEmpid()); regionArea.setModifyTime(new Date()); regionArea.setCreateTime(new Date()); regionArea.setOptFlg(OptFlag.ADD); regionArea.setPlNo(request.getPlNo()); tpPRegionAreaDao.insertSelective(regionArea); } return new BizResult(true); } @Override public BizResult> queryTpPRegionAreaByPlnoAndAreaCode( QueryTpPRegionAreaForPageRequest request) { List regions = tpPRegionAreaDao.queryTpPRegionAreaByPlnoAndAreaCode(request.getPlNo(), request.getParkAreaCode()); List result = new ArrayList<>(); if (CollectionUtils.isNotEmpty(regions)) { regions.stream().forEach(item -> { TpPRegionAreaDTO areaDTO = new TpPRegionAreaDTO(); BeanUtils.copyProperties(item, areaDTO); result.add(areaDTO); }); } return new BizResult>(result); } @Override public BizResult> queryTpPRegionAreaByBerthRangeNos( TpPRegionAreaByBerthRangeNosQueryReq request) { if(Collections.isEmpty(request.getBerthRangeNos())){ throw new BizException(ErrorType.PARAMM_NULL,"泊位区间编码"); } List result = new ArrayList<>(); //封闭车场虚拟的 List fbBerthRangeNos = request.getBerthRangeNos().parallelStream().filter(a->a.contains("_")).collect(Collectors.toList()); fbBerthRangeNos.parallelStream().forEach(a->{ String plNo = a.split("_")[0]; String index = a.split("_")[1]; ParkingLotDTO parkingLotDTO = ParkingLotCacheUtil.getParkLotByPlNo(plNo); if(null != parkingLotDTO && ParkLotEnum.PL_TYPE_2.getValue().equals(parkingLotDTO.getPlType())){ TpPRegionAreaDTO area = new TpPRegionAreaDTO(); area.setPlNo(plNo); area.setParkAreaCode(a); area.setParkAreaName("封闭虚拟泊位区间"+index); result.add(area); } }); //路侧泊位区间查询 Map mapData = tpPRegionAreaDao.queryTpPRegionAreaByParkAreaCodes(request.getBerthRangeNos()); if(mapData != null && !mapData.isEmpty()){ List regions = new ArrayList<>(mapData.values()); if (CollectionUtils.isNotEmpty(regions)) { regions.stream().forEach(item -> { TpPRegionAreaDTO areaDTO = new TpPRegionAreaDTO(); BeanUtils.copyProperties(item, areaDTO); result.add(areaDTO); }); } } return new BizResult<>(result); } }