DZ X3.5新增 必须未领取指定任务 (互斥的任务分支体系)
Discuz X3.5 新增 必须未领取指定任务 (互斥的任务分支体系)
ALTER TABLE `pre_common_task` ADD `exclusivetaskid` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0' AFTER `relatedtaskid`
在 Discuz X3.5 中,新增了一个功能,允许你设置任务之间的互斥关系。具体来说,你可以通过 `exclusivetaskid` 字段来指定某个任务必须未领取指定任务才能被领取。这个功能可以用于创建互斥的任务分支体系。
你提供的 SQL 语句是正确的,它会在 `pre_common_task` 表中添加一个名为 `exclusivetaskid` 的字段。这个字段的类型是 `SMALLINT(6) UNSIGNED`,默认值为 `0`,并且它会被添加到 `relatedtaskid` 字段之后。
### 具体解释:
- `exclusivetaskid`:这个字段用于存储与当前任务互斥的任务ID。如果用户已经领取了 `exclusivetaskid` 指定的任务,那么他们将无法领取当前任务。
- `SMALLINT(6) UNSIGNED`:这个字段的数据类型是 `SMALLINT`,长度为6,并且是无符号的(即只能存储非负整数)。
- `DEFAULT '0'`:默认值为 `0`,表示如果没有指定互斥任务,则该字段的值为 `0`。
### 如何使用这个功能:
1. **添加字段**:首先,你需要运行你提供的 SQL 语句来添加 `exclusivetaskid` 字段。
ALTER TABLE `pre_common_task` ADD `exclusivetaskid` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0' AFTER `relatedtaskid`;
2. **设置互斥任务**:在后台管理面板中,当你创建或编辑任务时,你可以设置 `exclusivetaskid` 字段的值。这个值应该是另一个任务的ID,表示如果用户已经领取了该任务,则无法领取当前任务。
3. **逻辑处理**:在任务领取的逻辑中,你需要检查用户是否已经领取了 `exclusivetaskid` 指定的任务。如果已经领取,则阻止用户领取当前任务。
### 示例代码:
假设你有一个任务A,它的 `exclusivetaskid` 设置为任务B的ID。那么当用户尝试领取任务A时,系统会检查用户是否已经领取了任务B。如果已经领取了任务B,则用户无法领取任务A。
// 假设 $taskid 是当前任务的ID
// $exclusivetaskid 是当前任务的 exclusivetaskid 字段值
// $uid 是当前用户的ID
$exclusivetaskid = DB::result_first("SELECT exclusivetaskid FROM ".DB::table('common_task')." WHERE taskid='$taskid'");
if ($exclusivetaskid > 0) {
$has_exclusive_task = DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_task_log')." WHERE taskid='$exclusivetaskid' AND uid='$uid'");
if ($has_exclusive_task > 0) {
// 用户已经领取了互斥任务,无法领取当前任务
showmessage('您已经领取了互斥任务,无法领取当前任务。');
}
}
// 用户可以领取当前任务
// 继续执行领取任务的逻辑
### 总结:
通过添加 `exclusivetaskid` 字段,你可以在 Discuz X3.5 中实现任务之间的互斥关系。这个功能可以用于创建复杂的任务分支体系,确保用户在同一时间只能领取某些特定的任务组合。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]