From e9af9f5cfeddbe5c0b33a3060b8ea6364c51e744 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 15 十一月 2024 11:37:10 +0800 Subject: [PATCH] 白名单故障类型 --- ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 235 ++++++++++++++++++++-------------------------------------- 1 files changed, 83 insertions(+), 152 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 1657856..96e8e1b 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,5 +1,8 @@ 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; @@ -12,7 +15,9 @@ 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.*; @@ -40,6 +45,7 @@ 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; @@ -61,10 +67,13 @@ 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.*; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -86,10 +95,10 @@ private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper; private final WorkOrderErrorTypeServiceImpl workOrderErrorTypeService; private final WorkOrderErrorTypeMapper workOrderErrorTypeMapper; + private final WorkOrderWhiteMapper workOrderWhiteMapper; private final SysConfigMapper configMapper; 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}") @@ -109,19 +118,12 @@ } @Transactional(rollbackFor = Exception.class) - public Boolean batchAddWorkOrder(List<WorkOrder> workOrderList){ + public Boolean batchAddWorkOrder(List<WorkOrder> workOrderList) { int total = workOrderList.size(); - // 鏌ヨ鍑虹櫧鍚嶅崟鍒楄〃 - 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( @@ -129,6 +131,12 @@ p -> p, (existing, replacement) -> existing // 鍐茬獊鏃朵繚鐣欑涓�涓� )).values().stream().collect(Collectors.toList()); + //妫�鏌ョ櫧鍚嶅崟 + workOrderList = checkWhite(workOrderList); + + if (CollectionUtils.isEmpty(workOrderList)) { + return Boolean.TRUE; + } List<String> serialNumberList = workOrderList.stream().map(WorkOrder::getSerialNumber).collect(Collectors.toList()); // 鏌ュ嚭鏁版嵁搴撲腑鍥芥爣鐮佸搴旂殑鏈畬鎴愮殑宸ュ崟 List<WorkOrder> inDatabaseWorkOrderList = baseMapper.getNotFinishedWorkOrders(serialNumberList); @@ -171,7 +179,7 @@ } } //閬垮厤浠d笅鍙戠殑宸ュ崟鐩存帴鍙樻垚涓嬪彂 - if(!databaseWorkOrder.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) { + if (!databaseWorkOrder.getStatus().equals(WorkOrderStatusEnum.WAIT_DISTRIBUTE)) { databaseWorkOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED); } databaseWorkOrder.setUpdateTime(now); @@ -282,7 +290,7 @@ workOrderErrorType.setErrorName(errorType); waitAddErrorTypeList.add(workOrderErrorType); } - log.info("鍗冲皢鐢熸垚鐨勫伐鍗�:{}",workOrder); + log.info("鍗冲皢鐢熸垚鐨勫伐鍗�:{}", workOrder); } redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum); redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId); @@ -311,6 +319,8 @@ log.info("浼犲叆宸ュ崟鎬绘暟: {}锛屽疄闄呮坊鍔犲伐鍗曟暟锛歿}, 瀹為檯淇敼宸ュ崟鏁帮細{}", total, waitAddList.size(), updateNum); return Boolean.TRUE; } + + /** * 娣诲姞 * @@ -319,6 +329,16 @@ */ @Override public Result add(WorkOrderForm form) { + //妫�鏌ョ櫧鍚嶅崟 + 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攣 @@ -334,28 +354,22 @@ } else { return Result.error("宸ュ崟姝e湪娣诲姞锛岃绋嶅悗鍐嶈瘯"); } - 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("娣诲姞澶辫触"); + + 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("娣诲姞澶辫触"); } + /** * 淇敼 @@ -488,7 +502,7 @@ // 鍥芥爣璁惧鐨勭紪鐮佸氨鏄彇瑙嗛娴佺殑璁惧缂栫爜锛屽浗鏍囪澶囧氨涓�涓�傚浗鏍囪澶囩殑姣忎竴涓�氶亾浠h〃涓�涓憚鍍忓ご锛屼篃灏辨槸璁惧id鏄彇娴佺殑閫氶亾id String frameImg = null; try { - log.info("鍥芥爣骞冲彴:{},璁惧缂栫爜:{},宸ュ崟鍙�:{}",gbDevices.get(0).getDeviceId(), workOrder.getSerialNumber(), workOrder.getWorkOrderNo()); + 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(); @@ -501,11 +515,12 @@ workOrderCheckImgMapper.insert(img); } } + @Override public List<WorkOrderYwConditionRecordVO> selectYwConditionByYwId(String workOrderNo) { List<WorkOrderYwConditionRecordVO> ywConditionList = workOrderYwConditionRecordMapper.selectYwConditionByYwId(workOrderNo); ywConditionList.stream().forEach(item -> { - if(item.getUserId().equals(1)){ + if (item.getUserId().equals(1)) { item.setUnitName("绠$悊鍛�"); } if (Objects.nonNull(item.getSysMsg()) && item.getSysMsg()) { @@ -583,11 +598,11 @@ @Override public Result page(WorkOrderQuery query) { IPage<WorkOrderVO> page = PageUtil.getPage(query, WorkOrderVO.class); - if(query.getUnitId()==null) { + 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())); + 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 -> { @@ -616,8 +631,8 @@ @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())); + 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()); } @@ -845,11 +860,11 @@ @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); + log.info("璁块棶璺緞{}", url); String result = HttpUtils.sendGet(url); log.info("鎷垮埌鍙栨祦鍥剧墖鍝嶅簲缁撴灉锛�" + result); WVPResult wvpResult = JSON.parseObject(result, WVPResult.class); - if(wvpResult.getCode() == 0) { + if (wvpResult.getCode() == 0) { Object imgUrl = (Object) wvpResult.getData(); imgUrl = Objects.isNull(imgUrl) ? "" : imgUrl; log.info("鎷垮埌鍙栨祦鍥剧墖锛�" + imgUrl); @@ -906,7 +921,7 @@ } @Override - public void saveFrameImgByDevice (String deviceId, String channelId, String workOrderNo){ + 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); @@ -967,13 +982,13 @@ } @Override - public List<DeviceInfoVO> hasErrorWorkOrderList (Date start, Date end){ + 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::getYwCheckResult, imgPath) @@ -981,7 +996,7 @@ } @Override - public Result processImg (String workOrderNo){ + public Result processImg(String workOrderNo) { WorkOrder workOrder = new LambdaQueryChainWrapper<>(baseMapper) .eq(WorkOrder::getWorkOrderNo, workOrderNo) .one(); @@ -1022,7 +1037,7 @@ } @Override - public Result detailByNo (String workOrderNo){ + public Result detailByNo(String workOrderNo) { WorkOrderDetailVO workOrder = baseMapper.detailByNo(workOrderNo); // 鏄惁鎶ュ boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper) @@ -1044,8 +1059,8 @@ } @Override - public List<WorkOrderVO> export (WorkOrderExportQuery query){ - if(query.getUnitId()==null) { + 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"); @@ -1055,107 +1070,13 @@ } /** - * 宸ュ崟鐧藉悕鍗曞垪琛� - * - * @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); - List<WorkOrderWhite> records = page.getRecords(); - records.forEach(white-> { - List<String> errorTextList = new ArrayList<>(); - List<String> errorTypeList = JSONArray.parseArray(white.getErrorType(), String.class); - errorTypeList.forEach(error->{ - String errorText = ErrorType.getDescriptionByValue(error); - errorTextList.add(errorText); - }); - white.setErrorType(String.join(",", errorTextList)); - }); - return Result.ok().data(records).total(page.getTotal()); - } - - /** - * 娣诲姞宸ュ崟鐧藉悕鍗� - * - * @param workOrderWhite 鐧借壊宸ュ崟 - * @return {@link Result } - * @author - */ - @Override - public Result addWorkOrderWhite(WorkOrderWhite workOrderWhite) { - // 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦ㄨ鐧藉悕鍗� - WorkOrderWhite flag = workOrderWhiteMapper.selectBySerialNumber(workOrderWhite.getSerialNumber()); - if (flag != null) { - return Result.error("璇ヨ澶囧凡瀛樺湪鐧藉悕鍗�"); - } else { - List<String> errorTypeList = workOrderWhite.getErrorTypeList(); - workOrderWhite.setErrorType(JSONArray.toJSONString(errorTypeList)); - workOrderWhite.setCreateBy(SecurityUtils.getUsername()); - workOrderWhiteMapper.insert(workOrderWhite); - return Result.ok(); - } - } - /** - * 淇敼宸ュ崟鐧藉悕鍗� - * - * @param workOrderWhite 鐧借壊宸ュ崟 - * @return {@link Result } - * @author - */ - @Override - public Result updateWorkOrderWhite(WorkOrderWhite workOrderWhite) { - WorkOrderWhite white = workOrderWhiteMapper.selectBySerialNumber(workOrderWhite.getSerialNumber()); - workOrderWhite.setId(white.getId()); - List<String> errorTypeList = workOrderWhite.getErrorTypeList(); - workOrderWhite.setErrorType(JSONArray.toJSONString(errorTypeList)); - workOrderWhiteMapper.updateById(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) { + public Result checkImage(String workOrderNo, String serialNumber) { // 鏌ュ嚭鍥芥爣璁惧锛屽氨涓�鏉℃暟鎹� List<DeviceInfo> gbDevices = new LambdaQueryChainWrapper<>(deviceInfoMapper) .orderByDesc(DeviceInfo::getUpdateTime) @@ -1163,7 +1084,7 @@ .list(); if (!CollectionUtils.isEmpty(gbDevices)) { try { - String imgUrl = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), serialNumber,workOrderNo); + String imgUrl = this.getFrameImgByDevice(gbDevices.get(0).getDeviceId(), serialNumber, workOrderNo); if (StringUtils.hasText(imgUrl)) { WorkOrderCheckImg img = new WorkOrderCheckImg(); img.setWorkOrderNo(workOrderNo); @@ -1182,7 +1103,7 @@ @Override @Transactional(rollbackFor = Exception.class) public Result batchDeleteWorkOrder(List<String> workOrderNos) { - if(!CollectionUtils.isEmpty(workOrderNos)) { + if (!CollectionUtils.isEmpty(workOrderNos)) { //鍒犻櫎宸ュ崟瀹℃牳璁板綍 workOrderAuditingRecordMapper.delete(new QueryWrapper<WorkOrderAuditingRecord>().in("work_order_no", workOrderNos)); //鍒犻櫎宸ュ崟鍥剧墖璁板綍 @@ -1248,12 +1169,22 @@ return Result.ok().data(results); } - @Override - public Result selectWorkOrderWhiteDetail(Integer id) { - WorkOrderWhite workOrderWhite = workOrderWhiteMapper.getById(id); - List<String> errorList = JSONArray.parseArray(workOrderWhite.getErrorType(), String.class); - workOrderWhite.setErrorTypeList(errorList); - return Result.ok().data(workOrderWhite); + //鐧藉悕鍗曟牎楠� + private List<WorkOrder> checkWhite(List<WorkOrder> workOrderList) { + // 鏌ヨ鍑虹櫧鍚嶅崟鍒楄〃 + Map<String, WorkOrderWhite> whiteMap = workOrderWhiteMapper.selectList().stream().collect(Collectors.toMap(WorkOrderWhite::getSerialNumber, Function.identity())); + workOrderList = workOrderList.stream() + .filter(workOrder -> { + List<String> errorTypeList = workOrder.getErrorTypeList(); + WorkOrderWhite white = whiteMap.get(workOrder.getSerialNumber()); + if (white != null) { + List<String> whiteErrorListSet = Arrays.asList(white.getErrorType().split(",")); + errorTypeList.removeIf(whiteErrorListSet::contains); + } + return !errorTypeList.isEmpty(); // 鍙繚鐣� errorTypeList 闈炵┖鐨� WorkOrder + }) + .collect(Collectors.toList()); + return workOrderList; } -- Gitblit v1.8.0