# assignTasks
**Repository Path**: liu-kang/assign-tasks
## Basic Information
- **Project Name**: assignTasks
- **Description**: 应用于各种任务派发需求,例如线索分配,工作分配等,支持4种分配方式
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-01
- **Last Updated**: 2025-05-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 任务派发, Redis, 队列
## README
# 任务派发系统
#### 介绍
应用于各种任务派发需求,例如线索分配,工作分配等,支持4种分配方式分别为
1.顺序分配:安装整理的顺序进行依次派发任务
2.指定分配:设置几个特定人员,只对特定人员进行派发
3.比例分配:设置每个人员的权重/比例,按照(权重/(领取次数+1))高低顺序派发
4.均等分配:按照每个人员领取的最低次数依次派发
也支持指定时间段派发,以及指定时间内派发给特定人员(值班需求),可对人员休息等情况修改/凌晨自动修改
基于webman+redis+webman/redis-queue开发
#### 安装教程
下载代码 git clone https://gitee.com/liu-kang/assign-tasks.git
修改文件
1. config>redis.php 修改为自己的redis配置
2. config>webman>redis-queue>redis.php 修改为自己的redis配置
3. util>WorkWxTool.php ErrorPush链接可改为自己的链接,目前只接入企业微信群机器人推送方式可自行添加其他方式
4. config>process.php 修改开启的进程数,以及text协议的端口或者指定调用的IP地址
运行方式:
windows环境:php windows.php
Linux环境:php start.php start -d
调用方式: 采用的RPC(Remote Procedure Call Protocol)远程过程调用协议异步执行。
配置派发设置API
```PHP
TaskService/setTaskSetting
@param taskType string 任务类型、标识 默认 assign
@param taskSign string 分派名称、标识、ID 默认 1
@param allowAssign int 是否允许分派 默认 不允许
@param assignMode int 分派模式 默认4种派发模式 [1:循环派发 2:指定派发 3:比例派发 4:均等派发] 默认 循环派发
@param assignTime string 派发时间段 08:00-23:00,默认 整天
@param assignDuty int 派发值班开启状态 默认 0
@param dutyTime array 值班时间段 仅开启生效 ["08:00-12:00","12:00-13:30"]
@param assignNotViewed int 未查看的任务,是否继续派发 默认 0
@param viewWaitingTime int 任务派发等待时间,单位分钟,未查看继续派发开启生效 默认 5
@param assignType int 派发形式 [1:企业微信群机器人] 默认 1 ,其他方式自行扩展
@param sendAssignUrl string 推送链接 如:企业微信群机器人
```
获取派发设置API
```PHP
TaskService/getTaskSetting
@param taskType string 任务类型、标识 默认 assign
@param taskSign string 分派名称、标识、ID 默认 1
@return taskSign string 任务类型
@return .
@return .
@return .
@return sendAssignUrl string 推送链接
```
配置派发用户API
```PHP
TaskService/setTaskUserList
@param taskType string 任务类型、标识 默认 assign
@param taskSign string 分派名称、标识、ID 默认 1
@param userList array 派发的用户列表
[['user_id'=>1,'in_queue'=>1,'weight'=>1,'username'=>'username','is_regular'=>0,'is_rest'=>0,'is_duty'=>0,'long_duty'=>0,'receive_times'=>0,'duty_times'=>0,'is_appoint'=>0]]
user_id:用户ID,in_queue:是否参与派发,weight:分配权重,username:用户名称,is_regular:派发额外固定第一个,is_rest:是否休息,is_duty:是否值班,long_duty:长期值班,receive_times:可领取次数,若未0则表示不限制,duty_times:值班可领取次数,若未0则表示不限制 is_appoint:指定人,可多人
```
获取派发用户API
```PHP
TaskService/getTaskUserList
@param taskType string 任务类型、标识 默认 assign
@param taskSign string 分派名称、标识、ID 默认 1
@return array 派发的用户列表 [['user_id'=>1,'in_queue'=>1,'weight'=>1,'username'=>'username','is_regular'=>0,'is_rest'=>0,'is_duty'=>0,'long_duty'=>0,'receive_times'=>0,'duty_times'=>0,'is_appoint'=>0]]
user_id:用户ID,in_queue:是否参与派发,weight:分配权重,username:用户名称,is_regular:派发额外固定第一个,is_rest:是否休息,is_duty:是否值班,long_duty:长期值班,receive_times:可领取次数,若未0则表示不限制,duty_times:值班可领取次数,若未0则表示不限制 is_appoint:指定人,可多人
```
任务派发投递API
```PHP
TaskService/doAssignTask
@param taskType string 任务类型、标识 默认 assign
@param taskSign string 分派名称、标识、ID 默认 1
@param data array 分配的数据 包含ID
```
任务领取回执API
```PHP
TaskService/receiveAssignTask
@param taskType string 任务类型、标识 默认 assign
@param taskSign string 分派名称、标识、ID 默认 1
@param data array 分配的数据 包含ID
```
设置任务补发API
```PHP
TaskService/setTaskReissue
@param taskType string 任务类型、标识 默认 assign
@param taskSign string 分派名称、标识、ID 默认 1
@param userInfo array 补发的用户资料
```
调用方法:
```php
function call(string $class, string $method, array $params = [])
{
$client = stream_socket_client('你的rpc地址:IP:端口号');
$request = [
'class' => $class,
'method' => $method,
'args' => [$params],
];
fwrite($client, json_encode($request) . "\n");
$result = fgets($client);
if ($result === false) {
return false;
}
return json_decode($result, true);
}
$result = call("TaskService","setTaskSetting",["taskType"=>'',"taskSign"=>"",...])
dump($result);
```
有问题可咨询
