提交merge1.3

This commit is contained in:
2025-12-27 15:30:25 +08:00
parent 8c607c8749
commit 088861f66e
1245 changed files with 220442 additions and 77616 deletions

View File

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

View File

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

View File

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