修改类型
This commit is contained in:
+2
-1
@@ -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)
|
||||
{
|
||||
|
||||
@@ -25,6 +25,9 @@ public class PaySurcharge
|
||||
|
||||
private String feeName;
|
||||
|
||||
/** 附加费配置ID,对应 prc_surcharge.sc_id */
|
||||
private Long scId;
|
||||
|
||||
private String zoneName;
|
||||
|
||||
/** 收费标准原文 */
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
+111
@@ -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<PaySurcharge> 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<String, Long> 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<String, Long> surchargeNameMap()
|
||||
{
|
||||
Map<String, Long> map = new LinkedHashMap<String, Long>();
|
||||
List<PrcSurcharge> 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<PayExtraLine> 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));
|
||||
|
||||
@@ -326,11 +326,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<insert id="insertSurcharges">
|
||||
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
|
||||
<foreach collection="list" item="row" separator=",">
|
||||
(#{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 id="selectSurcharges" resultType="com.bms.price.domain.PaySurcharge">
|
||||
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
|
||||
@@ -378,7 +378,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<select id="selectSurchargesByTerm" resultType="com.bms.price.domain.PaySurcharge">
|
||||
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
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
-- 已合并到 sql/price/pay_surcharge_setup.sql,请执行该脚本。
|
||||
SET NAMES utf8mb4;
|
||||
@@ -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;
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
-- 已合并到 sql/price/pay_surcharge_setup.sql,请执行该脚本。
|
||||
SET NAMES utf8mb4;
|
||||
@@ -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) = '';
|
||||
Reference in New Issue
Block a user