You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jp2demo/src/main/java/com/docus/demo/controller/SyncBasicDataController.java

206 lines
8.3 KiB
Java

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;
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("/sync")
@Slf4j
public class SyncBasicDataController {
@Autowired
private ISyncBasicDataService syncBasicDataService;
@Autowired
private ISyncBasicFileService syncBasicFileService;
@Autowired
private IWebService webService;
private static final ConcurrentHashMap<String,Object> 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.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);
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(){
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);
}
}
@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());
}
}
@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<String> inpatientNos){
log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条");
try {
syncBasicDataService.choose(inpatientNos);
log.info("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,已完成!");
return CommonResult.success("筛选完成!");
} catch (Exception ex) {
log.error("根据 病案号、姓名、出院日期、住院次数 进行筛选数据保留一条,出现异常!" + ex.getMessage(), ex);
return CommonResult.failed("筛选异常!");
}
}
}