123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- package thyyxxk.webserver.service.archive;
- import cn.hutool.core.date.DateTime;
- import cn.hutool.core.date.format.FastDateFormat;
- import cn.hutool.crypto.asymmetric.KeyType;
- import cn.hutool.crypto.asymmetric.RSA;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.mapper.BaseMapper;
- import com.dtflys.forest.Forest;
- import com.dtflys.forest.http.ForestRequest;
- import lombok.Data;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.web.multipart.MultipartFile;
- import thyyxxk.webserver.config.envionment.ArchiveConfig;
- import thyyxxk.webserver.config.exception.BizException;
- import thyyxxk.webserver.config.exception.ExceptionEnum;
- import thyyxxk.webserver.dao.his.archive.PatientArchiveDao;
- import thyyxxk.webserver.entity.ResultVo;
- import thyyxxk.webserver.entity.archive.PatientArchive;
- import thyyxxk.webserver.http.websocket.dto.ArchiveSocketParam;
- import thyyxxk.webserver.http.websocket.SocketV2;
- import thyyxxk.webserver.service.hutoolcache.UserCache;
- import thyyxxk.webserver.utils.*;
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- @Slf4j
- @Service
- public class ArchiveServer {
- private final ArchiveConfig archiveData;
- private final PatientArchiveDao patientArchiveDao;
- private final SocketV2 socketV2;
- private final UserCache userCache;
- private static final String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdTugOj9/hmOJIeXB7BOVKlczqjhXp6s7cvXoSrxhllgApZOivyLaq/4hsCw0m+70xj0GNIMIy8DFKKhz5z0DdOdPwoUwIbzmH8VZfgSM3eridfYJ8wnP3XOLlz3daX5jwD2rcNAMGar9vbi4k7gnkbH7vlRpujdeJyhqcCONKMwIDAQAB";
- public static RSA rsa = new RSA(null, publicKey);
- @Value("${is-prod}")
- private Boolean isProd;
- @Data
- public static class UploadResult {
- private String id;
- private String path;
- }
- public ArchiveServer(
- ArchiveConfig archive,
- PatientArchiveDao patientArchiveDao, SocketV2 socketV2,
- UserCache userCache) {
- this.socketV2 = socketV2;
- this.patientArchiveDao = patientArchiveDao;
- this.archiveData = archive;
- this.userCache = userCache;
- }
- public List<PatientArchive> getPatientArchives(String patNo, Integer times) {
- List<PatientArchive> array = patientArchiveDao.getPatientList(patNo, times);
- return TreeUtilV2.create(array)
- .sort((a) -> {
- if (a.getSort() == null)
- return Integer.MAX_VALUE;
- return a.getSort();
- })
- .execute();
- }
- public ForestRequest<?> sendApi(String url) {
- return sendApi(url, null);
- }
- public ForestRequest<?> sendApi(String url, String code) {
- String now = FastDateFormat.getInstance("yyyy-MM-ddHH:mm").format(new DateTime());
- String currentCode = code == null ? TokenUtil.getInstance().getTokenUserId() : code;
- String string = currentCode + "_" + now;
- String authorization = rsa.encryptBase64(string, KeyType.PublicKey);
- return Forest.post(archiveData.getArchiveUrl() + url)
- .addHeader("content-type", "application/json")
- .addHeader("Authorization", authorization);
- }
- public ForestRequest<?> sendEmrApi(String url) {
- return sendApi("/emr" + url);
- }
- public String submitTask(List<TaskPatient> data) {
- ForestRequest<?> api = sendEmrApi("/submitTask");
- String code = TokenUtil.getInstance().getTokenUserId();
- String name = userCache.getUserInfoByToken().getName();
- for (TaskPatient item : data) {
- item.setSubmitCode(code);
- item.setSubmitName(name);
- }
- api.addBody(data);
- api.execute();
- return "";
- }
- public ResultVo<String> sort(TaskPatient data) {
- ListUtil.batchList(data.getArchives(), PatientArchiveDao.class, BaseMapper::updateById);
- JSONObject js = new JSONObject() {{
- put("code", "change");
- put("data", new JSONObject() {{
- put("code", TokenUtil.getInstance().getTokenUserId());
- put("message", "排序");
- }});
- }};
- socketV2.sendArchiveMessage(
- ArchiveSocketParam.of(
- data.getPatNo() + "_" + data.getTimes(),
- js.toJSONString())
- );
- return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_EL_MESSAGE, "排序成功。");
- }
- public Object upload(MultipartFile file, String patNo, Integer times, String parent) {
- ForestRequest<?> forestRequest = sendEmrApi("/upload");
- try {
- forestRequest.contentFormUrlEncoded()
- .addHeader("content-type", "multipart/form-data")
- .addFile("file", file.getInputStream(), file.getOriginalFilename(), file.getContentType())
- .addBody("patNo", patNo)
- .addBody("times", times)
- .addBody("parent", parent);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- return forestRequest.execute();
- }
- public Object delFile(PatientArchive archive) {
- return sendEmrApi("/delFile").addBody(archive).execute();
- }
- public Object addDir(PatientArchive archive) {
- return sendEmrApi("/addDir").addBody(archive).execute();
- }
- public Object rename(String id, String name) {
- return sendEmrApi("/rename")
- .addHeader("content-type", "multipart/form-data")
- .contentFormUrlEncoded()
- .addBody("id", id)
- .addBody("name", name)
- .execute();
- }
- public Object getAllLog(String patNo, Integer times) {
- return sendEmrApi("/getAllLog")
- .addHeader("content-type", "multipart/form-data")
- .contentFormUrlEncoded()
- .addBody("patNo", patNo)
- .addBody("times", times)
- .execute();
- }
- public Object getTaskNameList() {
- ForestRequest<?> forestRequest = sendEmrApi("/getTaskNameList");
- return forestRequest.execute();
- }
- /**
- * 上传文件到服务器,如果需要删除请调用这个接口
- * 自动识别换当前环境
- * {@link #delUploadById(String) }
- *
- * @param file 上传的文件
- * @param path 文件的路径不能包含文件名称 如 xxx.png 是不行的
- * @return 返回文件的id,文件的地址
- */
- public UploadResult uploadFile(MultipartFile file, String path) {
- return uploadFile(file, path, !isProd, null);
- }
- public UploadResult uploadFileByCode(MultipartFile file, String path, String code) {
- return uploadFile(file, path, !isProd, code);
- }
- public UploadResult uploadFile(MultipartFile file, String path, boolean isTest) {
- return uploadFile(file, path, isTest, null);
- }
- /**
- * 上传文件到服务器,如果需要删除请调用这个接口 {@link #delUploadById(String) }
- *
- * @param file 上传的文件
- * @param path 文件的路径不能包含文件名称 如 xxx.png 是不行的
- * @param isTest 是否放入测试的文件夹
- * @return 返回文件的id,文件的地址
- */
- public UploadResult uploadFile(MultipartFile file, String path, boolean isTest, String userCode) {
- JSONObject execute;
- try {
- execute = sendApi("/uploadFile", userCode)
- .contentFormUrlEncoded()
- .addHeader("content-type", "multipart/form-data")
- .addFile("file", file.getInputStream(), file.getOriginalFilename(), file.getContentType())
- .addBody("path", path)
- .addBody("isTest", isTest)
- .execute(JSONObject.class);
- } catch (Exception e) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, "上传文件错误:" + e.getMessage());
- }
- Integer code = execute.getInteger("code");
- if (ExceptionEnum.SUCCESS.getCode() != code) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, "上传文件错误:" + execute.getString("message"));
- }
- return execute.getObject("data", UploadResult.class);
- }
- public void delUploadById(String id) {
- JSONObject execute = sendApi("/delUploadById/" + id).execute(JSONObject.class);
- if (ExceptionEnum.SUCCESS.getCode() != execute.getInteger("code")) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, execute.getString("message"));
- }
- }
- public UploadResult uploadFileByStr(String data, String path, boolean isTest, String userCode) {
- JSONObject execute;
- Map<String, Object> body = new HashMap<>();
- body.put("data", data);
- body.put("path", path);
- body.put("isTest", isTest);
- try {
- execute = sendApi("/uploadByStr", userCode)
- .addHeader("content-type", "application/json")
- .addBody(body)
- .execute(JSONObject.class);
- } catch (Exception e) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, "上传文件错误:" + e.getMessage());
- }
- Integer code = execute.getInteger("code");
- if (ExceptionEnum.SUCCESS.getCode() != code) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, "上传文件错误:" + execute.getString("message"));
- }
- return execute.getObject("data", UploadResult.class);
- }
- public UploadResult uploadFileByStr(String data, String path, boolean isTest) {
- return uploadFileByStr(data, path, isTest, null);
- }
- public UploadResult uploadFileByStr(String data, String path) {
- return uploadFileByStr(data, path, !isProd, null);
- }
- public UploadResult uploadFileByBytes(byte[] data, String path, boolean isTest, String userCode) {
- JSONObject execute;
- Map<String, Object> body = new HashMap<>();
- body.put("data", data);
- body.put("path", path);
- body.put("isTest", isTest);
- try {
- execute = sendApi("/uploadByByte", userCode)
- .addHeader("content-type", "application/json")
- .addBody(body)
- .execute(JSONObject.class);
- } catch (Exception e) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, "上传文件错误:" + e.getMessage());
- }
- Integer code = execute.getInteger("code");
- if (ExceptionEnum.SUCCESS.getCode() != code) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, "上传文件错误:" + execute.getString("message"));
- }
- return execute.getObject("data", UploadResult.class);
- }
- public UploadResult uploadFileByBytes(byte[] data, String path, boolean isTest) {
- return uploadFileByBytes(data, path, isTest, null);
- }
- public UploadResult uploadFileByBytes(byte[] data, String path) {
- return uploadFileByBytes(data, path, !isProd, null);
- }
- /**
- * 创建文件
- *
- * @param file 文件
- * @param path 地址用 /开头
- * @return 返回你传入的地址,如果你是工作集成平台的话可以指定用这个地址访问到
- */
- public String createFile(MultipartFile file, String path) {
- JSONObject execute;
- try {
- execute = sendApi("/createFile").contentFormUrlEncoded()
- .addHeader("content-type", "multipart/form-data")
- .addFile("file", file.getInputStream(), file.getOriginalFilename(), file.getContentType())
- .addBody("path", path)
- .execute(JSONObject.class);
- } catch (Exception e) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, "上传文件错误:" + e.getMessage());
- }
- Integer code = execute.getInteger("code");
- if (ExceptionEnum.SUCCESS.getCode() != code) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, "上传文件错误:" + execute.getString("message"));
- }
- return execute.getObject("data", String.class);
- }
- public String deleteFile(String path) {
- Map<String, String> map = new HashMap<>();
- map.put("path", path);
- JSONObject execute = sendApi("/deleteFile")
- .addBody(map)
- .execute(JSONObject.class);
- Integer code = execute.getInteger("code");
- if (ExceptionEnum.SUCCESS.getCode() != code) {
- throw new BizException(ExceptionEnum.LOGICAL_ERROR, execute.getString("message"));
- }
- return execute.getObject("data", String.class);
- }
- }
|