From eb30e54eef57c62bba0c1c0c7db1be65a5337d46 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Fri, 14 Feb 2025 16:22:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0job=E8=A1=A5=E5=81=BF?= =?UTF-8?q?=E4=BA=BA=E5=B7=A5=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/jiashi/FileUploader.java | 91 +++++-- .../controller/LianZhongSyncController.java | 2 +- .../com/jiashi/service/UpdateService.java | 246 ++++++++++-------- 3 files changed, 197 insertions(+), 142 deletions(-) diff --git a/src/main/java/com/jiashi/FileUploader.java b/src/main/java/com/jiashi/FileUploader.java index 0cdea26..d47de4a 100644 --- a/src/main/java/com/jiashi/FileUploader.java +++ b/src/main/java/com/jiashi/FileUploader.java @@ -2,44 +2,52 @@ package com.jiashi; import com.google.gson.Gson; import com.jiashi.service.FormField; -import okhttp3.*; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; import java.io.File; -import java.io.IOException; - import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class FileUploader { - public static CommonResult uploadFilesWithParams(List files, String uploadUrl, List params) throws IOException { - OkHttpClient client = new OkHttpClient.Builder() - .connectTimeout(6000, TimeUnit.SECONDS) - .readTimeout(6000, TimeUnit.SECONDS) - .writeTimeout(6000, TimeUnit.SECONDS) - .build(); - MultipartBody.Builder builder = new MultipartBody.Builder(); - for (File file : files) { - RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file); + public static CommonResult uploadFilesWithParams(List files, String uploadUrl, List params) { + try { + OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(6000, TimeUnit.SECONDS) + .readTimeout(6000, TimeUnit.SECONDS) + .writeTimeout(6000, TimeUnit.SECONDS) + .build(); + MultipartBody.Builder builder = new MultipartBody.Builder(); + for (File file : files) { + RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file); // RequestBody body = RequestBody.create(MediaType.parse("image/jpeg"), file); - builder.addFormDataPart("files", file.getName(), body); - } - for(FormField formField:params){ - builder.addFormDataPart(formField.getKey(), formField.getValue()); - } - // 下行是上传的json的对象,其中上面的fileName和下行的fromData需和后台接口名字一致 - RequestBody requestBody = builder.setType(MultipartBody.FORM).build(); - final Request request = new Request.Builder() - .url(uploadUrl) - .post(requestBody) - .build(); - - Response response = client.newCall(request).execute(); - String responseBody = response.body().string(); - CommonResult commonResult = new Gson().fromJson(responseBody, CommonResult.class); - return commonResult; + builder.addFormDataPart("files", file.getName(), body); + } + for(FormField formField:params){ + builder.addFormDataPart(formField.getKey(), formField.getValue()); + } + // 下行是上传的json的对象,其中上面的fileName和下行的fromData需和后台接口名字一致 + RequestBody requestBody = builder.setType(MultipartBody.FORM).build(); + final Request request = new Request.Builder() + .url(uploadUrl) + .post(requestBody) + .build(); + Response response = client.newCall(request).execute(); + String responseBody = response.body().string(); + CommonResult commonResult = new Gson().fromJson(responseBody, CommonResult.class); + return commonResult; + }catch (Exception ex){ + throw new RuntimeException(ex); + } } public static void deleteFolder(File folder) { @@ -54,6 +62,33 @@ public class FileUploader { folder.delete(); } + public static void main(String[] args) { + FileUploader fileUploader = new FileUploader(); + ExecutorService syncExecutors = Executors.newFixedThreadPool(2); + syncExecutors.execute(fileUploader::t1); + try { + syncExecutors.execute(fileUploader::t2); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + public void t1(){ + for (int i = 0; i < 10; i++) { + System.out.println("t1 >>>> "+i); + try { + Thread.sleep(3*1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public void t2(){ + for (int i = 0; i < 10; i++) { + System.out.println("t2 >>>> "+i); + } + } + // public static void main(String[] args) throws IOException { // List files = new ArrayList<>(); // files.add(new File("C:\\jiahsi-saomiao\\413425_刘燊杨_20221009_004624\\16763947060057863381.jpg")); diff --git a/src/main/java/com/jiashi/controller/LianZhongSyncController.java b/src/main/java/com/jiashi/controller/LianZhongSyncController.java index de9d000..b881366 100644 --- a/src/main/java/com/jiashi/controller/LianZhongSyncController.java +++ b/src/main/java/com/jiashi/controller/LianZhongSyncController.java @@ -29,7 +29,7 @@ public class LianZhongSyncController { updateService.sycDirNotExists(); return CommonResult.success("补偿完毕!"); } catch (Exception ex) { - log.error("补偿异常 ,"); + log.error("补偿异常 ,"+ex.getMessage(),ex); return CommonResult.failed("补偿异常!"); } } diff --git a/src/main/java/com/jiashi/service/UpdateService.java b/src/main/java/com/jiashi/service/UpdateService.java index 5bd59d5..eec633a 100644 --- a/src/main/java/com/jiashi/service/UpdateService.java +++ b/src/main/java/com/jiashi/service/UpdateService.java @@ -68,6 +68,14 @@ public class UpdateService { @PostConstruct public void upload() { initLianZhongPatPicDir(); + + ExecutorService syncExecutors = Executors.newFixedThreadPool(2); + syncExecutors.execute(this::syncNotStart); + syncExecutors.execute(this::sycDirNotExistsJob); + + + } + public void syncNotStart(){ log.info("联众同步数据启动>>>>>>>>>>>>>>>>>>>>"); String syncDir = FilePathUtil.currentPath() + File.separator + "lianzhong-sync"; FilePathUtil.mkdirs(syncDir); @@ -236,6 +244,131 @@ public class UpdateService { log.error("联众同步数据异常:" + ex.getMessage(), ex); } } + public void sycDirNotExistsJob() { + while (true){ + try { + sycDirNotExists(); + TimeUnit.SECONDS.sleep(600); + }catch (Exception ex){ + log.error("补偿异常 ,"+ex.getMessage(),ex); + } + } + + } + + public void sycDirNotExists() { + log.info("联众补偿数据启动>>>>>>>>>>>>>>>>>>>>"); + String syncDir = FilePathUtil.currentPath() + File.separator + "lianzhong-makeup-sync"; + FilePathUtil.mkdirs(syncDir); + List cardInfos = dataQuery.dateQuery(4); + if (!CollectionUtils.isEmpty(cardInfos)) { + for (CardInfo cardInfo : cardInfos) { + String picDir = syncDir + File.separator + cardInfo.getId(); + FilePathUtil.mkdirs(picDir); + List pictures = dataQuery.getPictures(cardInfo.getId()); + String lianZhongDir = cardInfo.getFindpicpath(); + if (lianZhongDir == null) { + FilePathUtil.deleteDir(picDir); + continue; + } + + for (Picture picture : pictures) { + String tifFilePath = lianZhongDir + File.separator + removeFileExtension(picture.getPicname()) + ".tif"; + File tifFile = new File(tifFilePath); + if (tifFile.exists()) { + try { + BufferedImage read = ImageIO.read(tifFile); + Thumbnails.of(read) + .scale(1) + .outputFormat("jpg") + .rotate(picture.getRotatedegree()) + .toFile(picDir + File.separator + removeFileExtension(picture.getPicname()) + ".jpg"); + read.flush(); + } catch (IOException e) { + log.error("补偿转换文件失败!pictureId=" + picture.getPicid() + "," + e.getMessage(), e); + } + } + } + + LianZhongUploadInfo.PatientInfo patientInfo = convert(cardInfo); + List fileInfos = new ArrayList<>(); + + List faultFileNames = new ArrayList<>(); + List files = new ArrayList<>(); + for (Picture picture : pictures) { + File pictureFile = new File(picDir + File.separator + removeFileExtension(picture.getPicname()) + ".jpg"); + if (!pictureFile.exists()) { + faultFileNames.add(picture.getPicname()); + continue; + } + files.add(pictureFile); + LianZhongUploadInfo.FileInfo fileInfo = new LianZhongUploadInfo.FileInfo(); + fileInfo.setFileTitle(picture.getPicname()); + fileInfo.setUploadFileName(pictureFile.getName()); + fileInfo.setAssortId(picture.getPickind()); + fileInfo.setSort(picture.getPicno()); + fileInfos.add(fileInfo); + } + + if (files.isEmpty()) { + dataQuery.updateBatchState(cardInfo, 2, "未获取到图片!"); + // 删除文件 + FilePathUtil.deleteDir(picDir); + continue; + } + + LianZhongUploadInfo uploadInfo = new LianZhongUploadInfo(); + uploadInfo.setPatientInfo(patientInfo); + uploadInfo.setFileInfos(fileInfos); + uploadInfo.setDelAllFile(1); + + Map fileInfoMap = fileInfos.stream() + .collect(Collectors.toMap(LianZhongUploadInfo.FileInfo::getUploadFileName, Function.identity())); + + boolean success = true; + // 上传 + int totalSize = files.size(); + int batchSize = 500; + if (totalSize > batchSize) { + for (int i = 0; i < totalSize; i += batchSize) { + ArrayList batch = new ArrayList<>(); + List uploadFileInfoList = new ArrayList<>(); + // 计算当前批次的结束索引 + int end = Math.min(i + batchSize, totalSize); + for (int j = i; j < end; j++) { + batch.add(files.get(j)); + uploadFileInfoList.add(fileInfoMap.get(files.get(j).getName())); + } + uploadInfo.setFileInfos(uploadFileInfoList); + // 额外的表单字段参数 + List params = new ArrayList<>(); + String s = new Gson().toJson(uploadInfo); + params.add(new FormField("uploadFileParams", s)); + CommonResult commonResult = FileUploader.uploadFilesWithParams(batch, uploadUrl, params); + boolean res = commonResult.getCode() == 0; + success = success && res; + uploadInfo.setDelAllFile(0); + } + } else { + // 额外的表单字段参数 + List params = new ArrayList<>(); + String s = new Gson().toJson(uploadInfo); + params.add(new FormField("uploadFileParams", s)); + CommonResult commonResult = FileUploader.uploadFilesWithParams(files, uploadUrl, params); + success = commonResult.getCode() == 0; + } + if (success) { + dataQuery.updateBatchState(cardInfo, 3); + } + if (!faultFileNames.isEmpty()) { + // 不完整 + dataQuery.updateBatchState(cardInfo, 2, String.join(",", faultFileNames + " 无法转换jpg图片!")); + } + // 删除文件 + FilePathUtil.deleteDir(picDir); + } + } + } public static void main(String[] args) { UpdateService updateService = new UpdateService(); @@ -434,119 +567,6 @@ public class UpdateService { } - public void sycDirNotExists() throws Exception { - initLianZhongPatPicDir(); - log.info("联众补偿数据启动>>>>>>>>>>>>>>>>>>>>"); - String syncDir = FilePathUtil.currentPath() + File.separator + "lianzhong-makeup-sync"; - FilePathUtil.mkdirs(syncDir); - List cardInfos = dataQuery.dateQuery(4); - if (!CollectionUtils.isEmpty(cardInfos)) { - for (CardInfo cardInfo : cardInfos) { - String picDir = syncDir + File.separator + cardInfo.getId(); - FilePathUtil.mkdirs(picDir); - List pictures = dataQuery.getPictures(cardInfo.getId()); - String lianZhongDir = cardInfo.getFindpicpath(); - if (lianZhongDir == null) { - FilePathUtil.deleteDir(picDir); - continue; - } - for (Picture picture : pictures) { - String tifFilePath = lianZhongDir + File.separator + removeFileExtension(picture.getPicname()) + ".tif"; - File tifFile = new File(tifFilePath); - if (tifFile.exists()) { - try { - BufferedImage read = ImageIO.read(tifFile); - Thumbnails.of(read) - .scale(1) - .outputFormat("jpg") - .rotate(picture.getRotatedegree()) - .toFile(picDir + File.separator + removeFileExtension(picture.getPicname()) + ".jpg"); - read.flush(); - } catch (IOException e) { - log.error("补偿转换文件失败!pictureId=" + picture.getPicid() + "," + e.getMessage(), e); - } - } - } - - LianZhongUploadInfo.PatientInfo patientInfo = convert(cardInfo); - List fileInfos = new ArrayList<>(); - - List faultFileNames = new ArrayList<>(); - List files = new ArrayList<>(); - for (Picture picture : pictures) { - File pictureFile = new File(picDir + File.separator + removeFileExtension(picture.getPicname()) + ".jpg"); - if (!pictureFile.exists()) { - faultFileNames.add(picture.getPicname()); - continue; - } - files.add(pictureFile); - LianZhongUploadInfo.FileInfo fileInfo = new LianZhongUploadInfo.FileInfo(); - fileInfo.setFileTitle(picture.getPicname()); - fileInfo.setUploadFileName(pictureFile.getName()); - fileInfo.setAssortId(picture.getPickind()); - fileInfo.setSort(picture.getPicno()); - fileInfos.add(fileInfo); - } - - if (files.isEmpty()) { - dataQuery.updateBatchState(cardInfo, 2, "未获取到图片!"); - // 删除文件 - FilePathUtil.deleteDir(picDir); - continue; - } - - LianZhongUploadInfo uploadInfo = new LianZhongUploadInfo(); - uploadInfo.setPatientInfo(patientInfo); - uploadInfo.setFileInfos(fileInfos); - uploadInfo.setDelAllFile(1); - - Map fileInfoMap = fileInfos.stream() - .collect(Collectors.toMap(LianZhongUploadInfo.FileInfo::getUploadFileName, Function.identity())); - - boolean success = true; - // 上传 - int totalSize = files.size(); - int batchSize = 500; - if (totalSize > batchSize) { - for (int i = 0; i < totalSize; i += batchSize) { - ArrayList batch = new ArrayList<>(); - List uploadFileInfoList = new ArrayList<>(); - // 计算当前批次的结束索引 - int end = Math.min(i + batchSize, totalSize); - for (int j = i; j < end; j++) { - batch.add(files.get(j)); - uploadFileInfoList.add(fileInfoMap.get(files.get(j).getName())); - } - uploadInfo.setFileInfos(uploadFileInfoList); - // 额外的表单字段参数 - List params = new ArrayList<>(); - String s = new Gson().toJson(uploadInfo); - params.add(new FormField("uploadFileParams", s)); - CommonResult commonResult = FileUploader.uploadFilesWithParams(batch, uploadUrl, params); - boolean res = commonResult.getCode() == 0; - success = success && res; - uploadInfo.setDelAllFile(0); - } - } else { - // 额外的表单字段参数 - List params = new ArrayList<>(); - String s = new Gson().toJson(uploadInfo); - params.add(new FormField("uploadFileParams", s)); - CommonResult commonResult = FileUploader.uploadFilesWithParams(files, uploadUrl, params); - success = commonResult.getCode() == 0; - } - if (success) { - dataQuery.updateBatchState(cardInfo, 3); - } - if (!faultFileNames.isEmpty()) { - // 不完整 - dataQuery.updateBatchState(cardInfo, 2, String.join(",", faultFileNames + " 无法转换jpg图片!")); - } - // 删除文件 - FilePathUtil.deleteDir(picDir); - } - } - } }