package com.docus.demo.controller; import com.alibaba.fastjson.JSON; import com.docus.demo.dto.LianZhongUploadInfo; import com.docus.demo.dto.SyncBasicDataDto; import com.docus.demo.dto.SyncFileDto; import com.docus.demo.dto.UploadJpgFileParam; import com.docus.demo.entity.CommonResult; import com.docus.demo.facade.ISyncBasicDataService; import com.docus.demo.facade.ISyncBasicFileService; import com.docus.demo.facade.IWebService; 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.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentHashMap; @Api(value = "数据同步接口", tags = "数据同步接口") @RestController @Slf4j public class SyncBasicDataController { @Autowired private ISyncBasicDataService syncBasicDataService; @Autowired private ISyncBasicFileService syncBasicFileService; @Autowired private IWebService webService; private static final ConcurrentHashMap SYNC_BASIC_DATA_BLOCK_MAP = new ConcurrentHashMap<>(); @ApiOperation("去除文件不存在的数据") @PostMapping("/deleteSync") public CommonResult deleteSync(@RequestBody SyncBasicDataDto syncBasicDataDto){ return syncBasicFileService.deleteSync(syncBasicDataDto); } @ApiOperation("省厅-同步基础数据") @PostMapping("/syncBasicData") public CommonResult syncBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto){ if(syncBasicDataDto == null){ return CommonResult.failed("无效的请求参数!"); } String blockKey="syncBasicData:"+ JSON.toJSONString(syncBasicDataDto); if (SYNC_BASIC_DATA_BLOCK_MAP.containsKey(blockKey)) { return CommonResult.failed("有正在同步的任务!"); } SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey,0); try { return syncBasicDataService.syncBasicData(syncBasicDataDto); }catch (Exception ex){ return CommonResult.failed("同步失败!"); }finally { SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); } } @ApiOperation("省厅-同步单个患者基础数据") @GetMapping("/syncSingleBasicData") public CommonResult syncSingleBasicData(@RequestParam(name = "disDate") String disDate,@RequestParam(name = "inpatientNo") String inpatientNo){ log.info("省厅-同步单个患者基础数据,disDate={},inpatientNo={}", disDate, inpatientNo); String blockKey="syncSingleBasicData:"+ inpatientNo+":"+disDate; if (SYNC_BASIC_DATA_BLOCK_MAP.containsKey(blockKey)) { return CommonResult.failed("有正在同步的任务!"); } SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey,0); try { LocalDate localDate = LocalDate.parse(disDate); SyncBasicDataDto dto = new SyncBasicDataDto(); dto.setStartDate(localDate.toString()); dto.setEndDate(localDate.toString()); dto.setInpatientNoList(Collections.singletonList(inpatientNo)); dto.setLimit(100); return syncBasicDataService.syncBasicData(dto); }catch (Exception ex){ return CommonResult.failed("同步失败!"); }finally { SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); } } @ApiOperation("省厅-同步上个月基础数据") @GetMapping("/syncLastMonthBasicData") public CommonResult syncLastMonthBasicData(){ String blockKey="syncLastMonthBasicData"; if (SYNC_BASIC_DATA_BLOCK_MAP.containsKey(blockKey)) { return CommonResult.failed("有正在同步的任务!"); } SYNC_BASIC_DATA_BLOCK_MAP.put(blockKey,0); try { LocalDate today = LocalDate.now(); LocalDate firstDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()); LocalDate lastDayOfLastMonth = today.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); SyncBasicDataDto dto = new SyncBasicDataDto(); dto.setStartDate(firstDayOfLastMonth.toString()); dto.setEndDate(lastDayOfLastMonth.toString()); dto.setLimit(1000); return syncBasicDataService.syncBasicData(dto); }catch (Exception ex){ return CommonResult.failed("同步失败!"); }finally { SYNC_BASIC_DATA_BLOCK_MAP.remove(blockKey); } } @ApiOperation("同步检验图片数据") @PostMapping("/syncInspection") public CommonResult syncInspection(@RequestBody SyncBasicDataDto syncBasicDataDto) { return webService.syncInspection(syncBasicDataDto); } @ApiOperation("联众-同步基础数据") @PostMapping("/syncLzBasicData") public CommonResult syncLzBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto){ return syncBasicDataService.syncLzBasicData(syncBasicDataDto); } @ApiOperation("同步文件数据") @PostMapping("/syncBasicFile") public CommonResult syncBasicFile(@RequestBody SyncFileDto syncFileDto){ return syncBasicFileService.syncBasicFile(syncFileDto); } /** * @description: 文件上传 * @params: files * @params: uploadBatchFileParam * @author linjj * @date: 2024/6/28 10:38 */ @ApiOperation("联众同步文件上传,删除旧的所有联众,新的增加") @PostMapping(value = "fileUploadJpg") @ResponseBody public CommonResult fileUploadJpg(@RequestPart("files") MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam) { try { return syncBasicFileService.fileUploadJpg(files, uploadJpgFileParam); } catch (Exception e) { log.error("保存失败!异常处理" + e.getMessage(), e); return CommonResult.failed("保存失败!异常处理" + e.getMessage()); } } /** * @description: 文件上传 * @params: files * @params: uploadBatchFileParam * @author linjj * @date: 2024/6/28 10:38 */ @ApiOperation("联众同步文件上传,相同名字的删除,不同的添加,用于个别单次无法上传完毕的") @PostMapping(value = "batchFileUploadJpg") @ResponseBody public CommonResult batchFileUploadJpg(@RequestPart("files") MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam) { try { return syncBasicFileService.batchFileUploadJpg(files, uploadJpgFileParam); } catch (Exception e) { log.error("保存失败!异常处理" + e.getMessage(), e); return CommonResult.failed("保存失败!异常处理" + e.getMessage()); } } /** * @description: 文件上传 * @params: files * @params: uploadBatchFileParam * @author linjj * @date: 2024/6/28 10:38 */ @ApiOperation("标准版联众同步文件上传,相同名字的删除,不同的添加,用于个别单次无法上传完毕的") @PostMapping(value = "/lianzhong/batchFileUploadJpg") @ResponseBody public CommonResult lianZhongBatchFileUploadJpg(@RequestPart("files") MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam) { try { LianZhongUploadInfo lianZhongUploadInfo = JSON.parseObject(uploadJpgFileParam.getUploadFileParams(), LianZhongUploadInfo.class); syncBasicFileService.lianZhongBatchFileUploadJpg(files, lianZhongUploadInfo); return CommonResult.success("成功!"); } catch (Exception e) { log.error("联众同步文件上传,保存失败!异常处理" + e.getMessage(), e); return CommonResult.failed("保存失败!异常处理" + e.getMessage()); } } @ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条") @GetMapping("/choose") public CommonResult choose(){ log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条"); try { syncBasicDataService.choose(); log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,已完成!"); return CommonResult.success("筛选完成!"); } catch (Exception ex) { log.error("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,出现异常!" + ex.getMessage(), ex); return CommonResult.failed("筛选异常!"); } } @ApiOperation("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条") @PostMapping("/chooseByInpatientNo") public CommonResult chooseByInpatientNo(@RequestBody List inpatientNos){ log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条"); try { syncBasicDataService.choose(inpatientNos); log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,已完成!"); return CommonResult.success("筛选完成!"); } catch (Exception ex) { log.error("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,出现异常!" + ex.getMessage(), ex); return CommonResult.failed("筛选异常!"); } } }