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); } }