diff --git a/src/main/java/com/glxp/api/http/ErpBasicClient.java b/src/main/java/com/glxp/api/http/ErpBasicClient.java index 4a99848f8..ccb8f9e20 100644 --- a/src/main/java/com/glxp/api/http/ErpBasicClient.java +++ b/src/main/java/com/glxp/api/http/ErpBasicClient.java @@ -226,7 +226,7 @@ public class ErpBasicClient { return listBaseResponse; } catch (Exception e) { - log.error("获取患者处方信息", e); + log.error("获取患者处方信息", ExceptionUtils.getStackTrace(e)); return ResultVOUtils.error(500, "连接第三方系统接口服务出错"); } } diff --git a/src/main/java/com/glxp/api/service/collect/DownloadFactory.java b/src/main/java/com/glxp/api/service/collect/DownloadFactory.java index a57ff7f21..5c43ed1a8 100644 --- a/src/main/java/com/glxp/api/service/collect/DownloadFactory.java +++ b/src/main/java/com/glxp/api/service/collect/DownloadFactory.java @@ -19,6 +19,8 @@ import com.glxp.api.req.collect.CollectOrderRequest; import com.glxp.api.req.thrsys.FilterThrOrderRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.util.IntUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.exception.ExceptionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -29,6 +31,7 @@ import java.util.List; /** * 下载工厂 */ +@Slf4j @Service public class DownloadFactory { @@ -49,25 +52,21 @@ public class DownloadFactory { } if (busType.startsWith("YPCF")) { - return this.downloadErpOrder(collectOrderRequest,"YPCF"); - } else - if (busType.equals(BusTypeConstant.QXCF001.getBusType())) { - return this.downloadErpOrder(collectOrderRequest,BusTypeConstant.QXCF001.getBusType()); - } else - if (busType.contains("SC")) { + return this.downloadErpOrder(collectOrderRequest, "YPCF"); + } else if (busType.equals(BusTypeConstant.QXCF001.getBusType())) { + return this.downloadErpOrder(collectOrderRequest, BusTypeConstant.QXCF001.getBusType()); + } else if (busType.contains("SC")) { return ioCollectOrderService.importUdi(collectOrderRequest); - } else - { + } else { return this.downloadErpThrOrder(collectOrderRequest); } } - @Resource private ErpBasicClient erpBasicClient; - public BaseResponse downloadErpOrder(CollectOrderRequest collectOrderRequest,String busType) { + public BaseResponse downloadErpOrder(CollectOrderRequest collectOrderRequest, String busType) { int page = 1; int limit = 100; @@ -87,14 +86,11 @@ public class DownloadFactory { getSickPrescribeRequest.setPage(page); BaseResponse> baseResponse = new BaseResponse<>(); - if (busType.equals(BusTypeConstant.QXCF001.getBusType())){ + if (busType.equals(BusTypeConstant.QXCF001.getBusType())) { baseResponse = erpBasicClient.getPrescribeQx(getSickPrescribeRequest); - }else { + } else { baseResponse = erpBasicClient.getPrescribeV2(getSickPrescribeRequest); } - - // TODO: 2024/9/11 添加一张中间表(io_collect_order_origin)原始表做为转换 - if (baseResponse.getCode() == 20000) { list = baseResponse.getData().getList(); if (list == null) { @@ -107,10 +103,10 @@ public class DownloadFactory { break; } } else { - return ResultVOUtils.error(500, "下载第三方系统产品信息异常"); + return baseResponse; } } catch (Exception e) { - e.printStackTrace(); + log.error(ExceptionUtils.getStackTrace(e)); return ResultVOUtils.error(500, e.getMessage()); } @@ -121,8 +117,6 @@ public class DownloadFactory { } - - public BaseResponse downloadErpThrOrder(CollectOrderRequest collectOrderRequest) { int page = 1; int limit = 100; @@ -143,7 +137,6 @@ public class DownloadFactory { if (list == null) { return ResultVOUtils.error(500, "未查到此业务单据"); } - // TODO: 2024/9/11 2024/9/11 添加一张中间表(io_collect_order_origin)原始表做为转换 importThrOrder(list, collectOrderRequest); if ((list.size() >= limit && !baseResponse.getData().getTotal().equals(-666)) || IntUtil.value(baseResponse.getData().getTotal()) == -555) { page++; @@ -151,7 +144,7 @@ public class DownloadFactory { break; } } else { - return ResultVOUtils.error(500, "下载第三方系统产品信息异常"); + return baseResponse; } } return ResultVOUtils.success("下载成功"); @@ -209,17 +202,12 @@ public class DownloadFactory { if (exactMatches.isEmpty()) { errorMsg.append(entity.getCpmctymc()).append("字典未对照").append(";"); } -// UdiRelevanceEntity udiRelevanceEntity = udiRelevanceDao.selectOne(new LambdaQueryWrapper().eq(UdiRelevanceEntity::getUuid, exactMatches.get(0).getUuid()).last("limit 1")); -// if (udiRelevanceEntity != null) { -// collectOrderBiz.setRelId(udiRelevanceEntity.getId()); -// } } else { BasicProductsEntity basicProductsEntity = basicProductsDao.selectOne(new LambdaQueryWrapper().eq(BasicProductsEntity::getYbbm, entity.getYbbm()).last("limit 1")); if (basicProductsEntity == null || StrUtil.isEmpty(basicProductsEntity.getNameCode())) { errorMsg.append(entity.getCpmctymc()).append("字典未对照").append(";"); } } - collectOrderBiz.setTagStatus(1); collectOrderBiz.setUnTagCount(0); bizList.add(collectOrderBiz); @@ -251,7 +239,7 @@ public class DownloadFactory { ioCollectOrder.setBizList(bizList); ioCollectOrderList.add(ioCollectOrder); } - collectOrderService.importPrescribe(ioCollectOrderList, collectOrderRequest ); + collectOrderService.importPrescribe(ioCollectOrderList, collectOrderRequest); return ResultVOUtils.success("下载成功"); } return ResultVOUtils.error("下载失败"); diff --git a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java index ed5170612..cdc33303f 100644 --- a/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java +++ b/src/main/java/com/glxp/api/service/collect/IoCollectOrderService.java @@ -20,6 +20,7 @@ import com.glxp.api.constant.ConstantStatus; import com.glxp.api.constant.ConstantType; import com.glxp.api.dao.basic.UdiRelevanceDao; import com.glxp.api.dao.collect.IoCollectOrderMapper; +import com.glxp.api.dao.collect.IoCollectOrderOriginMapper; import com.glxp.api.entity.auth.AuthAdmin; import com.glxp.api.entity.auth.SysWorkplace; import com.glxp.api.entity.basic.*; @@ -74,6 +75,8 @@ public class IoCollectOrderService extends ServiceImpl().eq(IoCollectOrder::getBillNo, ioOrderEntity.getBillNo()))) { continue; } + if (collectOrderOriginMapper.exists(new LambdaQueryWrapper().eq(IoCollectOrderOrigin::getBillNo, ioOrderEntity.getBillNo()))) { + continue; + } + SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(ioOrderEntity.getAction()); if (sysWorkplaceDocumentEntity == null) continue; String mainAction = ioOrderEntity.getMainAction(); @@ -343,12 +350,6 @@ public class IoCollectOrderService extends ServiceImpl list = sysWorkplaceDocumentService.list(); - if (CollUtil.isEmpty(list)){ return ResultVOUtils.error(500, "未查到此业务单据"); } - BaseResponse response = new BaseResponse(); for (SysWorkplaceDocumentEntity item : list) { collectOrderRequest.setBusType(item.getDocumentTypeCode()); diff --git a/src/main/java/com/glxp/api/task/AsyncIoCollectOrderDownloadTask.java b/src/main/java/com/glxp/api/task/AsyncIoCollectOrderDownloadTask.java index f65456824..13190e552 100644 --- a/src/main/java/com/glxp/api/task/AsyncIoCollectOrderDownloadTask.java +++ b/src/main/java/com/glxp/api/task/AsyncIoCollectOrderDownloadTask.java @@ -2,6 +2,7 @@ package com.glxp.api.task; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; +import com.glxp.api.common.res.BaseResponse; import com.glxp.api.dao.basic.SysWorkplaceDocumentDao; import com.glxp.api.dao.schedule.ScheduledDao; import com.glxp.api.entity.collect.IoCollectSet; @@ -24,8 +25,10 @@ import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; @Slf4j @Component @@ -42,10 +45,17 @@ public class AsyncIoCollectOrderDownloadTask implements SchedulingConfigurer { IoCollectOriginService collectOriginService; @Resource IoCollectSetService collectSetService; + private static final String LOCK_KEY = "IO_COLLECT_ORDER_DOWNLOAD_LOCK"; + private static final long LOCK_TIMEOUT = 30 * 60 * 1000; // 30分钟超时时间 + + + // 使用原子布尔值作为简单的锁机制 + private final AtomicBoolean isRunning = new AtomicBoolean(false); + @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { - scheduledTaskRegistrar.addTriggerTask(() -> process(), + scheduledTaskRegistrar.addTriggerTask(() -> processWithLock(), triggerContext -> { ScheduledRequest scheduledRequest = new ScheduledRequest(); scheduledRequest.setCronName("ioCollectOrderDownloadTask"); @@ -58,6 +68,22 @@ public class AsyncIoCollectOrderDownloadTask implements SchedulingConfigurer { }); } + private void processWithLock() { + // 如果已经在运行,则跳过本次执行 + if (!isRunning.compareAndSet(false, true)) { + log.warn("上一次任务还在执行中,跳过本次执行"); + return; + } + try { + log.info("开始执行订单下载任务"); + process(); + } finally { + isRunning.set(false); + log.info("订单下载任务执行完成"); + } + } + + private void process() { //获取下载的起始时间 IoCollectSet ioCollectSet = collectSetService.getSet(); @@ -66,6 +92,7 @@ public class AsyncIoCollectOrderDownloadTask implements SchedulingConfigurer { Boolean autoDownload = ioCollectSet.getAutoDownload(); if (StrUtil.isNotBlank(startDownloadTimes) && autoDownload) { + //获取当前时间 String paramValue = startDownloadTimes; String nowTime = MsDateUtil.getDateTime(); @@ -81,14 +108,15 @@ public class AsyncIoCollectOrderDownloadTask implements SchedulingConfigurer { String documentTypeCode = sysWorkplaceDocumentResponse.getDocumentTypeCode(); collectOrderRequest.setBusType(documentTypeCode); try { - collectOriginService.downloadOrderV2(collectOrderRequest); + BaseResponse baseResponse = collectOriginService.downloadOrderV2(collectOrderRequest); + if (baseResponse.getCode() == 20000) { + ioCollectSet.setStartDownloadTime(MsDateUtil.parseDate(nowTime)); + } } catch (Exception e) { log.error("自动下载原始单据出错:{}", ExceptionUtils.getStackTrace(e)); } } } - - ioCollectSet.setStartDownloadTime(MsDateUtil.parseDate(nowTime)); collectSetService.updateById(ioCollectSet); }