冻仓生成应收帐单;
This commit is contained in:
+455
@@ -703,6 +703,56 @@ public class BillingStatementApplicationService {
|
||||
}
|
||||
}
|
||||
}
|
||||
public void pushBillManageDC(String shipperId) {
|
||||
SettlementCustomers settlementCustomers = settlementCustomersMapper.selectOne(new LambdaQueryWrapper<SettlementCustomers>()
|
||||
.eq(SettlementCustomers::getSettlementEntityId, shipperId)
|
||||
.eq(SettlementCustomers::getDelFlag, 1));
|
||||
if (ObjectUtil.isNull(settlementCustomers)) {
|
||||
//未找到结算对象
|
||||
return;
|
||||
}
|
||||
Long settlementCustomersId = settlementCustomers.getSettlementCustomersId();
|
||||
SettlementCustomersParameters settlementCustomersParameters = settlementCustomersParametersMapper.selectOne(new LambdaQueryWrapper<SettlementCustomersParameters>()
|
||||
.eq(SettlementCustomersParameters::getSettlementCustomersId, settlementCustomersId)
|
||||
.eq(SettlementCustomersParameters::getParametersName, "冻仓计费配置"));
|
||||
if (ObjectUtil.isNull(settlementCustomersParameters)) {
|
||||
//结算对象未配置参数
|
||||
return;
|
||||
}
|
||||
String content = settlementCustomersParameters.getContent();
|
||||
Map<String, Object> contentMap = JSON.parseObject(content, Map.class);
|
||||
//主费用开票策略
|
||||
String zfycl = (String) contentMap.get("zfycl");
|
||||
//附加费用开票策略
|
||||
String fjfykpcl = (String) contentMap.get("fjfykpcl");
|
||||
//合并开票
|
||||
Integer hbcp = (Integer) contentMap.get("hbcp");
|
||||
Boolean isMerge = false;
|
||||
if (hbcp == 1) {
|
||||
//判断是否合并开票
|
||||
isMerge = true;
|
||||
}
|
||||
|
||||
if (!isMerge) {
|
||||
//按入仓单和收费事项分开计费
|
||||
if ("warehouse_receipt".equals(zfycl) && "fee_item".equals(fjfykpcl)) {
|
||||
calcReceiptAndItemSeparatelyDC(settlementCustomersId);
|
||||
}
|
||||
//按合同和收费事项分开计费
|
||||
else if ("project_monthly".equals(zfycl) && "fee_item".equals(fjfykpcl)) {
|
||||
calcContractAndItemSeparatelyDC(settlementCustomersId);
|
||||
}
|
||||
} else {
|
||||
//按入仓单和收费事项合并计费
|
||||
if ("warehouse_receipt".equals(zfycl) && "fee_item".equals(fjfykpcl)) {
|
||||
mergeCalcByReceiptAndItemDC(settlementCustomersId);
|
||||
}
|
||||
//按合同和收费事项合并计费
|
||||
else if ("project_monthly".equals(zfycl) && "fee_item".equals(fjfykpcl)) {
|
||||
mergeCalcByContractAndItemDC(settlementCustomersId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 按入仓单和收费事项分开计费
|
||||
@@ -1108,4 +1158,409 @@ public class BillingStatementApplicationService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 按入仓单和收费事项分开计费(冻仓)
|
||||
* */
|
||||
public void calcReceiptAndItemSeparatelyDC(Long settlementCustomersId) {
|
||||
List<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
|
||||
.eq(BusinessDocument::getBelongModuleCode, "冻仓")
|
||||
.eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId)
|
||||
.eq(BusinessDocument::getBusinessState, 3)
|
||||
.eq(BusinessDocument::getDelFlag, 1));
|
||||
Map<String, List<BusinessDocument>> groupedMap = list.stream()
|
||||
.collect(Collectors.groupingBy(BusinessDocument::getFirstSubjectCode));
|
||||
for (Map.Entry<String, List<BusinessDocument>> entry : groupedMap.entrySet()) {
|
||||
List<BusinessDocument> groupList = entry.getValue();
|
||||
String firstSubject = entry.getKey();
|
||||
if ("0D01".equals(firstSubject)) {
|
||||
//主费用
|
||||
for (BusinessDocument businessDocument : groupList) {
|
||||
String businessFlow = businessDocument.getBusinessFlow();
|
||||
List<BillingStatement> billingStatements = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
|
||||
.eq(BillingStatement::getBusinessFlow, businessFlow)
|
||||
.eq(BillingStatement::getBillingState, 1)
|
||||
.eq(BillingStatement::getDelFlag, 1));
|
||||
if (billingStatements != null && billingStatements.size() > 0) {
|
||||
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
|
||||
List<String> billingStatementIdList = new ArrayList<>();
|
||||
BigDecimal allAmount = BigDecimal.ZERO;
|
||||
BigDecimal allFreeFee = BigDecimal.ZERO;
|
||||
String settlementCurrency = "CNY";
|
||||
for (BillingStatement billingStatement : billingStatements) {
|
||||
settlementCurrency = billingStatement.getSettlementCurrency();
|
||||
String firstSubjectCode = billingStatement.getFirstSubjectCode();
|
||||
String firstSubjectName = billingStatement.getFirstSubjectName();
|
||||
Long organizationId = billingStatement.getOrganizationId();
|
||||
Map<String, Object> taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName);
|
||||
if (taxRateMap == null) continue;
|
||||
Double taxRate = (Double) taxRateMap.get("taxRate");
|
||||
Long billingStatementId = billingStatement.getBillingStatementId();
|
||||
BillingStatementDTO billingStatementDTO = new BillingStatementDTO();
|
||||
billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId));
|
||||
billingStatementDTO.setAuditOperation(1);
|
||||
reviewBilling(billingStatementDTO);
|
||||
|
||||
BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO();
|
||||
BigDecimal amount = billingStatementDTO.getBillingAmount();
|
||||
BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal taxFreeFee = amount.subtract(taxAmount);
|
||||
allAmount.add(amount);
|
||||
allFreeFee.add(taxFreeFee);
|
||||
billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId));
|
||||
billingStatementADDVO.setTaxRate(taxRate);
|
||||
billingStatementADDVO.setTaxAmount(taxAmount);
|
||||
billingStatementADDVO.setTaxFreeFee(taxFreeFee);
|
||||
billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName());
|
||||
billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode());
|
||||
billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName());
|
||||
billingStatementADDVOS.add(billingStatementADDVO);
|
||||
|
||||
billingStatementIdList.add(String.valueOf(billingStatementId));
|
||||
}
|
||||
String ids = String.join(",", billingStatementIdList);
|
||||
BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO();
|
||||
billingStatementDTO1.setBillingStatementIds(ids);
|
||||
billingStatementDTO1.setBelongModuleCode("wms");
|
||||
billingStatementDTO1.setTaxAmount(allAmount);
|
||||
billingStatementDTO1.setBillingAmount(allAmount);
|
||||
billingStatementDTO1.setTaxFreeFee(allFreeFee);
|
||||
billingStatementDTO1.setSettlementCurrency(settlementCurrency);
|
||||
billingStatementDTO1.setBillingStatementList(billingStatementADDVOS);
|
||||
generateBills(billingStatementDTO1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//附加费用
|
||||
List<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
|
||||
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
|
||||
.in(BillingStatement::getBusinessFlow, businessFlowList)
|
||||
.eq(BillingStatement::getBillingState, 1)
|
||||
.eq(BillingStatement::getDelFlag, 1));
|
||||
if (billingStatementList != null && billingStatementList.size() > 0) {
|
||||
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
|
||||
List<String> billingStatementIdList = new ArrayList<>();
|
||||
BigDecimal allAmount = BigDecimal.ZERO;
|
||||
BigDecimal allFreeFee = BigDecimal.ZERO;
|
||||
String settlementCurrency = "CNY";
|
||||
for (BillingStatement billingStatement : billingStatementList) {
|
||||
settlementCurrency = billingStatement.getSettlementCurrency();
|
||||
String firstSubjectCode = billingStatement.getFirstSubjectCode();
|
||||
String firstSubjectName = billingStatement.getFirstSubjectName();
|
||||
Long organizationId = billingStatement.getOrganizationId();
|
||||
Map<String, Object> taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName);
|
||||
if (taxRateMap == null) continue;
|
||||
Double taxRate = (Double) taxRateMap.get("taxRate");
|
||||
Long billingStatementId = billingStatement.getBillingStatementId();
|
||||
BillingStatementDTO billingStatementDTO = new BillingStatementDTO();
|
||||
billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId));
|
||||
billingStatementDTO.setAuditOperation(1);
|
||||
reviewBilling(billingStatementDTO);
|
||||
|
||||
BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO();
|
||||
BigDecimal amount = billingStatementDTO.getBillingAmount();
|
||||
BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal taxFreeFee = amount.subtract(taxAmount);
|
||||
allAmount.add(amount);
|
||||
allFreeFee.add(taxFreeFee);
|
||||
billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId));
|
||||
billingStatementADDVO.setTaxRate(taxRate);
|
||||
billingStatementADDVO.setTaxAmount(taxAmount);
|
||||
billingStatementADDVO.setTaxFreeFee(taxFreeFee);
|
||||
billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName());
|
||||
billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode());
|
||||
billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName());
|
||||
billingStatementADDVOS.add(billingStatementADDVO);
|
||||
|
||||
billingStatementIdList.add(String.valueOf(billingStatementId));
|
||||
}
|
||||
String ids = String.join(",", billingStatementIdList);
|
||||
BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO();
|
||||
billingStatementDTO1.setBillingStatementIds(ids);
|
||||
billingStatementDTO1.setBelongModuleCode("wms");
|
||||
billingStatementDTO1.setTaxAmount(allAmount);
|
||||
billingStatementDTO1.setBillingAmount(allAmount);
|
||||
billingStatementDTO1.setTaxFreeFee(allFreeFee);
|
||||
billingStatementDTO1.setSettlementCurrency(settlementCurrency);
|
||||
billingStatementDTO1.setBillingStatementList(billingStatementADDVOS);
|
||||
generateBills(billingStatementDTO1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 按入仓单和收费事项合并计费(冻仓)
|
||||
* */
|
||||
public void mergeCalcByReceiptAndItemDC(Long settlementCustomersId) {
|
||||
List<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
|
||||
.eq(BusinessDocument::getBelongModuleCode, "冻仓")
|
||||
.eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId)
|
||||
.eq(BusinessDocument::getBusinessState, 3)
|
||||
.eq(BusinessDocument::getDelFlag, 1));
|
||||
Map<String, List<BusinessDocument>> groupedMap = list.stream()
|
||||
.collect(Collectors.groupingBy(BusinessDocument::getOriginalBusinessNum));
|
||||
for (Map.Entry<String, List<BusinessDocument>> entry : groupedMap.entrySet()) {
|
||||
List<BusinessDocument> groupList = entry.getValue();
|
||||
String originalBusinessNum = entry.getKey();
|
||||
List<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
|
||||
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
|
||||
.in(BillingStatement::getBusinessFlow, businessFlowList)
|
||||
.eq(BillingStatement::getBillingState, 1)
|
||||
.eq(BillingStatement::getDelFlag, 1));
|
||||
if (billingStatementList != null && billingStatementList.size() > 0) {
|
||||
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
|
||||
List<String> billingStatementIdList = new ArrayList<>();
|
||||
BigDecimal allAmount = BigDecimal.ZERO;
|
||||
BigDecimal allFreeFee = BigDecimal.ZERO;
|
||||
String settlementCurrency = "CNY";
|
||||
for (BillingStatement billingStatement : billingStatementList) {
|
||||
settlementCurrency = billingStatement.getSettlementCurrency();
|
||||
String firstSubjectCode = billingStatement.getFirstSubjectCode();
|
||||
String firstSubjectName = billingStatement.getFirstSubjectName();
|
||||
Long organizationId = billingStatement.getOrganizationId();
|
||||
Map<String, Object> taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName);
|
||||
if (taxRateMap == null) continue;
|
||||
Double taxRate = (Double) taxRateMap.get("taxRate");
|
||||
Long billingStatementId = billingStatement.getBillingStatementId();
|
||||
BillingStatementDTO billingStatementDTO = new BillingStatementDTO();
|
||||
billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId));
|
||||
billingStatementDTO.setAuditOperation(1);
|
||||
reviewBilling(billingStatementDTO);
|
||||
|
||||
BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO();
|
||||
BigDecimal amount = billingStatementDTO.getBillingAmount();
|
||||
BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal taxFreeFee = amount.subtract(taxAmount);
|
||||
allAmount.add(amount);
|
||||
allFreeFee.add(taxFreeFee);
|
||||
billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId));
|
||||
billingStatementADDVO.setTaxRate(taxRate);
|
||||
billingStatementADDVO.setTaxAmount(taxAmount);
|
||||
billingStatementADDVO.setTaxFreeFee(taxFreeFee);
|
||||
billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName());
|
||||
billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode());
|
||||
billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName());
|
||||
billingStatementADDVOS.add(billingStatementADDVO);
|
||||
|
||||
billingStatementIdList.add(String.valueOf(billingStatementId));
|
||||
}
|
||||
String ids = String.join(",", billingStatementIdList);
|
||||
BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO();
|
||||
billingStatementDTO1.setBillingStatementIds(ids);
|
||||
billingStatementDTO1.setBelongModuleCode("wms");
|
||||
billingStatementDTO1.setTaxAmount(allAmount);
|
||||
billingStatementDTO1.setBillingAmount(allAmount);
|
||||
billingStatementDTO1.setTaxFreeFee(allFreeFee);
|
||||
billingStatementDTO1.setSettlementCurrency(settlementCurrency);
|
||||
billingStatementDTO1.setBillingStatementList(billingStatementADDVOS);
|
||||
generateBills(billingStatementDTO1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 按合同和收费事项分开计费(冻仓)
|
||||
* */
|
||||
public void calcContractAndItemSeparatelyDC(Long settlementCustomersId) {
|
||||
List<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
|
||||
.eq(BusinessDocument::getBelongModuleCode, "冻仓")
|
||||
.eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId)
|
||||
.eq(BusinessDocument::getBusinessState, 3)
|
||||
.eq(BusinessDocument::getDelFlag, 1));
|
||||
Map<String, List<BusinessDocument>> groupedMap = list.stream()
|
||||
.collect(Collectors.groupingBy(BusinessDocument::getFirstSubjectCode));
|
||||
for (Map.Entry<String, List<BusinessDocument>> entry : groupedMap.entrySet()) {
|
||||
List<BusinessDocument> groupList = entry.getValue();
|
||||
String firstSubject = entry.getKey();
|
||||
if ("0D01".equals(firstSubject)) {
|
||||
//主费用
|
||||
List<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
|
||||
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
|
||||
.in(BillingStatement::getBusinessFlow, businessFlowList)
|
||||
.eq(BillingStatement::getBillingState, 1)
|
||||
.eq(BillingStatement::getDelFlag, 1));
|
||||
if (billingStatementList != null && billingStatementList.size() > 0) {
|
||||
Map<Long, List<BillingStatement>> contractManageIdMap = billingStatementList.stream()
|
||||
.collect(Collectors.groupingBy(BillingStatement::getContractManageId));
|
||||
for (Map.Entry<Long, List<BillingStatement>> contractManageIdEntry : contractManageIdMap.entrySet()) {
|
||||
Long contractManageId = contractManageIdEntry.getKey();
|
||||
List<BillingStatement> billingContractStatementList = contractManageIdEntry.getValue();
|
||||
|
||||
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
|
||||
BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO();
|
||||
List<String> billingStatementIdList = new ArrayList<>();
|
||||
BigDecimal allAmount = BigDecimal.ZERO;
|
||||
BigDecimal allFreeFee = BigDecimal.ZERO;
|
||||
String settlementCurrency = "CNY";
|
||||
for (BillingStatement billingStatement : billingContractStatementList) {
|
||||
settlementCurrency = billingStatement.getSettlementCurrency();
|
||||
String firstSubjectCode = billingStatement.getFirstSubjectCode();
|
||||
String firstSubjectName = billingStatement.getFirstSubjectName();
|
||||
Long organizationId = billingStatement.getOrganizationId();
|
||||
Map<String, Object> taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName);
|
||||
if (taxRateMap == null) continue;
|
||||
Double taxRate = (Double) taxRateMap.get("taxRate");
|
||||
Long billingStatementId = billingStatement.getBillingStatementId();
|
||||
BillingStatementDTO billingStatementDTO = new BillingStatementDTO();
|
||||
billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId));
|
||||
billingStatementDTO.setAuditOperation(1);
|
||||
reviewBilling(billingStatementDTO);
|
||||
|
||||
BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO();
|
||||
BigDecimal amount = billingStatementDTO.getBillingAmount();
|
||||
BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal taxFreeFee = amount.subtract(taxAmount);
|
||||
allAmount.add(amount);
|
||||
allFreeFee.add(taxFreeFee);
|
||||
billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId));
|
||||
billingStatementADDVO.setTaxRate(taxRate);
|
||||
billingStatementADDVO.setTaxAmount(taxAmount);
|
||||
billingStatementADDVO.setTaxFreeFee(taxFreeFee);
|
||||
billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName());
|
||||
billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode());
|
||||
billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName());
|
||||
billingStatementADDVOS.add(billingStatementADDVO);
|
||||
|
||||
billingStatementIdList.add(String.valueOf(billingStatementId));
|
||||
}
|
||||
String ids = String.join(",", billingStatementIdList);
|
||||
billingStatementDTO1.setBillingStatementIds(ids);
|
||||
billingStatementDTO1.setBelongModuleCode("wms");
|
||||
billingStatementDTO1.setTaxAmount(allAmount);
|
||||
billingStatementDTO1.setBillingAmount(allAmount);
|
||||
billingStatementDTO1.setTaxFreeFee(allFreeFee);
|
||||
billingStatementDTO1.setSettlementCurrency(settlementCurrency);
|
||||
billingStatementDTO1.setBillingStatementList(billingStatementADDVOS);
|
||||
generateBills(billingStatementDTO1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//附加费用
|
||||
List<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
|
||||
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
|
||||
.in(BillingStatement::getBusinessFlow, businessFlowList)
|
||||
.eq(BillingStatement::getBillingState, 1)
|
||||
.eq(BillingStatement::getDelFlag, 1));
|
||||
if (billingStatementList != null && billingStatementList.size() > 0) {
|
||||
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
|
||||
List<String> billingStatementIdList = new ArrayList<>();
|
||||
BigDecimal allAmount = BigDecimal.ZERO;
|
||||
BigDecimal allFreeFee = BigDecimal.ZERO;
|
||||
String settlementCurrency = "CNY";
|
||||
for (BillingStatement billingStatement : billingStatementList) {
|
||||
settlementCurrency = billingStatement.getSettlementCurrency();
|
||||
String firstSubjectCode = billingStatement.getFirstSubjectCode();
|
||||
String firstSubjectName = billingStatement.getFirstSubjectName();
|
||||
Long organizationId = billingStatement.getOrganizationId();
|
||||
Map<String, Object> taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName);
|
||||
if (taxRateMap == null) continue;
|
||||
Double taxRate = (Double) taxRateMap.get("taxRate");
|
||||
Long billingStatementId = billingStatement.getBillingStatementId();
|
||||
BillingStatementDTO billingStatementDTO = new BillingStatementDTO();
|
||||
billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId));
|
||||
billingStatementDTO.setAuditOperation(1);
|
||||
reviewBilling(billingStatementDTO);
|
||||
|
||||
BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO();
|
||||
BigDecimal amount = billingStatementDTO.getBillingAmount();
|
||||
BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal taxFreeFee = amount.subtract(taxAmount);
|
||||
allAmount.add(amount);
|
||||
allFreeFee.add(taxFreeFee);
|
||||
billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId));
|
||||
billingStatementADDVO.setTaxRate(taxRate);
|
||||
billingStatementADDVO.setTaxAmount(taxAmount);
|
||||
billingStatementADDVO.setTaxFreeFee(taxFreeFee);
|
||||
billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName());
|
||||
billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode());
|
||||
billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName());
|
||||
billingStatementADDVOS.add(billingStatementADDVO);
|
||||
|
||||
billingStatementIdList.add(String.valueOf(billingStatementId));
|
||||
}
|
||||
String ids = String.join(",", billingStatementIdList);
|
||||
BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO();
|
||||
billingStatementDTO1.setBillingStatementIds(ids);
|
||||
billingStatementDTO1.setBelongModuleCode("wms");
|
||||
billingStatementDTO1.setTaxAmount(allAmount);
|
||||
billingStatementDTO1.setBillingAmount(allAmount);
|
||||
billingStatementDTO1.setTaxFreeFee(allFreeFee);
|
||||
billingStatementDTO1.setSettlementCurrency(settlementCurrency);
|
||||
billingStatementDTO1.setBillingStatementList(billingStatementADDVOS);
|
||||
generateBills(billingStatementDTO1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 按合同和收费事项合并计费(冻仓)
|
||||
* */
|
||||
public void mergeCalcByContractAndItemDC(Long settlementCustomersId) {
|
||||
List<BusinessDocument> list = businessDocumentService.list(new LambdaQueryWrapper<BusinessDocument>()
|
||||
.eq(BusinessDocument::getBelongModuleCode, "冻仓")
|
||||
.eq(BusinessDocument::getSettlementCustomersId, settlementCustomersId)
|
||||
.eq(BusinessDocument::getBusinessState, 3)
|
||||
.eq(BusinessDocument::getDelFlag, 1));
|
||||
Map<Long, List<BusinessDocument>> groupedMap = list.stream()
|
||||
.collect(Collectors.groupingBy(BusinessDocument::getContractManageId));
|
||||
for (Map.Entry<Long, List<BusinessDocument>> entry : groupedMap.entrySet()) {
|
||||
List<BusinessDocument> groupList = entry.getValue();
|
||||
Long contractManageId = entry.getKey();
|
||||
List<String> businessFlowList = groupList.stream().map(BusinessDocument::getBusinessFlow).collect(Collectors.toList());
|
||||
List<BillingStatement> billingStatementList = billingStatementService.list(new LambdaQueryWrapper<BillingStatement>()
|
||||
.in(BillingStatement::getBusinessFlow, businessFlowList)
|
||||
.eq(BillingStatement::getBillingState, 1)
|
||||
.eq(BillingStatement::getDelFlag, 1));
|
||||
if (billingStatementList != null && billingStatementList.size() > 0) {
|
||||
List<BillingStatementADDVO> billingStatementADDVOS = new ArrayList<>();
|
||||
List<String> billingStatementIdList = new ArrayList<>();
|
||||
BigDecimal allAmount = BigDecimal.ZERO;
|
||||
BigDecimal allFreeFee = BigDecimal.ZERO;
|
||||
String settlementCurrency = "CNY";
|
||||
for (BillingStatement billingStatement : billingStatementList) {
|
||||
settlementCurrency = billingStatement.getSettlementCurrency();
|
||||
String firstSubjectCode = billingStatement.getFirstSubjectCode();
|
||||
String firstSubjectName = billingStatement.getFirstSubjectName();
|
||||
Long organizationId = billingStatement.getOrganizationId();
|
||||
Map<String, Object> taxRateMap = billingStatementMapper.getTaxRate(organizationId, firstSubjectCode, firstSubjectName);
|
||||
if (taxRateMap == null) continue;
|
||||
Double taxRate = (Double) taxRateMap.get("taxRate");
|
||||
Long billingStatementId = billingStatement.getBillingStatementId();
|
||||
BillingStatementDTO billingStatementDTO = new BillingStatementDTO();
|
||||
billingStatementDTO.setBillingStatementIds(String.valueOf(billingStatementId));
|
||||
billingStatementDTO.setAuditOperation(1);
|
||||
reviewBilling(billingStatementDTO);
|
||||
|
||||
BillingStatementADDVO billingStatementADDVO = new BillingStatementADDVO();
|
||||
BigDecimal amount = billingStatementDTO.getBillingAmount();
|
||||
BigDecimal taxAmount = amount.divide(BigDecimal.ONE.add(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(taxRate).divide(BigDecimal.valueOf(100))).setScale(2, BigDecimal.ROUND_HALF_UP);
|
||||
BigDecimal taxFreeFee = amount.subtract(taxAmount);
|
||||
allAmount.add(amount);
|
||||
allFreeFee.add(taxFreeFee);
|
||||
billingStatementADDVO.setBillingStatementId(String.valueOf(billingStatementId));
|
||||
billingStatementADDVO.setTaxRate(taxRate);
|
||||
billingStatementADDVO.setTaxAmount(taxAmount);
|
||||
billingStatementADDVO.setTaxFreeFee(taxFreeFee);
|
||||
billingStatementADDVO.setFeeType(billingStatement.getServiceItemsName());
|
||||
billingStatementADDVO.setInvoiceItem(billingStatement.getFirstSubjectCode());
|
||||
billingStatementADDVO.setInvoiceItemName(billingStatement.getFirstSubjectName());
|
||||
billingStatementADDVOS.add(billingStatementADDVO);
|
||||
|
||||
billingStatementIdList.add(String.valueOf(billingStatementId));
|
||||
}
|
||||
String ids = String.join(",", billingStatementIdList);
|
||||
BillingStatementDTO billingStatementDTO1 = new BillingStatementDTO();
|
||||
billingStatementDTO1.setBillingStatementIds(ids);
|
||||
billingStatementDTO1.setBelongModuleCode("wms");
|
||||
billingStatementDTO1.setTaxAmount(allAmount);
|
||||
billingStatementDTO1.setBillingAmount(allAmount);
|
||||
billingStatementDTO1.setTaxFreeFee(allFreeFee);
|
||||
billingStatementDTO1.setSettlementCurrency(settlementCurrency);
|
||||
billingStatementDTO1.setBillingStatementList(billingStatementADDVOS);
|
||||
generateBills(billingStatementDTO1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -339,7 +339,10 @@ public class BillingStatementApi extends BaseController {
|
||||
String shipperId = XxlJobHelper.getJobParam();
|
||||
logger.info("XXL-JOB 开始入库业务单推送bms计费流水,货主id参数:{}", shipperId);
|
||||
try {
|
||||
//干仓
|
||||
billingStatementApplicationService.pushBillManage(shipperId);
|
||||
//冻仓
|
||||
billingStatementApplicationService.pushBillManageDC(shipperId);
|
||||
// 设置任务执行结果
|
||||
XxlJobHelper.handleSuccess("入库业务单推送bms计费流水执行成功");
|
||||
} catch (Exception e) {
|
||||
|
||||
Reference in New Issue
Block a user