xiangpei
2024-08-29 3e9a6da99aae968123ee7bca352fc08becd7f1f2
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -13,10 +13,7 @@
import com.ycl.platform.domain.entity.*;
import com.ycl.platform.domain.form.*;
import com.ycl.platform.domain.query.*;
import com.ycl.platform.domain.vo.DeviceInfoVO;
import com.ycl.platform.domain.vo.DistributeWorkOrderVO;
import com.ycl.platform.domain.vo.WorkOrderVO;
import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO;
import com.ycl.platform.domain.vo.*;
import com.ycl.platform.domain.vo.screen.ScreenWorkOrderVO;
import com.ycl.platform.domain.vo.screen.WorkOrderRegionVO;
import com.ycl.platform.domain.vo.screen.WorkOrderTotalVO;
@@ -38,6 +35,7 @@
import com.ycl.utils.http.HttpUtils;
import com.ycl.utils.redis.RedisCache;
import com.ycl.utils.uuid.IdUtils;
import constant.Constants;
import enumeration.general.NotifyTypeEnum;
import enumeration.general.UrgentLevelEnum;
import enumeration.general.WorkOrderDistributeWayEnum;
@@ -132,7 +130,7 @@
        for (WorkOrder workOrder : workOrderList) {
            WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
            if (Objects.nonNull(databaseWorkOrder)) {
                List<String> errorNameList = workOrderErrorTypeService.getBaseMapper().getNotFinishWorkOrderErrors(workOrder.getWorkOrderNo());
                List<String> errorNameList = workOrderErrorTypeService.getBaseMapper().getNotFinishWorkOrderErrors(databaseWorkOrder.getWorkOrderNo());
                List<String> errorTypes = workOrder.getErrorTypeList();
                if (errorNameList.containsAll(errorTypes)) {
                    // 如果,国标码、故障类型都一样,则跳过不处理
@@ -179,6 +177,7 @@
        if (willAddMsg.size() > 0) {
            workOrderYwConditionRecordMapper.insertMany(willAddMsg);
        }
        log.info("将要更新的工单数:" + willUpdateStatusWorkOrderList.size());
        if (willUpdateStatusWorkOrderList.size() > 0) {
            this.baseMapper.updateMany(willUpdateStatusWorkOrderList);
        }
@@ -393,23 +392,22 @@
    }
    @Override
    public Result selectYwConditionByYwId(String workOrderNo) {
    public List<WorkOrderYwConditionRecordVO> selectYwConditionByYwId(String workOrderNo) {
        List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(workOrderNo);
        ywConditionList.stream().forEach(item -> {
            if (Objects.nonNull(item.getSysMsg()) && item.getSysMsg()) {
                item.setCommitUserName("系统消息");
            }
        });
        return Result.ok().data(ywConditionList);
        return ywConditionList;
    }
    @Override
    public Result selectYwAuditingListByYwId(String workOrderNo) {
        return Result.ok().data(
                new LambdaQueryChainWrapper<>(workOrderAuditingRecordMapper)
    public List<WorkOrderAuditingRecord> selectYwAuditingListByYwId(String workOrderNo) {
        return new LambdaQueryChainWrapper<>(workOrderAuditingRecordMapper)
                        .eq(WorkOrderAuditingRecord::getWorkOrderNo, workOrderNo)
                        .orderByAsc(WorkOrderAuditingRecord::getCreateTime)
                        .list());
                        .list();
    }
    @Override
@@ -663,35 +661,32 @@
    @Override
    public String getFrameImgByDevice(String deviceId, String channelId) throws FFmpegFrameGrabber.Exception {
    public String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) {
        String url = String.format(this.rtspServer + "/api/play/start/%s/%s", deviceId, channelId);
        String result = HttpUtils.sendGet(url);
// 假设WVPResult是正确解析响应的类
        WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
        String imgUrl = null;
        if (wvpResult.getCode() == 0) {
            System.out.println("请求成功");
            JSONObject data = (JSONObject) wvpResult.getData();
            String rtspUrl = data.getString("fmp4"); // 注意:通常RTSP URL不会以"fmp4"结尾,这里可能是特定API的返回格式
            String rtspUrl = data.getString("fmp4"); // 取mp4地址
            if (StringUtils.hasText(rtspUrl)) {
                System.out.println("目标地址:" + rtspUrl);
                FFmpegFrameGrabber grabber = null;
                try {
                    grabber = FFmpegFrameGrabber.createDefault(rtspUrl);
                    grabber.start();
                    Frame frame = grabber.grabImage(); // 直接捕获一帧
                    if (frame != null) {
                        System.out.println("成功捕获一帧");
                        // 将Frame转换为Mat
                        OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
                        Mat mat = converter.convertToMat(frame);
                        imgUrl = workOrderNo + "_" + IdUtils.fastSimpleUUID() + ".png";
                        // 生成图片路径
                        String imgPath = PlatformConfig.getUploadPath() + deviceId + IdUtils.fastSimpleUUID() + ".png";
                        System.out.println("图片地址:" + imgPath);
                        String imgPath = PlatformConfig.getUploadPath() + "/" + imgUrl;
                        System.out.println("图片保存地址:" + imgPath);
                        imgUrl = Constants.RESOURCE_PREFIX + "/" + imgUrl;
                        // 保存图片
                        opencv_imgcodecs.imwrite(imgPath, mat);
                    } else {
@@ -714,8 +709,8 @@
        } else {
            System.out.println("请求失败,错误码:" + wvpResult.getCode());
        }
        return null;
        System.out.println("图片URL:" + imgUrl);
        return imgUrl;
    }
    @Override
@@ -728,6 +723,19 @@
    public void updateImgById(Integer workOrderId, String imgPath) {
        new LambdaUpdateChainWrapper<>(baseMapper)
                .eq(WorkOrder::getId, workOrderId)
                .set(WorkOrder::getYwCheckResult, imgPath);
                .set(WorkOrder::getYwCheckResult, imgPath)
                .update();
    }
    @Override
    public Result processImg(String workOrderNo) {
        // 运维记录
        List<WorkOrderYwConditionRecordVO> workOrderYwConditionRecordVOS = this.selectYwConditionByYwId(workOrderNo);
        // 审核记录
        List<WorkOrderAuditingRecord> workOrderAuditingRecords = this.selectYwAuditingListByYwId(workOrderNo);
        WorkOrderProcessVO process = new WorkOrderProcessVO();
        process.setYwList(workOrderYwConditionRecordVOS);
        process.setAuditingList(workOrderAuditingRecords);
        return Result.ok().data(process);
    }
}