| | |
| | | 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; |
| | |
| | | @Autowired |
| | | private AsnOrderItemMapper asnOrderItemMapper; |
| | | |
| | | @Autowired |
| | | private ConfigService configService; |
| | | |
| | | /** |
| | | * @param |
| | | * @return |
| | |
| | | * @description 删除已完成订单加入Log表 |
| | | * @time 2025/3/19 19:09 |
| | | */ |
| | | @Scheduled(cron = "0 0 5 * * ?") |
| | | @Scheduled(cron = "0 */5 * * * ?") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void InStockToLog() { |
| | | List<WkOrder> wkOrders = asnOrderService.list(new LambdaQueryWrapper<WkOrder>() |
| | |
| | | } |
| | | } |
| | | |
| | | /** 删除原入库/出库通知单及明细(转入历史后调用) */ |
| | | /** 转入历史后对原单及明细逻辑删除 */ |
| | | private void removeOriginalOrderAndItems(WkOrder order) { |
| | | if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, order.getId()))) { |
| | | throw new CoolException("原单据明细删除失败!!"); |
| | |
| | | } |
| | | } |
| | | |
| | | /** 每月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; |
| | |
| | | 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; |
| | | } |
| | | } |