jiaosong
2023-08-17 abd93f604df5251bf993ac483978e8fb084071db
server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -794,6 +794,126 @@
//    private void dealAppliancePro(Workorder mp
//            , LoginUserInfo user
//            , List<WorkorderRecordExtListVO> allRecordList
//            , List<Appliances> updateApplianceList
//            , List<Appliances> updateApplianceProList
//            ,   List<WOutboundDetail> outboundDetailList
//            ,   List<WStock> stockList) {
//        WOutbound outbound = new WOutbound();
//        outbound.setDeleted(Constants.ZERO);
//        outbound.setCreateTime(DateUtil.getCurrentDate());
//        outbound.setDealDate(outbound.getCreateTime());
//        outbound.setValidDate(outbound.getCreateTime());
//        outbound.setCreateUser(user.getId());
//        outbound.setRootDepartId(mp.getRootDepartId());
//        outbound.setDepartId(mp.getDepartId());
//        outbound.setStatus(Constants.WOUTBOUND_STATUS.dealed);
//        outbound.setType(Constants.WOUTBOUND_TYPE.in);
//        //2022年7月1日14:42:41 加入单据类别
//        outbound.setBillType(Constants.WOUTBOUND_BILLTYPE.workerOrderIn);
//        outbound.setCode(wOutboundService.getNextInCode(user.getCompany().getId()));
//        outbound.setOrigin(Constants.ONE);
//        outbound.setOriginType(Constants.WOUTBOUND_ORIGIN_TYPE.produce);
//        outbound.setOriginCode(mp.getCode());
//        outbound.setOriginId(mp.getId());
//        outbound.setPlanDate(DateUtil.getCurrentDate());
//        outbound.setProcedureId(mp.getProcedureId());
//        outbound.setUserId(user.getId());
//        outbound.setWarehouseId(mp.getFinishWarehouseId());
//        wOutboundService.create(outbound);
//
//        List<WOutboundDetail> detailList = new ArrayList<>();
//        List<WOutboundRecord> recordList = new ArrayList<>();
//        for(WorkorderRecordExtListVO tModel :allRecordList){
//            if(Constants.equalsInteger(tModel.getType(),Constants.WORKORDER_RECORD_TYPE.produce)){
//                if(tModel.getNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){
//                    continue;
//                }
//                //如果是产出
//                mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum()));
//
//                //物料+批次+工序+质量属性去重
//                WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList);
//                if(detail!=null){
//                    detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum()));
//                }else{
//                    detail = new WOutboundDetail();
//                    detail.setDeleted(Constants.ZERO);
//                    detail.setCreateTime(DateUtil.getCurrentDate());
//                    detail.setCreateUser(user.getId());
//                    detail.setOutboundId(outbound.getId());
//                    detail.setRootDepartId(outbound.getRootDepartId());
//                    detail.setWarehouseId(outbound.getWarehouseId());
//                    detail.setLocationId(mp.getFinishWarehouseLocationId());
//                    detail.setNum(tModel.getNum());
//                    detail.setStatus(Constants.ONE);
//                    detail.setDoneNum(tModel.getNum());
//                    detail.setDoneDate(new Date());
//                    detail.setUnitId(tModel.getUnitId());
//                    detail.setBatch(tModel.getMaterialBatch());
//                    detail.setProcedureId(tModel.getProcedureId());
//                    detail.setMaterialId(tModel.getMaterialId());
//                    detail.setQualityType(tModel.getDoneType());
//                    detail.setWOutboundRecordInList(new ArrayList<>());
//                    detailList.add(detail);
//                }
//
//                WOutboundRecord record = new WOutboundRecord();
//                record.setDeleted(Constants.ZERO);
//                record.setCreateTime(DateUtil.getCurrentDate());
//                record.setCreateUser(user.getId());
//                record.setAppliancesId(tModel.getAppliancesId());
//                record.setBatch(detail.getBatch());
//                record.setRootDepartId(mp.getRootDepartId());
//                record.setNum(tModel.getNum());
//                record.setOutboundId(detail.getOutboundId());
//                record.setUnitId(detail.getUnitId());
//                record.setWarehouseId(detail.getWarehouseId());
//                record.setMaterialId(detail.getMaterialId());
//                record.setProcedureId(detail.getProcedureId());
//                record.setLocationId(detail.getLocationId());
//                record.setQualityType(detail.getQualityType());
//                detail.getWOutboundRecordInList().add(record);
//
//                WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
//                        tModel.getProcedureId(),tModel.getDoneType(),stockList);
//                if(stock!=null){
//                    //如果库存对象已存在,直接增加对应的库存量
//                    stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
//                }else{
//                    stock = new WStock();
//                    stock.setMaterialId(detail.getMaterialId());
//                    stock.setBatch(detail.getBatch());
//                    stock.setWarehouseId(outbound.getWarehouseId());
//                    stock.setLocationId(mp.getFinishWarehouseLocationId());
//                    stock.setUnitId(detail.getUnitId());
//                    stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
//                    stock.setProcedureId(tModel.getProcedureId());
//                    stock.setQualityType(tModel.getDoneType());
//                    //待更新库存信息
//                    stockList.add(stock);
//                }
//            }
//        }
//        for(WOutboundDetail detail : detailList){
//            wOutboundDetailExtMapper.insert(detail);
//            //记录库存变动记录
//            wStockRecordExtService.saveRecord(Constants.ONE,detail.getId(),user);
//            if(detail.getWOutboundRecordInList()!=null){
//                for(WOutboundRecord r : detail.getWOutboundRecordInList()){
//                    r.setDetailId(detail.getId());
//                    wOutboundRecordExtMapper.insert(r);
//                }
//            }
//        }
//        if(Constants.formatIntegerNum(mp.getHasProduceNum()) >Constants.formatIntegerNum(mp.getPlanNum())){
//            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,该工单的产出数量不能大于工单计划数量!");
//        }
//    }
    private void dealAppliancePro(Workorder mp
            , LoginUserInfo user
            , List<WorkorderRecordExtListVO> allRecordList
@@ -833,78 +953,10 @@
                }
                //如果是产出
                mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum()));
