From e6a9fcf0a2c584564aeaf303123ac399a4f07374 Mon Sep 17 00:00:00 2001 From: wuweihua <88888888> Date: Tue, 10 Nov 2026 14:38:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/price/SurchargeController.java | 3 +- .../com/bms/price/domain/PaySurcharge.java | 3 + .../com/bms/price/pay/PayWorkbookParser.java | 32 ++ .../service/impl/PayProductServiceImpl.java | 111 ++++++ .../mapper/price/PayProductMapper.xml | 8 +- bms-back/sql/data/bms_surcharge_type.sql | 163 +------- ...igrate_surcharge_type_to_prc_surcharge.sql | 2 + bms-back/sql/price/pay_product.sql | 145 +------ bms-back/sql/price/pay_surcharge_sc_id.sql | 2 + bms-back/sql/price/pay_surcharge_setup.sql | 357 ++++++++++++++++++ .../basic/pay/components/PayConfigDetail.vue | 267 ++++++++++++- bms-front/src/views/price/basic/pay/index.vue | 52 ++- 12 files changed, 808 insertions(+), 337 deletions(-) create mode 100644 bms-back/sql/price/migrate_surcharge_type_to_prc_surcharge.sql create mode 100644 bms-back/sql/price/pay_surcharge_sc_id.sql create mode 100644 bms-back/sql/price/pay_surcharge_setup.sql diff --git a/bms-back/bms-admin/src/main/java/com/bms/web/controller/price/SurchargeController.java b/bms-back/bms-admin/src/main/java/com/bms/web/controller/price/SurchargeController.java index 669fc30a..ddd5cbd9 100644 --- a/bms-back/bms-admin/src/main/java/com/bms/web/controller/price/SurchargeController.java +++ b/bms-back/bms-admin/src/main/java/com/bms/web/controller/price/SurchargeController.java @@ -72,7 +72,8 @@ public class SurchargeController extends BaseController */ @PreAuthorize("@ss.hasPermi('price:surcharge:list') or @ss.hasPermi('price:surcharge:query')" + " or @ss.hasPermi('price:set:query') or @ss.hasPermi('price:set:add') or @ss.hasPermi('price:set:edit')" - + " or @ss.hasPermi('price:billing:bill')") + + " or @ss.hasPermi('price:billing:bill')" + + " or @ss.hasPermi('price:pay:query') or @ss.hasPermi('price:pay:edit') or @ss.hasPermi('price:pay:import')") @GetMapping("/options") public AjaxResult listOptions(PrcSurcharge surcharge) { diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/PaySurcharge.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/PaySurcharge.java index a3b20f7d..c44a1167 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/domain/PaySurcharge.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/PaySurcharge.java @@ -25,6 +25,9 @@ public class PaySurcharge private String feeName; + /** 附加费配置ID,对应 prc_surcharge.sc_id */ + private Long scId; + private String zoneName; /** 收费标准原文 */ diff --git a/bms-back/bms-system/src/main/java/com/bms/price/pay/PayWorkbookParser.java b/bms-back/bms-system/src/main/java/com/bms/price/pay/PayWorkbookParser.java index e08a23c4..7314acfe 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/pay/PayWorkbookParser.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/pay/PayWorkbookParser.java @@ -442,6 +442,7 @@ public class PayWorkbookParser PaySurcharge copy = new PaySurcharge(); copy.setSectionName(fee.getSectionName()); copy.setFeeName(fee.getFeeName()); + copy.setScId(fee.getScId()); copy.setZoneName(fee.getZoneName()); copy.setChargeText(fee.getChargeText()); copy.setAmount(fee.getAmount()); @@ -1189,7 +1190,12 @@ public class PayWorkbookParser { detectedCurrency = product.getCurrency(); } + if (detectedCurrency == null || detectedCurrency.isBlank()) + { + detectedCurrency = "EUR"; + } product.setCurrency(detectedCurrency); + fillSurchargeCurrency(product, detectedCurrency); product.setWeightCount(product.getWeightBands().size()); product.setSurchargeCount(product.getSurcharges().size()); product.setExtraCount(product.getExtraLines().size()); @@ -3294,11 +3300,37 @@ public class PayWorkbookParser fee.setCurrency(""); fee.setPriceUnit(""); } + if (fee.getCurrency() == null || fee.getCurrency().isBlank()) + { + String cardCurrency = product.getCurrency(); + fee.setCurrency(cardCurrency == null || cardCurrency.isBlank() ? "EUR" : cardCurrency.trim().toUpperCase(Locale.ROOT)); + } fee.setSortNo(product.getSurcharges().size() + 1); PaySurchargeRules.apply(fee); product.getSurcharges().add(fee); } + /** 附加费币种为空时取价卡币种,价卡也没有则默认 EUR。 */ + private static void fillSurchargeCurrency(PayProduct product, String cardCurrency) + { + if (product == null || product.getSurcharges() == null || product.getSurcharges().isEmpty()) + { + return; + } + String fallback = cardCurrency == null || cardCurrency.isBlank() ? "EUR" : cardCurrency.trim().toUpperCase(Locale.ROOT); + for (PaySurcharge fee : product.getSurcharges()) + { + if (fee == null) + { + continue; + } + if (fee.getCurrency() == null || fee.getCurrency().isBlank()) + { + fee.setCurrency(fallback); + } + } + } + /** 燃油、去碳列是整张表的包含说明,只记一条,不跟每个重量段重复。 */ private void readFuelMark(ExcelGrid grid, PayProduct product) { diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PayProductServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PayProductServiceImpl.java index 2b7a9f84..7cf5a963 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PayProductServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PayProductServiceImpl.java @@ -37,12 +37,14 @@ import com.bms.price.domain.PaySaveCommand; import com.bms.price.domain.PaySurcharge; import com.bms.price.domain.PayWeightBand; import com.bms.price.domain.PrcPriceSet; +import com.bms.price.domain.PrcSurcharge; import com.bms.masterdata.domain.ServiceChannel; import com.bms.masterdata.mapper.ServiceChannelMapper; import com.bms.price.mapper.ChannelProductMapMapper; import com.bms.price.mapper.PayProductMapper; import com.bms.price.mapper.PayProductTermMapper; import com.bms.price.mapper.PrcPriceSetMapper; +import com.bms.price.mapper.PrcSurchargeMapper; import com.bms.price.pay.PayParseProgressListener; import com.bms.price.pay.PayWorkbookParser; import com.bms.price.service.IPayProductService; @@ -69,9 +71,14 @@ public class PayProductServiceImpl implements IPayProductService private static final String TERM_EXPIRED = "2"; + private static final String DEFAULT_CURRENCY = "EUR"; + @Autowired private PayProductMapper payProductMapper; + @Autowired + private PrcSurchargeMapper prcSurchargeMapper; + @Autowired private ChannelProductMapMapper channelProductMapMapper; @@ -1383,6 +1390,7 @@ public class PayProductServiceImpl implements IPayProductService { return; } + prepareSurcharges(product); for (PaySurcharge row : rows) { row.setProductId(product.getProductId()); @@ -1395,6 +1403,105 @@ public class PayProductServiceImpl implements IPayProductService } } + /** + * 按附加费名称映射 prc_surcharge.sc_id;币种不能为空:附加费 -> 价卡 -> EUR。 + */ + private void prepareSurcharges(PayProduct product) + { + List rows = product.getSurcharges(); + if (rows == null || rows.isEmpty()) + { + return; + } + if (isBlank(product.getCurrency())) + { + product.setCurrency(DEFAULT_CURRENCY); + } + String productCurrency = product.getCurrency().trim().toUpperCase(Locale.ROOT); + Map nameToScId = surchargeNameMap(); + for (PaySurcharge fee : rows) + { + if (fee.getScId() == null && !isBlank(fee.getFeeName())) + { + Long scId = nameToScId.get(fee.getFeeName().trim()); + if (scId != null) + { + fee.setScId(scId); + } + } + String currency = firstCurrency(fee.getCurrency(), currencyFromUnit(fee.getPriceUnit()), productCurrency); + fee.setCurrency(currency); + if (isBlank(fee.getPriceUnit()) || "%".equals(fee.getPriceUnit().trim())) + { + continue; + } + String unit = fee.getPriceUnit().trim(); + if (!unit.contains("/") && !"%".equals(unit) && !unit.toUpperCase(Locale.ROOT).startsWith(currency)) + { + fee.setPriceUnit(currency + "/" + unit.toUpperCase(Locale.ROOT)); + } + else if (unit.matches("(?i)^[A-Za-z]{3}$")) + { + fee.setPriceUnit(currency); + } + } + } + + private Map surchargeNameMap() + { + Map map = new LinkedHashMap(); + List list = prcSurchargeMapper.selectPrcSurchargeList(new PrcSurcharge()); + if (list == null) + { + return map; + } + for (PrcSurcharge item : list) + { + if (item == null || item.getScId() == null || isBlank(item.getScName())) + { + continue; + } + String key = item.getScName().trim(); + if (!map.containsKey(key)) + { + map.put(key, item.getScId()); + } + } + return map; + } + + private static String currencyFromUnit(String priceUnit) + { + if (isBlank(priceUnit) || "%".equals(priceUnit.trim())) + { + return null; + } + String text = priceUnit.trim(); + int slash = text.indexOf('/'); + String head = slash > 0 ? text.substring(0, slash) : text; + if (head.matches("(?i)^[A-Za-z]{3}$")) + { + return head.toUpperCase(Locale.ROOT); + } + return null; + } + + private static String firstCurrency(String... values) + { + if (values == null) + { + return DEFAULT_CURRENCY; + } + for (String value : values) + { + if (!isBlank(value)) + { + return value.trim().toUpperCase(Locale.ROOT); + } + } + return DEFAULT_CURRENCY; + } + private void insertExtras(PayProduct product) { List rows = product.getExtraLines(); @@ -1438,6 +1545,10 @@ public class PayProductServiceImpl implements IPayProductService product.setSourceFile(cut(product.getSourceFile(), 500)); product.setFilePath(cut(product.getFilePath(), 500)); product.setSupplierName(cut(product.getSupplierName(), 100)); + if (isBlank(product.getCurrency())) + { + product.setCurrency(DEFAULT_CURRENCY); + } product.setCurrency(cut(product.getCurrency(), 20)); product.setServiceNote(cut(product.getServiceNote(), 4000)); product.setParseStatus(cut(product.getParseStatus(), 20)); diff --git a/bms-back/bms-system/src/main/resources/mapper/price/PayProductMapper.xml b/bms-back/bms-system/src/main/resources/mapper/price/PayProductMapper.xml index e8f29ab8..d353789f 100644 --- a/bms-back/bms-system/src/main/resources/mapper/price/PayProductMapper.xml +++ b/bms-back/bms-system/src/main/resources/mapper/price/PayProductMapper.xml @@ -326,11 +326,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into pay_surcharge ( - product_id, term_id, version_no, section_name, fee_name, zone_name, charge_text, amount, currency, price_unit, fee_desc, period_text, + product_id, term_id, version_no, section_name, fee_name, sc_id, zone_name, charge_text, amount, currency, price_unit, fee_desc, period_text, effective_start, effective_end, charge_timing, calc_rule, calc_param, weight_min, weight_max, postcode_param, sort_no ) values - (#{row.productId}, #{row.termId}, ifnull(#{row.versionNo}, 1), #{row.sectionName}, #{row.feeName}, #{row.zoneName}, #{row.chargeText}, #{row.amount}, + (#{row.productId}, #{row.termId}, ifnull(#{row.versionNo}, 1), #{row.sectionName}, #{row.feeName}, #{row.scId}, #{row.zoneName}, #{row.chargeText}, #{row.amount}, #{row.currency}, #{row.priceUnit}, #{row.feeDesc}, #{row.periodText}, #{row.effectiveStart}, #{row.effectiveEnd}, #{row.chargeTiming}, ifnull(#{row.calcRule}, 'MANUAL'), #{row.calcParam}, #{row.weightMin}, #{row.weightMax}, #{row.postcodeParam}, #{row.sortNo}) @@ -366,7 +366,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select surcharge_id as surchargeId, product_id as productId, term_id as termId, version_no as versionNo, section_name as sectionName, fee_name as feeName, - zone_name as zoneName, charge_text as chargeText, amount, currency, price_unit as priceUnit, fee_desc as feeDesc, + sc_id as scId, zone_name as zoneName, charge_text as chargeText, amount, currency, price_unit as priceUnit, fee_desc as feeDesc, period_text as periodText, effective_start as effectiveStart, effective_end as effectiveEnd, charge_timing as chargeTiming, calc_rule as calcRule, calc_param as calcParam, weight_min as weightMin, weight_max as weightMax, postcode_param as postcodeParam, sort_no as sortNo diff --git a/bms-back/sql/data/bms_surcharge_type.sql b/bms-back/sql/data/bms_surcharge_type.sql index 5b56f83f..8bb42dea 100644 --- a/bms-back/sql/data/bms_surcharge_type.sql +++ b/bms-back/sql/data/bms_surcharge_type.sql @@ -1,162 +1,3 @@ --- 应付附加费类型。名称来自 D:\应付供应商 全部价卡的附加费收费项,已去重。 --- 可重复执行。 +-- 已废弃字典 bms_surcharge_type。 +-- 请执行 sql/price/pay_surcharge_setup.sql(迁入 prc_surcharge 并删除字典)。 SET NAMES utf8mb4; - -INSERT INTO sys_dict_type (dict_name, dict_type, status, create_by, create_time, remark) -SELECT '附加费类型', 'bms_surcharge_type', '0', 'admin', sysdate(), '应付价卡附加费名称' -FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM sys_dict_type WHERE dict_type = 'bms_surcharge_type'); - -INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark) -SELECT v.dict_sort, v.dict_label, v.dict_value, 'bms_surcharge_type', '', 'default', 'N', '0', 'admin', sysdate(), '应付价卡附加费' -FROM ( - SELECT 1 AS dict_sort, '疫情附加费' AS dict_label, '疫情附加费' AS dict_value - UNION ALL SELECT 2, '燃油附加费', '燃油附加费' - UNION ALL SELECT 3, '地址及联系方式修正费', '地址及联系方式修正费' - UNION ALL SELECT 4, '城市邮编不匹配', '城市邮编不匹配' - UNION ALL SELECT 5, '分拣机不可操作费', '分拣机不可操作费' - UNION ALL SELECT 6, '超重超尺寸费', '超重超尺寸费' - UNION ALL SELECT 7, '脱碳附加费', '脱碳附加费' - UNION ALL SELECT 8, '非法国电话联系费', '非法国电话联系费' - UNION ALL SELECT 9, '换面单费', '换面单费' - UNION ALL SELECT 10, '交错仓罚金', '交错仓罚金' - UNION ALL SELECT 11, '乡村邮编单量占比过大罚金', '乡村邮编单量占比过大罚金' - UNION ALL SELECT 12, '仿牌侵权罚款', '仿牌侵权罚款' - UNION ALL SELECT 13, '危险品罚款', '危险品罚款' - UNION ALL SELECT 14, '燃油费', '燃油费' - UNION ALL SELECT 15, '重派费', '重派费' - UNION ALL SELECT 16, '退件仓库操作费', '退件仓库操作费' - UNION ALL SELECT 17, '重派仓库操作费', '重派仓库操作费' - UNION ALL SELECT 18, '旺季附加费', '旺季附加费' - UNION ALL SELECT 19, '高峰旺季附加费', '高峰旺季附加费' - UNION ALL SELECT 20, '超尺寸超重费', '超尺寸超重费' - UNION ALL SELECT 21, '路由码选择附加费', '路由码选择附加费' - UNION ALL SELECT 22, '未预报附加费', '未预报附加费' - UNION ALL SELECT 23, '托收附加费', '托收附加费' - UNION ALL SELECT 24, '提供虚假信息罚款费', '提供虚假信息罚款费' - UNION ALL SELECT 25, '零售网点路线', '零售网点路线' - UNION ALL SELECT 26, '退件费', '退件费' - UNION ALL SELECT 27, '退件重派费', '退件重派费' - UNION ALL SELECT 28, '退件操作费', '退件操作费' - UNION ALL SELECT 29, '重派操作费', '重派操作费' - UNION ALL SELECT 30, '道路通行费', '道路通行费' - UNION ALL SELECT 31, '重量信息修正附加费', '重量信息修正附加费' - UNION ALL SELECT 32, '高风险地区附加费', '高风险地区附加费' - UNION ALL SELECT 33, '取还服务', '取还服务' - UNION ALL SELECT 34, '取货发货服务', '取货发货服务' - UNION ALL SELECT 35, '现金服务', '现金服务' - UNION ALL SELECT 36, '灵活配送服务', '灵活配送服务' - UNION ALL SELECT 37, '安全费', '安全费' - UNION ALL SELECT 38, '危机燃油附加费', '危机燃油附加费' - UNION ALL SELECT 39, '能源附加费', '能源附加费' - UNION ALL SELECT 40, '异形费', '异形费' - UNION ALL SELECT 41, '漏预报或漏发货', '漏预报或漏发货' - UNION ALL SELECT 42, '标签费', '标签费' - UNION ALL SELECT 43, '无法派送费', '无法派送费' - UNION ALL SELECT 44, '变更服务费', '变更服务费' - UNION ALL SELECT 45, '二次派送费', '二次派送费' - UNION ALL SELECT 46, '签名费', '签名费' - UNION ALL SELECT 47, '危险货物费', '危险货物费' - UNION ALL SELECT 48, '特殊产品加收', '特殊产品加收' - UNION ALL SELECT 49, '岛屿附加费', '岛屿附加费' - UNION ALL SELECT 50, '陆运能源附加费', '陆运能源附加费' - UNION ALL SELECT 51, '空运能源附加费', '空运能源附加费' - UNION ALL SELECT 52, '带电附加费', '带电附加费' - UNION ALL SELECT 53, '特货费', '特货费' - UNION ALL SELECT 54, '偏远费', '偏远费' - UNION ALL SELECT 55, '偏远地区附加费', '偏远地区附加费' - UNION ALL SELECT 56, '超大附加费(包裹)', '超大附加费(包裹)' - UNION ALL SELECT 57, '超重附加费(包裹)', '超重附加费(包裹)' - UNION ALL SELECT 58, '重复单号', '重复单号' - UNION ALL SELECT 59, '未预报', '未预报' - UNION ALL SELECT 60, '无法投递或其他原因退件运费', '无法投递或其他原因退件运费' - UNION ALL SELECT 61, '航司可持续性附加费', '航司可持续性附加费' - UNION ALL SELECT 62, '退件处理费', '退件处理费' - UNION ALL SELECT 63, '超尺寸费', '超尺寸费' - UNION ALL SELECT 64, '周末服务费', '周末服务费' - UNION ALL SELECT 65, '空气清洁费', '空气清洁费' - UNION ALL SELECT 66, '拖车附加费', '拖车附加费' - UNION ALL SELECT 67, '派送附加费', '派送附加费' - UNION ALL SELECT 68, '自送海外仓运费', '自送海外仓运费' - UNION ALL SELECT 69, '操作费', '操作费' - UNION ALL SELECT 70, '仓库操作费', '仓库操作费' - UNION ALL SELECT 71, '重新包装费', '重新包装费' - UNION ALL SELECT 72, '换包装费', '换包装费' - UNION ALL SELECT 73, '去碳附加费', '去碳附加费' - UNION ALL SELECT 74, '超重费', '超重费' - UNION ALL SELECT 75, '地址修正费', '地址修正费' - UNION ALL SELECT 76, '邮编城市不对应费', '邮编城市不对应费' - UNION ALL SELECT 77, '邮箱和电话缺失费', '邮箱和电话缺失费' - UNION ALL SELECT 78, '人工处理费', '人工处理费' - UNION ALL SELECT 79, '海外省费', '海外省费' - UNION ALL SELECT 80, '错误送仓罚款', '错误送仓罚款' - UNION ALL SELECT 81, '更换面单费', '更换面单费' - UNION ALL SELECT 82, '乡村地区占比超标准罚款', '乡村地区占比超标准罚款' - UNION ALL SELECT 83, 'COD', 'COD' - UNION ALL SELECT 84, '重新贴标附加费', '重新贴标附加费' - UNION ALL SELECT 85, '重派运费', '重派运费' - UNION ALL SELECT 86, '短期能源附加费', '短期能源附加费' - UNION ALL SELECT 87, '旺季高峰期附加费', '旺季高峰期附加费' - UNION ALL SELECT 88, '面单错误附加费', '面单错误附加费' - UNION ALL SELECT 89, '零售网点自提费', '零售网点自提费' - UNION ALL SELECT 90, '异形件费', '异形件费' - UNION ALL SELECT 91, '重量差异附加费', '重量差异附加费' - UNION ALL SELECT 92, '换单费', '换单费' - UNION ALL SELECT 93, '无法投递处理费', '无法投递处理费' - UNION ALL SELECT 94, '无法投递处理费-陆运', '无法投递处理费-陆运' - UNION ALL SELECT 95, '无法投递处理费-空运', '无法投递处理费-空运' - UNION ALL SELECT 96, '战争附加费', '战争附加费' - UNION ALL SELECT 97, '超尺寸附加费', '超尺寸附加费' - UNION ALL SELECT 98, '偏远附加费', '偏远附加费' - UNION ALL SELECT 99, '空气减排费', '空气减排费' - UNION ALL SELECT 100, '面单无法识别费', '面单无法识别费' - UNION ALL SELECT 101, '无法派送或退件费', '无法派送或退件费' - UNION ALL SELECT 102, '超重附加费', '超重附加费' - UNION ALL SELECT 103, '重复单号费', '重复单号费' - UNION ALL SELECT 104, '使用取消单号发货费', '使用取消单号发货费' - UNION ALL SELECT 105, '面单不符费', '面单不符费' - UNION ALL SELECT 106, '面单粘贴不合规范', '面单粘贴不合规范' - UNION ALL SELECT 107, '未经允许乱交邮费', '未经允许乱交邮费' - UNION ALL SELECT 108, '异形件附加费', '异形件附加费' - UNION ALL SELECT 109, '退件费(陆运)', '退件费(陆运)' - UNION ALL SELECT 110, '退件费(空运)', '退件费(空运)' - UNION ALL SELECT 111, '邮编城市不对应', '邮编城市不对应' - UNION ALL SELECT 112, '收件人信息错误处理费', '收件人信息错误处理费' - UNION ALL SELECT 113, '无法过机操作费', '无法过机操作费' - UNION ALL SELECT 114, '不可达地址费', '不可达地址费' - UNION ALL SELECT 115, '销毁费', '销毁费' - UNION ALL SELECT 116, '仓储费', '仓储费' - UNION ALL SELECT 117, 'CO₂附加费', 'CO₂附加费' - UNION ALL SELECT 118, '退回件处理费', '退回件处理费' - UNION ALL SELECT 119, '异形件/超尺寸处理费', '异形件/超尺寸处理费' - UNION ALL SELECT 120, '重量申报错误操作费', '重量申报错误操作费' - UNION ALL SELECT 121, '垃圾处理费', '垃圾处理费' - UNION ALL SELECT 122, '绿色附加费', '绿色附加费' - UNION ALL SELECT 123, '无法投递费', '无法投递费' - UNION ALL SELECT 124, '额外处理费', '额外处理费' - UNION ALL SELECT 125, '超大件', '超大件' - UNION ALL SELECT 126, '超限制', '超限制' - UNION ALL SELECT 127, '地址更正', '地址更正' - UNION ALL SELECT 128, '扩展区域收货和送货服务', '扩展区域收货和送货服务' - UNION ALL SELECT 129, '偏远地区收货和送货服务', '偏远地区收货和送货服务' - UNION ALL SELECT 130, '私人地址派送费', '私人地址派送费' - UNION ALL SELECT 131, '包裹信息缺失', '包裹信息缺失' - UNION ALL SELECT 132, '高峰附加费', '高峰附加费' - UNION ALL SELECT 133, '更改地址费', '更改地址费' - UNION ALL SELECT 134, '空气减排附加费', '空气减排附加费' - UNION ALL SELECT 135, '异地取货费', '异地取货费' - UNION ALL SELECT 136, '包裹退件运费', '包裹退件运费' - UNION ALL SELECT 137, '退件入仓处理费', '退件入仓处理费' - UNION ALL SELECT 138, '退件重派操作费', '退件重派操作费' - UNION ALL SELECT 139, '退件重派运费', '退件重派运费' - UNION ALL SELECT 140, '退件销毁费', '退件销毁费' - UNION ALL SELECT 141, 'Bulky goods Fee', 'Bulky goods Fee' - UNION ALL SELECT 142, '地址校验费', '地址校验费' - UNION ALL SELECT 143, 'Labeling fee', 'Labeling fee' - UNION ALL SELECT 144, '瑞典和芬兰门到门派送费', '瑞典和芬兰门到门派送费' - UNION ALL SELECT 145, '特别旺季附加费', '特别旺季附加费' - UNION ALL SELECT 146, '脱欧手续费', '脱欧手续费' -) v -WHERE NOT EXISTS ( - SELECT 1 FROM sys_dict_data d - WHERE d.dict_type = 'bms_surcharge_type' AND d.dict_value = v.dict_value -); diff --git a/bms-back/sql/price/migrate_surcharge_type_to_prc_surcharge.sql b/bms-back/sql/price/migrate_surcharge_type_to_prc_surcharge.sql new file mode 100644 index 00000000..fa1c7996 --- /dev/null +++ b/bms-back/sql/price/migrate_surcharge_type_to_prc_surcharge.sql @@ -0,0 +1,2 @@ +-- 已合并到 sql/price/pay_surcharge_setup.sql,请执行该脚本。 +SET NAMES utf8mb4; diff --git a/bms-back/sql/price/pay_product.sql b/bms-back/sql/price/pay_product.sql index fbab0ebd..9136a17d 100644 --- a/bms-back/sql/price/pay_product.sql +++ b/bms-back/sql/price/pay_product.sql @@ -1,142 +1,3 @@ --- 应付价卡配置。目录里的一个产品一行,重量段和附加费挂在产品下面。 --- 表名使用 pay_ 前缀。可重复执行。 - -CREATE TABLE IF NOT EXISTS `pay_product` ( - `product_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '产品ID', - `product_name` varchar(200) NOT NULL COMMENT '目录中的产品名称', - `product_type` varchar(30) DEFAULT NULL COMMENT '产品类型:AR:应收、AP:应付', - `country_scope` varchar(200) DEFAULT NULL COMMENT '目录中的国家或口岸', - `service_type` varchar(100) DEFAULT NULL COMMENT '服务类型', - `classification` varchar(100) DEFAULT NULL COMMENT '目录分类', - `catalog_remark` varchar(1000) DEFAULT NULL COMMENT '目录备注', - `update_content` varchar(500) DEFAULT NULL COMMENT '目录更新内容', - `weight_limit` varchar(100) DEFAULT NULL COMMENT '目录重量限制', - `sheet_name` varchar(200) NOT NULL COMMENT '报价工作表', - `related_sheet` varchar(500) DEFAULT NULL COMMENT '目录里一并指向的分区或附加表,不单独入库', - `source_file` varchar(500) NOT NULL COMMENT '来源文件名', - `file_path` varchar(500) DEFAULT NULL COMMENT '源文件OSS地址,oss://bucket/key', - `file_md5` char(32) NOT NULL COMMENT '来源文件MD5', - `supplier_name` varchar(100) DEFAULT NULL COMMENT '价卡归属,如威狮、易德、GWE', - `effective_date` date DEFAULT NULL COMMENT '价卡生效日', - `currency` varchar(20) DEFAULT NULL COMMENT '报价币种', - `service_note` varchar(4000) DEFAULT NULL COMMENT '报价表中的服务说明', - `parse_status` varchar(20) NOT NULL DEFAULT 'OK' COMMENT '识别结果:OK已识别 EMPTY未识别到配置 MISSING缺少工作表', - `weight_count` int(11) NOT NULL DEFAULT 0 COMMENT '重量段行数', - `surcharge_count` int(11) NOT NULL DEFAULT 0 COMMENT '附加费行数', - `extra_count` int(11) NOT NULL DEFAULT 0 COMMENT '邮编或其他配置行数', - `created_by` varchar(64) DEFAULT '' COMMENT '创建者', - `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `updated_by` varchar(64) DEFAULT '' COMMENT '更新者', - `update_time` datetime DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`product_id`), - KEY `idx_pay_product_name` (`product_name`), - KEY `idx_pay_product_file` (`file_md5`, `sheet_name`), - KEY `idx_pay_product_effective` (`effective_date`), - KEY `idx_pay_product_supplier` (`supplier_name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付价卡产品'; - -CREATE TABLE IF NOT EXISTS `pay_weight_band` ( - `band_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '重量段ID', - `product_id` bigint(20) NOT NULL COMMENT '产品ID', - `version_no` int(11) NOT NULL DEFAULT 1 COMMENT '价卡版本,随产品版本变更', - `section_name` varchar(200) DEFAULT NULL COMMENT '报价区块,如派送费、偏远、额外线路', - `country_name` varchar(200) DEFAULT NULL COMMENT '国家', - `country_code` varchar(32) DEFAULT NULL COMMENT '国家二字码,多个用逗号', - `zone_name` varchar(200) DEFAULT NULL COMMENT '分区或价格列', - `weight_label` varchar(100) DEFAULT NULL COMMENT '重量段原文,如0<W≤1、首重1 Kg', - `weight_min` decimal(10,3) DEFAULT NULL COMMENT '重量下限KG', - `weight_max` decimal(10,3) DEFAULT NULL COMMENT '重量上限KG', - `volume_text` varchar(40) DEFAULT NULL COMMENT '体积上限,数字加单位,如10000cm³', - `charge_name` varchar(200) DEFAULT NULL COMMENT '费用项,如处理费、派送费、续重', - `price` decimal(12,4) DEFAULT NULL COMMENT '单价', - `price_unit` varchar(40) DEFAULT NULL COMMENT '单位,如EUR/ITEM、EUR/KG', - `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', - PRIMARY KEY (`band_id`), - KEY `idx_pay_weight_product` (`product_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品重量段和起重配置'; - -CREATE TABLE IF NOT EXISTS `pay_surcharge` ( - `surcharge_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '附加费ID', - `product_id` bigint(20) NOT NULL COMMENT '产品ID', - `version_no` int(11) NOT NULL DEFAULT 1 COMMENT '价卡版本,随产品版本变更', - `section_name` varchar(200) DEFAULT NULL COMMENT '附加费区块', - `fee_name` varchar(200) NOT NULL COMMENT '费用名称', - `zone_name` varchar(200) DEFAULT NULL COMMENT '适用分区,没有则空', - `charge_text` varchar(500) DEFAULT NULL COMMENT '收费标准原文', - `amount` decimal(12,4) DEFAULT NULL COMMENT '能解析出的金额或百分比', - `currency` varchar(20) DEFAULT NULL COMMENT '币种', - `price_unit` varchar(40) DEFAULT NULL COMMENT '货币和计费单位,如EUR/ITEM、RMB/KG、%', - `fee_desc` varchar(2000) DEFAULT NULL COMMENT '费用说明', - `period_text` varchar(500) DEFAULT NULL COMMENT '时效原文', - `effective_start` date DEFAULT NULL COMMENT '生效开始,空表示价卡期内一直有效', - `effective_end` date DEFAULT NULL COMMENT '生效结束', - `charge_timing` varchar(40) DEFAULT NULL COMMENT '收取时点:固定收取、产生时收取、旺季期间', - `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', - PRIMARY KEY (`surcharge_id`), - KEY `idx_pay_surcharge_product` (`product_id`), - KEY `idx_pay_surcharge_period` (`effective_start`, `effective_end`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品附加费,含时效'; - -CREATE TABLE IF NOT EXISTS `pay_extra_line` ( - `line_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '配置行ID', - `product_id` bigint(20) NOT NULL COMMENT '产品ID', - `line_type` varchar(20) NOT NULL COMMENT '行类型:邮编、配置', - `line_text` varchar(1000) NOT NULL COMMENT '原文,列之间用 | 分隔', - `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', - PRIMARY KEY (`line_id`), - KEY `idx_pay_extra_product` (`product_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品上的邮编或其他配置原文'; - --- 菜单挂在价格基础下面 -SET @parentId := ( - SELECT menu_id FROM sys_menu - WHERE path = 'basic' AND menu_type = 'M' - ORDER BY menu_id ASC LIMIT 1 -); -SET @parentId := IFNULL(@parentId, ( - SELECT parent_id FROM sys_menu - WHERE perms = 'price:product:list' OR component LIKE '%price/basic/product%' - ORDER BY menu_id ASC LIMIT 1 -)); - -INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) -SELECT '应付配置', @parentId, 16, 'pay', 'price/basic/pay/index', 1, 0, 'C', '0', '0', 'price:pay:list', 'money', 'admin', sysdate(), '应付价卡产品、重量段和附加费' -WHERE @parentId IS NOT NULL - AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:list' OR component = 'price/basic/pay/index'); - -SET @menuId := (SELECT menu_id FROM sys_menu WHERE perms = 'price:pay:list' LIMIT 1); - -INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) -SELECT '应付配置查询', @menuId, 1, '', '', 1, 0, 'F', '0', '0', 'price:pay:query', '#', 'admin', sysdate() -WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:query'); - -INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) -SELECT '应付配置导入', @menuId, 2, '', '', 1, 0, 'F', '0', '0', 'price:pay:import', '#', 'admin', sysdate() -WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:import'); - -INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) -SELECT '应付配置删除', @menuId, 3, '', '', 1, 0, 'F', '0', '0', 'price:pay:remove', '#', 'admin', sysdate() -WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:remove'); - -INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) -SELECT '应付配置导出', @menuId, 4, '', '', 1, 0, 'F', '0', '0', 'price:pay:export', '#', 'admin', sysdate() -WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:export'); - --- 已经能维护价格基础的角色,同步拿到应付配置菜单 -INSERT INTO sys_role_menu (role_id, menu_id) -SELECT DISTINCT rm.role_id, m.menu_id -FROM sys_role_menu rm -JOIN sys_menu src ON src.menu_id = rm.menu_id AND src.perms = 'price:product:list' -JOIN sys_menu m ON m.perms LIKE 'price:pay:%' -WHERE NOT EXISTS ( - SELECT 1 FROM sys_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = m.menu_id -); - -INSERT INTO sys_role_menu (role_id, menu_id) -SELECT 1, m.menu_id -FROM sys_menu m -WHERE m.perms LIKE 'price:pay:%' - AND NOT EXISTS ( - SELECT 1 FROM sys_role_menu x WHERE x.role_id = 1 AND x.menu_id = m.menu_id - ); +-- 已合并到 sql/price/pay_surcharge_setup.sql,请执行该脚本。 +-- (含应付价卡表结构、菜单、附加费迁移、sc_id) +SET NAMES utf8mb4; diff --git a/bms-back/sql/price/pay_surcharge_sc_id.sql b/bms-back/sql/price/pay_surcharge_sc_id.sql new file mode 100644 index 00000000..fa1c7996 --- /dev/null +++ b/bms-back/sql/price/pay_surcharge_sc_id.sql @@ -0,0 +1,2 @@ +-- 已合并到 sql/price/pay_surcharge_setup.sql,请执行该脚本。 +SET NAMES utf8mb4; diff --git a/bms-back/sql/price/pay_surcharge_setup.sql b/bms-back/sql/price/pay_surcharge_setup.sql new file mode 100644 index 00000000..a4183ff8 --- /dev/null +++ b/bms-back/sql/price/pay_surcharge_setup.sql @@ -0,0 +1,357 @@ +-- 应付附加费一键脚本(可重复执行)。 +-- 合并自: +-- sql/price/pay_product.sql +-- sql/price/migrate_surcharge_type_to_prc_surcharge.sql +-- sql/price/pay_surcharge_sc_id.sql +-- sql/data/bms_surcharge_type.sql(字典已废弃,改迁 prc_surcharge) +-- 步骤:1)建表/菜单 2)补 sc_id 3)字典迁入 prc_surcharge 并删字典 4)回填 sc_id/币种 +SET NAMES utf8mb4; + +-- ========== 1. 应付价卡表与菜单 ========== + +-- 应付价卡配置。目录里的一个产品一行,重量段和附加费挂在产品下面。 +-- 表名使用 pay_ 前缀。可重复执行。 + +CREATE TABLE IF NOT EXISTS `pay_product` ( + `product_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '产品ID', + `product_name` varchar(200) NOT NULL COMMENT '目录中的产品名称', + `product_type` varchar(30) DEFAULT NULL COMMENT '产品类型:AR:应收、AP:应付', + `country_scope` varchar(200) DEFAULT NULL COMMENT '目录中的国家或口岸', + `service_type` varchar(100) DEFAULT NULL COMMENT '服务类型', + `classification` varchar(100) DEFAULT NULL COMMENT '目录分类', + `catalog_remark` varchar(1000) DEFAULT NULL COMMENT '目录备注', + `update_content` varchar(500) DEFAULT NULL COMMENT '目录更新内容', + `weight_limit` varchar(100) DEFAULT NULL COMMENT '目录重量限制', + `sheet_name` varchar(200) NOT NULL COMMENT '报价工作表', + `related_sheet` varchar(500) DEFAULT NULL COMMENT '目录里一并指向的分区或附加表,不单独入库', + `source_file` varchar(500) NOT NULL COMMENT '来源文件名', + `file_path` varchar(500) DEFAULT NULL COMMENT '源文件OSS地址,oss://bucket/key', + `file_md5` char(32) NOT NULL COMMENT '来源文件MD5', + `supplier_name` varchar(100) DEFAULT NULL COMMENT '价卡归属,如威狮、易德、GWE', + `effective_date` date DEFAULT NULL COMMENT '价卡生效日', + `currency` varchar(20) DEFAULT NULL COMMENT '报价币种', + `service_note` varchar(4000) DEFAULT NULL COMMENT '报价表中的服务说明', + `parse_status` varchar(20) NOT NULL DEFAULT 'OK' COMMENT '识别结果:OK已识别 EMPTY未识别到配置 MISSING缺少工作表', + `weight_count` int(11) NOT NULL DEFAULT 0 COMMENT '重量段行数', + `surcharge_count` int(11) NOT NULL DEFAULT 0 COMMENT '附加费行数', + `extra_count` int(11) NOT NULL DEFAULT 0 COMMENT '邮编或其他配置行数', + `created_by` varchar(64) DEFAULT '' COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `updated_by` varchar(64) DEFAULT '' COMMENT '更新者', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `remark` varchar(500) DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`product_id`), + KEY `idx_pay_product_name` (`product_name`), + KEY `idx_pay_product_file` (`file_md5`, `sheet_name`), + KEY `idx_pay_product_effective` (`effective_date`), + KEY `idx_pay_product_supplier` (`supplier_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付价卡产品'; + +CREATE TABLE IF NOT EXISTS `pay_weight_band` ( + `band_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '重量段ID', + `product_id` bigint(20) NOT NULL COMMENT '产品ID', + `version_no` int(11) NOT NULL DEFAULT 1 COMMENT '价卡版本,随产品版本变更', + `section_name` varchar(200) DEFAULT NULL COMMENT '报价区块,如派送费、偏远、额外线路', + `country_name` varchar(200) DEFAULT NULL COMMENT '国家', + `country_code` varchar(32) DEFAULT NULL COMMENT '国家二字码,多个用逗号', + `zone_name` varchar(200) DEFAULT NULL COMMENT '分区或价格列', + `weight_label` varchar(100) DEFAULT NULL COMMENT '重量段原文,如0<W≤1、首重1 Kg', + `weight_min` decimal(10,3) DEFAULT NULL COMMENT '重量下限KG', + `weight_max` decimal(10,3) DEFAULT NULL COMMENT '重量上限KG', + `volume_text` varchar(40) DEFAULT NULL COMMENT '体积上限,数字加单位,如10000cm³', + `charge_name` varchar(200) DEFAULT NULL COMMENT '费用项,如处理费、派送费、续重', + `price` decimal(12,4) DEFAULT NULL COMMENT '单价', + `price_unit` varchar(40) DEFAULT NULL COMMENT '单位,如EUR/ITEM、EUR/KG', + `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', + PRIMARY KEY (`band_id`), + KEY `idx_pay_weight_product` (`product_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品重量段和起重配置'; + +CREATE TABLE IF NOT EXISTS `pay_surcharge` ( + `surcharge_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '附加费ID', + `product_id` bigint(20) NOT NULL COMMENT '产品ID', + `version_no` int(11) NOT NULL DEFAULT 1 COMMENT '价卡版本,随产品版本变更', + `section_name` varchar(200) DEFAULT NULL COMMENT '附加费区块', + `fee_name` varchar(200) NOT NULL COMMENT '费用名称', + `sc_id` bigint(20) DEFAULT NULL COMMENT '附加费配置ID,对应 prc_surcharge.sc_id', + `zone_name` varchar(200) DEFAULT NULL COMMENT '适用分区,没有则空', + `charge_text` varchar(500) DEFAULT NULL COMMENT '收费标准原文', + `amount` decimal(12,4) DEFAULT NULL COMMENT '能解析出的金额或百分比', + `currency` varchar(20) DEFAULT NULL COMMENT '币种', + `price_unit` varchar(40) DEFAULT NULL COMMENT '货币和计费单位,如EUR/ITEM、RMB/KG、%', + `fee_desc` varchar(2000) DEFAULT NULL COMMENT '费用说明', + `period_text` varchar(500) DEFAULT NULL COMMENT '时效原文', + `effective_start` date DEFAULT NULL COMMENT '生效开始,空表示价卡期内一直有效', + `effective_end` date DEFAULT NULL COMMENT '生效结束', + `charge_timing` varchar(40) DEFAULT NULL COMMENT '收取时点:固定收取、产生时收取、旺季期间', + `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', + PRIMARY KEY (`surcharge_id`), + KEY `idx_pay_surcharge_product` (`product_id`), + KEY `idx_pay_surcharge_sc` (`sc_id`), + KEY `idx_pay_surcharge_period` (`effective_start`, `effective_end`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品附加费,含时效'; + +CREATE TABLE IF NOT EXISTS `pay_extra_line` ( + `line_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '配置行ID', + `product_id` bigint(20) NOT NULL COMMENT '产品ID', + `line_type` varchar(20) NOT NULL COMMENT '行类型:邮编、配置', + `line_text` varchar(1000) NOT NULL COMMENT '原文,列之间用 | 分隔', + `sort_no` int(11) NOT NULL DEFAULT 0 COMMENT '排序', + PRIMARY KEY (`line_id`), + KEY `idx_pay_extra_product` (`product_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应付产品上的邮编或其他配置原文'; + +-- 菜单挂在价格基础下面 +SET @parentId := ( + SELECT menu_id FROM sys_menu + WHERE path = 'basic' AND menu_type = 'M' + ORDER BY menu_id ASC LIMIT 1 +); +SET @parentId := IFNULL(@parentId, ( + SELECT parent_id FROM sys_menu + WHERE perms = 'price:product:list' OR component LIKE '%price/basic/product%' + ORDER BY menu_id ASC LIMIT 1 +)); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) +SELECT '应付配置', @parentId, 16, 'pay', 'price/basic/pay/index', 1, 0, 'C', '0', '0', 'price:pay:list', 'money', 'admin', sysdate(), '应付价卡产品、重量段和附加费' +WHERE @parentId IS NOT NULL + AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:list' OR component = 'price/basic/pay/index'); + +SET @menuId := (SELECT menu_id FROM sys_menu WHERE perms = 'price:pay:list' LIMIT 1); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) +SELECT '应付配置查询', @menuId, 1, '', '', 1, 0, 'F', '0', '0', 'price:pay:query', '#', 'admin', sysdate() +WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:query'); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) +SELECT '应付配置导入', @menuId, 2, '', '', 1, 0, 'F', '0', '0', 'price:pay:import', '#', 'admin', sysdate() +WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:import'); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) +SELECT '应付配置删除', @menuId, 3, '', '', 1, 0, 'F', '0', '0', 'price:pay:remove', '#', 'admin', sysdate() +WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:remove'); + +INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) +SELECT '应付配置导出', @menuId, 4, '', '', 1, 0, 'F', '0', '0', 'price:pay:export', '#', 'admin', sysdate() +WHERE @menuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'price:pay:export'); + +-- 已经能维护价格基础的角色,同步拿到应付配置菜单 +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT DISTINCT rm.role_id, m.menu_id +FROM sys_role_menu rm +JOIN sys_menu src ON src.menu_id = rm.menu_id AND src.perms = 'price:product:list' +JOIN sys_menu m ON m.perms LIKE 'price:pay:%' +WHERE NOT EXISTS ( + SELECT 1 FROM sys_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = m.menu_id +); + +INSERT INTO sys_role_menu (role_id, menu_id) +SELECT 1, m.menu_id +FROM sys_menu m +WHERE m.perms LIKE 'price:pay:%' + AND NOT EXISTS ( + SELECT 1 FROM sys_role_menu x WHERE x.role_id = 1 AND x.menu_id = m.menu_id + ); + +-- ========== 2. pay_surcharge 补 sc_id(已有表时) ========== + +SET @sql = ( + SELECT IF( + COUNT(*) = 0, + 'ALTER TABLE pay_surcharge ADD COLUMN sc_id bigint(20) DEFAULT NULL COMMENT ''附加费配置ID,对应 prc_surcharge.sc_id'' AFTER fee_name, ADD KEY idx_pay_surcharge_sc (sc_id)', + 'SELECT 1' + ) + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'pay_surcharge' AND COLUMN_NAME = 'sc_id' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- ========== 3. 字典 bms_surcharge_type 迁入 prc_surcharge,并删除字典 ========== +-- 已存在同名且未作废的附加费不覆盖;新增行默认 FIXED/0、币种 EUR + +INSERT INTO prc_surcharge ( + sc_name, fee_type, charge_type, charge_value, currency, round_mode, ss_code, is_del, + sc_note, created_by, create_time +) +SELECT v.sc_name, 'SURCHARGE', 'FIXED', 0, 'EUR', 'HALF_UP', 'on', '0', + '从附加费类型字典迁移', 'admin', sysdate() +FROM ( + SELECT '疫情附加费' AS sc_name + UNION ALL SELECT '燃油附加费' AS sc_name + UNION ALL SELECT '地址及联系方式修正费' AS sc_name + UNION ALL SELECT '城市邮编不匹配' AS sc_name + UNION ALL SELECT '分拣机不可操作费' AS sc_name + UNION ALL SELECT '超重超尺寸费' AS sc_name + UNION ALL SELECT '脱碳附加费' AS sc_name + UNION ALL SELECT '非法国电话联系费' AS sc_name + UNION ALL SELECT '换面单费' AS sc_name + UNION ALL SELECT '交错仓罚金' AS sc_name + UNION ALL SELECT '乡村邮编单量占比过大罚金' AS sc_name + UNION ALL SELECT '仿牌侵权罚款' AS sc_name + UNION ALL SELECT '危险品罚款' AS sc_name + UNION ALL SELECT '燃油费' AS sc_name + UNION ALL SELECT '重派费' AS sc_name + UNION ALL SELECT '退件仓库操作费' AS sc_name + UNION ALL SELECT '重派仓库操作费' AS sc_name + UNION ALL SELECT '旺季附加费' AS sc_name + UNION ALL SELECT '高峰旺季附加费' AS sc_name + UNION ALL SELECT '超尺寸超重费' AS sc_name + UNION ALL SELECT '路由码选择附加费' AS sc_name + UNION ALL SELECT '未预报附加费' AS sc_name + UNION ALL SELECT '托收附加费' AS sc_name + UNION ALL SELECT '提供虚假信息罚款费' AS sc_name + UNION ALL SELECT '零售网点路线' AS sc_name + UNION ALL SELECT '退件费' AS sc_name + UNION ALL SELECT '退件重派费' AS sc_name + UNION ALL SELECT '退件操作费' AS sc_name + UNION ALL SELECT '重派操作费' AS sc_name + UNION ALL SELECT '道路通行费' AS sc_name + UNION ALL SELECT '重量信息修正附加费' AS sc_name + UNION ALL SELECT '高风险地区附加费' AS sc_name + UNION ALL SELECT '取还服务' AS sc_name + UNION ALL SELECT '取货发货服务' AS sc_name + UNION ALL SELECT '现金服务' AS sc_name + UNION ALL SELECT '灵活配送服务' AS sc_name + UNION ALL SELECT '安全费' AS sc_name + UNION ALL SELECT '危机燃油附加费' AS sc_name + UNION ALL SELECT '能源附加费' AS sc_name + UNION ALL SELECT '异形费' AS sc_name + UNION ALL SELECT '漏预报或漏发货' AS sc_name + UNION ALL SELECT '标签费' AS sc_name + UNION ALL SELECT '无法派送费' AS sc_name + UNION ALL SELECT '变更服务费' AS sc_name + UNION ALL SELECT '二次派送费' AS sc_name + UNION ALL SELECT '签名费' AS sc_name + UNION ALL SELECT '危险货物费' AS sc_name + UNION ALL SELECT '特殊产品加收' AS sc_name + UNION ALL SELECT '岛屿附加费' AS sc_name + UNION ALL SELECT '陆运能源附加费' AS sc_name + UNION ALL SELECT '空运能源附加费' AS sc_name + UNION ALL SELECT '带电附加费' AS sc_name + UNION ALL SELECT '特货费' AS sc_name + UNION ALL SELECT '偏远费' AS sc_name + UNION ALL SELECT '偏远地区附加费' AS sc_name + UNION ALL SELECT '超大附加费(包裹)' AS sc_name + UNION ALL SELECT '超重附加费(包裹)' AS sc_name + UNION ALL SELECT '重复单号' AS sc_name + UNION ALL SELECT '未预报' AS sc_name + UNION ALL SELECT '无法投递或其他原因退件运费' AS sc_name + UNION ALL SELECT '航司可持续性附加费' AS sc_name + UNION ALL SELECT '退件处理费' AS sc_name + UNION ALL SELECT '超尺寸费' AS sc_name + UNION ALL SELECT '周末服务费' AS sc_name + UNION ALL SELECT '空气清洁费' AS sc_name + UNION ALL SELECT '拖车附加费' AS sc_name + UNION ALL SELECT '派送附加费' AS sc_name + UNION ALL SELECT '自送海外仓运费' AS sc_name + UNION ALL SELECT '操作费' AS sc_name + UNION ALL SELECT '仓库操作费' AS sc_name + UNION ALL SELECT '重新包装费' AS sc_name + UNION ALL SELECT '换包装费' AS sc_name + UNION ALL SELECT '去碳附加费' AS sc_name + UNION ALL SELECT '超重费' AS sc_name + UNION ALL SELECT '地址修正费' AS sc_name + UNION ALL SELECT '邮编城市不对应费' AS sc_name + UNION ALL SELECT '邮箱和电话缺失费' AS sc_name + UNION ALL SELECT '人工处理费' AS sc_name + UNION ALL SELECT '海外省费' AS sc_name + UNION ALL SELECT '错误送仓罚款' AS sc_name + UNION ALL SELECT '更换面单费' AS sc_name + UNION ALL SELECT '乡村地区占比超标准罚款' AS sc_name + UNION ALL SELECT 'COD' AS sc_name + UNION ALL SELECT '重新贴标附加费' AS sc_name + UNION ALL SELECT '重派运费' AS sc_name + UNION ALL SELECT '短期能源附加费' AS sc_name + UNION ALL SELECT '旺季高峰期附加费' AS sc_name + UNION ALL SELECT '面单错误附加费' AS sc_name + UNION ALL SELECT '零售网点自提费' AS sc_name + UNION ALL SELECT '异形件费' AS sc_name + UNION ALL SELECT '重量差异附加费' AS sc_name + UNION ALL SELECT '换单费' AS sc_name + UNION ALL SELECT '无法投递处理费' AS sc_name + UNION ALL SELECT '无法投递处理费-陆运' AS sc_name + UNION ALL SELECT '无法投递处理费-空运' AS sc_name + UNION ALL SELECT '战争附加费' AS sc_name + UNION ALL SELECT '超尺寸附加费' AS sc_name + UNION ALL SELECT '偏远附加费' AS sc_name + UNION ALL SELECT '空气减排费' AS sc_name + UNION ALL SELECT '面单无法识别费' AS sc_name + UNION ALL SELECT '无法派送或退件费' AS sc_name + UNION ALL SELECT '超重附加费' AS sc_name + UNION ALL SELECT '重复单号费' AS sc_name + UNION ALL SELECT '使用取消单号发货费' AS sc_name + UNION ALL SELECT '面单不符费' AS sc_name + UNION ALL SELECT '面单粘贴不合规范' AS sc_name + UNION ALL SELECT '未经允许乱交邮费' AS sc_name + UNION ALL SELECT '异形件附加费' AS sc_name + UNION ALL SELECT '退件费(陆运)' AS sc_name + UNION ALL SELECT '退件费(空运)' AS sc_name + UNION ALL SELECT '邮编城市不对应' AS sc_name + UNION ALL SELECT '收件人信息错误处理费' AS sc_name + UNION ALL SELECT '无法过机操作费' AS sc_name + UNION ALL SELECT '不可达地址费' AS sc_name + UNION ALL SELECT '销毁费' AS sc_name + UNION ALL SELECT '仓储费' AS sc_name + UNION ALL SELECT 'CO₂附加费' AS sc_name + UNION ALL SELECT '退回件处理费' AS sc_name + UNION ALL SELECT '异形件/超尺寸处理费' AS sc_name + UNION ALL SELECT '重量申报错误操作费' AS sc_name + UNION ALL SELECT '垃圾处理费' AS sc_name + UNION ALL SELECT '绿色附加费' AS sc_name + UNION ALL SELECT '无法投递费' AS sc_name + UNION ALL SELECT '额外处理费' AS sc_name + UNION ALL SELECT '超大件' AS sc_name + UNION ALL SELECT '超限制' AS sc_name + UNION ALL SELECT '地址更正' AS sc_name + UNION ALL SELECT '扩展区域收货和送货服务' AS sc_name + UNION ALL SELECT '偏远地区收货和送货服务' AS sc_name + UNION ALL SELECT '私人地址派送费' AS sc_name + UNION ALL SELECT '包裹信息缺失' AS sc_name + UNION ALL SELECT '高峰附加费' AS sc_name + UNION ALL SELECT '更改地址费' AS sc_name + UNION ALL SELECT '空气减排附加费' AS sc_name + UNION ALL SELECT '异地取货费' AS sc_name + UNION ALL SELECT '包裹退件运费' AS sc_name + UNION ALL SELECT '退件入仓处理费' AS sc_name + UNION ALL SELECT '退件重派操作费' AS sc_name + UNION ALL SELECT '退件重派运费' AS sc_name + UNION ALL SELECT '退件销毁费' AS sc_name + UNION ALL SELECT 'Bulky goods Fee' AS sc_name + UNION ALL SELECT '地址校验费' AS sc_name + UNION ALL SELECT 'Labeling fee' AS sc_name + UNION ALL SELECT '瑞典和芬兰门到门派送费' AS sc_name + UNION ALL SELECT '特别旺季附加费' AS sc_name + UNION ALL SELECT '脱欧手续费' AS sc_name +) v +WHERE NOT EXISTS ( + SELECT 1 FROM prc_surcharge s + WHERE s.sc_name = v.sc_name + AND ifnull(s.is_del, '0') = '0' + AND lower(ifnull(s.ss_code, '')) <> 'vd' +); + +DELETE FROM sys_dict_data WHERE dict_type = 'bms_surcharge_type'; +DELETE FROM sys_dict_type WHERE dict_type = 'bms_surcharge_type'; + +-- ========== 4. 回填 pay_surcharge.sc_id 与空币种 ========== + +-- 按名称回填未绑定的 sc_id(取未作废最新一条) +UPDATE pay_surcharge ps +INNER JOIN ( + SELECT s.sc_name, MAX(s.sc_id) AS sc_id + FROM prc_surcharge s + WHERE ifnull(s.is_del, '0') = '0' + AND lower(ifnull(s.ss_code, '')) <> 'vd' + GROUP BY s.sc_name +) m ON m.sc_name = ps.fee_name +SET ps.sc_id = m.sc_id +WHERE ps.sc_id IS NULL; + +-- 币种为空:先取价卡币种,再默认 EUR +UPDATE pay_surcharge ps +LEFT JOIN pay_product p ON p.product_id = ps.product_id +SET ps.currency = ifnull(nullif(trim(p.currency), ''), 'EUR') +WHERE ps.currency IS NULL OR trim(ps.currency) = ''; diff --git a/bms-front/src/views/price/basic/pay/components/PayConfigDetail.vue b/bms-front/src/views/price/basic/pay/components/PayConfigDetail.vue index 5ab8016d..be025e03 100644 --- a/bms-front/src/views/price/basic/pay/components/PayConfigDetail.vue +++ b/bms-front/src/views/price/basic/pay/components/PayConfigDetail.vue @@ -60,9 +60,10 @@ - + @@ -82,8 +83,27 @@ 添加附加费 - - + + @@ -94,10 +114,52 @@ {{ money(row.amount) }} - + + + + @@ -119,13 +181,21 @@ - + @@ -163,8 +233,9 @@