feat: 为运费批次增加顺丰单号和结算字段,并补上顺丰月结菜单

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-10-21 17:58:43 +08:00
1 parent 9325f8cf61
commit 92c59d67b4
3 files changed
+110 -1

No files matched your search

+4 -1
View File
@@ -1616,7 +1616,10 @@ class BizSampleFreight(Base):
id = Column(String(64), primary_key=True, comment="主键ID")
freight_no = Column(String(32), nullable=False, default="", comment="运费批次号 YF+YYYYMMDD+序号")
transport_mode = Column(String(100), nullable=False, default="", comment="运输方式字典值")
freight_amount = Column(Numeric(18, 2), nullable=False, default=0, comment="运费(元)")
freight_amount = Column(Numeric(18, 2), nullable=True, comment="运费(元),顺丰月结未填时为空")
waybill_no = Column(String(64), nullable=True, comment="顺丰单号")
settle_status = Column(String(8), nullable=True, comment="结算状态 wjs/yjs")
settle_time = Column(DateTime, nullable=True, comment="结算时间")
tenant_no = Column(String(64), nullable=False, default="zkxw", comment="租户编号")
order_num = Column(Integer, nullable=True, comment="排序号")
remark = Column(String(512), nullable=True, comment="备注")
@@ -171,3 +171,13 @@ def test_settled_batch_cannot_delete_or_change_samples():
assert_freight_mutable("wjs", "delete")
assert freight_amount_label("sfkd", Decimal("8")) == "8.00"
assert freight_amount_label("zxc", None) == ""
def test_freight_model_allows_null_amount_and_settlement_columns():
from app.models.models import BizSampleFreight
cols = {column.name: column for column in BizSampleFreight.__table__.columns}
assert cols["freight_amount"].nullable is True
assert cols["waybill_no"].nullable is True
assert cols["settle_status"].nullable is True
assert cols["settle_time"].nullable is True
@@ -0,0 +1,96 @@
-- 顺丰月结:运费可空,增加单号与结算字段;历史顺丰补未结算,不改原金额。
ALTER TABLE biz_sample_freight
MODIFY COLUMN freight_amount DECIMAL(18,2) NULL DEFAULT NULL COMMENT '运费(元),顺丰月结未填时为空',
ADD COLUMN waybill_no VARCHAR(64) NULL DEFAULT NULL COMMENT '顺丰单号' AFTER freight_amount,
ADD COLUMN settle_status VARCHAR(8) NULL DEFAULT NULL COMMENT '结算状态:wjs 未结算,yjs 已结算' AFTER waybill_no,
ADD COLUMN settle_time DATETIME NULL DEFAULT NULL COMMENT '结算时间' AFTER settle_status;
UPDATE biz_sample_freight
SET settle_status = 'wjs'
WHERE del_flag = 0
AND transport_mode = 'sfkd'
AND (settle_status IS NULL OR settle_status = '');
-- 菜单插在缴费财务确认之前。id 尚未占用。
UPDATE sys_menu
SET order_num = IFNULL(order_num, 0) + 1,
update_time = NOW()
WHERE id = '50000000000000000000000000000004'
AND del_flag = 0
AND NOT EXISTS (
SELECT 1 FROM (
SELECT id FROM sys_menu
WHERE id = '50000000000000000000000000000023' AND del_flag = 0
) existing_menu
);
INSERT INTO sys_menu (
id, menu_name, parent_id, menu_type, path, component, perms,
is_frame, visible, status, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
'50000000000000000000000000000023',
'顺丰月结',
'CEL00000000000000000000000000001',
'C',
'sf-express-settlement',
'/cell-storage/sf-express-settlement/index',
'cell-storage:sf-express-settlement:list',
1,
'1',
'1',
'zkxw',
(
SELECT order_num - 1 FROM (
SELECT order_num FROM sys_menu
WHERE id = '50000000000000000000000000000004' AND del_flag = 0
LIMIT 1
) pay_menu
),
'细胞存储:顺丰月结',
NULL,
'',
NOW(),
NULL,
NOW(),
0
FROM DUAL
WHERE NOT EXISTS (
SELECT 1 FROM sys_menu m
WHERE m.del_flag = 0
AND (
m.id = '50000000000000000000000000000023'
OR m.perms = 'cell-storage:sf-express-settlement:list'
)
);
INSERT INTO sys_role_menu (
id, role_id, menu_id, tenant_no, order_num, remark,
create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
MD5(CONCAT(r.id, '|50000000000000000000000000000023')),
r.id,
'50000000000000000000000000000023',
IFNULL(NULLIF(r.tenant_no, ''), 'zkxw'),
0,
'grant sf-express settlement to payment-confirm roles',
NULL,
'',
NOW(),
NULL,
NOW(),
0
FROM sys_role r
INNER JOIN sys_role_menu rm
ON rm.role_id = r.id
AND rm.menu_id = '50000000000000000000000000000004'
AND rm.del_flag = 0
WHERE r.del_flag = 0
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu x
WHERE x.role_id = r.id
AND x.menu_id = '50000000000000000000000000000023'
AND x.del_flag = 0
);