From 040fe24077c6a57fd0b337fd41cec00d9125eb0e Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期四, 12 十二月 2024 00:58:52 +0800 Subject: [PATCH] 一机一档OSD优化 --- ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 147 +++++++++++++++++++++++++++++++++--------------- 1 files changed, 101 insertions(+), 46 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 96e8e1b..9fe4dc9 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,10 +1,6 @@ package com.ycl.platform.service.impl; -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.ExcelWriter; -import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -15,9 +11,6 @@ import com.ycl.config.PlatformConfig; import com.ycl.exception.ServiceException; import com.ycl.platform.domain.entity.*; -import com.ycl.platform.domain.excel.ErrorExport; -import com.ycl.platform.domain.excel.PointExport; -import com.ycl.platform.domain.excel.WorkOrderWhiteExport; import com.ycl.platform.domain.form.*; import com.ycl.platform.domain.query.*; import com.ycl.platform.domain.vo.*; @@ -45,7 +38,6 @@ import constant.RedisConstant; import enumeration.ErrorType; import enumeration.general.*; -import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -67,8 +59,6 @@ import org.springframework.util.StringUtils; import pojo.CascadeOption; -import java.io.IOException; -import java.io.OutputStream; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; @@ -181,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()); @@ -221,7 +211,7 @@ 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) + .select(YwPoint::getUnitId, YwPoint::getSerialNumber, YwPoint::getImportantTag, YwPoint::getImportantTag, YwPoint::getImportantCommandImageTag) .in(YwPoint::getSerialNumber, willAddSerialNumber) .eq(YwPoint::getExamineStatus, Boolean.TRUE) .isNotNull(YwPoint::getUnitId) @@ -333,41 +323,105 @@ 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("娣诲姞澶辫触"); } @@ -702,6 +756,7 @@ return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); } try { + //杩欐槸鍏ㄩ儴涓嬪彂 if (query.getWorkOrderNOList().isEmpty()) { query.setWorkOrderNOList(new LambdaQueryChainWrapper<>(baseMapper) .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) -- Gitblit v1.8.0