#
18516761980
2021-09-29 15c8f00ab3a1e3d2d96b56bae0ec11efedd60231
src/main/java/com/zy/common/service/erp/task/ErpScheduler.java
@@ -4,12 +4,14 @@
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;
@@ -18,6 +20,7 @@
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;
@@ -31,7 +34,7 @@
 */
@Slf4j
@Component
public class ErpScheduler {
public class ErpScheduler extends AbstractHandler<Exception> {
    @Autowired
    private ErpService erpService;
@@ -47,27 +50,24 @@
    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) {
                    // 生成入库通知单
@@ -80,30 +80,38 @@
                    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());
            }
        }
@@ -111,25 +119,23 @@
    /**
     * 成品
     * 成品入库单
     */
    @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) {
                // 生成入库通知单
@@ -142,19 +148,31 @@
                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());
                }
            }
        }
@@ -192,46 +210,99 @@
    }
    /**
     * 成品出库-发货通知单表头
     * 成品出库 发货通知单表头,表明细
     */
    @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同步失败");
//                    };
//                }
//            }
//        }
//    }
    /**
     * 原材料出库
     */