#
18516761980
2022-09-01 3e8b02f468f302763c3792efa3f9164dae3e0874
src/main/java/com/zy/common/service/erp/task/ErpScheduler.java
@@ -16,6 +16,7 @@
import com.zy.common.service.erp.ErpService;
import com.zy.common.service.erp.dto.InStockDto;
import com.zy.common.service.erp.entity.*;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -23,6 +24,7 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -52,11 +54,26 @@
    /**
     * 原材料入库单
     */
    @Scheduled(cron = "0/5 * * * * ? ")
    @Scheduled(cron = "0/30 * * * * ? ")
    @Synchronized
//    @PostConstruct
    public void inStockExecute(){
//        inStock的表头和表身
        List<InStockDto> readyInStock = erpService.getReadyInStock();
        for (InStockDto dto : readyInStock) {
            //同一单号存在相同物料编码数据,该单号不予处理
            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;
            }
            if (Cools.isEmpty(dto) || Cools.isEmpty(dto.getInStockBillEntries())) {
                continue;
            }
            for (InStockBillEntry entry : dto.getInStockBillEntries()) {
                MatCode matCode = matCodeService.selectById(entry.getFnumber());
                if (null != matCode) {
@@ -70,9 +87,9 @@
                    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());
//                    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());
@@ -81,6 +98,7 @@
                    try {
                        if (one == null) {
                            waitPakin.setAnfme(entry.getFAuxQty());
                            waitPakin.setNqty(entry.getFAuxQty());
                            if (!waitPakinService.insert(waitPakin)) {
                                log.error("提取原材料入库通知单InStockBillEntry失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
                            } else {
@@ -88,6 +106,7 @@
                            }
                        } else {
                            waitPakin.setAnfme(entry.getFAuxQty());
                            waitPakin.setNqty(entry.getFAuxQty());
                            if (!waitPakinService.update(waitPakin, wrapper)) {
                                log.error("更新原材料入库通知单InStockBillEntry失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
                            } else {
@@ -95,12 +114,13 @@
                            }
                        }
                    } catch (Exception e) {
                        log.error("fail", e);
                        e.printStackTrace();
                        System.out.println(JSON.toJSON(waitPakin));
                    }
                }
            }
            if (!erpService.haveReadInStock(dto.getInStockBill().getFBillNo())) {
            if (!erpService.haveReadInStock(dto.getInStockBill().getFBillNo(),1)) {
                log.error("标记原材料入库通知单已读InStockBill失败[FBillNo={}]", dto.getInStockBill().getFBillNo());
            }
        }
@@ -111,11 +131,22 @@
    /**
     * 成品入库单
     */
    @Scheduled(cron = "0/5 * * * * ? ")
    @Scheduled(cron = "0/20 * * * * ? ")
    @Synchronized
//    @PostConstruct
    public void inCPICMOExecute(){
        List<CPICMO> cpicmos = erpService.getReadyCPICMO();
        for (CPICMO cpicmo : cpicmos) {
            //同一单号存在相同物料编码数据,该单号不予处理
            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) {
                // 生成入库通知单
@@ -128,9 +159,9 @@
                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());
//                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());
@@ -138,6 +169,7 @@
                WaitPakin one = waitPakinService.selectOne(wrapper);
                if (one == null) {
                    waitPakin.setAnfme(cpicmo.getFAuxQty());
                    waitPakin.setNqty(cpicmo.getFAuxQty());
                    if (!waitPakinService.insert(waitPakin)) {
                        log.error("提取成品入库通知单CPICMO失败[FBillNo={},Fnumber={}]", waitPakin.getSupplier(), waitPakin.getMatnr());
                    } else {
@@ -145,20 +177,22 @@
                    }
                } else {
                    waitPakin.setAnfme(cpicmo.getFAuxQty());
                    waitPakin.setNqty(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())) {
                if (!erpService.haveReadCPICMO(cpicmo.getFInterID(),1)) {
                    log.error("标记成品入库通知单已读CPICMO失败[FBillNo={}]", cpicmo.getFBillNo());
                }
            }
        }
    }
    @Scheduled(cron = "0/5 * * * * ? ")
    @Scheduled(cron = "0/30 * * * * ? ")
    @Synchronized
    public void syncMat(){
        List<M_item> items = erpService.getItem();
        for (M_item item : items) {
@@ -193,11 +227,23 @@
     * 成品出库 发货通知单表头,表明细
     */
    @Scheduled(cron = "0/15 * * * * ? ")
    @Synchronized
    @Transactional
    public void syncOutStock(){
        List<OutStockBill> outStockBills = erpService.syncOutStock();
        for (Integer i = 0; i < outStockBills.size(); i++) {
            OutStockBill outStockBill = outStockBills.get(i);
            //同一单号存在相同物料编码数据,该单号不予处理
            Number fnumberCount = erpService.QueryFnumberOutCount(outStockBill.getFInterID());
            if(fnumberCount.intValue() > 1){
                log.info("出库通知单存在物料相同数据[FBillNo={},FInterID={},]", outStockBill.getFBillNo(), outStockBill.getFInterID());
                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);
@@ -212,8 +258,9 @@
                            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);  //产品代码|生产单号
//                        String Fnumber = (Cools.isEmpty(outStockBillEntry.getFSourceBillNo())) ? outStockBillEntry.getFnumber() : outStockBillEntry.getFnumber()+"|"+outStockBillEntry.getFSourceBillNo();
//                        outStockBillEntry.setFnumber(Fnumber);  //产品代码|生产单号
                        outStockBillEntry.setFAmount(new BigDecimal(0));
                        if (!outStockService.insert(outStockBillEntry)) {
                            log.info("提取出库通知明细表OutStockBillEntry失败[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(),
                                    outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID());
@@ -226,6 +273,7 @@
                    } else {
                        // 数量有变化进行更新
                        if (Double.doubleToLongBits(one.getFAuxQty().doubleValue()) != Double.doubleToLongBits(outStockBillEntry.getFAuxQty().doubleValue())) {
                            outStockBillEntry.setFAmount(new BigDecimal(0));
                            if (!outStockService.update(outStockBillEntry, wrapper)) {
                                log.info("同步更新通知明细表OutStockBillEntry失败[FBrNo={},FInterID={},FEntryID={}]",outStockBillEntry.getFBrNo(),
                                        outStockBillEntry.getFInterID(),outStockBillEntry.getFEntryID());
@@ -242,7 +290,7 @@
            }
            if (!erpService.haveReadOutBill(outStockBill.getFBillNo(),outStockBill.getFInterID())) {
            if (!erpService.haveReadOutBill(outStockBill.getFBillNo(),outStockBill.getFInterID(),1)) {
                log.error("更新出库通知单读取状态失败[FBrNo={},FInterID={}]", outStockBill.getFBrNo(),outStockBill.getFInterID());
            }
        }