單據複製功能

一、需求建立

       爲了避免用戶在短時間內重複建單的操作繁瑣,隨即就衍生出了一個單據複製的功能,一件複製單據能夠有效的提升用戶的體驗,也避免了在使用報銷系統時需要重複填寫信息而造成時間上的浪費,用戶體驗不好。

 

二、實現

      思路:  根據頭行信息,再來新建一個投行信息,但是id不能重複,數據進入到表中的唯一性不能被打破。數據進入到表中後,就可以根據對象獲取到新生成的id, 同時可以作爲另外一個表的外鍵。

public List<String> copyReport(List<Long> ids) {
        //1.根據id判斷該單據類型是否爲佣金手續費報賬單
        //2. 生成報賬單頭
        List<ExpenseReportHeader> headers=baseMapper.selectBatchIds(ids);
        List<String> documents=new ArrayList<>();
        //分攤行
        List<ExpenseReportDist> reportDists=new ArrayList<>();
        //計劃付款行
        List<ExpenseReportPaymentSchedule> reportPaymentSchedules=new ArrayList<>();

        for (ExpenseReportHeader e: headers){
            String requisitionNumber=commonService.getCoding(DocumentTypeEnum.PUBLIC_REPORT.getCategory(), e.getCompanyId(), null);
            documents.add(requisitionNumber);
            Long headerId=e.getId();
            List<ExpenseReportLine> lines=expenseReportLineService.selectList(new EntityWrapper<ExpenseReportLine>().eq("exp_report_header_id",headerId));
            List<ExpenseReportDist> dists=expenseReportDistService.selectList(new EntityWrapper<ExpenseReportDist>().eq("exp_report_header_id",headerId));
            List<ExpenseReportPaymentSchedule> paymentSchedules=expenseReportPaymentScheduleService.selectList(new EntityWrapper<ExpenseReportPaymentSchedule>().eq("exp_report_header_id",headerId));
            e.setId(null);
            e.setRequisitionNumber(requisitionNumber);
            e.setVersionNumber(1);
            e.setStatus(DocumentOperationEnum.GENERATE.getId());
            e.setDocumentOid(UUID.randomUUID().toString());
            e.setRequisitionDate(ZonedDateTime.now());
            e.setCreatedDate(ZonedDateTime.now());
            insert(e);
            //3. 生成報賬單行,最主要的是要將行表和頭表關聯起來
            ExpenseReportHeader temp=selectOne(new EntityWrapper<ExpenseReportHeader>().eq("requisition_number",requisitionNumber));
            Long newHeaderId=temp.getId();
           for (ExpenseReportLine f:  lines){
            Long lineId=f.getId();
              //生成費用行
               f.setId(null);
               f.setVersionNumber(1);
               f.setExpReportHeaderId(newHeaderId);
               f.setAmount(BigDecimal.ZERO);
               f.setFunctionAmount(BigDecimal.ZERO);
               expenseReportLineService.insert(f);
               // 生成分攤行
               ExpenseReportLine newLine=expenseReportLineService.selectOne(new EntityWrapper<ExpenseReportLine>().eq("exp_report_header_id",newHeaderId));
               for (ExpenseReportDist g:dists){
                   if (lineId.equals(g.getExpReportLineId())){
                       g.setId(null);
                       g.setVersionNumber(1);
                       g.setExpReportHeaderId(newHeaderId);
                       g.setExpReportLineId(newLine.getId());
                       reportDists.add(g);
                       break;
                   }
               }
           }
            //4. 生成計劃付款行
            for (ExpenseReportPaymentSchedule g:  paymentSchedules){
                g.setId(null);
                g.setVersionNumber(1);
                g.setAmount(BigDecimal.ZERO);
                g.setFunctionAmount(BigDecimal.ZERO);
                g.setExpReportHeaderId(newHeaderId);
                reportPaymentSchedules.add(g);
            }
        }
        expenseReportPaymentScheduleService.insertBatch(reportPaymentSchedules);
        expenseReportDistService.insertBatch(reportDists);
         return documents;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章