package com.zy.asrs.task.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; import com.zy.asrs.service.impl.OrderDetlPakinServiceImpl; import com.zy.asrs.service.impl.OrderPakinServiceImpl; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.utils.OrderInAndOutUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.Date; import java.util.List; @Service @Slf4j public class OrderMoveHistoryHandler extends AbstractHandler { @Autowired private OrderService orderService; @Autowired private OrderPakinService orderPakinService; @Autowired private OrderPakoutService orderPakoutService; @Autowired private OrderDetlService orderDetlService; @Autowired private OrderDetlPakinServiceImpl orderDetlPakinService; @Autowired private OrderDetlPakoutService orderDetlPakoutService; @Autowired private JdbcTemplate jdbcTemplate; public ReturnT start(){ // List settleEqual6 = orderService.selectList(new EntityWrapper() // .eq("settle", 6)); List settleEqual6 = OrderInAndOutUtil.selectBySettle(null, 6L); for (Order order : settleEqual6) { // List orderDetls = orderDetlService.selectList(new EntityWrapper() // .eq("order_no", order.getOrderNo())); List orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); moveBoth(order,orderDetls); log.info("已完成单据移动至历史表成功 =====>" +order); } return SUCCESS; } public ReturnT startOrder(){ List settleEqual6 = orderService.selectList(new EntityWrapper() .eq("settle", 6)); // List settleEqual6 = OrderInAndOutUtil.selectBySettle(null, 6L); for (Order order : settleEqual6) { List orderDetls = orderDetlService.selectList(new EntityWrapper() .eq("order_no", order.getOrderNo())); // List orderDetls = OrderInAndOutUtil.selectByOrderId(order.getPakinPakoutStatus$(), order.getId()); moveBothOrder(order,orderDetls); log.info("已完成单据移动至历史表成功 =====>" +order); } return SUCCESS; } /** * 每天 0 点将未执行的出库单转入历史档,并标记为系统自动删除。 */ @Transactional(rollbackFor = Exception.class) public ReturnT startPakoutAutoArchive() { try { Integer orderCount = jdbcTemplate.queryForObject( "select count(1) from man_order_pakout where settle = 1", Integer.class ); if (orderCount == null || orderCount == 0) { return SUCCESS; } int detailLogCount = jdbcTemplate.update( "insert into man_order_detl_log_pakout " + "select * from man_order_detl_pakout " + "where order_id in (select id from man_order_pakout where settle = 1)" ); jdbcTemplate.update( "update logDetl " + "set logDetl.memo = case " + "when logDetl.memo is null or logDetl.memo = '' " + "then '系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " + "else logDetl.memo + ';系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " + "end, " + "logDetl.update_by = 0, " + "logDetl.update_time = getdate() " + "from man_order_detl_log_pakout logDetl " + "where exists (" + "select 1 " + "from man_order_detl_pakout detl " + "inner join man_order_pakout pakout on detl.order_id = pakout.id " + "where pakout.settle = 1 and detl.id = logDetl.id)" ); int detailDeleteCount = jdbcTemplate.update( "delete from man_order_detl_pakout " + "where order_id in (select id from man_order_pakout where settle = 1)" ); int orderLogCount = jdbcTemplate.update( "insert into man_order_log_pakout " + "select * from man_order_pakout " + "where settle = 1" ); jdbcTemplate.update( "update logOrder " + "set logOrder.memo = case " + "when logOrder.memo is null or logOrder.memo = '' " + "then '系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " + "else logOrder.memo + ';系统0点自动删除迁移[' + convert(varchar(19), getdate(), 120) + ']' " + "end, " + "logOrder.update_by = 0, " + "logOrder.update_time = getdate() " + "from man_order_log_pakout logOrder " + "where exists (" + "select 1 " + "from man_order_pakout pakout " + "where pakout.settle = 1 and pakout.id = logOrder.id)" ); int orderDeleteCount = jdbcTemplate.update( "delete from man_order_pakout where settle = 1" ); log.info( "0点自动迁移出库单至历史档完成, 订单数={}, 订单历史数={}, 明细历史数={}, 订单删除数={}, 明细删除数={}", orderCount, orderLogCount, detailLogCount, orderDeleteCount, detailDeleteCount ); return SUCCESS; } catch (Exception e) { log.error("0点自动迁移出库单至历史档失败", e); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg(e.getMessage()); } } private void moveBoth(Order order, List orderDetls){ Date now = new Date(); if (!Cools.isEmpty(orderDetls)) { for (OrderDetl orderDetl : orderDetls) { orderDetl.setUpdateBy(0L); orderDetl.setUpdateTime(now); // orderDetlService.addToLogTable(orderDetl); OrderInAndOutUtil.addToLogTableOrderDetl(order.getPakinPakoutStatus$(),orderDetl); if (order.getPakinPakoutStatus() == 1){ orderDetlPakinService.delete(new EntityWrapper() .eq("id",orderDetl.getId())); } else { orderDetlPakoutService.delete(new EntityWrapper() .eq("id",orderDetl.getId())); } } } if (!Cools.isEmpty(order)){ order.setUpdateBy(0L); order.setUpdateTime(now); // orderService.addToLogTable(order); OrderInAndOutUtil.addToLogTableOrder(order.getPakinPakoutStatus$(),order); // orderService.delete(new EntityWrapper() // .eq("id",order.getId())); if (order.getPakinPakoutStatus() == 1){ orderPakinService.delete(new EntityWrapper() .eq("id",order.getId())); } else { orderPakoutService.delete(new EntityWrapper() .eq("id",order.getId())); } } } private void moveBothOrder(Order order, List orderDetls){ Date now = new Date(); if (!Cools.isEmpty(orderDetls)) { for (OrderDetl orderDetl : orderDetls) { orderDetl.setUpdateBy(0L); orderDetl.setUpdateTime(now); orderDetlService.addToLogTable(orderDetl); orderDetlService.delete(new EntityWrapper() .eq("id",orderDetl.getId())); } } if (!Cools.isEmpty(order)){ order.setUpdateBy(0L); order.setUpdateTime(now); orderService.addToLogTable(order); orderService.delete(new EntityWrapper() .eq("id",order.getId())); } } }