| | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.core.common.Cools; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.MatCode; |
| | | import com.zy.asrs.entity.WaitPakin; |
| | | import com.zy.asrs.service.MatCodeService; |
| | | import com.zy.asrs.service.OutStockMainService; |
| | | import com.zy.asrs.service.OutStockService; |
| | | import com.zy.asrs.service.WaitPakinService; |
| | | import com.zy.asrs.task.AbstractHandler; |
| | | import com.zy.asrs.utils.VersionUtils; |
| | | import com.zy.common.service.erp.ErpService; |
| | | import com.zy.common.service.erp.dto.InStockDto; |
| | |
| | | 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 javax.annotation.PostConstruct; |
| | | import java.util.Date; |
| | |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class ErpScheduler { |
| | | public class ErpScheduler extends AbstractHandler<Exception> { |
| | | |
| | | @Autowired |
| | | private ErpService erpService; |
| | |
| | | private Map<Integer, M_item> itemMap = new HashMap<>(); |
| | | |
| | | /** |
| | | * 原材料 |
| | | * 原材料入库单 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | // @PostConstruct |
| | | public void inStockExecute(){ |
| | | // List<M_item> item = erpService.getItem(); |
| | | // for (M_item item1 : item) { |
| | | // itemMap.put(item1.getMitemid(), item1); |
| | | // } |
| | | |
| | | List<InStockDto> readyInStock = erpService.getReadyInStock(); |
| | | for (InStockDto dto : readyInStock) { |
| | | for (InStockBillEntry entry : dto.getInStockBillEntries()) { |
| | | // if (entry.getFNumber() == null && itemMap.containsKey(entry.getFItemID())) { |
| | | // entry.setFNumber(itemMap.get(entry.getFItemID()).getMnumber()); |
| | | // boolean b = erpService.updateFnumber(entry.getFItemID(), entry.getFNumber()); |
| | | // if (b) { |
| | | // System.err.println(entry.getFItemID() + ": " + entry.getFNumber()); |
| | | // } |
| | | // } |
| | | |
| | | //同一单号存在相同物料编码数据,该单号不予处理 |
| | | Number fnumberCount = erpService.QueryFnumberInCount(dto.getInStockBill().getFInterID()); |
| | | if(fnumberCount.intValue() > 1){ |
| | | if (!erpService.haveReadInStock(dto.getInStockBill().getFBillNo(),-1)) { |
| | | log.error("标记原材料入库通知单已读InStockBill为-1失败[FBillNo={},FInterID={}]", dto.getInStockBill().getFBillNo(),dto.getInStockBill().getFInterID()); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | for (InStockBillEntry entry : dto.getInStockBillEntries()) { |
| | | MatCode matCode = matCodeService.selectById(entry.getFnumber()); |
| | | if (null != matCode) { |
| | | // 生成入库通知单 |
| | |
| | | VersionUtils.setWaitPakIn(waitPakin, matCode); |
| | | waitPakin.setMnemonic(entry.getFOrderBillNo()); // todo:luxiaotao 生产单号 |
| | | waitPakin.setSupplier(dto.getInStockBill().getFBillNo()); // todo:luxiaotao 通知单号 |
| | | // String Fnumber = (Cools.isEmpty(entry.getFSourceBillNo())) ? matCode.getMatNo() : matCode.getMatNo() + "|" + entry.getFSourceBillNo(); |
| | | // waitPakin.setMatnr(Fnumber); //产品代码|生产单号 |
| | | // waitPakin.setBname(matCode.getMatNo()); |
| | | Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>() |
| | | .eq("supplier", waitPakin.getSupplier()) |
| | | .eq("matnr", waitPakin.getMatnr()) |
| | | .isNull("zpallet"); |
| | | .eq("matnr", waitPakin.getMatnr()); |
| | | // .isNull("zpallet"); |
| | | WaitPakin one = waitPakinService.selectOne(wrapper); |
| | | try { |
| | | if (one == null) { |
| | | waitPakin.setAnfme(entry.getFAuxQty()); |
| | | if (!waitPakinService.insert(waitPakin)) { |
| | | log.error("{}原材料入库通知单的{}物料数据处理失败", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | log.error("提取原材料入库通知单InStockBillEntry失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | } else { |
| | | log.info("提取原材料入库通知单InStockBillEntry成功[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | } |
| | | } else { |
| | | waitPakin.setAnfme(entry.getFAuxQty()); |
| | | if (!waitPakinService.update(waitPakin, wrapper)) { |
| | | log.error("更新原材料入库通知单InStockBillEntry失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | } else { |
| | | log.info("更新原材料入库通知单InStockBillEntry成功[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | } |
| | | } |
| | | // else { |
| | | // waitPakin.setAnfme(one.getAnfme() + entry.getFAuxQty()); |
| | | // waitPakinService.update(waitPakin, wrapper); |
| | | // } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | System.out.println(JSON.toJSON(waitPakin)); |
| | | } |
| | | } |
| | | } |
| | | if (!erpService.haveReadInStock(dto.getInStockBill().getFBillNo())) { |
| | | log.error("{}原材料入库通知单已读失败", dto.getInStockBill().getFBillNo()); |
| | | if (!erpService.haveReadInStock(dto.getInStockBill().getFBillNo(),1)) { |
| | | log.error("标记原材料入库通知单已读InStockBill失败[FBillNo={}]", dto.getInStockBill().getFBillNo()); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 成品 |
| | | * 成品入库单 |
| | | */ |
| | | @Scheduled(cron = "0/5 * * * * ? ") |
| | | // @PostConstruct |
| | | public void inCPICMOExecute(){ |
| | | // List<M_item> item = erpService.getItem(); |
| | | // for (M_item item1 : item) { |
| | | // itemMap.put(item1.getMitemid(), item1); |
| | | // } |
| | | |
| | | List<CPICMO> cpicmos = erpService.getReadyCPICMO(); |
| | | for (CPICMO cpicmo : cpicmos) { |
| | | // if (Cools.isEmpty(cpicmo.getFnumber()) && itemMap.containsKey(cpicmo.getFItemID())) { |
| | | // cpicmo.setFnumber(itemMap.get(cpicmo.getFItemID()).getMnumber()); |
| | | // boolean b = erpService.updateCFnumber(cpicmo.getFItemID(), cpicmo.getFnumber()); |
| | | // if (b) { |
| | | // System.err.println(cpicmo.getFItemID() + ": " + cpicmo.getFnumber()); |
| | | // } |
| | | // } |
| | | |
| | | //同一单号存在相同物料编码数据,该单号不予处理 |
| | | Number fnumberCount = erpService.QueryFnumberCPICMOCount(cpicmo.getFInterID()); |
| | | if(fnumberCount.intValue() > 1){ |
| | | if (!erpService.haveReadCPICMO(cpicmo.getFInterID(),-1)) { |
| | | log.error("标记成品入库通知单已读CPICMO为-1失败[Fnumber={},FInterID={}]", cpicmo.getFnumber(),cpicmo.getFInterID()); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | MatCode matCode = matCodeService.selectById(cpicmo.getFnumber()); |
| | | if (null != matCode) { |
| | | // 生成入库通知单 |
| | |
| | | VersionUtils.setWaitPakIn(waitPakin, matCode); |
| | | waitPakin.setMnemonic(cpicmo.getFSourceBillNo()); // todo:luxiaotao 生产单号 |
| | | waitPakin.setSupplier(cpicmo.getFBillNo()); // todo:luxiaotao 通知单号 |
| | | // String Fnumber = (Cools.isEmpty(cpicmo.getFSourceBillNo())) ? matCode.getMatNo() : matCode.getMatNo() + "|" + cpicmo.getFSourceBillNo(); |
| | | // waitPakin.setMatnr(Fnumber); //产品代码|生产单号 |
| | | // waitPakin.setBname(matCode.getMatNo()); |
| | | Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>() |
| | | .eq("supplier", waitPakin.getSupplier()) |
| | | .eq("matnr", waitPakin.getMatnr()) |
| | | .isNull("zpallet"); |
| | | .eq("matnr", waitPakin.getMatnr()); |
| | | // .isNull("zpallet"); |
| | | WaitPakin one = waitPakinService.selectOne(wrapper); |
| | | if (one == null) { |
| | | waitPakin.setAnfme(cpicmo.getFAuxQty()); |
| | | if (!waitPakinService.insert(waitPakin)) { |
| | | log.error("{}成品入库通知单的{}物料数据处理失败", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | log.error("提取成品入库通知单CPICMO失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | } else { |
| | | log.info("提取成品入库通知单CPICMO成功[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | } |
| | | } else { |
| | | waitPakin.setAnfme(cpicmo.getFAuxQty()); |
| | | if (!waitPakinService.update(waitPakin, wrapper)) { |
| | | log.error("同步更新成品入库通知单CPICMO失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | } else { |
| | | log.info("同步更新成品入库通知单CPICMO失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr()); |
| | | } |
| | | } |
| | | if (!erpService.haveReadCPICMO(cpicmo.getFBillNo())) { |
| | | log.error("{}成品入库通知单已读失败", cpicmo.getFBillNo()); |
| | | if (!erpService.haveReadCPICMO(cpicmo.getFInterID(),1)) { |
| | | log.error("标记成品入库通知单已读CPICMO失败[FBillNo={}]", cpicmo.getFBillNo()); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 成品出库-发货通知单表头 |
| | | * 成品出库 发货通知单表头,表明细 |
| | | */ |
| | | @Scheduled(cron = "0/15 * * * * ? ") |
| | | @Transactional |
| | | public void syncOutStock(){ |
| | | List<OutStockBill> result = erpService.syncOutStock(); |
| | | for (Integer i = 0; i < result.size(); i++) { |
| | | OutStockBill main = outStockMainService.selectOne(new EntityWrapper<OutStockBill>().eq("FBrNo", result.get(i).getFBrNo()).and().eq("FInterID", result.get(i).getFInterID())); |
| | | if (null == main) { |
| | | if (!outStockMainService.insert(result.get(i))) { |
| | | log.info("出库通知主表OutStockBill同步失败"); |
| | | }; |
| | | } else { |
| | | List<OutStockBill> outStockBills = erpService.syncOutStock(); |
| | | for (Integer i = 0; i < outStockBills.size(); i++) { |
| | | OutStockBill outStockBill = outStockBills.get(i); |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 成品出库-发货通知单表体 |
| | | */ |
| | | @Scheduled(cron = "0/15 * * * * ? ") |
| | | public void syncOutStockDetail(){ |
| | | List<OutStockBillEntry> result = erpService.syncOutStockDetail(); |
| | | for (Integer i = 0; i < result.size(); i++) { |
| | | OutStockBillEntry main = outStockService.selectOne(new EntityWrapper<OutStockBillEntry>().eq("FInterID", result.get(i).getFInterID()).and().eq("FEntryID", result.get(i).getFEntryID())); |
| | | if (null == main) { |
| | | if (!outStockService.insert(result.get(i))) { |
| | | log.info("出库通知明细表OutStockBillEntry同步失败"); |
| | | }; |
| | | } else { |
| | | // 数量有变化进行更新 |
| | | if (Double.doubleToLongBits(main.getFAuxQty().doubleValue()) != Double.doubleToLongBits(result.get(i).getFAuxQty().doubleValue())) { |
| | | if (!outStockService.update(result.get(i), new EntityWrapper<OutStockBillEntry>().eq("FInterID", result.get(i).getFInterID()).and().eq("FEntryID", result.get(i).getFEntryID()))) { |
| | | log.info("出库通知明细表OutStockBillEntry同步失败"); |
| | | }; |
| | | //同一单号存在相同物料编码数据,该单号不予处理 |
| | | Number fnumberCount = erpService.QueryFnumberOutCount(outStockBill.getFInterID()); |
| | | if(fnumberCount.intValue() > 1){ |
| | | if (!erpService.haveReadOutBill(outStockBill.getFBillNo(),outStockBill.getFInterID(),-1)) { |
| | | log.error("更新出库通知单读取状态为-1失败[FBrNo={},FInterID={}]", outStockBill.getFBrNo(),outStockBill.getFInterID()); |
| | | } |
| | | continue; |
| | | } |
| | | |
| | | OutStockBill main = outStockMainService.selectOne(new EntityWrapper<OutStockBill>().eq("FBillNo",outStockBill.getFBillNo()).and().eq("FInterID", outStockBill.getFInterID())); |
| | | if (null == main) { |
| | | outStockBill.setFflag_rw(1); |
| | | if (!outStockMainService.insert(outStockBill)) { |
| | | log.info("同步出库通知主表OutStockBill失败"); |
| | | exceptionHandle("同步出库通知主表OutStockBill失败[FBillNo={0},FInterID={1}]",outStockBill.getFBillNo(),outStockBill.getFInterID()); |
| | | }; |
| | | List<OutStockBillEntry> outStockBillEntries = erpService.syncOutStockDetail(outStockBill.getFInterID()); |
| | | for (Integer j = 0; j < outStockBillEntries.size(); j++) { |
| | | OutStockBillEntry outStockBillEntry = outStockBillEntries.get(j); |
| | | Wrapper<OutStockBillEntry> wrapper = new EntityWrapper<OutStockBillEntry>().eq("FInterID", outStockBillEntry.getFInterID()). |
| | | eq("FEntryID", outStockBillEntry.getFEntryID()).eq("FBrNo",outStockBillEntry.getFBrNo()); |
| | | OutStockBillEntry one = outStockService.selectOne(wrapper); |
| | | if (null == one) { |
| | | // String Fnumber = (Cools.isEmpty(outStockBillEntry.getFSourceBillNo())) ? outStockBillEntry.getFnumber() : outStockBillEntry.getFnumber()+"|"+outStockBillEntry.getFSourceBillNo(); |
| | | // outStockBillEntry.setFnumber(Fnumber); //产品代码|生产单号 |
| | | if (!outStockService.insert(outStockBillEntry)) { |
| | | log.info("提取出库通知明细表OutStockBillEntry失败[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(), |
| | | outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID()); |
| | | exceptionHandle("提取出库通知明细表OutStockBillEntry失败[FBrNo={0},FInterID={1},FEntryID={2}]",outStockBillEntry.getFBrNo(), |
| | | outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID()); |
| | | } else { |
| | | log.info("提取出库通知明细表OutStockBillEntry成功[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(), |
| | | outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID()); |
| | | } |
| | | } else { |
| | | // 数量有变化进行更新 |
| | | if (Double.doubleToLongBits(one.getFAuxQty().doubleValue()) != Double.doubleToLongBits(outStockBillEntry.getFAuxQty().doubleValue())) { |
| | | if (!outStockService.update(outStockBillEntry, wrapper)) { |
| | | log.info("同步更新通知明细表OutStockBillEntry失败[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(), |
| | | outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID()); |
| | | exceptionHandle("同步更新通知明细表OutStockBillEntry失败[FBrNo={0},FInterID={1},FEntryID={2}]",outStockBillEntry.getFBrNo(), |
| | | outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID()); |
| | | } else { |
| | | log.info("同步更新通知明细表OutStockBillEntry成功[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(), |
| | | outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | |
| | | } |
| | | |
| | | if (!erpService.haveReadOutBill(outStockBill.getFBillNo(),outStockBill.getFInterID(),1)) { |
| | | log.error("更新出库通知单读取状态失败[FBrNo={},FInterID={}]", outStockBill.getFBrNo(),outStockBill.getFInterID()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // /** |
| | | // * 成品出库 发货通知单表体 |
| | | // */ |
| | | // @Scheduled(cron = "0/15 * * * * ? ") |
| | | // public void syncOutStockDetail(){ |
| | | // List<OutStockBillEntry> result = erpService.syncOutStockDetail(); |
| | | // for (Integer i = 0; i < result.size(); i++) { |
| | | // OutStockBillEntry main = outStockService.selectOne(new EntityWrapper<OutStockBillEntry>().eq("FInterID", result.get(i).getFInterID()).and().eq("FEntryID", result.get(i).getFEntryID())); |
| | | // if (null == main) { |
| | | // OutStockBillEntry outStockBillEntry = result.get(i); |
| | | // outStockBillEntry.setFnumber(outStockBillEntry.getFnumber()+"|"+outStockBillEntry.getFSourceBillNo()); //产品代码|生产单号 |
| | | // if (!outStockService.insert(outStockBillEntry)) { |
| | | // log.info("出库通知明细表OutStockBillEntry同步失败"); |
| | | // }; |
| | | // } else { |
| | | // // 数量有变化进行更新 |
| | | // if (Double.doubleToLongBits(main.getFAuxQty().doubleValue()) != Double.doubleToLongBits(result.get(i).getFAuxQty().doubleValue())) { |
| | | // if (!outStockService.update(result.get(i), new EntityWrapper<OutStockBillEntry>().eq("FInterID", result.get(i).getFInterID()).and().eq("FEntryID", result.get(i).getFEntryID()))) { |
| | | // log.info("出库通知明细表OutStockBillEntry同步失败"); |
| | | // }; |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * 原材料出库 |
| | | */ |