package com.zteits.sys.biz; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import com.zteits.clouds.api.dto.sys.param.*; import com.google.common.collect.Lists; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.alibaba.fastjson.JSONObject; import com.clouds.common.log.LogSelf; import com.clouds.common.utils.LogSelfFactory; import com.clouds.common.utils.ResultUtils; import com.clouds.common.utils.SequenceUtil; import com.xiaoleilu.hutool.util.CollectionUtil; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.AreaTypeEnum; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.constants.SequenceTypeEnum; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; import com.zteits.clouds.api.dto.park.param.IsAllowDelAreaBlockRequest; import com.zteits.clouds.api.dto.park.param.QueryParkingLotByAreaBlockRequest; import com.zteits.clouds.api.dto.pay.param.ChangeBlockForParkLotRequest; import com.zteits.clouds.api.dto.sys.AreaTreeDTO; import com.zteits.clouds.api.dto.sys.CityAreaTreeDTO; import com.zteits.clouds.api.dto.sys.QueryProvinceCityAreaByBlockIdsDTO; import com.zteits.clouds.api.dto.sys.TbAreaDTO; import com.zteits.clouds.api.service.park.ParkingLotQueryService; import com.zteits.clouds.api.service.park.ParkingLotService; import com.zteits.clouds.api.service.sys.TbAreaService; import com.zteits.sys.dao.SysOrgAreaDao; import com.zteits.sys.dao.TbAreaBlockDao; import com.zteits.sys.dao.TbAreaDao; import com.zteits.sys.domain.TbArea; import com.zteits.sys.domain.TbAreaBlock; @Service("com.zteits.sys.biz.TbAreaServiceImpl") public class TbAreaServiceImpl implements TbAreaService { private static final LogSelf log = LogSelfFactory.getLogSelf(TbAreaServiceImpl.class); @Autowired private TbAreaDao tbAreaDao; @Autowired private TbAreaBlockDao tbAreaBlockDao; @Autowired private SysOrgAreaDao sysOrgAreaDao; @Autowired private ParkingLotQueryService parkingLotQueryService; @Autowired private ParkingLotService parkingLotService; @Override public BizResult> queryNextLowerLeverById(TbAreaQueryRequest request) { log.info("请求参数:" + JSONObject.toJSONString(request)); if (null == request.getId()) { throw new BizException(ErrorType.PARAMM_NULL, "区域id"); } List dtoList = new ArrayList<>(); List nextLowerLeverArea = tbAreaDao.queryNextLowerLeverById(request.getId()); if (!CollectionUtils.isEmpty(nextLowerLeverArea)) { for (TbArea tbArea : nextLowerLeverArea) { TbAreaDTO dto = new TbAreaDTO(); if (null != tbArea) { BeanUtils.copyProperties(tbArea, dto); } dtoList.add(dto); } } return new BizResult>(dtoList); } @Override public BizResult> queryNextLowerLeverByIdForArea(TbAreaQueryRequest request) { log.info("请求参数:" + JSONObject.toJSONString(request)); if (null == request.getId()) { throw new BizException(ErrorType.PARAMM_NULL, "区域id"); } List dtoList = new ArrayList<>(); List nextLowerLeverArea = tbAreaBlockDao.queryNextLowerLeverByIdForArea(request.getId()); if (!CollectionUtils.isEmpty(nextLowerLeverArea)) { for (TbAreaBlock tbArea : nextLowerLeverArea) { TbAreaBlockDTO dto = new TbAreaBlockDTO(); if (null != tbArea) { BeanUtils.copyProperties(tbArea, dto); } dtoList.add(dto); } } return new BizResult<>(dtoList); } @Override public BizResult> queryProvince(TbAreaQueryProvinceRequest request) { log.info("请求参数:" + JSONObject.toJSONString(request)); if (null == request) { throw new BizException(ErrorType.PARAMM_NULL, "区域id"); } List dtoList = new ArrayList<>(); List province = tbAreaDao.queryProvince(); if (!CollectionUtils.isEmpty(province)) { for (TbArea tbArea : province) { TbAreaDTO dto = new TbAreaDTO(); if (null != tbArea) { BeanUtils.copyProperties(tbArea, dto); } dtoList.add(dto); } } return new BizResult>(dtoList); } @Override public BizResult> queryAreaBlockByOrgId(AreaBlockByOrgIdQueryRequest request) { if (null == request.getOrgId()) { throw new BizException(ErrorType.PARAMM_NULL, "归属组织Id"); } List areas = tbAreaDao.queryTbAreaByAreaType( Arrays.asList(AreaTypeEnum.PROVINCE.code(), AreaTypeEnum.CITY.code(), AreaTypeEnum.DISTRICT.code())); List areaBlocks = tbAreaBlockDao.queryAreaBlockByAreaType(Arrays.asList(AreaTypeEnum.BLOCK.code()), request.getOrgId()); List areaTreeDTOS = new ArrayList<>(); AreaTreeDTO dto; if (!CollectionUtils.isEmpty(areas)) { for (TbArea tbArea : areas) { dto = new AreaTreeDTO(); BeanUtils.copyProperties(tbArea, dto); areaTreeDTOS.add(dto); } } if (!CollectionUtils.isEmpty(areaBlocks)) { for (TbAreaBlock tbArea : areaBlocks) { dto = new AreaTreeDTO(); BeanUtils.copyProperties(tbArea, dto); areaTreeDTOS.add(dto); } } return new BizResult<>(areaTreeDTOS); } public static void main(String[] args) { String nextId = "1109248454218356736011232"; long parseLong = Long.parseLong(nextId.substring(0, 18)); System.out.println(parseLong); } @Transactional @Override public BizResult saveOrUpdateAreaBlock(AreaBlockSaveOrUpdateRequest request) { TbAreaBlock tbAreaBlock = new TbAreaBlock(); BeanUtils.copyProperties(request, tbAreaBlock); tbAreaBlock.setModfiyDate(new Date()); tbAreaBlock.setModfiyEmpid(request.getOpId() + ""); int num; if (null == request.getId()) { //新增 String nextId = SequenceUtil.getNextId(SequenceTypeEnum.AREA_BLOCK_CODE); tbAreaBlock.setAreaCode(Long.parseLong(nextId.substring(0,18))); tbAreaBlock.setDataState(1); tbAreaBlock.setCreateDate(new Date()); tbAreaBlock.setCreateEmpid(request.getOpId()+""); num = tbAreaBlockDao.saveTbAreaBlock(tbAreaBlock); } else { //更新 num = tbAreaBlockDao.updateTbAreaBlock(tbAreaBlock); log.info("通过块ID,更新停车场对应的块名称"); ChangeBlockForParkLotRequest updateBlockForParkReq = new ChangeBlockForParkLotRequest(); updateBlockForParkReq.setModifyOp(request.getOpId()); updateBlockForParkReq.setModifyTime(new Date()); updateBlockForParkReq.setPlAreaBlockId(request.getId()); updateBlockForParkReq.setPlAreaBlockName(request.getAreaName()); updateBlockForParkReq.setSysCode(request.getSysCode()); /**通过办事处id更新停车场块信息.*/ BizResult bizResult = parkingLotService.updateParkLotBlockNameByBlockId(updateBlockForParkReq); log.info("更新停车场块名称响应信息为:"+JSONObject.toJSONString(bizResult)); if(ResultUtils.getBizResultData(bizResult)){ log.info("更新停车场块名称成功"); } } return new BizResult<>(num); } @Override public BizResult> queryAreaBlockByParentId(AreaBlockQueryByParentIdRequest request) { if (null == request.getAreaId()) { throw new BizException(ErrorType.PARAMM_NULL, "区县ID"); } if (null == request.getOrgId()) { throw new BizException(ErrorType.PARAMM_NULL, "归属组织ID"); } List areaBlocks = tbAreaBlockDao.queryAreaBlockByParentIdAndOrgId(request.getAreaId(), request.getOrgId()); List dtos = new ArrayList<>(); if (!CollectionUtils.isEmpty(areaBlocks)) { TbAreaDTO dto; for (TbAreaBlock block : areaBlocks) { dto = new TbAreaDTO(); BeanUtils.copyProperties(block, dto); dtos.add(dto); } } return new BizResult<>(dtos); } @Override @Transactional public BizResult deleteAreaBlockByAreaBlockId(AreaBlockDeleteByAreaBlockIdRequest request) { if (null == request.getAreaBlockId()) { throw new BizException(ErrorType.PARAMM_NULL, "区块ID"); } log.info("调用PARK,判断是否允许删除该区块"); IsAllowDelAreaBlockRequest allowDelRequest = new IsAllowDelAreaBlockRequest(); List areaBlockIds = new ArrayList<>(); areaBlockIds.add(request.getAreaBlockId()); allowDelRequest.setSysCode(request.getSysCode()); allowDelRequest.setPlAreaBlockId(areaBlockIds ); BizResult bizResult = parkingLotService.isAllowDeleteAreaBlock(allowDelRequest ); if(!bizResult.isSuccess() || !bizResult.getErrCode().getCode().equals(ErrorType.BIZ_SUCCESS.getCode())){ throw new BizException(bizResult.getErrCode(),bizResult.getErrMsg()); } log.info("根据区块ID[{}]删除区块----start---", request.getAreaBlockId()); /** * 1、根据区块ID 删除区块与组织的关联关系 */ int num = sysOrgAreaDao.deleteOrgAreaRelationByAreaId(request.getAreaBlockId()); log.info("根据区块ID[{}]删除区块,删除区块与组织的关联关系{}条", request.getAreaBlockId(), num); /** * 2、删除 区块 */ num = tbAreaBlockDao.deleteTbAreaBlock(request.getAreaBlockId()); log.info("根据区块ID[{}]删除区块,删除区块{}条", request.getAreaBlockId(), num); log.info("根据区块ID[{}]删除区块----end---", request.getAreaBlockId()); return new BizResult<>(1); } @Override public BizResult> queryAreaByAreaType(AreaQueryByAreaTypeRequest request) { if (null == request.getAreaType()) { throw new BizException(ErrorType.PARAMM_NULL, "区域类型"); } List dtos = new ArrayList<>(); TbArea tbArea = new TbArea(); tbArea.setAreaType(request.getAreaType()); tbArea.setDataState(1); List areas = tbAreaDao.queryTbAreaByAreaType(Arrays.asList(request.getAreaType())); if (!CollectionUtils.isEmpty(areas)) { TbAreaDTO dto; for (TbArea area : areas) { dto = new TbAreaDTO(); BeanUtils.copyProperties(area, dto); dtos.add(dto); } } return new BizResult<>(dtos); } @Override public BizResult> queryAreaBlockByBlockId(AreaBlockQueryByAreaBlockIdsRequest request) { if (null == request.getPlBlockIds()) { throw new BizException(ErrorType.PARAMM_NULL, "区块ID"); } List dtos = new ArrayList<>(); List areas = tbAreaBlockDao.queryAreaBlockByBlockId(request.getPlBlockIds()); if (!CollectionUtils.isEmpty(areas)) { for (TbAreaBlock area : areas) { AreaTreeDTO dto = new AreaTreeDTO(); BeanUtils.copyProperties(area, dto); dtos.add(dto); } } return new BizResult<>(dtos); } @Override public BizResult> queryCityAreaByBlockIds(CityAreaQueryBlockIdsRequest request) { List resultDto = new ArrayList<>(); if(CollectionUtils.isEmpty(request.getBlockIds())){ throw new BizException(ErrorType.PARAMM_NULL,"区块ID集合"); } List areaBlockList = tbAreaBlockDao.queryAreaBlockByBlockId(request.getBlockIds()); if(CollectionUtils.isEmpty(areaBlockList)){ return new BizResult<>(resultDto); } Set parentIds = new HashSet<>(); //获取排重后的父级节点id for(TbAreaBlock tbAreaBlock:areaBlockList){ parentIds.add(tbAreaBlock.getParentId()); } return null; } /** * 根据父级节点递归查询区域信息 * @param * @return */ //private CityAreaTreeDTO queryCityAreaTreeByParentIdOfRecursion(Long parentId){ // List areas = tbAreaDao.queryTbAreaByParentId(parentId); // CityAreaTreeDTO dto = new CityAreaTreeDTO(); // List childList = new ArrayList<>(); // CityAreaTreeDTO tempDto = null; // if(CollectionUtils.isEmpty(areas)){ // return null; // } // // for(TbArea area:areas){ // dto = new CityAreaTreeDTO(); // BeanUtils.copyProperties(area,dto); // if(null != area.getParentId() && 0 != area.getParentId()){ // tempDto = queryCityAreaTreeByParentIdOfRecursion(area.getParentId()); // childList.add(tempDto); // } // // } // // //} @Override public BizResult> queryProvinceCityAreaByBlockIdsRequest( QueryProvinceCityAreaByBlockIdsRequest request) { if(CollectionUtils.isEmpty(request.getBlockIds())){ throw new BizException(ErrorType.PARAMM_NULL, "区块ID"); } List VOlist=Lists.newArrayList(); List list = tbAreaBlockDao.queryAreaBlockByBlockId(request.getBlockIds()); for (TbAreaBlock tbAreaBlock : list) { QueryProvinceCityAreaByBlockIdsDTO dto=new QueryProvinceCityAreaByBlockIdsDTO(); if(null !=tbAreaBlock){ dto.setBlockId(null==tbAreaBlock.getId()?null:tbAreaBlock.getId()); dto.setBlockName(StringUtils.isEmpty(tbAreaBlock.getAreaName())?"":tbAreaBlock.getAreaName()); Long provinceId=tbAreaBlock.getParentId(); TbArea tbArea=new TbArea(); tbArea.setId(provinceId); TbArea area = tbAreaDao.queryTbAreaByTbArea(tbArea); if(null !=area){ dto.setAreaId(null==area.getId()?null:area.getId()); dto.setAreaName(StringUtils.isEmpty(area.getAreaName())?"":area.getAreaName()); Long cityId=area.getParentId(); TbArea city=new TbArea(); city.setId(cityId); TbArea cityNew = tbAreaDao.queryTbAreaByTbArea(city); if(null !=cityNew){ dto.setCityId(null==cityNew.getId()?null:cityNew.getId()); dto.setCityName(StringUtils.isEmpty(cityNew.getAreaName())?"":cityNew.getAreaName()); Long pId=cityNew.getParentId(); TbArea pro=new TbArea(); pro.setId(pId); TbArea province = tbAreaDao.queryTbAreaByTbArea(pro); if(null != province){ dto.setProvinceId(null==province.getId()?null:province.getId()); dto.setProvinceName(StringUtils.isEmpty(province.getAreaName())?"":province.getAreaName()); } } } } VOlist.add(dto); } return new BizResult>(VOlist); } /** * 通过操作员ID+组织id查询区域tree.
* 步骤:1.查找操作员对应的块信息.
* 2.通过块list查找对应的区县list.
* 3.通过区县父id list 查询地市list.
* 4.通过地市父id list 查询对应省份list.
* @param request * @return * 2017年12月27日 wangfs.
*/ @Override public BizResult> queryAreaTreeByOpIdAndOrgId(QueryAreaBlockByOpIdAndOrgIdRequest request) { log.info("begin通过操作员ID查询组织树,入参={}",JSONObject.toJSON(request)); List areaTree = new ArrayList<>(); if(request == null){ throw new BizException(ErrorType.PARAMM_NULL, "操作员ID为空"); } /**1.通过操作员ID+组织id查询块信息.*/ List areaBlockList = tbAreaBlockDao.queryAreaBlockByOpIdAndOrgId(request.getSysOpId(), request.getOrgId()); log.info("获取块list.size()={}",!CollectionUtils.isEmpty(areaBlockList) ?areaBlockList.size():0); /**2.查询区县list.*/ //2.1 根据节点查询区域数据 List areaIds = tbAreaDao.queryTbAreaByIdList(this.getAreaCodeFromBlockList(areaBlockList)); List areaList = tbAreaDao.queryAreaByParentIdAndAreaType(this.getAreaCodeFromAreaList(areaIds), AreaTypeEnum.DISTRICT.code()); log.info("获取区县list.size()={}",!CollectionUtils.isEmpty(areaList) ?areaList.size():0); /**3.查询地市list.*/ List cityList = tbAreaDao.queryAreaByIdsAndAreaType(this.getAreaCodeFromAreaList(areaList), AreaTypeEnum.CITY.code()); log.info("获取地市list.size()={}",!CollectionUtils.isEmpty(cityList) ?cityList.size():0); /**4.查询省份list.*/ List provList = tbAreaDao.queryAreaByIdsAndAreaType(this.getAreaCodeFromAreaList(cityList), AreaTypeEnum.PROVINCE.code()); log.info("获取省份list.size()={}",!CollectionUtils.isEmpty(provList) ?provList.size():0); //添加块信息 if(!CollectionUtils.isEmpty(areaBlockList) ){ for(TbAreaBlock areaBlock:areaBlockList){ AreaTreeDTO areaTreeDTO = new AreaTreeDTO(); if(areaBlock == null){ continue; } areaTreeDTO.setId(areaBlock.getId()); areaTreeDTO.setAreaName(areaBlock.getAreaName()); areaTreeDTO.setParentId(areaBlock.getParentId()); areaTreeDTO.setAreaType(areaBlock.getAreaType()); areaTree.add(areaTreeDTO); } } //添加省份 if(!CollectionUtils.isEmpty(provList)){ AreaTreeDTO areaDTO = new AreaTreeDTO(); areaDTO.setId(-1L); areaDTO.setAreaName("全国"); areaDTO.setParentId(-1L); areaTree.add(areaDTO); for(TbArea area:provList){ AreaTreeDTO areaTreeDTO = new AreaTreeDTO(); if(area == null){ continue; } areaTreeDTO.setId(area.getId()); areaTreeDTO.setAreaName(area.getAreaName()); areaTreeDTO.setParentId(-1L); areaTreeDTO.setAreaType(area.getAreaType()); areaTree.add(areaTreeDTO); } } //添加地市、区县 if(!CollectionUtils.isEmpty(cityList)){ cityList.addAll(areaList); for(TbArea area:cityList){ AreaTreeDTO areaTreeDTO = new AreaTreeDTO(); if(area == null){ continue; } areaTreeDTO.setId(area.getId()); areaTreeDTO.setAreaName(area.getAreaName()); areaTreeDTO.setParentId(area.getParentId()); areaTreeDTO.setAreaType(area.getAreaType()); areaTree.add(areaTreeDTO); } } log.info("end通过操作员ID查询组织树..."); return new BizResult>(areaTree); } /** * 获取块中的区县list.
* @param areaBlockList * @return * 2017年12月27日 wangfs.
*/ private List getAreaCodeFromBlockList(List areaBlockList){ Set set = new HashSet<>(); if(!CollectionUtils.isEmpty(areaBlockList)){ for(TbAreaBlock areaBlock:areaBlockList){ if(areaBlock == null){ continue; } set.add(areaBlock.getParentId()); } } return new ArrayList(set); } /** * 查询区域父类id.
* @param * @return * 2017年12月27日 wangfs.
*/ private List getAreaCodeFromAreaIdList(List areaList){ Set set = new HashSet<>(); if(!CollectionUtils.isEmpty(areaList)){ for(TbArea area:areaList){ if(area == null){ continue; } set.add(area.getId()); } } return new ArrayList(set); } /** * 查询区域父类ids.
* @param * @return * 2017年12月27日 wangfs.
*/ private List getAreaCodeFromAreaList(List areaList){ Set set = new HashSet<>(); if(!CollectionUtils.isEmpty(areaList)){ for(TbArea area:areaList){ if(area == null){ continue; } set.add(area.getParentId()); } } return new ArrayList(set); } /** * 检查块名称是否唯一.
* @param request * @return * 2018年1月2日 wangfs.
*/ @Override public BizResult checkBlockNameUnique(CheckBlockNameUniqueRequest request) { log.info("begin检查块名称是否唯一性,入参={}",JSONObject.toJSON(request)); if (null == request || StringUtils.isEmpty(request.getBlockName())) { throw new BizException(ErrorType.PARAMM_NULL, "区块名称"); } Boolean flg = tbAreaBlockDao.checkBlockNameUnique(request); log.info("end检查块名称是否唯一性, true='存在',false='不存在',结果={}",flg); return new BizResult(flg); } @Override public BizResult>> queryAreaByOpIdAndOrgId(QueryAreaBlockByOpIdAndOrgIdRequest request) { log.info("begin通过操作员ID查询组织树,入参={}",JSONObject.toJSON(request)); if(request == null){ throw new BizException(ErrorType.PARAMM_NULL, "操作员ID为空"); } Map> resultMap = new HashMap<>(); /**1.通过操作员ID+组织id查询块信息.*/ List areaBlockList = tbAreaBlockDao.queryAreaBlockByOpIdAndOrgId(request.getSysOpId(), request.getOrgId()); log.info("获取块list.size()={}",!CollectionUtils.isEmpty(areaBlockList) ?areaBlockList.size():0); if(CollectionUtil.isEmpty(areaBlockList)){ return new BizResult<>(resultMap); } Map> areaBlockMap = areaBlockList.stream().map(areaBlock->{ TbAreaBlockDTO areaBlockDTO = new TbAreaBlockDTO(); BeanUtils.copyProperties(areaBlock, areaBlockDTO); return areaBlockDTO; }).collect(Collectors.groupingBy(TbAreaBlockDTO::getParentId)); /**2.查询区县list.*/ List areaList = tbAreaDao.queryAreaByIdsAndAreaType(this.getAreaCodeFromBlockList(areaBlockList), AreaTypeEnum.DISTRICT.code()); log.info("获取区县list.size()={}",!CollectionUtils.isEmpty(areaList) ?areaList.size():0); if(CollectionUtil.isNotEmpty(areaList)){ Set areaNos = new HashSet<>(); for (TbArea area:areaList) { TbAreaDTO dto=new TbAreaDTO(); if(area==null){ continue; } BeanUtils.copyProperties(area,dto); if(areaNos.contains(area.getId())){ continue; } areaNos.add(area.getAreaCode()); resultMap.put(dto, areaBlockMap.get(area.getId())); } } return new BizResult<>(resultMap); } @Override public BizResult> queryAreaBlockListByOrgId(AreaBlockByOrgIdQueryRequest request) { if (null == request.getOrgId()) { throw new BizException(ErrorType.PARAMM_NULL, "归属组织Id"); } List areaBlocks = tbAreaBlockDao.queryAreaBlockByAreaType(Arrays.asList(AreaTypeEnum.BLOCK.code()), request.getOrgId()); List dtoList=new ArrayList<>(); if(CollectionUtil.isNotEmpty(areaBlocks)){ for (TbAreaBlock areaBlock : areaBlocks) { TbAreaBlockDTO dto=new TbAreaBlockDTO(); if(areaBlock!=null){ BeanUtils.copyProperties(areaBlock,dto); dtoList.add(dto); } } } return new BizResult<>(dtoList); } @Override public BizResult queryAreaByAreaId(AreaQueryByAreaIdRequest request) { if (null == request.getAreaId()) { throw new BizException(ErrorType.PARAMM_NULL, "区域id为空!"); } TbArea area = tbAreaDao.queryTbAreaByAreaId(request.getAreaId()); TbAreaDTO dto = new TbAreaDTO(); BeanUtils.copyProperties(area, dto); return new BizResult<>(dto); } }