From b68cefd8d0a62256b37ed982ec1828ed61745bcf Mon Sep 17 00:00:00 2001 From: wuweihua <88888888> Date: Mon, 12 Oct 2026 11:05:24 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A1=E8=B4=B9?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/bms/price/domain/PrcOrderBill.java | 3 ++- .../com/bms/price/domain/vo/TmsPriceQuoteRequest.java | 2 +- .../com/bms/price/oracle/OracleOrderBillMapper.java | 2 +- .../price/service/impl/PrcBillingTaskServiceImpl.java | 4 ++-- .../price/service/impl/PrcOrderBillServiceImpl.java | 11 ++++------- .../price/service/impl/TmsPriceQuoteServiceImpl.java | 9 ++++----- bms-back/sql/bms_init.sql | 2 +- .../price/prc_order_bill_biz_date_datetime_alter.sql | 3 +++ .../views/ar/bill/components/GenerateBillDialog.vue | 10 +++++++--- bms-front/src/views/price/billing/bill.vue | 1 + .../src/views/price/billing/components/BillDetail.vue | 2 +- 11 files changed, 27 insertions(+), 22 deletions(-) create mode 100644 bms-back/sql/price/prc_order_bill_biz_date_datetime_alter.sql 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) }} From 3ef6ea78a92774ded7b65d49b151dbf76b7240ad Mon Sep 17 00:00:00 2001 From: caojia <1301869380@qq.com> Date: Mon, 12 Oct 2026 09:17:37 +0800 Subject: [PATCH 2/5] =?UTF-8?q?:bug:=20=E4=BF=AE=E6=AD=A3=E5=BA=94?= =?UTF-8?q?=E6=94=B6=E8=B4=A6=E5=8D=95=E6=94=B6=E8=B4=A7=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E4=B8=BA=E8=AE=A2=E5=8D=95=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bms/ar/service/impl/ArBillServiceImpl.java | 2 +- .../java/com/bms/price/domain/PrcOrderBill.java | 4 ++++ .../resources/mapper/price/PrcOrderBillMapper.xml | 13 +++++++++---- .../20261010_fix_ar_bill_detail_receive_time.sql | 6 ++++++ 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 bms-back/sql/20261010_fix_ar_bill_detail_receive_time.sql diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java index 35c4ea57..df7fe421 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java @@ -1159,7 +1159,7 @@ public class ArBillServiceImpl implements IArBillService { detail.setOrderNo(source.getOrderNo()); detail.setTrackingNo(source.getTrackingNo()); detail.setTransferNo(source.getTransferNo()); - detail.setReceiveTime(source.getOrderTime()); + detail.setReceiveTime(source.getPickupDate()); detail.setProductCode(source.getProductCode()); detail.setProductName(source.getProductName()); detail.setGoodsDescription(source.getOrderRemark()); 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 fa81d0a1..afcccf00 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 @@ -4,6 +4,7 @@ import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.bms.common.core.domain.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -59,6 +60,9 @@ public class PrcOrderBill extends BaseEntity private String warehouseCode; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date orderTime; + /** 应收来源查询专用:从 prc_order_bill_ext.pickup_date 读取的收件时间。 */ + @JsonIgnore + private Date pickupDate; private String orderRemark; private String productCode; private String productName; diff --git a/bms-back/bms-system/src/main/resources/mapper/price/PrcOrderBillMapper.xml b/bms-back/bms-system/src/main/resources/mapper/price/PrcOrderBillMapper.xml index 295fa7a3..21ba3077 100644 --- a/bms-back/bms-system/src/main/resources/mapper/price/PrcOrderBillMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/price/PrcOrderBillMapper.xml @@ -76,6 +76,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + select bill_id, bill_key, order_no, tracking_no, transfer_no, belong_saler, belong_saler_code, settlement_man, settlement_man_code, service_man, service_man_code, @@ -99,7 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" p.belong_saler, p.belong_saler_code, p.settlement_man, p.settlement_man_code, p.service_man, p.service_man_code, p.customer_id, p.customer_code, p.customer_name, p.pieces, p.actual_weight, p.volume, p.volume_weight, p.pkg_length, p.pkg_width, p.pkg_height, - p.shipper_name, p.consignee_name, p.dest_postcode, p.warehouse_code, p.order_time, p.order_remark, + p.shipper_name, p.consignee_name, p.dest_postcode, p.warehouse_code, p.order_time, e.pickup_date, p.order_remark, p.product_code, p.product_name, p.country_code, p.country_name, p.weight, p.biz_date, p.tms_id, p.match_source, p.match_message, p.price_set_id, p.price_set_code, p.price_set_name, p.set_type, p.bind_priority, p.customer_priceset_id, p.psv_id, p.psd_id, p.product_country_id, @@ -114,6 +118,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" p.customer_active_status, p.credit_arrears_status, p.round_mode, p.created_by, p.create_time, p.updated_by, p.update_time from prc_order_bill p + left join prc_order_bill_ext e on e.bill_id = p.bill_id + + - where p.customer_id = #{customerId} and p.biz_date <= #{cutoffDate} diff --git a/bms-back/sql/20261010_fix_ar_bill_detail_receive_time.sql b/bms-back/sql/20261010_fix_ar_bill_detail_receive_time.sql new file mode 100644 index 00000000..a7cbdfcf --- /dev/null +++ b/bms-back/sql/20261010_fix_ar_bill_detail_receive_time.sql @@ -0,0 +1,6 @@ +-- 应收账单的收货时间应取订单扩展表 pickup_date,而非订单主表 order_time。 +-- 只修正存在扩展表来源的快照;pickup_date 为空时保留 NULL,不回退到 order_time。 +UPDATE `ar_bill_detail` d +INNER JOIN `prc_order_bill_ext` e ON e.`bill_id` = d.`prc_order_bill_id` +SET d.`receive_time` = e.`pickup_date` +WHERE NOT (d.`receive_time` <=> e.`pickup_date`); From 35cbeb8adcd15d62d23c80f3000868e079170570 Mon Sep 17 00:00:00 2001 From: caojia <1301869380@qq.com> Date: Mon, 12 Oct 2026 09:48:18 +0800 Subject: [PATCH 3/5] =?UTF-8?q?:bug:=20=E5=9B=BA=E5=AE=9A=E5=BA=94?= =?UTF-8?q?=E6=94=B6=E8=B4=A6=E5=8D=95=E5=AF=BC=E5=87=BA=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E4=B8=BA=E8=BF=90=E8=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bms/ar/service/impl/ArBillServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java index df7fe421..bcf45605 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java @@ -1496,7 +1496,7 @@ public class ArBillServiceImpl implements IArBillService { detail.getDestPostcode(), decimal(detail.getActualWeight(), 3), decimal(detail.getPkgLength(), 2), decimal(detail.getPkgHeight(), 2), decimal(detail.getPkgWidth(), 2), decimal(detail.getVolumeWeight(), 3), decimal(detail.getChargeWeight(), 3), exportUnitPrice(detail), exportProcessingFee(detail), - exportFormula(detail), exportFeeTypes(detail), detail.getCurrency(), detail.getTotalAmount(), exportRemark(detail) + exportFormula(detail), exportFeeType(), detail.getCurrency(), detail.getTotalAmount(), exportRemark(detail) }; StringBuilder row = new StringBuilder(2048); row.append(""); @@ -1766,8 +1766,8 @@ public class ArBillServiceImpl implements IArBillService { return "结算重量*公斤价" + (processing ? "+处理费" : "") + (surcharge ? "+附加费" : ""); } - private String exportFeeTypes(ArBillDetail detail) { - return joinFeeText(detail.getFees(), false); + private String exportFeeType() { + return "运费"; } private String joinFeeText(List fees, boolean formula) { From 980ab1d2515278c558e3c50165d739b2a26786bb Mon Sep 17 00:00:00 2001 From: caojia <1301869380@qq.com> Date: Mon, 12 Oct 2026 10:23:55 +0800 Subject: [PATCH 4/5] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E5=BA=94?= =?UTF-8?q?=E6=94=B6=E8=B4=A6=E5=8D=95=E6=94=B6=E8=B4=A7=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E5=AF=BC=E5=87=BA=E7=B1=BB=E5=9E=8B=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bms/ar/mapper/ArBillDetailMapper.java | 3 ++ .../ar/service/impl/ArBillServiceImpl.java | 38 ++++++++++++++----- .../mapper/ar/ArBillDetailMapper.xml | 6 +++ 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBillDetailMapper.java b/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBillDetailMapper.java index 2830888e..6defde18 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBillDetailMapper.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/mapper/ArBillDetailMapper.java @@ -1,6 +1,7 @@ package com.bms.ar.mapper; import java.util.List; +import java.util.Map; import org.apache.ibatis.annotations.Param; import com.bms.ar.domain.ArBillDetail; @@ -19,6 +20,8 @@ public interface ArBillDetailMapper { List selectExportPage(@Param("arBillId") Long arBillId, @Param("lastDetailNo") Integer lastDetailNo, @Param("pageSize") Integer pageSize); + Map selectReceiveTimeRangeByBillId(@Param("arBillId") Long arBillId); + int insert(ArBillDetail detail); int insertBatch(List details); diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java index bcf45605..9edbb99f 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java @@ -12,6 +12,8 @@ import java.nio.file.StandardCopyOption; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -1319,6 +1321,7 @@ public class ArBillServiceImpl implements IArBillService { } Map templateRows = extractTemplateRows(templateXml.substring(sheetDataOpenEnd + 1, sheetDataEnd)); + Map receiveTimeRange = detailMapper.selectReceiveTimeRangeByBillId(bill.getArBillId()); String prefix = adjustExportColumnWidths( removeSheetDimension(templateXml.substring(0, sheetDataOpenEnd + 1))); writeUtf8(output, prefix); @@ -1329,7 +1332,7 @@ public class ArBillServiceImpl implements IArBillService { writeUtf8(output, templateRows.get(2)); String customerRow = replaceCellXml(templateRows.get(3), "C3", bill.getCustomerName(), false); // 账单所属期区域为 O3:T3 合并单元格,必须写入左上角 O3 才能显示。 - customerRow = replaceCellXml(customerRow, "O3", exportPeriod(bill), false); + customerRow = replaceCellXml(customerRow, "O3", exportReceiveTimeRange(receiveTimeRange), false); writeUtf8(output, customerRow); writeUtf8(output, templateRows.get(4)); @@ -1731,17 +1734,32 @@ public class ArBillServiceImpl implements IArBillService { return StringUtils.isEmpty(detail.getRemark()) ? detail.getGoodsDescription() : detail.getRemark(); } - private String exportPeriod(ArBill bill) { - Date start = bill.getBillPeriodStart(); - Date end = bill.getBillPeriodEnd(); - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); - if (start != null && end != null) { - return format.format(start) + " 至 " + format.format(end); + private String exportReceiveTimeRange(Map receiveTimeRange) { + if (receiveTimeRange == null) { + return ""; } - if (start != null) { - return format.format(start) + " 起"; + String start = formatReceiveDate(receiveTimeRange.get("minReceiveTime")); + String end = formatReceiveDate(receiveTimeRange.get("maxReceiveTime")); + return StringUtils.isEmpty(start) || StringUtils.isEmpty(end) ? "" : start + " 至 " + end; + } + + private String formatReceiveDate(Object value) { + if (value instanceof LocalDateTime) { + return ((LocalDateTime) value).toLocalDate().toString(); } - return end == null ? "" : "截至 " + format.format(end); + if (value instanceof LocalDate) { + return value.toString(); + } + if (value instanceof java.sql.Date) { + return ((java.sql.Date) value).toLocalDate().toString(); + } + if (value instanceof Date) { + return new SimpleDateFormat("yyyy-MM-dd").format((Date) value); + } + if (value == null) { + return ""; + } + throw new IllegalArgumentException("不支持的收货时间类型: " + value.getClass().getName()); } private BigDecimal exportUnitPrice(ArBillDetail detail) { diff --git a/bms-back/bms-system/src/main/resources/mapper/ar/ArBillDetailMapper.xml b/bms-back/bms-system/src/main/resources/mapper/ar/ArBillDetailMapper.xml index 64509270..63962f7f 100644 --- a/bms-back/bms-system/src/main/resources/mapper/ar/ArBillDetailMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/ar/ArBillDetailMapper.xml @@ -112,6 +112,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" limit #{pageSize} + + insert into ar_bill_detail (ar_bill_id, prc_order_bill_id, detail_no, order_no, tracking_no, transfer_no, receive_time, product_code, From 68426dc615af684bc3491bf21ce712bff2dcf8d2 Mon Sep 17 00:00:00 2001 From: caojia <1301869380@qq.com> Date: Mon, 12 Oct 2026 11:26:59 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=9B=B4=E6=94=B9=20=E6=94=B6=E8=B4=A7?= =?UTF-8?q?=E5=AE=9E=E9=87=8D=EF=BC=88kg)=20=E5=AD=97=E6=AE=B5=E5=8F=96?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bms/ar/domain/ArBillDetail.java | 2 ++ .../ar/service/impl/ArBillServiceImpl.java | 3 ++- .../mapper/ar/ArBillDetailMapper.xml | 17 ++++++++------- ...2_add_ar_bill_detail_weight_from_order.sql | 21 +++++++++++++++++++ bms-back/sql/bms_init.sql | 1 + 5 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 bms-back/sql/20261012_add_ar_bill_detail_weight_from_order.sql diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/domain/ArBillDetail.java b/bms-back/bms-system/src/main/java/com/bms/ar/domain/ArBillDetail.java index eb3aa8b2..0243cf59 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/domain/ArBillDetail.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/domain/ArBillDetail.java @@ -32,6 +32,8 @@ public class ArBillDetail implements Serializable { private String countryName; private String destPostcode; private BigDecimal actualWeight; + /** prc_order_bill.weight 来源快照。 */ + private BigDecimal weight; private BigDecimal volumeWeight; private BigDecimal chargeWeight; /** 订单计费时命中的运费单价快照,对应 prc_order_bill.freight_rate。 */ diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java index 9edbb99f..38dd8b1b 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java @@ -1169,6 +1169,7 @@ public class ArBillServiceImpl implements IArBillService { detail.setCountryName(source.getCountryName()); detail.setDestPostcode(source.getDestPostcode()); detail.setActualWeight(source.getActualWeight()); + detail.setWeight(source.getWeight()); detail.setVolumeWeight(source.getVolumeWeight()); detail.setChargeWeight(source.getChargeWeight() == null ? source.getWeight() : source.getChargeWeight()); detail.setFreightRate(source.getFreightRate()); @@ -1496,7 +1497,7 @@ public class ArBillServiceImpl implements IArBillService { detail.getOrderNo(), detail.getTrackingNo(), StringUtils.isEmpty(detail.getProductName()) ? detail.getProductCode() : detail.getProductName(), StringUtils.isEmpty(detail.getCountryName()) ? detail.getCountryCode() : detail.getCountryName(), - detail.getDestPostcode(), decimal(detail.getActualWeight(), 3), decimal(detail.getPkgLength(), 2), + detail.getDestPostcode(), decimal(detail.getWeight(), 3), decimal(detail.getPkgLength(), 2), decimal(detail.getPkgHeight(), 2), decimal(detail.getPkgWidth(), 2), decimal(detail.getVolumeWeight(), 3), decimal(detail.getChargeWeight(), 3), exportUnitPrice(detail), exportProcessingFee(detail), exportFormula(detail), exportFeeType(), detail.getCurrency(), detail.getTotalAmount(), exportRemark(detail) diff --git a/bms-back/bms-system/src/main/resources/mapper/ar/ArBillDetailMapper.xml b/bms-back/bms-system/src/main/resources/mapper/ar/ArBillDetailMapper.xml index 63962f7f..8f107e72 100644 --- a/bms-back/bms-system/src/main/resources/mapper/ar/ArBillDetailMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/ar/ArBillDetailMapper.xml @@ -20,6 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -39,7 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -47,7 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select d.detail_id, d.ar_bill_id, d.prc_order_bill_id, d.detail_no, d.order_no, d.tracking_no, d.transfer_no, d.receive_time, d.product_code, d.product_name, d.goods_description, d.country_code, d.country_name, d.dest_postcode, - d.actual_weight, d.volume_weight, d.charge_weight, d.freight_rate, d.registration_fee, d.pkg_length, d.pkg_width, d.pkg_height, + d.actual_weight, d.weight, d.volume_weight, d.charge_weight, d.freight_rate, d.registration_fee, d.pkg_length, d.pkg_width, d.pkg_height, d.currency, d.total_amount, d.product_amount, d.redline_amount, d.remark, d.create_by, d.create_time, f.detail_fee_id as fee_detail_id, f.detail_id as fee_parent_detail_id, f.prc_income_bill_fee_id as fee_prc_income_bill_fee_id, @@ -104,7 +105,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"