提交merge1.3
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright ©2023 CJB-CNIT Team. All rights reserved
|
||||
*/
|
||||
package com.openhis.quartz.task;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.core.framework.config.TenantContext;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.IEncounterAutoRollAppService;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 自动滚方定时任务(每日执行)
|
||||
*/
|
||||
@Slf4j
|
||||
@Component("AutoRollTask")
|
||||
public class AutoRollTask {
|
||||
|
||||
@Resource
|
||||
private IEncounterAutoRollAppService encounterAutoRollAppService;
|
||||
|
||||
/**
|
||||
* 护理费
|
||||
*
|
||||
* @param tenantId 租户id
|
||||
* @param orderPricing 医嘱定价来源 | 定时任务调用时传参
|
||||
*/
|
||||
public void autoRollNursingFee(Integer tenantId, String orderPricing) {
|
||||
// 设置当前线程的租户ID
|
||||
TenantContext.setCurrentTenant(tenantId);
|
||||
// 滚护理费
|
||||
encounterAutoRollAppService.autoRollNursingFee(tenantId, orderPricing);
|
||||
}
|
||||
|
||||
/**
|
||||
* 基础服务费 | 取暖费,床位费 等
|
||||
*
|
||||
* @param tenantId 租户id
|
||||
* @param orderPricing 医嘱定价来源 | 定时任务调用时传参
|
||||
*/
|
||||
public void autoRollBasicService(Integer tenantId, String orderPricing) {
|
||||
// 设置当前线程的租户ID
|
||||
TenantContext.setCurrentTenant(tenantId);
|
||||
// 滚基础服务费
|
||||
encounterAutoRollAppService.autoRollBasicService(tenantId, orderPricing);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
* Copyright ©2023 CJB-CNIT Team. All rights reserved
|
||||
*/
|
||||
package com.openhis.quartz.task;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.core.common.enums.DelFlag;
|
||||
import com.core.common.utils.AssignSeqUtil;
|
||||
import com.core.common.utils.DateUtils;
|
||||
import com.core.framework.config.TenantContext;
|
||||
import com.openhis.common.enums.AssignSeqEnum;
|
||||
import com.openhis.document.domain.DocInventoryItemStatic;
|
||||
import com.openhis.document.service.IDocInventoryItemStaticService;
|
||||
import com.openhis.web.inventorymanage.appservice.IProductDetailAppService;
|
||||
import com.openhis.web.inventorymanage.dto.ProductDetailPageDto;
|
||||
import com.openhis.web.inventorymanage.dto.ProductDetailSearchParam;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 库存备份定时任务(每日执行)
|
||||
*
|
||||
* @author zwh
|
||||
* @date 2025-11-12
|
||||
*/
|
||||
@Slf4j
|
||||
@Component("InventoryBackupTask")
|
||||
public class InventoryBackupTask {
|
||||
|
||||
Logger logger = LoggerFactory.getLogger(InventoryBackupTask.class);
|
||||
|
||||
@Resource
|
||||
private IProductDetailAppService productDetailAppService;
|
||||
|
||||
@Resource
|
||||
private IDocInventoryItemStaticService docInventoryItemStaticService;
|
||||
|
||||
@Resource
|
||||
private AssignSeqUtil assignSeqUtil;
|
||||
|
||||
private static final AtomicBoolean isRunning = new AtomicBoolean(false);
|
||||
|
||||
/**
|
||||
* 库存备份
|
||||
*
|
||||
* @param tenantId 租户id
|
||||
*/
|
||||
public void inventoryBackup(Integer tenantId) {
|
||||
|
||||
// 添加执行锁,防止重复执行
|
||||
if (!isRunning.compareAndSet(false, true)) {
|
||||
logger.warn("库存备份任务正在执行中,跳过本次执行");
|
||||
return;
|
||||
}
|
||||
|
||||
// 定时任务指定租户id
|
||||
try {
|
||||
logger.info("库存备份START:{}", DateUtils.getNowDate());
|
||||
// 设置当前线程的租户ID
|
||||
TenantContext.setCurrentTenant(tenantId);
|
||||
String now = DateUtils.dateTime();
|
||||
// 查询当天是否已经执行过一次库存备份
|
||||
List<DocInventoryItemStatic> hisDocInventoryItemStaticList = docInventoryItemStaticService
|
||||
.list(new LambdaQueryWrapper<DocInventoryItemStatic>()
|
||||
.eq(DocInventoryItemStatic::getDeleteFlag, DelFlag.NO.getCode())
|
||||
.eq(DocInventoryItemStatic::getTenantId, tenantId))
|
||||
.stream().filter(item -> item.getBusNo() != null && item.getBusNo().length() >= 11
|
||||
&& now.equals(item.getBusNo().substring(3, 11)))
|
||||
.toList();
|
||||
if (!hisDocInventoryItemStaticList.isEmpty()) {
|
||||
logger.warn("库存备份任务已执行过,跳过本次执行");
|
||||
return;
|
||||
}
|
||||
// 生成备份编号
|
||||
String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.AUTO_BACKUP_NO.getPrefix(), 2);
|
||||
// 获取库存商品明细
|
||||
Page<ProductDetailPageDto> productDetailPage = productDetailAppService
|
||||
.getProductDetailPage(new ProductDetailSearchParam(), 1, 9999, null, null).getData();
|
||||
List<DocInventoryItemStatic> docInventoryItemStaticList = new ArrayList<>();
|
||||
if (productDetailPage != null && productDetailPage.getTotal() > 0) {
|
||||
List<ProductDetailPageDto> productDetailList = productDetailPage.getRecords();
|
||||
for (ProductDetailPageDto productDetail : productDetailList) {
|
||||
DocInventoryItemStatic docInventoryItemStatic = new DocInventoryItemStatic();
|
||||
docInventoryItemStatic
|
||||
// 库存状态枚举
|
||||
.setInventoryStatusEnum(productDetail.getInventoryStatusEnum())
|
||||
// 备份编号
|
||||
.setBusNo(busNo)
|
||||
// 库存id
|
||||
.setInventoryId(productDetail.getInventoryId())
|
||||
// 医保等级
|
||||
.setChrgitmLv(productDetail.getChrgitmLv())
|
||||
// 耗材类型
|
||||
.setDevCategoryCode(productDetail.getDevCategoryCode())
|
||||
// 项目id
|
||||
.setItemId(productDetail.getItemId())
|
||||
// 项目名称
|
||||
.setName(productDetail.getItemName())
|
||||
// 项目编号
|
||||
.setItemNo(productDetail.getBusNo())
|
||||
// 药品类别
|
||||
.setMedCategoryCode(productDetail.getMedCategoryCode())
|
||||
// 项目所在表
|
||||
.setItemTable(productDetail.getItemTable())
|
||||
// 所在位置
|
||||
.setLocationId(productDetail.getLocationId())
|
||||
// 位置名称
|
||||
.setLocationName(productDetail.getLocationName())
|
||||
// 所在货位
|
||||
.setLocationStoreId(productDetail.getLocationStoreId())
|
||||
// 货位名称
|
||||
.setLocationStoreName(productDetail.getLocationStoreName())
|
||||
// 厂家
|
||||
.setManufacturerText(productDetail.getManufacturerText())
|
||||
// 最小单位
|
||||
.setMinUnitCode(productDetail.getMinUnitCode())
|
||||
// 拆零比
|
||||
.setPartPercent(productDetail.getPartPercent())
|
||||
// 采购价
|
||||
.setPrice(productDetail.getPurchasePrice())
|
||||
// 生产日期
|
||||
.setProductionDate(productDetail.getProductionDate())
|
||||
// 到期日期
|
||||
.setExpirationDate(productDetail.getExpirationDate())
|
||||
// 库存数量
|
||||
.setQuantity(productDetail.getQuantity())
|
||||
// 销售价
|
||||
.setSalePrice(productDetail.getSalePrice())
|
||||
// 采购总价
|
||||
.setTotalPrice(productDetail.getTotalPurchasePrice())
|
||||
// 销售总价
|
||||
.setTotalSalePrice(productDetail.getTotalSalePrice())
|
||||
// 规格
|
||||
.setTotalVolume(productDetail.getTotalVolume())
|
||||
// 单位
|
||||
.setUnitCode(productDetail.getUnitCode())
|
||||
// 五笔码
|
||||
.setWbStr(productDetail.getWbStr())
|
||||
// 拼音码
|
||||
.setPyStr(productDetail.getPyStr())
|
||||
// 供应商id
|
||||
.setSupplierId(productDetail.getSupplierId())
|
||||
// 供应商名称
|
||||
.setSupplierName(productDetail.getSupplierName())
|
||||
// 剩余过期天数
|
||||
.setRemainingDays(productDetail.getRemainingDays())
|
||||
// 包装数量(整数)
|
||||
.setNumber(productDetail.getNumber())
|
||||
// 包装数量(小数)
|
||||
.setRemainder(productDetail.getRemainder())
|
||||
// 医保码
|
||||
.setYbNo(productDetail.getYbNo())
|
||||
// 批准文号
|
||||
.setApprovalNumber(productDetail.getApprovalNumber())
|
||||
// 批次号
|
||||
.setLotNumber(productDetail.getLotNumber());
|
||||
docInventoryItemStatic.setTenantId(tenantId);
|
||||
docInventoryItemStaticList.add(docInventoryItemStatic);
|
||||
}
|
||||
docInventoryItemStaticService.saveBatch(docInventoryItemStaticList);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("库存备份失败:", e);
|
||||
} finally {
|
||||
// 清除线程局部变量,防止内存泄漏
|
||||
TenantContext.clear();
|
||||
// 释放执行锁
|
||||
isRunning.set(false);
|
||||
logger.info("库存备份END:{}", DateUtils.getNowDate());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
package com.openhis.quartz.task;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.core.common.utils.DateUtils;
|
||||
import com.openhis.web.inventorymanage.appservice.IProductStocktakingAppService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.core.common.utils.StringUtils;
|
||||
import com.core.framework.config.TenantContext;
|
||||
import com.openhis.administration.domain.Location;
|
||||
import com.openhis.administration.service.ILocationService;
|
||||
|
||||
/**
|
||||
* 批量盘点定时任务
|
||||
*
|
||||
* @author yuxj
|
||||
*/
|
||||
@Component("stocktakingBatchTask")
|
||||
public class StocktakingBatchTask {
|
||||
|
||||
Logger logger = LoggerFactory.getLogger(StocktakingBatchTask.class);
|
||||
@Resource
|
||||
IProductStocktakingAppService productStocktakingAppService;
|
||||
|
||||
public void autoStocktakingBatch(Integer tenantId) {
|
||||
// 定时任务指定租户id,示例
|
||||
try {
|
||||
// 在控制台打印当前时间加执行的功能名
|
||||
System.out.println("执行自动批量盘点START:" + DateUtils.getNowDate());
|
||||
logger.info("执行自动批量盘点START:" + DateUtils.getNowDate());
|
||||
|
||||
// 设置当前线程的租户ID
|
||||
TenantContext.setCurrentTenant(tenantId);
|
||||
//执行自动盘点
|
||||
productStocktakingAppService.autoStocktakingBatch();
|
||||
|
||||
logger.info("执行自动批量盘点END:" + DateUtils.getNowDate());
|
||||
// 在控制台打印当前时间加执行的功能名
|
||||
System.out.println("执行自动批量盘点END:" + DateUtils.getNowDate());
|
||||
} finally {
|
||||
// 清除线程局部变量,防止内存泄漏
|
||||
TenantContext.clear();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user