领域驱动设计 用DDD重构会计凭证生成(下)( 七 )

details = bill.getInvoicePOList();if (CollectionUtils.isEmpty(details)) {return;}// 构建生成凭证需要的费用行feesList fees = new ArrayList();AdCreateFeeRequestVO fee;FeeItemsPO feeItem;for (ExpenseInvoicePO po : details) {//非增值税专用发票时if (!InvoiceTypeConstant.INVOICE_TYPE_ONE.equals(po.getInvoiceType())) {continue;}fee = new AdCreateFeeRequestVO();feeItem = feeItemsService.getByGeneralAssitId(po.getGeneralAssitId());if (feeItem == null) {log.error("发票信息页凭证生成 , 按税率未找到对应的增值税费用项目,税率:{} , 税率id:{}", po.getGeneralAssitId(), po.getTaxRate());throw new BizException("发票信息页凭证生成 , 按税率未找到对应的增值税费用项目");}fee.setFeeItemsCode(feeItem.getFeeItemsCode());fee.setFeeItemsName(feeItem.getFeeItemsName());//使用部门类型默认为管理去查找科目fee.setDeptType("10");//税额fee.setAmount(po.getTaxAmount());//无以下数据fee.setCostcenterCode(null);fee.setCostcenterId(null);fee.setCostcenterNameLong(null);fee.setCostcenterName(null);fee.setProjectCode(null);fee.setProjectId(null);//收益期 , 自定义辅助核算代码fee.setBenefitStartDate(null);fee.setBenefitEndDate(null);fee.setAsstAccId(null);fee.setAsstAccName(null);//发票行上的税率fee.setGeneralAssitId(po.getGeneralAssitId());//标识此类行为发票所有fee.setVoucherType(AmountTypeEnum.INVOICE_AMOUNT.getVoucherType());//发票行关联的费用项目全集20191202注释掉 , 不需要了//if(!AbstractStringUtils.isEmpty(po.getExpenseFeesIds())){//fee.setIds(Arrays.asList(po.getExpenseFeesIds().split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()));//}fees.add(fee);}List currFees = adRequest.getFees();if (!CollectionUtils.isEmpty(currFees)) {fees.addAll(currFees);}adRequest.setFees(fees);}/*** 押金行** @param bill* @param adRequest*/private void buildAdCreateRequestFeesForDeposit(BillPO bill, AdCreateRequestVO adRequest) {List pays = bill.getDepositPayPOList();if (CollectionUtils.isEmpty(pays)) {return;}// 构建生成凭证需要的费用行feesList fees = new ArrayList();AdCreateFeeRequestVO fee;DepositPO deposit;FeeItemsPO feeItem;DeptPO dept;for (DepositPayPO depositPay : pays) {fee = new AdCreateFeeRequestVO();try {deposit = depositService.getById(depositPay.getDepositId());feeItem = super.getFeeItems(deposit.getDepositType());fee.setFeeItemsCode(feeItem.getFeeItemsCode());fee.setFeeItemsName(feeItem.getFeeItemsName());fee.setGeneralAssitId(feeItem.getGeneralAssitId());fee.setAmount(depositPay.getDepositPayAmount());fee.setPaymentAmount(depositPay.getDepositPayAmount());if (depositPay.getDeptId() != null) {dept = super.getDept(depositPay.getDeptId());fee.setDeptCode(dept.getDeptCode());fee.setDeptId(depositPay.getDeptId());fee.setDeptType(dept.getDeptType());}//code可以不设置fee.setCostcenterCode("");fee.setCostcenterId(depositPay.getCostcenterId());//code可以不设置fee.setProjectCode("");fee.setProjectId(depositPay.getProjectId());//标识此类行为押金单据所有fee.setVoucherType(AmountTypeEnum.DEPOSIT_AMOUNT.getVoucherType());fee.setDueDate(deposit.getEndDate());fees.add(fee);} catch (Exception e) {log.error("凭证生成 , 押金行参数构建异常 , {}", e);throw new BizException("凭证生成异常 , 请稍后再试");}}List currFees = adRequest.getFees();if (!CollectionUtils.isEmpty(currFees)) {fees.addAll(currFees);}adRequest.setFees(fees);}/*** 押金抵扣** @param bill* @param adRequest*/private void buildAdCreateRequestFeesForDepositDeduction(BillPO bill, AdCreateRequestVO adRequest) {List depositDeductions = bill.getDepositDeductionPOList();if (CollectionUtils.isEmpty(depositDeductions)) {return;}// 构建生成凭证需要的费用行feesList fees = new ArrayList();AdCreateFeeRequestVO fee;FeeItemsPO feeItem;DeptPO dept;List details;for (DepositDeductionPO po : depositDeductions) {details = po.getDepositDeductionDetailPOS();if (CollectionUtils.isEmpty(details)) {continue;}for (DepositDeductionDetailPO detail : details) {fee = new AdCreateFeeRequestVO();try {feeItem = super.getFeeItems(detail.getFeeItemId());fee.setFeeItemsCode(feeItem.getFeeItemsCode());fee.setFeeItemsName(feeItem.getFeeItemsName());fee.setGeneralAssitId(feeItem.getGeneralAssitId());fee.setAmount(detail.getDeductionAmount());if (detail.getDeptId() != null) {dept = super.getDept(detail.getDeptId());fee.setDeptCode(dept.getDeptCode());fee.setDeptId(detail.getDeptId());fee.setDeptType(dept.getDeptType());}//code可以不设置fee.setCostcenterCode("");fee.setCostcenterId(detail.getCostcenterId());//code可以不设置fee.setProjectCode("");fee.setProjectId(detail.getProjectId());//标识此类行为押金抵扣单据所有fee.setVoucherType(AmountTypeEnum.DEDUCTIBLE_AMOUNT.getVoucherType());fees.add(fee);} catch (Exception e) {log.error("凭证生成 , 押金抵扣行参数构建异常 , {}", e);throw new BizException("凭证生成异常 , 请稍后再试");}}}List currFees = adRequest.getFees();if (!CollectionUtils.isEmpty(currFees)) {fees.addAll(currFees);}adRequest.setFees(fees);}/*** 增加费用行占用金额逻辑* 兼容历史数据没有处理占用金额的情况** @param billNo* @return*/private List