111
k94314517
2023-08-18 8dc8985eb32198788bef7ad21cf3f1726d840b6f
server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java
@@ -370,7 +370,7 @@
        rParam.setPlanId(pageWrap.getId());
        rParam.setDeleted(Constants.ZERO);
        //已完工数量
        plan.setDoneNum(0);
//        plan.setDoneNum(0);
        //已分配数量
        plan.setDistributNum(0);
        //查询全部投料和产出
@@ -413,6 +413,7 @@
                    tModle.setProUserName(w.getProUserName());
                    tModle.setProUserName(w.getProUserName());
                    tModle.setCreateUser(w.getCreateUser());
                    tModle.setCreateUserName(w.getCreateUserName());
                    if(w.getProUserId()!=null){
                        //查询班组信息
                        QueryCompanyUserExtDTO queryCompanyUserExtDTO = new QueryCompanyUserExtDTO();
@@ -806,12 +807,14 @@
                }
                if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.create)
                ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.material)
                ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.producing)
                ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.check)
                ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.done)){
                    //统计已分配未报工数量
                    distributeNoDoneNum += Constants.formatIntegerNum(order.getPlanNum());
                }
                if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.baogong)
                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.producing)
                        || Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.instock)){
                   doneNum += Constants.formatIntegerNum(order.getUnqualifiedNum()) + Constants.formatIntegerNum(order.getQualifiedNum());
                   int tNum =Constants.formatIntegerNum(order.getUnqualifiedNum()) + Constants.formatIntegerNum(order.getQualifiedNum());
@@ -854,7 +857,7 @@
            if(!Objects.isNull(plan.getWorkPlansId())){
                //更新主订单数据信息
               if(plansMapper.selectCount(new QueryWrapper<Plans>()
                        .in("STATUS",0,1,4,5)
                        .eq("STATUS",Constants.PLAN_STATUS.done)
                        .eq("DELETED",Constants.ZERO)
                        .ne("id",p.getId())
                        .eq("WORK_PLANS_ID",plan.getWorkPlansId()))<=Constants.ZERO){
@@ -891,6 +894,147 @@
    }
    @Override
    @Async
    public void statisticNumAsync(Workorder param){
        if(param.getPlanId()== null){
            if(param.getId()== null){
                return;
            }
            Workorder wModel = new Workorder();
            wModel.setDeleted(Constants.ZERO);
            wModel.setId(param.getId());
            wModel = workorderExtMapper.selectOne(wModel);
            if(wModel== null){
                return;
            }
            param.setPlanId(wModel.getPlanId());
        }
        Plans plan = plansExtMapper.selectById(param.getPlanId());
        if(plan == null){
            return;
        }
        JSONObject json = new JSONObject();
        QueryWorkorderExtDTO qw = new QueryWorkorderExtDTO();
        qw.setPlanId(param.getPlanId());
        qw.setDeleted(Constants.ZERO);
        //查询全部工单数据
        List<WorkorderExtListVO> orderList = workorderExtMapper.selectList(qw);
        //已完工数量
        int doneNum=0;
        //已分配数量
        //已报工工单(包括工单状态:已报工、已入库)的完工数量(包括:合格、不良、报废)
        //+未报工工单(包括工单状态:已创建、已备料、已检验、已完工)的已分配数量
        int distributNum=0;
        //已分配未报工数量=未报工工单(工单状态:已创建、已备料、已检验、已完工)的计划生产数量之和;
        int distributeNoDoneNum=0;
        //合格数量=已报工工单(工单状态:已报工、已入库)产出为合格的数量之和;
        int qulifiedNum=0;
        //不良数量=已报工工单(工单状态:已报工、已入库)产出为不良的数量之和;
        int unqulifiedNum =0;
        int allOrderNum =0;
        if(orderList!=null && orderList.size()>0){
            QueryWorkorderRecordExtDTO rw = new QueryWorkorderRecordExtDTO();
            rw.setPlanId(param.getPlanId());
            rw.setDeleted(Constants.ZERO);
            //查询全部工单产出和投料数据
            List<WorkorderRecordExtListVO> allRecordList = workorderRecordExtMapper.selectListNew(rw);
            for(WorkorderExtListVO order : orderList){
                if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.cancel)){
                    //取消的工单不累计数量
                    continue;
                }
                if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.create)
                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.material)
                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.producing)
                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.check)
                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.done)){
                    //统计已分配未报工数量
                    distributeNoDoneNum += Constants.formatIntegerNum(order.getPlanNum());
                }
                if(Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.baogong)
                        ||Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.producing)
                        || Constants.equalsInteger(order.getStatus(),Constants.WORKORDER_STATUS.instock)){
                    doneNum += Constants.formatIntegerNum(order.getUnqualifiedNum()) + Constants.formatIntegerNum(order.getQualifiedNum());
                    int tNum =Constants.formatIntegerNum(order.getUnqualifiedNum()) + Constants.formatIntegerNum(order.getQualifiedNum());
                    distributNum += tNum;
                    allOrderNum += tNum;
                }else {
                    distributNum += Constants.formatIntegerNum(order.getPlanNum());
                }
                List<WorkorderRecordExtListVO> rList = getRecordListById(order.getId(),allRecordList);
                if(rList!=null){
                    for(WorkorderRecordExtListVO item : rList){
                        if(Constants.equalsInteger(item.getType(),Constants.WORKORDER_RECORD_TYPE.produce)
                                && item.getOmodel()!=null
                                && (Constants.equalsInteger(item.getOmodel().getStatus() ,Constants.WORKORDER_STATUS.baogong)
                                ||Constants.equalsInteger(item.getOmodel().getStatus() ,Constants.WORKORDER_STATUS.instock))){
                            //如果是合格产出,累计数量
                            qulifiedNum += Constants.formatBigdecimal(BigDecimal.valueOf(item.getQualifiedNum())).intValue();
                            //如果是不良产出,累计数量
                            unqulifiedNum += Constants.formatBigdecimal(BigDecimal.valueOf(item.getUnqualifiedNum())).intValue();
                        }
                    }
                }
            }
        }
        json.put(Constants.STATISTIC.distributeNoDone,distributeNoDoneNum);
        json.put(Constants.STATISTIC.done,doneNum);
        json.put(Constants.STATISTIC.distribute,distributNum);
        json.put(Constants.STATISTIC.qulified,qulifiedNum);
        json.put(Constants.STATISTIC.unqulified,unqulifiedNum);
        UpdateWrapper updateWrapper = new UpdateWrapper();
        Plans p = new Plans();
        p.setId(param.getPlanId());
        p.setStatisticInfo(json.toJSONString());
        p.setUpdateTime(DateUtil.getCurrentDate());
        if( Constants.formatIntegerNum(plan.getNum())  <= allOrderNum){
            //如果满足计划已完工,更新计划状态
            p.setStatus(Constants.PLAN_STATUS.done);
            if(!Objects.isNull(plan.getWorkPlansId())){
                //更新主订单数据信息
                if(plansMapper.selectCount(new QueryWrapper<Plans>()
                        .eq("STATUS",Constants.PLAN_STATUS.done)
                        .eq("DELETED",Constants.ZERO)
                        .ne("id",p.getId())
                        .eq("WORK_PLANS_ID",plan.getWorkPlansId()))<=Constants.ZERO){
                    WorkPlans  workPlans = workPlansExtMapper.selectById(plan.getWorkPlansId());
                    if(!Objects.isNull(workPlans)){
                        workPlans.setStatus(Constants.WORKPLANHISTORY_TYPE.done);
                        workPlans.setUpdateTime(new Date());
                        workPlansExtMapper.updateById(workPlans);
                        planHistoryExtMapper.insert(initPlanHistoryByModel(workPlans,null,Constants.WORKPLANHISTORY_TYPE.done));
                    }
                };
            }
            //
            plan.getWorkPlansId();
            updateWrapper.set("STATUS",p.getStatus());
            if(Constants.equalsInteger(plan.getStatus(),Constants.PLAN_STATUS.distribute)){
                //如果已分配
                planHistoryExtMapper.insertBatch(Arrays.asList(PlansExtServiceImpl.initHistoryByModel(plan,null,Constants.PLANHISTORY_TYPE.done)));
            }
//          planHistoryService.create(PlansExtServiceImpl.initHistoryByModel(plan,null,Constants.PLANHISTORY_TYPE.done));
        }
        //更新统计信息
//        plansExtMapper.updateById(p);
        updateWrapper.eq("ID",param.getPlanId());
        updateWrapper.set("STATISTIC_INFO",json.toJSONString());
        updateWrapper.set("UPDATE_TIME",DateUtil.getCurrentDate());
        plansExtMapper.update(null,updateWrapper);
//        Workorder order = new Workorder();
//        order.setUpdateTime(DateUtil.getCurrentDate());
//        //已关闭
//        order.setId(param.getId());
//        workorderExtMapper.updateById(order);
    }
    /**
     * 检测数据有效性
     * @param param