Browse Source

token相关接口

zhoutg 5 years ago
parent
commit
e59cfdbfe9

+ 3 - 0
config-server/src/main/resources/shared/mrqcman-service-dev.yml

@@ -94,3 +94,6 @@ mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
     cache-enabled: false
+
+imageUrl:
+  prefix: http://192.168.2.236:82

+ 3 - 0
config-server/src/main/resources/shared/mrqcman-service-local.yml

@@ -94,3 +94,6 @@ mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
     cache-enabled: false
+
+imageUrl:
+  prefix: http://192.168.2.236:82

+ 3 - 0
config-server/src/main/resources/shared/mrqcman-service-pre.yml

@@ -94,3 +94,6 @@ mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
     cache-enabled: false
+
+imageUrl:
+  prefix: http://192.168.2.121:82

+ 3 - 0
config-server/src/main/resources/shared/mrqcman-service-pro.yml

@@ -94,3 +94,6 @@ mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
     cache-enabled: false
+
+imageUrl:
+  prefix: http://192.168.2.122:82

+ 3 - 0
config-server/src/main/resources/shared/mrqcman-service-test.yml

@@ -94,3 +94,6 @@ mybatis-plus:
   configuration:
     map-underscore-to-camel-case: true
     cache-enabled: false
+
+imageUrl:
+  prefix: http://192.168.2.241:82

+ 2 - 1
docs/027.20191220病历质控维护/init_mrqc.sql

