增加导出功能

This commit is contained in:
wuweihua
2026-10-21 18:06:21 +08:00
parent c04191c316
commit 92000956fc
15 changed files with 1181 additions and 21 deletions
@@ -37,6 +37,7 @@ import com.bms.price.domain.BatchAddIncomeBillFeeTask;
import com.bms.price.domain.ChargeWeightImportTask;
import com.bms.price.domain.PrcBillingTask;
import com.bms.price.domain.PrcOrderBill;
import com.bms.price.domain.PrcOrderBillExportTask;
import com.bms.price.domain.PrcQuote;
import com.bms.price.domain.vo.AddIncomeBillFeeRequest;
import com.bms.price.domain.vo.BatchAddIncomeBillFeeRequest;
@@ -57,6 +58,7 @@ import com.bms.price.service.IPrcBillingTaskService;
import com.bms.price.service.IPrcOrderBillService;
import com.bms.price.service.ITmsPriceQuoteService;
import com.bms.price.service.OrderBillProductCheckService;
import com.bms.price.service.support.OrderBillExportSupport;
/**
* Billing center: order quote trial (authenticated).
@@ -147,6 +149,50 @@ public class BillingController extends BaseController
return getDataTable(list);
}
/**
* Async export billing list by current filters (status limited to 0-3).
* Requires at least one meaningful filter. Poll task then download.
*/
@PreAuthorize("@ss.hasPermi('price:billing:export')")
@Log(title = "\u8ba1\u8d39\u5217\u8868", businessType = BusinessType.EXPORT)
@PostMapping("/bill/export")
public AjaxResult exportBillList(@RequestBody(required = false) PrcOrderBill query)
{
if (query == null)
{
query = new PrcOrderBill();
}
// Filter gate uses the request as-is; defaults applied only for query scope.
if (!OrderBillExportSupport.hasExportFilter(query))
{
return error(MessageUtils.message("price.bill.export.filterRequired"));
}
query.setBillingFailStatuses(limitBillingListFailStatus(query.getBillingFailStatuses()));
query.setBillingFailStatus(null);
return successTask(prcOrderBillService.submitOrderBillExport(
PrcOrderBillExportTask.TYPE_BILLING, query));
}
@PreAuthorize("@ss.hasPermi('price:billing:export')")
@GetMapping("/bill/export/task/{taskId}")
public AjaxResult getBillExportTask(@PathVariable("taskId") String taskId)
{
PrcOrderBillExportTask task = prcOrderBillService.getOrderBillExportTask(taskId);
if (task == null)
{
return error(MessageUtils.message("price.bill.export.taskNotExists"));
}
return success(task);
}
@PreAuthorize("@ss.hasPermi('price:billing:export')")
@GetMapping("/bill/export/download/{taskId}")
public void downloadBillExport(@PathVariable("taskId") String taskId, HttpServletResponse response)
throws Exception
{
prcOrderBillService.downloadOrderBillExport(taskId, response);
}
private static List<Integer> limitBillingListFailStatus(List<Integer> requested)
{
List<Integer> allowed = Arrays.asList(Integer.valueOf(0), Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3));
@@ -179,6 +225,39 @@ public class BillingController extends BaseController
return getDataTable(list);
}
/**
* Async export order list by current filters.
* Requires at least one meaningful filter (default orderStatuses alone is not enough).
*/
@PreAuthorize("@ss.hasPermi('price:orderBill:export')")
@Log(title = "\u8ba2\u5355\u5217\u8868", businessType = BusinessType.EXPORT)
@PostMapping("/orderBill/export")
public AjaxResult exportOrderBillList(@RequestBody(required = false) PrcOrderBill query)
{
return successTask(prcOrderBillService.submitOrderBillExport(
PrcOrderBillExportTask.TYPE_ORDER, query == null ? new PrcOrderBill() : query));
}
@PreAuthorize("@ss.hasPermi('price:orderBill:export')")
@GetMapping("/orderBill/export/task/{taskId}")
public AjaxResult getOrderBillExportTask(@PathVariable("taskId") String taskId)
{
PrcOrderBillExportTask task = prcOrderBillService.getOrderBillExportTask(taskId);
if (task == null)
{
return error(MessageUtils.message("price.bill.export.taskNotExists"));
}
return success(task);
}
@PreAuthorize("@ss.hasPermi('price:orderBill:export')")
@GetMapping("/orderBill/export/download/{taskId}")
public void downloadOrderBillExport(@PathVariable("taskId") String taskId, HttpServletResponse response)
throws Exception
{
prcOrderBillService.downloadOrderBillExport(taskId, response);
}
/**
* Compare local order-bill products vs customer bound package SALES products
* (includes product_code_mapping).
@@ -217,3 +217,9 @@ price.set.detail.duplicate.noZone=无分区
price.bill.billingFail.product=计费失败:未匹配产品
price.bill.billingFail.country=计费失败:未匹配国家
price.bill.billingFail.weight=计费失败:未匹配重量段
price.bill.export.filterRequired=请先设置列表查询条件后再导出
price.bill.export.taskNotExists=导出任务不存在或已过期
price.bill.export.tooMany=匹配订单超过上限 {0} 条,请缩小筛选范围
price.bill.export.noMatch=未查询到匹配订单,无法导出
price.bill.export.notReady=导出文件尚未生成或已失败
price.bill.export.fileMissing=导出文件不存在或路径非法