| | |
| | | package com.zy.common.service.erp.task; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.core.common.Cools; |
| | | import com.core.common.DateUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.Mat; |
| | | import com.zy.asrs.entity.Tag; |
| | | import com.zy.asrs.entity.AllLocDetl; |
| | | import com.zy.asrs.entity.InventoryVariance; |
| | | 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.dto.VoucherDto; |
| | | import com.zy.common.service.erp.entity.Goods; |
| | | import lombok.Synchronized; |
| | | import com.zy.common.service.erp.entity.WlzhVStRd; |
| | | 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.Date; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | 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> goods = erpService.selectGoods(0); |
| | | Date now = new Date(); |
| | | if (!Cools.isEmpty(goods)) { |
| | | for (Goods good : goods) { |
| | | Mat mat = matService.selectByMatnr(good.getBarCode()); |
| | | if (mat == null) { |
| | | mat = new Mat(); |
| | | mat.setTagId(top.getId()); |
| | | mat.setMatnr(good.getBarCode()); |
| | | mat.setMaktx(good.getMaterialNO()); |
| | | 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))); |
| | | } |
| | | //@Scheduled(cron = "0 0 2 * * ? ") |
| | | public void syncLocDetl(){ |
| | | log.info("库存差异信息清除"); |
| | | inventoryVarianceService.deleteAll(); |
| | | |
| | | if (!matService.insert(mat)) { |
| | | throw new CoolException(good.getBarCode() + "商品同步失败"); |
| | | } else { |
| | | int state = 1; |
| | | if (!erpService.updateStateForGoods(good.getBarCode(), state)) { |
| | | throw new CoolException(good.getBarCode() + "商品修改State为"+state+"失败"); |
| | | } |
| | | } |
| | | } |
| | | log.info("与ERP比对开始"); |
| | | int pageSize = 500; |
| | | int pageNumber = 0; |
| | | while (true){ |
| | | List<InventoryVariance> inventoryVariances = new ArrayList<>(); |
| | | List<WlzhVStRd> wlzhVStRds = erpService.selectPage(pageSize, pageNumber); |
| | | if(wlzhVStRds.size() < pageSize){ |
| | | break; |
| | | } |
| | | |
| | | //ERP库存与立库库存比对 |
| | | compileStock(wlzhVStRds,inventoryVariances); |
| | | pageNumber ++; |
| | | inventoryVarianceService.insertBatch(inventoryVariances); |
| | | } |
| | | |
| | | } |
| | | |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | @Synchronized |
| | | @Transactional |
| | | public synchronized void syncOrder() { |
| | | List<VoucherDto> list = erpService.selectOrder(0); |
| | | System.out.println(JSON.toJSONString(list)); |
| | | private void compileStock(List<WlzhVStRd> wlzhVStRds, List<InventoryVariance> 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<AllLocDetl> 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); |
| | | } |
| | | |
| | | }); |
| | | } |
| | | |
| | | |
| | | } |