package com.fzzy.security.manager; import com.fzzy.common.manager.CommonManager; import com.fzzy.igds.camera.ApiCameraManager; import com.fzzy.igds.camera.data.ApiCameraData; import com.fzzy.igds.camera.data.ApiCameraResp; import com.fzzy.igds.constant.DepotType; import com.fzzy.igds.constant.OrderRespEnum; import com.fzzy.igds.constant.RespCodeEnum; import com.fzzy.igds.data.*; import com.fzzy.igds.domain.*; import com.fzzy.igds.io.manager.QuantityRemoteManager; import com.fzzy.igds.io.service.RemoteQuantityService; import com.fzzy.igds.request.QuantityRequest; import com.fzzy.igds.response.BaseResponse; import com.fzzy.igds.service.*; import com.fzzy.igds.utils.ContextUtil; import com.fzzy.igds.utils.DateUtil; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.*; /** * @Description * @Author CZT * @Date 2025/12/9 9:19 */ @Slf4j @Component public class SecManager { @Resource private CommonManager commonManager; @Resource private QuantityRemoteManager remoteManager; @Resource private SecCameraService secCameraService; @Resource private ApiCameraManager apiCameraManager; @Resource private PatrolService patrolService; @Resource private CoreDeptService coreDeptService; @Resource private QuantityService quantityService; @Resource private FileService fileService; /** * @param deptId * @param companyId * @return */ public List listCamera(String deptId, String companyId) { if (null == deptId) { return null; } List list = secCameraService.getCameraByDeptId(companyId, deptId); if (null == list || list.isEmpty()) { return null; } return list; } /** * 根据监控ID获取监控信息 * * @param companyId * @param cameraId * @return */ public Camera getCameraById(String companyId, String cameraId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } if (StringUtils.isEmpty(cameraId)) { return null; } return secCameraService.getCameraById(companyId, cameraId); } /** * 获取播放信息 * * @param param * @return */ public ApiCameraResp getPlayAddr(Camera param, String requireIp) { if (StringUtils.isEmpty(param.getId()) || StringUtils.isEmpty(param.getPlayType())) { log.error("没有获取到监控信息!"); return new ApiCameraResp("ERROR", "没有获取到监控信息!"); } // 根据id获取设备信息 Camera camera = secCameraService.getCameraById(ContextUtil.getCompanyId(), param.getId()); if (null == camera) { log.error("缓存中没有获取到摄像头信息" + param.toString()); return new ApiCameraResp("ERROR", "缓存中没有获取到摄像头信息!"); } //通过统一入口获取播放地址 ApiCameraData apiCameraData = new ApiCameraData(); apiCameraData.setCompanyId(camera.getCompanyId()); apiCameraData.setDeptId(camera.getDeptId()); apiCameraData.setCameraId(camera.getId()); apiCameraData.setIp(camera.getIp()); apiCameraData.setCtrlPort(camera.getControlPort()); apiCameraData.setWebPort(camera.getWebPort()); apiCameraData.setPlayType(param.getPlayType()); apiCameraData.setSnapType(camera.getSnapType()); apiCameraData.setSn(camera.getSn()); apiCameraData.setChannel(camera.getChanNum()); apiCameraData.setLoginId(camera.getLoginId()); apiCameraData.setPwd(camera.getPwd()); apiCameraData.setUrlIn(camera.getUrlIn()); apiCameraData.setUrlOut(camera.getUrlOut()); apiCameraData.setMediaAddr(camera.getMediaAddr()); //根据播放方式获取对应的播放地址 ApiCameraResp resp = apiCameraManager.getApiCameraService(apiCameraData.getPlayType()).getPlayAddr(apiCameraData); return resp; } /** * 云台控制 * * @param param * @return */ public ApiCameraResp ptzMedia(ApiCameraData param) { if (StringUtils.isEmpty(param.getCompanyId())) { param.setCompanyId(ContextUtil.getCompanyId()); } return apiCameraManager.getApiCameraService(param.getPtzType()).ptzMedia(param); } /** * 预置位设置 * * @param param * @return */ public ApiCameraResp ptzPreset(ApiCameraData param) { return apiCameraManager.getApiCameraService(param.getPlayType()).ptzPreset(param); } /** * @param params * @return */ public PageResponse updatePos(List params) { if (null == params || params.isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "当前没有需要执行的信息!"); } for (Camera param : params) { secCameraService.updatePos(param); } secCameraService.refreshCache(ContextUtil.getCompanyId()); return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功!!"); } /** * 巡检统计 * * @return */ public PatrolSuperData patrolTrack() { PatrolSuperData patrolSuperData = new PatrolSuperData(); List deptList = coreDeptService.getDeptData(); if (null == deptList || deptList.isEmpty()) { return patrolSuperData; } //库区转换 Map map = new HashMap<>(); for (Dept dept : deptList) { map.put(dept.getId(), 0); } List weekList = patrolService.getWeekList(); if (null != weekList && weekList.size() > 0) { Date start = DateUtil.getCurZero(DateUtil.getNewByDay(new Date(), -1)); //昨天零点零分 Date end = DateUtil.getCurZero(new Date()); //今天零点零分 for (Patrol patrol : weekList) { //7天内人次 patrolSuperData.setWeekSum(patrolSuperData.getWeekSum() + 1); //昨天人次 if (patrol.getCreateTime().after(start) && patrol.getCreateTime().before(end)) { patrolSuperData.setYesterdaySum(patrolSuperData.getYesterdaySum() + 1); } //当天统计 if (patrol.getCreateTime().after(end)) { if (map.get(patrol.getDeptId()) == 0) { patrolSuperData.setIsDeptNum(patrolSuperData.getIsDeptNum() + 1); map.put(patrol.getDeptId(), map.get(patrol.getDeptId()) + 1); } } } } patrolSuperData.setNoDeptNum(deptList.size() - patrolSuperData.getIsDeptNum()); return patrolSuperData; } /** * 根据ID获取点位信息 * * @param patrolId * @return */ public List getRecordByPatrolId(String patrolId) { List patrolRecords = patrolService.getRecordByPatrolId(patrolId); if (null != patrolRecords && !patrolRecords.isEmpty()) { //判断文件是否存在 for (PatrolRecord record : patrolRecords) { record.setImgName(commonManager.isImgExit(record.getImgName(), null)); } } return patrolRecords; } /** * 获取数量检测配置信息 * * @param deptId * @return */ public List getQuantityConfByDeptId(String deptId) { return quantityService.getConfList(ContextUtil.getCompanyId(), deptId); } /** * 查询数量检测记录,默认查询4条 * * @param param * @return */ public PageResponse> quantityList(IgdsBaseParam param) { if (StringUtils.isEmpty(param.getDepotId())) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "参数为空!!"); } List quantityList = quantityService.getQuantityList(param.getDepotId(), 4); if (null == quantityList || quantityList.isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "数据为空!!"); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功!!", quantityList); } /** * 查询数量检测记录,默认查询7条,封装成图表信息 * * @param param * @return */ public PageResponse getQuantityChart(IgdsBaseParam param) { if (StringUtils.isEmpty(param.getDepotId())) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "参数为空!!"); } List quantityList = quantityService.getQuantityList(param.getDepotId(), 7); if (null == quantityList || quantityList.isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "数据为空!!"); } GroupIndexData data = new GroupIndexData(); for (int i = (quantityList.size() - 1); i >= 0; i--) { data.getXaxis().add(DateFormatUtils.format(quantityList.get(i).getReceiveDate(), "MM-dd HH:mm")); data.getSeriesData().add(quantityList.get(i).getWeight() + ""); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功!!", data); } /** * 查询检测数据对应抓图 * @param param * @return */ public PageResponse> getQuantityFiles(IgdsBaseParam param) { if (StringUtils.isEmpty(param.getKey())) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "参数为空!!"); } List fileList = fileService.listFile(null, param.getKey()); if (null == fileList || fileList.isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "数据为空!!"); } //判断文件是否存在 for (FileInfo fileInfo : fileList) { fileInfo.setFilePath(commonManager.isImgExit(fileInfo.getFilePath(), null)); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "执行成功!!", fileList); } /** * 单仓检测 * * @param param * @return */ public BaseResponse checkSingle(IgdsBaseParam param) { if (null == param || StringUtils.isBlank(param.getDepotId())) { return new BaseResponse(RespCodeEnum.CODE_1007.getCode(), RespCodeEnum.CODE_1007.getMsg()); } if (StringUtils.isBlank(param.getCompanyId())) { param.setCompanyId(ContextUtil.getCompanyId()); } QuantityConf conf = quantityService.getCacheQuantityConf(param.getCompanyId(), param.getDepotId()); if (conf == null) { return new BaseResponse(RespCodeEnum.CODE_1007.getCode(), RespCodeEnum.CODE_1007.getMsg()); } RemoteQuantityService remoteQuantityService = remoteManager.getRemoteQuantityService(conf.getProtocol()); if (null == remoteQuantityService) { return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "系统没有" + conf.getProtocol() + "的协议实现,执行被拒绝!"); } QuantityRequest request = new QuantityRequest(); BeanUtils.copyProperties(conf, request); request.setDepotId(conf.getDepotId()); request.setYtIp(conf.getYtIp()); request.setCompanyId(conf.getCompanyId()); request.setDeptId(conf.getDeptId()); request.setSn(conf.getSn()); request.setLength(conf.getLength()); request.setExeUser(ContextUtil.getLoginUserName()); request.setBatchId(conf.getDepotId() + "_" + DateFormatUtils.format(new Date(), "yyyyMMddHHmm")); return remoteQuantityService.checkStart(request); } /** * 停止检测 * @param param * @return */ public BaseResponse checkStop(IgdsBaseParam param) { if (param == null || StringUtils.isEmpty(param.getDepotId())) { return new BaseResponse(RespCodeEnum.CODE_1007.getCode(), RespCodeEnum.CODE_1007.getMsg()); } if (StringUtils.isEmpty(param.getCompanyId())) { param.setCompanyId(ContextUtil.getCompanyId()); } QuantityConf conf = quantityService.getCacheQuantityConf(param.getCompanyId(), param.getDepotId()); if (conf == null) { return new BaseResponse(RespCodeEnum.CODE_1007.getCode(), RespCodeEnum.CODE_1007.getMsg()); } RemoteQuantityService remoteQuantityService = remoteManager.getRemoteQuantityService(conf.getProtocol()); if (null == remoteQuantityService) { return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "系统没有" + conf.getProtocol() + "的协议实现,执行被拒绝!"); } QuantityRequest request = new QuantityRequest(); BeanUtils.copyProperties(conf, request); request.setCompanyId(conf.getCompanyId()); request.setYtIp(conf.getYtIp()); request.setSn(conf.getSn()); request.setDeptId(conf.getDeptId()); request.setDepotId(conf.getDepotId()); return remoteQuantityService.checkStop(request); } /** * 获取油罐油情及液位信息 * * @param deptId * @return */ public List getHeightList(String deptId) { if (StringUtils.isEmpty(deptId)) { deptId = ContextUtil.subDeptId(null); } //获取所有筒仓及浅圆仓 List depotList = commonManager.listAllDepot(deptId, DepotType.TYPE_02.getCode() + "," + DepotType.TYPE_04.getCode()); if (null == depotList || depotList.isEmpty()) { return null; } List list = new ArrayList<>(); List quantityList; Quantity quantity; for (Depot depot : depotList) { quantityList = quantityService.getQuantityList(depot.getId(), 1); if (null == quantityList || quantityList.isEmpty()) { quantity = new Quantity(); quantity.setDepotId(depot.getId()); }else { quantity = quantityList.get(0); } quantity.setDepotData(depot); list.add(quantity); } return list; } }