package com.zy.ints.task.scheduler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SnowflakeIdWorker; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; import com.zy.ints.entity.ErpDetTb; import com.zy.ints.entity.ErpDetTbBak; 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 ErpDetTbScheduler { /** * ERP接口是否启用 */ @Value("${erp.enabled}") private Boolean erpEnabled; @Value("${erp.enabledErpDetTb}") private Boolean erpEnabledErpDetTb; @Value("${erp.useName.ip}") private String ip; @Autowired private ErpSqlServer erpSqlServer; @Autowired private MatService matService; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private SnowflakeIdWorker snowflakeIdWorker; @Autowired private DocTypeService docTypeService; @Autowired private ApiLogService apiLogService; /** * 获取入出库订单信息 */ @Scheduled(cron = "${erp.refreshtime}") public void InOrOutOrder() { if (!erpEnabledErpDetTb) return; String sqlSelectErpDetTb = "select BIL_NO as billNo,prd_no as prdNo,ITM as itm,ADD_ID as addId2,QTY as qty,PRD_MARK as prdMark,WH as wh,STATUS as status,Temp1 as temp1,Temp2 as temp2,Temp3 as temp3 from ERP_DETTB where 1=1"; String sqlUpDateErpDetTbOne = "update ERP_DETTB set STATUS=1 where 1=1 and PRD_NO="; String sqlUpDateErpDetTbTwo = "update ERP_DETTB set STATUS=2 "; try { List erpDetTbs = erpSqlServer.select(sqlSelectErpDetTb, ErpDetTb.class); if (erpDetTbs.size() > 0) { for (ErpDetTb erpDetTb : erpDetTbs) { Date now = new Date(); Integer status = erpDetTb.getStatus(); if (status == 0) { Mat mat = matService.selectByMatnr(erpDetTb.getPrdNo()); if (Cools.isEmpty(mat)) { if(Cools.isEmpty(erpDetTb.getTemp1())){ erpSqlServer.update(sqlUpDateErpDetTbTwo + ",Temp1='品号信息在立库不存在,请先添加商品!!!'" + "where 1=1 " +" and PRD_NO=" + "'" + erpDetTb.getPrdNo() + "'" +" and ITM=" + "'" + erpDetTb.getItm() + "'" +" and BIL_NO=" + "'" + erpDetTb.getBillNo() + "'"); callApiLogSave(erpDetTb, "ERP_DETTB", "品号信息在立库不存在,请先添加商品!!!", false); } } else { Order order = orderService.selectByNo(erpDetTb.getBillNo()); if (Cools.isEmpty(order)) { order = new Order( String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] erpDetTb.getBillNo(), // 订单编号 DateUtils.convert(now), // 单据日期 null, // 单据类型 null, // 项目编号 null, // null, // 调拨项目编号 null, // 初始票据号 null, // 票据号 null, // 客户编号 null, // 客户 null, // 联系方式 null, // 操作人员 null, // 合计金额 null, // 优惠率 null, // 优惠金额 null, // 销售或采购费用合计 null, // 实付金额 null, // 付款类型 null, // 业务员 null, // 结算天数 null, // 邮费支付类型 null, // 邮费 null, // 付款时间 null, // 发货时间 null, // 物流名称 null, // 物流单号 1L, // 订单状态 1, // 状态 9999L, // 添加人员 now, // 添加时间 9999L, // 修改人员 now, // 修改时间 null // 备注 ); String InAndOut = erpDetTb.getAddId2().equals(2) ? "(出库)" : "(入库)"; DocType docType = docTypeService.selectOrAdd("ERP订单"+InAndOut, erpDetTb.getAddId2().equals(1)); if (!Cools.isEmpty(docType)) { order.setDocType(docType.getDocId()); if (!orderService.insert(order)) { callApiLogSave(erpDetTb, "ERP_DETTB", "订单主档添加失败!!", false); continue; } else { callApiLogSave(erpDetTb, "ERP_DETTB", "订单主档添加成功!!", true); } } } Order order1 = orderService.selectByNo(erpDetTb.getBillNo()); if (!Cools.isEmpty(order1)) { // OrderDetl orderDetl = orderDetlService.selectItem(order1.getId(), erpDetTb.getBillNo(), erpDetTb.getPrdMark()); OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper().eq("order_no",erpDetTb.getBillNo()).eq("matnr",erpDetTb.getPrdNo())); if (Cools.isEmpty(orderDetl)) { orderDetl = new OrderDetl(); orderDetl.setOrderId(order1.getId()); orderDetl.setOrderNo(erpDetTb.getBillNo()); orderDetl.setAnfme(erpDetTb.getQty()); orderDetl.setQty(0.0D); orderDetl.setMatnr(erpDetTb.getPrdNo()); orderDetl.setMaktx(mat.getMaktx()); orderDetl.setBatch(erpDetTb.getPrdMark()); orderDetl.setSpecs(mat.getSpecs()); orderDetl.setUnit(mat.getUnit()); orderDetl.setOrigin(erpDetTb.getItm().toString()); orderDetl.setStatus(1); orderDetl.setCreateBy(9999L); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(9999L); orderDetl.setUpdateTime(now); orderDetl.setMemo(erpDetTb.getWh()); if (orderDetlService.insert(orderDetl)) { erpSqlServer.update(sqlUpDateErpDetTbOne + "'" + erpDetTb.getPrdNo() + "'"); callApiLogSave(erpDetTb, "ERP_DETTB", "接收ERP下发订单接收成功!!", true); } else { if (Cools.isEmpty(erpDetTb.getTemp2())){ erpSqlServer.update(sqlUpDateErpDetTbTwo + ",temp2='添加订单明细档失败!!!'" + "where 1=1 " +" and PRD_NO=" + "'" + erpDetTb.getPrdNo() + "'" +" and ITM=" + "'" + erpDetTb.getItm() + "'" +" and BIL_NO=" + "'" + erpDetTb.getBillNo() + "'"); callApiLogSave(erpDetTb, "ERP_DETTB", "ERP下发订单接收失败!!", false); } } }else if (!erpDetTb.getItm().toString().equals(orderDetl.getOrigin())){ orderDetl.setAnfme(orderDetl.getAnfme()+erpDetTb.getQty()); EntityWrapper wrapper = new EntityWrapper<>(); wrapper.eq("id", orderDetl.getId()); if (orderDetlService.update(orderDetl,wrapper)) { erpSqlServer.update(sqlUpDateErpDetTbOne + "'" + erpDetTb.getPrdNo() + "'"); callApiLogSave(erpDetTb, "ERP_DETTB", "接收ERP下发订单接收成功!!", true); } else { if (Cools.isEmpty(erpDetTb.getTemp2())){ erpSqlServer.update(sqlUpDateErpDetTbTwo + ",temp2='更新订单明细档失败!!!'" + "where 1=1 " +" and PRD_NO=" + "'" + erpDetTb.getPrdNo() + "'" +" and ITM=" + "'" + erpDetTb.getItm() + "'" +" and BIL_NO=" + "'" + erpDetTb.getBillNo() + "'"); callApiLogSave(erpDetTb, "ERP_DETTB", "ERP下发订单接收失败!!", false); } } }else { if (Cools.isEmpty(erpDetTb.getTemp3())){ erpSqlServer.update(sqlUpDateErpDetTbTwo + ",temp3='更新订单明细档失败!!!订单明细已存在!!'" + "where 1=1 " +" and PRD_NO=" + "'" + erpDetTb.getPrdNo() + "'" +" and ITM=" + "'" + erpDetTb.getItm() + "'" +" and BIL_NO=" + "'" + erpDetTb.getBillNo() + "'"); callApiLogSave(erpDetTb, "ERP_DETTB", "ERP下发订单接收失败!!", false); } } } } } else if (status == 1) { String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now); HashMap condition = new HashMap<>(); condition.put("BIL_NO", "'" + erpDetTb.getBillNo() + "'"); condition.put("PRD_NO", "'" + erpDetTb.getPrdNo() + "'"); condition.put("ITM", "'" + erpDetTb.getItm() + "'"); condition.put("ADD_ID", "'" + erpDetTb.getAddId2() + "'"); condition.put("QTY", "'" + erpDetTb.getQty() + "'"); condition.put("PRD_MARK", "'" + erpDetTb.getPrdMark() + "'"); condition.put("WH", "'" + erpDetTb.getWh() + "'"); condition.put("BIL_DATE", "'" + format + "'"); condition.put("STATUS", "'" + erpDetTb.getStatus() + "'"); condition.put("Temp1", "'" + erpDetTb.getTemp1() + "'"); condition.put("Temp2", "'" + erpDetTb.getTemp2() + "'"); condition.put("Temp3", "'" + erpDetTb.getTemp3() + "'"); erpSqlServer.insert(ErpDetTbBak.class, condition); // callApiLogSave(erpDetTb, "ERP_DETTB_BAK", "ERP下发订单备份成功!!", true); HashMap condition2 = new HashMap<>(); condition2.put("BIL_NO", "'" + erpDetTb.getBillNo() + "'"); condition2.put("PRD_NO", "'" + erpDetTb.getPrdNo() + "'"); condition2.put("ITM", "'" + erpDetTb.getItm() + "'"); // condition2.put("PRD_MARK", "'" + erpDetTb.getPrdMark() + "'"); erpSqlServer.delete(ErpDetTb.class, condition2); // callApiLogSave(erpDetTb, "ERP_DETTB", "ERP下发订单备份后删除成功!!", true); } else { if (Cools.isEmpty(erpDetTb.getTemp1()) && Cools.isEmpty(erpDetTb.getTemp2()) && Cools.isEmpty(erpDetTb.getTemp3())){ erpSqlServer.update(sqlUpDateErpDetTbTwo + ",Temp1='接收ERP下发订单失败!!!状态异常!!!请ERP、立库双方协助解决。'" + "where 1=1 " +" and PRD_NO=" + "'" + erpDetTb.getPrdNo() + "'" +" and ITM=" + "'" + erpDetTb.getItm() + "'" +" and BIL_NO=" + "'" + erpDetTb.getBillNo() + "'"); callApiLogSave(erpDetTb, "ERP_DETTB", "接收ERP下发订单失败!!!状态异常!!!", false); } } } } } catch (Exception e) { Date date = new Date(); log.error(date + ": 表名:ERP_DETTB :" + e); } } public void callApiLogSave(ErpDetTb erpDetTb, String tableName, String response, Boolean bool) { apiLogService.save("ERP下发订单信息", tableName, "null", ip, "订单号:" + erpDetTb.getBillNo() + "、品号:" + erpDetTb.getPrdNo() + "、货品特征:" + erpDetTb.getPrdMark() + "、状态:" + erpDetTb.getStatus$(), response, bool); } }