package com.zy.third.lk.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.Mat; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.param.OpenOrderCompleteParam; import com.zy.asrs.entity.result.OpenOrderCompeteResult; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.MatService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.OrderService; import com.zy.common.model.DetlDto; import com.zy.common.service.erp.ErpSqlServer; import com.zy.third.lk.entity.*; import lombok.extern.slf4j.Slf4j; 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 java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * 入库更新完成回报 */ @Slf4j @Component public class LKInTBScheduler { @Autowired private MatService matService; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private DocTypeService docTypeService; @Autowired private ErpSqlServer erpSqlServer; @Transactional @Scheduled(cron = "${erp.refreshtime}") public void pakinOrderComplete() { log.info("开始入库更新完成回报"); // 所有订单 List orders = orderService.selectList(new EntityWrapper().eq("settle", 4L)); DocType docType; for (Order order : orders) { System.out.println(order); docType = docTypeService.selectById(order.getDocType()); if (docType == null) { log.error("该订单类型不存在:" + order.getDocType()); throw new CoolException("服务器内部错误,请联系管理员"); } List orderDetls = orderDetlService.selectByOrderId(order.getId()); if (docType.getPakin() == 1) { //入库单 for (OrderDetl orderDetl : orderDetls) { insertInDet(orderDetl); } insertInHed(order); } else { //出库单 for (OrderDetl orderDetl : orderDetls) { insertOutDet(orderDetl); } insertOutHed(order); } // 修改订单状态 4.完成 ===>> 6.已上报 if (!orderService.updateSettle(order.getId(), 6L, null)) { throw new CoolException("服务器内部错误,请联系管理员"); } } } /** * 将入库单的信息插入到ERP表 * * @param orderDetl * @return */ @Transactional public boolean insertInDet(OrderDetl orderDetl) { String sqlInDetTb = "select * from lk_InDetTB where BillNo='" + orderDetl.getOrderNo() + "' and " + " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'"; List inDets = erpSqlServer.select(sqlInDetTb, InDetTB.class); String sqlInDetTbBak = "select * from lk_InDetTB_Bak where BillNo='" + orderDetl.getOrderNo() + "' and " + " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'"; List inDetBaks = erpSqlServer.select(sqlInDetTbBak, InDetTB.class); if (inDets.size() > 0 || inDetBaks.size() > 0) { log.error("该单号料号中间表表身已存在:" + orderDetl.getOrderNo() + "==>>" + orderDetl.getOrderNo()); return true; } Mat mat = matService.selectByMatnr(orderDetl.getMatnr()); HashMap content = new HashMap<>(); content.put("BillNo", "'" + orderDetl.getOrderNo() + "'"); content.put("ItemId", "'" + orderDetl.getThreeCode() + "'"); content.put("ItemCode", "'" + orderDetl.getMatnr() + "'"); content.put("proType", "'" + orderDetl.getSpecs() + "'"); content.put("remark", "'" + orderDetl.getMemo() + "'"); content.put("OrderNo", "'" + orderDetl.getOutOrderNo() + "'"); content.put("ItemBatch", "'" + orderDetl.getBatch() + "'"); content.put("iNo", orderDetl.getId()); content.put("DetId", orderDetl.getAutoId()); content.put("MainNum", orderDetl.getQty()); content.put("LKName", "'中扬二期'"); int insert = erpSqlServer.insert(InDetTB.class, content); if (insert == 1) { log.info("入库单表身回传成功:" + content.toString()); return true; } else { log.error("入库回传失败,实体类打印:" + content.toString()); return false; } } /** * 将入库单的详情信息插入到ERP表 * * @param order * @return */ @Transactional public boolean insertInHed(Order order) { String sqlInHedTb = "select * from lk_InHedTB where LKName='中扬二期' and BillNo='" + order.getOrderNo() + "'"; List outHeds = erpSqlServer.select(sqlInHedTb, InHedTB.class); String sqlInHedTbBak = "select * from lk_InHedTB_Bak where LKName='中扬二期' and BillNo='" + order.getOrderNo() + "'"; List inHedBaks = erpSqlServer.select(sqlInHedTbBak, InHedTB.class); if (outHeds.size() > 0 || inHedBaks.size() > 0) { log.error("该单号料号中间表表头已存在:" + order.getOrderNo()); return true; } HashMap content = new HashMap<>(); content.put("BillNo", "'" + order.getOrderNo() + "'"); content.put("IoKindID", "'" + order.getDocType() + "'"); content.put("ObjectId", "'" + order.getCstmr() + "'"); content.put("ObjectName", "'" + order.getCstmrName() + "'"); content.put("Remark", "'" + order.getMemo() + "'"); content.put("LKName", "'中扬'"); int insert = erpSqlServer.insert(InHedTB.class, content); String sql = "UPDATE lk_InHedTB SET bPass = 1, LKName='中扬二期' WHERE BillNo = '" + order.getOrderNo() + "'"; int update = erpSqlServer.update(sql); if (update == 1) { log.info("入库单表头回传成功:" + content.toString()); return true; } else { log.error("入库单表头回传失败:" + content.toString()); return false; } } /** * 将入库单的信息插入到ERP表 * * @param orderDetl * @return */ @Transactional public boolean insertOutDet(OrderDetl orderDetl) { String sqlInDetTb = "select * from lk_OutDetTB where BillNo='" + orderDetl.getOrderNo() + "' and " + " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'"; List inDets = erpSqlServer.select(sqlInDetTb, OutDetTB.class); String sqlInDetTbBak = "select * from lk_OutDetTB_Bak where BillNo='" + orderDetl.getOrderNo() + "' and " + " ItemId='" + orderDetl.getMatnr() + "' and ItemBatch='" + orderDetl.getBatch() + "' and proType='" + orderDetl.getSpecs() + "'"; List inDetBaks = erpSqlServer.select(sqlInDetTbBak, OutDetTBBak.class); if (inDets.size() > 0 || inDetBaks.size() > 0) { log.error("该单号料号中间表表身已存在:" + orderDetl.getOrderNo() + "==>>" + orderDetl.getOrderNo()); return true; } Mat mat = matService.selectByMatnr(orderDetl.getMatnr()); HashMap content = new HashMap<>(); content.put("BillNo", "'" + orderDetl.getOrderNo() + "'"); content.put("ItemId", "'" + orderDetl.getThreeCode() + "'"); content.put("ItemCode", "'" + orderDetl.getMatnr() + "'"); content.put("proType", "'" + orderDetl.getSpecs() + "'"); content.put("remark", "'" + orderDetl.getMemo() + "'"); content.put("OrderNo", "'" + orderDetl.getOutOrderNo() + "'"); content.put("ItemBatch", "'" + orderDetl.getBatch() + "'"); content.put("iNo", orderDetl.getId()); content.put("DetId", orderDetl.getAutoId()); content.put("MainNum", orderDetl.getQty()); content.put("LKName", "'中扬二期'"); int insert = erpSqlServer.insert(InDetTB.class, content); if (insert == 1) { log.info("入库单表身回传成功:" + content.toString()); return true; } else { log.error("入库回传失败,实体类打印:" + content.toString()); return false; } } /** * 将入库单的详情信息插入到ERP表 * * @param order * @return */ @Transactional public boolean insertOutHed(Order order) { String sqlInHedTb = "select * from lk_OutHedTB where LKName='中扬二期' and BillNo='" + order.getOrderNo() + "'"; List outHeds = erpSqlServer.select(sqlInHedTb, OutHedTB.class); String sqlInHedTbBak = "select * from lk_OutHedTB_Bak where LKName='中扬二期' and BillNo='" + order.getOrderNo() + "'"; List inHedBaks = erpSqlServer.select(sqlInHedTbBak, OutHedTBBak.class); if (outHeds.size() > 0 || inHedBaks.size() > 0) { log.error("该单号料号中间表表头已存在:" + order.getOrderNo()); return true; } HashMap content = new HashMap<>(); content.put("BillNo", "'" + order.getOrderNo() + "'"); content.put("IoKindID", "'" + order.getDocType() + "'"); content.put("ObjectId", "'" + order.getCstmr() + "'"); content.put("ObjectName", "'" + order.getCstmrName() + "'"); content.put("Remark", "'" + order.getMemo() + "'"); content.put("LKName", "'中扬'"); int insert = erpSqlServer.insert(InHedTB.class, content); String sql = "UPDATE lk_InHedTB SET bPass = 1, LKName='中扬二期' WHERE BillNo = '" + order.getOrderNo() + "'"; int update = erpSqlServer.update(sql); if (update == 1) { log.info("入库单表头回传成功:" + content.toString()); return true; } else { log.error("入库单表头回传失败:" + content.toString()); return false; } } }