oracle 二进制文件上传到第三方私有云(存储系统)

186 阅读7分钟

1、最近在做一个数据迁移的功能,其中涉及到附件的迁移,这些老的附件数据是以二进制的形式存储在Oracle中,现在要将这些图片上传到第三方物理存储系统上去。下面是我写的一个demo。

@Autowired
private ReimbursementService reimbursementService;

@Autowired
private IBillAttachmentUtilService billAttachmentUtilService;

@Autowired
private ExtBillAttachmentService extBillAttachmentService;

@Autowired
private TaskService taskService;

@Autowired
private IBillDataService billDataService;

@Autowired
private IWFProjectService iwfProjectService;

@Autowired
private IBillAttachmentService attachmentService;


private static final Logger logger = LoggerFactory.getLogger(ReimbursementQuartz.class);

@RequestMapping("/data")
public void reimbursement(HttpServletRequest request, HttpServletResponse response) throws Exception {
    logger.info("*********************历史报销单数据迁移开始********************");
    while (true) {
        PageHelper.startPage(1, 500);
        List<HisBillBxmainDto> hisBillBxmainDtoList = reimbursementService.queryHisBxmainDtoList();
        if (CollectionUtils.isEmpty(hisBillBxmainDtoList)) {
            break;
        }
        for (HisBillBxmainDto hisBillBxmainDto : hisBillBxmainDtoList) {
            String billNumber = hisBillBxmainDto.getBillNumber();
            logger.info("***********单据编号**************" + billNumber);
            BillSceneDataVO billData = new BillSceneDataVO();
            billData.setAppId("49b40250e12311eaa301376aabe45f36");
            billData.setBillDefineId("fa35d557af8311ea94ee8f80aef88a99");
            billData.setScene(BOSceneEnum.WRITE);
            billData.setBillCode(billNumber);
            //过滤 公司id 、部门id、申请人id 不能为空
            if (StringUtils.isNotEmpty(hisBillBxmainDto.getStaffId()) && StringUtils.isNotEmpty(hisBillBxmainDto.getDeptId()) && StringUtils.isNotEmpty(hisBillBxmainDto.getOrgId())) {
                //封装申请人信息
                List<ApplicantUserAndDepartmentVO> applicantInfo = new ArrayList<>();
                ApplicantUserAndDepartmentVO applicantUserAndDepartmentVO = new ApplicantUserAndDepartmentVO();
                billData.setApplicantId(hisBillBxmainDto.getStaffId());
                SysUserDO sysUserDO = taskService.queryUser(hisBillBxmainDto.getStaffId());
                SysUserVO sysUserVO = new SysUserVO();
                sysUserVO.setDefaultCompanyId(hisBillBxmainDto.getOrgId());
                sysUserVO.setDefaultDeptId(hisBillBxmainDto.getDeptId());
                sysUserVO.setDefaultPostId("1963");//普通员工
                sysUserVO.setId(sysUserDO.getId());
                sysUserVO.setEmail(sysUserDO.getEmail());
                sysUserVO.setIdentityCard(sysUserDO.getIdentityCard());
                sysUserVO.setLoginName(sysUserDO.getLoginName());
                sysUserVO.setRankId(sysUserDO.getRankId());
                sysUserVO.setMobilePhone(sysUserDO.getMobilePhone());
                sysUserVO.setSex(sysUserDO.getSex());
                sysUserVO.setStatus(sysUserDO.getStatus());
                sysUserVO.setUserCode(sysUserDO.getUserCode());
                sysUserVO.setUserName(sysUserDO.getUserName());
                sysUserVO.setWorkStatus(sysUserDO.getWorkStatus());
                applicantUserAndDepartmentVO.setUserVO(sysUserVO);
                List<DimObjectVO> dimObjectVOList = new ArrayList<>();
                DimObjectVO dimObjectVO = new DimObjectVO();
                //部门代码
                dimObjectVO.setCode(hisBillBxmainDto.getDeptCode());
                //部门名称
                dimObjectVO.setDescription(hisBillBxmainDto.getOrgDept());
                //
                dimObjectVO.setLeafed(true);
                dimObjectVO.setName(hisBillBxmainDto.getOrgDept());
                //部门ID
                dimObjectVO.setObjectId(hisBillBxmainDto.getDeptId());
                dimObjectVOList.add(dimObjectVO);
                Map<String, Object> externalSysAttr = new HashMap<>();
                externalSysAttr.put("CODE", hisBillBxmainDto.getDeptId());
                externalSysAttr.put("DESCRIPTION", hisBillBxmainDto.getMemo());
                externalSysAttr.put("NAME", hisBillBxmainDto.getOrgDept());
                dimObjectVO.setExternalSysAttr(externalSysAttr);
                applicantUserAndDepartmentVO.setDims(dimObjectVOList);
                applicantInfo.add(applicantUserAndDepartmentVO);
                billData.setApplicantInfo(applicantInfo);
                //主表区数据封装
                BillAreaDataVO area = new BillAreaDataVO();
                //area.setBillMainId("9a0dac30dd2f11eaa246530f525c349a");
                area.setBillDefineId("fa35d557af8311ea94ee8f80aef88a99");
                area.setAppId("e3d5e4787ff911e88b1997bee3518b4d");
                //主表区
                area.setBoAreaId("59b6f7cec84e441db2fea4a63700a175");
                List<BillRowDataVO> rowDatas = new ArrayList<>();//最外围数组
                Map<String, BillAreaDataVO> subAreaDatas = new HashMap();//这个是主表区的subAreaDatas 封装预算区和审核区的数据 subAreaDatas内层封装rowDatas,rowDatas内层封装datas

                Map<String, BillValueObjectVO> datas = new HashMap<>();//主表字段分装对象
                //单据编号
                BillValueObjectVO billCode = BillDataUtils.createBillValue(billNumber, BOColumnDataTypeEnum.STEXT);
                datas.put("BILL_CODE", billCode);
                //userId(单选)
                DimValueVO person = new DimValueVO();
                person.setValue(hisBillBxmainDto.getStaffId());
                person.setTitle(ImmutableMap.of("zh_CN", "普通员工"));
                BillValueObjectVO userId = BillDataUtils.createBillValue(person, BOColumnDataTypeEnum.PERSON);
                datas.put("USERS_ID", userId);
                //主表区文本字段
                //报销单类型-历史
                BillValueObjectVO billType = BillDataUtils.createBillValue(hisBillBxmainDto.getBillType(), BOColumnDataTypeEnum.STEXT);
                datas.put("FBX_DEF_002", billType);
                //报销日期-历史 FBX_DEF_003
                BillValueObjectVO busDate = BillDataUtils.createBillValue(hisBillBxmainDto.getBusDate(), BOColumnDataTypeEnum.DATE);
                datas.put("FBX_DEF_003", busDate);
                // 固定电话-历史 FGD_DEF_001
                BillValueObjectVO phone = BillDataUtils.createBillValue(hisBillBxmainDto.getTelNumber(), BOColumnDataTypeEnum.STEXT);
                datas.put("FGD_DEF_001", phone);
                //岗位-历史FGW_DEF_001
                BillValueObjectVO post = BillDataUtils.createBillValue(hisBillBxmainDto.getPost(), BOColumnDataTypeEnum.STEXT);
                datas.put("FGW_DEF_001", post);
                //是否有发票-历史 FSF_DEF_001
                BillValueObjectVO hashInvoice = BillDataUtils.createBillValue(hisBillBxmainDto.getHashInvoice(), BOColumnDataTypeEnum.STEXT);
                datas.put("FSF_DEF_001", hashInvoice);
                //附件数_历史FFJ_DEF_001
                BillValueObjectVO attachCount = BillDataUtils.createBillValue(hisBillBxmainDto.getAttachCount(), BOColumnDataTypeEnum.STEXT);
                datas.put("FFJ_DEF_001", attachCount);
                //申请人_历史  FSQ_DEF_001
                BillValueObjectVO staffId = BillDataUtils.createBillValue(hisBillBxmainDto.getRequestStaff(), BOColumnDataTypeEnum.STEXT);
                datas.put("FSQ_DEF_001", staffId);
                //制单人 FZD_DEF_001
                BillValueObjectVO operStaff = BillDataUtils.createBillValue(hisBillBxmainDto.getOperStaff(), BOColumnDataTypeEnum.STEXT);
                datas.put("FZD_DEF_001", operStaff);
                //事项编号-历史
                BillValueObjectVO itemCode = BillDataUtils.createBillValue(hisBillBxmainDto.getItemCode(), BOColumnDataTypeEnum.STEXT);
                datas.put("FSX_DEF_002", itemCode);
                //说明 DESCRIPTION
                BillValueObjectVO descrition = BillDataUtils.createBillValue(hisBillBxmainDto.getMemo(), BOColumnDataTypeEnum.STEXT);
                datas.put("DESCRIPTION", descrition);
                //状态
                BillValueObjectVO billStatus = BillDataUtils.createBillValue("UNCOMMITTED", BOColumnDataTypeEnum.STEXT);
                datas.put("BILL_STATUS", billStatus);
                //Update_date(UPDATE_DATE)
                BillValueObjectVO updateDate = BillDataUtils.createBillValue(hisBillBxmainDto.getBusDate(), BOColumnDataTypeEnum.DATE);
                datas.put("UPDATE_DATE", updateDate);
                //EXCLUDE_TAX_AMOUNT_CURRENCY_ID
                BillValueObjectVO EXCLUDE_TAX_AMOUNT_CURRENCY_ID = BillDataUtils.createBillValue("", BOColumnDataTypeEnum.STEXT);
                datas.put("EXCLUDE_TAX_AMOUNT_CURRENCY_ID", EXCLUDE_TAX_AMOUNT_CURRENCY_ID);
                //SPECIAL_INVOICE_COUNT
                BillValueObjectVO specialInvoiceCout = BillDataUtils.createBillValue(0, BOColumnDataTypeEnum.NUMBER);
                datas.put("SPECIAL_INVOICE_COUNT", specialInvoiceCout);
                DimValueVO create = new DimValueVO();
                create.setValue(hisBillBxmainDto.getStaffId());
                create.setTitle(ImmutableMap.of("zh_CN", "普通员工"));
                BillValueObjectVO creatorId = BillDataUtils.createBillValue(create, BOColumnDataTypeEnum.PERSON);
                datas.put("CREATOR_ID", creatorId);
                BillValueObjectVO billTypeMajor = BillDataUtils.createBillValue("MAJOR_TYPE_BX", BOColumnDataTypeEnum.STEXT);
                datas.put("BILL_TYPE_MAJOR", billTypeMajor);
                //APPLICANT_CREDIT_RANK
                BillValueObjectVO applicantCreditRank = BillDataUtils.createBillValue("", BOColumnDataTypeEnum.STEXT);
                datas.put("APPLICANT_CREDIT_RANK", applicantCreditRank);
                //单据类型id
                BillValueObjectVO billTypeId = BillDataUtils.createBillValue("43373ddd567a47dfa8f5bf075c66098a", BOColumnDataTypeEnum.STEXT);
                datas.put("BILL_TYPE_ID", billTypeId);
                //BILL_TYPE_CODE 单据类型编码
                BillValueObjectVO billTypeCode = BillDataUtils.createBillValue("FYBXDL", BOColumnDataTypeEnum.STEXT);
                datas.put("BILL_TYPE_CODE", billTypeCode);
                //APPLICANT_PHONE_NUMBER
                BillValueObjectVO applicantPhoneNumber = BillDataUtils.createBillValue("", BOColumnDataTypeEnum.STEXT);
                datas.put("APPLICANT_PHONE_NUMBER", applicantPhoneNumber);
                DimValueVO applicant = new DimValueVO();
                applicant.setValue(hisBillBxmainDto.getStaffId());
                applicant.setTitle(ImmutableMap.of("zh_CN", "普通员工"));
                BillValueObjectVO applicantId = BillDataUtils.createBillValue(applicant, BOColumnDataTypeEnum.DROPDOWN);
                datas.put("APPLICANT_ID", applicantId);
                //APPLICANT_RANK_ID
                DimValueVO applicantRank = new DimValueVO();
                applicantRank.setValue(hisBillBxmainDto.getStaffId());
                applicantRank.setTitle(ImmutableMap.of("zh_CN", "普通员工"));
                BillValueObjectVO applicantRankId = BillDataUtils.createBillValue(applicantRank, BOColumnDataTypeEnum.DROPDOWN);
                datas.put("APPLICANT_RANK_ID", applicantRankId);
                //DATA_SOURCE_TYPE
                BillValueObjectVO dataSourceType = BillDataUtils.createBillValue("PC_INPUT", BOColumnDataTypeEnum.STEXT);
                datas.put("DATA_SOURCE_TYPE", dataSourceType);
                //ENABLE_BUDGET
                BillValueObjectVO enableBuget = BillDataUtils.createBillValue("FALSE", BOColumnDataTypeEnum.STEXT);
                datas.put("ENABLE_BUDGET", enableBuget);
                //LOAN_SUM_CURRENCY_ID
                BillValueObjectVO londSum = BillDataUtils.createBillValue("6e589eb2dd9f11e8b5a69590a14a4e34", BOColumnDataTypeEnum.STEXT);
                datas.put("LOAN_SUM_CURRENCY_ID", londSum);
                //APPLICANT_POST_ID
                DimValueVO applicantPost = new DimValueVO();
                applicantPost.setValue(hisBillBxmainDto.getPost());
                applicantPost.setTitle(ImmutableMap.of("zh_CN", "普通员工"));
                BillValueObjectVO applicantPostId = BillDataUtils.createBillValue(applicantPost, BOColumnDataTypeEnum.DROPDOWN);
                datas.put("APPLICANT_POST_ID", applicantPostId);
                //申请人部门APPLICANT_DEPARTMENT_ID
                DimValueVO applicantmet = new DimValueVO();
                applicantmet.setValue(hisBillBxmainDto.getDeptId());
                applicantmet.setTitle(ImmutableMap.of("zh_CN", "计划财务部"));
                BillValueObjectVO applicantmetId = BillDataUtils.createBillValue(applicantmet, BOColumnDataTypeEnum.DROPDOWN);
                datas.put("APPLICANT_DEPARTMENT_ID", applicantmetId);
                //APP_ID
                BillValueObjectVO appId = BillDataUtils.createBillValue("49b40250e12311eaa301376aabe45f36", BOColumnDataTypeEnum.STEXT);
                datas.put("APP_ID", appId);
                //APPLICANT_EMAIL
                BillValueObjectVO applicantMeail = BillDataUtils.createBillValue("lixiang01@yuanian.com", BOColumnDataTypeEnum.STEXT);
                datas.put("APPLICANT_EMAIL", applicantMeail);
                //APPLICANT_ORG_ID
                DimValueVO applicantOrg = new DimValueVO();
                applicantOrg.setValue(hisBillBxmainDto.getOrgId());
                BillValueObjectVO applicantOrgId = BillDataUtils.createBillValue(applicantOrg, BOColumnDataTypeEnum.DROPDOWN);
                datas.put("APPLICANT_ORG_ID", applicantOrgId);
                //IS_OVER_STANDARD
                BillValueObjectVO isOverStandard = BillDataUtils.createBillValue("FALSE", BOColumnDataTypeEnum.STEXT);
                datas.put("IS_OVER_STANDARD", isOverStandard);
                //LOAN_SUM_APPROVAL_CURRENCY_ID
                BillValueObjectVO lond = BillDataUtils.createBillValue("6e589eb2dd9f11e8b5a69590a14a4e34", BOColumnDataTypeEnum.STEXT);
                datas.put("LOAN_SUM_APPROVAL_CURRENCY_ID", lond);
                //BILL_TYPE_CATEGORY
                BillValueObjectVO billTypeCateGory = BillDataUtils.createBillValue("BILL", BOColumnDataTypeEnum.STEXT);
                datas.put("BILL_TYPE_CATEGORY", billTypeCateGory);
                //另外增加几个字段
                //REPAYMENT_SUM_CURRENCY_ID
                BillValueObjectVO payment = BillDataUtils.createBillValue("6e589eb2dd9f11e8b5a69590a14a4e34", BOColumnDataTypeEnum.STEXT);
                datas.put("REPAYMENT_SUM_CURRENCY_ID", payment);
                //EXPENSE_RECORD_SUM_CURRENCY_ID
                BillValueObjectVO repayment = BillDataUtils.createBillValue("6e589eb2dd9f11e8b5a69590a14a4e34", BOColumnDataTypeEnum.STEXT);
                datas.put("EXPENSE_RECORD_SUM_CURRENCY_ID", repayment);
                //ACCOUNT_CURRENCY_ID
                DimValueVO applicantOrg1 = new DimValueVO();
                applicantOrg1.setValue("6e589eb2dd9f11e8b5a69590a14a4e34");
                applicantOrg1.setTitle(ImmutableMap.of("zh_CN", "人民币"));
                BillValueObjectVO applicantOrgId1 = BillDataUtils.createBillValue(applicantOrg1, BOColumnDataTypeEnum.DROPDOWN);
                datas.put("ACCOUNT_CURRENCY_ID", applicantOrgId1);
                //EXPENSE_RECORD_SUM_CURRENCY_ID
                BillValueObjectVO repayment1 = BillDataUtils.createBillValue("6e589eb2dd9f11e8b5a69590a14a4e34", BOColumnDataTypeEnum.STEXT);
                datas.put("EXPENSE_RECORD_SUM_CURRENCY_ID", repayment1);
                //REPAYMENT_SUM_CURRENCY_ID
                BillValueObjectVO repayments = BillDataUtils.createBillValue("6e589eb2dd9f11e8b5a69590a14a4e34", BOColumnDataTypeEnum.STEXT);
                datas.put("REPAYMENT_SUM_CURRENCY_ID", repayments);
                //主表区历史Id
                BillValueObjectVO billDefineHistoryId = BillDataUtils.createBillValue("1d01adc8eb5811eaa52d831201b28bec", BOColumnDataTypeEnum.STEXT);
                datas.put("BILL_DEFINE_HISTORY_ID", billDefineHistoryId);
                BillValueObjectVO busDate1 = BillDataUtils.createBillValue(hisBillBxmainDto.getBusDate(), BOColumnDataTypeEnum.DATE);
                datas.put("APPLICANT_DATE", busDate1);
                BillRowDataVO billRowDataVO = new BillRowDataVO();
                area.setBoAreaCode("MAIN");
                area.setBoAreaName("主表区");
                area.setBoAreaId("59b6f7cec84e441db2fea4a63700a175");
                billRowDataVO.setDatas(datas);
                //预算区数据
                BillRowDataVO billRowDataVO5 = new BillRowDataVO();
                Map<String, BillAreaDataVO> subAreaDatas2 = new HashMap();
                List<HisBillBxDetailDto> hisBillBxDetailDtoList = reimbursementService.queryHisBillBxDetailDtoList(billNumber);
                if (hisBillBxDetailDtoList.size() > 0) {
                    List<BillRowDataVO> rowDatas1 = new ArrayList<>();
                    for (HisBillBxDetailDto hisBillBxDetailDto : hisBillBxDetailDtoList) {
                        Map<String, BillValueObjectVO> datas1 = new HashMap();
                        //申请单号-历史 FSQ_DEF_005
                        BillValueObjectVO hBillNumber = BillDataUtils.createBillValue(hisBillBxDetailDto.getRelationBillNumber(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FSQ_DEF_005", hBillNumber);
                        //业务期间 DEDUCT_DATE
                        BillValueObjectVO period = BillDataUtils.createBillValue(hisBillBxDetailDto.getPeriod(), BOColumnDataTypeEnum.DATE);
                        datas1.put("DEDUCT_DATE", period);
                        //描述 FMS_DEF_001
                        BillValueObjectVO memo = BillDataUtils.createBillValue(hisBillBxDetailDto.getMemo(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FMS_DEF_001", memo);
                        //地点FDD_DEF_001
                        BillValueObjectVO place = BillDataUtils.createBillValue(hisBillBxDetailDto.getPlace(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FDD_DEF_001", place);
                        //出发日期
                        BillValueObjectVO dateFrom = BillDataUtils.createBillValue(hisBillBxDetailDto.getDateFrom(), BOColumnDataTypeEnum.DATE);
                        datas1.put("FRQ_DEF_001", dateFrom);
                        //日期到
                        BillValueObjectVO dateTo = BillDataUtils.createBillValue(hisBillBxDetailDto.getDateTo(), BOColumnDataTypeEnum.DATE);
                        datas1.put("FRQ_DEF_002", dateTo);
                        //组织机构 APPLICANT_DEPARTMENT_ID
                        DimValueVO org = new DimValueVO();
                        org.setValue(hisBillBxDetailDto.getOrgId());
                        BillValueObjectVO orgId = BillDataUtils.createBillValue(org, BOColumnDataTypeEnum.DROPDOWN);
                        datas1.put("DIM_ORG", orgId);
                        //预算中心 FYS_DEF_002
                        DimValueVO buger = new DimValueVO();
                        buger.setValue(hisBillBxDetailDto.getBudgeTcenterId());
                        BillValueObjectVO budgeTcenterId = BillDataUtils.createBillValue(buger, BOColumnDataTypeEnum.DROPDOWN);
                        datas1.put("FYS_DEF_002", budgeTcenterId);
                        //报销类型 FBX_DEF_004
                        BillValueObjectVO feeType = BillDataUtils.createBillValue(hisBillBxDetailDto.getFeeTye(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FBX_DEF_004", feeType);
                        //费用项目-历史 FFY_DEF_004
                        BillValueObjectVO feeDetail = BillDataUtils.createBillValue(hisBillBxDetailDto.getFeeDetail(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FFY_DEF_004", feeDetail);
                        //预算项目 DIM_ACCOUNT
                        DimValueVO dim = new DimValueVO();
                        dim.setValue(hisBillBxDetailDto.getBudAccountId());
                        BillValueObjectVO dimAccount = BillDataUtils.createBillValue(dim, BOColumnDataTypeEnum.DROPDOWN);
                        datas1.put("DIM_ACCOUNT", dimAccount);
                        //项目 DIM_PROJECT
                        DimValueVO project = new DimValueVO();
                        project.setValue(hisBillBxDetailDto.getProjectId());
                        BillValueObjectVO projectId = BillDataUtils.createBillValue(project, BOColumnDataTypeEnum.DROPDOWN);
                        datas1.put("DIM_PROJECT", projectId);
                        //渠道类型 DIM_QDZL_DEF001
                        DimValueVO channel = new DimValueVO();
                        channel.setValue(hisBillBxDetailDto.getChannelId());
                        BillValueObjectVO channelId = BillDataUtils.createBillValue(channel, BOColumnDataTypeEnum.DROPDOWN);
                        datas1.put("DIM_QDZL_DEF001", channelId);
                        //用餐人数 FYC_DEF_001
                        BillValueObjectVO eatNumber = BillDataUtils.createBillValue(hisBillBxDetailDto.getEatNumber(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FYC_DEF_001", eatNumber);
                        //发票类型-历史 FFP_DEF_006
                        BillValueObjectVO invoiceTye = BillDataUtils.createBillValue(hisBillBxDetailDto.getInvoiceType(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FFP_DEF_006", invoiceTye);
                        //费用用途-历史 FFY_DEF_005
                        BillValueObjectVO costFor = BillDataUtils.createBillValue(hisBillBxDetailDto.getCostFor(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FFY_DEF_005", costFor);
                        //客票张数 FKP_DEF_001
                        BillValueObjectVO ticketNumber = BillDataUtils.createBillValue(hisBillBxDetailDto.getTicketNumber(), BOColumnDataTypeEnum.NUMBER);
                        datas1.put("FKP_DEF_001", ticketNumber);
                        //开票日期 FKP_DEF_002
                        BillValueObjectVO invoiceDate = BillDataUtils.createBillValue(hisBillBxDetailDto.getInvoiceDate(), BOColumnDataTypeEnum.DATE);
                        datas1.put("FKP_DEF_002", invoiceDate);
                        //发票代码-历史 FFP_DEF_007
                        BillValueObjectVO invoceCode = BillDataUtils.createBillValue(hisBillBxDetailDto.getInvoceCode(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FFP_DEF_007", invoceCode);
                        //发票号码-历史 FFP_DEF_008
                        BillValueObjectVO invoiceNo = BillDataUtils.createBillValue(hisBillBxDetailDto.getInvoiceNo(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FFP_DEF_008", invoiceNo);
                        //税率 FSL_DEF_001
                        BillValueObjectVO taxRate = BillDataUtils.createBillValue(hisBillBxDetailDto.getTaxRate(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FSL_DEF_001", taxRate);
                        //行业类别 FXY_DEF_001
                        BillValueObjectVO tradeType = BillDataUtils.createBillValue(hisBillBxDetailDto.getTradeType(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FXY_DEF_001", tradeType);
                        //认证状态 FRZ_DEF_001
                        BillValueObjectVO authenState = BillDataUtils.createBillValue(hisBillBxDetailDto.getAuthenState(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FRZ_DEF_001", authenState);
                        //认证日期 FRZ_DEF_002
                        BillValueObjectVO authenDate = BillDataUtils.createBillValue(hisBillBxDetailDto.getAuthenDate(), BOColumnDataTypeEnum.DATE);
                        datas1.put("FRZ_DEF_002", authenDate);
                        //税金 FSJ_DEF_001
                        BillValueObjectVO taxAmount = BillDataUtils.createBillValue(hisBillBxDetailDto.getTaxAmount(), "6e589eb2dd9f11e8b5a69590a14a4e34");
                        datas1.put("FSJ_DEF_001", taxAmount);
                        //不含税金额
                        BillValueObjectVO notaxAmount = BillDataUtils.createBillValue(hisBillBxDetailDto.getNotaxAmount(), "6e589eb2dd9f11e8b5a69590a14a4e34");
                        datas1.put("AMOUNT", notaxAmount);
                        //价税合计 FJS_DEF_001
                        BillValueObjectVO totalAmount = BillDataUtils.createBillValue(hisBillBxDetailDto.getTotalAmount(), "6e589eb2dd9f11e8b5a69590a14a4e34");
                        datas1.put("FJS_DEF_001", totalAmount);
                        //责任中心 FZR_DEF_001
                        DimValueVO cost = new DimValueVO();
                        cost.setValue(hisBillBxDetailDto.getCostCenterId());
                        BillValueObjectVO costCenterId = BillDataUtils.createBillValue(cost, BOColumnDataTypeEnum.DROPDOWN);
                        datas1.put("FZR_DEF_001", costCenterId);
                        //付款方式 FFK_DEF_001
                        DimValueVO pay = new DimValueVO();
                        pay.setValue(hisBillBxDetailDto.getPayTypeId());
                        BillValueObjectVO payTypeId = BillDataUtils.createBillValue(pay, BOColumnDataTypeEnum.DROPDOWN);
                        datas1.put("FFK_DEF_001", payTypeId);
                        //收款方
                        BillValueObjectVO recieverAccount = BillDataUtils.createBillValue(hisBillBxDetailDto.getRecieverAccount(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FSK_DEF_007", recieverAccount);
                        //合同编码 FHT_DEF_001
                        BillValueObjectVO contactCode = BillDataUtils.createBillValue(hisBillBxDetailDto.getContactCode(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FHT_DEF_001", contactCode);
                        // 合同编号 FHT_DEF_002
                        BillValueObjectVO contactNumber = BillDataUtils.createBillValue(hisBillBxDetailDto.getContactNumber(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FHT_DEF_002", contactNumber);
                        // 资金计划 FZJ_DEF_004
                        BillValueObjectVO fundPlan = BillDataUtils.createBillValue(hisBillBxDetailDto.getFundPlan(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FZJ_DEF_004", fundPlan);
                        //参考码 FCK_DEF_001
                        BillValueObjectVO refrence = BillDataUtils.createBillValue(hisBillBxDetailDto.getRefrence(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FCK_DEF_001", refrence);
                        //会计科目 FKJ_DEF_001
                        BillValueObjectVO hsAccount = BillDataUtils.createBillValue(hisBillBxDetailDto.getHsAccount(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FKJ_DEF_001", hsAccount);
                        //凭证日期 FPZ_DEF_001
                        BillValueObjectVO voucherDate = BillDataUtils.createBillValue(hisBillBxDetailDto.getVoucherDate(), BOColumnDataTypeEnum.DATE);
                        datas1.put("FPZ_DEF_001", voucherDate);
                        //凭证号 FPZ_DEF_002
                        BillValueObjectVO voucherNo = BillDataUtils.createBillValue(hisBillBxDetailDto.getVoucherNo(), BOColumnDataTypeEnum.STEXT);
                        datas1.put("FPZ_DEF_002", voucherNo);
                        //申请行号 FSQ_DEF_006
                        BillValueObjectVO relationRowNumber = BillDataUtils.createBillValue(hisBillBxDetailDto.getRelationRowNumber(), BOColumnDataTypeEnum.NUMBER);
                        datas1.put("FSQ_DEF_006", relationRowNumber);
                        //BUDGET_CHECK_INFO
                        BillValueObjectVO budgetCheckInfo = BillDataUtils.createBillValue("", BOColumnDataTypeEnum.STEXT);
                        datas1.put("BUDGET_CHECK_INFO", budgetCheckInfo);

                        BillRowDataVO billRowDataVO1 = new BillRowDataVO();
                        billRowDataVO1.setDatas(datas1); //把内层data数据封装
                        BillAreaDataVO billAreaDataVO1 = new BillAreaDataVO();
                        rowDatas1.add(billRowDataVO1);//data封装的对象放在数组里面
                        String boAreaId = "203d2e64f6bd4b32a8c83d030fb32676";
                        billAreaDataVO1.setBoAreaId(boAreaId);
                        billAreaDataVO1.setBoAreaName("预算区");
                        billAreaDataVO1.setBoAreaCode("BUDGET");
                        billAreaDataVO1.setRowDatas(rowDatas1);//将对象放在数组对象里面
                        subAreaDatas2.put(boAreaId, billAreaDataVO1);//将数组放在subAreaDatas对象里

                        //将预算区封装费用明细区
                        List<BillRowDataVO> rowDatas5 = new ArrayList<>();
                        Map<String, BillValueObjectVO> datas5 = new HashMap();
                        BillValueObjectVO createDate = BillDataUtils.createBillValue(new Date(), BOColumnDataTypeEnum.DATE);
                        datas5.put("CREATE_DATE", createDate);
                        //UPDATE_DATE
                        BillValueObjectVO updateD = BillDataUtils.createBillValue(new Date(), BOColumnDataTypeEnum.DATE);
                        datas5.put("UPDATE_DATE", updateD);
                        //BILL_DEFINE_ID
                        BillValueObjectVO billDefineId = BillDataUtils.createBillValue("fa35d557af8311ea94ee8f80aef88a99", BOColumnDataTypeEnum.STEXT);
                        datas5.put("BILL_DEFINE_ID", billDefineId);
                        billRowDataVO5.setDatas(datas5); //把内层data数据封装
                        billRowDataVO5.setReserve(false);//费用明细区隐藏
                        BillAreaDataVO billAreaDataVO5 = new BillAreaDataVO();
                        rowDatas5.add(billRowDataVO5);//data封装的对象放在数组里面
                        String boAreaId5 = "3bfd939291eb42439b692181c5477a96";
                        billAreaDataVO5.setBoAreaId(boAreaId5);
                        billAreaDataVO5.setBoAreaName("费用明细区");
                        billAreaDataVO5.setBoAreaCode("EXPENSE_DETAIL");
                        billAreaDataVO5.setRowDatas(rowDatas5);//将对象放在数组对象里面
                        billRowDataVO5.setSubAreaDatas(subAreaDatas2);
                        subAreaDatas.put(boAreaId5, billAreaDataVO5);//将数组放在subAreaDatas对象里
                    }
                }
                //冲销区数据封装
                List<HisBillBxCjkDto> hisBillBxCjkDtoList = reimbursementService.queryHisBxCjkDtoList(billNumber);
                if (hisBillBxCjkDtoList.size() > 0) {
                    List<BillRowDataVO> rowDatas4 = new ArrayList<>();
                    for (HisBillBxCjkDto hisBillBxCjkDto : hisBillBxCjkDtoList) {
                        Map<String, BillValueObjectVO> datas4 = new HashMap();
                        //借款单号-历史 FJK_DEF_003
                        BillValueObjectVO rowNumber = BillDataUtils.createBillValue(hisBillBxCjkDto.getJkBillNumber(), BOColumnDataTypeEnum.STEXT);
                        datas4.put("FJK_DEF_003", rowNumber);
                        //冲销金额 FCX_DEF_001
                        BillValueObjectVO amount = BillDataUtils.createBillValue(hisBillBxCjkDto.getAmount(), "6e589eb2dd9f11e8b5a69590a14a4e34");
                        datas4.put("FCX_DEF_001", amount);
                        BillRowDataVO billRowDataVO4 = new BillRowDataVO();
                        billRowDataVO4.setDatas(datas4); //把内层data数据封装
                        BillAreaDataVO billAreaDataVO4 = new BillAreaDataVO();
                        rowDatas4.add(billRowDataVO4);//data封装的对象放在数组里面
                        String boAreaId2 = "e1cebb72fd5f41ec8791c491b2a66010";
                        billAreaDataVO4.setBoAreaId(boAreaId2);
                        billAreaDataVO4.setBoAreaName("冲销区");
                        billAreaDataVO4.setBoAreaCode("WRITE_OFF");
                        billAreaDataVO4.setRowDatas(rowDatas4);//将对象放在数组对象里面
                        subAreaDatas.put(boAreaId2, billAreaDataVO4);//将数组放在subAreaDatas对象里
                    }
                }
                //凭证区数据封装
                List<HisBillBxVoucherDto> hisBillBxVoucherDtoList = reimbursementService.queryHisBillBxVoucherDto(billNumber);
                if (hisBillBxVoucherDtoList.size() > 0) {
                    List<BillRowDataVO> rowDatas3 = new ArrayList<>();
                    for (HisBillBxVoucherDto hisBillBxVoucherDto : hisBillBxVoucherDtoList) {
                        Map<String, BillValueObjectVO> datas3 = new HashMap();
                        //凭证号(核算系统) FPZ_DEF_002
                        BillValueObjectVO voucherNo = BillDataUtils.createBillValue(hisBillBxVoucherDto.getVoucherNo(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FPZ_DEF_002", voucherNo);
                        //FCK_DEF_001 参考单据编号
                        BillValueObjectVO billNo = BillDataUtils.createBillValue(hisBillBxVoucherDto.getBillNumber(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FCK_DEF_001", billNo);
                        //凭证类型FPZ_DEF_001
                        BillValueObjectVO voucher = BillDataUtils.createBillValue(hisBillBxVoucherDto.getVoucherType(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FPZ_DEF_001", voucher);
                        //期间FQJ_DEF_001
                        BillValueObjectVO period = BillDataUtils.createBillValue(hisBillBxVoucherDto.getPeriod(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FQJ_DEF_001", period);
                        //凭证业务日期 FPZ_DEF_003
                        BillValueObjectVO disDate = BillDataUtils.createBillValue(hisBillBxVoucherDto.getVoucherDate(), BOColumnDataTypeEnum.DATE);
                        datas3.put("FPZ_DEF_003", disDate);
                        //凭证抬头文本 FPZ_DEF_004
                        BillValueObjectVO lineMemo = BillDataUtils.createBillValue(hisBillBxVoucherDto.getLineMemo(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FPZ_DEF_004", lineMemo);
                        //分支机构 FHS_DEF_001
                        BillValueObjectVO seg1Org = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg1Org(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FHS_DEF_001", seg1Org);
                        //成本中心 FCB_DEF_001
                        BillValueObjectVO seg2CostCenter = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg2CostCenter(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FCB_DEF_001", seg2CostCenter);
                        //核算科目 FHS_DEF_002
                        BillValueObjectVO seg3Account = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg3Account(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FHS_DEF_002", seg3Account);
                        //明细段 FKM_DEF_001
                        BillValueObjectVO seg4BudAcc = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg4BudAcc(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FKM_DEF_001", seg4BudAcc);
                        //销售渠道 FXS_DEF_001
                        BillValueObjectVO seg5Channel = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg5Channel(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FXS_DEF_001", seg5Channel);
                        //险种代码 FXZ_DEF_001
                        BillValueObjectVO seg6Product = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg6Product(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FXZ_DEF_001", seg6Product);
                        //项目编码 FXM_DEF_001
                        BillValueObjectVO seg7Project = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg7Project(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FXM_DEF_001", seg7Project);
                        //预算中心 FYS_DEF_001
                        BillValueObjectVO seg8Budcenter = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg8Budcenter(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FYS_DEF_001", seg8Budcenter);
                        //备用段 FBY_DEF_001
                        BillValueObjectVO seg9Spare = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSeg9Spare(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FBY_DEF_001", seg9Spare);
                        //原币借方金额 FYB_DEF_001
                        BillValueObjectVO oriDebit = BillDataUtils.createBillValue(hisBillBxVoucherDto.getOriDebit(), "6e589eb2dd9f11e8b5a69590a14a4e34");
                        datas3.put("FYB_DEF_001", oriDebit);
                        //本币借方金额 FBB_DEF_001
                        BillValueObjectVO oriCredit = BillDataUtils.createBillValue(hisBillBxVoucherDto.getOriCredit(), "6e589eb2dd9f11e8b5a69590a14a4e34");
                        datas3.put("FBB_DEF_001", oriCredit);
                        //原币贷方金额 FYB_DEF_002
                        BillValueObjectVO localDebit = BillDataUtils.createBillValue(hisBillBxVoucherDto.getLocalDebit(), "6e589eb2dd9f11e8b5a69590a14a4e34");
                        datas3.put("FYB_DEF_002", localDebit);
                        //本币贷方金额 FBB_DEF_002
                        BillValueObjectVO localCredit = BillDataUtils.createBillValue(hisBillBxVoucherDto.getLocalCredit(), "6e589eb2dd9f11e8b5a69590a14a4e34");
                        datas3.put("FBB_DEF_002", localCredit);
                        //合同号 FHT_DEF_001
                        BillValueObjectVO contactNo = BillDataUtils.createBillValue(hisBillBxVoucherDto.getContactNo(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FHT_DEF_001", contactNo);
                        //参考码 FCK_DEF_002
                        BillValueObjectVO sreference = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSreference(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FCK_DEF_002", sreference);
                        //供应商 FGY_DEF_001
                        BillValueObjectVO suplier = BillDataUtils.createBillValue(hisBillBxVoucherDto.getSuplier(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FGY_DEF_001", suplier);
                        //关联方 FGL_DEF_001
                        BillValueObjectVO icp = BillDataUtils.createBillValue(hisBillBxVoucherDto.getIcp(), BOColumnDataTypeEnum.STEXT);
                        datas3.put("FGL_DEF_001", icp);
                        BillRowDataVO billRowDataVO3 = new BillRowDataVO();
                        billRowDataVO3.setDatas(datas3); //把内层data数据封装
                        BillAreaDataVO billAreaDataVO3 = new BillAreaDataVO();
                        rowDatas3.add(billRowDataVO3);//data封装的对象放在数组里面
                        String boAreaId3 = "48469c7fd17411ea943e6bc1afe258d8";
                        billAreaDataVO3.setBoAreaId(boAreaId3);
                        billAreaDataVO3.setBoAreaName("凭证区-历史");
                        billAreaDataVO3.setBoAreaCode("T_BILL_AREA_PZQ_DEF_001");
                        billAreaDataVO3.setRowDatas(rowDatas3);//将数组放在数组对象里
                        subAreaDatas.put(boAreaId3, billAreaDataVO3);//将数组放在subAreaDatas对象里
                    }
                }
                //审批区
                List<HisBillBxApprovalDto> hisBillBxApprovalDtoList = reimbursementService.queryHisBillBxApprovalList(billNumber);
                if (hisBillBxApprovalDtoList.size() > 0) {
                    List<BillRowDataVO> rowDatas2 = new ArrayList<>();
                    for (HisBillBxApprovalDto hisBillBxApprovalDto : hisBillBxApprovalDtoList) {
                        Map<String, BillValueObjectVO> datas2 = new HashMap();
                        //状态
                        BillValueObjectVO state = BillDataUtils.createBillValue(hisBillBxApprovalDto.getState(), BOColumnDataTypeEnum.STEXT);
                        datas2.put("FZT_DEF_001", state);
                        //审批日期
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        BillValueObjectVO approveDate = BillDataUtils.createBillValue(hisBillBxApprovalDto.getApproveDate(), BOColumnDataTypeEnum.DATE);
                        datas2.put("FSP_DEF_001", approveDate);
                        //审批人
                        BillValueObjectVO approveUser = BillDataUtils.createBillValue(hisBillBxApprovalDto.getApproveUser(), BOColumnDataTypeEnum.STEXT);
                        datas2.put("FSP_DEF_002", approveUser);
                        //审批节点
                        BillValueObjectVO approveNode = BillDataUtils.createBillValue(hisBillBxApprovalDto.getApproveNode(), BOColumnDataTypeEnum.STEXT);
                        datas2.put("FSP_DEF_003", approveNode);
                        //审批
                        BillValueObjectVO approved = BillDataUtils.createBillValue(hisBillBxApprovalDto.getApproved(), BOColumnDataTypeEnum.STEXT);
                        datas2.put("FSP_DEF_004", approved);
                        //审批意见
                        BillValueObjectVO approveSuggestion = BillDataUtils.createBillValue(hisBillBxApprovalDto.getApproveSuggestion(), BOColumnDataTypeEnum.STEXT);
                        datas2.put("FSP_DEF_005", approveSuggestion);
                        BillValueObjectVO billParentId = BillDataUtils.createBillValue("e386d10f717c45c4a2a51709342243df", BOColumnDataTypeEnum.STEXT);
                        datas2.put("BILL_PARENT_ID", billParentId);
                        BillRowDataVO billRowDataVO2 = new BillRowDataVO();
                        billRowDataVO2.setDatas(datas2); //把内层data数据封装
                        BillAreaDataVO billAreaDataVO2 = new BillAreaDataVO();
                        rowDatas2.add(billRowDataVO2);//data封装的对象放在数组里面
                        String boAreaId4 = "6ddf3796d23b11ea80a6079118980cd2";
                        billAreaDataVO2.setBoAreaId(boAreaId4);
                        billAreaDataVO2.setBoAreaName("审批区-历史");
                        billAreaDataVO2.setBoAreaCode("T_BILL_AREA_SPQ_DEF_001");
                        billAreaDataVO2.setRowDatas(rowDatas2);//将数组放在数组对象里
                        subAreaDatas.put(boAreaId4, billAreaDataVO2);//将数组放在subAreaDatas对象里
                    }
                }
                //附件区 上传一个附件 赋值一个附件
                List<FndAtmAttachMentDto> fndAtmAttachMentDtoList = taskService.queryFndAtmAttachMentDtoList(billNumber);
                if (fndAtmAttachMentDtoList.size() > 0) {
                    List<BillRowDataVO> rowDatas0 = new ArrayList<>();
                    for (FndAtmAttachMentDto fndAtmAttachMentDto : fndAtmAttachMentDtoList) {
                        String attachmentId = IDGenerator.newID();//每循环一次生成一个附件id
                        Map<String, BillValueObjectVO> datas0 = new HashMap();
                        //下载到本地
                        downLoadFiles(fndAtmAttachMentDto);
                        BillAttachmentUtilVO billAttachmentUtilVO = new BillAttachmentUtilVO();
                        String filepath = "E:/迁移文件";
                        File file = new File(filepath);//File类型可以是文件也可以是文件夹
                        File[] fileList = file.listFiles();//将该目录下的所有文件放置在一个File类型的数组中
                        List<MultipartFile> multipartFileList = new ArrayList<>();
                        for (int i = 0; i < fileList.length; i++) {
                            File file1 = fileList[i];
                            MultipartFile mulFileByFile = FileCovertUtils.getMulFileByFile(fileList[i]);
                            multipartFileList.add(mulFileByFile);
                            if (file1.isFile()) {
                                file1.delete();
                            }
                        }
                        MultipartFile[] multipartFileArray = new MultipartFile[multipartFileList.size()];
                        //封装上传接口的报文
                        multipartFileList.toArray(multipartFileArray);
                        billAttachmentUtilVO.setModule(AttachmentModuleEnum.BILL_MODULE);
                        billAttachmentUtilVO.setAttachmentId(attachmentId);
                        billAttachmentUtilVO.setDefaultValue("false");
                        billAttachmentUtilVO.setUploadUserId(hisBillBxmainDto.getStaffId());
                        billAttachmentUtilVO.setUploadUserName("管理员");
                        for (MultipartFile multipartFile : multipartFileArray) {
                            billAttachmentUtilVO.setMultipartFiles(new MultipartFile[]{multipartFile});
                            //调上传接口
                            List<BillAttachmentVO> attachmentList = attachmentService.billAttachmentFileUpload(billAttachmentUtilVO);
                            BillAttachmentVO billAttachmentVO = attachmentList.get(0);
                            String filePath = billAttachmentVO.getFilePath();
                            List<AttachmentValueVO> attachmentVOs = new ArrayList<>();
                            AttachmentValueVO attachmentValueVO = new AttachmentValueVO();
                            attachmentValueVO.setUploadUserId(hisBillBxmainDto.getStaffId());
                            attachmentValueVO.setFileSize((BigDecimal) fndAtmAttachMentDto.getFileSize());
                            attachmentValueVO.setAttachmentId(attachmentId);
                            attachmentValueVO.setAttachmentName(fndAtmAttachMentDto.getFileName());
                            attachmentValueVO.setFilePath(filePath);
                            attachmentValueVO.setFileType(fndAtmAttachMentDto.getFileTypeCode());
                            attachmentValueVO.setUploadUserName("管理员");
                            attachmentValueVO.setUploadDateTime(LocalDateTime.now());//上传时间
                            attachmentVOs.add(attachmentValueVO);
                            BillValueObjectVO attachment = BillDataUtils.createBillValue(attachmentVOs, BOColumnDataTypeEnum.ATTACHMENT);
                            datas0.put("FFJ_DEF_001", attachment);
                            BillRowDataVO billRowDataVO0 = new BillRowDataVO();
                            billRowDataVO0.setDatas(datas0); //把内层data数据封装
                            BillAreaDataVO billAreaDataVO0 = new BillAreaDataVO();
                            rowDatas0.add(billRowDataVO0);//data封装的对象放在数组里面
                            String boAreaId0 = "cf8f2007c34311eab91221a87fada528";
                            billAreaDataVO0.setBoAreaId(boAreaId0);
                            billAreaDataVO0.setBoAreaName("附件区");
                            billAreaDataVO0.setBoAreaCode("T_BILL_AREA_FJQ_DEF_001");
                            billAreaDataVO0.setRowDatas(rowDatas0);//将数组放在数组对象里
                            subAreaDatas.put(boAreaId0, billAreaDataVO0);//将数组放在subAreaDatas对象里
                        }
                    }
                }
                billRowDataVO.setSubAreaDatas(subAreaDatas);//主表封装对象
                rowDatas.add(billRowDataVO);
                area.setRowDatas(rowDatas);//各区封装的数据
                //areaTemplateRow分装三个区的数据
                Map<String, BillRowDataVO> areaTemplateRow = new HashMap();
                //主表区封装
                BillRowDataVO mainBillRowDataVO = new BillRowDataVO();
                Map<String, BillValueObjectVO> mainData = new HashMap<>();
                BillValueObjectVO workStatus = BillDataUtils.createBillValue("UNCOMMITTED", BOColumnDataTypeEnum.STEXT);
                mainData.put("BILL_STATUS", workStatus);
                mainBillRowDataVO.setDatas(mainData);
                areaTemplateRow.put("59b6f7cec84e441db2fea4a63700a175", mainBillRowDataVO);
                billData.setBillDefineHistoryId("1d01adc8eb5811eaa52d831201b28bec");
                //分装预算区
                BillRowDataVO mainBillRowDataVO1 = new BillRowDataVO();
                Map<String, BillValueObjectVO> mainData1 = new HashMap<>();
                BillValueObjectVO createDate = BillDataUtils.createBillValue(new Date(), BOColumnDataTypeEnum.DATE);
                mainData1.put("CREATE_DATE", createDate);
                BillValueObjectVO updateDate1 = BillDataUtils.createBillValue(new Date(), BOColumnDataTypeEnum.DATE);
                mainData1.put("UPDATE_DATE", updateDate1);
                //BILL_DEFINE_ID
                BillValueObjectVO billDefineID = BillDataUtils.createBillValue("fa35d557af8311ea94ee8f80aef88a99", BOColumnDataTypeEnum.STEXT);
                mainData1.put("BILL_DEFINE_ID", billDefineID);
                //OVER_BUDGET
                BillValueObjectVO overBuget = BillDataUtils.createBillValue("PASS", BOColumnDataTypeEnum.STEXT);
                mainData1.put("OVER_BUDGET", overBuget);
                mainBillRowDataVO1.setDatas(mainData1);
                areaTemplateRow.put("203d2e64f6bd4b32a8c83d030fb32676", mainBillRowDataVO1);
                billData.setAreaTemplateRow(areaTemplateRow);
                billData.setArea(area);
                billData.setApplicantId(hisBillBxmainDto.getStaffId());
                billData.setBillMainId(IDGenerator.newID());
                String status = null;
                try {
                    //调产品保存接口
                    billDataService.saveBillData(billData);
                    //保存单据之后自动提交流程
                    iwfProjectService.submitBill(billData);
                    logger.info("*************借款单单据编号***************" + billNumber + "迁移完成!!!");
                    status = "1";//保存单据成功
                    reimbursementService.updateStatus(status, billNumber);
                    //在数据库做状态标记
                } catch (Exception e) {
                    logger.info("*************借款单单据编号***************" + billNumber + "迁移失败!!!");
                    status = "2";//保存单据失败
                    reimbursementService.updateStatus(status, billNumber);
                    e.printStackTrace();
                    continue;
                }
            }
        }
    }
}

private void downLoadFiles(FndAtmAttachMentDto fndAtmAttachMentDto) throws IOException {
    String name = fndAtmAttachMentDto.getFileName();
    String filepath = "E:/迁移文件";
    byte[] content = fndAtmAttachMentDto.getContent();
    InputStream in = new ByteArrayInputStream(content);
    int len = content.length;
    FileOutputStream file = new FileOutputStream(filepath + "/" + name);
    byte[] buffer = new byte[len];
    while ((len = in.read(buffer)) != -1) {
        file.write(buffer, 0, len);
    }
    file.close();
    in.close();
}

}

二、这个是工具类

public class FileCovertUtils {

public static MultipartFile getMulFileByFile(File file) {
    FileItem fileItem = createFileItem(file.getPath(), file.getName());
    MultipartFile mfile = new CommonsMultipartFile(fileItem);
    return mfile;
}

public static FileItem createFileItem(String filePath, String fileName) {
    String fieldName = "multipartFiles";
    FileItemFactory factory = new DiskFileItemFactory(16, null);
    FileItem item = factory.createItem(fieldName, "text/plain", false, fileName);
    File newfile = new File(filePath);
    int bytesRead = 0;
    byte[] buffer = new byte[8192];
    try {
        FileInputStream fis = new FileInputStream(newfile);
        OutputStream os = item.getOutputStream();
        while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
            os.write(buffer, 0, bytesRead);
        }
        os.close();
        fis.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return item;
}

}

三、这个是第三方存储地址:

   String fileUploadUrl = ConfigConstant.getValue("fileUploadUrl");
   String bucket = ConfigConstant.getValue("bucket");
   String filepath = bytes2file(data,suffix);
   FileSystemResource resource = new FileSystemResource(newFile(filepath));
    MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
    RestTemplate restTemplate = new RestTemplate();
    Date date = new Date();
    String policyNo = "ECS"+SerialNumberUtil.NextOrderNo(date, 5);
    param.add("policyNo", policyNo);
    param.add("storageType", bucket);
    param.add("file", resource);
    param.add("saveDB", "Y");
    String recv = restTemplate.postForObject(fileUploadUrl, param, String.class);
    
    StorageModel smodel = JSONObject.parseObject(recv , StorageModel.class);
    System.out.println(recv);
    //上传成功或者失败都要删除临时存放的附件,方便再次上传
    deleteTempFile(new File(filepath));