fuyu 5 yıl önce
ebeveyn
işleme
0b551d7b32

+ 0 - 60
dicom_monitor.iml

@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-email:1.4" level="project" />
-    <orderEntry type="library" name="Maven: com.sun.mail:javax.mail:1.5.2" level="project" />
-    <orderEntry type="library" name="Maven: javax.activation:activation:1.1.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
-    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
-    <orderEntry type="library" name="Maven: commons-httpclient:commons-httpclient:3.0.1" level="project" />
-    <orderEntry type="library" name="Maven: junit:junit:3.8.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.0.3" level="project" />
-    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.2" level="project" />
-    <orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" />
-    <orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.0.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.0.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.10.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.10.0" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
-    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.0.8.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.0.8.RELEASE" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.19" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.0.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.0.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure-processor:2.0.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.0.4.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.0.8.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.0.8.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.0.8.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.0.8.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:2.8.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.4.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.1" level="project" />
-    <orderEntry type="library" name="Maven: org.jdom:jdom:1.1" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.51" level="project" />
-    <orderEntry type="library" name="Maven: cn.ucloud.ufile:ufile-client-java:2.1.1" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.11.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.14.0" level="project" />
-    <orderEntry type="library" name="Maven: cn.ucloud.ufile:ufile-core:2.1.1" level="project" />
-  </component>
-</module>

+ 4 - 0
src/main/java/com/zskk/dicom/monitor/oss/AliOSSUtils.java

@@ -0,0 +1,4 @@
+package com.zskk.dicom.monitor.oss;
+
+public class AliOSSUtils {
+}

+ 4 - 0
src/main/java/com/zskk/dicom/monitor/oss/LcUfileUtils.java

@@ -0,0 +1,4 @@
+package com.zskk.dicom.monitor.oss;
+
+public class LcUfileUtils {
+}

+ 4 - 0
src/main/java/com/zskk/dicom/monitor/oss/TyUtils.java

@@ -0,0 +1,4 @@
+package com.zskk.dicom.monitor.oss;
+
+public class TyUtils {
+}

+ 210 - 0
src/main/java/com/zskk/dicom/oss/OSSAddUploadHleper.java

