package com.zy.asrs.wms.asrs.timer; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy; import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType; import com.zy.asrs.wms.asrs.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.List; @Component public class OrderTimer { @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private OrderDetlFieldService orderDetlFieldService; @Autowired private OrderLogService orderLogService; @Autowired private OrderDetlLogService orderDetlLogService; @Autowired private OrderDetlFieldLogService orderDetlFieldLogService; // @Scheduled(cron = "0/3 * * * * ? ") @Transactional public void orderToHistory() { InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build()); try { List list = orderService.list(new LambdaQueryWrapper().eq(Order::getOrderSettle, OrderSettleType.COMPLETE.val())); if (list.isEmpty()) { return; } for (Order order : list) { //转历史档 OrderLog orderLog = new OrderLog(); orderLog.sync(order); if (!orderLogService.save(orderLog)) { throw new CoolException("订单转历史档失败"); } //订单明细转历史档 List orderDetls = orderDetlService.list(new LambdaQueryWrapper().eq(OrderDetl::getOrderId, order.getId())); for (OrderDetl orderDetl : orderDetls) { OrderDetlLog orderDetlLog = new OrderDetlLog(); orderDetlLog.sync(orderDetl); if(!orderDetlLogService.save(orderDetlLog)) { throw new CoolException("订单明细转历史档失败"); } //明细扩展字段转历史档 List orderDetlFields = orderDetlFieldService.list(new LambdaQueryWrapper().eq(OrderDetlField::getDetlId, orderDetl.getId())); for (OrderDetlField orderDetlField : orderDetlFields) { OrderDetlFieldLog orderDetlFieldLog = new OrderDetlFieldLog(); orderDetlFieldLog.sync(orderDetlField); if(!orderDetlFieldLogService.save(orderDetlFieldLog)) { throw new CoolException("明细扩展字段转历史档失败"); } //删除明细扩展字段 if (!orderDetlFieldService.removeById(orderDetlField.getId())) { throw new CoolException("删除明细扩展字段失败"); } } //删除订单明细 if (!orderDetlService.removeById(orderDetl.getId())) { throw new CoolException("删除订单明细失败"); } } //删除订单 if (!orderService.removeById(order.getId())) { throw new CoolException("删除订单失败"); } } } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); }finally { InterceptorIgnoreHelper.clearIgnoreStrategy(); } } }