123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package com.yihu.hos.crawler.service;
- import com.yihu.hos.core.compress.Zipper;
- import com.yihu.hos.core.encrypt.RSA;
- import com.yihu.hos.core.file.FileUtil;
- import com.yihu.hos.core.log.Logger;
- import com.yihu.hos.core.log.LoggerFactory;
- import com.yihu.hos.crawler.model.config.SysConfig;
- import com.yihu.hos.crawler.model.patient.Patient;
- import java.io.File;
- import java.security.Key;
- import java.util.UUID;
- /**
- * 档案上传
- *
- * @author Air
- * @version 1.0
- * @created 2015.07.06 15:58
- */
- public class PatientCDAUpload {
- private static Logger logger = LoggerFactory.getLogger(PatientCDAUpload.class);
- public static String uploadMethod;
- /**
- * @param patient
- * @return
- * @modify 2015.09.15 airhead 修订删除目录
- * @modify 2015.09.19 airhead 修复无文档问题及错误信息
- */
- public Boolean upload(Patient patient, String token) {
- ZipFile zipFile = zip(patient);
- try {
- if (zipFile == null || zipFile.file == null) {
- logger.info("压缩病人档案失败,病人文档未生成,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
- return false;
- }
- boolean result = upload(patient, zipFile, token);
- if (!result) {
- logger.info("上传病人档案失败,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
- return result;
- }
- logger.trace(zipFile.directory);
- result = FileUtil.deleteDirectory(new File(zipFile.directory));
- if (!result) {
- logger.info("删除临时文件失败,patient_id:" + patient.getPatientId() + ",event_no:" + patient.getEventNo());
- return result;
- }
- } catch (Exception e) {
- FileUtil.deleteDirectory(new File(zipFile.directory));
- return false;
- }
- return true;
- }
- /**
- * @param patient
- * @return
- * @modify 从data目录生成zip数据
- */
- public ZipFile zip(Patient patient) {
- try {
- PatientCDAIndex patientCDAIndex = new PatientCDAIndex(patient);
- String dataDirectory = patientCDAIndex.getDataDirectory();
- String filePath = patientCDAIndex.createIndex(PatientCDAIndex.IndexType.ZIP, PatientCDAIndex.FileType.ZIP);
- UUID uuidPwd = UUID.randomUUID();
- String pwd = uuidPwd.toString();
- String publicKey = SysConfig.getInstance().getPublicKeyMap().get(patient.getOrgCode());
- if(publicKey== null || publicKey.length() == 0) {
- publicKey = EsbHttp.getPublicKey(patient.getOrgCode());
- SysConfig.getInstance().getPublicKeyMap().put(patient.getOrgCode(), publicKey);
- }
- Key key = RSA.genPublicKey(publicKey);
- if (key == null) {
- logger.info("压缩文件错误,获取公钥错误.");
- return null;
- }
- ZipFile zipFile = new ZipFile();
- zipFile.encryptPwd = RSA.encrypt(pwd, key);
- Zipper zipper = new Zipper();
- zipFile.file = zipper.zipFileForAll(new File(dataDirectory), filePath, pwd);
- zipFile.dataDirectory = dataDirectory;
- zipFile.directory = patientCDAIndex.getDirectory();
- return zipFile;
- } catch (Exception e) {
- logger.error("从data目录生成zip数据时,压缩文件异常");
- logger.error(e.getCause().toString());
- }
- return null;
- }
- private boolean upload(Patient patient, ZipFile zipFile, String token) {
- return EsbHttp.upload(patient, zipFile.file, zipFile.encryptPwd, token);
- }
- private class ZipFile {
- public File file;
- public String encryptPwd;
- public String directory;
- public String dataDirectory;
- }
- }
|