package com.zy.ints.task.scheduler; import com.baomidou.mybatisplus.plugins.Page; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.service.ApiLogService; import com.zy.asrs.service.LocDetlService; import com.zy.common.web.BaseController; import com.zy.ints.entity.ErpLk; import com.zy.ints.entity.ErpLkBak; 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.util.Date; import java.util.HashMap; import java.util.List; /** * erp任务控制器 * Created by vincent on 2020/11/27 */ @Slf4j @Component public class ErpLkScheduler extends BaseController { /** * ERP接口是否启用 */ @Value("${erp.enabled}") private Boolean erpEnabled; @Value("${erp.useName.ip}") private String ip; @Autowired private ApiLogService apiLogService; @Autowired private ErpSqlServer erpSqlServer; @Autowired private LocDetlService locDetlService; /** * ERP与lk库存数据比对 */ @Scheduled(cron = "${erp.refreshtime}") public void proofread() { if (!erpEnabled) return; String sqlSelectErpLk = "select prd_no as prdNo,prd_mark as prdMark,qty,wh,status,temp1,temp2,temp3 from bas_erp_lk where 1=1"; String sqlSelectErpLkBak = "select prd_no as prdNo,prd_mark as prdMark,qty,wh,status,temp1,temp2,temp3 from bas_erp_lk_bak where 1=1"; String sqlUpDateErpLkOne = "update bas_erp_lk set status=1 where prd_no="; String sqlUpDateErpLkTwo = "update bas_erp_lk set status=2 where prd_no="; String sqlUpDateErpLkBak = "update bas_erp_lk_bak set qty="; try { List erpLks = erpSqlServer.select(sqlSelectErpLk, ErpLk.class); if (erpLks.size() > 0) { for (ErpLk erpLk : erpLks) { Integer status = erpLk.getStatus(); if (status == 0) { HashMap param = new HashMap<>(); param.put("curr", 1); param.put("limit", 20); param.put("matnr", erpLk.getPrdNo()); param.put("batch", erpLk.getPrdMark()); Page stockStatis = locDetlService.getStockStatis(toPage(1, 10, param, LocDetl.class)); if (stockStatis.getRecords().size() == 1) { for (LocDetl locDetl : stockStatis.getRecords()) { if (locDetl.getAnfme() - erpLk.getQty() == 0) { erpSqlServer.update(sqlUpDateErpLkOne + "'" + erpLk.getPrdNo() + "' and prd_mark='" + erpLk.getPrdMark() + "'"); callApiLogSave(erpLk, "bas_erp_lk", "库存对比数量相同!!!总量为:" + erpLk.getQty(), true); } else { erpSqlServer.update(sqlUpDateErpLkTwo + "'" + erpLk.getPrdNo() + "' and prd_mark='" + erpLk.getPrdMark() + "'"); callApiLogSave(erpLk, "bas_erp_lk", "库存对比数量不同!!!立库总量为:" + locDetl.getAnfme() + "、ERP总量为:" + erpLk.getQty(), false); } } } else { callApiLogSave(erpLk, "bas_erp_lk", "立库库存异常!!!相同品号、货品特征的货物重复!!!", false); } } else if (status == 1) { List erpLkBaks = erpSqlServer.select(sqlSelectErpLkBak + " and prd_no='" + erpLk.getPrdNo() + "' and prd_mark='" + erpLk.getPrdMark() + "'", ErpLkBak.class); if (erpLkBaks.size() == 1) { erpSqlServer.update(sqlUpDateErpLkBak + "'" + erpLk.getQty() + "' where 1=1 " + "and prd_no='" + erpLk.getPrdNo() + "'" + "and prd_mark='" + erpLk.getPrdMark() + "'" ); } else if (erpLkBaks.size() == 0) { HashMap condition = new HashMap<>(); condition.put("prd_no", "'" + erpLk.getPrdNo() + "'"); condition.put("prd_mark", "'" + erpLk.getPrdMark() + "'"); condition.put("qty", "'" + erpLk.getQty() + "'"); condition.put("wh", "'" + erpLk.getWh() + "'"); condition.put("status", "'" + erpLk.getStatus() + "'"); condition.put("temp1", "'" + erpLk.getTemp1() + "'"); condition.put("temp2", "'" + erpLk.getTemp2() + "'"); condition.put("temp3", "'" + erpLk.getTemp3() + "'"); erpSqlServer.insert(ErpLkBak.class, condition); } else { callApiLogSave(erpLk, "bas_erp_lk", "库存对比记录备份存在异常!!!", false); } // callApiLogSave(erpLk, "bas_erp_lk", "库存对比记录备份成功!!!总量为:" + erpLk.getQty(), true); HashMap condition2 = new HashMap<>(); condition2.put("prd_no", "'" + erpLk.getPrdNo() + "'"); condition2.put("prd_mark", "'" + erpLk.getPrdMark() + "'"); erpSqlServer.delete(ErpLk.class, condition2); // callApiLogSave(erpLk, "bas_erp_lk", "库存对比记录备份后删除成功!!!总量为:" + erpLk.getQty(), true); } else { callApiLogSave(erpLk, "bas_erp_lk", "库存对比存在异常数据未处理!!!", false); } } } } catch (Exception e) { Date date = new Date(); log.error(date + ": 表名:bas_erp_lk :" + e); } } public void callApiLogSave(ErpLk erpLk, String tableName, String response, Boolean bool) { apiLogService.save("ERP与lk库存数据比对", tableName, "null", ip, "品号:" + erpLk.getPrdNo() + "、货品特征:" + erpLk.getPrdMark() + "、数量:" + erpLk.getQty() + "、状态:" + erpLk.getStatus$(), response, bool); } }