//                if(tModel.getDoneType() == null){
//                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,工装器具【"+tModel.getAmodel().getCode()+"】产出质量属性为空,无法报工!");
//                }
//                if(!Constants.equalsInteger(tModel.getDoneType(),Constants.ZERO)){
//                    //如果不良,累计工单的不良产出
//                    mp.setUnqualifiedNum(Constants.formatIntegerNum(mp.getUnqualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue()));
//                }else{
//                    //如果是合格,累计工单的合格数量
//                    mp.setQualifiedNum(Constants.formatIntegerNum(mp.getQualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue()));
//                }
                //物料+批次+工序+质量属性去重
                WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList);
                if(detail!=null){
                    detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum()));
                }else{
                    detail = new WOutboundDetail();
                    detail.setDeleted(Constants.ZERO);
                    detail.setCreateTime(DateUtil.getCurrentDate());
                    detail.setCreateUser(user.getId());
                    detail.setOutboundId(outbound.getId());
                    detail.setRootDepartId(outbound.getRootDepartId());
                    detail.setWarehouseId(outbound.getWarehouseId());
                    detail.setLocationId(mp.getFinishWarehouseLocationId());
                    detail.setNum(tModel.getNum());
                    detail.setStatus(Constants.ONE);
                    detail.setDoneNum(tModel.getNum());
                    detail.setDoneDate(new Date());
                    detail.setUnitId(tModel.getUnitId());
                    detail.setBatch(tModel.getMaterialBatch());
                    detail.setProcedureId(tModel.getProcedureId());
                    detail.setMaterialId(tModel.getMaterialId());
                    detail.setQualityType(tModel.getDoneType());
                    detail.setWOutboundRecordInList(new ArrayList<>());
                    detailList.add(detail);
                }
                WOutboundRecord record = new WOutboundRecord();
                record.setDeleted(Constants.ZERO);
                record.setCreateTime(DateUtil.getCurrentDate());
                record.setCreateUser(user.getId());
                record.setAppliancesId(tModel.getAppliancesId());
                record.setBatch(detail.getBatch());
                record.setRootDepartId(mp.getRootDepartId());
                record.setNum(tModel.getNum());
                record.setOutboundId(detail.getOutboundId());
                record.setUnitId(detail.getUnitId());
                record.setWarehouseId(detail.getWarehouseId());
                record.setMaterialId(detail.getMaterialId());
                record.setProcedureId(detail.getProcedureId());
                record.setLocationId(detail.getLocationId());
                record.setQualityType(detail.getQualityType());
                detail.getWOutboundRecordInList().add(record);
                WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
                        tModel.getProcedureId(),tModel.getDoneType(),stockList);
                if(stock!=null){
                    //如果库存对象已存在,直接增加对应的库存量
                    stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
                }else{
                    stock = new WStock();
                    stock.setMaterialId(detail.getMaterialId());
                    stock.setBatch(detail.getBatch());
                    stock.setWarehouseId(outbound.getWarehouseId());
                    stock.setLocationId(mp.getFinishWarehouseLocationId());
                    stock.setUnitId(detail.getUnitId());
                    stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
                    stock.setProcedureId(tModel.getProcedureId());
                    stock.setQualityType(tModel.getDoneType());
                    //待更新库存信息
                    stockList.add(stock);
                }
                //产出合格
               this.createOutDetail(user,outbound,mp,tModel,Constants.ZERO,detailList,stockList);
               //产出不良
                this.createOutDetail(user,outbound,mp,tModel,Constants.ONE,detailList,stockList);
            }
        }
        for(WOutboundDetail detail : detailList){
@@ -922,6 +974,68 @@
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "对不起,该工单的产出数量不能大于工单计划数量!");
        }
    }
    public void createOutDetail(LoginUserInfo user,WOutbound outbound,Workorder mp,WorkorderRecordExtListVO tModel,Integer doneType
            ,List<WOutboundDetail> detailList,List<WStock> stockList ){
        //物料+批次+工序+质量属性去重
        WOutboundDetail detail =  new WOutboundDetail();
        detail.setDeleted(Constants.ZERO);
        detail.setCreateTime(DateUtil.getCurrentDate());
        detail.setCreateUser(user.getId());
        detail.setOutboundId(outbound.getId());
        detail.setRootDepartId(outbound.getRootDepartId());
        detail.setWarehouseId(outbound.getWarehouseId());
        detail.setLocationId(mp.getFinishWarehouseLocationId());
        detail.setNum(BigDecimal.valueOf(doneType.equals(Constants.ZERO)?tModel.getQualifiedNum():tModel.getUnqualifiedNum()));
        detail.setStatus(Constants.ONE);
        detail.setDoneNum(detail.getNum());
        detail.setDoneDate(new Date());
        detail.setUnitId(tModel.getUnitId());
        detail.setBatch(tModel.getMaterialBatch());
        detail.setProcedureId(tModel.getProcedureId());
        detail.setMaterialId(tModel.getMaterialId());
        detail.setQualityType(doneType);
        detail.setWOutboundRecordInList(new ArrayList<>());
        detailList.add(detail);
        WOutboundRecord record = new WOutboundRecord();
        record.setDeleted(Constants.ZERO);
        record.setCreateTime(DateUtil.getCurrentDate());
        record.setCreateUser(user.getId());
        record.setAppliancesId(tModel.getAppliancesId());
        record.setBatch(detail.getBatch());
        record.setRootDepartId(mp.getRootDepartId());
        record.setNum(tModel.getNum());
        record.setOutboundId(detail.getOutboundId());
        record.setUnitId(detail.getUnitId());
        record.setWarehouseId(detail.getWarehouseId());
        record.setMaterialId(detail.getMaterialId());
        record.setProcedureId(detail.getProcedureId());
        record.setLocationId(detail.getLocationId());
        record.setQualityType(detail.getQualityType());
        detail.getWOutboundRecordInList().add(record);
        WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
                tModel.getProcedureId(),tModel.getDoneType(),stockList);
        if(stock!=null){
            //如果库存对象已存在,直接增加对应的库存量
            stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
        }else{
            stock = new WStock();
            stock.setMaterialId(detail.getMaterialId());
            stock.setBatch(detail.getBatch());
            stock.setWarehouseId(outbound.getWarehouseId());
            stock.setLocationId(mp.getFinishWarehouseLocationId());
            stock.setUnitId(detail.getUnitId());
            stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
            stock.setProcedureId(tModel.getProcedureId());
            stock.setQualityType(tModel.getDoneType());
            //待更新库存信息
            stockList.add(stock);
        }
    }
    private WStock initMaterialNum(Integer materialId, BigDecimal num) {
        WStock s = new WStock();
@@ -1247,16 +1361,14 @@
        workorderRecord.setSalaryPrice(salaryParam.getSalary());
        workorderRecord.setSalaryType(salaryParam.getType());
        workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified());
        //计件工资
        if(salaryParam.getType().equals(Constants.ZERO)){
            workorderRecord.setSalaryNum(salaryParam.getNum());
            workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ZERO?num:createWorkorderRecordDTO.getUnQualifiedNum()));
            workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ONE?num:createWorkorderRecordDTO.getQualifiedNum()));
        }else{
            workorderRecord.setDuration(createWorkorderRecordDTO.getDuration());
            workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600)));
        }
        //插入工单操作记录,并且判断是否更改为工单的状态【生产中】
        updateOrderInfo(loginUserInfo,workorder,Constants.WORKORDER_HISTORY_STATUS.produce);
        workorderRecordExtMapper.insert(workorderRecord);