diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcOrderBill.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcOrderBill.java index d0d6d445..fa81d0a1 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcOrderBill.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/PrcOrderBill.java @@ -67,7 +67,8 @@ public class PrcOrderBill extends BaseEntity private String countryCode; private String countryName; private BigDecimal weight; - @JsonFormat(pattern = "yyyy-MM-dd") + /** 计费时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date bizDate; private Long tmsId; diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/TmsPriceQuoteRequest.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/TmsPriceQuoteRequest.java index 9ac09599..ecb9e9d6 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/TmsPriceQuoteRequest.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/TmsPriceQuoteRequest.java @@ -32,7 +32,7 @@ public class TmsPriceQuoteRequest implements Serializable @NotNull(message = "weight is required") private BigDecimal weight; - /** yyyy-MM-dd,默认今天 */ + /** yyyy-MM-dd or yyyy-MM-dd HH:mm:ss; quote defaults today; bill required */ private String bizDate; private Integer tmsId; /** Header X-Api-Code 优先;Body 兜底 */ diff --git a/bms-back/bms-system/src/main/java/com/bms/price/oracle/OracleOrderBillMapper.java b/bms-back/bms-system/src/main/java/com/bms/price/oracle/OracleOrderBillMapper.java index 4d8f93ea..62153648 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/oracle/OracleOrderBillMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/oracle/OracleOrderBillMapper.java @@ -62,7 +62,7 @@ public class OracleOrderBillMapper req.setConsigneeName(firstStr(row, "CONSIGNEE_NAME")); req.setWarehouseCode(firstStr(row, "REGISTER_SITE_CODE")); req.setOrderRemark(firstStr(row, "TRACK_REMARK", "EXCEPTION_REMARK", "ORDER_CUSTOMNOTE")); - // CREATE_DATE is order place time only; bizDate (billing date) comes from mobile inbound task. + // CREATE_DATE is order place time only; bizDate (billing datetime) comes from task.bill_time. Date createDate = firstDate(row, "CREATE_DATE"); if (createDate != null) { 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 871a3cc1..7cf85c6b 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 @@ -182,8 +182,8 @@ public class PrcBillingTaskServiceImpl implements IPrcBillingTaskService { billReq.setOrderNo(task.getOrderNo()); } - // Billing date from task.bill_time (mobile), not Oracle CREATE_DATE. - billReq.setBizDate(new SimpleDateFormat("yyyy-MM-dd").format(task.getBillTime())); + // Billing datetime from task.bill_time (keep HH:mm:ss), not Oracle CREATE_DATE. + billReq.setBizDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(task.getBillTime())); task.setCustomerCode(billReq.getCustomerCode()); TmsPriceQuoteResult result = billWithDbRetry(taskId, billReq); diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java index 7247c782..1210ad3d 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java @@ -2,8 +2,6 @@ package com.bms.price.service.impl; import java.math.BigDecimal; import java.math.RoundingMode; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Arrays; @@ -27,6 +25,7 @@ import com.bms.ar.enums.ArOrderBillStatus; import com.bms.common.annotation.DataScope; import com.bms.common.core.domain.entity.SysUser; import com.bms.common.exception.ServiceException; +import com.bms.common.utils.DateUtils; import com.bms.common.utils.DictUtils; import com.bms.common.utils.MessageUtils; import com.bms.common.utils.SecurityUtils; @@ -1709,13 +1708,11 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService { throw new ServiceException(MessageUtils.message("price.bill.bizDateRequired")); } - try - { - return new SimpleDateFormat("yyyy-MM-dd").parse(bizDate.trim()); - } - catch (ParseException e) + Date parsed = DateUtils.parseDate(bizDate.trim()); + if (parsed == null) { throw new ServiceException(MessageUtils.message("price.quote.bizDateInvalid")); } + return parsed; } } diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/TmsPriceQuoteServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/TmsPriceQuoteServiceImpl.java index cf137a33..5daaee76 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/TmsPriceQuoteServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/TmsPriceQuoteServiceImpl.java @@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.bms.common.exception.ServiceException; +import com.bms.common.utils.DateUtils; import com.bms.common.utils.MessageUtils; import com.bms.common.utils.StringUtils; import com.bms.common.utils.sign.Md5Utils; @@ -1630,14 +1631,12 @@ public class TmsPriceQuoteServiceImpl implements ITmsPriceQuoteService return new Date(); } } - try - { - return new SimpleDateFormat("yyyy-MM-dd").parse(bizDate.trim()); - } - catch (ParseException e) + Date parsed = DateUtils.parseDate(bizDate.trim()); + if (parsed == null) { throw new ServiceException(MessageUtils.message("price.quote.bizDateInvalid")); } + return parsed; } /** Use end of bill day so same-day version activate still matches that day's quote. */ diff --git a/bms-back/sql/bms_init.sql b/bms-back/sql/bms_init.sql index 2d3b66db..868498f9 100644 --- a/bms-back/sql/bms_init.sql +++ b/bms-back/sql/bms_init.sql @@ -1019,7 +1019,7 @@ CREATE TABLE `prc_order_bill` ( `country_code` char(2) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国家二字码', `country_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '国家名称', `weight` decimal(10,3) NOT NULL COMMENT '计费重量KG', - `biz_date` date NOT NULL COMMENT '计费日期', + `biz_date` datetime NOT NULL COMMENT '计费时间', `tms_id` bigint(20) DEFAULT NULL COMMENT '多租户系统ID', `match_source` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '命中来源', `match_message` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '命中说明', diff --git a/bms-back/sql/price/prc_order_bill_biz_date_datetime_alter.sql b/bms-back/sql/price/prc_order_bill_biz_date_datetime_alter.sql new file mode 100644 index 00000000..efae0c12 --- /dev/null +++ b/bms-back/sql/price/prc_order_bill_biz_date_datetime_alter.sql @@ -0,0 +1,3 @@ +-- prc_order_bill.biz_date: date -> datetime (keep hour/minute/second) +ALTER TABLE prc_order_bill + MODIFY COLUMN `biz_date` datetime NOT NULL COMMENT '计费时间'; diff --git a/bms-front/src/views/ar/bill/components/GenerateBillDialog.vue b/bms-front/src/views/ar/bill/components/GenerateBillDialog.vue index b012766d..5436b33e 100644 --- a/bms-front/src/views/ar/bill/components/GenerateBillDialog.vue +++ b/bms-front/src/views/ar/bill/components/GenerateBillDialog.vue @@ -69,7 +69,7 @@ - + @@ -107,7 +107,7 @@ - + @@ -533,7 +533,11 @@ function confirmGenerate() { }) } -function date(value) { return value ? String(value).slice(0, 10) : '-' } +function date(value) { + if (!value) return '-' + const s = String(value).replace('T', ' ') + return s.length >= 19 ? s.slice(0, 19) : (s.length >= 10 ? s.slice(0, 10) : s) +} function money(value) { const num = Number(value); return Number.isNaN(num) ? '-' : num.toFixed(2) } function formatDateColumn(_, __, value) { return date(value) } function formatNumberColumn(_, __, value) { return Number(value || 0).toFixed(2) } diff --git a/bms-front/src/views/price/billing/bill.vue b/bms-front/src/views/price/billing/bill.vue index ebc51ed0..f2d421ce 100644 --- a/bms-front/src/views/price/billing/bill.vue +++ b/bms-front/src/views/price/billing/bill.vue @@ -152,6 +152,7 @@ const columns = [ { label: '计价来源', prop: 'matchSource', align: 'center', width: 130, slot: 'matchSource' }, { label: '客户状态', prop: 'customerActiveStatus', align: 'center', width: 100, slot: 'customerActiveStatus' }, { label: '额度欠费', prop: 'creditArrearsStatus', align: 'center', width: 100, slot: 'creditArrearsStatus' }, + { label: '计费时间', prop: 'bizDate', align: 'center', width: 170, parseTime: true }, { label: '下单时间', prop: 'orderTime', align: 'center', width: 170, parseTime: true }, { label: '销售员', prop: 'belongSaler', minWidth: 100, showOverflowTooltip: true }, { label: '结算员', prop: 'settlementMan', minWidth: 100, showOverflowTooltip: true }, diff --git a/bms-front/src/views/price/billing/components/BillDetail.vue b/bms-front/src/views/price/billing/components/BillDetail.vue index 3a2bebe5..3ccae030 100644 --- a/bms-front/src/views/price/billing/components/BillDetail.vue +++ b/bms-front/src/views/price/billing/components/BillDetail.vue @@ -66,7 +66,7 @@ {{ productLabel(detail) }} {{ formatWeight(detail.chargeWeight ?? detail.weight) }} {{ detail.weightLabel || '-' }} - {{ detail.bizDate || '-' }} + {{ detail.bizDate || '-' }} {{ sourceLabel(detail.matchSource) }}