From 9b55891e6dd57bc244e6c5654434b32e05c83496 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 25 九月 2024 15:10:25 +0800
Subject: [PATCH] 异常监控排除已经审核过的工单作为状态
---
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 133 +++++++++++++++++++++++++++++++++++--------
1 files changed, 107 insertions(+), 26 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 b89867f..6f47e90 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
@@ -37,10 +37,8 @@
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;
-import enumeration.general.WorkOrderStatusEnum;
+import constant.RedisConstant;
+import enumeration.general.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@@ -50,6 +48,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
@@ -83,7 +82,6 @@
private final SysConfigMapper configMapper;
private final ReportMapper reportMapper;
private final WorkOrderCheckImgMapper workOrderCheckImgMapper;
-
@Value("${rtsp.server:http://127.0.0.1:7788}")
private String rtspServer;
@@ -95,6 +93,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
+ //TODO锛氭竻绌篟edis瀹氭椂浠诲姟
public synchronized Boolean innerAddWorkOrder(List<WorkOrder> workOrderList) {
int total = workOrderList.size();
workOrderList.stream().filter(item -> {
@@ -141,7 +140,7 @@
continue;
} else {
for (String errorType : errorTypes) {
- if (! errorNameList.contains(errorType)) {
+ if (!errorNameList.contains(errorType)) {
// 閿欒绫诲瀷涓嶄竴鏍凤紝灏辨柊澧炰竴涓敊璇被鍨嬶紝骞朵笖閲嶇疆宸ュ崟鐘舵�佷负寰呭鐞�
WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType();
workOrderErrorType.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo());
@@ -199,13 +198,40 @@
SysConfig normal = configMapper.checkConfigKeyUnique("normal.wordkorder.alarm.time");
// 濡傛灉鍗冲皢鐢熸垚宸ュ崟锛屼絾鏄澶囧浗鏍囩爜鏌ヤ笉鍒扮偣浣嶏紝鍒欎笉娣诲姞锛�
List<WorkOrder> notAddList = new ArrayList<>();
+ //鏌edis浠婃棩宸ュ崟鏁伴噺
+ int workOrderNum = 0;
+ //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) {
YwPoint point = pointMapping.get(workOrder.getSerialNumber());
if (Objects.isNull(point)) {
notAddList.add(workOrder);
continue;
}
- workOrder.setWorkOrderNo(IdUtils.randomNO(now));
+ //鏁板瓧鍓嶉潰琛�0
+ workOrderNum++;
+ workOrder.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum)));
if (Objects.nonNull(point.getUnitId())) {
workOrder.setUnitId(Math.toIntExact(point.getUnitId()));
}
@@ -228,9 +254,12 @@
if (CollectionUtils.isEmpty(waitAddList)) {
return Boolean.TRUE;
}
+ //璁板綍宸ュ崟鏁�
+ redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
+ redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
// 淇濆瓨宸ュ崟鍜屾晠闅滅被鍨�
baseMapper.addMany(waitAddList);
- if (! CollectionUtils.isEmpty(waitAddErrorTypeList)) {
+ if (!CollectionUtils.isEmpty(waitAddErrorTypeList)) {
workOrderErrorTypeService.getBaseMapper().addMany(waitAddErrorTypeList);
}
// 濡傛灉鏄洿鎺ヤ笅鍙戯紝娣诲姞涓嬪彂璁板綍
@@ -256,22 +285,38 @@
/**
* 娣诲姞
+ *
* @param form
* @return
*/
@Override
public Result add(WorkOrderForm form) {
+ //鏌edis浠婃棩宸ュ崟鏁伴噺
+ int workOrderNum = 1;
+ //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++;
+ redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum);
+ redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId);
+ } else {
+ return Result.error("宸ュ崟姝e湪娣诲姞锛岃绋嶅悗鍐嶈瘯");
+ }
WorkOrder entity = WorkOrderForm.getEntityByForm(form, null);
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.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) {
+ if (baseMapper.insert(entity) > 0) {
return Result.ok("娣诲姞鎴愬姛");
}
return Result.error("娣诲姞澶辫触");
@@ -279,6 +324,7 @@
/**
* 淇敼
+ *
* @param form
* @return
*/
@@ -409,9 +455,9 @@
@Override
public List<WorkOrderAuditingRecord> selectYwAuditingListByYwId(String workOrderNo) {
return new LambdaQueryChainWrapper<>(workOrderAuditingRecordMapper)
- .eq(WorkOrderAuditingRecord::getWorkOrderNo, workOrderNo)
- .orderByAsc(WorkOrderAuditingRecord::getCreateTime)
- .list();
+ .eq(WorkOrderAuditingRecord::getWorkOrderNo, workOrderNo)
+ .orderByAsc(WorkOrderAuditingRecord::getCreateTime)
+ .list();
}
@Override
@@ -426,12 +472,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("鍒犻櫎澶辫触");
@@ -439,12 +486,13 @@
/**
* id鍒犻櫎
+ *
* @param id
* @return
*/
@Override
public Result removeById(String id) {
- if(baseMapper.deleteById(id) > 0) {
+ if (baseMapper.deleteById(id) > 0) {
return Result.ok("鍒犻櫎鎴愬姛");
}
return Result.error("鍒犻櫎澶辫触");
@@ -452,6 +500,7 @@
/**
* 鍒嗛〉鏌ヨ
+ *
* @param query
* @return
*/
@@ -459,8 +508,10 @@
public Result page(WorkOrderQuery query) {
IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class);
query.setUnitId(SecurityUtils.getUnitId());
+ query.setStart(DateUtils.getDayStart(query.getStart()));
+ query.setEnd(DateUtils.getDayEnd(query.getEnd()));
baseMapper.page(page, query);
- if (! CollectionUtils.isEmpty(page.getRecords())) {
+ if (!CollectionUtils.isEmpty(page.getRecords())) {
page.getRecords().stream().forEach(item -> {
if (StringUtils.hasText(item.getErrorType())) {
item.setErrorTypeList(List.of(item.getErrorType().split(",")));
@@ -491,14 +542,14 @@
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‘鐨勫揩閫熶笅鍙戞柟寮�");
}
@@ -515,8 +566,12 @@
List<String> workOrderNoList = list.stream().map(WorkOrder::getWorkOrderNo).toList();
List<String> serialNumberList = list.stream().map(WorkOrder::getSerialNumber).toList();
- if (workOrderNoList.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)
@@ -537,7 +592,9 @@
@Transactional
public Result selectedIdsDistribute(DistributeWorkOrderQuery query) {
WorkOrderDistributeWayEnum distributeWayEnum = WorkOrderDistributeWayEnum.SELECTED_DISTRIBUTE;
- if (!getDistributeLock()) { return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); }
+ if (!getDistributeLock()) {
+ return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�");
+ }
try {
if (query.getWorkOrderNOList().isEmpty()) {
query.setWorkOrderNOList(new LambdaQueryChainWrapper<>(baseMapper)
@@ -550,7 +607,9 @@
.collect(Collectors.toList()));
distributeWayEnum = WorkOrderDistributeWayEnum.ALL_DISTRIBUTE;
}
- if (query.getWorkOrderNOList().isEmpty()) { return Result.error("娌℃湁宸ュ崟寰呬笅鍙�"); }
+ if (query.getWorkOrderNOList().isEmpty()) {
+ return Result.error("娌℃湁宸ュ崟寰呬笅鍙�");
+ }
new LambdaUpdateChainWrapper<>(baseMapper)
.set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED)
.in(WorkOrder::getWorkOrderNo, query.getWorkOrderNOList())
@@ -569,6 +628,7 @@
/**
* 鐢宠宸ュ崟涓嬪彂閿�
+ *
* @return 宸ュ崟涓嬪彂閿佺敵璇风粨鏋�
*/
public synchronized Boolean getDistributeLock() {
@@ -589,6 +649,7 @@
/**
* 娣诲姞宸ュ崟涓嬪彂璁板綍
+ *
* @param workOrderNoList 宸ュ崟id
*/
private void addDistributeRecord(List<String> workOrderNoList, WorkOrderDistributeWayEnum distributeWay) {
@@ -602,6 +663,7 @@
/**
* 鏍规嵁id鏌ユ壘
+ *
* @param id
* @return
*/
@@ -616,6 +678,7 @@
/**
* 鍒楄〃
+ *
* @return
*/
@Override
@@ -665,7 +728,25 @@
@Override
public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) {
- return baseMapper.workOrderRegion(dashboardQuery);
+ //鍒濆鍖栨墍鏈夊尯鍩熸暟鎹�
+ 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;
}
@@ -822,7 +903,7 @@
if (Objects.nonNull(beforeRecord)) {
if (now.before(beforeRecord.getBeginCreateTime())) {
process.setBeforeReportMsg("浜嬪墠鎶ュ宸插け鏁�");
- } else if (now.after(beforeRecord.getEndCreateTime())){
+ } else if (now.after(beforeRecord.getEndCreateTime())) {
process.setBeforeReportMsg("浜嬪墠鎶ュ鏈敓鏁�");
} else {
process.setBeforeReportMsg("宸蹭簨鍓嶆姤澶�");
@@ -831,7 +912,7 @@
if (Objects.nonNull(afterRecord)) {
if (now.before(afterRecord.getBeginCreateTime())) {
process.setAfterReportMsg("浜嬪悗鎶ュ宸插け鏁�");
- } else if (now.after(afterRecord.getEndCreateTime())){
+ } else if (now.after(afterRecord.getEndCreateTime())) {
process.setAfterReportMsg("浜嬪悗鎶ュ鏈敓鏁�");
} else {
process.setAfterReportMsg("宸蹭簨鍚庢姤澶�");
--
Gitblit v1.8.0