package com.zy.ints.task.scheduler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.DocTypeService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.OrderService; import com.zy.ints.entity.LkDetTb; import com.zy.ints.entity.LkDetTbBak; import com.zy.ints.erp.ErpSqlServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; /** * erp任务控制器 * Created by vincent on 2020/11/27 */ @Slf4j @Component public class LkDetTbScheduler { /** * ERP接口是否启用 */ @Value("${erp.enabled}") private Boolean erpEnabled; @Value("${erp.useName.ip}") private String ip; @Autowired private ApiLogService apiLogService; @Autowired private ErpSqlServer erpSqlServer; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private DocTypeService docTypeService; /** * 上报入出库完结订单信息 */ @Scheduled(cron = "${erp.refreshtime}") public void reportOrder() { if (!erpEnabled) return; String sqlSelectLkDetTb = "select bill_no as billNo,prd_no as prdNo,iokindid,add_id as addId,qty,prd_mark as prdMark,wh,billdate,status,temp1,temp2,temp3 from lk_det_tb where 1=1"; String sqlSelectLkDetTbBak = "select bill_no as billNo,prd_no as prdNo,iokindid,add_id as addId,qty,prd_mark as prdMark,wh,billdate,status,temp1,temp2,temp3 from lk_det_tb_bak where 1=1"; try { List orders = orderService.selectList(new EntityWrapper().eq("settle", 4L)); if (orders.size() > 0) { for (Order order : orders) { List orderDetls = orderDetlService.selectByOrderId(order.getId()); if (!Cools.isEmpty(orderDetls)) { for (OrderDetl orderDetl : orderDetls) { String orderNo = orderDetl.getOrderNo().split("---")[0]; Integer itm = Integer.getInteger(orderDetl.getOrderNo().split("---")[1]); Date now = new Date(); List lkDetTbs = erpSqlServer.select(sqlSelectLkDetTb + " and bill_no='" + orderNo + "'" + " and prd_no='" + orderDetl.getMatnr() + "'" + " and ITM='" + itm + "'" + " and prd_mark='" + orderDetl.getBatch() + "'" , LkDetTb.class); List lkDetTbBaks = erpSqlServer.select(sqlSelectLkDetTbBak + " and bill_no='" + orderNo + "'" + " and prd_no='" + orderDetl.getMatnr() + "'" + " and ITM='" + itm + "'" + " and prd_mark='" + orderDetl.getBatch() + "'" , LkDetTbBak.class); if (lkDetTbs.size() == 1) { callApiLogSaveLkDetTb(lkDetTbs.get(0), "erp_det_tb", "已经上报但是明细依旧存在,请联系开发人员!!!", false); continue; } else if (lkDetTbBaks.size() == 1) { callApiLogSaveLkDetTbBak(lkDetTbBaks.get(0), "erp_det_tb_bak", "已经上报但是明细依旧存在,请联系开发人员!!!", false); continue; } else if (lkDetTbs.size() > 1) { callApiLogSaveLkDetTb(lkDetTbs.get(0), "erp_det_tb", "存在重复资料,联系开发人员!!!", false); continue; } else if (lkDetTbBaks.size() > 1) { callApiLogSaveLkDetTbBak(lkDetTbBaks.get(0), "erp_det_tb_bak", "存在重复资料,联系开发人员!!!", false); continue; } else { String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); HashMap condition = new HashMap<>(); condition.put("bill_no", "'" + orderNo + "'"); condition.put("prd_no", "'" + orderDetl.getMatnr() + "'"); condition.put("itm", "'" + itm + "'"); DocType docType = docTypeService.selectById(order.getDocType()); if (!Cools.isEmpty(docType)) { int addid = docType.getPakin() == 1 ? 1 : 2; condition.put("iokindid", "'" + docType.getDocName$() + "'"); condition.put("add_id", "'" + addid + "'"); } condition.put("qty", "'" + orderDetl.getQty() + "'"); condition.put("prd_mark", "'" + orderDetl.getBatch() + "'"); condition.put("wh", "'" + orderDetl.getMemo() + "'"); condition.put("billdate", "'" + format + "'"); condition.put("status", "'" + 0 + "'"); erpSqlServer.insert(LkDetTb.class, condition); callApiLogSaveOrderDetl(orderDetl, "完结订单明细上报完成", true); } //保存订单明细历史档 if (orderDetlService.addToLogTable(orderDetl)) { // callApiLogSaveOrderDetl(orderDetl, "保存订单明细历史档成功!", true); //删除订单明细 orderDetlService.deleteById(orderDetl.getId()); callApiLogSaveOrderDetl(orderDetl, "订单明细档保存后删除成功!", true); } } //保存订单历史档 if (orderService.addToLogTable(order)) { // callApiLogSaveOrder(order, "完结订单上报完成,并保存订单历史档成功!!!", true); //删除完结订单 orderService.deleteById(order.getId()); callApiLogSaveOrder(order, "完结订单上报完成,并保存订单历史档后删除完结订单成功!!!", true); } } } } } catch (Exception e) { Date date = new Date(); log.error(date + ": 表名:lk_det_tb :" + e); } } public void callApiLogSaveLkDetTb(LkDetTb lkDetTb, String tableName, String response, Boolean bool) { apiLogService.save("上报完结订单明细信息", tableName, "null", ip, "订单号:" + lkDetTb.getBillNo() + "、品号:" + lkDetTb.getPrdNo() + "、货品特征:" + lkDetTb.getPrdMark() + "、状态:" + lkDetTb.getStatus$(), response, bool); } public void callApiLogSaveLkDetTbBak(LkDetTbBak lkDetTbBak, String tableName, String response, Boolean bool) { apiLogService.save("上报完结订单明细信息", tableName, "null", ip, "订单号:" + lkDetTbBak.getBillNo() + "、品号:" + lkDetTbBak.getPrdNo() + "、货品特征:" + lkDetTbBak.getPrdMark() + "、状态:" + lkDetTbBak.getStatus$(), response, bool); } public void callApiLogSaveOrderDetl(OrderDetl orderDetl, String response, Boolean bool) { apiLogService.save("上报完结订单明细信息", "lk_det_tb", "null", ip, "订单号:" + orderDetl.getOrderNo() + "、品号:" + orderDetl.getMatnr() + "、货品特征:" + orderDetl.getBatch(), response, bool); } public void callApiLogSaveOrder(Order order, String response, Boolean bool) { apiLogService.save("完结订单信息上报完成", "lk_det_tb", "null", ip, "订单号:" + order.getOrderNo(), response, bool); } }