接单平台新增拼单与取消接单能力
拼单功能: - 工单/物品规则支持拼单配置(启用、总数量、单价),总价=单价×数量三方联动,启用拼单时工单金额自动同步拼单总价 - 拼单参与按数量冻结比例押金,验收通过后按份额结算报酬,升级统计按数量计入 - 抢单大厅拼单入口:紫色渐变大按钮带单价展示,拼单进度/剩余份数,弹窗输入数量实时预估报酬与押金 - 我的订单展示拼单份额(数量×单价、状态),拼单者各自提交验收,全部提交后管理员统一验收 - 新增 work_order_shares 表与迁移 008 取消接单: - 进行中订单可取消(押金全额退还、工单回大厅),30 天内限 5 次防滥用
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
-- 008_work_order_sharing.sql —— 接单工单拼单能力。
|
||||
--
|
||||
-- 说明:
|
||||
-- 1. 工单可开启拼单:sharing_total_quantity 总数量、sharing_unit_reward 单价(分),
|
||||
-- 打手按单价×数量参与,验收统一通过后按份额结算;
|
||||
-- 2. 拼单与整单抢单不互斥(未拼满时整单仍可抢走);
|
||||
-- 3. 每个打手在同一拼单工单最多一个份额(UNIQUE 约束)。
|
||||
|
||||
ALTER TABLE work_orders ADD COLUMN IF NOT EXISTS sharing_enabled BOOLEAN NOT NULL DEFAULT false;
|
||||
ALTER TABLE work_orders ADD COLUMN IF NOT EXISTS sharing_total_quantity INTEGER NOT NULL DEFAULT 1;
|
||||
ALTER TABLE work_orders ADD COLUMN IF NOT EXISTS sharing_unit_reward INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
-- 物品规则同样支持拼单配置,自动创建工单时带入
|
||||
ALTER TABLE work_product_rules ADD COLUMN IF NOT EXISTS sharing_enabled BOOLEAN NOT NULL DEFAULT false;
|
||||
ALTER TABLE work_product_rules ADD COLUMN IF NOT EXISTS sharing_total_quantity INTEGER NOT NULL DEFAULT 1;
|
||||
ALTER TABLE work_product_rules ADD COLUMN IF NOT EXISTS sharing_unit_reward INTEGER NOT NULL DEFAULT 0;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS work_order_shares (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
work_order_id BIGINT NOT NULL REFERENCES work_orders(id) ON DELETE CASCADE,
|
||||
worker_id BIGINT NOT NULL REFERENCES worker_users(id) ON DELETE CASCADE,
|
||||
quantity INTEGER NOT NULL DEFAULT 1,
|
||||
unit_reward INTEGER NOT NULL DEFAULT 0,
|
||||
share_reward INTEGER NOT NULL DEFAULT 0,
|
||||
share_deposit INTEGER NOT NULL DEFAULT 0,
|
||||
status TEXT NOT NULL DEFAULT 'joined',
|
||||
acceptance_json JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
submitted_at TIMESTAMPTZ,
|
||||
accepted_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL,
|
||||
updated_at TIMESTAMPTZ NOT NULL,
|
||||
UNIQUE (work_order_id, worker_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_work_order_shares_work_order
|
||||
ON work_order_shares(work_order_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_work_order_shares_worker
|
||||
ON work_order_shares(worker_id, status, id DESC);
|
||||
|
||||
COMMENT ON COLUMN work_orders.sharing_enabled IS '是否启用拼单(多打手按数量参与同一工单)';
|
||||
COMMENT ON COLUMN work_orders.sharing_total_quantity IS '拼单总数量';
|
||||
COMMENT ON COLUMN work_orders.sharing_unit_reward IS '拼单单价(分/个),按此结算份额报酬';
|
||||
COMMENT ON TABLE work_order_shares IS '拼单参与份额:打手参与拼单工单的记录';
|
||||
COMMENT ON COLUMN work_order_shares.quantity IS '该打手拼单数量';
|
||||
COMMENT ON COLUMN work_order_shares.unit_reward IS '参与时的拼单单价快照(分)';
|
||||
COMMENT ON COLUMN work_order_shares.share_reward IS '份额报酬 = quantity × unit_reward(分)';
|
||||
COMMENT ON COLUMN work_order_shares.share_deposit IS '份额押金(按总量比例分摊,分)';
|
||||
COMMENT ON COLUMN work_order_shares.status IS 'joined 已参与 / submitted 已提交验收 / accepted 已验收 / cancelled 已取消';
|
||||
COMMENT ON COLUMN work_order_shares.acceptance_json IS '拼单者各自的验收资料';
|
||||
Reference in New Issue
Block a user