@@ -15,7 +15,8 @@ CREATE TABLE `mrqc_token` (
   `disk` varchar(255)  NOT NULL DEFAULT '' COMMENT '硬盘信息',
   `ip` varchar(255)  NOT NULL DEFAULT '' COMMENT 'ip',
   `remain_day` TINYINT  NOT NULL DEFAULT 0 COMMENT '剩余使用天数',
-  `login_token` varchar(255)  NOT NULL DEFAULT '' COMMENT '登录token',
+  `login_key` varchar(255)  NOT NULL DEFAULT '' COMMENT '登录key',
+  `url` varchar(255)  NOT NULL DEFAULT '' COMMENT '文件路径',
   `remark` varchar(255)  NOT NULL DEFAULT '' COMMENT '备注',
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8  COMMENT='病历质控token信息';

+ 34 - 0
mrqcman-service/pom.xml

@@ -154,6 +154,40 @@
             <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
         </dependency>
 
+        <!-- 文件上传相关架包 -->
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.4</version>
+        </dependency>
+
+        <!--POI-->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>5.1.9.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 28 - 0
mrqcman-service/src/main/java/com/diagbot/dto/FileDTO.java

@@ -0,0 +1,28 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @Author:zhaops
+ * @time: 2018/12/18 17:08
+ */
+@Getter
+@Setter
+public class FileDTO {
+    private String state;
+    private String original;
+    private String title;
+    private String url;
+    private String md5;
+    private String info;
+
+    public FileDTO(String state, String info) {
+        this.state = state;
+        this.info = info;
+    }
+    public FileDTO(){
+
+    }
+}

+ 17 - 0
mrqcman-service/src/main/java/com/diagbot/dto/FileDeleteDTO.java

@@ -0,0 +1,17 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/11/4 11:09
+ */
+@Getter
+@Setter
+public class FileDeleteDTO {
+    private Object data;
+    private String message;
+    private String status;
+}

+ 25 - 0
mrqcman-service/src/main/java/com/diagbot/dto/FileUploadDTO.java

@@ -0,0 +1,25 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2019/11/4 10:55
+ */
+@Getter
+@Setter
+public class FileUploadDTO {
+    private String url;
+    private String md5;
+    private String path;
+    private String domain;
+    private String scene;
+    private int size;
+    private int mtime;
+    private String scenes;
+    private String retmsg;
+    private int retcode;
+    private String src;
+}

+ 7 - 2
mrqcman-service/src/main/java/com/diagbot/entity/MrqcToken.java

@@ -89,9 +89,14 @@ public class MrqcToken implements Serializable {
     private Integer remainDay;
 
     /**
-     * 登录token
+     * 登录key
      */
-    private String loginToken;
+    private String loginKey;
+
+    /**
+     * 文件路径
+     */
+    private String url;
 
     /**
      * 备注

+ 65 - 2
mrqcman-service/src/main/java/com/diagbot/facade/MrqcTokenFacade.java

@@ -3,22 +3,36 @@ package com.diagbot.facade;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.diagbot.dto.FileDTO;
 import com.diagbot.entity.MrqcToken;
 import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.UploadService;
 import com.diagbot.service.impl.MrqcTokenServiceImpl;
 import com.diagbot.util.BeanUtil;
 import com.diagbot.util.DateUtil;
+import com.diagbot.util.RSAEncrypt;
 import com.diagbot.vo.MrqcTokenDeleteVO;
 import com.diagbot.vo.MrqcTokenIndexVO;
 import com.diagbot.vo.MrqcTokenPageVO;
 import com.diagbot.vo.MrqcTokenVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.util.Date;
+import java.util.UUID;
 
 @Component
 public class MrqcTokenFacade extends MrqcTokenServiceImpl {
 
+    @Autowired
+    UploadService uploadService;
+
     /**
      * token保存
      *
@@ -28,16 +42,61 @@ public class MrqcTokenFacade extends MrqcTokenServiceImpl {
         Date date = DateUtil.now();
         MrqcToken mrqcToken = new MrqcToken();
         BeanUtil.copyProperties(mrqcTokenVO, mrqcToken);
-        // id为空表示新增
+        // 重复性校验
+        int num = this.count(new QueryWrapper<MrqcToken>()
+                .eq("ip", mrqcTokenVO.getIp())
+                .eq("cpu", mrqcTokenVO.getCpu())
+                .eq("server", mrqcTokenVO.getServer())
+                .eq("hospital", mrqcTokenVO.getHospital())
+                .eq("mainboard", mrqcTokenVO.getMainboard())
+                .eq("disk", mrqcTokenVO.getDisk())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .ne(mrqcTokenVO.getId() != null, "id", mrqcTokenVO.getId())
+        );
+        if (num > 0) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "当前token信息已存在");
+        }
+        // id为空表示新增,只有新增时才生成loginKey
+        String uuid = "";
         if (mrqcTokenVO.getId() == null) {
             mrqcToken.setGmtCreate(date);
+            uuid = UUID.randomUUID().toString();
+            mrqcToken.setLoginKey(uuid); // 生成登录获取token需要的key
         }
         mrqcToken.setGmtModified(date);
         mrqcToken.setModifier(mrqcTokenVO.getCreator());
+
+        // 创建文件
+        FileDTO fileDTO = null;
+        try {
+            MultipartFile file = fileToMultipartFile(
+                    RSAEncrypt.encrypt(mrqcTokenVO.getIp())
+                            + System.getProperty("line.separator")
+                            + RSAEncrypt.encrypt(mrqcTokenVO.getCpu()),
+                    "sys.proterties");
+            fileDTO = uploadService.singleFileUpload(file);
+        } catch (Exception e) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "文件上传失败!");
+        }
+        mrqcToken.setUrl(fileDTO.getUrl());
         this.saveOrUpdate(mrqcToken);
     }
 
 
+    /**
+     *
+     * @param content 文件内容
+     * @param fileName
+     * @return
+     * @throws Exception
+     */
+    public MultipartFile  fileToMultipartFile(String content, String fileName) throws Exception {
+        InputStream  inputstream = new ByteArrayInputStream(content.getBytes());
+        MultipartFile toMultipartFile = new MockMultipartFile(fileName, fileName, "text/plain", inputstream);
+        return toMultipartFile;
+    }
+
+
     /**
      * token删除
      *
@@ -67,7 +126,11 @@ public class MrqcTokenFacade extends MrqcTokenServiceImpl {
     }
 
 
-
+    /**
+     * 获取明细
+     * @param mrqcTokenIndexVO
+     * @return
+     */
     public MrqcToken getById(MrqcTokenIndexVO mrqcTokenIndexVO) {
         return this.getOne(new QueryWrapper<MrqcToken>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())

+ 13 - 0
mrqcman-service/src/main/java/com/diagbot/service/UploadService.java

@@ -0,0 +1,13 @@
+package com.diagbot.service;
+
+import com.diagbot.dto.FileDTO;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @Description: 文件上传服务接口
+ * @author: gaodm
+ * @time: 2018/11/13 13:50
+ */
+public interface UploadService {
+    FileDTO singleFileUpload(MultipartFile file);
+}

+ 129 - 0
mrqcman-service/src/main/java/com/diagbot/service/impl/UploadServiceImpl.java

@@ -0,0 +1,129 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.dto.FileDTO;
+import com.diagbot.dto.FileDeleteDTO;
+import com.diagbot.dto.FileUploadDTO;
+import com.diagbot.service.UploadService;
+import com.diagbot.util.GsonUtil;
+import com.diagbot.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.FormBody;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+import okhttp3.ResponseBody;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @Description: 文件上传服务接口实现
+ * @author: gaodm
+ * @time: 2018/11/13 13:50
+ */
+@Slf4j
+@Service
+public class UploadServiceImpl implements UploadService {
+    @Value("${imageUrl.prefix}")
+    private String imagerUrl;
+
+    @Override
+    public FileDTO singleFileUpload(MultipartFile file) {
+        if (file.isEmpty()) {
+            return new FileDTO("FAILURE", "文件不能为空");
+        }
+        //文件大小上限1M
+        if (file.getSize() > 1024 * 1024) {
+            return new FileDTO("FAILURE", "文件上传失败,超出大小限制1MB");
+        }
+
+        String result = "";
+        try {
+            OkHttpClient httpClient = new OkHttpClient();
+            MultipartBody multipartBody = new MultipartBody.Builder().
+                    setType(MultipartBody.FORM)
+                    .addFormDataPart("file", file.getOriginalFilename(),
+                            RequestBody.create(MediaType.parse("multipart/form-data;charset=utf-8"),
+                                    file.getBytes()))
+                    .addFormDataPart("scene", "M03")
+                    .addFormDataPart("output", "json")
+                    .build();
+
+            Request request = new Request.Builder()
+                    .url(imagerUrl + "/group1/upload")
+                    .post(multipartBody)
+                    .build();
+
+            Response response = httpClient.newCall(request).execute();
+            if (response.isSuccessful()) {
+                ResponseBody body = response.body();
+                if (body != null) {
+                    result = body.string();
+                    //System.out.println(result);
+                }
+            }
+
+            if (StringUtil.isBlank(result)) {
+                return new FileDTO("FAILURE", "文件上传失败,请重新上传");
+            }
+        } catch (Exception e) {
+            log.error("文件上传失败", e);
+            return new FileDTO("FAILURE", "文件上传失败,请重新上传");
+        }
+
+        FileUploadDTO fileUploadDTO = GsonUtil.toObject(result, FileUploadDTO.class);
+        FileDTO fileDTO = new FileDTO("SUCCESS", "文件上传成功");
+        fileDTO.setUrl(fileUploadDTO.getPath());
+        fileDTO.setMd5(fileUploadDTO.getMd5());
+        fileDTO.setOriginal(file.getOriginalFilename());
+        fileDTO.setTitle(file.getOriginalFilename());
+        return fileDTO;
+    }
+
+    /**
+     * 删除服务端文件
+     *
+     * @param md5
+     * @return
+     */
+    public FileDTO deleteRemoteFile(String md5) {
+        String result = "";
+        try {
+            OkHttpClient httpClient = new OkHttpClient();
+            RequestBody formBody = new FormBody.Builder()
+                    .add("md5", md5)
+                    .build();
+
+            Request request = new Request.Builder()
+                    .url(imagerUrl + "/group1/delete")
+                    .post(formBody)
+                    .build();
+
+            Response response = httpClient.newCall(request).execute();
+            if (response.isSuccessful()) {
+                ResponseBody body = response.body();
+                if (body != null) {
+                    result = body.string();
+                    //System.out.println(result);
+                }
+            }
+
+            if (StringUtil.isBlank(result)) {
+                return new FileDTO("FAILURE", "文件删除失败");
+            }
+
+        } catch (Exception e) {
+            log.error("", e);
+            return new FileDTO("FAILURE", "文件删除失败");
+        }
+
+        FileDeleteDTO fileDeleteDTO = GsonUtil.toObject(result, FileDeleteDTO.class);
+        if (fileDeleteDTO.getStatus().equals("fail")) {
+            return new FileDTO("FAILURE", fileDeleteDTO.getMessage());
+        }
+        return new FileDTO("SUCCESS", "文件删除成功");
+    }
+}

+ 7 - 2
mrqcman-service/src/main/java/com/diagbot/vo/MrqcTokenVO.java

@@ -66,9 +66,14 @@ public class MrqcTokenVO implements Serializable {
     private Integer remainDay;
 
     /**
-     * 登录token
+     * 登录Key
      */
-    private String loginToken;
+    private String loginKey;
+
+    /**
+     * 文件路径
+     */
+    private String url;
 
     /**
      * 备注

+ 1 - 1
mrqcman-service/src/main/java/com/diagbot/web/MrqcTokenController.java

@@ -43,7 +43,7 @@ public class MrqcTokenController {
                     "disk:硬盘<br>" +
                     "ip: ip<br>" +
                     "remainDay:剩余使用天数<br>" +
-                    "loginToken:登录token<br>" +
+                    "loginKey:登录Key<br>" +
                     "remark:备注<br>")
     @PostMapping("/saveOrUpdate")
     @SysLogger("saveOrUpdate")

+ 2 - 1
mrqcman-service/src/main/resources/mapper/MrqcTokenMapper.xml

@@ -17,7 +17,8 @@
         <result column="disk" property="disk" />
         <result column="ip" property="ip" />
         <result column="remain_day" property="remainDay" />
-        <result column="login_token" property="loginToken" />
+        <result column="login_key" property="loginKey" />
+        <result column="url" property="url" />
         <result column="remark" property="remark" />
     </resultMap>