From 2d002e7291557d2cb3061c964827dfc24b8b26a8 Mon Sep 17 00:00:00 2001 From: wuweihua <88888888> Date: Tue, 29 Sep 2026 11:58:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BF=AE=E6=94=B9=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E9=87=8D=E6=96=B0=E5=90=8C=E6=AD=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitor/BillingTaskMonitorController.java | 29 ++ .../price/domain/PrcBillingTaskRetryTask.java | 114 +++++++ .../vo/BillingTaskRetryByFilterRequest.java | 25 ++ .../price/mapper/PrcBillingTaskMapper.java | 13 + .../price/service/IPrcBillingTaskService.java | 10 + .../impl/PrcBillingTaskServiceImpl.java | 51 +++ .../task/PrcBillingTaskRetryAsyncRunner.java | 169 ++++++++++ .../mapper/price/PrcBillingTaskMapper.xml | 41 +++ bms-front/src/api/monitor/billingTask.js | 16 + .../components/BillingTaskDetailDrawer.vue | 131 ++++++++ .../BillingTaskFilterRetryDialog.vue | 313 ++++++++++++++++++ .../components/billingTaskOptions.js | 52 +++ .../src/views/monitor/billingTask/index.vue | 301 ++++++++--------- 13 files changed, 1098 insertions(+), 167 deletions(-) create mode 100644 bms-back/bms-system/src/main/java/com/bms/price/domain/PrcBillingTaskRetryTask.java create mode 100644 bms-back/bms-system/src/main/java/com/bms/price/domain/vo/BillingTaskRetryByFilterRequest.java create mode 100644 bms-back/bms-system/src/main/java/com/bms/price/task/PrcBillingTaskRetryAsyncRunner.java create mode 100644 bms-front/src/views/monitor/billingTask/components/BillingTaskDetailDrawer.vue create mode 100644 bms-front/src/views/monitor/billingTask/components/BillingTaskFilterRetryDialog.vue create mode 100644 bms-front/src/views/monitor/billingTask/components/billingTaskOptions.js diff --git a/bms-back/bms-admin/src/main/java/com/bms/web/controller/monitor/BillingTaskMonitorController.java b/bms-back/bms-admin/src/main/java/com/bms/web/controller/monitor/BillingTaskMonitorController.java index d00803ea..d6ae0320 100644 --- a/bms-back/bms-admin/src/main/java/com/bms/web/controller/monitor/BillingTaskMonitorController.java +++ b/bms-back/bms-admin/src/main/java/com/bms/web/controller/monitor/BillingTaskMonitorController.java @@ -18,6 +18,8 @@ import com.bms.common.core.domain.AjaxResult; import com.bms.common.core.page.TableDataInfo; import com.bms.common.enums.BusinessType; import com.bms.price.domain.PrcBillingTask; +import com.bms.price.domain.PrcBillingTaskRetryTask; +import com.bms.price.domain.vo.BillingTaskRetryByFilterRequest; import com.bms.price.enums.BillTaskSuccessStatus; import com.bms.price.service.IPrcBillingTaskService; @@ -112,4 +114,31 @@ public class BillingTaskMonitorController extends BaseController data.put("details", details); return success(data); } + + /** + * Async resync by customer + bill_time (batched ID pages to avoid OOM). + * Returns asyncTaskId; poll {@code GET /retryTask/{asyncTaskId}}. + */ + @PreAuthorize("@ss.hasPermi('monitor:billingTask:retry')") + @Log(title = "billing task filter retry", businessType = BusinessType.UPDATE) + @PostMapping("/retryByFilter") + public AjaxResult retryByFilter(@RequestBody BillingTaskRetryByFilterRequest request) + { + String asyncTaskId = billingTaskService.startRetryByFilter(request); + Map data = new HashMap(); + data.put("asyncTaskId", asyncTaskId); + return success(data); + } + + @PreAuthorize("@ss.hasPermi('monitor:billingTask:retry') or @ss.hasPermi('monitor:billingTask:list')") + @GetMapping("/retryTask/{asyncTaskId}") + public AjaxResult retryTaskProgress(@PathVariable("asyncTaskId") String asyncTaskId) + { + PrcBillingTaskRetryTask task = billingTaskService.getRetryByFilterTask(asyncTaskId); + if (task == null) + { + return error("retry task not found or expired"); + } + return success(task); + } } diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcBillingTaskRetryTask.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcBillingTaskRetryTask.java new file mode 100644 index 00000000..71312725 --- /dev/null +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcBillingTaskRetryTask.java @@ -0,0 +1,114 @@ +package com.bms.price.domain; + +import java.io.Serializable; + +/** Async filter-retry progress for billing tasks (Redis). */ +public class PrcBillingTaskRetryTask implements Serializable +{ + private static final long serialVersionUID = 1L; + + public static final String STATUS_PENDING = "PENDING"; + public static final String STATUS_RUNNING = "RUNNING"; + public static final String STATUS_SUCCESS = "SUCCESS"; + public static final String STATUS_FAIL = "FAIL"; + + private String taskId; + private String status; + private int percent; + private String message; + private int total; + private int processed; + private int ok; + private int fail; + private String error; + + public String getTaskId() + { + return taskId; + } + + public void setTaskId(String taskId) + { + this.taskId = taskId; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public int getPercent() + { + return percent; + } + + public void setPercent(int percent) + { + this.percent = percent; + } + + public String getMessage() + { + return message; + } + + public void setMessage(String message) + { + this.message = message; + } + + public int getTotal() + { + return total; + } + + public void setTotal(int total) + { + this.total = total; + } + + public int getProcessed() + { + return processed; + } + + public void setProcessed(int processed) + { + this.processed = processed; + } + + public int getOk() + { + return ok; + } + + public void setOk(int ok) + { + this.ok = ok; + } + + public int getFail() + { + return fail; + } + + public void setFail(int fail) + { + this.fail = fail; + } + + public String getError() + { + return error; + } + + public void setError(String error) + { + this.error = error; + } +} diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/BillingTaskRetryByFilterRequest.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/BillingTaskRetryByFilterRequest.java new file mode 100644 index 00000000..ce038558 --- /dev/null +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/BillingTaskRetryByFilterRequest.java @@ -0,0 +1,25 @@ +package com.bms.price.domain.vo; + +import java.io.Serializable; +import lombok.Data; + +/** + * Filter for async batch retry of billing tasks. + * Require customerCode + billTime range to avoid full-table resync. + */ +@Data +public class BillingTaskRetryByFilterRequest implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** Customer code (exact match) */ + private String customerCode; + /** Bill time start yyyy-MM-dd */ + private String beginTime; + /** Bill time end yyyy-MM-dd */ + private String endTime; + /** Optional: FAILED / WAITING / SUCCESS / ALL; default ALL */ + private String successStatus; + /** Optional batch size; server clamps to 20~200, default 50 */ + private Integer batchSize; +} diff --git a/bms-back/bms-system/src/main/java/com/bms/price/mapper/PrcBillingTaskMapper.java b/bms-back/bms-system/src/main/java/com/bms/price/mapper/PrcBillingTaskMapper.java index 140cc161..7fbb8714 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/mapper/PrcBillingTaskMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/mapper/PrcBillingTaskMapper.java @@ -1,6 +1,7 @@ package com.bms.price.mapper; import java.util.List; +import org.apache.ibatis.annotations.Param; import com.bms.price.domain.PrcBillingTask; public interface PrcBillingTaskMapper @@ -15,4 +16,16 @@ public interface PrcBillingTaskMapper /** CAS: WAITING -> processing claim not needed; writeback SUCCESS/FAILED */ int updateBillingResult(PrcBillingTask task); + + /** Count tasks for filter retry (customer + bill_time window). */ + int countTaskIdsByFilter(PrcBillingTask query); + + /** + * Keyset page of task ids only (asc) to avoid loading full rows into memory. + * lastTaskId exclusive lower bound; pass 0 for first page. + */ + List selectTaskIdsByFilter( + @Param("query") PrcBillingTask query, + @Param("lastTaskId") Long lastTaskId, + @Param("limit") int limit); } diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/IPrcBillingTaskService.java b/bms-back/bms-system/src/main/java/com/bms/price/service/IPrcBillingTaskService.java index 985613e3..529cf19e 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/IPrcBillingTaskService.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/IPrcBillingTaskService.java @@ -2,6 +2,8 @@ package com.bms.price.service; import java.util.List; import com.bms.price.domain.PrcBillingTask; +import com.bms.price.domain.PrcBillingTaskRetryTask; +import com.bms.price.domain.vo.BillingTaskRetryByFilterRequest; import com.bms.price.domain.vo.BillingTaskSubmitRequest; public interface IPrcBillingTaskService @@ -22,4 +24,12 @@ public interface IPrcBillingTaskService * @return task after retry */ PrcBillingTask retryTask(Long taskId); + + /** + * Start async filter retry (customer + bill_time). Returns async task id for progress poll. + */ + String startRetryByFilter(BillingTaskRetryByFilterRequest request); + + /** Poll async filter-retry progress. */ + PrcBillingTaskRetryTask getRetryByFilterTask(String asyncTaskId); } diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcBillingTaskServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcBillingTaskServiceImpl.java index 5586e05c..871a3cc1 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcBillingTaskServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcBillingTaskServiceImpl.java @@ -4,6 +4,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,7 +14,9 @@ import com.bms.common.exception.ServiceException; import com.bms.common.utils.StringUtils; import com.bms.price.config.BillingProperties; import com.bms.price.domain.PrcBillingTask; +import com.bms.price.domain.PrcBillingTaskRetryTask; import com.bms.price.domain.PrcOrderBill; +import com.bms.price.domain.vo.BillingTaskRetryByFilterRequest; import com.bms.price.domain.vo.BillingTaskSubmitRequest; import com.bms.price.domain.vo.TmsPriceBillRequest; import com.bms.price.domain.vo.TmsPriceQuoteResult; @@ -28,6 +31,7 @@ import com.bms.price.oracle.OracleOrderBillMapper; import com.bms.price.oracle.OracleUpstreamOrderService; import com.bms.price.service.IPrcBillingTaskService; import com.bms.price.service.IPrcOrderBillService; +import com.bms.price.task.PrcBillingTaskRetryAsyncRunner; @Service public class PrcBillingTaskServiceImpl implements IPrcBillingTaskService @@ -55,6 +59,9 @@ public class PrcBillingTaskServiceImpl implements IPrcBillingTaskService @Autowired private BillingProperties billingProperties; + @Autowired + private PrcBillingTaskRetryAsyncRunner retryAsyncRunner; + @Override @Transactional(rollbackFor = Exception.class) public PrcBillingTask submitInbound(BillingTaskSubmitRequest request) @@ -359,6 +366,50 @@ public class PrcBillingTaskServiceImpl implements IPrcBillingTaskService return billingTaskMapper.selectPrcBillingTaskById(taskId); } + @Override + public String startRetryByFilter(BillingTaskRetryByFilterRequest request) + { + if (request == null) + { + throw new ServiceException("request required"); + } + String customerCode = trim(request.getCustomerCode()); + String beginTime = trim(request.getBeginTime()); + String endTime = trim(request.getEndTime()); + if (StringUtils.isEmpty(customerCode)) + { + throw new ServiceException("customerCode required"); + } + if (StringUtils.isEmpty(beginTime) || StringUtils.isEmpty(endTime)) + { + throw new ServiceException("beginTime and endTime required"); + } + PrcBillingTask query = new PrcBillingTask(); + query.setCustomerCode(customerCode); + query.setParams(PrcBillingTaskRetryAsyncRunner.timeParams(beginTime, endTime)); + String status = trim(request.getSuccessStatus()); + if (StringUtils.isNotEmpty(status) && !"ALL".equalsIgnoreCase(status)) + { + query.setSuccessStatus(status); + } + String asyncTaskId = UUID.randomUUID().toString().replace("-", ""); + retryAsyncRunner.put(asyncTaskId, PrcBillingTaskRetryTask.STATUS_PENDING, 0, "queued", + 0, 0, 0, 0, null); + retryAsyncRunner.run(asyncTaskId, query, + PrcBillingTaskRetryAsyncRunner.clampBatch(request.getBatchSize())); + return asyncTaskId; + } + + @Override + public PrcBillingTaskRetryTask getRetryByFilterTask(String asyncTaskId) + { + if (StringUtils.isEmpty(asyncTaskId)) + { + return null; + } + return retryAsyncRunner.get(asyncTaskId.trim()); + } + private BillTaskType resolveAutoType(String transferNo, String trackingNo, String orderNo) { PrcOrderBill existed = null; diff --git a/bms-back/bms-system/src/main/java/com/bms/price/task/PrcBillingTaskRetryAsyncRunner.java b/bms-back/bms-system/src/main/java/com/bms/price/task/PrcBillingTaskRetryAsyncRunner.java new file mode 100644 index 00000000..0b5f3152 --- /dev/null +++ b/bms-back/bms-system/src/main/java/com/bms/price/task/PrcBillingTaskRetryAsyncRunner.java @@ -0,0 +1,169 @@ +package com.bms.price.task; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import com.bms.common.core.redis.RedisCache; +import com.bms.common.utils.StringUtils; +import com.bms.price.domain.PrcBillingTask; +import com.bms.price.domain.PrcBillingTaskRetryTask; +import com.bms.price.enums.BillTaskSuccessStatus; +import com.bms.price.mapper.PrcBillingTaskMapper; +import com.bms.price.service.IPrcBillingTaskService; + +/** + * Async filter-based billing task retry: keyset-page IDs then retry one-by-one. + */ +@Component +public class PrcBillingTaskRetryAsyncRunner +{ + private static final Logger log = LoggerFactory.getLogger(PrcBillingTaskRetryAsyncRunner.class); + + public static final String CACHE_KEY_PREFIX = "billing:task:retry:"; + public static final int TTL_MINUTES = 120; + public static final int DEFAULT_BATCH = 50; + public static final int MIN_BATCH = 20; + public static final int MAX_BATCH = 200; + + @Autowired + private PrcBillingTaskMapper billingTaskMapper; + + @Autowired + @Lazy + private IPrcBillingTaskService billingTaskService; + + @Autowired + private RedisCache redisCache; + + @Async("threadPoolTaskExecutor") + public void run(String asyncTaskId, PrcBillingTask query, int batchSize) + { + int batch = clampBatch(batchSize); + try + { + int total = billingTaskMapper.countTaskIdsByFilter(query); + put(asyncTaskId, PrcBillingTaskRetryTask.STATUS_RUNNING, 0, "starting", total, 0, 0, 0, null); + if (total <= 0) + { + put(asyncTaskId, PrcBillingTaskRetryTask.STATUS_SUCCESS, 100, "no tasks", 0, 0, 0, 0, null); + return; + } + long lastTaskId = 0L; + int processed = 0; + int ok = 0; + int fail = 0; + while (true) + { + List ids = billingTaskMapper.selectTaskIdsByFilter(query, Long.valueOf(lastTaskId), batch); + if (ids == null || ids.isEmpty()) + { + break; + } + for (Long taskId : ids) + { + if (taskId == null) + { + continue; + } + lastTaskId = taskId.longValue(); + try + { + PrcBillingTask task = billingTaskService.retryTask(taskId); + if (task != null && BillTaskSuccessStatus.SUCCESS.getCode().equals(task.getSuccessStatus())) + { + ok++; + } + else + { + fail++; + } + } + catch (RuntimeException e) + { + fail++; + log.warn("filter retry failed taskId={} msg={}", taskId, e.getMessage()); + } + processed++; + int percent = Math.min(99, (int) ((processed * 100L) / Math.max(1, total))); + put(asyncTaskId, PrcBillingTaskRetryTask.STATUS_RUNNING, percent, + "processing " + processed + "/" + total, total, processed, ok, fail, null); + } + if (ids.size() < batch) + { + break; + } + } + put(asyncTaskId, PrcBillingTaskRetryTask.STATUS_SUCCESS, 100, + "done ok=" + ok + " fail=" + fail, total, processed, ok, fail, null); + log.info("billing filter retry done asyncTaskId={} total={} ok={} fail={}", + asyncTaskId, total, ok, fail); + } + catch (Exception e) + { + log.error("billing filter retry failed asyncTaskId={}", asyncTaskId, e); + String msg = e.getMessage(); + if (StringUtils.isEmpty(msg)) + { + msg = e.getClass().getSimpleName(); + } + put(asyncTaskId, PrcBillingTaskRetryTask.STATUS_FAIL, 100, "failed", 0, 0, 0, 0, msg); + } + } + + public void put(String taskId, String status, int percent, String message, + int total, int processed, int ok, int fail, String error) + { + PrcBillingTaskRetryTask task = new PrcBillingTaskRetryTask(); + task.setTaskId(taskId); + task.setStatus(status); + task.setPercent(percent); + task.setMessage(message); + task.setTotal(total); + task.setProcessed(processed); + task.setOk(ok); + task.setFail(fail); + task.setError(error); + redisCache.setCacheObject(CACHE_KEY_PREFIX + taskId, task, TTL_MINUTES, TimeUnit.MINUTES); + } + + public PrcBillingTaskRetryTask get(String taskId) + { + return redisCache.getCacheObject(CACHE_KEY_PREFIX + taskId); + } + + public static int clampBatch(Integer batchSize) + { + int n = batchSize == null ? DEFAULT_BATCH : batchSize.intValue(); + if (n < MIN_BATCH) + { + return MIN_BATCH; + } + if (n > MAX_BATCH) + { + return MAX_BATCH; + } + return n; + } + + /** Build MyBatis query params map for begin/end time. */ + public static Map timeParams(String beginTime, String endTime) + { + Map params = new HashMap(); + if (StringUtils.isNotEmpty(beginTime)) + { + params.put("beginTime", beginTime.trim()); + } + if (StringUtils.isNotEmpty(endTime)) + { + params.put("endTime", endTime.trim()); + } + return params; + } +} diff --git a/bms-back/bms-system/src/main/resources/mapper/price/PrcBillingTaskMapper.xml b/bms-back/bms-system/src/main/resources/mapper/price/PrcBillingTaskMapper.xml index 08f9474d..4b673985 100644 --- a/bms-back/bms-system/src/main/resources/mapper/price/PrcBillingTaskMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/price/PrcBillingTaskMapper.xml @@ -67,6 +67,47 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by task_id desc + + + + insert into prc_billing_task ( transfer_no, tracking_no, order_no, customer_code, bill_type, success_status, diff --git a/bms-front/src/api/monitor/billingTask.js b/bms-front/src/api/monitor/billingTask.js index c71d4aa1..c906e41c 100644 --- a/bms-front/src/api/monitor/billingTask.js +++ b/bms-front/src/api/monitor/billingTask.js @@ -29,3 +29,19 @@ export function retryBillingTaskBatch(taskIds) { data: taskIds }) } + +/** Async retry by customerCode + billTime range */ +export function retryBillingTaskByFilter(data) { + return request({ + url: '/monitor/billingTask/retryByFilter', + method: 'post', + data + }) +} + +export function getBillingTaskRetryProgress(asyncTaskId) { + return request({ + url: '/monitor/billingTask/retryTask/' + asyncTaskId, + method: 'get' + }) +} diff --git a/bms-front/src/views/monitor/billingTask/components/BillingTaskDetailDrawer.vue b/bms-front/src/views/monitor/billingTask/components/BillingTaskDetailDrawer.vue new file mode 100644 index 00000000..0b5a6495 --- /dev/null +++ b/bms-front/src/views/monitor/billingTask/components/BillingTaskDetailDrawer.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/bms-front/src/views/monitor/billingTask/components/BillingTaskFilterRetryDialog.vue b/bms-front/src/views/monitor/billingTask/components/BillingTaskFilterRetryDialog.vue new file mode 100644 index 00000000..f9380ba4 --- /dev/null +++ b/bms-front/src/views/monitor/billingTask/components/BillingTaskFilterRetryDialog.vue @@ -0,0 +1,313 @@ + + + + + diff --git a/bms-front/src/views/monitor/billingTask/components/billingTaskOptions.js b/bms-front/src/views/monitor/billingTask/components/billingTaskOptions.js new file mode 100644 index 00000000..4884f27e --- /dev/null +++ b/bms-front/src/views/monitor/billingTask/components/billingTaskOptions.js @@ -0,0 +1,52 @@ +/** Shared labels/options for billing task monitor */ +export const statusOptions = [ + { label: '失败', value: 'FAILED' }, + { label: '待处理', value: 'WAITING' }, + { label: '成功', value: 'SUCCESS' }, + { label: '全部', value: 'ALL' } +] + +export const billTypeOptions = [ + { label: '待计费', value: 'PENDING' }, + { label: '重计费', value: 'REBILL' }, + { label: '退费', value: 'REFUND' } +] + +export const failCodeOptions = [ + { label: 'NO_CUSTOMER_PACKAGE', value: 'NO_CUSTOMER_PACKAGE' }, + { label: 'NO_ACTIVE_PACKAGE_VERSION', value: 'NO_ACTIVE_PACKAGE_VERSION' }, + { label: 'ALREADY_IN_AR_BILL', value: 'ALREADY_IN_AR_BILL' }, + { label: 'PRODUCT_ARCHIVE_MISSING', value: 'PRODUCT_ARCHIVE_MISSING' }, + { label: 'PRICE_NOT_HIT', value: 'PRICE_NOT_HIT' }, + { label: 'ZONE_PRICE_NOT_HIT', value: 'ZONE_PRICE_NOT_HIT' }, + { label: 'POSTCODE_REQUIRED', value: 'POSTCODE_REQUIRED' }, + { label: 'POSTCODE_ZONE_NOT_FOUND', value: 'POSTCODE_ZONE_NOT_FOUND' }, + { label: 'ORACLE_ORDER_NOT_FOUND', value: 'ORACLE_ORDER_NOT_FOUND' }, + { label: 'ORACLE_ORDERNO_EMPTY', value: 'ORACLE_ORDERNO_EMPTY' }, + { label: 'ORACLE_CUSTOMER_EMPTY', value: 'ORACLE_CUSTOMER_EMPTY' }, + { label: 'ORACLE_PRODUCT_EMPTY', value: 'ORACLE_PRODUCT_EMPTY' }, + { label: 'ORACLE_WEIGHT_INVALID', value: 'ORACLE_WEIGHT_INVALID' }, + { label: 'BILL_TIME_EMPTY', value: 'BILL_TIME_EMPTY' }, + { label: 'REFUND_ORDER_UNRESOLVED', value: 'REFUND_ORDER_UNRESOLVED' }, + { label: 'CUSTOMER_CODE_REQUIRED', value: 'CUSTOMER_CODE_REQUIRED' }, + { label: 'CUSTOMER_DISABLED', value: 'CUSTOMER_DISABLED' }, + { label: 'FREIGHT_MISSING', value: 'FREIGHT_MISSING' }, + { label: 'UNKNOWN', value: 'UNKNOWN' } +] + +export function billTypeLabel(type) { + const found = billTypeOptions.find(item => item.value === type) + return found ? found.label : (type || '-') +} + +export function statusLabel(status) { + const found = statusOptions.find(item => item.value === status) + return found ? found.label : (status || '-') +} + +export function statusTag(status) { + if (status === 'SUCCESS') return 'success' + if (status === 'FAILED') return 'danger' + if (status === 'WAITING') return 'warning' + return 'info' +} diff --git a/bms-front/src/views/monitor/billingTask/index.vue b/bms-front/src/views/monitor/billingTask/index.vue index e8781c87..524080b6 100644 --- a/bms-front/src/views/monitor/billingTask/index.vue +++ b/bms-front/src/views/monitor/billingTask/index.vue @@ -1,5 +1,19 @@