From 685ba1842974c0a406449e5579c66d6c5a3510e3 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期二, 19 十一月 2024 22:26:02 +0800
Subject: [PATCH] 避免下发页面的新增导致的重复工单
---
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 135 +++++++++++++++++++++++++++++++++------------
1 files changed, 99 insertions(+), 36 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 b4f26fc..dd618ac 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
@@ -171,18 +171,18 @@
//閬垮厤浠d笅鍙戠殑宸ュ崟鐩存帴鍙樻垚涓嬪彂
if (!databaseWorkOrder.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) {
databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+ // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣
+ WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord();
+ ywRecord.setWorkOrderNo(databaseWorkOrder.getWorkOrderNo());
+ ywRecord.setCommitUser(1);
+ ywRecord.setYwCondition("鏁呴殰绫诲瀷鏇存柊锛屽伐鍗曠姸鎬佽皟鏁翠负寰呭鐞�");
+ ywRecord.setCreateTime(new Date());
+ ywRecord.setSysMsg(Boolean.TRUE);
+ willAddMsg.add(ywRecord);
}
databaseWorkOrder.setUpdateTime(now);
willUpdateStatusWorkOrderList.add(databaseWorkOrder);
updateNum++;
- // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣
- 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());
@@ -319,46 +319,109 @@
*/
@Override
public Result add(WorkOrderForm form) {
- //TODO锛氬悓涓浗鏍囧伐鍗曞鍔犳晠闅滅被鍨�
//妫�鏌ョ櫧鍚嶅崟
List<WorkOrder> data = new ArrayList<>();
WorkOrder workOrder = WorkOrderForm.getEntityByForm(form, null);
data.add(workOrder);
+ //鏍¢獙鐧藉悕鍗曞苟鎺掗櫎鍦ㄧ櫧鍚嶅崟鐨勬晠闅滅被鍨�
data = checkWhite(data);
if (CollectionUtils.isEmpty(data)) {
return Result.error("璇ヨ澶囩殑鏁呴殰绫诲瀷鍦ㄧ櫧鍚嶅崟涓紝涓嶈兘娣诲姞宸ュ崟");
}
WorkOrder entity = data.get(0);
-
- //鏌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湪娣诲姞锛岃绋嶅悗鍐嶈瘯");
- }
-
- entity.setCreateTime(DateUtils.getNowDate());
- entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
+ String serialNumber = entity.getSerialNumber();
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) {
+ List<WorkOrder> inDatabaseWorkOrderList = baseMapper.getNotFinishedWorkOrders(Arrays.asList(serialNumber));
+ inDatabaseWorkOrderList.stream().forEach(item -> {
+ if (StringUtils.hasText(item.getErrorType())) {
+ item.setErrorTypeList(List.of(item.getErrorType().split(",")));
+ } else {
+ item.setErrorTypeList(new ArrayList<>(1));
+ }
+ });
+ // 鍥犳晠闅滅被鍨嬩笉涓�鑷磋�岃鏇存柊鐘舵�佺殑宸ュ崟
+ List<WorkOrder> willUpdateStatusWorkOrderList = new ArrayList<>(48);
+ // 鏇存敼宸ュ崟绫诲瀷鑰岃澧炲姞鐨勭郴缁熻繍缁村鐞嗕俊鎭�
+ List<WorkOrderYwConditionRecord> willAddMsg = new ArrayList<>(48);
+ // 鍗冲皢瑕佹坊鍔犵殑閿欒绫诲瀷
+ List<WorkOrderErrorType> willAddErrorType = new ArrayList<>(96);
+ if(!CollectionUtils.isEmpty(inDatabaseWorkOrderList)){
+ WorkOrder workOrderInDB = inDatabaseWorkOrderList.get(0);
+ List<String> errorNameList = workOrderInDB.getErrorTypeList();
+ List<String> errorTypes = entity.getErrorTypeList();
+ if(errorNameList.containsAll(errorTypes)){
+ return Result.error("宸叉湁鍚岀鏁呴殰绫诲瀷宸ュ崟");
+ }else {
+ for (String errorType : errorTypes) {
+ if(!errorNameList.contains(errorType)){
+ // 閿欒绫诲瀷涓嶄竴鏍凤紝灏辨柊澧炰竴涓敊璇被鍨嬶紝骞朵笖閲嶇疆宸ュ崟鐘舵�佷负寰呭鐞�
+ WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType();
+ workOrderErrorType.setWorkOrderNo(workOrderInDB.getWorkOrderNo());
+ workOrderErrorType.setCreateTime(now);
+ workOrderErrorType.setUpdateTime(now);
+ workOrderErrorType.setErrorName(errorType);
+ willAddErrorType.add(workOrderErrorType);
+ }
+ }
+ //閬垮厤浠d笅鍙戠殑宸ュ崟鐩存帴鍙樻垚涓嬪彂
+ if (!workOrderInDB.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) {
+ workOrderInDB.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+ // 鍚屾椂鏂板涓�涓繍缁村鐞嗕俊鎭紝琛ㄦ槑姝ゅ伐鍗曡璋冩暣
+ WorkOrderYwConditionRecord ywRecord = new WorkOrderYwConditionRecord();
+ ywRecord.setWorkOrderNo(workOrderInDB.getWorkOrderNo());
+ ywRecord.setCommitUser(1);
+ ywRecord.setYwCondition("鏁呴殰绫诲瀷鏇存柊锛屽伐鍗曠姸鎬佽皟鏁翠负寰呭鐞�");
+ ywRecord.setCreateTime(new Date());
+ ywRecord.setSysMsg(Boolean.TRUE);
+ willAddMsg.add(ywRecord);
+ }
+ workOrderInDB.setUpdateTime(now);
+ willUpdateStatusWorkOrderList.add(workOrderInDB);
+ //淇敼鏁呴殰绫诲瀷
+ if (willAddErrorType.size() > 0) {
+ workOrderErrorTypeService.getBaseMapper().addMany(willAddErrorType);
+ }
+ //澧炲姞杩愮淮鎯呭喌
+ if (willAddMsg.size() > 0) {
+ workOrderYwConditionRecordMapper.insertMany(willAddMsg);
+ }
+ //鏇存敼宸ュ崟鐘舵��
+ if (willUpdateStatusWorkOrderList.size() > 0) {
+ this.baseMapper.updateMany(willUpdateStatusWorkOrderList);
+ }
+ }
return Result.ok("娣诲姞鎴愬姛");
+ }else {
+ //鏁版嵁搴撴病鏈夋鍦ㄨ繘琛岀殑宸ュ崟
+ //鏌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湪娣诲姞锛岃绋嶅悗鍐嶈瘯");
+ }
+ entity.setCreateTime(DateUtils.getNowDate());
+ entity.setStatus(WorkOrderStatusEnum.WAIT_DISTRIBUTE);
+ 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("娣诲姞鎴愬姛");
+ }else {
+ return Result.error("娣诲姞澶辫触");
+ }
}
- return Result.error("娣诲姞澶辫触");
}
--
Gitblit v1.8.0