订单数据源增加订单对比功能

This commit is contained in:
wuweihua
2026-10-20 13:55:55 +08:00
parent 8093cb52e7
commit 45969a4d29
20 changed files with 1865 additions and 96 deletions
@@ -24,6 +24,7 @@ import com.bms.common.core.page.TableSupport;
import com.bms.common.enums.BusinessType;
import com.bms.common.utils.StringUtils;
import com.bms.price.domain.PrcBillingTaskRetryTask;
import com.bms.price.domain.vo.TabOrderCompareTask;
import com.bms.price.domain.vo.TabOrderMonitorQuery;
import com.bms.price.domain.vo.TabOrderMonitorVo;
import com.bms.price.domain.vo.TabOrderProductCheckResult;
@@ -35,6 +36,7 @@ import com.bms.price.search.BillSearchPage;
import com.bms.price.search.EsLogType;
import com.bms.price.search.IBillSearchStore;
import com.bms.price.search.TabOrderSyncEsLog;
import com.bms.price.task.TabOrderCompareAsyncRunner;
import com.bms.price.task.TabOrderSyncAsyncRunner;
/**
@@ -53,6 +55,9 @@ public class TabOrderMonitorController extends BaseController
@Autowired
private TabOrderSyncAsyncRunner tabOrderSyncAsyncRunner;
@Autowired
private TabOrderCompareAsyncRunner tabOrderCompareAsyncRunner;
@Autowired
private IBillSearchStore billSearchStore;
@@ -82,6 +87,36 @@ public class TabOrderMonitorController extends BaseController
pageSize == null ? 10 : pageSize.intValue());
}
/**
* 比对缺失转单号回填搜索专用:仅按转单号列查询,
* 不走普通列表/三列单号收集路径。
*/
@PreAuthorize("@ss.hasPermi('monitor:orderSource:list')")
@PostMapping("/listByTransferNos")
public TableDataInfo listByTransferNos(@RequestBody TabOrderMonitorQuery query,
@RequestParam(value = "pageNum", required = false) Integer pageNum,
@RequestParam(value = "pageSize", required = false) Integer pageSize)
{
TableDataInfo rsp = new TableDataInfo();
rsp.setCode(HttpStatus.SUCCESS);
rsp.setMsg("查询成功");
if (query == null || !hasNonBlankItem(query.getOrderIdentifiers()))
{
rsp.setRows(Collections.emptyList());
rsp.setTotal(0L);
return rsp;
}
// clear time so shared resolvers cannot accidentally reuse month window
query.setBeginTime(null);
query.setEndTime(null);
customerKeywordResolver.resolve(query);
TabOrderPageResult page = tabOrderMonitorService.searchPageByTransferNos(
query, pageNum == null ? 1 : pageNum.intValue(), pageSize == null ? 10 : pageSize.intValue());
rsp.setRows(page.getRows());
rsp.setTotal(page.getTotal());
return rsp;
}
private TableDataInfo listPage(TabOrderMonitorQuery query, int pageNum, int pageSize)
{
TableDataInfo rsp = new TableDataInfo();
@@ -102,6 +137,46 @@ public class TabOrderMonitorController extends BaseController
return rsp;
}
/**
* 订单比对(异步):按客户+提货时间分页比对转单号(上游有/本地无)。
*/
@PreAuthorize("@ss.hasPermi('monitor:orderSource:list')")
@Log(title = "order source compare", businessType = BusinessType.OTHER)
@PostMapping("/compareByFilter")
public AjaxResult compareByFilter(@RequestBody TabOrderMonitorQuery query)
{
if (!hasRequiredFilters(query))
{
return error("订单比对需先选择客户和提货时间");
}
// 比对不受列表单号/回填影响
query.setOrderIdentifiers(null);
query.setOrderId(null);
query.setOrgOrderId(null);
query.setTransferOrderId(null);
customerKeywordResolver.resolve(query);
String asyncTaskId = UUID.randomUUID().toString().replace("-", "");
tabOrderCompareAsyncRunner.put(asyncTaskId, TabOrderCompareTask.STATUS_PENDING, 0, "queued",
0, 0, 0, null, null);
tabOrderCompareAsyncRunner.run(asyncTaskId, query);
Map<String, Object> data = new HashMap<String, Object>();
data.put("asyncTaskId", asyncTaskId);
TabOrderSyncEsLog.save(billSearchStore, asyncTaskId, "COMPARE", query, data, "SUCCESS", null);
return success(data);
}
@PreAuthorize("@ss.hasPermi('monitor:orderSource:list')")
@GetMapping("/compareTask/{asyncTaskId}")
public AjaxResult compareTaskProgress(@PathVariable("asyncTaskId") String asyncTaskId)
{
TabOrderCompareTask task = tabOrderCompareAsyncRunner.get(asyncTaskId);
if (task == null)
{
return error("compare task not found or expired");
}
return success(task);
}
@PreAuthorize("@ss.hasPermi('monitor:orderSource:list')")
@PostMapping("/checkProducts")
public AjaxResult checkProducts(@RequestBody TabOrderMonitorQuery query)
@@ -47,6 +47,7 @@ import com.bms.price.domain.vo.RecalcBillPriceRequest;
import com.bms.price.domain.vo.UpdateChargeWeightRequest;
import com.bms.price.domain.vo.UpdateIncomeBillFeeRequest;
import com.bms.price.domain.vo.TmsPriceBillRequest;
import com.bms.price.domain.vo.OrderBillProductCheckResult;
import com.bms.price.domain.vo.TmsPriceQuoteRequest;
import com.bms.price.domain.vo.TmsPriceQuoteResult;
import com.bms.price.enums.BillTaskSuccessStatus;
@@ -54,6 +55,7 @@ import com.bms.price.enums.BillTaskType;
import com.bms.price.service.IPrcBillingTaskService;
import com.bms.price.service.IPrcOrderBillService;
import com.bms.price.service.ITmsPriceQuoteService;
import com.bms.price.service.OrderBillProductCheckService;
/**
* Billing center: order quote trial (authenticated).
@@ -76,6 +78,9 @@ public class BillingController extends BaseController
@Autowired
private IBmsBizAttachmentService bizAttachmentService;
@Autowired
private OrderBillProductCheckService orderBillProductCheckService;
/**
* Historical quote list.
*/
@@ -173,6 +178,25 @@ public class BillingController extends BaseController
return getDataTable(list);
}
/**
* Detect package sales products (as of billing end time) missing from product catalog.
*/
@PreAuthorize("@ss.hasPermi('price:orderBill:list')")
@PostMapping("/orderBill/checkProducts")
public AjaxResult checkOrderBillProducts(@RequestBody PrcOrderBill query)
{
OrderBillProductCheckResult data = orderBillProductCheckService.check(query);
return success(data);
}
/** Drill-down order bills for one product under the same check filters. */
@PreAuthorize("@ss.hasPermi('price:orderBill:list')")
@PostMapping("/orderBill/checkProducts/orders")
public AjaxResult listOrderBillsByProduct(@RequestBody PrcOrderBill query)
{
return success(orderBillProductCheckService.listOrdersByProduct(query));
}
/**
* Order no options for remote-search dropdown (bill list multi search).
*/