TpPRegionAreaServiceImpl.java 10.4 KB
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<Boolean> 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<Boolean> 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<PageBean<TpPRegionAreaDTO>> queryTpPRegionAreaForPage(QueryTpPRegionAreaForPageRequest request) {
        logger.info("泊位区间管理分页查询查询泊位区间信息入参:" + JSON.toJSONString(request));
        PageInfo<TpPRegionAreaDO> pageInfo = tpPRegionAreaDao.queryTpPRegionAreaForPage(request.getPlNos(),
            request.getParkAreaName(),
            request.getBaseRequest().getPageNum(), request.getBaseRequest().getPageSize(), request.getParkAreaCode());
        PageBean<TpPRegionAreaDTO> pageBean = new PageBean<>();
        if (pageInfo == null) {
            return new BizResult<>(pageBean);
        }
        PageBeanUtil.copyProperties(pageInfo, pageBean, TpPRegionAreaDTO.class);
        return new BizResult<>(pageBean);
    }

    @Override
    public BizResult<List<TpPRegionAreaDTO>> queryTpPRegionAreaByPlNos(TpPRegionAreaQueryByPlNosReq req) {
        if (Collections.isEmpty(req.getPlNos())) {
            throw new BizException(ErrorType.PARAMM_NULL, "停车场编号");
        }

        List<TpPRegionAreaDTO> dtoList = new ArrayList<>();
        List<TpPRegionArea> 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<TpPRegionAreaDTO> 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<TpPRegionArea> 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<PageBean<TpPRegionAreaDTO>> queryTpPRegionAreaByPlNos(QueryTpPRegionAreaForPageRequest request) {
        PageBean<TpPRegionAreaDTO> pageBean = new PageBean<TpPRegionAreaDTO>();
        PageInfo<TpPRegionAreaDO> 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<Integer> queryBerthCountByPlNoAndParkAreaCode(
        QueryTpPRegionAreaByPlNoAndParkAreaCodeRequest request) {
        logger.info("通过停车场编号和泊位区间编号查询泊位总数:" + JSON.toJSONString(request));
        Integer count = berthsDao.queryBerthCountByPlNoAndParkAreaCode(request.getPlNo(), request.getParkAreaCode());
        return new BizResult<>(count);
    }

    @Transactional
    @Override
    public BizResult<Boolean> 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<Boolean>(true);
    }

    @Override
    public BizResult<List<TpPRegionAreaDTO>> queryTpPRegionAreaByPlnoAndAreaCode(
        QueryTpPRegionAreaForPageRequest request) {
        List<TpPRegionArea> regions = tpPRegionAreaDao.queryTpPRegionAreaByPlnoAndAreaCode(request.getPlNo(),
            request.getParkAreaCode());
        List<TpPRegionAreaDTO> 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<List<TpPRegionAreaDTO>>(result);
    }

    @Override
    public BizResult<List<TpPRegionAreaDTO>> queryTpPRegionAreaByBerthRangeNos(
        TpPRegionAreaByBerthRangeNosQueryReq request) {
        if(Collections.isEmpty(request.getBerthRangeNos())){
            throw new BizException(ErrorType.PARAMM_NULL,"泊位区间编码");
        }


        List<TpPRegionAreaDTO> result = new ArrayList<>();
        //封闭车场虚拟的
        List<String> 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<String,TpPRegionArea> mapData = tpPRegionAreaDao.queryTpPRegionAreaByParkAreaCodes(request.getBerthRangeNos());
        if(mapData != null && !mapData.isEmpty()){
            List<TpPRegionArea> 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);
    }

}