@@ -0,0 +1,210 @@
+package com.zskk.dicom.oss;
+
+import com.alibaba.fastjson.JSON;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.common.comm.ResponseMessage;
+import com.aliyun.oss.common.utils.IOUtils;
+import com.aliyun.oss.event.ProgressEvent;
+import com.aliyun.oss.event.ProgressEventType;
+import com.aliyun.oss.event.ProgressListener;
+import com.aliyun.oss.model.*;
+import com.aliyun.oss.model.Callback.CalbackBodyType;
+import com.zskk.dicom.config.OSSConfig;
+import com.zskk.dicom.monitor.config.Configs;
+import com.zskk.dicom.monitor.report.ErrReporter;
+import com.zskk.dicom.monitor.utils.ExceptionUtil;
+import com.zskk.dicom.response.BaseResponse;
+import com.zskk.dicom.response.bean.FileUploadResponseBean;
+import org.apache.commons.codec.digest.DigestUtils;
+
+import java.io.*;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+public class OSSFileAndCallbackHleper implements BaseOSSHleper {
+
+	/**
+	 * The uploading progress listener. Its progressChanged API is called by the SDK when there's an update.
+	 */
+	static class PutObjectProgressListener implements ProgressListener {
+
+		private long bytesWritten = 0;
+		private long totalBytes = -1;
+		private boolean succeed = false;
+
+		@Override
+		public void progressChanged(ProgressEvent progressEvent) {
+			long bytes = progressEvent.getBytes();
+			ProgressEventType eventType = progressEvent.getEventType();
+			switch (eventType) {
+				case TRANSFER_STARTED_EVENT:
+					Configs.sysLog.info("Start to upload......");
+					break;
+
+				case REQUEST_CONTENT_LENGTH_EVENT:
+					this.totalBytes = bytes;
+					Configs.sysLog.info(this.totalBytes + " bytes in total will be uploaded to OSS");
+					break;
+
+				case REQUEST_BYTE_TRANSFER_EVENT:
+					this.bytesWritten += bytes;
+					if (this.totalBytes != -1) {
+						int percent = (int)(this.bytesWritten * 100.0 / this.totalBytes);
+						Configs.sysLog.info(bytes + " bytes have been written at this time, upload progress: " +
+								percent + "%(" + this.bytesWritten + "/" + this.totalBytes + ")");
+					} else {
+						Configs.sysLog.info(bytes + " bytes have been written at this time, upload ratio: unknown" +
+								"(" + this.bytesWritten + "/...)");
+					}
+					break;
+
+				case TRANSFER_COMPLETED_EVENT:
+					this.succeed = true;
+					Configs.sysLog.info("Succeed to upload, " + this.bytesWritten + " bytes have been transferred in total");
+					break;
+
+				case TRANSFER_FAILED_EVENT:
+					Configs.sysLog.info("Failed to upload, " + this.bytesWritten + " bytes have been transferred");
+					break;
+
+				default:
+					break;
+			}
+		}
+
+		public boolean isSucceed() {
+			return succeed;
+		}
+	}
+
+//	private static class OSSHleperHoler {
+//		private static OSSFileAndCallbackHleper INSTANCE = new OSSFileAndCallbackHleper();
+//	}
+//	public static OSSFileAndCallbackHleper getInstance() {
+//		return OSSHleperHoler.INSTANCE;
+//	}
+	private OSSClient instance;
+	public OSSFileAndCallbackHleper(String ossEndpoint , String accessKeyId , String accessKeySecret ) {
+		instance = new OSSClient(ossEndpoint,accessKeyId,accessKeySecret);
+	}
+	@Override
+	public boolean exist(String md5) {
+		return instance.doesObjectExist(Configs.ossBucketName, md5);
+	}
+	
+	@Override
+	public boolean upload(File file) {
+		BaseResponse exception = null;
+		FileInputStream fis = null;
+		String md5 = null;
+		Exception error = null;
+		try {
+			fis = new FileInputStream(file);
+			md5 = DigestUtils.md5Hex(IOUtils.readStreamAsByteArray(fis));
+			fis.close();
+		} catch (IOException e) {
+			ErrReporter.report(ExceptionUtil.getExceptionTxt(e));
+//			e.printStackTrace();
+			return false;
+		}
+		String fileName = Configs.hospitalId + "/" + md5;
+
+		ResponseMessage responseMessage = null;
+		try {
+			if(instance.doesObjectExist(Configs.ossBucketName, fileName)) {
+				Configs.sysLog.info(fileName + "文件存在, 开始删除");
+				instance.deleteObject(Configs.ossBucketName, fileName);
+				Configs.sysLog.info(fileName + "文件删除成功开始上传");
+			}
+
+			InputStream in = new FileInputStream(file);
+			byte[] buffer = new byte[1024 * 50];
+			int bytes = 0;
+			int count = 0;
+			InputStream out = new ByteArrayInputStream(buffer);
+			bytes = in.read(buffer);
+			AppendObjectRequest appendObjectRequest = new AppendObjectRequest(Configs.ossBucketName, fileName, out);
+			appendObjectRequest.setPosition(0L);
+			AppendObjectResult appendObjectResult = instance.appendObject(appendObjectRequest);
+			while ((bytes = in.read(buffer)) != -1) {
+				appendObjectRequest.setPosition(appendObjectResult.getNextPosition());
+				appendObjectRequest.setInputStream(new ByteArrayInputStream(buffer, 0, bytes));
+				appendObjectResult = instance.appendObject(appendObjectRequest);
+				Configs.sysLog.info(count++ + "");
+			}
+			
+			Configs.sysLog.info("上传完成 responseMessage" + responseMessage);
+//			appendObjectRequest.getResponse();
+		} catch (FileNotFoundException e) {
+			Configs.sysLog.info("FileNotFoundException" + ExceptionUtil.getExceptionTxt(e));
+			return  false;
+		} catch (IOException e) {
+			Configs.sysLog.info("IOException" + ExceptionUtil.getExceptionTxt(e));
+			return  false;
+		}
+		Configs.sysLog.info("上传完成");
+//		// 简单上传
+//
+//		PutObjectRequest putObjectRequest = new PutObjectRequest(Configs.ossBucketName, fileName, file);
+//		// 上传回调参数。
+//
+//		Callback callback = new Callback();
+//		long size  = file.length();
+//		String callbackBodyStr = OSSConfig.generateBodyStr(fileName, size);
+//		// "{\\\"hospital_id\\\":\\\"" + Configs.hospitalId +"\\\",\\\"region\\\":\\\"oss-cn-beijing\\\",\\\"md5\\\":\\\""+md5+"\\\",\\\"url\\\":\\\""+OSSConfig.BASE_ALIYUN_OSS_URL + md5 +"\\\",\\\"size\\\":"+size+"}";
+//
+//		callback.setCallbackUrl(Configs.ossCallbackUrl);
+//		// 设置回调请求消息头中Host的值,如oss-cn-hangzhou.aliyuncs.com。
+//		// callback.setCallbackHost(OSSConfig.ENDPOINT);
+//
+//		Configs.sysLog.info("callbackBodyStr1" + callbackBodyStr);
+//		callback.setCallbackBody(callbackBodyStr);
+//		// 设置发起回调请求的Content-Type。
+//
+//		callback.setCalbackBodyType(CalbackBodyType.JSON);
+//		putObjectRequest.setCallback(callback);
+//		if(Configs.progress) {
+//			putObjectRequest.withProgressListener(new PutObjectProgressListener());
+//		}
+//		PutObjectResult putObjectResult = instance.putObject(putObjectRequest);
+//		// 读取上传回调返回的消息内容。
+//
+//		ResponseMessage responseMessage = putObjectResult.getResponse();
+
+
+		byte[] buffer = new byte[1024];
+		StringBuffer sb = new StringBuffer("");
+		try {
+			while (responseMessage.getContent().read(buffer) != -1) {
+				sb.append(new String(buffer));
+			}
+		    responseMessage.getContent().close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			Configs.sysLog.warn("ResponseMessage IOException" + ExceptionUtil.getExceptionTxt(e));
+			ErrReporter.report(ExceptionUtil.getExceptionTxt(e));
+//			e.printStackTrace();
+			return false;
+		}
+		String res = new String(sb);//{"code":0,"data":"dicom图像存储成功"}
+		Configs.sysLog.warn("sb" + sb);
+		Configs.sysLog.warn("aliyunoss upload res" + res);
+		FileUploadResponseBean fileUploadResponseBean = JSON.parseObject(res, FileUploadResponseBean.class);
+		// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
+		// 关闭OSSClient。
+		instance.shutdown();
+		instance = null;
+		if(fileUploadResponseBean.code == 0) {
+			return true;
+		}
+
+		if(fileUploadResponseBean.code == 1002) {
+			ErrReporter.report("OSS回调失败:md5" + md5 + "返回结果" + fileUploadResponseBean.toString() + "1002 文件已存在认为成功");
+			return true;
+		}
+		ErrReporter.report("OSS回调失败:md5" + md5 + "返回结果" + fileUploadResponseBean.toString());
+		return false;
+	}
+}

