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/YwThresholdServiceImpl.java | 309 +++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 294 insertions(+), 15 deletions(-)
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
index 8728731..bf9cd3d 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwThresholdServiceImpl.java
@@ -1,17 +1,34 @@
package com.ycl.platform.service.impl;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.dataListener.CurrencyDataListener;
import com.ycl.platform.domain.entity.WorkOrder;
+import com.ycl.platform.domain.entity.WorkOrderWhite;
+import com.ycl.platform.domain.entity.YwPoint;
import com.ycl.platform.domain.entity.YwThreshold;
+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.query.WorkOrderWhiteQuery;
import com.ycl.platform.domain.result.HK.FaceDeviceInspectionResult;
import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult;
import com.ycl.platform.domain.vo.DynamicColumnVO;
+import com.ycl.platform.mapper.WorkOrderWhiteMapper;
import com.ycl.platform.mapper.YwThresholdMapper;
import com.ycl.platform.service.IYwThresholdService;
import com.ycl.platform.service.WorkOrderService;
import com.ycl.system.Result;
+import com.ycl.system.page.PageUtil;
+import com.ycl.utils.SecurityUtils;
+import com.ycl.utils.StringUtils;
import com.ycl.utils.ip.PingUtil;
import com.ycl.utils.poi.EasyExcelImportUtils;
import com.ycl.utils.uuid.IdUtils;
@@ -21,14 +38,20 @@
import enumeration.ErrorType;
import enumeration.general.BusinessTypeEnum;
import enumeration.general.WorkOrderStatusEnum;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import utils.DateUtils;
+import java.io.IOException;
+import java.io.OutputStream;
import java.util.*;
+import java.util.concurrent.ExecutionException;
+import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -47,6 +70,8 @@
@Autowired
private WorkOrderService workOrderService;
+ @Autowired
+ private WorkOrderWhiteMapper workOrderWhiteMapper;
/**
* 鏌ヨ杩愮淮闃堝��
*
@@ -151,21 +176,6 @@
// 娓呮櫚搴﹀紓甯告娴�
// 浜害寮傚父鏁呴殰妫�娴�
- }
-
- @Override
- public Result importData(MultipartFile file) {
- List<Map<String, String>> list = EasyExcelImportUtils.makeData(file);
- List<PointExport> dataList = new ArrayList<>();
- for (Map<String, String> map : list) {
- PointExport pointExport = new PointExport();
- pointExport.setPointName(map.get(PointHeaderConstant.Point_Name));
- pointExport.setSerialNumber(map.get(PointHeaderConstant.Serial_Number));
- dataList.add(pointExport);
- }
- workOrderService.batchImportWhite(dataList);
- return Result.ok("瀵煎叆鎴愬姛");
-
}
/**
@@ -305,6 +315,264 @@
}
/**
+ * 鐧藉悕鍗曡鎯�
+ * @param id
+ * @return
+ */
+ @Override
+ public Result selectWorkOrderWhiteDetail(Integer id) {
+ WorkOrderWhite workOrderWhite = workOrderWhiteMapper.getById(id);
+ List<String> errorTypeList = Arrays.asList(workOrderWhite.getErrorType().split(","));
+ workOrderWhite.setErrorTypeList(errorTypeList);
+ return Result.ok().data(workOrderWhite);
+ }
+ /**
+ * 宸ュ崟鐧藉悕鍗曞垪琛�
+ *
+ * @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 = Arrays.asList(white.getErrorType().split(","));
+ 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(String.join(",",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(String.join(",",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 response
+ * @throws IOException
+ */
+ @Override
+ public void whiteExport(HttpServletResponse response) throws IOException {
+ //鐧藉悕鍗曟暟鎹�
+ List<WorkOrderWhiteExport> data = workOrderWhiteMapper.whiteExport();
+ data.forEach(white-> {
+ List<String> errorTextList = new ArrayList<>();
+ List<String> errorTypeList = Arrays.asList(white.getErrorType().split(","));
+ errorTypeList.forEach(error->{
+ String errorText = ErrorType.getDescriptionByValue(error);
+ errorTextList.add(errorText);
+ });
+ white.setErrorType(String.join(",", errorTextList));
+ });
+ //鏁呴殰绫诲瀷鏁版嵁
+ List<String> errorTextList = ErrorType.getDescriptionList();
+ List<ErrorExport> errorExports = new ArrayList<>();
+ errorTextList.forEach(error -> {
+ ErrorExport errorExport = new ErrorExport();
+ errorExport.setError(error);
+ errorExports.add(errorExport);
+ });
+ ExcelWriter excelWriter = null;
+ try(OutputStream outputStream = response.getOutputStream()) {
+ excelWriter = EasyExcel.write(outputStream).build();
+
+ WriteSheet whiteSheet = EasyExcel.writerSheet(0, "宸ュ崟鐧藉悕鍗曟竻鍗�").head(WorkOrderWhiteExport.class).build();
+ WriteSheet errorSheet = EasyExcel.writerSheet(1, "鏁呴殰绫诲瀷").head(ErrorExport.class).build();
+
+ excelWriter.write(data, whiteSheet);
+ excelWriter.write(errorExports, errorSheet);
+ excelWriter.finish();
+ outputStream.flush();
+ }catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ excelWriter.finish();
+ response.getOutputStream().close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ /**
+ * 瀵煎叆宸ュ崟鐧藉悕鍗�
+ * @param file
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result importWhite(MultipartFile file) throws IOException{
+// Consumer<List<WorkOrderWhiteExport>> consumer = (dataList) -> {
+// try {
+// this.updateWhite(dataList);
+// } catch (ExecutionException e) {
+// e.printStackTrace();
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+// };
+// EasyExcel.read(file.getInputStream(), WorkOrderWhiteExport.class, new CurrencyDataListener(consumer))
+// .sheet()
+// .headRowNumber(1)
+// .doRead();
+ List<WorkOrderWhiteExport> dataList = new ArrayList<>();
+ EasyExcel.read(file.getInputStream(), WorkOrderWhiteExport.class, new AnalysisEventListener<WorkOrderWhiteExport>() {
+ @Override
+ public void invoke(WorkOrderWhiteExport excel, AnalysisContext analysisContext) {
+ // 灏嗚鍙栧埌鐨勬瘡涓�琛屽瓨鍏eportDetails闆嗗悎涓�
+ dataList.add(excel);
+ }
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
+ }).sheet().doRead();
+
+ if (CollectionUtils.isEmpty(dataList)) {
+ throw new RuntimeException("瀵煎叆鏁版嵁涓嶈兘涓虹┖");
+ }
+ boolean duplic = checkDuplic(dataList);
+ if(duplic) throw new RuntimeException("瀛樺湪閲嶅鍥芥爣璁惧");
+ //宸插瓨鍦ㄧ殑鐧藉悕鍗�
+ Map<String, WorkOrderWhite> whiteMap = workOrderWhiteMapper.selectList().stream().collect(Collectors.toMap(WorkOrderWhite::getSerialNumber, Function.identity()));
+ List<WorkOrderWhite> addList = new ArrayList<>();
+ dataList.stream().forEach(item -> {
+ WorkOrderWhite white = new WorkOrderWhite();
+ //鍥芥爣鐮�
+ white.setSerialNumber(item.getSerialNumber());
+ //澶囨敞
+ white.setRemark(item.getRemark());
+ String errorType = item.getErrorType();
+ if(StringUtils.isEmpty(errorType)){
+ throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滀笉鑳戒负绌�");
+ }
+ try {
+ List<String> errorDataList = new ArrayList<>();
+ List<String> errorExcelList = Arrays.asList(item.getErrorType().split(","));
+ errorExcelList.forEach(desc->{
+ //鎶婁腑鏂囪浆鎹负鏁版嵁搴撳瓨鍌ㄦ牸寮�
+ String errorText = ErrorType.getValueByDescription(desc);
+ //鎵句笉鍒版姏鍑哄紓甯�
+ if(errorText == null) throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+ errorDataList.add(errorText);
+ });
+ white.setErrorType(String.join(",", errorDataList));
+ //濡傛灉宸插瓨鍦ㄨˉ鍏卛d
+ WorkOrderWhite whiteExsit = whiteMap.get(white.getSerialNumber());
+ if(whiteExsit!=null) white.setId(whiteExsit.getId());
+ addList.add(white);
+ } catch (Exception e) {
+ throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+ }
+ });
+ if(!CollectionUtils.isEmpty(addList)) {
+ workOrderWhiteMapper.deleteAll();
+ workOrderWhiteMapper.insertBatch(addList);
+ }
+ return Result.ok();
+ }
+ /**
+ * 淇敼鐧藉悕鍗�
+ *
+ * @param dataList
+ * @param unitId
+ */
+ public void updateWhite(List<WorkOrderWhiteExport> dataList) throws ExecutionException, InterruptedException {
+ if (CollectionUtils.isEmpty(dataList)) {
+ throw new RuntimeException("瀵煎叆鏁版嵁涓嶈兘涓虹┖");
+ }
+ //宸插瓨鍦ㄧ殑鐧藉悕鍗�
+ List<String> serialNumbers = workOrderWhiteMapper.selectList().stream().map(WorkOrderWhite::getSerialNumber).collect(Collectors.toList());
+ List<WorkOrderWhite> addList = new ArrayList<>();
+ List<WorkOrderWhite> updateList = new ArrayList<>();
+ dataList.stream().forEach(item -> {
+ WorkOrderWhite white = new WorkOrderWhite();
+ //鍥芥爣鐮�
+ white.setSerialNumber(item.getSerialNumber());
+ //澶囨敞
+ white.setRemark(item.getRemark());
+ String errorType = item.getErrorType();
+ if(StringUtils.isEmpty(errorType)){
+ throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滀笉鑳戒负绌�");
+ }
+ try {
+ List<String> errorDataList = new ArrayList<>();
+ List<String> errorExcelList = Arrays.asList(item.getErrorType().split(","));
+ errorExcelList.forEach(desc->{
+ //鎶婁腑鏂囪浆鎹负鏁版嵁搴撳瓨鍌ㄦ牸寮�
+ String errorText = ErrorType.getValueByDescription(desc);
+ //鎵句笉鍒版姏鍑哄紓甯�
+ if(errorText == null) throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+ errorDataList.add(errorText);
+ });
+ white.setErrorType(String.join(",", errorDataList));
+ if(!CollectionUtils.isEmpty(serialNumbers) && serialNumbers.contains(white.getSerialNumber())){
+ updateList.add(white);
+ }else {
+ addList.add(white);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("鍥芥爣鐮佷负"+item.getSerialNumber()+"鐨勮澶囨晠闅滅被鍨嬫湁璇�");
+ }
+ });
+ if(!CollectionUtils.isEmpty(addList)) workOrderWhiteMapper.insertBatch(addList);
+ if(!CollectionUtils.isEmpty(updateList)) workOrderWhiteMapper.updateBatch(updateList);
+ }
+
+ /**
* 妫�鏌ラ槇鍊�
*
* @param key 鏌愰槇鍊兼爣璇�
@@ -373,4 +641,15 @@
}
}
+ public static boolean checkDuplic(List<WorkOrderWhiteExport> dataList) {
+ Set<String> serialNumbers = new HashSet<>();
+
+ for (WorkOrderWhiteExport white : dataList) {
+ String serialNumber = white.getSerialNumber();
+ if (!serialNumbers.add(serialNumber)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
--
Gitblit v1.8.0