package com.doumee.service.business.impl.thrid; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.haikang.model.param.BaseListPageResponse; import com.doumee.core.haikang.model.param.BaseResponse; import com.doumee.core.haikang.model.param.BaseListPageRequest; import com.doumee.core.haikang.model.param.request.SensorStatusListRequest; import com.doumee.core.haikang.model.param.respose.PageCameraInfoResponse; import com.doumee.core.haikang.model.param.respose.PageFireChannelInfoResponse; import com.doumee.core.haikang.model.param.respose.PageRegionInfoResponse; import com.doumee.core.haikang.model.param.respose.PageSensorStatusResponse; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.dao.business.PlatformJobMapper; import com.doumee.dao.business.PlatformLogMapper; import com.doumee.dao.business.PlatformMapper; import com.doumee.dao.business.model.Platform; import com.doumee.dao.business.model.PlatformJob; import com.doumee.dao.web.response.platformReport.CarmeraListVO; import com.doumee.dao.web.response.platformReport.OnSitDispatchBoardVO; import com.doumee.dao.web.response.platformReport.RegionTreeVO; import com.doumee.service.business.third.BoardService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * TMS平台对接Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service @Slf4j public class BoardServiceImpl implements BoardService { @Autowired private PlatformLogMapper platformLogMapper; @Autowired private PlatformJobMapper platformJobMapper; @Autowired private PlatformMapper platformMapper; /** * 获取区域树形结构数据 * @return */ @Override public List getRegionTree(CarmeraListVO req){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 BaseListPageRequest param = new BaseListPageRequest(); param.setUserId("admin"); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageRegions(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){ initReginCameralList(allList,req.getName());//获取全部监控点数据 } List data = new RegionTreeVO(allList).buildTree(); return data; } private void initReginCameralList(List allList,String name) { List carmeraListVOList = cameraList(null); if(carmeraListVOList!=null && carmeraListVOList.size()>0){ for(PageRegionInfoResponse p : allList){ for(CarmeraListVO c : carmeraListVOList){ if(StringUtils.equals(p.getRegionIndexCode(),c.getReginCode()) && (StringUtils.contains(c.getName(),name) ||StringUtils.isBlank(name))){ if(p.getCarmeraList()==null){ p.setCarmeraList(new ArrayList<>()); } p.getCarmeraList().add(c); } } } } } /** * 获取区域树形结构数据 * @return */ @Override public List regionList(CarmeraListVO req){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 BaseListPageRequest param = new BaseListPageRequest(); param.setUserId("admin"); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageRegions(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } if(Constants.equalsInteger(req.getWithCameras(),Constants.ONE)){ initReginCameralList(allList,req.getName());//获取全部监控点数据 } return allList; } @Override public List cameraList(CarmeraListVO req){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 BaseListPageRequest param = new BaseListPageRequest(); param.setUserId("admin"); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageCameras(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } List data = new ArrayList<>(); for(PageCameraInfoResponse p : allList){ CarmeraListVO t = new CarmeraListVO(); t.setIndexCode(p.getCameraIndexCode()); t.setReginCode(p.getRegionIndexCode()); t.setName(p.getCameraName()); t.setStatus(p.getStatus()); t.setStatusName(p.getStatusName()); data.add(t); } return data; } @Override public List fireChannelList(){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 BaseListPageRequest param = new BaseListPageRequest(); param.setUserId("admin"); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageFireChannel(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } return allList; } @Override public List sensorStatusList(){ List allList = new ArrayList<>(); boolean hasNext = true; int curTotal = 0; int curPage = 1; while (hasNext){ //分页遍历循环查询所有门禁设备数据 SensorStatusListRequest param = new SensorStatusListRequest(); param.setPageSize(100); param.setPageNo(curPage); BaseResponse> response = HKService.pageSensorStatus(param); if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); } BaseListPageResponse r = response.getData(); curTotal += 100; if(curTotal >= r.getTotal()){ hasNext = false; } if(r.getList() == null || r.getList().size()==0){ hasNext =false; }else{ allList.addAll(r.getList()); } curPage++; } return allList; } @Override public OnSitDispatchBoardVO getCnddCenterData(){ OnSitDispatchBoardVO data = new OnSitDispatchBoardVO(); //月台总数 List list = platformMapper.selectJoinList(Platform.class,new MPJLambdaWrapper() .selectAll(Platform.class) .select(" ( select count(1) from platform_job pj where t.id = pj.PLATFORM_ID and pj.STATUS = "+Constants.PlatformJobStatus.WORKING.getKey()+" ) as workStatus ") .eq(Platform::getIsdeleted,Constants.ZERO) ); data.setPlatformTotal(list==null?0:list.size()); //空闲月台数量 data.setFreePlatform( list.stream().filter(i->Constants.formatIntegerNum(i.getWorkStatus())<=Constants.ZERO).collect(Collectors.toList()).size() ); //查询今日月台个状态作业数量 List jobList = platformJobMapper.selectJoinList(PlatformJob.class,new MPJLambdaWrapper() .selectAll(PlatformJob.class) .select("count(id)" ,PlatformJob::getCountum) .eq(PlatformJob::getIsdeleted,Constants.ZERO) .apply("to_days(create_data) = to_days(now())" ) .groupBy(PlatformJob::getStatus ) ); if(jobList!=null){ //-------------TODO----------【看板】爱确认需求-------------- // * 0待确认 1待签到 2等待叫号 3入园等待 4已叫号 5作业中 6作业完成 7转移中 8异常挂起 9已授权离园 10已离园 11 已过号 12已取消 for(PlatformJob model : jobList){ //预约车辆 if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.WAIT_CONFIRM.getKey()) ||Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.WART_SIGN_IN.getKey())){ data.setReservationCar(data.getReservationCar()+Constants.formatIntegerNum(model.getCountum())); } // 作业车辆 if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ data.setWorkingCar(data.getWorkingCar()+Constants.formatIntegerNum(model.getCountum())); } //排队车辆 if(Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.WAIT_CALL.getKey()) ||Constants.equalsInteger(model.getStatus(),Constants.PlatformJobStatus.IN_WAIT.getKey())){ data.setLineUpCar(data.getLineUpCar()+Constants.formatIntegerNum(model.getCountum())); } } } return data; } }