栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

利用反射和多线程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

利用反射和多线程

package com.hikvision.mes.report.service.service.impl;

import cn.evun.ime.platform.core.utils.PaginationHelp;
import cn.evun.ime.platform.core.utils.StringUtils;
import cn.evun.sweet.framework.core.mvc.model.QueryResult;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.hikvision.mes.report.sdk.constant.MaStatusConfig;
import com.hikvision.mes.report.sdk.dto.*;
import com.hikvision.mes.report.service.configuration.ExecutorsPoolConfiguration;
import com.hikvision.mes.report.service.dao.BulletinBoardBasicInfoDao;
import com.hikvision.mes.report.service.dao.WorkInProcessDao;
import com.hikvision.mes.report.service.service.AndonDataAnalyseKanbanService;
import com.hikvision.mes.report.service.service.WorkInProcessService;
import com.hikvision.mes.report.service.utils.ReflectionNameUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.LazyLoader;
import org.springframework.stereotype.Service;

import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.groupingBy;


@Service
public class WorkInProcessServiceImpl implements WorkInProcessService {

    @Autowired
    private WorkInProcessDao workInProcessDao;
    @Autowired
    private AndonDataAnalyseKanbanService andonDataAnalyseKanbanService;
    @Autowired
    private BulletinBoardBasicInfoDao bulletinBoardBasicInfoDao;

    
    @Override
    public List selectWorkInProcessListChart(WorkInProcessDto req) {

        WorkInProcessDto resq = new WorkInProcessDto();
        resq.setbaseCode("8001");
        List  factoryCodes = new ArrayList<>();
        factoryCodes.add("W911");
        resq.setFactoryCodes(factoryCodes);
        resq.setByType("BY_HOUR");
        req = resq;
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        //查询电装订单数目
        List total = workInProcessDao.selectElectricTotalNumber(req);
        //查询数目
        List resultList = new ArrayList<>();
        //获取v1 list
        List list =   workInProcessDao.getbaseSearchList(req);
        this.list = list;
        //获取基础集合
        List baseList =   workInProcessDao.getbaseList(list);
        this.baseList = baseList;
        //下面这些接口可以并行执行

        ExecutorService threadPool = Executors.newFixedThreadPool(5);
        Future> smtFuture = threadPool.submit(new Task(this, "method1", null));
        Future> patchFuture = threadPool.submit(new Task(this, "method2", null));
        try {
            List s1 = smtFuture.get();
            List s2 = patchFuture.get();
            System.out.println(s2.toString());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        //        List baseResult2 = futureGetProxy(smtFuture, WorkInProcessV4Dto.class);

        //获取smtWitList
        List smtWitList =   workInProcessDao.getSmtWitList(baseList);
       //获取DZ01,DZ02,待贴片集合
        List patchList =   workInProcessDao.getPatchList(list,baseList);
        //获取待插件,待测试,待维修数据 wait_plug,wait_test,wait_repair
        List waitPlugList =   workInProcessDao.getWaitPlugList(list,baseList);
        //获取wait_in_storage集合 待入库集合
        List inStorageList =   workInProcessDao.getInStorageList(list);


        //根据工单号进行分组
        Map> smtWitMap = smtWitList.stream().collect(groupingBy(WorkInProcessV4Dto::getAufnr));
        Map> patchMap = patchList.stream().collect(groupingBy(WorkInProcessV5Dto::getAufnr));
        Map> waitMap = waitPlugList.stream().collect(groupingBy(WorkInProcessV6Dto::getAufnr));
        Map> inStorageMap = inStorageList.stream().collect(groupingBy(WorkInProcessV8Dto::getAufnr));
        Double smtWip = 0.0;
        Double dz01num = 0.0;
        Double dz02num = 0.0;
        Double plug = 0.0;
        Double test = 0.0;
        Double repair = 0.0;
        Double inStorage = 0.0;
        //baseList根据产线进行分组
        Map> plineMap = baseList.stream().collect(groupingBy(WorkInProcessV3Dto::getPline));
        if("BY_HOUR".equals(req.getByType())){
            //获取dz01_time,dz02_time,dz03_time,dz04_time配置时间
            List wipTimeList =   workInProcessDao.getWipTimeList(list);
            //根据工单号进行分组
            Map> wiMap = wipTimeList.stream().collect(groupingBy(WorkInProcessV9Dto::getAufnr));
            for (Map.Entry> ent : plineMap.entrySet()) {
                WorkInProcessResultDto work = new WorkInProcessResultDto();
                String pline = ent.getKey();
                work.setPline(pline);
                work.setCategory(pline);
                List v3Dtos = ent.getValue();
                for (WorkInProcessV3Dto dto:v3Dtos){
                    //根据订单号获取DZ01-4 的配置时间
                    GetDzTime dzTime = new GetDzTime(wiMap, dto).invoke();
                    Double dz01_time = dzTime.getDz01_time();
                    Double dz02_time = dzTime.getDz02_time();
                    Double dz03_time = dzTime.getDz03_time();
                    Double dz04_time = dzTime.getDz04_time();
                    //根据订单获取各个指标
                    GetNumber target = new GetNumber(smtWitMap, patchMap, waitMap, inStorageMap, dto).invoke();
                    Double  d1 = target.getD1();
                    Double  d2 = target.getD2();
                    Double  pl = target.getPl();
                    Double  te = target.getTe();
                    Double  re = target.getRe();
                    Double  in = target.getIn();
                    Double  inNum = target.getInNum();
                    //当选择是swip工时的时候
                    try {
                        Double num1 = inNum * dz03_time;
                        smtWip = smtWip + num1;
                    } catch (Exception e) {
                        System.out.println("inNum="+inNum+"dz03_time="+dz03_time+"当前订单=="+dto.getAufnr());
                    }
                    try {
                        Double num2 = d1 * dz01_time;
                        dz01num = dz01num + num2;
                    } catch (Exception e) {
                        System.out.println("d1="+d1+"dz01_time="+dz01_time+"当前订单=="+dto.getAufnr());
                    }

                    Double num3 = d2 * dz02_time;
                    dz02num = dz02num + num3;
                    Double num4 = pl * dz03_time;
                    plug = plug + num4;
                    Double num5 = te * dz04_time;
                    test = test + num5;
                    Double num6 = re * dz04_time;
                    repair = repair + num6;
                    Double num7 = in * (dz04_time+dz04_time);
                    inStorage = inStorage + num7;
                }
                work.setSmtWip(new BigDecimal(smtWip * 1.00 / (3600 * 1)).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
                work.setDzOne(new BigDecimal(dz01num * 1.00 / (3600 * 1)).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
                work.setDzTwo(new BigDecimal(dz02num * 1.00 / (3600 * 1)).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
                work.setPlug(new BigDecimal(plug * 1.00 / (3600 * 1)).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
                work.setTest(new BigDecimal(test * 1.00 / (3600 * 1)).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
                work.setRepair(new BigDecimal(repair * 1.00 / (3600 * 1)).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
                work.setInStorage(new BigDecimal(inStorage * 1.00 / (3600 * 1)).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
                resultList.add(work);
            }
        }else {
            for (Map.Entry> ent : plineMap.entrySet()) {
                WorkInProcessResultDto work = new WorkInProcessResultDto();
                String pline = ent.getKey();
                work.setPline(pline);
                work.setCategory(pline);
                List v3Dtos = ent.getValue();
                for (WorkInProcessV3Dto dto:v3Dtos){
                    //根据订单获取各个指标
                    GetNumber target = new GetNumber(smtWitMap, patchMap, waitMap, inStorageMap, dto).invoke();
                    Double  d1 = target.getD1();
                    Double  d2 = target.getD2();
                    Double  pl = target.getPl();
                    Double  te = target.getTe();
                    Double  re = target.getRe();
                    Double  in = target.getIn();
                    Double  inNum = target.getInNum();
                    smtWip = smtWip + inNum;
                    inStorage = inStorage + in;
                    repair = repair + re;
                    dz01num = dz01num + d1;
                    dz02num = dz02num + d2;
                    plug = plug + pl;
                    test = test + te;
                }
                work.setSmtWip(smtWip);
                work.setDzOne(dz01num);
                work.setDzTwo(dz02num);
                work.setPlug(plug);
                work.setTest(test);
                work.setRepair(repair);
                work.setInStorage(inStorage);
                resultList.add(work);
            }
        }
        if (resultList != null && resultList.size() > 0) {
            Map> map = total.stream().collect(groupingBy(WorkInProcessResultDto::getDimCode));
            for (WorkInProcessResultDto wd : resultList) {
                wd.setOrdNum(map.get(wd.getPline()).get(0).getTotalnum());
            }
        }
        WorkInProcessResultDto wpd = new WorkInProcessResultDto();
        wpd.setPatch(resultList.stream().mapToDouble(WorkInProcessResultDto::getPatch).sum());
        wpd.setSmtWip(resultList.stream().mapToDouble(WorkInProcessResultDto::getSmtWip).sum());
        wpd.setPlug(resultList.stream().mapToDouble(WorkInProcessResultDto::getPlug).sum());
        wpd.setTest(resultList.stream().mapToDouble(WorkInProcessResultDto::getTest).sum());
        wpd.setRepair(resultList.stream().mapToDouble(WorkInProcessResultDto::getRepair).sum());
        wpd.setInStorage(resultList.stream().mapToDouble(WorkInProcessResultDto::getInStorage).sum());
        wpd.setOrdNum(resultList.stream().mapToInt(WorkInProcessResultDto::getOrdNum).sum());
        if ("BY_HOUR".equals(req.getByType())) {
            wpd.setPatch(new BigDecimal((double) wpd.getPatch()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setSmtWip(new BigDecimal((double) wpd.getSmtWip()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setPlug(new BigDecimal((double) wpd.getPlug()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setTest(new BigDecimal((double) wpd.getTest()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setRepair(new BigDecimal((double) wpd.getRepair()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setInStorage(new BigDecimal((double) wpd.getInStorage()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
        }
        wpd.setCategory("汇总");
        resultList.add(0, wpd);
        return resultList;
    }

    
    @Override
    public List selectAllbaseCode() {
        List resultList = workInProcessDao.selectAllbaseCode();
        //如果是杭州环境则过滤基地
        String baseCode =bulletinBoardBasicInfoDao.selectEnvironmentalByShiftTime();
        if("8001".equals(baseCode)){
            if(resultList !=null && resultList.size()>0){
                resultList =  resultList.stream().filter(e-> MaStatusConfig.baseSet.contains(e.getbaseCode())).collect(Collectors.toList());
            }
        }
        return resultList;
    }

    
    @Override
    public List selectElectricFactory(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectElectricFactory(req);
        return resultList;
    }

    
    @Override
    public List selectAssembleFactory(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectAssembleFactory(req);
        return resultList;
    }

    
    @Override
    public List selectAssembleFloor(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectAssembleFloor(req);
        return resultList;
    }

    
    @Override
    public List selectAssembleWorkLine(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectAssembleWorkLine(req);
        return resultList;
    }

    
    @Override
    public List selectElectricWorkLine(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectElectricWorkLine(req);
        return resultList;
    }

    
    @Override
    public List selectElectricFloor(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectElectricFloor(req);
        return resultList;
    }

    
    @Override
    public QueryResult selectCategoryRunIn(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        PageHelper.startPage(req.getPageNum(), req.getNumPerPage());
//        List resultList = workInProcessDao.selectCategoryRunIn(req);
        Page page = workInProcessDao.selectCategoryRunIn(req);
        page.stream().forEach(e -> e.setOrderNo(e.getAufnr()));
        WorkInProcessResultDto total = workInProcessDao.selectCategoryRunInTotal(req);
            //订单号为了和别的区别开来
            total.setOrderNo("汇总");
            total.setAufnr("汇总");
            page.add(0, total);

//        WorkInProcessResultDto wpd = new WorkInProcessResultDto();
//        resultList.stream().forEach(e->e.setOrderNo(e.getAufnr()));
//        wpd.setPatch(resultList.stream().mapToDouble(WorkInProcessResultDto::getPatch).sum());
//        wpd.setSmtWip(resultList.stream().mapToDouble(WorkInProcessResultDto::getSmtWip).sum());
//        wpd.setPlug(resultList.stream().mapToDouble(WorkInProcessResultDto::getPlug).sum());
//        wpd.setTest(resultList.stream().mapToDouble(WorkInProcessResultDto::getTest).sum());
//        wpd.setRepair(resultList.stream().mapToDouble(WorkInProcessResultDto::getRepair).sum());
//        wpd.setInStorage(resultList.stream().mapToDouble(WorkInProcessResultDto::getInStorage).sum());
        wpd.setOrdNum(resultList.stream().mapToInt(WorkInProcessResultDto::getOrdNum).sum());
//        if("BY_HOUR".equals(req.getByType())){
//            wpd.setPatch(new BigDecimal((double)wpd.getPatch()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
//            wpd.setSmtWip(new BigDecimal((double)wpd.getSmtWip()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
//            wpd.setPlug(new BigDecimal((double)wpd.getPlug()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
//            wpd.setTest(new BigDecimal((double)wpd.getTest()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
//            wpd.setRepair(new BigDecimal((double)wpd.getRepair()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
//            wpd.setInStorage(new BigDecimal((double)wpd.getInStorage()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
//        }
//        wpd.setOrderNo("汇总");
//        wpd.setAufnr("汇总");
//        resultList.add(0,wpd);
        return PaginationHelp.parseDTOPage(page);
    }

    
    @Override
    public List selectCategoryRunInAll(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        List resultList = workInProcessDao.selectCategoryRunIn(req);
        WorkInProcessResultDto wpd = new WorkInProcessResultDto();
        resultList.stream().forEach(e->e.setOrderNo(e.getAufnr()));
        wpd.setPatch(resultList.stream().mapToDouble(WorkInProcessResultDto::getPatch).sum());
        wpd.setSmtWip(resultList.stream().mapToDouble(WorkInProcessResultDto::getSmtWip).sum());
        wpd.setPlug(resultList.stream().mapToDouble(WorkInProcessResultDto::getPlug).sum());
        wpd.setTest(resultList.stream().mapToDouble(WorkInProcessResultDto::getTest).sum());
        wpd.setRepair(resultList.stream().mapToDouble(WorkInProcessResultDto::getRepair).sum());
        wpd.setInStorage(resultList.stream().mapToDouble(WorkInProcessResultDto::getInStorage).sum());
        if("BY_HOUR".equals(req.getByType())){
            wpd.setPatch(new BigDecimal((double)wpd.getPatch()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setSmtWip(new BigDecimal((double)wpd.getSmtWip()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setPlug(new BigDecimal((double)wpd.getPlug()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setTest(new BigDecimal((double)wpd.getTest()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setRepair(new BigDecimal((double)wpd.getRepair()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
            wpd.setInStorage(new BigDecimal((double)wpd.getInStorage()).setScale(1, BigDecimal.ROUND_HALF_UP).doublevalue());
        }
        wpd.setOrderNo("汇总");
        wpd.setAufnr("汇总");
        resultList.add(0,wpd);
        return resultList;
    }

    
    @Override
    public QueryResult selectPatchRunIn(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        PageHelper.startPage(req.getPageNum(), req.getNumPerPage());
        Page resultList = workInProcessDao.selectPatchRunIn(req);
        if ("smtWip".equals(req.getFlagType()) || "inStorage".equals(req.getFlagType())) {
            resultList.stream().forEach(e -> e.setStVal(e.getWaitValue()));
        }
        WorkInProcessResultDto total =  workInProcessDao.selectPatchRunInTotal(req);
        if ("smtWip".equals(req.getFlagType()) || "inStorage".equals(req.getFlagType())) {
            total.setStVal(total.getWaitValue());
        }
        total.setAufnr("汇总");
        resultList.add(0, total);
        return PaginationHelp.parseDTOPage(resultList);
    }

    
    @Override
    public List selectPatchRunInAll(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        List resultList = workInProcessDao.selectPatchRunIn(req);
        WorkInProcessResultDto wd = new WorkInProcessResultDto();
        wd.setWaitValue(resultList.stream().mapToDouble(WorkInProcessResultDto::getWaitValue).sum());
        wd.setAufnr("汇总");
        resultList.add(0, wd);
        if ("smtWip".equals(req.getFlagType()) || "inStorage".equals(req.getFlagType())) {
            resultList.stream().forEach(e -> e.setStVal(e.getWaitValue()));
        }
        return resultList;
    }

    
    @Override
    public List selectSmtWipRunIn(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectSmtWipRunIn(req);
        return resultList;
    }

    
    @Override
    public List selectPlugRunIn(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectPlugRunIn(req);
        return resultList;
    }

    
    @Override
    public List selectTestRunIn(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectTestRunIn(req);
        return resultList;
    }

    
    @Override
    public List selectRepairRunIn(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectRepairRunIn(req);
        return resultList;
    }

    
    @Override
    public List selectInStorageRunIn(WorkInProcessDto req) {
        List resultList = workInProcessDao.selectInStorageRunIn(req);
        return resultList;
    }

    
    @Override
    public QueryResult selectThirdRunIn(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        PageHelper.startPage(req.getTpageNum(), req.getTnumPerPage());
        Page resultList = workInProcessDao.selectThirdRunIn(req);
        resultList.stream().forEach(e -> e.setScanTime(e.getScanTime().substring(0, 19)));
        return PaginationHelp.parseDTOPage(resultList);
    }

    
    @Override
    public QueryResult selectRepairThird(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        PageHelper.startPage(req.getTpageNum(), req.getTnumPerPage());
        Page resultList = workInProcessDao.selectRepairThird(req);
        resultList.stream().forEach(e -> e.setScanTime(e.getScanTime().substring(0, 19)));
        return PaginationHelp.parseDTOPage(resultList);
    }

    
    @Override
    public QueryResult selectElectricThird(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        PageHelper.startPage(req.getTpageNum(), req.getTnumPerPage());
        Page resultList = workInProcessDao.selectElectricThird(req);
        resultList.stream().forEach(e -> e.setScanTime(e.getScanTime().substring(0, 19)));
        return PaginationHelp.parseDTOPage(resultList);
    }

    
    @Override
    public QueryResult selectPatchThird(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        PageHelper.startPage(req.getTpageNum(), req.getTnumPerPage());
        Page resultList = workInProcessDao.selectPatchThird(req);
        resultList.stream().forEach(e -> e.setScanTime(e.getScanTime().substring(0, 19)));
        return PaginationHelp.parseDTOPage(resultList);
    }
    
    @Override
    public QueryResult selectPlugThird(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        PageHelper.startPage(req.getTpageNum(), req.getTnumPerPage());
        Page resultList = workInProcessDao.selectPlugThird(req);
        resultList.stream().forEach(e -> e.setScanTime(e.getScanTime().substring(0, 19)));
        return PaginationHelp.parseDTOPage(resultList);
    }
    
    @Override
    public QueryResult selectTestThird(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        PageHelper.startPage(req.getTpageNum(), req.getTnumPerPage());
        Page resultList = workInProcessDao.selectTestThird(req);
        resultList.stream().forEach(e -> e.setScanTime(e.getScanTime().substring(0, 19)));
        return PaginationHelp.parseDTOPage(resultList);
    }
    
    @Override
    public List selectThirdRunInAll(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        List resultList = workInProcessDao.selectThirdRunIn(req);
        resultList.stream().forEach(e -> e.setScanTime(e.getScanTime().substring(0, 19)));
        return resultList;
    }

    
    @Override
    public Integer selectThirdRunInAllCount(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        Integer resultList = workInProcessDao.selectThirdRunInAllCount(req);
        return resultList;
    }


    
    public Integer selectAssembleSecondOrderNum(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        Map resultMap = new HashMap<>();
        Map titleMap = new HashMap<>();
        List result = new ArrayList<>();
        List titleDtos = new ArrayList<>();
        List titleDtoSort = new ArrayList<>();
        Integer sum = 0;
        req.setProcessname("");
//        if ("分类".equals(req.getProcessname())) {
//            req.setProcessname("");
//        }
        List resultList = workInProcessDao.selectAssembleSecondList(req);
        if (resultList != null && resultList.size() > 0) {
            Set processNameList = new linkedHashSet<>();
            for (WorkInProcessResultDto ls :resultList){
                processNameList.add(ls.getProcessname());
            }
            List lists = getStringList();
            //按照工厂或者线体分组
            Map> codeMap = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getAufnr));
            //按照工序分组
            Map> map = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getProcess));
            //先循环工厂或者线体
            for (Map.Entry> entry : codeMap.entrySet()) {
                String key = entry.getKey();
                AssembleWorkInProcessDto processDto = new AssembleWorkInProcessDto();
                processDto.setOrderNumber(key);
//                processDto.setTname(entry.getValue().get(0).getTname());
                int x = 0;
                //再循环工序
                for (Map.Entry> ent : map.entrySet()) {
                    List list = ent.getValue();
                    String field = lists.get(x);
                    AssembleTitleDto titleDto = new AssembleTitleDto();
                    titleDto.setElement(field);
                    titleDto.setElementName(list.get(0).getProcessname());
                    titleMap.put(field, titleDto);
                    for (int i = 0; i < list.size(); i++) {
                        WorkInProcessResultDto ls = list.get(i);
                        if (key.equals(ls.getAufnr())) {
                            try {
                                processDto.setProcess(ls.getProcess());
                                ReflectionNameUtil.setValue(processDto, processDto.getClass(), field, AssembleWorkInProcessDto.class.getDeclaredField(field).getType(), ls.getTotalnum());
                            } catch (NoSuchFieldException e) {
                                e.printStackTrace();
                            }
                        } else {
                            try {
                                processDto.setProcess(ls.getProcess());
                                Object ob = ReflectionNameUtil.getGetMethod(processDto, field);
                                if (ob == null) {
                                    ReflectionNameUtil.setValue(processDto, processDto.getClass(), field, AssembleWorkInProcessDto.class.getDeclaredField(field).getType(), 0);
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    x = x + 1;
                }
                result.add(processDto);
            }
            //获取菜单列
            if (titleMap.size() > 0) {
                for (Map.Entry entry : titleMap.entrySet()) {
                    titleDtos.add(entry.getValue());
                }
            }

            //按照工序名称分组
            Map> map2 = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getProcessname));
            AssembleWorkInProcessDto wp = new AssembleWorkInProcessDto();
            for (AssembleWorkInProcessDto aw : result) {
                req.setAufnr(aw.getOrderNumber());
                //查询订单数字段
                Integer tn = workInProcessDao.selectTotalNumberByOrderNumber(req);
                if (tn == null) {
                    tn = 0;
                }
                aw.setTotalnum(tn);
                Integer num = 0;
                for (AssembleTitleDto at : titleDtos) {
                    String name = at.getElementName();
                    String element = at.getElement();
                    try {
                        Integer ob = (Integer) ReflectionNameUtil.getGetMethod(aw, element);
                        if ("GR交货数".equals(name) || "报工待入库".equals(name)) {

                        } else {
                            num = num + ob;
                        }
                        //再循环工序名称
                        for (Map.Entry> et : map2.entrySet()) {
                            if (name.equals(et.getKey())) {
                                Integer number = et.getValue().stream().mapToInt(WorkInProcessResultDto::getTotalnum).sum();
                                ReflectionNameUtil.setValue(wp, wp.getClass(), element, AssembleWorkInProcessDto.class.getDeclaredField(element).getType(), number);
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                aw.setWaitNumber(tn - num);
            }
            for (String pl:processNameList){
                for (AssembleTitleDto tl:titleDtos){
                    if(pl.equals(tl.getElementName())){
                        titleDtoSort.add(tl);
                    }
                }
            }
            result.sort(Comparator.comparing(AssembleWorkInProcessDto::getOrderNumber));
            wp.setWaitNumber(result.stream().mapToInt(AssembleWorkInProcessDto::getWaitNumber).sum());
            wp.setTotalnum(result.stream().mapToInt(AssembleWorkInProcessDto::getTotalnum).sum());
            wp.setOrderNumber("汇总");
            sum = wp.getTotalnum();
        }
        AssembleTitleDto cateDto = new AssembleTitleDto();
        cateDto.setElementName("订单号");
        cateDto.setElement("orderNumber");
        titleDtoSort.add(0, cateDto);
        AssembleTitleDto titleDto2 = new AssembleTitleDto();
        titleDto2.setElementName("工序编码");
        titleDto2.setElement("process");
        titleDtoSort.add(titleDto2);
        resultMap.put("resultList", result);
        resultMap.put("titleList", titleDtoSort);
        return sum;
    }

    
    @Override
    public Map selectAssembleList(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        Map resultMap = new HashMap<>();
        Map titleMap = new HashMap<>();
        List result = new ArrayList<>();
        List titleDtos = new ArrayList<>();
        List titleDtoSort = new ArrayList<>();
        List resultList = workInProcessDao.selectAssembleList(req);
        if (resultList != null && resultList.size() > 0) {
            Set processNameList = new linkedHashSet<>();
            for (WorkInProcessResultDto ls :resultList){
                processNameList.add(ls.getProcessname());
            }
            List lists = getStringList();
            //按照工厂或者线体分组
            Map> codeMap = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getDimCode));
            //按照工序分组
            Map> map = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getProcess));
            //先循环工厂或者线体
            for (Map.Entry> entry : codeMap.entrySet()) {
                String key = entry.getKey();
                AssembleWorkInProcessDto processDto = new AssembleWorkInProcessDto();
                processDto.setDimCode(key);
                processDto.setTname(entry.getValue().get(0).getTname());
                int x = 0;
                //再循环工序
                for (Map.Entry> ent : map.entrySet()) {
                    List list = ent.getValue();
                    String field = lists.get(x);
                    AssembleTitleDto titleDto = new AssembleTitleDto();
                    titleDto.setElement(field);
                    titleDto.setElementName(list.get(0).getProcessname());
                    titleMap.put(field, titleDto);
                    for (int i = 0; i < list.size(); i++) {
                        WorkInProcessResultDto ls = list.get(i);
                        if (key.equals(ls.getDimCode())) {
                            try {
                                processDto.setProcess(ls.getProcess());
                                ReflectionNameUtil.setValue(processDto, processDto.getClass(), field, AssembleWorkInProcessDto.class.getDeclaredField(field).getType(), ls.getTotalnum());
                            } catch (NoSuchFieldException e) {
                                e.printStackTrace();
                            }
                        } else {
                            try {
                                processDto.setProcess(ls.getProcess());
                                Object ob = ReflectionNameUtil.getGetMethod(processDto, field);
                                if (ob == null) {
                                    ReflectionNameUtil.setValue(processDto, processDto.getClass(), field, AssembleWorkInProcessDto.class.getDeclaredField(field).getType(), 0);
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    x = x + 1;
                }
                result.add(processDto);
            }
            //获取菜单列
            if (titleMap.size() > 0) {
                for (Map.Entry entry : titleMap.entrySet()) {
                    titleDtos.add(entry.getValue());
                }
            }
            //查询订单数字段
            List totalNumbers = workInProcessDao.selectTotalNumber(req);
            //按照工序名称分组
            Map> map2 = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getProcessname));
            if (totalNumbers != null && totalNumbers.size() > 0) {
                Map> totalMap = totalNumbers.stream().collect(groupingBy(WorkInProcessResultDto::getDimCode));
                AssembleWorkInProcessDto wp = new AssembleWorkInProcessDto();
                for (AssembleWorkInProcessDto aw : result) {
//                    int tn = totalMap.get(aw.getDimCode()).get(0).getTotalnum();
                    req.setPline(aw.getDimCode());
                    int tn = selectAssembleSecondOrderNum(req);
                    aw.setTotalnum(tn);
                    Integer num = 0;
                    for (AssembleTitleDto at : titleDtos) {
                        String name = at.getElementName();
                        String element = at.getElement();
                        try {
                            Integer ob = (Integer) ReflectionNameUtil.getGetMethod(aw, element);
                            if ("GR交货数".equals(name) || "报工待入库".equals(name)) {

                            } else {
                                num = num + ob;
                            }
                            //再循环工序名称
                            for (Map.Entry> et : map2.entrySet()) {
                                if (name.equals(et.getKey())) {
                                    Integer number = et.getValue().stream().mapToInt(WorkInProcessResultDto::getTotalnum).sum();
                                    ReflectionNameUtil.setValue(wp, wp.getClass(), element, AssembleWorkInProcessDto.class.getDeclaredField(element).getType(), number);
                                }
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    aw.setWaitNumber(tn - num);
                }
                for (String pl:processNameList){
                    for (AssembleTitleDto tl:titleDtos){
                        if(pl.equals(tl.getElementName())){
                          titleDtoSort.add(tl);
                        }
                    }
                }
                result.sort(Comparator.comparing(AssembleWorkInProcessDto ::getDimCode));
                wp.setWaitNumber(result.stream().mapToInt(AssembleWorkInProcessDto::getWaitNumber).sum());
                wp.setTotalnum(result.stream().mapToInt(AssembleWorkInProcessDto::getTotalnum).sum());
                wp.setTname("汇总");
                result.add(0, wp);
                AssembleTitleDto cateDtoa = new AssembleTitleDto();
                cateDtoa.setElementName("待投数(有WIP的订单)");
                cateDtoa.setElement("waitNumber");
                titleDtoSort.add(cateDtoa);
                AssembleTitleDto cateDtob = new AssembleTitleDto();
                cateDtob.setElementName("订单数量(有WIP的订单)");
                cateDtob.setElement("totalnum");
                titleDtoSort.add(cateDtob);
            }

        }

        AssembleTitleDto cateDto = new AssembleTitleDto();
        cateDto.setElementName("分类");
        cateDto.setElement("tname");
        titleDtoSort.add(0, cateDto);
        AssembleTitleDto titleDto1 = new AssembleTitleDto();
        titleDto1.setElementName("分类编码");
        titleDto1.setElement("dimCode");
        AssembleTitleDto titleDto2 = new AssembleTitleDto();
        titleDto2.setElementName("工序编码");
        titleDto2.setElement("process");
        titleDtoSort.add(titleDto1);
        titleDtoSort.add(titleDto2);
        resultMap.put("resultList", result);
        resultMap.put("titleList", titleDtoSort);

        Map resp = new HashMap<>(16);
        resp.put("DataList", titleDtoSort);
        resp.put("restList", result);
        String key = UUID.randomUUID().toString();
        Map map = new linkedHashMap<>();
        map.put("cumulativeDate", "日期");
        andonDataAnalyseKanbanService.saveAndGetValueByRedis(key, JSONObject.toJSonString(map) + "&" + JSONArray.toJSonString(resp));
        resultMap.put("keyOne", key);
        return resultMap;
    }


    public List getStringList() {
        List list = new linkedList<>();
        list.add("oneNum");
        list.add("twoNum");
        list.add("threeNum");
        list.add("fourNum");
        list.add("fiveNum");
        list.add("sixNum");
        list.add("sevenNum");
        list.add("eightNum");
        list.add("nineNum");
        list.add("tenNum");
        list.add("elevenNum");
        list.add("twelveNum");
        list.add("thirteenNum");
        list.add("fourteenNum");
        list.add("fifteenNum");
        list.add("sixteenNum");
        list.add("seventeenNum");
        list.add("eighteenNum");
        list.add("nineteenNum");
        list.add("twentyNum");
        list.add("twentyOneNum");
        list.add("twentyTwoNum");
        list.add("twentyThree");
        list.add("twentyFour");
        list.add("twentyFIve");
        list.add("twentySix");
        list.add("twentySeven");
        list.add("twentyEight");
        list.add("twentyNine");
        list.add("twentyTen");
        list.add("ThirtyOne");
        list.add("ThirtyTwo");
        list.add("ThirtyThree");
        list.add("ThirtyFour");
        list.add("ThirtyFive");
        return list;
    }

    
    @Override
    public Map selectAssembleSecondList(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        Map resultMap = new HashMap<>();
        Map titleMap = new HashMap<>();
        List result = new ArrayList<>();
        List titleDtos = new ArrayList<>();
        List titleDtoSort = new ArrayList<>();
        if ("分类".equals(req.getProcessname())) {
            req.setProcessname("");
        }
        List resultList = workInProcessDao.selectAssembleSecondList(req);
        if (resultList != null && resultList.size() > 0) {
            Set processNameList = new linkedHashSet<>();
            for (WorkInProcessResultDto ls :resultList){
                processNameList.add(ls.getProcessname());
            }
            List lists = getStringList();
            //按照工厂或者线体分组
            Map> codeMap = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getAufnr));
            //按照工序分组
            Map> map = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getProcess));
            //先循环工厂或者线体
            for (Map.Entry> entry : codeMap.entrySet()) {
                String key = entry.getKey();
                List valueList = entry.getValue();
                AssembleWorkInProcessDto processDto = new AssembleWorkInProcessDto();
                processDto.setOrderNumber(key);
                processDto.setPsStartTime(valueList.get(0).getPsStartTime());
                processDto.setWorkLine(valueList.get(0).getPline());
                int x = 0;
                //再循环工序
                for (Map.Entry> ent : map.entrySet()) {
                    List list = ent.getValue();
                    String field = lists.get(x);
                    AssembleTitleDto titleDto = new AssembleTitleDto();
                    titleDto.setElement(field);
                    titleDto.setElementName(list.get(0).getProcessname());
                    titleMap.put(field, titleDto);
                    for (int i = 0; i < list.size(); i++) {
                        WorkInProcessResultDto ls = list.get(i);
                        if (key.equals(ls.getAufnr())) {
                            try {
                                processDto.setProcess(ls.getProcess());
                                ReflectionNameUtil.setValue(processDto, processDto.getClass(), field, AssembleWorkInProcessDto.class.getDeclaredField(field).getType(), ls.getTotalnum());
                            } catch (NoSuchFieldException e) {
                                e.printStackTrace();
                            }
                        } else {
                            try {
                                processDto.setProcess(ls.getProcess());
                                Object ob = ReflectionNameUtil.getGetMethod(processDto, field);
                                if (ob == null) {
                                    ReflectionNameUtil.setValue(processDto, processDto.getClass(), field, AssembleWorkInProcessDto.class.getDeclaredField(field).getType(), 0);
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    x = x + 1;
                }
                result.add(processDto);
            }
            //获取菜单列
            if (titleMap.size() > 0) {
                for (Map.Entry entry : titleMap.entrySet()) {
                    titleDtos.add(entry.getValue());
                }
            }

            //按照工序名称分组
            Map> map2 = resultList.stream().collect(groupingBy(WorkInProcessResultDto::getProcessname));
            AssembleWorkInProcessDto wp = new AssembleWorkInProcessDto();
            for (AssembleWorkInProcessDto aw : result) {
                req.setAufnr(aw.getOrderNumber());
                //查询订单数字段
                Integer tn = workInProcessDao.selectTotalNumberByOrderNumber(req);
                if (tn == null) {
                    tn = 0;
                }
                aw.setTotalnum(tn);
                Integer num = 0;
                for (AssembleTitleDto at : titleDtos) {
                    String name = at.getElementName();
                    String element = at.getElement();
                    try {
                        Integer ob = (Integer) ReflectionNameUtil.getGetMethod(aw, element);
                        if ("GR交货数".equals(name) || "报工待入库".equals(name)) {

                        } else {
                            num = num + ob;
                        }
                        //再循环工序名称
                        for (Map.Entry> et : map2.entrySet()) {
                            if (name.equals(et.getKey())) {
                                Integer number = et.getValue().stream().mapToInt(WorkInProcessResultDto::getTotalnum).sum();
                                ReflectionNameUtil.setValue(wp, wp.getClass(), element, AssembleWorkInProcessDto.class.getDeclaredField(element).getType(), number);
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                aw.setWaitNumber(tn - num);

            }
            for (String pl:processNameList){
                for (AssembleTitleDto tl:titleDtos){
                    if(pl.equals(tl.getElementName())){
                        titleDtoSort.add(tl);
                    }
                }
            }
            result.sort(Comparator.comparing(AssembleWorkInProcessDto::getOrderNumber));
            wp.setWaitNumber(result.stream().mapToInt(AssembleWorkInProcessDto::getWaitNumber).sum());
            wp.setTotalnum(result.stream().mapToInt(AssembleWorkInProcessDto::getTotalnum).sum());
            wp.setOrderNumber("汇总");
            result.add(0, wp);
            AssembleTitleDto cateDtoa = new AssembleTitleDto();
            cateDtoa.setElementName("待投数(有WIP的订单)");
            cateDtoa.setElement("waitNumber");
            titleDtoSort.add(cateDtoa);
            AssembleTitleDto cateDtob = new AssembleTitleDto();
            cateDtob.setElementName("订单数量(有WIP的订单)");
            cateDtob.setElement("totalnum");
            titleDtoSort.add(cateDtob);
        }
        AssembleTitleDto cateDto01 = new AssembleTitleDto();
        cateDto01.setElementName("产线");
        cateDto01.setElement("workLine");
        titleDtoSort.add(0, cateDto01);
        AssembleTitleDto cateDto02 = new AssembleTitleDto();
        cateDto02.setElementName("排程开始时间");
        cateDto02.setElement("psStartTime");
        titleDtoSort.add(0, cateDto02);
        AssembleTitleDto cateDto = new AssembleTitleDto();
        cateDto.setElementName("订单号");
        cateDto.setElement("orderNumber");
        titleDtoSort.add(0, cateDto);

        AssembleTitleDto titleDto2 = new AssembleTitleDto();
        titleDto2.setElementName("工序编码");
        titleDto2.setElement("process");
        titleDtoSort.add(titleDto2);
        resultMap.put("resultList", result);
        resultMap.put("titleList", titleDtoSort);
        Map resp = new HashMap<>(16);
        resp.put("DataList", titleDtoSort);
        resp.put("restList", result);
        String key = UUID.randomUUID().toString();
        Map map = new linkedHashMap<>();
        map.put("cumulativeDate", "日期");
        andonDataAnalyseKanbanService.saveAndGetValueByRedis(key, JSONObject.toJSonString(map) + "&" + JSONArray.toJSonString(resp));
        resultMap.put("keyTwo", key);
        return resultMap;
    }

    
    @Override
    public QueryResult selectAssembleThirdList(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        if ("订单号".equals(req.getProcessname())) {
            if("gx".equals(req.getTwoname())){
                req.setProcessname("");
            }else {
                req.setProcessname(req.getTwoname());
            }
        }
        PageHelper.startPage(req.getTpageNum(), req.getTnumPerPage());
        Page resultList = workInProcessDao.selectAssembleThirdList(req);
        return PaginationHelp.parseDTOPage(resultList);
    }

    
    @Override
    public List selectAssembleThirdListAll(WorkInProcessDto req) {
        List orderNos = StringUtils.isEmpty(req.getOrderNum()) ? null : Arrays.asList(req.getOrderNum().split("n"));
        req.setOrderNos(orderNos);
        if ("订单号".equals(req.getProcessname())) {
            req.setProcessname("");
        }
        List resultList = workInProcessDao.selectAssembleThirdList(req);
        return resultList;
    }

    private List getV4(List baseList ){
        return  workInProcessDao.getSmtWitList(baseList);
    }

    class Task implements Callable {

        private Object object;

        private Object[] args;

        private String methodName;


        public Task(Object object, String methodName, Object[] args) {
            this.object = object;
            this.args = args;
            this.methodName = methodName;
        }

        @Override
        public T call() throws Exception {
            Method method = object.getClass().getMethod(methodName);
            return (T) method.invoke(object, args);
        }
    }


    public List method1() {
        List smtWitList = null;
        try {
            smtWitList =   workInProcessDao.getSmtWitList(this.baseList);
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return smtWitList;
    }

    public List method2() {
        List patchList = null;
        try {
            patchList =   workInProcessDao.getPatchList(this.list,this.baseList);
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return patchList;
    }

    private  T futureGetProxy(Future future, Class clazz) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(clazz);
        return (T) enhancer.create(clazz, new FutureLazyLoader(future));
    }

    
    class FutureLazyLoader implements LazyLoader {

        private Future future;

        public FutureLazyLoader(Future future) {
            this.future = future;
        }

        @Override
        public Object loadObject() throws Exception {
            return future.get();
        }

    }

    private List baseList;

    private List list;


    private class GetNumber {
        private Map> smtWitMap;
        private Map> patchMap;
        private Map> waitMap;
        private Map> inStorageMap;
        private WorkInProcessV3Dto dto;
        private Double d1;
        private Double d2;
        private Double pl;
        private Double te;
        private Double re;
        private Double in;
        private Double inNum;

        public GetNumber(Map> smtWitMap, Map> patchMap, Map> waitMap, Map> inStorageMap, WorkInProcessV3Dto dto) {
            this.smtWitMap = smtWitMap;
            this.patchMap = patchMap;
            this.waitMap = waitMap;
            this.inStorageMap = inStorageMap;
            this.dto = dto;
        }

        public Double getD1() {
            return d1;
        }

        public Double getD2() {
            return d2;
        }

        public Double getPl() {
            return pl;
        }

        public Double getTe() {
            return te;
        }

        public Double getRe() {
            return re;
        }

        public Double getIn() {
            return in;
        }

        public Double getInNum() {
            return inNum;
        }

        public GetNumber invoke() {
            try {
                 d1 = patchMap.get(dto.getAufnr()).stream().mapToDouble(WorkInProcessV5Dto::getDz01num).sum();
            } catch (Exception e) {
                d1 = 0.0;
            }
            try {
                d2 = patchMap.get(dto.getAufnr()).stream().mapToDouble(WorkInProcessV5Dto::getDz02num).sum();
            } catch (Exception e) {
                d2 = 0.0;
            }
            try {
                pl = waitMap.get(dto.getAufnr()).stream().mapToDouble(WorkInProcessV6Dto::getWait_plug).sum();
            } catch (Exception e) {
                pl = 0.0;
            }
            try {
                te = waitMap.get(dto.getAufnr()).stream().mapToDouble(WorkInProcessV6Dto::getWait_test).sum();
            } catch (Exception e) {
                te = 0.0;
            }
            try {
                re = waitMap.get(dto.getAufnr()).stream().mapToDouble(WorkInProcessV6Dto::getWait_repair).sum();
            } catch (Exception e) {
                re = 0.0;
            }

            try {
                in = inStorageMap.get(dto.getAufnr()).stream().mapToDouble(WorkInProcessV8Dto::getWait_in_storage).sum();
            } catch (Exception e) {
                in = 0.0;
            }
            try {
                inNum = smtWitMap.get(dto.getAufnr()).stream().mapToDouble(WorkInProcessV4Dto::getIn_num).sum();
            } catch (Exception e) {
                inNum = 0.0;
            }
            return this;
        }
    }

    private class GetDzTime {
        private Map> wiMap;
        private WorkInProcessV3Dto dto;
        private Double dz01_time;
        private Double dz02_time;
        private Double dz03_time;
        private Double dz04_time;

        public GetDzTime(Map> wiMap, WorkInProcessV3Dto dto) {
            this.wiMap = wiMap;
            this.dto = dto;
        }

        public Double getDz01_time() {
            return dz01_time;
        }

        public Double getDz02_time() {
            return dz02_time;
        }

        public Double getDz03_time() {
            return dz03_time;
        }

        public Double getDz04_time() {
            return dz04_time;
        }

        public GetDzTime invoke() {
            try {
                dz01_time = wiMap.get(dto.getAufnr()).get(0).getDz01_time();
                if(dz01_time == null){
                    dz01_time = 0.0;
                }
            } catch (Exception e) {
                dz01_time = 0.0;
            }
            try {
                dz02_time = wiMap.get(dto.getAufnr()).get(0).getDz02_time();
                if(dz02_time == null){
                    dz02_time = 0.0;
                }
            } catch (Exception e) {
                dz02_time = 0.0;
            }
            try {
                dz03_time = wiMap.get(dto.getAufnr()).get(0).getDz03_time();
                if(dz03_time == null){
                    dz03_time = 0.0;
                }
            } catch (Exception e) {
                dz03_time = 0.0;
            }
            try {
                dz04_time = wiMap.get(dto.getAufnr()).get(0).getDz04_time();
                if(dz04_time == null){
                    dz04_time = 0.0;
                }
            } catch (Exception e) {
                dz04_time = 0.0;
            }
            return this;
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677860.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号