package com.zy.common.service.erp.task; import com.core.common.Cools; import com.core.common.DateUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.AllLocDetl; import com.zy.asrs.entity.InventoryVariance; import com.zy.asrs.entity.Mat; import com.zy.asrs.entity.Tag; import com.zy.asrs.service.AllLocDetlService; import com.zy.asrs.service.InventoryVarianceService; import com.zy.asrs.service.MatService; import com.zy.asrs.service.TagService; import com.zy.asrs.task.AbstractHandler; import com.zy.common.service.erp.ErpService; import com.zy.common.service.erp.entity.Goods; import com.zy.common.service.erp.entity.WlzhVStRd; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * erp任务控制器 * Created by vincent on 2020/11/27 */ @Slf4j @Component public class ErpScheduler extends AbstractHandler { @Autowired private ErpService erpService; @Autowired private TagService tagService; @Autowired private MatService matService; @Autowired private AllLocDetlService allLocDetlService; @Autowired private InventoryVarianceService inventoryVarianceService; //@Scheduled(cron = "0/5 * * * * ? ") @Synchronized @Transactional public synchronized void syncMat() { Tag top = tagService.getTop(); List goods = erpService.selectGoods(0); Date now = new Date(); if (!Cools.isEmpty(goods)) { for (Goods good : goods) { Mat mat = matService.selectByMatnr(good.getMaterialNO()); if (mat == null) { mat = new Mat(); mat.setTagId(top.getId()); mat.setMatnr(good.getMaterialNO()); // mat.setMaktx(good.getBarCode()); mat.setSpecs(good.getProdSpec()); mat.setModel(good.getBatch()); mat.setWeight(good.getNWT()); mat.setUnits(good.getNumOfBobbins()==null?null:good.getNumOfBobbins().doubleValue()); mat.setManuDate(good.getProdDate()); mat.setCreateTime(now); mat.setSku(good.getLocation()); if (!Cools.isEmpty(good.getLastUpdatedDate())) { mat.setUpdateTime(DateUtils.convert(good.getLastUpdatedDate().substring(0, 19))); } if (!matService.insert(mat)) { throw new CoolException(good.getBarCode() + "商品同步失败"); } } int state = 1; if (!erpService.updateStateForGoods(good.getBarCode(), state)) { throw new CoolException(good.getBarCode() + "商品修改State为"+state+"失败"); } } } } //@Scheduled(cron = "0/5 * * * * ? ") @Synchronized @Transactional public void syncLocDetl(){ List inventoryVariances = new ArrayList<>(); int pageSize = 500; int pageNumber = 0; while (true){ List wlzhVStRds = erpService.selectPage(pageSize, pageNumber); if(wlzhVStRds.size() < pageSize){ break; } //ERP库存与立库库存比对 compileStock(wlzhVStRds,inventoryVariances); pageNumber ++; } inventoryVarianceService.insertBatch(inventoryVariances); } private void compileStock(List wlzhVStRds, List inventoryVariances){ wlzhVStRds.forEach(wlzhVStRd -> { String matnr = wlzhVStRd.getCInvCode(); String csocode = wlzhVStRd.getCsocode(); String isoseq = wlzhVStRd.getIsoseq(); Double iQuantity = wlzhVStRd.getIQuantity(); Double anfme = 0.0; List allLocDetlList = allLocDetlService.getByMatnrAndCsocodeAndIsoseq(matnr, csocode, isoseq); for(AllLocDetl allLocDetl : allLocDetlList){ anfme += allLocDetl.getAnfme(); } int compare = Double.compare(iQuantity, anfme); if(compare != 0){ InventoryVariance inventoryVarianceParam = new InventoryVariance(matnr,csocode,isoseq,iQuantity,anfme); inventoryVariances.add(inventoryVarianceParam); } }); } }