From 397eda7e04fd23016ba55b1b12af63bfeb00e482 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期二, 12 十一月 2024 11:16:55 +0800
Subject: [PATCH] bug+检测按钮+新的故障下拉框+工单删除+记录检测离线具体时间点等等
---
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 884 +++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 748 insertions(+), 136 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 ddf6987..8c1f764 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,6 +1,10 @@
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.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
@@ -10,12 +14,10 @@
import com.ycl.config.ServerConfig;
import com.ycl.exception.ServiceException;
import com.ycl.platform.domain.entity.*;
+import com.ycl.platform.domain.excel.PointExport;
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;
@@ -28,7 +30,9 @@
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;
import com.ycl.system.page.PageUtil;
import com.ycl.utils.DateUtils;
@@ -36,29 +40,46 @@
import com.ycl.utils.http.HttpUtils;
import com.ycl.utils.redis.RedisCache;
import com.ycl.utils.uuid.IdUtils;
+import constant.ApiConstants;
+import constant.CheckConstants;
+import constant.Constants;
+import constant.RedisConstant;
+import enumeration.ErrorType;
import enumeration.general.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
-import org.bytedeco.javacv.FFmpegFrameGrabber;
-import org.bytedeco.javacv.Frame;
-import org.bytedeco.javacv.Java2DFrameConverter;
+import org.bytedeco.javacv.*;
+import org.bytedeco.opencv.global.opencv_imgcodecs;
+import org.bytedeco.opencv.opencv_core.Mat;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.ApplicationContext;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
+import pojo.CascadeOption;
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.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
@@ -72,17 +93,20 @@
@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;
private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper;
private final NotifyService notifyService;
private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper;
- private final TMonitorMapper monitorMapper;
+ private final WorkOrderErrorTypeServiceImpl workOrderErrorTypeService;
+ private final WorkOrderErrorTypeMapper workOrderErrorTypeMapper;
private final SysConfigMapper configMapper;
- private final ServerConfig serverConfig;
-
+ private final ReportMapper reportMapper;
+ private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
+ private final WorkOrderWhiteMapper workOrderWhiteMapper;
+ private final DeviceInfoMapper deviceInfoMapper;
+ private final ApplicationContext applicationContext;
@Value("${rtsp.server:http://127.0.0.1:7788}")
private String rtspServer;
@@ -93,57 +117,121 @@
private RedisCache redisCache;
@Override
+ public synchronized Boolean innerAddWorkOrder(List<WorkOrder> workOrderList) {
+ //閬垮厤鍧�(浜嬪姟鍔犻攣浼氬け鏁堛�佹柟娉曞唴閮ㄨ皟鐢ㄤ簨鍔′細澶辨晥)
+ WorkOrderServiceImpl self = applicationContext.getBean(WorkOrderServiceImpl.class);
+ return self.batchAddWorkOrder(workOrderList);
+ }
+
@Transactional(rollbackFor = Exception.class)
- public Boolean innerAddWorkOrder(List<WorkOrder> workOrderList) {
+ public Boolean batchAddWorkOrder(List<WorkOrder> workOrderList){
int total = workOrderList.size();
- workOrderList.stream().filter(item -> {
- return StringUtils.hasText(item.getSerialNumber()) && Objects.nonNull(item.getStatus()) && StringUtils.hasText(item.getErrorType());
- });
+ // 鏌ヨ鍑虹櫧鍚嶅崟鍒楄〃
+ List<String> serialNumbers = workOrderWhiteMapper.selectList().stream().map(WorkOrderWhite::getSerialNumber).collect(Collectors.toList());
+ // 閬嶅巻宸ュ崟鍒楄〃锛屽垽鏂槸鍚﹀湪鐧藉悕鍗曚腑
+ workOrderList = workOrderList.stream().filter(item -> !serialNumbers.contains(item.getSerialNumber()))
+ .collect(Collectors.toList());
+ workOrderList = workOrderList.stream().filter(item -> {
+ return StringUtils.hasText(item.getSerialNumber()) && Objects.nonNull(item.getStatus()) && !CollectionUtils.isEmpty(item.getErrorTypeList());
+ }).collect(Collectors.toList());
if (CollectionUtils.isEmpty(workOrderList)) {
return Boolean.TRUE;
}
+ // 鏍规嵁鍥芥爣鐮佸幓閲�
+ workOrderList = workOrderList.stream()
+ .collect(Collectors.toMap(
+ WorkOrder::getSerialNumber,
+ p -> p,
+ (existing, replacement) -> existing // 鍐茬獊鏃朵繚鐣欑涓�涓�
+ )).values().stream().collect(Collectors.toList());
List<String> serialNumberList = workOrderList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
// 鏌ュ嚭鏁版嵁搴撲腑鍥芥爣鐮佸搴旂殑鏈畬鎴愮殑宸ュ崟
- List<WorkOrder> inDatabaseWorkOrderList = new LambdaQueryChainWrapper<>(baseMapper)
- .select(WorkOrder::getId, WorkOrder::getSerialNumber, WorkOrder::getStatus, WorkOrder::getErrorType)
- .in(WorkOrder::getSerialNumber, serialNumberList)
- .ne(WorkOrder::getStatus, WorkOrderStatusEnum.AUDITING_SUCCESS)
- .list();
+ List<WorkOrder> inDatabaseWorkOrderList = baseMapper.getNotFinishedWorkOrders(serialNumberList);
+ inDatabaseWorkOrderList.stream().forEach(item -> {
+ if (StringUtils.hasText(item.getErrorType())) {
+ item.setErrorTypeList(List.of(item.getErrorType().split(",")));
+ } else {
+ item.setErrorTypeList(new ArrayList<>(1));
+ }
+ });
Map<String, WorkOrder> mapping = inDatabaseWorkOrderList.stream().collect((Collectors.toMap(WorkOrder::getSerialNumber, workOrder -> workOrder)));
List<WorkOrder> waitAddList = new ArrayList<>(48);
+ List<WorkOrderErrorType> waitAddErrorTypeList = new ArrayList<>(48);
Integer updateNum = 0;
- // TODO 鏌ヨ鏄惁鎶ュ杩囷紝鏇存柊鏁呴殰绫诲瀷
+ Date now = new Date();
+ // 鍥犳晠闅滅被鍨嬩笉涓�鑷磋�岃鏇存柊鐘舵�佺殑宸ュ崟
+ List<WorkOrder> willUpdateStatusWorkOrderList = new ArrayList<>(48);
+ // 鏇存敼宸ュ崟绫诲瀷鑰岃澧炲姞鐨勭郴缁熻繍缁村鐞嗕俊鎭�
+ List<WorkOrderYwConditionRecord> willAddMsg = new ArrayList<>(48);
+ // 鍗冲皢瑕佹坊鍔犵殑閿欒绫诲瀷
+ List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96);
for (WorkOrder workOrder : workOrderList) {
WorkOrder databaseWorkOrder = mapping.get(workOrder.getSerialNumber());
if (Objects.nonNull(databaseWorkOrder)) {
- String errorType = databaseWorkOrder.getErrorType();
- if (workOrder.getErrorType().equals(errorType)) {
+ List<String> errorNameList = databaseWorkOrder.getErrorTypeList();
+ List<String> errorTypes = workOrder.getErrorTypeList();
+ if (errorNameList.containsAll(errorTypes)) {
// 濡傛灉锛屽浗鏍囩爜銆佹晠闅滅被鍨嬮兘涓�鏍凤紝鍒欒烦杩囦笉澶勭悊
continue;
} else {
- // 閿欒绫诲瀷涓嶄竴鏍凤紝灏辨洿鏂伴敊璇被鍨嬶紝骞朵笖閲嶇疆宸ュ崟鐘舵�佷负寰呭鐞�
- errorType = errorType + "," + workOrder.getErrorType();
- databaseWorkOrder.setErrorType(errorType);
- databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
- Date now = new Date();
+ for (String errorType : errorTypes) {
+ if (!errorNameList.contains(errorType)) {
+ // 閿欒绫诲瀷涓嶄竴鏍凤紝灏辨柊澧炰竴涓敊璇被鍨嬶紝骞朵笖閲嶇疆宸ュ崟鐘舵�佷负寰呭鐞�
+ WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType();
+ workOrderErrorType.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo());
+ workOrderErrorType.setCreateTime(now);
+ workOrderErrorType.setUpdateTime(now);
+ workOrderErrorType.setErrorName(errorType);
+ willAddErrorType.add(workOrderErrorType);
+ }
+ }
+ //閬垮厤浠d笅鍙戠殑宸ュ崟鐩存帴鍙樻垚涓嬪彂
+ if(!databaseWorkOrder.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) {
+ databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+ }
databaseWorkOrder.setUpdateTime(now);
- baseMapper.updateById(databaseWorkOrder);
+ willUpdateStatusWorkOrderList.add(databaseWorkOrder);
updateNum++;
- // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣 TODO
+ // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣
+ WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord();
+ ywRecord.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo());
+ ywRecord.setCommitUser(1);
+ ywRecord.setYwCondition("鏁呴殰绫诲瀷鏇存柊锛屽伐鍗曠姸鎬佽皟鏁翠负寰呭鐞�");
+ ywRecord.setCreateTime(new Date());
+ ywRecord.setSysMsg(Boolean.TRUE);
+ willAddMsg.add(ywRecord);
}
} else {
workOrder.setCreateTime(new Date());
workOrder.setUpdateTime(new Date());
+// // 濡傛灉鎶ュ杩囷紝浣跨敤鏈�鏂版姤澶囩殑閿欒绫诲瀷
+// Report report = reportMapper.checkPointReported(workOrder.getSerialNumber());
+// if (Objects.nonNull(report)) {
+// workOrder.setErrorType(report.getErrorType());
+// }
waitAddList.add(workOrder);
}
+ }
+ if (willAddErrorType.size() > 0) {
+ workOrderErrorTypeService.getBaseMapper().addMany(willAddErrorType);
+ }
+ if (willAddMsg.size() > 0) {
+ workOrderYwConditionRecordMapper.insertMany(willAddMsg);
+ }
+ log.info("灏嗚鏇存柊鐨勫伐鍗曟暟锛�" + willUpdateStatusWorkOrderList.size());
+ if (willUpdateStatusWorkOrderList.size() > 0) {
+ this.baseMapper.updateMany(willUpdateStatusWorkOrderList);
}
if (CollectionUtils.isEmpty(waitAddList)) {
return Boolean.TRUE;
}
List<String> willAddSerialNumber = waitAddList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList());
+ //鍙敓鎴愯�冩牳璁惧銆佷笖鏈夎繍缁村崟浣嶇殑宸ュ崟
List<YwPoint> pointList = new LambdaQueryChainWrapper<>(ywPointService.getBaseMapper())
.select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getProvinceTag, YwPoint::getImportantCommandImageTag)
.in(YwPoint::getSerialNumber, willAddSerialNumber)
+ .eq(YwPoint::getExamineStatus, Boolean.TRUE)
+ .isNotNull(YwPoint::getUnitId)
.list();
Map<String, YwPoint> pointMapping = pointList.stream().collect(Collectors.toMap(YwPoint::getSerialNumber, point -> point));
// 鏌ュ嚭閲嶇偣鐐逛綅銆佹櫘閫氱偣浣嶇殑澶勭悊鏃堕棿
@@ -151,14 +239,17 @@
SysConfig normal = configMapper.checkConfigKeyUnique("normal.wordkorder.alarm.time");
// 濡傛灉鍗冲皢鐢熸垚宸ュ崟锛屼絾鏄澶囧浗鏍囩爜鏌ヤ笉鍒扮偣浣嶏紝鍒欎笉娣诲姞锛�
List<WorkOrder> notAddList = new ArrayList<>();
+ //鏌edis浠婃棩宸ュ崟鏁伴噺
+ int workOrderNum = 0;
for (WorkOrder workOrder : waitAddList) {
YwPoint point = pointMapping.get(workOrder.getSerialNumber());
if (Objects.isNull(point)) {
notAddList.add(workOrder);
continue;
}
- workOrder.setWorkOrderNo(IdUtils.timeAddRandomNO(5));
- workOrder.setUnitId(Math.toIntExact(point.getUnitId()));
+ if (Objects.nonNull(point.getUnitId())) {
+ workOrder.setUnitId(Math.toIntExact(point.getUnitId()));
+ }
if (point.getImportantTag() || point.getImportantCommandImageTag()) {
workOrder.setProcessingPeriod(Integer.valueOf(important.getConfigValue()));
} else {
@@ -169,47 +260,121 @@
if (CollectionUtils.isEmpty(waitAddList)) {
return Boolean.TRUE;
}
- this.saveBatch(waitAddList);
+ //UUID浣滀负value锛屼繚璇佷笂閿佺殑绾跨▼鑷繁瑙i攣
+ String requestId = IdUtils.fastSimpleUUID();
+ try {
+ for (int i = 0; i < 3; i++) {
+ boolean result = redisCache.acquireLock(RedisConstant.WORKORDER_NUM_LOCK, requestId, 10000);
+ if (result) {
+ //鏌ヤ粖鏃ュ伐鍗曢噺
+ Object redisNum = redisCache.getCacheObject(RedisConstant.WORKORDER_NUM);
+ workOrderNum = redisNum == null ? 0 : (Integer) redisNum;
+ break;
+ } else {
+ if (i == 2) {
+ log.error("閿佽鍗犵敤");
+ return Boolean.FALSE;
+ }
+ //绛夊緟涓�娈垫椂闂村悗缁х画
+ Thread.sleep(5000);
+ }
+ }
+ } catch (InterruptedException e) {
+ log.error("鑾峰彇閿佸紓甯�");
+ return Boolean.FALSE;
+ }
+ //璁板綍宸ュ崟鏁�,琛ュ厖宸ュ崟鍙�
+ for (WorkOrder workOrder : waitAddList) {
+ //鏁板瓧鍓嶉潰琛�0
+ workOrderNum++;
+ workOrder.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum)));
+ // 淇濆瓨閿欒绫诲瀷
+ for (String errorType : workOrder.getErrorTypeList()) {
+ WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType();
+ workOrderErrorType.setWorkOrderNo(workOrder.getWorkOrderNo());
+ workOrderErrorType.setCreateTime(now);
+ workOrderErrorType.setUpdateTime(now);
+ workOrderErrorType.setErrorName(errorType);
+ waitAddErrorTypeList.add(workOrderErrorType);
+ }
+ log.info("鍗冲皢鐢熸垚鐨勫伐鍗�:{}",workOrder);
+ }
+ redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
+ redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
+ // 淇濆瓨宸ュ崟鍜屾晠闅滅被鍨�
+ baseMapper.addMany(waitAddList);
+ if (!CollectionUtils.isEmpty(waitAddErrorTypeList)) {
+ workOrderErrorTypeService.getBaseMapper().addMany(waitAddErrorTypeList);
+ }
// 濡傛灉鏄洿鎺ヤ笅鍙戯紝娣诲姞涓嬪彂璁板綍
if (WorkOrderStatusEnum.DISTRIBUTED.equals(waitAddList.get(0).getStatus())) {
+ ArrayList<String> list = new ArrayList<>();
List<WorkOrderDistributeRecord> distributedRecordList = waitAddList.stream().map(item -> {
+ list.add(item.getSerialNumber());
WorkOrderDistributeRecord workOrderDistributeRecord = new WorkOrderDistributeRecord();
- workOrderDistributeRecord.setWorkOrderId(item.getId());
+ workOrderDistributeRecord.setWorkOrderNo(item.getWorkOrderNo());
workOrderDistributeRecord.setDistributeWay(WorkOrderDistributeWayEnum.DIRECT_DISTRIBUTE);
workOrderDistributeRecord.setUserId(1L);
- Date now = new Date();
workOrderDistributeRecord.setCreateTime(now);
workOrderDistributeRecord.setUpdateTime(now);
return workOrderDistributeRecord;
}).collect(Collectors.toList());
workOrderDistributeRecordMapper.insertBatch(distributedRecordList);
+ // 鍚屾鐐逛綅鐘舵��
+ ywPointService.updateRecovery(list, 1);
}
log.info("浼犲叆宸ュ崟鎬绘暟: {}锛屽疄闄呮坊鍔犲伐鍗曟暟锛歿}, 瀹為檯淇敼宸ュ崟鏁帮細{}", total, waitAddList.size(), updateNum);
return Boolean.TRUE;
}
-
/**
* 娣诲姞
+ *
* @param form
* @return
*/
@Override
public Result add(WorkOrderForm form) {
- WorkOrder entity = WorkOrderForm.getEntityByForm(form, null);
- entity.setWorkOrderNo(IdUtils.timeAddRandomNO(5));
- entity.setCreateTime(DateUtils.getNowDate());
- entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
- Date now = new Date();
- entity.setCreateTime(now);
- entity.setUpdateTime(now);
- if(baseMapper.insert(entity) > 0) {
- return Result.ok("娣诲姞鎴愬姛");
+ //鏌edis浠婃棩宸ュ崟鏁伴噺
+ 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 ? 0 : (Integer) redisNum;
+ workOrderNum++;
+ redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
+ redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
+ } else {
+ return Result.error("宸ュ崟姝e湪娣诲姞锛岃绋嶅悗鍐嶈瘯");
}
- return Result.error("娣诲姞澶辫触");
+ WorkOrder entity = WorkOrderForm.getEntityByForm(form, null);
+ // 鏌ヨ鍑虹櫧鍚嶅崟鍒楄〃
+ List<String> serialNumbers = workOrderWhiteMapper.selectList().stream().map(WorkOrderWhite::getSerialNumber).collect(Collectors.toList());
+ // 閬嶅巻宸ュ崟鍒楄〃锛屽垽鏂槸鍚﹀湪鐧藉悕鍗曚腑
+ if (serialNumbers.contains(entity.getSerialNumber())){
+ return Result.error("璇ヨ澶囧湪鐧藉悕鍗曚腑锛屼笉鑳芥坊鍔犲伐鍗�");
+ }else {
+ entity.setCreateTime(DateUtils.getNowDate());
+ entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
+ Date now = new Date();
+ entity.setCreateTime(now);
+ entity.setUpdateTime(now);
+ entity.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum)));
+ entity.setErrorType(String.join(",", form.getErrorType()));
+ List<WorkOrderErrorType> workOrderErrorTypes = form.getErrorType().stream().map(errorType -> new WorkOrderErrorType(entity.getWorkOrderNo(), errorType)).toList();
+ workOrderErrorTypeService.getBaseMapper().insertWorkOrderErrorTypeList(workOrderErrorTypes);
+ if (baseMapper.insert(entity) > 0) {
+ return Result.ok("娣诲姞鎴愬姛");
+ }
+ return Result.error("娣诲姞澶辫触");
+ }
}
/**
* 淇敼
+ *
* @param form
* @return
*/
@@ -237,7 +402,7 @@
baseMapper.updateById(workOrder);
// 娣诲姞涓�鏉″鏍歌褰�
WorkOrderAuditingRecord workOrderAuditingRecord = new WorkOrderAuditingRecord();
- workOrderAuditingRecord.setWorkOrderId(workOrder.getId());
+ workOrderAuditingRecord.setWorkOrderNo(workOrder.getWorkOrderNo());
workOrderAuditingRecord.setAuditingUser(SecurityUtils.getLoginUser().getUserId().intValue());
workOrderAuditingRecord.setResult(form.getAuditingResult().getDesc());
workOrderAuditingRecord.setRemark(form.getAuditingRemark());
@@ -251,7 +416,7 @@
notifyService.save(notify);
// 鍚屾鐐逛綅鐘舵��
if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) {
- ywPointService.updateRecovery(Arrays.asList(workOrder.getSerialNumber()), 0);
+ ywPointService.updateRecovery(Collections.singletonList(workOrder.getSerialNumber()), 0);
}
return Result.ok("鎿嶄綔鎴愬姛");
}
@@ -260,25 +425,27 @@
@Transactional(rollbackFor = Exception.class)
public Result batchAuditing(WorkOrderBatchAuditingForm form) {
// 鏍规嵁鏁呴殰绫诲瀷鑾峰彇鍒楄〃
- List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper)
- .in(WorkOrder::getStatus, WorkOrderStatusEnum.YW_HANDLE.getValue())
- .in(WorkOrder::getErrorType, form.getErrorTypes())
- .select(WorkOrder::getId, WorkOrder::getUnitId, WorkOrder::getWorkOrderNo)
- .list();
+ List<WorkOrder> list = baseMapper.batchGetByError(form);
+// List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper)
+// .in(WorkOrder::getStatus, WorkOrderStatusEnum.YW_HANDLE.getValue())
+// .in(WorkOrder::getErrorType, form.getErrorTypes())
+// .select(WorkOrder::getId, WorkOrder::getUnitId, WorkOrder::getWorkOrderNo, WorkOrder::getSerialNumber)
+// .list();
if (list.isEmpty()) {
return Result.error("娌℃湁宸ュ崟鍙互瀹℃牳");
}
- List<Integer> ids = list.stream().map(WorkOrder::getId).collect(Collectors.toList());
+ List<String> workOrderNoList = list.stream().map(WorkOrder::getWorkOrderNo).collect(Collectors.toList());
+ List<String> serialNumbers = list.stream().map(WorkOrder::getSerialNumber).toList();
// 宸ュ崟鐘舵��
LambdaUpdateWrapper<WorkOrder> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
- lambdaUpdateWrapper.in(WorkOrder::getId, ids);
+ lambdaUpdateWrapper.in(WorkOrder::getWorkOrderNo, workOrderNoList);
lambdaUpdateWrapper.set(WorkOrder::getStatus, form.getAuditingResult());
baseMapper.update(lambdaUpdateWrapper);
// 娣诲姞澶氭潯瀹℃牳璁板綍
List<WorkOrderAuditingRecord> workOrderAuditingRecords = new ArrayList<>();
- for (Integer id : ids) {
+ for (String workOrderNo : workOrderNoList) {
WorkOrderAuditingRecord workOrderAuditingRecord = new WorkOrderAuditingRecord();
- workOrderAuditingRecord.setWorkOrderId(id);
+ workOrderAuditingRecord.setWorkOrderNo(workOrderNo);
workOrderAuditingRecord.setAuditingUser(SecurityUtils.getLoginUser().getUserId().intValue());
workOrderAuditingRecord.setResult(form.getAuditingResult().getDesc());
workOrderAuditingRecord.setRemark(form.getAuditingRemark());
@@ -295,6 +462,10 @@
workOrder.getWorkOrderNo());
notifies.add(notify);
}
+ // 鍚屾鐐逛綅鐘舵��
+ if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) {
+ ywPointService.updateRecovery(serialNumbers, 0);
+ }
notifyService.saveBatch(notifies);
return Result.ok("鎿嶄綔鎴愬姛");
}
@@ -302,6 +473,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Result ywCondition(WorkOrderYWConditionForm form) {
+
WorkOrder workOrder = baseMapper.selectById(form.getId());
if (Objects.isNull(workOrder)) {
throw new ServiceException("宸ュ崟涓嶅瓨鍦�");
@@ -312,27 +484,63 @@
baseMapper.updateById(workOrder);
// 娣诲姞涓�鏉¤繍缁存儏鍐佃褰�
WorkOrderYwConditionRecord workOrderYwConditionRecord = new WorkOrderYwConditionRecord();
- workOrderYwConditionRecord.setWorkOrderId(workOrder.getId());
+ workOrderYwConditionRecord.setWorkOrderNo(workOrder.getWorkOrderNo());
workOrderYwConditionRecord.setCommitUser(SecurityUtils.getLoginUser().getUserId().intValue());
workOrderYwConditionRecord.setYwCondition(form.getYwCondition());
workOrderYwConditionRecord.setYwProofMaterials(form.getYwProofMaterials());
+ workOrderYwConditionRecord.setSysMsg(Boolean.FALSE);
workOrderYwConditionRecordMapper.insert(workOrderYwConditionRecord);
+ //寮傛鑾峰彇鍥剧墖
+ WorkOrderServiceImpl self = applicationContext.getBean(WorkOrderServiceImpl.class);
+ self.getImage(workOrder);
return Result.ok("鎿嶄綔鎴愬姛");
}
+ @Async("threadPoolTaskExecutor")
+ public void getImage(WorkOrder workOrder) {
+ List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
+ .orderByDesc(DeviceInfo::getUpdateTime)
+ .last("limit 1")
+ .list();
+ if (CollectionUtils.isEmpty(gbDevices)) {
+ return;
+ }
+ // 鍥芥爣璁惧鐨勭紪鐮佸氨鏄彇瑙嗛娴佺殑璁惧缂栫爜锛屽浗鏍囪澶囧氨涓�涓�傚浗鏍囪澶囩殑姣忎竴涓�氶亾浠h〃涓�涓憚鍍忓ご锛屼篃灏辨槸璁惧id鏄彇娴佺殑閫氶亾id
+ String frameImg = null;
+ try {
+ log.info("鍥芥爣骞冲彴:{},璁惧缂栫爜:{},宸ュ崟鍙�:{}",gbDevices.get(0).getDeviceId(), workOrder.getSerialNumber(), workOrder.getWorkOrderNo());
+ frameImg = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), workOrder.getSerialNumber(), workOrder.getWorkOrderNo());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if (StringUtils.hasText(frameImg)) {
+ WorkOrderCheckImg img = new WorkOrderCheckImg();
+ img.setWorkOrderNo(workOrder.getWorkOrderNo());
+ img.setImgUrl(frameImg);
+ img.setCreateTime(new Date());
+ workOrderCheckImgMapper.insert(img);
+ }
+ }
@Override
- public Result selectYwConditionByYwId(Integer id) {
- List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(id);
- return Result.ok().data(ywConditionList);
+ public List<WorkOrderYwConditionRecordVO> selectYwConditionByYwId(String workOrderNo) {
+ List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(workOrderNo);
+ ywConditionList.stream().forEach(item -> {
+ if(item.getUserId().equals(1)){
+ item.setUnitName("绠$悊鍛�");
+ }
+ if (Objects.nonNull(item.getSysMsg()) && item.getSysMsg()) {
+ item.setUnitName("绯荤粺娑堟伅");
+ }
+ });
+ return ywConditionList;
}
@Override
- public Result selectYwAuditingListByYwId(String id) {
- return Result.ok().data(
- new LambdaQueryChainWrapper<>(workOrderAuditingRecordMapper)
- .eq(WorkOrderAuditingRecord::getWorkOrderId, id)
- .orderByAsc(WorkOrderAuditingRecord::getCreateTime)
- .list());
+ public List<WorkOrderAuditingRecord> selectYwAuditingListByYwId(String workOrderNo) {
+ return new LambdaQueryChainWrapper<>(workOrderAuditingRecordMapper)
+ .eq(WorkOrderAuditingRecord::getWorkOrderNo, workOrderNo)
+ .orderByAsc(WorkOrderAuditingRecord::getCreateTime)
+ .list();
}
@Override
@@ -347,12 +555,13 @@
/**
* 鎵归噺鍒犻櫎
+ *
* @param ids
* @return
*/
@Override
public Result remove(List<String> ids) {
- if(baseMapper.deleteBatchIds(ids) > 0) {
+ if (baseMapper.deleteBatchIds(ids) > 0) {
return Result.ok("鍒犻櫎鎴愬姛");
}
return Result.error("鍒犻櫎澶辫触");
@@ -360,12 +569,16 @@
/**
* id鍒犻櫎
+ *
* @param id
* @return
*/
@Override
public Result removeById(String id) {
- if(baseMapper.deleteById(id) > 0) {
+ WorkOrder workOrder = baseMapper.selectById(id);
+ String workOrderNo = workOrder.getWorkOrderNo();
+ workOrderDistributeRecordMapper.deleteByWorkOrder(workOrderNo);
+ if (baseMapper.deleteById(id) > 0) {
return Result.ok("鍒犻櫎鎴愬姛");
}
return Result.error("鍒犻櫎澶辫触");
@@ -373,19 +586,48 @@
/**
* 鍒嗛〉鏌ヨ
+ *
* @param query
* @return
*/
@Override
public Result page(WorkOrderQuery query) {
IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
+ if(query.getUnitId()==null) {
+ query.setUnitId(SecurityUtils.getUnitId());
+ }
+ if(query.getStart()!=null) query.setStart(DateUtils.getDayStart(query.getStart()));
+ if(query.getEnd()!=null) query.setEnd(DateUtils.getDayEnd(query.getEnd()));
baseMapper.page(page, query);
+ if (!CollectionUtils.isEmpty(page.getRecords())) {
+ page.getRecords().stream().forEach(item -> {
+ if (StringUtils.hasText(item.getErrorType())) {
+ List<String> errorTypeList = new ArrayList<>(List.of(item.getErrorType().split(",")));
+ int index = errorTypeList.indexOf(query.getErrorTypeLabel());
+ if (index != -1) {
+ // 淇濆瓨瑕佺Щ鍔ㄧ殑鍏冪礌
+ String firstOccurrence = errorTypeList.get(index);
+ // 浠庡垪琛ㄤ腑绉婚櫎璇ュ厓绱狅紙绗竴娆″嚭鐜扮殑浣嶇疆锛�
+ errorTypeList.remove(index);
+ // 灏嗚鍏冪礌娣诲姞鍒板垪琛ㄧ殑棣栦綅
+ errorTypeList.add(0, firstOccurrence);
+ }
+ // 璁剧疆鏇存柊鍚庣殑鍒楄〃
+ item.setErrorTypeList(errorTypeList);
+ }
+ if (StringUtils.hasText(item.getImgListStr())) {
+ item.setImgList(List.of(item.getImgListStr().split(",")));
+ }
+ });
+ }
return Result.ok().data(page.getRecords()).total(page.getTotal());
}
@Override
public Result distributePage(DistributeWorkOrderQuery query) {
IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
+ if(query.getStart()!=null) query.setStart(DateUtils.getDayStart(query.getStart()));
+ if(query.getEnd()!=null) query.setEnd(DateUtils.getDayEnd(query.getEnd()));
baseMapper.distributePage(page, query);
return Result.ok().data(page).total(page.getTotal());
}
@@ -397,44 +639,49 @@
LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault());
data.setEnd(now);
switch (data.getFastWay()) {
- case LAST_HALF_HOUR:
- data.setStart(now.minusMinutes(30));
- break;
case LAST_HOUR:
data.setStart(now.minusHours(1));
break;
case LAST_TWO_HOUR:
- data.setStart(now.minusHours(2));
- break;
+ data.setStart(now.minusHours(2));
+ break;
case LAST_DAY:
data.setStart(now.minusDays(1));
break;
- }
-
+ default:
+ break;
+ }
+ if (Objects.isNull(data.getStart())) {
+ throw new RuntimeException("鏃犳硶鐢熸垚蹇�熶笅鍙戠殑鏃堕棿鑼冨洿锛岃閫夋嫨姝g‘鐨勫揩閫熶笅鍙戞柟寮�");
+ }
// 鏌ヨ绗﹀悎鏉′欢鐨勫伐鍗�
List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper)
- .select(WorkOrder::getSerialNumber, WorkOrder::getSerialNumber)
+ .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())
.list();
- List<Integer> ids = list.stream().map(WorkOrder::getId).toList();
+ List<String> workOrderNoList = list.stream().map(WorkOrder::getWorkOrderNo).toList();
List<String> serialNumberList = list.stream().map(WorkOrder::getSerialNumber).toList();
- if (ids.isEmpty()) { return Result.error("娌℃湁绗﹀悎鏉′欢鐨勫伐鍗�"); }
- if (!getDistributeLock()) { return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); }
+ if (workOrderNoList.isEmpty()) {
+ return Result.error("娌℃湁绗﹀悎鏉′欢鐨勫伐鍗�");
+ }
+ if (!getDistributeLock()) {
+ return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�");
+ }
try {
new LambdaUpdateChainWrapper<>(baseMapper)
.set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED)
- .in(WorkOrder::getId, ids)
+ .in(WorkOrder::getWorkOrderNo, workOrderNoList)
.update();
- addDistributeRecord(ids, WorkOrderDistributeWayEnum.FAST_DISTRIBUTE);
+ addDistributeRecord(workOrderNoList, WorkOrderDistributeWayEnum.FAST_DISTRIBUTE);
// 鍚屾鐐逛綅鐘舵��
ywPointService.updateRecovery(serialNumberList, 1);
- return Result.ok("鎴愬姛涓嬪彂" + ids.size() + "鏉″伐鍗�");
+ return Result.ok("鎴愬姛涓嬪彂" + workOrderNoList.size() + "鏉″伐鍗�");
} catch (Exception e) {
return Result.error("鎿嶄綔澶辫触");
} finally {
@@ -446,30 +693,35 @@
@Transactional
public Result selectedIdsDistribute(DistributeWorkOrderQuery query) {
WorkOrderDistributeWayEnum distributeWayEnum = WorkOrderDistributeWayEnum.SELECTED_DISTRIBUTE;
- if (!getDistributeLock()) { return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); }
+ if (!getDistributeLock()) {
+ return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�");
+ }
try {
- if (query.getIds().isEmpty()) {
- query.setIds(new LambdaQueryChainWrapper<>(baseMapper)
+ if (query.getWorkOrderNOList().isEmpty()) {
+ query.setWorkOrderNOList(new LambdaQueryChainWrapper<>(baseMapper)
.eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE)
.eq(Objects.nonNull(query.getUnitId()), WorkOrder::getUnitId, query.getUnitId())
- .select(WorkOrder::getId)
+ .select(WorkOrder::getWorkOrderNo)
.list()
.stream()
- .map(WorkOrder::getId)
+ .map(WorkOrder::getWorkOrderNo)
.collect(Collectors.toList()));
distributeWayEnum = WorkOrderDistributeWayEnum.ALL_DISTRIBUTE;
}
- if (query.getIds().isEmpty()) { return Result.error("娌℃湁宸ュ崟寰呬笅鍙�"); }
+ if (query.getWorkOrderNOList().isEmpty()) {
+ return Result.error("娌℃湁宸ュ崟寰呬笅鍙�");
+ }
new LambdaUpdateChainWrapper<>(baseMapper)
.set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED)
- .in(WorkOrder::getId, query.getIds())
+ .in(WorkOrder::getWorkOrderNo, query.getWorkOrderNOList())
.update();
- addDistributeRecord(query.getIds(), distributeWayEnum);
+ addDistributeRecord(query.getWorkOrderNOList(), distributeWayEnum);
// 鍚屾鐐逛綅鐘舵��
- List<String> serialNumberList = new LambdaQueryChainWrapper<>(baseMapper).select(WorkOrder::getSerialNumber).in(WorkOrder::getId, query.getIds()).list().stream().map(WorkOrder::getSerialNumber).toList();
+ List<String> serialNumberList = new LambdaQueryChainWrapper<>(baseMapper).select(WorkOrder::getSerialNumber).in(WorkOrder::getWorkOrderNo, query.getWorkOrderNOList()).list().stream().map(WorkOrder::getSerialNumber).toList();
ywPointService.updateRecovery(serialNumberList, 1);
- return Result.ok("鎴愬姛涓嬪彂" + query.getIds().size() + "鏉″伐鍗�");
+ return Result.ok("鎴愬姛涓嬪彂" + query.getWorkOrderNOList().size() + "鏉″伐鍗�");
} catch (Exception e) {
+ System.out.println(e.getMessage());
return Result.error("鎿嶄綔澶辫触");
} finally {
distributeUnLock();
@@ -478,11 +730,12 @@
/**
* 鐢宠宸ュ崟涓嬪彂閿�
+ *
* @return 宸ュ崟涓嬪彂閿佺敵璇风粨鏋�
*/
public synchronized Boolean getDistributeLock() {
if (Objects.isNull(redisCache.getCacheObject(DISTRIBUTE_LOCK_KEY))) {
- redisCache.setCacheObject(DISTRIBUTE_LOCK_KEY, "1");
+ redisCache.setCacheObject(DISTRIBUTE_LOCK_KEY, "1", 30, TimeUnit.SECONDS);
return true;
} else {
return false;
@@ -498,19 +751,21 @@
/**
* 娣诲姞宸ュ崟涓嬪彂璁板綍
- * @param ids 宸ュ崟id
+ *
+ * @param workOrderNoList 宸ュ崟id
*/
- private void addDistributeRecord(List<Integer> ids, WorkOrderDistributeWayEnum distributeWay) {
+ private void addDistributeRecord(List<String> workOrderNoList, WorkOrderDistributeWayEnum distributeWay) {
LoginUser loginUser = SecurityUtils.getLoginUser();
workOrderDistributeRecordMapper.insertBatch(
- ids.stream()
- .map(id -> new WorkOrderDistributeRecord(id, loginUser.getUserId(), distributeWay))
+ workOrderNoList.stream()
+ .map(no -> new WorkOrderDistributeRecord(no, loginUser.getUserId(), distributeWay))
.toList()
);
}
/**
* 鏍规嵁id鏌ユ壘
+ *
* @param id
* @return
*/
@@ -525,6 +780,7 @@
/**
* 鍒楄〃
+ *
* @return
*/
@Override
@@ -574,55 +830,411 @@
@Override
public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) {
- return baseMapper.workOrderRegion(dashboardQuery);
- }
-
-
- @Override
- public String getFrameImgByDevice(String deviceId, String channelId) {
- String url = String.format(this.rtspServer + "/start/%s/%s", deviceId, channelId);
- String result = HttpUtils.sendGet(url);
- WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
- if (0 == wvpResult.getCode()) {
- StreamContent data = (StreamContent) wvpResult.getData();
- String rtspUrl = data.getRtsp();
- if (StringUtils.hasText(rtspUrl)) {
- try {
- // 鍒涘缓FFmpegFrameGrabber瀵硅薄
- FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(rtspUrl);
- grabber.start(); // 寮�濮嬫崟鑾�
-
- Frame frame;
- if ((frame = grabber.grabFrame()) != null) {
- // 灏嗗抚杞崲涓哄浘鐗�
- Java2DFrameConverter converter = new Java2DFrameConverter();
- BufferedImage image = converter.convert(frame);
- File outputfile = new File(serverConfig.getUrl() + PlatformConfig.getUploadPath() + deviceId + IdUtils.fastSimpleUUID() + ".png");
- ImageIO.write(image, "png", outputfile);
- String imgPath = outputfile.getAbsolutePath();
- System.out.println("Saved " + imgPath);
- return imgPath;
- }
- grabber.stop(); // 鍋滄鎹曡幏
- grabber.release(); // 閲婃斁璧勬簮
- } catch (IOException e) {
- e.printStackTrace();
+ //鍒濆鍖栨墍鏈夊尯鍩熸暟鎹�
+ List<WorkOrderRegionVO> vos = new ArrayList<>();
+ for (AreaDeptEnum value : AreaDeptEnum.values()) {
+ WorkOrderRegionVO vo = new WorkOrderRegionVO();
+ vo.setArea(value.getName());
+ vo.setDoneNum(0);
+ vo.setTodoNum(0);
+ vos.add(vo);
+ }
+ List<WorkOrderRegionVO> workOrderRegionVOS = baseMapper.workOrderRegion(dashboardQuery);
+ for (WorkOrderRegionVO vo : vos) {
+ for (WorkOrderRegionVO workOrder : workOrderRegionVOS) {
+ //璧嬪��
+ if (vo.getArea().equals(workOrder.getArea())) {
+ BeanUtils.copyProperties(workOrder, vo);
}
}
}
+ return vos;
+ }
+
+
+ @Override
+ public String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) throws Exception {
+ String url = String.format(this.rtspServer + "/api/play/start/img/%s/%s", deviceId, channelId);
+ log.info("璁块棶璺緞{}",url);
+ String result = HttpUtils.sendGet(url);
+ log.info("鎷垮埌鍙栨祦鍥剧墖鍝嶅簲缁撴灉锛�" + result);
+ WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
+ if(wvpResult.getCode() == 0) {
+ Object imgUrl = (Object) wvpResult.getData();
+ imgUrl = Objects.isNull(imgUrl) ? "" : imgUrl;
+ log.info("鎷垮埌鍙栨祦鍥剧墖锛�" + imgUrl);
+ return (String) imgUrl;
+ }
return null;
+// 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 = new FFmpegFrameGrabber(rtspUrl);
+//// grabber.setOption("rtsp_transport", "tcp"); // 浣跨敤tcp鐨勬柟寮忥紝涓嶇劧浼氫涪鍖呭緢涓ラ噸
+//// grabber.setVideoOption("probesize", "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();
+// }
+// }
+// }
+// }
+// } else {
+// System.out.println("璇锋眰澶辫触锛岄敊璇爜锛�" + wvpResult.getCode() + "--" + wvpResult.getMsg());
+// }
+// System.out.println("鍥剧墖URL锛�" + imgUrl);
+// return imgUrl;
}
@Override
- public List<DeviceInfoVO> hasErrorWorkOrderList() {
- List<DeviceInfoVO> list = baseMapper.hasErrorWorkOrderList();
+ 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("rtsp"); // 鍙杕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;
}
@Override
- public void updateImgById(Integer workOrderId, String imgPath) {
+ public void updateImgById (Integer workOrderId, String imgPath){
new LambdaUpdateChainWrapper<>(baseMapper)
.eq(WorkOrder::getId, workOrderId)
- .set(WorkOrder::getYwCheckCondition, imgPath);
+ .set(WorkOrder::getYwCheckResult, imgPath)
+ .update();
+ }
+
+ @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);
+ // 瀹℃牳璁板綍
+ List<WorkOrderAuditingRecord> workOrderAuditingRecords = this.selectYwAuditingListByYwId(workOrderNo);
+ 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);
+ }
+
+ @Override
+ public List<WorkOrderVO> export (WorkOrderExportQuery query){
+ if(query.getUnitId()==null) {
+ query.setUnitId(SecurityUtils.getUnitId());
+ }
+ if (query.getStart() != null) query.setStart(query.getStart() + " 00:00:00");
+ if (query.getEnd() != null) query.setEnd(query.getEnd() + " 23:59:59");
+
+ return baseMapper.export(query);
+ }
+
+ /**
+ * 宸ュ崟鐧藉悕鍗曞垪琛�
+ *
+ * @param query 鏌ヨ
+ * @return {@link List }<{@link WorkOrderWhite }>
+ * @author
+ */
+ @Override
+ public Result selectWorkOrderWhiteList(WorkOrderWhiteQuery query) {
+ IPage<WorkOrderWhite> page = PageUtil.getPage(query, WorkOrderWhite.class);
+ workOrderWhiteMapper.page(page, query);
+ return Result.ok().data(page.getRecords()).total(page.getTotal());
+ }
+
+ /**
+ * 娣诲姞宸ュ崟鐧藉悕鍗�
+ *
+ * @param workOrderWhite 鐧借壊宸ュ崟
+ * @return {@link Result }
+ * @author
+ */
+ @Override
+ public Result addWorkOrderWhite(WorkOrderWhite workOrderWhite) {
+ // 閫氳繃璁惧缂栫爜鏌ヨ璁惧淇℃伅
+ YwPoint ywPoint = ywPointService.selectBySerialNumber(workOrderWhite.getSerialNumber());
+ // 鏂板鐧藉悕鍗曡澶囪褰�
+ if (ywPoint == null){
+ return Result.error("璁惧涓嶅瓨鍦�");
+ }
+ // 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦ㄨ鐧藉悕鍗�
+ WorkOrderWhite flag = workOrderWhiteMapper.selectBySerialNumber(workOrderWhite.getSerialNumber());
+ if (flag != null) {
+ return Result.error("璇ヨ澶囧凡瀛樺湪鐧藉悕鍗�");
+ } else {
+ workOrderWhite.setPointName(ywPoint.getPointName());
+ workOrderWhite.setCreateBy(SecurityUtils.getUsername());
+ workOrderWhiteMapper.insert(workOrderWhite);
+ return Result.ok();
+ }
+ }
+
+ /**
+ * 鎵归噺鍒犻櫎宸ュ崟鐧藉悕鍗�
+ *
+ * @param ids ids
+ * @author
+ */
+ @Override
+ public Result batchDeleteWorkOrderWhite(List<String> ids) {
+ workOrderWhiteMapper.batchDelete(ids);
+ return Result.ok();
+ }
+
+ /**
+ * 鎵归噺瀵煎叆鐧藉悕鍗�
+ *
+ * @param dataList 鏁版嵁鍒楄〃
+ * @author
+ */
+ @Override
+ public void batchImportWhite(List<PointExport> dataList) {
+ // 鑾峰緱鎵�鏈夐渶瑕佹柊澧炵殑鐧藉悕鍗曞璞�
+ List<WorkOrderWhite> whitelist = dataList.stream().map(pointExport ->
+ new WorkOrderWhite(pointExport.getSerialNumber(), pointExport.getPointName(), SecurityUtils.getUsername()))
+ .collect(Collectors.toList());
+ // 鑾峰緱鎵�鏈夊凡瀛樺湪鐨勭櫧鍚嶅崟璁惧缂栫爜
+ List<String> serialNumbers = workOrderWhiteMapper.selectList().stream().map(WorkOrderWhite::getSerialNumber).collect(Collectors.toList());
+ // 绛涢�夊嚭鏂板銆佷慨鏀圭殑鐧藉悕鍗曞璞�
+ List<WorkOrderWhite> updateWhiteList = whitelist.stream().filter(white -> serialNumbers.contains(white.getSerialNumber())).collect(Collectors.toList());
+ List<WorkOrderWhite> insertWhiteList = whitelist.stream().filter(white ->!serialNumbers.contains(white.getSerialNumber())).collect(Collectors.toList());
+ // 鏂板/淇敼鐧藉悕鍗曡澶囪褰�
+ updateWhiteList.stream().forEach(white -> workOrderWhiteMapper.updateBySerialNumber(white));
+ insertWhiteList.stream().forEach(white -> workOrderWhiteMapper.insert(white));
+ }
+
+ /**
+ * 妫�娴嬪伐鍗曟寜閽�
+ * @param workOrderNo
+ * @return
+ */
+ @Override
+ public Result checkImage(String workOrderNo,String serialNumber) {
+ // 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹�
+ List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper)
+ .orderByDesc(DeviceInfo::getUpdateTime)
+ .last("limit 1")
+ .list();
+ if (!CollectionUtils.isEmpty(gbDevices)) {
+ try {
+ String imgUrl = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), serialNumber,workOrderNo);
+ if (StringUtils.hasText(imgUrl)) {
+ WorkOrderCheckImg img = new WorkOrderCheckImg();
+ img.setWorkOrderNo(workOrderNo);
+ img.setImgUrl(imgUrl);
+ img.setCreateTime(new Date());
+ workOrderCheckImgMapper.insert(img);
+ }
+ return Result.ok().data(imgUrl);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ return Result.ok();
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result batchDeleteWorkOrder(List<String> workOrderNos) {
+ if(!CollectionUtils.isEmpty(workOrderNos)) {
+ //鍒犻櫎宸ュ崟瀹℃牳璁板綍
+ workOrderAuditingRecordMapper.delete(new QueryWrapper<WorkOrderAuditingRecord>().in("work_order_no", workOrderNos));
+ //鍒犻櫎宸ュ崟鍥剧墖璁板綍
+ workOrderCheckImgMapper.delete(new QueryWrapper<WorkOrderCheckImg>().in("work_order_no", workOrderNos));
+ //鍒犻櫎宸ュ崟涓嬪彂璁板綍
+ workOrderDistributeRecordMapper.delete(new QueryWrapper<WorkOrderDistributeRecord>().in("work_order_no", workOrderNos));
+ //鍒犻櫎宸ュ崟鏁呴殰绫诲瀷
+ workOrderErrorTypeMapper.delete(new QueryWrapper<WorkOrderErrorType>().in("work_order_no", workOrderNos));
+ //鍒犻櫎宸ュ崟鎯呭喌璁板綍
+ workOrderYwConditionRecordMapper.delete(new QueryWrapper<WorkOrderYwConditionRecord>().in("work_order_no", workOrderNos));
+ //鍒犻櫎宸ュ崟
+ this.baseMapper.delete(new QueryWrapper<WorkOrder>().in("work_order_no", workOrderNos));
+ }
+ return Result.ok();
+ }
+
+ @Override
+ public Result errorAll() {
+ List<CascadeOption> results = new ArrayList<>();
+ CascadeOption video = new CascadeOption();
+ video.setLabel("瑙嗛");
+ video.setValue("VIDEO");
+ List<ErrorType> videoErr = ErrorType.getErrorTypesByCategory("VIDEO");
+ List<ErrorType> videoErr1 = ErrorType.getErrorTypesByCategory("COMMON");
+ videoErr.addAll(videoErr1);
+ List<CascadeOption> videoChildren = videoErr.stream().map(item -> CascadeOption.builder()
+ .value(item.getValue())
+ .label(item.getDesc())
+ .build()).collect(Collectors.toList());
+ video.setChildren(videoChildren);
+
+ CascadeOption car = new CascadeOption();
+ car.setLabel("杞﹁締");
+ car.setValue("CAR");
+ List<ErrorType> carErr = ErrorType.getErrorTypesByCategory("CAR");
+ List<ErrorType> carErr1 = ErrorType.getErrorTypesByCategory("COMMON");
+ List<ErrorType> carErr2 = ErrorType.getErrorTypesByCategory("CARORFACE");
+ carErr.addAll(carErr1);
+ carErr.addAll(carErr2);
+ List<CascadeOption> carChildren = carErr.stream().map(item -> CascadeOption.builder()
+ .value(item.getValue())
+ .label(item.getDesc())
+ .build()).collect(Collectors.toList());
+ car.setChildren(carChildren);
+
+ CascadeOption face = new CascadeOption();
+ face.setLabel("浜鸿劯");
+ face.setValue("FACE");
+ List<ErrorType> faceErr = ErrorType.getErrorTypesByCategory("FACE");
+ List<ErrorType> faceErr1 = ErrorType.getErrorTypesByCategory("COMMON");
+ List<ErrorType> faceErr2 = ErrorType.getErrorTypesByCategory("CARORFACE");
+ faceErr.addAll(faceErr1);
+ faceErr.addAll(faceErr2);
+ List<CascadeOption> faceChildren = faceErr.stream().map(item -> CascadeOption.builder()
+ .value(item.getValue())
+ .label(item.getDesc())
+ .build()).collect(Collectors.toList());
+ face.setChildren(faceChildren);
+
+ results.add(video);
+ results.add(car);
+ results.add(face);
+ return Result.ok().data(results);
}
}
--
Gitblit v1.8.0