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

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

@ -226,7 +226,7 @@ public class ErpBasicClient {
return listBaseResponse; return listBaseResponse;
} catch (Exception e) { } catch (Exception e) {
log.error("获取患者处方信息", e); log.error("获取患者处方信息", ExceptionUtils.getStackTrace(e));
return ResultVOUtils.error(500, "连接第三方系统接口服务出错"); 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.req.thrsys.FilterThrOrderRequest;
import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.PageSimpleResponse;
import com.glxp.api.util.IntUtil; import com.glxp.api.util.IntUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -29,6 +31,7 @@ import java.util.List;
/** /**
* *
*/ */
@Slf4j
@Service @Service
public class DownloadFactory { public class DownloadFactory {
@ -50,20 +53,16 @@ public class DownloadFactory {
if (busType.startsWith("YPCF")) { if (busType.startsWith("YPCF")) {
return this.downloadErpOrder(collectOrderRequest, "YPCF"); return this.downloadErpOrder(collectOrderRequest, "YPCF");
} else } else if (busType.equals(BusTypeConstant.QXCF001.getBusType())) {
if (busType.equals(BusTypeConstant.QXCF001.getBusType())) {
return this.downloadErpOrder(collectOrderRequest, BusTypeConstant.QXCF001.getBusType()); return this.downloadErpOrder(collectOrderRequest, BusTypeConstant.QXCF001.getBusType());
} else } else if (busType.contains("SC")) {
if (busType.contains("SC")) {
return ioCollectOrderService.importUdi(collectOrderRequest); return ioCollectOrderService.importUdi(collectOrderRequest);
} else } else {
{
return this.downloadErpThrOrder(collectOrderRequest); return this.downloadErpThrOrder(collectOrderRequest);
} }
} }
@Resource @Resource
private ErpBasicClient erpBasicClient; private ErpBasicClient erpBasicClient;
@ -92,9 +91,6 @@ public class DownloadFactory {
} else { } else {
baseResponse = erpBasicClient.getPrescribeV2(getSickPrescribeRequest); baseResponse = erpBasicClient.getPrescribeV2(getSickPrescribeRequest);
} }
// TODO: 2024/9/11 添加一张中间表io_collect_order_origin原始表做为转换
if (baseResponse.getCode() == 20000) { if (baseResponse.getCode() == 20000) {
list = baseResponse.getData().getList(); list = baseResponse.getData().getList();
if (list == null) { if (list == null) {
@ -107,10 +103,10 @@ public class DownloadFactory {
break; break;
} }
} else { } else {
return ResultVOUtils.error(500, "下载第三方系统产品信息异常"); return baseResponse;
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error(ExceptionUtils.getStackTrace(e));
return ResultVOUtils.error(500, e.getMessage()); return ResultVOUtils.error(500, e.getMessage());
} }
@ -121,8 +117,6 @@ public class DownloadFactory {
} }
public BaseResponse downloadErpThrOrder(CollectOrderRequest collectOrderRequest) { public BaseResponse downloadErpThrOrder(CollectOrderRequest collectOrderRequest) {
int page = 1; int page = 1;
int limit = 100; int limit = 100;
@ -143,7 +137,6 @@ public class DownloadFactory {
if (list == null) { if (list == null) {
return ResultVOUtils.error(500, "未查到此业务单据"); return ResultVOUtils.error(500, "未查到此业务单据");
} }
// TODO: 2024/9/11 2024/9/11 添加一张中间表io_collect_order_origin原始表做为转换
importThrOrder(list, collectOrderRequest); importThrOrder(list, collectOrderRequest);
if ((list.size() >= limit && !baseResponse.getData().getTotal().equals(-666)) || IntUtil.value(baseResponse.getData().getTotal()) == -555) { if ((list.size() >= limit && !baseResponse.getData().getTotal().equals(-666)) || IntUtil.value(baseResponse.getData().getTotal()) == -555) {
page++; page++;
@ -151,7 +144,7 @@ public class DownloadFactory {
break; break;
} }
} else { } else {
return ResultVOUtils.error(500, "下载第三方系统产品信息异常"); return baseResponse;
} }
} }
return ResultVOUtils.success("下载成功"); return ResultVOUtils.success("下载成功");
@ -209,17 +202,12 @@ public class DownloadFactory {
if (exactMatches.isEmpty()) { if (exactMatches.isEmpty()) {
errorMsg.append(entity.getCpmctymc()).append("字典未对照").append(";"); 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 { } else {
BasicProductsEntity basicProductsEntity = basicProductsDao.selectOne(new LambdaQueryWrapper<BasicProductsEntity>().eq(BasicProductsEntity::getYbbm, entity.getYbbm()).last("limit 1")); BasicProductsEntity basicProductsEntity = basicProductsDao.selectOne(new LambdaQueryWrapper<BasicProductsEntity>().eq(BasicProductsEntity::getYbbm, entity.getYbbm()).last("limit 1"));
if (basicProductsEntity == null || StrUtil.isEmpty(basicProductsEntity.getNameCode())) { if (basicProductsEntity == null || StrUtil.isEmpty(basicProductsEntity.getNameCode())) {
errorMsg.append(entity.getCpmctymc()).append("字典未对照").append(";"); errorMsg.append(entity.getCpmctymc()).append("字典未对照").append(";");
} }
} }
collectOrderBiz.setTagStatus(1); collectOrderBiz.setTagStatus(1);
collectOrderBiz.setUnTagCount(0); collectOrderBiz.setUnTagCount(0);
bizList.add(collectOrderBiz); bizList.add(collectOrderBiz);

@ -20,6 +20,7 @@ import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.constant.ConstantType; import com.glxp.api.constant.ConstantType;
import com.glxp.api.dao.basic.UdiRelevanceDao; import com.glxp.api.dao.basic.UdiRelevanceDao;
import com.glxp.api.dao.collect.IoCollectOrderMapper; 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.AuthAdmin;
import com.glxp.api.entity.auth.SysWorkplace; import com.glxp.api.entity.auth.SysWorkplace;
import com.glxp.api.entity.basic.*; import com.glxp.api.entity.basic.*;
@ -74,6 +75,8 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
@Resource @Resource
IoCollectOrderMapper collectOrderMapper; IoCollectOrderMapper collectOrderMapper;
@Resource @Resource
IoCollectOrderOriginMapper collectOrderOriginMapper;
@Resource
IoCollectOrderCodeManService ioCollectOrderCodeManService; IoCollectOrderCodeManService ioCollectOrderCodeManService;
@Resource @Resource
IoOrderService orderService; IoOrderService orderService;
@ -281,6 +284,10 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
if (collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, ioOrderEntity.getBillNo()))) { if (collectOrderMapper.exists(new LambdaQueryWrapper<IoCollectOrder>().eq(IoCollectOrder::getBillNo, ioOrderEntity.getBillNo()))) {
continue; continue;
} }
if (collectOrderOriginMapper.exists(new LambdaQueryWrapper<IoCollectOrderOrigin>().eq(IoCollectOrderOrigin::getBillNo, ioOrderEntity.getBillNo()))) {
continue;
}
SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(ioOrderEntity.getAction()); SysWorkplaceDocumentEntity sysWorkplaceDocumentEntity = sysWorkplaceDocumentService.findByBusType(ioOrderEntity.getAction());
if (sysWorkplaceDocumentEntity == null) continue; if (sysWorkplaceDocumentEntity == null) continue;
String mainAction = ioOrderEntity.getMainAction(); String mainAction = ioOrderEntity.getMainAction();
@ -343,12 +350,6 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
} }
collectOrderCodeManService.saveBatch(collectOrderCodeManList); collectOrderCodeManService.saveBatch(collectOrderCodeManList);
} }
// if (!collectOrder.getTagStatus().equals(4) &&)) {//没出现耗材不匹配 且 开启了自动转成待处理单据
// collectOrder.setTagStatus(1);
// allotCollects.add(collectOrder);
// allotCollectBizs.addAll(bizList);
// }
} }
if (CollUtil.isNotEmpty(allotCollects)) { if (CollUtil.isNotEmpty(allotCollects)) {
@ -590,21 +591,6 @@ public class IoCollectOrderService extends ServiceImpl<IoCollectOrderMapper, IoC
if (CollUtil.isNotEmpty(allotCollects)) { if (CollUtil.isNotEmpty(allotCollects)) {
saveBatch(allotCollects); saveBatch(allotCollects);
collectOrderBizService.saveBatch(allotCollectBizs); 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)) { if (StrUtil.isBlank(busType)) {
//下载工位下的类型 //下载工位下的类型
List<SysWorkplaceDocumentEntity> list = sysWorkplaceDocumentService.list(); List<SysWorkplaceDocumentEntity> list = sysWorkplaceDocumentService.list();
if (CollUtil.isEmpty(list)){ if (CollUtil.isEmpty(list)){
return ResultVOUtils.error(500, "未查到此业务单据"); return ResultVOUtils.error(500, "未查到此业务单据");
} }
BaseResponse response = new BaseResponse(); BaseResponse response = new BaseResponse();
for (SysWorkplaceDocumentEntity item : list) { for (SysWorkplaceDocumentEntity item : list) {
collectOrderRequest.setBusType(item.getDocumentTypeCode()); collectOrderRequest.setBusType(item.getDocumentTypeCode());

@ -2,6 +2,7 @@ package com.glxp.api.task;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; 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.basic.SysWorkplaceDocumentDao;
import com.glxp.api.dao.schedule.ScheduledDao; import com.glxp.api.dao.schedule.ScheduledDao;
import com.glxp.api.entity.collect.IoCollectSet; import com.glxp.api.entity.collect.IoCollectSet;
@ -24,8 +25,10 @@ import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
@Slf4j @Slf4j
@Component @Component
@ -42,10 +45,17 @@ public class AsyncIoCollectOrderDownloadTask implements SchedulingConfigurer {
IoCollectOriginService collectOriginService; IoCollectOriginService collectOriginService;
@Resource @Resource
IoCollectSetService collectSetService; 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 @Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(() -> process(), scheduledTaskRegistrar.addTriggerTask(() -> processWithLock(),
triggerContext -> { triggerContext -> {
ScheduledRequest scheduledRequest = new ScheduledRequest(); ScheduledRequest scheduledRequest = new ScheduledRequest();
scheduledRequest.setCronName("ioCollectOrderDownloadTask"); 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() { private void process() {
//获取下载的起始时间 //获取下载的起始时间
IoCollectSet ioCollectSet = collectSetService.getSet(); IoCollectSet ioCollectSet = collectSetService.getSet();
@ -66,6 +92,7 @@ public class AsyncIoCollectOrderDownloadTask implements SchedulingConfigurer {
Boolean autoDownload = ioCollectSet.getAutoDownload(); Boolean autoDownload = ioCollectSet.getAutoDownload();
if (StrUtil.isNotBlank(startDownloadTimes) && autoDownload) { if (StrUtil.isNotBlank(startDownloadTimes) && autoDownload) {
//获取当前时间 //获取当前时间
String paramValue = startDownloadTimes; String paramValue = startDownloadTimes;
String nowTime = MsDateUtil.getDateTime(); String nowTime = MsDateUtil.getDateTime();
@ -81,14 +108,15 @@ public class AsyncIoCollectOrderDownloadTask implements SchedulingConfigurer {
String documentTypeCode = sysWorkplaceDocumentResponse.getDocumentTypeCode(); String documentTypeCode = sysWorkplaceDocumentResponse.getDocumentTypeCode();
collectOrderRequest.setBusType(documentTypeCode); collectOrderRequest.setBusType(documentTypeCode);
try { try {
collectOriginService.downloadOrderV2(collectOrderRequest); BaseResponse baseResponse = collectOriginService.downloadOrderV2(collectOrderRequest);
if (baseResponse.getCode() == 20000) {
ioCollectSet.setStartDownloadTime(MsDateUtil.parseDate(nowTime));
}
} catch (Exception e) { } catch (Exception e) {
log.error("自动下载原始单据出错:{}", ExceptionUtils.getStackTrace(e)); log.error("自动下载原始单据出错:{}", ExceptionUtils.getStackTrace(e));
} }
} }
} }
ioCollectSet.setStartDownloadTime(MsDateUtil.parseDate(nowTime));
collectSetService.updateById(ioCollectSet); collectSetService.updateById(ioCollectSet);
} }

Loading…
Cancel
Save