修复接单物品规则管理
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
-- 修复历史库中迁移记录已存在、但 008/009 的接单字段未实际落库的情况。
|
||||
-- 所有变更均幂等,正常完成过旧迁移的数据库不会受影响。
|
||||
|
||||
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_orders ADD COLUMN IF NOT EXISTS deadline_at TIMESTAMPTZ;
|
||||
ALTER TABLE work_orders ADD COLUMN IF NOT EXISTS timeout_minutes INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE work_orders ADD COLUMN IF NOT EXISTS timeout_policy TEXT NOT NULL DEFAULT 'reopen';
|
||||
|
||||
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;
|
||||
ALTER TABLE work_product_rules ADD COLUMN IF NOT EXISTS timeout_minutes INTEGER NOT NULL DEFAULT 0;
|
||||
ALTER TABLE work_product_rules ADD COLUMN IF NOT EXISTS timeout_policy TEXT NOT NULL DEFAULT 'reopen';
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_work_orders_deadline
|
||||
ON work_orders(status, deadline_at)
|
||||
WHERE deadline_at IS NOT NULL;
|
||||
@@ -391,6 +391,16 @@ export async function getWorkProductRuleByKey(ruleKey: string): Promise<WorkProd
|
||||
return result.rows[0] || null
|
||||
}
|
||||
|
||||
export async function deleteWorkProductRule(
|
||||
ruleId: number | string,
|
||||
): Promise<{ deleted: boolean }> {
|
||||
const result = await query<{ id: number }>(
|
||||
'DELETE FROM work_product_rules WHERE id = $1 RETURNING id',
|
||||
[Number(ruleId)],
|
||||
)
|
||||
return { deleted: Boolean(result.rows[0]) }
|
||||
}
|
||||
|
||||
export async function upsertWorkProductRule(input: {
|
||||
ruleKey: string
|
||||
provider: string
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
createAdminMockWorkOrder,
|
||||
deductAdminWorkOrderPendingDeposit,
|
||||
deleteAdminWorkCategory,
|
||||
deleteAdminWorkProductRule,
|
||||
deleteAdminWorkOrder,
|
||||
deleteAdminWorkerLevel,
|
||||
getAdminWorkerFinanceConfig,
|
||||
@@ -157,6 +158,22 @@ router.post(
|
||||
}),
|
||||
)
|
||||
|
||||
router.delete(
|
||||
'/worker-platform/product-rules/:ruleId',
|
||||
requireAdminRoles(['admin', 'operator']),
|
||||
createJsonHandler((req) => deleteAdminWorkProductRule(String(req.params.ruleId || '')), {
|
||||
successMessage: '接单物品规则已删除',
|
||||
errorMessage: '删除接单物品规则失败',
|
||||
scope: '[admin/worker-platform/product-rules/:ruleId]',
|
||||
audit: (_req, data) => ({
|
||||
action: 'work_product_rule_deleted',
|
||||
targetType: 'work_product_rule',
|
||||
targetId: String(_req.params.ruleId || ''),
|
||||
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
|
||||
}),
|
||||
}),
|
||||
)
|
||||
|
||||
router.get(
|
||||
'/worker-platform/workers',
|
||||
requireAdminRoles(['admin', 'operator', 'support']),
|
||||
|
||||
@@ -21,6 +21,7 @@ import {
|
||||
createWorkerUser,
|
||||
deductPendingDepositUnfreeze,
|
||||
deleteWorkCategory,
|
||||
deleteWorkProductRule,
|
||||
deleteWorkOrder,
|
||||
deleteWorkerLevel,
|
||||
getWorkerFinanceRequestById,
|
||||
@@ -293,6 +294,24 @@ export async function saveAdminWorkProductRule(payload: JsonObject = {}) {
|
||||
return { rule: mapWorkProductRule(rule) }
|
||||
}
|
||||
|
||||
export async function deleteAdminWorkProductRule(ruleId: number | string) {
|
||||
const normalizedRuleId = normalizeOptionalId(ruleId)
|
||||
if (!normalizedRuleId) {
|
||||
throw createHttpError('物品规则 ID 不正确', {
|
||||
statusCode: 400,
|
||||
errorCode: 'work_product_rule_id_invalid',
|
||||
})
|
||||
}
|
||||
const { deleted } = await deleteWorkProductRule(normalizedRuleId)
|
||||
if (!deleted) {
|
||||
throw createHttpError('物品规则不存在或已删除', {
|
||||
statusCode: 404,
|
||||
errorCode: 'work_product_rule_not_found',
|
||||
})
|
||||
}
|
||||
return { deleted }
|
||||
}
|
||||
|
||||
export async function listAdminWorkerUsers(query: JsonObject = {}) {
|
||||
const page = normalizePage(query.page)
|
||||
const pageSize = normalizePageSize(query.pageSize)
|
||||
|
||||
Reference in New Issue
Block a user