From db75b45e9a7ce347162b8d3a36e4a7f46cfe199e Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期一, 10 二月 2025 15:30:18 +0800 Subject: [PATCH] 核算导出单独对录像扣分的数量做处理 --- ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 276 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 236 insertions(+), 40 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..8a08b68 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 @@ -13,6 +13,7 @@ import com.ycl.platform.domain.entity.*; import com.ycl.platform.domain.form.*; import com.ycl.platform.domain.query.*; +import com.ycl.platform.domain.result.SYS.TMonitorResult; import com.ycl.platform.domain.vo.*; import com.ycl.platform.domain.vo.screen.ScreenWorkOrderVO; import com.ycl.platform.domain.vo.screen.WorkOrderRegionVO; @@ -34,6 +35,7 @@ import com.ycl.utils.http.HttpUtils; import com.ycl.utils.redis.RedisCache; import com.ycl.utils.uuid.IdUtils; +import constant.ApiConstants; import constant.Constants; import constant.RedisConstant; import enumeration.ErrorType; @@ -78,6 +80,9 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService { private final YwPointService ywPointService; + private final YwPointMapper ywPointMapper; + private final TMonitorMapper monitorMapper; + private final DynamicColumnMapper dynamicColumnMapper; private final WorkOrderAuditingRecordMapper workOrderAuditingRecordMapper; private final WorkOrderAuditingRecordService workOrderAuditingRecordService; private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper; @@ -171,18 +176,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()); @@ -211,7 +216,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) @@ -319,46 +324,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("娣诲姞澶辫触"); } @@ -404,10 +472,25 @@ UrgentLevelEnum.WARNING, workOrder.getWorkOrderNo()); notifyService.save(notify); + List<WorkOrderVO> workOrderVOS = workOrderErrorTypeMapper.getErrorListByNumbers(Arrays.asList(workOrder.getWorkOrderNo())); + // 鍚屾鐐逛綅鐘舵�� if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) { ywPointService.updateRecovery(Collections.singletonList(workOrder.getSerialNumber()), 0); + //濡傛灉宸ュ崟涓虹绾垮伐鍗曢偅涔堜慨鏀圭偣浣峱ingOnline涓哄湪绾� + if (!CollectionUtils.isEmpty(workOrderVOS)) { + List<String> ips = new ArrayList<>(); + for (WorkOrderVO workOrderVO : workOrderVOS) { + if(ErrorType.DEVICE_OFFLINE.getValue().equals(workOrderVO.getErrorType())){ + ips.add(workOrderVO.getIp()); + } + } + if(!CollectionUtils.isEmpty(ips)) { + monitorMapper.batchUpdateOnline(ips, new Date(), ApiConstants.UY_OnlineSite_Online); + } + } } + return Result.ok("鎿嶄綔鎴愬姛"); } @@ -447,11 +530,30 @@ workOrder.getWorkOrderNo()); notifies.add(notify); } + notifyService.saveBatch(notifies); // 鍚屾鐐逛綅鐘舵�� if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) { ywPointService.updateRecovery(serialNumbers, 0); + //绛涢�夊嚭绂荤嚎宸ュ崟ip骞朵慨鏀瑰湪绾跨姸鎬� + if (!CollectionUtils.isEmpty(serialNumbers)) { + Map<String, List<String>> errorTypes = workOrderErrorTypeMapper.getErrorListByNumbers(workOrderNoList).stream().collect(Collectors.groupingBy( + WorkOrderVO::getIp, + Collectors.mapping( + WorkOrderVO::getErrorType, + Collectors.toList() + ) + )); + List<String> ips = new ArrayList<>(); + errorTypes.forEach((key, value) -> { + if (!CollectionUtils.isEmpty(value) && value.contains(ErrorType.DEVICE_OFFLINE.getValue())) { + ips.add(key); + } + }); + if(!CollectionUtils.isEmpty(ips)) { + monitorMapper.batchUpdateOnline(ips, new Date(), ApiConstants.UY_OnlineSite_Online); + } + } } - notifyService.saveBatch(notifies); return Result.ok("鎿嶄綔鎴愬姛"); } @@ -594,6 +696,20 @@ } if (query.getStart() != null) query.setStart(DateUtils.getDayStart(query.getStart())); if (query.getEnd() != null) query.setEnd(DateUtils.getDayEnd(query.getEnd())); + if (query.getErrorType() != null) { + List<String> errorTypeList = new ArrayList<>(); + errorTypeList.add(query.getErrorType()); + if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) { + //List娣诲姞涔嬪墠鍑犵宸ュ崟绫诲瀷 + errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue()); + errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue()); + errorTypeList.add(ErrorType.SNOW_STORM.getValue()); + errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue()); + errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue()); + errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue()); + } + query.setErrorTypeList(errorTypeList); + } baseMapper.page(page, query); if (!CollectionUtils.isEmpty(page.getRecords())) { page.getRecords().stream().forEach(item -> { @@ -1050,6 +1166,13 @@ return Result.ok().data(workOrder); } + /** + * 宸ュ崟瀵煎嚭鐨勯�昏緫 + * 鏍囩锛氬悓涓�涓猧p鏍囩鍚堝湪涓�璧凤紝閽堝绂荤嚎宸ュ崟锛坕p鐩稿悓灏变笉浼氱敓鎴愬伐鍗曪級锛屾柟渚胯繍缁村鐞� + * + * @param query + * @return + */ @Override public List<WorkOrderVO> export(WorkOrderExportQuery query) { if (query.getUnitId() == null) { @@ -1057,8 +1180,81 @@ } 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); + if (query.getErrorType() != null) { + List<String> errorTypeList = new ArrayList<>(); + errorTypeList.add(query.getErrorType()); + if (ErrorType.ABNORMAL_PIC.getValue().equals(query.getErrorType())) { + //List娣诲姞涔嬪墠鍑犵宸ュ崟绫诲瀷 + errorTypeList.add(ErrorType.SIGNAL_LOSS.getValue()); + errorTypeList.add(ErrorType.SCREEN_COLOR_DEVIATION.getValue()); + errorTypeList.add(ErrorType.SNOW_STORM.getValue()); + errorTypeList.add(ErrorType.STRIPE_INTERFERENCE.getValue()); + errorTypeList.add(ErrorType.SCREEN_OCCLUSION.getValue()); + errorTypeList.add(ErrorType.ABNORMAL_CLARITY.getValue()); + } + query.setErrorTypeList(errorTypeList); + } + List<WorkOrderVO> export = baseMapper.export(query); + if (CollectionUtils.isEmpty(export)) return new ArrayList<WorkOrderVO>(); + List<String> ips = export.stream().map(WorkOrderVO::getIp).collect(Collectors.toList()); + //鏌ュ嚭鐩稿悓ip鐨勮澶囥�佸苟鏌ュ嚭鏍囩 + List<TMonitorResult> monitorVOS = monitorMapper.getByIp(ips); + //鑾峰彇鍔ㄦ�佸垪鏁版嵁 + List<Integer> pointIds = monitorVOS.stream().map(TMonitorResult::getPointId).collect(Collectors.toList()); + List<DynamicColumnVO> dynamics = dynamicColumnMapper.getDynamicsByIds("t_yw_point", pointIds); + //琛ュ厖鍔ㄦ�佸垪鏁版嵁 + if (!CollectionUtils.isEmpty(dynamics)) { + Map<Integer, List<DynamicColumnVO>> map = dynamics.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefId)); + for (TMonitorResult tMonitorResult : monitorVOS) { + Integer pointId = tMonitorResult.getPointId(); + tMonitorResult.setDynamicColumnList(map.get(pointId)); + } + } + export.forEach(result -> { + StringBuilder dynamicTag = new StringBuilder(""); + Boolean provinceTagVideo = false; + Boolean provinceTagCar = false; + Boolean provinceTagFace = false; + Boolean importantTag = false; + Boolean importantCommandImageTag = false; + Boolean deptTag = false; + List<String> dynamicTags = new ArrayList<>(); + for (TMonitorResult tagVO : monitorVOS) { + //鐪佸巺鏍囩閫氳繃ip鍒ゆ柇 (杩愮淮瑕佹眰) + if (tagVO.getIp().equals(result.getIp())) { + if (tagVO.getProvinceTagVideo()) provinceTagVideo = true; + if (tagVO.getProvinceTagCar()) provinceTagCar = true; + if (tagVO.getProvinceTagFace()) provinceTagFace = true; + if (tagVO.getImportantTag()) importantTag = true; + if (tagVO.getImportantCommandImageTag()) importantCommandImageTag = true; + if (tagVO.getDeptTag()) deptTag = true; + } + //鍔ㄦ�佸垪鏍规嵁鍥芥爣鍒ゆ柇 + if (tagVO.getNo().equals(result.getSerialNumber())) { + //鍔ㄦ�佸垪澶勭悊鍔犲湪鏍囩閲� + if (!CollectionUtils.isEmpty(tagVO.getDynamicColumnList())) { + List<DynamicColumnVO> dynamicColumnList = tagVO.getDynamicColumnList(); + for (DynamicColumnVO dynamicColumnVO : dynamicColumnList) { + if (!dynamicTags.contains(dynamicColumnVO.getColumnValue())) + dynamicTags.add(dynamicColumnVO.getColumnValue()); + } + } + } + } + for (String tag : dynamicTags) { + dynamicTag.append(tag).append("銆�"); + } + StringBuilder tag = new StringBuilder("" + (provinceTagVideo ? "鐪佸巺瑙嗛銆�" : "") + (provinceTagCar ? "鐪佸巺杞﹁締銆�" : "") + (provinceTagFace ? "鐪佸巺浜鸿劯銆�" : "") + (importantTag ? "閲嶇偣鐐逛綅銆�" : "") + (importantCommandImageTag ? "閲嶇偣鎸囨尌鍥惧儚銆�" : "") + (deptTag ? "閮ㄧ骇銆�" : "")); + if (tag.toString().endsWith("銆�")) { + tag = new StringBuilder(tag.substring(0, tag.length() - 1)); + } + if (dynamicTag.toString().endsWith("銆�")) { + dynamicTag = new StringBuilder(dynamicTag.substring(0, dynamicTag.length() - 1)); + } + result.setTag(tag.toString()); + result.setDynamicTag(dynamicTag.toString()); + }); + return export; } /** -- Gitblit v1.8.0