From 71972694f7d5f23cf42226366a9ddaad4b72b89f Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 20 九月 2024 09:33:06 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 135 ++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 122 insertions(+), 13 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 767691e..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,10 +95,10 @@ @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()) && StringUtils.hasText(item.getErrorType()); + return StringUtils.hasText(item.getSerialNumber()) && Objects.nonNull(item.getStatus()) && !CollectionUtils.isEmpty(item.getErrorTypeList()); }); if (CollectionUtils.isEmpty(workOrderList)) { return Boolean.TRUE; @@ -211,7 +205,7 @@ notAddList.add(workOrder); continue; } - workOrder.setWorkOrderNo(IdUtils.randomNO()); + workOrder.setWorkOrderNo(IdUtils.randomNO(now)); if (Objects.nonNull(point.getUnitId())) { workOrder.setUnitId(Math.toIntExact(point.getUnitId())); } @@ -268,12 +262,12 @@ @Override public Result add(WorkOrderForm form) { WorkOrder entity = WorkOrderForm.getEntityByForm(form, null); - entity.setWorkOrderNo(IdUtils.randomNO()); entity.setCreateTime(DateUtils.getNowDate()); entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE); Date now = new Date(); entity.setCreateTime(now); entity.setUpdateTime(now); + entity.setWorkOrderNo(IdUtils.randomNO(now)); entity.setErrorType(String.join(",", form.getErrorType())); List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList(); workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes); @@ -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; @@ -464,6 +458,7 @@ @Override public Result page(WorkOrderQuery query) { IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class); + query.setUnitId(SecurityUtils.getUnitId()); baseMapper.page(page, query); if (! CollectionUtils.isEmpty(page.getRecords())) { page.getRecords().stream().forEach(item -> { @@ -688,6 +683,8 @@ FFmpegFrameGrabber grabber = null; try { grabber = FFmpegFrameGrabber.createDefault(rtspUrl); + //璁剧疆10s瓒呮椂 + grabber.setTimeout(10000); grabber.start(); Frame frame = grabber.grabImage(); // 鐩存帴鎹曡幏涓�甯� if (frame != null) { @@ -728,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; @@ -743,6 +801,12 @@ @Override public Result processImg(String workOrderNo) { + WorkOrder workOrder = new LambdaQueryChainWrapper<>(baseMapper) + .eq(WorkOrder::getWorkOrderNo, workOrderNo) + .one(); + if (Objects.isNull(workOrder)) { + throw new RuntimeException("姝ゅ伐鍗曚笉瀛樺湪"); + } // 杩愮淮璁板綍 List<WorkOrderYwConditionRecordVO> workOrderYwConditionRecordVOS = this.selectYwConditionByYwId(workOrderNo); // 瀹℃牳璁板綍 @@ -750,6 +814,51 @@ WorkOrderProcessVO process = new WorkOrderProcessVO(); process.setYwList(workOrderYwConditionRecordVOS); process.setAuditingList(workOrderAuditingRecords); + // 鏌ヨ鐐逛綅浜嬪墠浜嬪悗鏈�鏂扮殑涓�鏉℃暟鎹槸鍚﹀鏍搁�氳繃 + ReportAuditingRecordVO beforeRecord = ywPointService.getReportResult(workOrder.getSerialNumber(), "浜嬪墠鎶ュ"); + ReportAuditingRecordVO afterRecord = ywPointService.getReportResult(workOrder.getSerialNumber(), "浜嬪悗鎶ュ"); + + Date now = new Date(); + if (Objects.nonNull(beforeRecord)) { + if (now.before(beforeRecord.getBeginCreateTime())) { + process.setBeforeReportMsg("浜嬪墠鎶ュ宸插け鏁�"); + } else if (now.after(beforeRecord.getEndCreateTime())){ + process.setBeforeReportMsg("浜嬪墠鎶ュ鏈敓鏁�"); + } else { + process.setBeforeReportMsg("宸蹭簨鍓嶆姤澶�"); + } + } + if (Objects.nonNull(afterRecord)) { + if (now.before(afterRecord.getBeginCreateTime())) { + process.setAfterReportMsg("浜嬪悗鎶ュ宸插け鏁�"); + } 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