春风项目四线(合箱线、总装线)
wujian
2024-10-23 2c65c31aceb16c1d06c692266e3fb555ecafdfb5
jcdm-quartz/src/main/java/com/jcdm/quartz/task/RyTask.java
@@ -1,6 +1,12 @@
package com.jcdm.quartz.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.jcdm.main.bs.beatSetting.domain.BsBeatSetting;
import com.jcdm.main.bs.beatSetting.domain.ProductNumTable;
import com.jcdm.main.bs.beatSetting.service.IBsBeatSettingService;
import com.jcdm.main.bs.beatSetting.service.ProductNumTableService;
import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling;
import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService;
import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService;
@@ -15,8 +21,11 @@
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -34,6 +43,12 @@
    @Resource
    private OmProductionOrdeInfoServiceImpl omProductionOrdeInfoService;
    @Resource
    private IBsBeatSettingService bsBeatSettingService;
    @Resource
    private ProductNumTableService productNumTableService;
    private static final Logger logger = LoggerFactory.getLogger("sys-user");
@@ -87,6 +102,7 @@
    public void workReportingTasks(){
        report10();
        report20();
        updateProductNum();
    }
    public void report10(){
@@ -171,6 +187,196 @@
        }
    }
    public void updateProductNum(){
        LocalDate now = LocalDate.now();
        ProductNumTable productNumTableQuery = new ProductNumTable();
        productNumTableQuery.setProductTime(now);
        //已存在的统计数据
        List<ProductNumTable> productNumTableList = productNumTableService.selectProductList(productNumTableQuery);
        String actModel;
        //获取当天所有生产数据
        List<BsOrderScheduling> bsOrderSchedulingList = bsOrderSchedulingService.selectBsOrderSchedulingListForNum();
        if (CollUtil.isNotEmpty(bsOrderSchedulingList)){
            List<BsOrderScheduling> tempList = bsOrderSchedulingList.stream()
                    .filter(x -> ObjectUtil.isNotNull(x.getFinalAssemblyOfflineTime()))
                    .collect(Collectors.toList());
            List<BsOrderScheduling> collect2 = tempList.stream()
                    .sorted(Comparator.comparing(BsOrderScheduling::getFinalAssemblyOfflineTime).reversed())
                    .collect(Collectors.toList());
            if (CollUtil.isNotEmpty(collect2)){
                BsOrderScheduling bsOrderScheduling = collect2.get(0);
                actModel = bsOrderScheduling.getModel();
            } else {
                actModel = null;
            }
            List<String> modelList = tempList.stream().map(BsOrderScheduling::getModel).distinct().collect(Collectors.toList());
            Integer modelNum = 0;
            if (CollUtil.isNotEmpty(modelList)){
                modelNum = modelList.size();
            }
            Integer productNumTheory = caculateProductNumTheory(actModel, now, modelNum);
            List<ProductNumTable> saveDate = new ArrayList<>();
            Map<String, List<BsOrderScheduling>> collect = bsOrderSchedulingList.stream().collect(Collectors.groupingBy(BsOrderScheduling::getModel));
            for (String s : collect.keySet()) {
                List<BsOrderScheduling> bsOrderSchedulingList1 = collect.get(s);
                //合箱上线
                long count1 = bsOrderSchedulingList1.stream().filter(x -> ObjectUtil.isNotNull(x.getBoxClosingOnlineTime())).count();
                //总装上线
                long count2 = bsOrderSchedulingList1.stream().filter(x -> ObjectUtil.isNotNull(x.getFinalAssemblyLaunchTime())).count();
                //总装下线
                long count3 = bsOrderSchedulingList1.stream().filter(x -> ObjectUtil.isNotNull(x.getFinalAssemblyOfflineTime())).count();
                //检查判断是更新还是插入
                List<ProductNumTable> collect1 = productNumTableList.stream().filter(x -> s.equals(x.getModel())).collect(Collectors.toList());
                if (CollUtil.isEmpty(collect1)){
                    //插入
                    ProductNumTable productNumTable = new ProductNumTable();
                    UUID uuid = UUID.randomUUID();
                    productNumTable.setId(uuid.getMostSignificantBits());
                    productNumTable.setModel(s);
                    productNumTable.setHxOnlineNum((int) count1);
                    productNumTable.setZzOnlineNum((int) count2);
                    productNumTable.setZzOfflineNum((int) count3);
                    productNumTable.setProductTime(now);
                    productNumTable.setProductNumTheory(productNumTheory);
                    saveDate.add(productNumTable);
                } else {
                    //更新
                    //判断是否需要更新
                    ProductNumTable productNumTable = collect1.get(0);
                    Integer hxOnlineNum = productNumTable.getHxOnlineNum();
                    Integer zzOnlineNum = productNumTable.getZzOnlineNum();
                    Integer zzOfflineNum = productNumTable.getZzOfflineNum();
                    if (!hxOnlineNum.equals((int)count1) || !zzOnlineNum.equals((int) count2) || !zzOfflineNum.equals((int)count3)){
                        //更新
                        productNumTable.setHxOnlineNum((int) count1);
                        productNumTable.setZzOnlineNum((int) count2);
                        productNumTable.setZzOfflineNum((int) count3);
                        productNumTable.setProductNumTheory(productNumTheory);
                        productNumTableService.updateProductNum(productNumTable);
                    }
                }
            }
            if (CollUtil.isNotEmpty(saveDate)){
                productNumTableService.insertProductList(saveDate);
            }
        }
    }
    private Integer caculateProductNumTheory(String actModel, LocalDate now,Integer modelNum) {
        long l = System.currentTimeMillis();
        System.out.println("开始:----"+l);
        //计算总产量数据
        String beat = "";
        List<BsBeatSetting> bsBeatSettings = bsBeatSettingService.selectBsBeatSettingList(new BsBeatSetting());
        if (ObjectUtil.isNotNull(actModel)){
            List<BsBeatSetting> collect = bsBeatSettings.stream().filter(x -> actModel.contains(x.getProductCode())).collect(Collectors.toList());
            if (CollUtil.isNotEmpty(collect)){
                BsBeatSetting bsBeatSetting = collect.get(0);
                beat = bsBeatSetting.getBeat();
            }
        }
        LocalDateTime nowTime = LocalDateTime.now();
        long workTime = 0;
        LocalDateTime time1 = now.atTime(0, 0, 0);
        LocalDateTime time_rest = now.atTime(0, 30, 0);
        LocalDateTime time2 = now.atTime(3, 0, 0);
        LocalDateTime time3 = now.atTime(3, 10, 0);
        LocalDateTime time4 = now.atTime(5, 0, 0);
        LocalDateTime time5 = now.atTime(5, 10, 0);
        LocalDateTime time6 = now.atTime(7, 0, 0);
        LocalDateTime time7 = now.atTime(8, 0, 0);
        LocalDateTime time8 = now.atTime(10, 0, 0);
        LocalDateTime time9 = now.atTime(10, 10, 0);
        LocalDateTime time10 = now.atTime(11, 10, 0);
        LocalDateTime time11 = now.atTime(12, 10, 0);
        LocalDateTime time12 = now.atTime(15, 0, 0);
        LocalDateTime time13 = now.atTime(15, 10, 0);
        LocalDateTime time14 = now.atTime(20, 0, 0);
        LocalDateTime time15 = now.atTime(20, 10, 0);
        LocalDateTime time16 = now.atTime(22, 0, 0);
        LocalDateTime time17 = now.atTime(22, 10, 0);
        LocalDateTime time18 = now.atTime(23, 59, 59);
        if (nowTime.isBefore(time_rest)){
            //0-0.30
            workTime = 0;
        } else if (nowTime.isBefore(time2)){
            //0-3
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 1800;
        } else if (nowTime.isBefore(time3)){
            //0-3.10
            workTime = ChronoUnit.SECONDS.between(time1,time2)  - 1800;
        } else if (nowTime.isBefore(time4)){
            //0-5
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 2400;
        } else if (nowTime.isBefore(time5)){
            //0-5.10
            workTime = ChronoUnit.SECONDS.between(time1,time4)  - 2400;
        } else if (nowTime.isBefore(time6)){
            //0-7
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 3000;
        } else if (nowTime.isBefore(time7)){
            //0-8
            workTime = ChronoUnit.SECONDS.between(time1,time6)  - 3000;
        } else if (nowTime.isBefore(time8)){
            //0-10
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 6600;
        } else if (nowTime.isBefore(time9)){
            //0-10.10
            workTime = ChronoUnit.SECONDS.between(time1,time8)  - 6600;
        } else if (nowTime.isBefore(time10)){
            //0-11.10
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 7200;
        } else if (nowTime.isBefore(time11)){
            //0-12.10
            workTime = ChronoUnit.SECONDS.between(time1,time10)  - 7200;
        }  else if (nowTime.isBefore(time12)){
            //0-15
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 7200 - 3600;
        } else if (nowTime.isBefore(time13)){
            //0-15.10
            workTime = ChronoUnit.SECONDS.between(time1,time12)  - 7200 - 3600;
        } else if (nowTime.isBefore(time14)){
            //0-20
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 7200 - 3600 - 600;
        } else if (nowTime.isBefore(time15)){
            //0-20.10
            workTime = ChronoUnit.SECONDS.between(time1,time14)  - 7200 - 3600 - 600;
        } else if (nowTime.isBefore(time16)){
            //0-22
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 7200 - 3600 - 600 - 600;
        } else if (nowTime.isBefore(time17)){
            //0-22.10
            workTime = ChronoUnit.SECONDS.between(time1,time16)  - 7200 - 3600 - 600 - 600;
        } else if (nowTime.isBefore(time18)){
            //0-24
            workTime = ChronoUnit.SECONDS.between(time1,nowTime)  - 7200 - 3600 - 600 - 600 - 600;
        }
        if (modelNum > 1){
            workTime = workTime - 1800L *(modelNum-1);
            if (workTime <0){
                workTime = 0;
            }
        }
        System.out.println(workTime+"---------");
        long l2 = System.currentTimeMillis();
        System.out.println("结束:----"+l2);
        long l1 = l2 - l;
        System.out.println("耗费时间:----"+l1);
        //理论产量
        Integer productNumTheory = 0;
        if (StrUtil.isNotBlank(beat)){
            int i = Integer.parseInt(beat);
            Integer workTimeInt = (int) workTime;
            productNumTheory = Math.floorDiv(workTimeInt, i);
        }
        return productNumTheory;
    }
    public static String getProductionPlanInformationXml(String orderNo,String location){
        String content = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:sap-com:document:sap:rfc:functions\">\n" +
                "   <soapenv:Header/>\n" +