+ 129 - 0
src/main/java/com/zskk/dicom/oss/TYFileAndCallbackHleper.java

@@ -0,0 +1,129 @@
+package com.zskk.dicom.oss;
+
+
+import cn.ucloud.ufile.UfileClient;
+import cn.ucloud.ufile.api.object.ObjectConfig;
+import cn.ucloud.ufile.auth.ObjectAuthorization;
+import cn.ucloud.ufile.auth.UfileObjectLocalAuthorization;
+import cn.ucloud.ufile.bean.base.BaseResponseBean;
+import cn.ucloud.ufile.util.MimeTypeUtil;
+import com.aliyun.oss.common.utils.IOUtils;
+import com.zskk.dicom.monitor.config.Configs;
+import org.apache.commons.codec.digest.DigestUtils;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class LCOSSFileAndCallbackHleper {
+	private static final String PUBLIC_KEY = "TOKEN_29e194bf-beff-4155-a205-daf0feddcf65";
+	private static final String PRIVATE_KEY = "61e2695b-42a0-4190-a460-a2031325b9d2";
+	private static final ObjectAuthorization OBJECT_AUTHORIZER = new UfileObjectLocalAuthorization(PUBLIC_KEY, PRIVATE_KEY);
+	private static final String REGION = "cn-inspur2";
+	private static final String PORXY_SUFFIX = "ufileos.com";
+	private static final String CUSTOM_HOST = "zskkdcm.infile.inspurcloud.cn";
+	public static boolean upload(File file) {
+		ObjectConfig config = new ObjectConfig(REGION, PORXY_SUFFIX);
+		config.setCustomHost(CUSTOM_HOST);
+		FileInputStream fis = null;
+		String md5 = null;
+		String fileName = null;
+		long length = -1;
+		Exception error = null;
+		try {
+			fis = new FileInputStream(file);
+			md5 = DigestUtils.md5Hex(IOUtils.readStreamAsByteArray(fis));
+			fileName = Configs.hospitalId+ File.separator + md5;
+			length = file.length();
+			fis.close();
+			Configs.sysLog.info("md5" + md5);
+			BaseResponseBean response = UfileClient.object(OBJECT_AUTHORIZER, config)
+                    .putObject(file, MimeTypeUtil.getMimeType(file))
+//					.uploadHit(file)
+                    .nameAs(fileName)
+//			AQAAABLwJkfGDV2WF3ExBszdf6Pg0FyW
+//			AQAAABLwJkfGDV2WF3ExBszdf6Pg0FyW
+                    .toBucket("zskkdcm")
+                    /**
+                     * 是否上传校验MD5, Default = true
+                     */
+                    //  .withVerifyMd5(false)
+                    /**
+                     * 指定progress callback的间隔, Default = 每秒回调
+                     */
+                    //  .withProgressConfig(ProgressConfig.callbackWithPercent(10))
+                    /**
+                     * 配置进度监听
+                     */
+//                    .setOnProgressListener(new OnProgressListener() {
+//                        @Override
+//                        public void onProgress(long bytesWritten, long contentLength) {
+//							Configs.sysLog.debug("上传文件进度" + bytesWritten + ":" + contentLength);
+//                        }
+//                    })
+                    .execute();
+			Configs.sysLog.info("UploadHitSample" + String.format("[res] = %s", (response == null ? "null" : response.toString())));
+			if(response == null || !response.toString().contains("ETag")) {
+				Configs.sysLog.info("ETag is null");
+				return false;
+			}
+			URL url = new URL(Configs.lcossCallbackUrl);
+			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+			connection.setRequestMethod("POST");
+			connection.setDoOutput(true);
+			connection.setDoInput(true);
+			connection.setUseCaches(false);
+			connection.connect();
+			String body = "md5="+md5+"&url="+fileName+ "&hospitalId=" + Configs.hospitalId + "&size=" + length +"&response="+ response.toString();
+			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
+			writer.write(body);
+			writer.close();
+
+			int responseCode = connection.getResponseCode();
+			if(responseCode == HttpURLConnection.HTTP_OK){
+				StringBuilder strBuf = new StringBuilder();
+				BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+				try {
+					String line = null;
+					while ((line = reader.readLine()) != null) {
+						strBuf.append(line).append("\n");
+					}
+				} finally {
+					reader.close();
+				}
+				String rs = strBuf.toString();
+				Configs.sysLog.info("rs" + rs);
+				if(rs.contains("true")) {
+					return true;
+				}
+			}
+		} catch(Exception e) {
+			error = e;
+		}
+//		catch (UfileClientException e) {
+//			Configs.sysLog.debug("UfileClientException" + e.getMessage());
+//			e.printStackTrace();
+//			return false;
+//		} catch (UfileServerException e) {
+//			Configs.sysLog.debug("UfileServerException" + e.getMessage());
+//			e.printStackTrace();
+//			return false;
+//		} catch (IOException e) {
+////			ErrReporter.report(ExceptionUtil.getExceptionTxt(e));
+//			Configs.sysLog.info("IOException" + e.getMessage());
+//			e.printStackTrace();
+//			return false;
+//		} catch (Exception e) {
+////			ErrReporter.report(ExceptionUtil.getExceptionTxt(e));
+//			Configs.sysLog.info("Exception" + e.getMessage());
+//			e.printStackTrace();
+//			return false;
+//		}
+		if(error != null) {
+			Configs.sysLog.error("Exception" + error.getMessage());
+			error.printStackTrace();
+			return false;
+		}
+		return true;
+	}
+}

+ 4 - 0
src/main/java/com/zskk/dicom/utils/NetUtils.java

@@ -0,0 +1,4 @@
+package com.zskk.dicom.utils;
+
+public class NetUtils {
+}

+ 4 - 0
src/main/java/com/zskk/dicom/utils/TYNetUtils.java

@@ -0,0 +1,4 @@
+package com.zskk.dicom.utils;
+
+public class TYNetUtils {
+}