diff --git a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java index 0accff6..12dda3c 100644 --- a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java +++ b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java @@ -1,6 +1,7 @@ package com.docus.demo.controller; +import com.alibaba.fastjson.JSON; import com.docus.demo.dto.SyncBasicDataDto; import com.docus.demo.dto.SyncFileDto; import com.docus.demo.dto.UploadJpgFileParam; @@ -19,6 +20,7 @@ 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("/sync") @@ -32,6 +34,8 @@ public class SyncBasicDataController { @Autowired private IWebService webService; + private static final ConcurrentHashMap SYNC_BASIC_DATA_BLOCK_MAP = new ConcurrentHashMap<>(); + @ApiOperation("去除文件不存在的数据") @PostMapping("/deleteSync") @@ -43,34 +47,68 @@ public class SyncBasicDataController { @ApiOperation("省厅-同步基础数据") @PostMapping("/syncBasicData") public CommonResult syncBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto){ - return syncBasicDataService.syncBasicData(syncBasicDataDto); + if(syncBasicDataDto == null){ + return CommonResult.failed("无效的请求参数!"); + } + String blockKey="syncBasicData:"+ JSON.toJSONString(syncBasicDataDto); + if (SYNC_BASIC_DATA_BLOCK_MAP.putIfAbsent(blockKey, 0) != null) { + return CommonResult.failed("有正在同步的任务!"); + } + 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); - 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); + String blockKey="syncSingleBasicData:"+ inpatientNo+":"+disDate; + if (SYNC_BASIC_DATA_BLOCK_MAP.putIfAbsent(blockKey, 0) != null) { + return CommonResult.failed("有正在同步的任务!"); + } + 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(){ - 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); + String blockKey="syncLastMonthBasicData"; + if (SYNC_BASIC_DATA_BLOCK_MAP.putIfAbsent(blockKey, 0) != null) { + return CommonResult.failed("有正在同步的任务!"); + } + 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); + } } @@ -83,6 +121,7 @@ public class SyncBasicDataController { @ApiOperation("联众-同步基础数据") @PostMapping("/syncLzBasicData") public CommonResult syncLzBasicData(@RequestBody SyncBasicDataDto syncBasicDataDto){ + return syncBasicDataService.syncLzBasicData(syncBasicDataDto); }