diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 59fe4fe..0bb8afc 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -2,6 +2,7 @@ + diff --git a/pom.xml b/pom.xml index cdc56fa..b2b9061 100644 --- a/pom.xml +++ b/pom.xml @@ -13,8 +13,48 @@ 2.4.9 + + + + io.springfox + springfox-swagger2 + ${swagger.version} + + + io.swagger + swagger-annotations + + + io.swagger + swagger-models + + + + + io.springfox + springfox-swagger-ui + ${swagger.version} + + + io.swagger + swagger-annotations + 1.5.21 + + + io.swagger + swagger-models + 1.5.21 + + + + com.github.xiaoymin + swagger-bootstrap-ui + 1.9.3 + + + com.squareup.okhttp3 @@ -35,6 +75,11 @@ spring-boot-starter + + org.springframework.boot + spring-boot-starter-web + + org.springframework.boot spring-boot-starter-test @@ -75,6 +120,7 @@ 8 8 + 2.9.2 UTF-8 diff --git a/src/main/java/com/jiashi/CommonResult.java b/src/main/java/com/jiashi/CommonResult.java index eb931e7..2ae1b71 100644 --- a/src/main/java/com/jiashi/CommonResult.java +++ b/src/main/java/com/jiashi/CommonResult.java @@ -21,4 +21,19 @@ public class CommonResult { private T data; + public static CommonResult success(T data){ + CommonResult commonResult = new CommonResult(); + commonResult.setCode(0); + commonResult.setMsg("操作成功"); + commonResult.setData(data); + return commonResult; + } + + public static CommonResult failed(T data){ + CommonResult commonResult = new CommonResult(); + commonResult.setCode(500); + commonResult.setMsg("操作失败"); + commonResult.setData(data); + return commonResult; + } } diff --git a/src/main/java/com/jiashi/config/SwaggerConfig.java b/src/main/java/com/jiashi/config/SwaggerConfig.java new file mode 100644 index 0000000..ebb3fd3 --- /dev/null +++ b/src/main/java/com/jiashi/config/SwaggerConfig.java @@ -0,0 +1,45 @@ +package com.jiashi.config; + +import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI; +import com.google.common.base.Predicates; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + + +/** + * api页面 /swagger-ui.html + * @author Zheng Jie + * @date 2018-11-23 + */ + +@Configuration +@EnableSwagger2 +@EnableSwaggerBootstrapUI +public class SwaggerConfig { + @Bean + public Docket createRestApi() { + ParameterBuilder ticketPar = new ParameterBuilder(); + + return new Docket(DocumentationType.SWAGGER_2) + .enable(true) + .apiInfo(apiInfo()) + .select() + .paths(Predicates.not(PathSelectors.regex("/error.*"))) + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("接口文档") + .version("1.0") + .build(); + } + +} diff --git a/src/main/java/com/jiashi/controller/LianZhongSyncController.java b/src/main/java/com/jiashi/controller/LianZhongSyncController.java new file mode 100644 index 0000000..79e2b9c --- /dev/null +++ b/src/main/java/com/jiashi/controller/LianZhongSyncController.java @@ -0,0 +1,152 @@ +package com.jiashi.controller; + +import com.google.gson.Gson; +import com.jiashi.CommonResult; +import com.jiashi.FileUploader; +import com.jiashi.dao.DataQuery; +import com.jiashi.service.CardInfo; +import com.jiashi.service.FormField; +import com.jiashi.service.Picture; +import com.jiashi.service.UploadInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +/** + * @author YongBin Wen + * @date 2024/9/26 15:32 + */ +@RestController +@Slf4j +@Api(tags = "广州市一联众同步接口") +@RequestMapping("/gzsy/lianzhong") +public class LianZhongSyncController { + + @Autowired + private DataQuery dataQuery; + + ExecutorService executor = Executors.newFixedThreadPool(10); + + @ApiOperation(value = "根据病案号和出院日期(yyyy-MM-dd)同步联众文件数据 ") + @GetMapping("/sync/byInpNoAndDisDate") + public CommonResult syncByInpNoAndDisDate(@RequestParam("inpatientNo") String inpatientNo, @RequestParam("disDate") String disDate) { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + List cardInfos = dataQuery.dateQueryByInpNo(inpatientNo); + CardInfo cardInfo = null; + for (CardInfo info : cardInfos) { + if (disDate.equals(sdf.format(info.getOutdate()))) { + cardInfo = info; + break; + } + } + if (Objects.isNull(cardInfo)) { + return CommonResult.failed("未找到 cardInfo 信息!"); + } + sync(cardInfo); + return CommonResult.success("同步完成!"); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return CommonResult.failed(ex.getMessage()); + + } + } + + public void sync(CardInfo cardInfo) throws IOException { + String uniUrl = "http://192.168.8.74"; + List pictures = dataQuery.getPictures(cardInfo.getId()); + if (pictures == null || pictures.size() == 0) { + //如果是空的则不同步 + dataQuery.updateBatchState(cardInfo, 5); + return; + } + String dir = "c:\\pic\\" + cardInfo.getId(); + // 创建File对象 + File directory = new File(dir); + + // 判断目录是否存在 + if (!directory.exists()) { + // 目录不存在,创建目录 + boolean created = directory.mkdirs(); + if (created) { + log.info("目录创建成功:" + dir); + } else { + log.info("目录创建失败:" + dir); + } + } + List futures = new ArrayList<>(); + for (Picture picture : pictures) { + Future future = executor.submit(() -> { + try { + String cmd = "C:\\Debug\\lianzhong.exe 003 192.168.8.74 " + cardInfo.getId() + " " + picture.getPicid() + " " + cardInfo.getPatno() + " " + cardInfo.getOutdateStr() + " " + picture.getPicname() + " " + picture.getFileUrl() + " " + uniUrl + " " + picture.getRotatedegree(); +// log.info(cmd); + java.lang.Process process = java.lang.Runtime.getRuntime().exec(cmd);//执行命令生成cube + process.waitFor(); + } catch (Exception e) { + log.error(e.getMessage(), e); + e.printStackTrace(); + } + + }); + futures.add(future); + } + for (Future future : futures) { + try { + future.get(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } catch (ExecutionException e) { + throw new RuntimeException(e); + } + } + + List files = new ArrayList<>(); + List uploadInfos = new ArrayList<>(); + for (Picture picture : pictures) { + files.add(new File(picture.getFileUrl())); + UploadInfo uploadInfo = new UploadInfo(cardInfo.getPatno(), cardInfo.getOutdateStr2(), picture.getPicname(), picture.getPicname(), + picture.getPickind(), cardInfo.getId(), cardInfo.getPatname(), + cardInfo.getIndateStr(), cardInfo.getPatsex(), cardInfo.getPatnum(), + cardInfo.getIcdecode11(), cardInfo.getIcdename11(), cardInfo.getMjwesticde(), cardInfo.getMjwestname(), + cardInfo.getOutdeptname(), cardInfo.getPatciticard(), cardInfo.getOutwardname(), cardInfo.getIndeptname(), cardInfo.getIndeptcode(), cardInfo.getGestno(), cardInfo.getPatbirthdayStr()); + uploadInfos.add(uploadInfo); + } + + + // 额外的表单字段参数 + List params = new ArrayList<>(); + String s = new Gson().toJson(uploadInfos); + params.add(new FormField("uploadFileParams", s)); + log.info("请求参数:" + cardInfo.getPatno()); + + // 上传 + CommonResult commonResult = FileUploader.uploadFilesWithParams(files, "http://192.168.161.102:9511/fileUploadJpg", params); + if (commonResult.getCode() == 0) { + dataQuery.updateBatchState(cardInfo, 3); + + } + + // 删除文件 + File file = new File(dir); + FileUploader.deleteFolder(file); + } + + +} diff --git a/src/main/java/com/jiashi/dao/DataQuery.java b/src/main/java/com/jiashi/dao/DataQuery.java index afaa5da..8ecca34 100644 --- a/src/main/java/com/jiashi/dao/DataQuery.java +++ b/src/main/java/com/jiashi/dao/DataQuery.java @@ -40,6 +40,20 @@ public class DataQuery { } + public List dateQueryByInpNo(String inpNo){ + Specification specification = (root, query, cb) -> { + List predicates = new ArrayList<>(); + predicates.add(cb.equal(root.get("patno"), inpNo)); + return cb.and(predicates.toArray(new Predicate[predicates.size()])); + }; + + Sort.Order sortCreateTime = Sort.Order.asc("outdate"); + Sort sort = Sort.by(sortCreateTime); + Pageable pageable = PageRequest.of(0, 1000, sort); + Page all = cardInfoRepository.findAll(specification, pageable); + return all.toList(); + } + public void updateBatch(List cardInfos){ for(CardInfo cardInfo:cardInfos){ cardInfo.setState(1);