现场管理下载单据优化,加锁,唯一判断

dev_2.5_ocean
yewj 4 months ago
parent 8ab0232517
commit 89a4bc90fa

@ -226,7 +226,7 @@ public class ErpBasicClient {
return listBaseResponse;
} catch (Exception e) {
log.error("获取患者处方信息", e);
log.error("获取患者处方信息", ExceptionUtils.getStackTrace(e));
return ResultVOUtils.error(500, "连接第三方系统接口服务出错");
}
}

@ -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<PageSimpleResponse<IoCollectOrder>> 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<UdiRelevanceEntity>().eq(UdiRelevanceEntity::getUuid, exactMatches.get(0).getUuid()).last("limit 1"));
// if (udiRelevanceEntity != null) {
// collectOrderBiz.setRelId(udiRelevanceEntity.getId());
// }
} else {
BasicProductsEntity basicProductsEntity = basicProductsDao.selectOne(new LambdaQueryWrapper<BasicProductsEntity>().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("下载失败");

@ -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<IoCollectOrderMapper, IoC
@Resource
IoCollectOrderMapper collectOrderMapper;
@Resource
IoCollectOrderOriginMapper collectOrderOriginMapper;
@Resource
IoCollectOrderCodeManService ioCollectOrderCodeManService;
@Resource
IoOrderService orderService;
@ -281,6 +284,10 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
if (collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, ioOrderEntity.getBillNo()))) {
continue;
}
if (collectOrderOriginMapper.exists(new LambdaQueryWrapper<IoCollectOrderOrigin>().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<IoCollectOrderMapper, IoC
}
collectOrderCodeManService.saveBatch(collectOrderCodeManList);
}
// if (!collectOrder.getTagStatus().equals(4) &&)) {//没出现耗材不匹配 且 开启了自动转成待处理单据
// collectOrder.setTagStatus(1);
// allotCollects.add(collectOrder);
// allotCollectBizs.addAll(bizList);
// }
}
if (CollUtil.isNotEmpty(allotCollects)) {
@ -590,21 +591,6 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
if (CollUtil.isNotEmpty(allotCollects)) {
saveBatch(allotCollects);
collectOrderBizService.saveBatch(allotCollectBizs);
// if (IntUtil.value(collectSet.getAutoFinishOrder())) {
// for (IoCollectOrder collectOrder : allotCollects) {
// SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(addr);
// if (IntUtil.value(sysWorkplaceDocumentEntity.getAutoTag()) == 1 && IntUtil.value(collectOrder.getTagStatus()) == 1) {
// boolean b = splitFifoCodeService.lockInventoryByOrder(collectOrder.getBillNo(), 1);
// if (b && sysWorkplaceDocumentEntity.getAutoHandle()) {
// //单据是否自动完成 是 调用 完成
// AuthAdmin user = customerService.getUserBean();
// collectOrderRequest.setUpdateUser(user.getId());
// collectOrderRequest.setBusType(addr);
// finishOrder(collectOrderRequest, user, true);
// }
// }
// }
// }
}
}
}

@ -62,11 +62,9 @@ public class IoCollectOriginService {
if (StrUtil.isBlank(busType)) {
//下载工位下的类型
List<SysWorkplaceDocumentEntity> list = sysWorkplaceDocumentService.list();
if (CollUtil.isEmpty(list)){
return ResultVOUtils.error(500, "未查到此业务单据");
}
BaseResponse response = new BaseResponse();
for (SysWorkplaceDocumentEntity item : list) {
collectOrderRequest.setBusType(item.getDocumentTypeCode());

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

Loading…
Cancel
Save