From 134ef8858210a09d34567b5ef0b8d29b6c8bf38d Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 23 九月 2024 16:20:05 +0800 Subject: [PATCH] 大屏设备运行率bug --- ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 111 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 97 insertions(+), 14 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java index 6d34d35..b89867f 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java @@ -26,6 +26,7 @@ import com.ycl.platform.wvp.WVPResult; import com.ycl.system.Result; import com.ycl.system.domain.SysConfig; +import com.ycl.system.entity.SysDictData; import com.ycl.system.mapper.SysConfigMapper; import com.ycl.system.mapper.SysDictDataMapper; import com.ycl.system.model.LoginUser; @@ -55,11 +56,6 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import javax.imageio.ImageIO; -import javax.swing.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; @@ -77,7 +73,6 @@ @RequiredArgsConstructor public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService { - private final WorkOrderMapper workOrderMapper; private final YwPointService ywPointService; private final WorkOrderAuditingRecordMapper workOrderAuditingRecordMapper; private final WorkOrderAuditingRecordService workOrderAuditingRecordService; @@ -86,9 +81,8 @@ private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper; private final WorkOrderErrorTypeServiceImpl workOrderErrorTypeService; private final SysConfigMapper configMapper; - private final ServerConfig serverConfig; private final ReportMapper reportMapper; - private final SysDictDataMapper dictDataMapper; + private final WorkOrderCheckImgMapper workOrderCheckImgMapper; @Value("${rtsp.server:http://127.0.0.1:7788}") private String rtspServer; @@ -101,7 +95,7 @@ @Override @Transactional(rollbackFor = Exception.class) - public Boolean innerAddWorkOrder(List<WorkOrder> workOrderList) { + public synchronized Boolean innerAddWorkOrder(List<WorkOrder> workOrderList) { int total = workOrderList.size(); workOrderList.stream().filter(item -> { return StringUtils.hasText(item.getSerialNumber()) && Objects.nonNull(item.getStatus()) && !CollectionUtils.isEmpty(item.getErrorTypeList()); @@ -406,7 +400,7 @@ List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(workOrderNo); ywConditionList.stream().forEach(item -> { if (Objects.nonNull(item.getSysMsg()) && item.getSysMsg()) { - item.setCommitUserName("绯荤粺娑堟伅"); + item.setUnitName("绯荤粺娑堟伅"); } }); return ywConditionList; @@ -689,6 +683,8 @@ FFmpegFrameGrabber grabber = null; try { grabber = FFmpegFrameGrabber.createDefault(rtspUrl); + //璁剧疆10s瓒呮椂 + grabber.setTimeout(10000); grabber.start(); Frame frame = grabber.grabImage(); // 鐩存帴鎹曡幏涓�甯� if (frame != null) { @@ -729,6 +725,67 @@ } @Override + public void saveFrameImgByDevice(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 = JSON.parseObject(result, WVPResult.class); + String imgUrl = null; + if (wvpResult.getCode() == 0) { + JSONObject data = (JSONObject) wvpResult.getData(); + String rtspUrl = data.getString("fmp4"); // 鍙杕p4鍦板潃 + if (StringUtils.hasText(rtspUrl)) { + System.out.println("鐩爣鍦板潃锛�" + rtspUrl); + FFmpegFrameGrabber grabber = null; + try { + grabber = FFmpegFrameGrabber.createDefault(rtspUrl); + //璁剧疆10s瓒呮椂 + grabber.setTimeout(10000); + grabber.start(); + Frame frame = grabber.grabImage(); // 鐩存帴鎹曡幏涓�甯� + if (frame != null) { + System.out.println("鎴愬姛鎹曡幏涓�甯�"); + // 灏咶rame杞崲涓篗at + OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat(); + Mat mat = converter.convertToMat(frame); + + imgUrl = workOrderNo + "_" + IdUtils.fastSimpleUUID() + ".png"; + // 鐢熸垚鍥剧墖璺緞 + String imgPath = PlatformConfig.getProfile() + "/" + imgUrl; + System.out.println("鍥剧墖淇濆瓨鍦板潃锛�" + imgPath); + imgUrl = Constants.RESOURCE_PREFIX + "/" + imgUrl; + // 淇濆瓨鍥剧墖 + opencv_imgcodecs.imwrite(imgPath, mat); + } else { + System.out.println("鏈崟鑾峰埌甯�"); + } + } catch (FrameGrabber.Exception e) { + e.printStackTrace(); + } finally { + if (grabber != null) { + try { + grabber.stop(); // 鍋滄鎹曡幏 + } catch (FrameGrabber.Exception e) { + e.printStackTrace(); + } + // 閫氬父涓嶉渶瑕佽皟鐢╮elease()锛屽洜涓簊top()浼氬鐞嗚祫婧愰噴鏀� + // grabber.release(); // 閲婃斁璧勬簮 + } + } + } + } else { + System.out.println("璇锋眰澶辫触锛岄敊璇爜锛�" + wvpResult.getCode()); + } + System.out.println("鍥剧墖URL锛�" + imgUrl); + if (StringUtils.hasText(imgUrl)) { + WorkOrderCheckImg img = new WorkOrderCheckImg(); + img.setWorkOrderNo(workOrderNo); + img.setImgUrl(imgUrl); + img.setCreateTime(new Date()); + workOrderCheckImgMapper.insert(img); + } + } + + @Override public List<DeviceInfoVO> hasErrorWorkOrderList(Date start, Date end) { List<DeviceInfoVO> list = baseMapper.hasErrorWorkOrderList(start, end); return list; @@ -763,19 +820,45 @@ Date now = new Date(); if (Objects.nonNull(beforeRecord)) { - if (beforeRecord.getStartCreateTime().after(now)) { + if (now.before(beforeRecord.getBeginCreateTime())) { process.setBeforeReportMsg("浜嬪墠鎶ュ宸插け鏁�"); - } else if (beforeRecord.getEndCreateTime().before(now)){ + } else if (now.after(beforeRecord.getEndCreateTime())){ process.setBeforeReportMsg("浜嬪墠鎶ュ鏈敓鏁�"); + } else { + process.setBeforeReportMsg("宸蹭簨鍓嶆姤澶�"); } } if (Objects.nonNull(afterRecord)) { - if (afterRecord.getStartCreateTime().after(now)) { + if (now.before(afterRecord.getBeginCreateTime())) { process.setAfterReportMsg("浜嬪悗鎶ュ宸插け鏁�"); - } else if (afterRecord.getEndCreateTime().before(now)){ + } else if (now.after(afterRecord.getEndCreateTime())){ process.setAfterReportMsg("浜嬪悗鎶ュ鏈敓鏁�"); + } else { + process.setAfterReportMsg("宸蹭簨鍚庢姤澶�"); } } return Result.ok().data(process); } + + @Override + public Result detailByNo(String workOrderNo) { + WorkOrderDetailVO workOrder = baseMapper.detailByNo(workOrderNo); + // 鏄惁鎶ュ + boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper) + .eq(Report::getSerialNumber, workOrder.getSerialNumber()) + .exists(); + workOrder.setHasReport(hasReport); + // 鏁呴殰绫诲瀷 + List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo()); + List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList()); + workOrder.setErrorTypeList(errList); + // 妫�娴嬪浘鐗� + List<WorkOrderCheckImg> imgList = new LambdaQueryChainWrapper<>(workOrderCheckImgMapper) + .eq(WorkOrderCheckImg::getWorkOrderNo, workOrderNo) + .orderByDesc(WorkOrderCheckImg::getCreateTime) + .last("limit 20") + .list(); + workOrder.setImgList(imgList); + return Result.ok().data(workOrder); + } } -- Gitblit v1.8.0