fix: 同步基础数据并发问题

jp2demo1.0
wyb 7 months ago
parent a6d5da1f95
commit d58c1dba35

@ -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<String,Object> 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);
}

Loading…
Cancel
Save