cl
7 天以前 66d2950e1a594bcb50c34875d6a87a3ab367056a
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AsnOrderLogSchedule.java
@@ -15,7 +15,9 @@
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.StockItemServiceImpl;
import com.vincent.rsf.server.manager.service.impl.StockServiceImpl;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
import com.vincent.rsf.server.system.entity.User;
import com.vincent.rsf.server.system.service.ConfigService;
import com.vincent.rsf.server.system.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -64,6 +66,9 @@
    private AsnOrderMapper asnOrderMapper;
    @Autowired
    private AsnOrderItemMapper asnOrderItemMapper;
    @Autowired
    private ConfigService configService;
    /**
     * @param
@@ -253,7 +258,7 @@
        }
    }
    /** 删除原入库/出库通知单及明细(转入历史后调用) */
    /** 转入历史后对原单及明细逻辑删除 */
    private void removeOriginalOrderAndItems(WkOrder order) {
        if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()))) {
            throw new CoolException("原单据明细删除失败!!");
@@ -263,12 +268,13 @@
        }
    }
    /** 每月1号凌晨执行:物理删除上上个月之前已被逻辑删除的入库/出库通知单及明细 */
    /** 逻辑删除超过配置天数({@link GlobalConfigCode#ASN_ORDER_LOGIC_DELETED_PURGE_AFTER_DAYS},默认 60)则物理清理原单及明细 */
    @Scheduled(cron = "0 0 0 1 * ?")
    @Transactional(rollbackFor = Exception.class)
    public void physicalDeleteLogicDeletedOrders() {
        LocalDate startOfTwoMonthsAgo = LocalDate.now().minusMonths(2).withDayOfMonth(1);
        Date before = Date.from(startOfTwoMonthsAgo.atStartOfDay(ZoneId.systemDefault()).toInstant());
        int keepDays = resolvePurgeAfterDays();
        LocalDate cutoff = LocalDate.now().minusDays(keepDays);
        Date before = Date.from(cutoff.atStartOfDay(ZoneId.systemDefault()).toInstant());
        List<Long> ids = asnOrderMapper.selectLogicDeletedOrderIdsBefore(before);
        if (ids == null || ids.isEmpty()) {
            return;
@@ -280,6 +286,17 @@
            asnOrderItemMapper.physicalDeleteByOrderIds(batch);
            asnOrderMapper.physicalDeleteByIds(batch);
        }
        log.info("物理删除上上个月之前已逻辑删除的原单及明细,订单数:{}", ids.size());
        log.info("物理删除已逻辑删除超过{}天的原单及明细,订单数:{}", keepDays, ids.size());
    }
    private int resolvePurgeAfterDays() {
        try {
            Integer v = configService.getVal(GlobalConfigCode.ASN_ORDER_LOGIC_DELETED_PURGE_AFTER_DAYS, Integer.class);
            if (v != null && v >= 1) {
                return v;
            }
        } catch (Exception ignored) {
        }
        return 30;
    }
}