From 7006d2e6e6c0281e4effc7fc70719af91b0c4982 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期一, 30 九月 2024 12:23:46 +0800
Subject: [PATCH] 工单取图片优化
---
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 117 ++++++++++++++++++++++++++++++++++++----------------------
1 files changed, 72 insertions(+), 45 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 6f47e90..81e0698 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
@@ -1,5 +1,6 @@
package com.ycl.platform.service.impl;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -55,6 +56,17 @@
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.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
@@ -93,7 +105,6 @@
@Override
@Transactional(rollbackFor = Exception.class)
- //TODO锛氭竻绌篟edis瀹氭椂浠诲姟
public synchronized Boolean innerAddWorkOrder(List<WorkOrder> workOrderList) {
int total = workOrderList.size();
workOrderList.stream().filter(item -> {
@@ -292,14 +303,14 @@
@Override
public Result add(WorkOrderForm form) {
//鏌edis浠婃棩宸ュ崟鏁伴噺
- int workOrderNum = 1;
+ int workOrderNum = 0;
//UUID浣滀负value锛屼繚璇佷笂閿佺殑绾跨▼鑷繁瑙i攣
String requestId = IdUtils.fastSimpleUUID();
boolean result = redisCache.acquireLock(RedisConstant.WORKORDER_NUM_LOCK, requestId, 10000);
if (result) {
//鏌ヤ粖鏃ュ伐鍗曢噺
Object redisNum = redisCache.getCacheObject(RedisConstant.WORKORDER_NUM);
- workOrderNum = redisNum == null ? 1 : (Integer) redisNum;
+ workOrderNum = redisNum == null ? 0 : (Integer) redisNum;
workOrderNum++;
redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
@@ -558,7 +569,7 @@
.select(WorkOrder::getSerialNumber, WorkOrder::getWorkOrderNo)
.eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE)
.eq(Objects.nonNull(data.getUnitId()), WorkOrder::getUnitId, data.getUnitId())
- .eq(WorkOrder::getErrorType, data.getErrorType())
+ .in(WorkOrder::getErrorType, data.getErrorType())
.between(WorkOrder::getCreateTime, data.getStart(), data.getEnd())
.orderByDesc(WorkOrder::getCreateTime)
.last("limit " + data.getFastNumLimit())
@@ -620,6 +631,7 @@
ywPointService.updateRecovery(serialNumberList, 1);
return Result.ok("鎴愬姛涓嬪彂" + query.getWorkOrderNOList().size() + "鏉″伐鍗�");
} catch (Exception e) {
+ System.out.println(e.getMessage());
return Result.error("鎿嶄綔澶辫触");
} finally {
distributeUnLock();
@@ -751,62 +763,56 @@
@Override
- public String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) {
+ public synchronized String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) throws Exception {
String url = String.format(this.rtspServer + "/api/play/start/%s/%s", deviceId, channelId);
String result = HttpUtils.sendGet(url);
+ log.error("鎷垮埌鍙栨祦鍝嶅簲缁撴灉锛�" + result);
WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
String imgUrl = null;
- if (wvpResult.getCode() == 0) {
+ if (0 == wvpResult.getCode()) {
+ log.error("璇锋眰鎴愬姛");
JSONObject data = (JSONObject) wvpResult.getData();
- String rtspUrl = data.getString("fmp4"); // 鍙杕p4鍦板潃
+ String rtspUrl = data.getString("rtsp"); // 鍙栧湴鍧�
+ log.error("鐩爣鍦板潃锛�" + rtspUrl);
+ FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(rtspUrl);
if (StringUtils.hasText(rtspUrl)) {
- System.out.println("鐩爣鍦板潃锛�" + rtspUrl);
- FFmpegFrameGrabber grabber = null;
try {
- grabber = FFmpegFrameGrabber.createDefault(rtspUrl);
- //璁剧疆10s瓒呮椂
- grabber.setTimeout(10000);
+ grabber.setOption("rtsp_transport", "tcp"); // 浣跨敤tcp鐨勬柟寮忥紝涓嶇劧浼氫涪鍖呭緢涓ラ噸
+ grabber.setImageWidth(1920);
+ grabber.setImageHeight(1080);
+ grabber.setFrameRate(25);
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("鏈崟鑾峰埌甯�");
+ Frame frame = grabber.grabFrame();
+ if (frame != null) {
+ //杞崲鍥惧儚
+ Java2DFrameConverter converter = new Java2DFrameConverter();
+ BufferedImage srcImage = converter.getBufferedImage(frame);
+ if (srcImage != null) {
+ imgUrl = workOrderNo + "_" + IdUtils.fastSimpleUUID() + ".png";
+ // 鐢熸垚鍥剧墖璺緞
+ String imgPath = PlatformConfig.getProfile() + "/" + imgUrl;
+ System.out.println("鍥剧墖淇濆瓨鍦板潃锛�" + imgPath);
+ imgUrl = Constants.RESOURCE_PREFIX + "/" + imgUrl;
+ //鍒涘缓鏂囦欢
+ File file = new File(imgPath);
+ //杈撳嚭鏂囦欢
+ ImageIO.write(srcImage, "png", file);
+ }
}
- } catch (FrameGrabber.Exception e) {
+ } catch (IOException e) {
e.printStackTrace();
} finally {
- if (grabber != null) {
- try {
- grabber.stop(); // 鍋滄鎹曡幏
- } catch (FrameGrabber.Exception e) {
- e.printStackTrace();
- }
- // 閫氬父涓嶉渶瑕佽皟鐢╮elease()锛屽洜涓簊top()浼氬鐞嗚祫婧愰噴鏀�
- // grabber.release(); // 閲婃斁璧勬簮
- }
+ grabber.stop(); // 鍋滄鎹曡幏
+ grabber.close(); // 閲婃斁璧勬簮
}
}
- } else {
- System.out.println("璇锋眰澶辫触锛岄敊璇爜锛�" + wvpResult.getCode());
}
- System.out.println("鍥剧墖URL锛�" + imgUrl);
return imgUrl;
}
@Override
- public void saveFrameImgByDevice(String deviceId, String channelId, String workOrderNo) {
+ 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);
@@ -867,13 +873,13 @@
}
@Override
- public List<DeviceInfoVO> hasErrorWorkOrderList(Date start, Date end) {
+ public List<DeviceInfoVO> hasErrorWorkOrderList (Date start, Date end){
List<DeviceInfoVO> list = baseMapper.hasErrorWorkOrderList(start, end);
return list;
}
@Override
- public void updateImgById(Integer workOrderId, String imgPath) {
+ public void updateImgById (Integer workOrderId, String imgPath){
new LambdaUpdateChainWrapper<>(baseMapper)
.eq(WorkOrder::getId, workOrderId)
.set(WorkOrder::getYwCheckResult, imgPath)
@@ -881,7 +887,7 @@
}
@Override
- public Result processImg(String workOrderNo) {
+ public Result processImg (String workOrderNo){
WorkOrder workOrder = new LambdaQueryChainWrapper<>(baseMapper)
.eq(WorkOrder::getWorkOrderNo, workOrderNo)
.one();
@@ -922,7 +928,7 @@
}
@Override
- public Result detailByNo(String workOrderNo) {
+ public Result detailByNo (String workOrderNo){
WorkOrderDetailVO workOrder = baseMapper.detailByNo(workOrderNo);
// 鏄惁鎶ュ
boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper)
@@ -942,4 +948,25 @@
workOrder.setImgList(imgList);
return Result.ok().data(workOrder);
}
+
+ @Override
+ public List<WorkOrderVO> export (WorkOrderExportQuery query){
+ query.setUnitId(SecurityUtils.getUnitId());
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ if (query.getStart() == null) {
+ query.setStart(format.format(DateUtils.getDayStart(new Date())));
+ } else {
+ query.setStart(query.getStart() + " 00:00:00");
+ }
+ if (query.getEnd() == null) {
+ query.setStart(format.format(DateUtils.getDayEnd(new Date())));
+ } else {
+ query.setEnd(query.getEnd() + " 23:59:59");
+ }
+
+ List<WorkOrderVO> export = baseMapper.export(query);
+
+ System.out.println(export);
+ return export;
+ }
}
--
Gitblit v1.8.0