廖井涛
2025-07-28 59d34cb3d22f4f99805f78997b7229a46bec4fe5
north-glass-erp/src/main/java/com/example/erp/service/mm/MaterialInventoryService.java
@@ -1112,4 +1112,134 @@
        return map;
    }
    public String saveToExamineMaterialOutbound(Map<String,Object> object) {
        String saveState = "true";
        //设置回滚点
        Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
        String materialOutboundId = "";
        String oddNumber;
        if (object.get("materialOutboundId") != null) {
            materialOutboundId = object.get("materialOutboundId").toString();
        }
        Log log = new Log();
        log.setOperatorId(object.get("userId").toString());
        log.setOperator(object.get("userName").toString());
        log.setContent(object.toString());
        try {
            MaterialOutbound materialOutbound = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), MaterialOutbound.class);
            List<MaterialOutboundDetail> materialOutboundDetailList = JSONArray.parseArray(JSONObject.toJSONString(object.get("materialOutboundDetail")), MaterialOutboundDetail.class);
            //查询出库单是否存在
            Integer MaterialOutboundConut = materialInventoryMapper.getMaterialOutboundCount(materialOutboundId);
            if (MaterialOutboundConut != 0) {
                List<MaterialOutboundDetail> materialOutboundDetailLists = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId);
                if (!materialOutboundDetailLists.isEmpty()) {
                    for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailLists) {
                        //还原物料库存数
                        materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity());
                        if(materialOutboundDetail.getUseId()!=null){
                            //还原优化工程库存数
                            materialInventoryMapper.updateMaterialInventoryAvailableOptInt(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity());
                        }/*else{
                            //还原物料库存数
                            materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        }*/
                    }
                }
                //删除材料出库明细的数据
                materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId);
                materialInventoryMapper.updateMaterialOutbound(materialOutbound, materialOutboundId);
                materialInventoryMapper.deleteMaterialLog(materialOutboundId);
                oddNumber = materialOutboundId;
                log.setFunction("saveMaterialOutbound修改:"+oddNumber);
            } else {
                //获取单号
                oddNumber = orderNumberSetting("出库");
                //新增材料出库表数据
                materialInventoryMapper.insertMaterialOutbound(materialOutbound, oddNumber);
                log.setFunction("saveMaterialOutbound新增:"+oddNumber);
            }
            //获取对象集合循环进行新增修改
            if (!materialOutboundDetailList.isEmpty()) {
                for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) {
                    MaterialInventory materialInventory = materialInventoryMapper.getMaterialInventoryById(materialOutboundDetail.getId());
                    if(materialInventory.getAvailableQuantity()>=materialOutboundDetail.getOutboundQuantity()){
                        Integer materialOutboundDetailMaximum = materialInventoryMapper.getMaterialOutboundDetailMaximum(oddNumber);
                        //新增材料出库明细数据
                        materialInventoryMapper.insertMaterialOutboundDetail(materialOutboundDetail, oddNumber, materialOutboundDetailMaximum + 1);
                        //修改物料库存表出库数量
                        materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        String projectNo="";
                        if(materialOutboundDetail.getUseId()!=null){
                            projectNo = materialInventoryMapper.selectProjectNo(materialOutboundDetail.getUseId());
                            //修改优化工程表出库数量
                            materialInventoryMapper.updateMaterialInventoryAvailableOptOut(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity());
                        }/*else{
                        //修改物料库存表出库数量
                        materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        }*/
                        if(materialOutboundDetail.getUseId()!=null){
                            //修改物料库存数量
                            materialInventoryMapper.updateMaterialInventoryInventoryPlanQuantityOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        }else{
                            materialInventoryMapper.updateMaterialInventoryInventoryOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity());
                        }
                        materialInventoryMapper.updateMaterialOutboundToExamine(oddNumber,1,object.get("userName").toString());
                        String json="";
                        MaterialStore materialStore=materialStoreMapper.getSelectMaterialStoreById(Long.valueOf(materialOutboundDetail.getMaterialCode()));
                        json=materialStore.getJson().substring(1, materialStore.getJson().length() - 1);
                        MaterialLog materialLog=new MaterialLog();
                        materialLog.setOperationOrderNumber(oddNumber);
                        materialLog.setOperationNumber(materialOutboundDetailMaximum + 1);
                        materialLog.setOperateType("物料出库");
                        materialLog.setMaterialCode(Long.valueOf(materialOutboundDetail.getMaterialCode()));
                        materialLog.setMaterialName(convertString(json,"\"name\""));
                        materialLog.setProducer(materialInventory.getProducer());
                        materialLog.setUnit(convertString(json,"\"unit\""));
                        materialLog.setWidth(convertDouble(json,"\"width\""));
                        materialLog.setHeight(convertDouble(json,"\"height\""));
                        materialLog.setThickness(convertDouble(json,"\"thickness\""));
                        materialLog.setQuantity(materialOutboundDetail.getOutboundQuantity());
                        materialLog.setSinglePieceArea(materialOutboundDetail.getSinglePieceArea());
                        materialLog.setInventoryId(materialOutboundDetail.getId());
                        materialLog.setInventoryArea(materialInventory.getInventoryArea());
                        materialLog.setRemarks(materialOutboundDetail.getRemarks());
                        materialLog.setProjectNo(projectNo);
                        materialLog.setOperator(object.get("userName").toString());
                        materialLog.setOperateTime(LocalDate.now());
                        materialLogMapper.insert(materialLog);
                    }else{
                        TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
                        return "false1";
                    }
                }
            }
            logService.saveLog(log);
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
            //将异常传入数据库
            SysError sysError = new SysError();
            sysError.setError(e+Arrays.toString(e.getStackTrace()));
            sysError.setFunc("saveMaterialOutbound");
            sysErrorService.insert(sysError);
            saveState = "false";
        }
        return saveState;
    }
}