在 Yii 2.0 中,编辑与更新租户的任务类型与步骤设置(多条记录、树形结构)的实现 (一)

1、打开任务配置表,如图1

打开任务配置表

图1

2、打开任务步骤配置表,如图2

打开任务步骤配置表

图2

3、现在有新的需求:基于不同的租户,可以自定义其任务配置与任务步骤配置,因此,决定新建 租户的任务配置表、租户的任务步骤配置表,且这 2 张表的数据分别为 任务配置表、任务步骤配置表 的子集

4、新建数据库迁移文件,执行迁移后,表结构如图3

新建数据库迁移文件,执行迁移后,表结构

图3

5、当租户未自定义时,即 租户的任务配置表、租户的任务步骤配置表 中无当前租户的记录时,默认全部勾选 任务配置表、任务步骤配置表 中的所有记录,如图4

当租户未自定义时,即 租户的任务配置表、租户的任务步骤配置表 中无当前租户的记录时,默认全部勾选 任务配置表、任务步骤配置表 中的所有记录

图4

6、新建编辑租户的任务类型与步骤设置的方法文件(/api/rests/config_group_task_step/EditAction.php)

<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace api/rests/config_group_task_step;

use Yii;
use api/models/ConfigTask;
use api/models/ConfigTaskStep;
use api/models/redis/cmc_console/User as RedisCmcConsoleUser;
use api/services/ConfigGroupTaskService;
use api/services/ConfigGroupTaskStepService;
use yii/helpers/ArrayHelper;
use yii/web/UnprocessableEntityHttpException;

/**
 * 编辑租户的任务类型与步骤设置:/config-group-task-steps/edit/my-group-id(config-group-task-step/edit)
 *
 * For more details and usage information on ViewAction, see the [guide article on rest controllers](guide:rest-controllers).
 *
 * @author Qiang Wang <shuijingwanwq@163.com>
 * @since 1.0
 */
class EditAction extends Action
{
    const IS_CHECKED_NO = 0; //是否被勾选:否
    const IS_CHECKED_YES = 1; //是否被勾选:是

    /**
     * Displays a model.
     * @param string $id the primary key of the model.
     * @return array
     * @throws UnprocessableEntityHttpException
     */
    public function run($id)
    {
        // 当前用户的身份实例,未认证用户则为 Null
        /* @var $identity RedisCmcConsoleUser */
        $identity = Yii::$app->user->identity;

        // 比对:group_id,检查其值是否等于:my-group-id
        if ($id != 'my-group-id') {
            throw new UnprocessableEntityHttpException(Yii::t('error', '226053'), 226053);
        }

        // 查找资源(任务配置)列表
        $configTaskItems = ConfigTask::find()->isDeletedNo()->all();

        // 查找资源(任务步骤配置)列表
        $configTaskStepItems = ConfigTaskStep::find()->isDeletedNo()->isDefaultYes()->all();

        // 基于租户ID返回数据模型(任务配置)列表
        $configGroupTaskItems = ConfigGroupTaskService::findConfigTaskModelsByGroupId($identity->group_id);

        // 基于租户ID返回数据模型(任务步骤配置)列表
        $configGroupTaskStepItems = ConfigGroupTaskStepService::findConfigTaskStepModelsByGroupId($identity->group_id);

        // 基于租户的任务步骤配置覆盖任务步骤配置,且基于任务配置ID分组
        $configTaskStepGroupItems = [];
        foreach ($configTaskStepItems as $configTaskStepItem) {
            $configTaskStepGroupItem = [
                'id' => $configTaskStepItem->id,
                'config_task_id' => $configTaskStepItem->config_task_id,
                'code' => $configTaskStepItem->step_code,
                'name' => $configTaskStepItem->step_name,
                'sort_order' => $configTaskStepItem->sort_order,
                'is_default' => $configTaskStepItem->is_default,
                'is_checked' => static::IS_CHECKED_NO,
            ];
            if (isset($configGroupTaskStepItems[$configTaskStepItem->id])) {
                $configTaskStepGroupItem['sort_order'] = $configGroupTaskStepItems[$configTaskStepItem->id]->sort_order;
                $configTaskStepGroupItem['is_default'] = $configGroupTaskStepItems[$configTaskStepItem->id]->is_default;
                $configTaskStepGroupItem['is_checked'] = static::IS_CHECKED_YES;
            }
            $configTaskStepGroupItems[$configTaskStepItem->config_task_id][] = $configTaskStepGroupItem;
        }

        $data = [];

        foreach ($configTaskItems as $configTaskItem) {
            // 基于步骤顺序,顺序排列;基于ID,倒序排列
            if (isset($configTaskStepGroupItems[$configTaskItem->id])) {
                ArrayHelper::multisort($configTaskStepGroupItems[$configTaskItem->id], ['sort_order', 'id'], [SORT_ASC, SORT_DESC]);
            } else {
                $configTaskStepGroupItems[$configTaskItem->id] = [];
            }

            $data[] = [
                'id' => $configTaskItem->id,
                'code' => $configTaskItem->code,
                'name' => $configTaskItem->name,
                'is_checked' => isset($configGroupTaskItems[$configTaskItem->id]) ? static::IS_CHECKED_YES: static::IS_CHECKED_NO,
                'steps' => $configTaskStepGroupItems[$configTaskItem->id],
            ];
        }

        return ['code' => 10000, 'message' => Yii::t('success', '126038'), 'data' => $data];
    }
}

7、新建编辑租户的任务类型与步骤设置的服务文件(/common/services/ConfigGroupTaskService.php)

<?php
/**
 * Created by PhpStorm.
 * User: Qiang Wang
 * Date: 2019/11/01
 * Time: 10:19
 */

namespace common/services;

use Yii;
use common/logics/ConfigTask;
use common/logics/ConfigGroupTask;
use yii/helpers/ArrayHelper;

class ConfigGroupTaskService extends Service
{
    /**
     * 基于租户ID返回数据模型列表
     * @param string $groupId 租户ID
     * @return array 一个 ActiveRecord 实例数组
     */
    public static function findConfigTaskModelsByGroupId($groupId)
    {
        // 基于租户ID查找资源(租户的任务配置)列表
        $configGroupTaskItems = ConfigGroupTask::find()->where(['group_id' => $groupId])->all();

        if (empty($configGroupTaskItems)) {
            // 查找资源(任务配置)列表
            $configTaskItems = ConfigTask::find()->isDeletedNo()->indexBy(['id'])->all();
        } else {
            // 基于租户ID查找资源(租户的任务配置、是否被删除:否)列表
            $configGroupTaskIsDeletedNoItems = ConfigGroupTask::findAllByGroupId($groupId);
            // 获取 任务配置ID 值列表
            $configTaskIds = ArrayHelper::getColumn($configGroupTaskIsDeletedNoItems, 'config_task_id');
            // 基于多个ID查找资源(任务配置)列表
            $configTaskItems = ConfigTask::findAllByIds($configTaskIds);
        }

        return $configTaskItems;
    }
}

8、新建编辑租户的任务类型与步骤设置的服务文件(/common/services/ConfigGroupTaskStepService.php)

<?php
/**
 * Created by PhpStorm.
 * User: Qiang Wang
 * Date: 2019/11/01
 * Time: 10:19
 */

namespace common/services;

use Yii;
use common/logics/ConfigTaskStep;
use common/logics/ConfigGroupTaskStep;
use yii/helpers/ArrayHelper;

class ConfigGroupTaskStepService extends Service
{
    /**
     * 基于租户ID返回数据模型(任务步骤配置)列表
     * @param string $groupId 租户ID
     * @return array 一个 ActiveRecord 实例数组
     */
    public static function findConfigTaskStepModelsByGroupId($groupId)
    {
        // 基于租户ID查找资源(租户的任务步骤配置)列表
        $configGroupTaskStepItems = ConfigGroupTaskStep::find()->where(['group_id' => $groupId])->all();

        if (empty($configGroupTaskStepItems)) {
            // 查找资源(任务步骤配置)列表
            $configTaskStepItems = ConfigTaskStep::find()->isDeletedNo()->isDefaultYes()->orderBy(['sort_order' => SORT_ASC, 'id' => SORT_DESC])->indexBy(['id'])->all();
        } else {
            // 基于租户ID查找资源(租户的任务步骤配置、是否被删除:否)列表
            $configGroupTaskStepIsDeletedNoItems = ConfigGroupTaskStep::findAllIsDefaultYesByGroupId($groupId);
            // 获取 任务步骤配置ID 值列表
            $configTaskStepIds = ArrayHelper::getColumn($configGroupTaskStepIsDeletedNoItems, 'config_task_step_id');
            // 基于多个ID查找资源(任务步骤配置)列表
            $configTaskStepIsDefaultYesItems = ConfigTaskStep::findAllIsDefaultYesByIds($configTaskStepIds);
            // 基于租户的任务步骤配置覆盖任务步骤配置
            foreach ($configTaskStepIsDefaultYesItems as $configTaskStepItem) {
                $configTaskStepItem->sort_order = $configGroupTaskStepIsDeletedNoItems[$configTaskStepItem->id]->sort_order;
                $configTaskStepItem->is_default = $configGroupTaskStepIsDeletedNoItems[$configTaskStepItem->id]->is_default;
            }
            // 基于步骤顺序,顺序排列;基于ID,倒序排列
            ArrayHelper::multisort($configTaskStepIsDefaultYesItems, ['sort_order', 'id'], [SORT_ASC, SORT_DESC]);
            // 重建数组索引
            $configTaskStepItems = ArrayHelper::index($configTaskStepIsDefaultYesItems, 'id');
        }

        return $configTaskStepItems;
    }
}

9、在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户未自定义时,即 租户的任务配置表、租户的任务步骤配置表 中无当前租户的记录时,默认全部勾选 任务配置表、任务步骤配置表 中的所有记录,响应数据与执行的 SQL 如下

{
"code": 10000,
"message": "编辑租户的任务类型与步骤设置成功",
"data": [
{
"id": 1,
"code": "tv_broadcast",
"name": "电视播出",
"is_checked": 1,
"steps": [
{
"id": 16,
"config_task_id": 1,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 1,
"config_task_id": 1,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 3,
"config_task_id": 1,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 4,
"config_task_id": 1,
"code": "video_editing",
"name": "视频编辑",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 17,
"config_task_id": 1,
"code": "tandem_list",
"name": "串联单",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 5,
"config_task_id": 1,
"code": "program_render",
"name": "节目上传",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 6,
"config_task_id": 1,
"code": "program_authen",
"name": "节目审查",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 2,
"code": "inter_view",
"name": "采访任务",
"is_checked": 1,
"steps": [
{
"id": 7,
"config_task_id": 2,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 18,
"config_task_id": 2,
"code": "material_review",
"name": "素材审核",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 19,
"config_task_id": 2,
"code": "writing",
"name": "撰写稿件",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 20,
"config_task_id": 2,
"code": "writing_draft",
"name": "撰写通稿",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 21,
"config_task_id": 2,
"code": "final_review",
"name": "定稿审核",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 9,
"config_task_id": 2,
"code": "finish_interview",
"name": "结束采访",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 3,
"code": "rich_doc",
"name": "互联网发布",
"is_checked": 1,
"steps": [
{
"id": 22,
"config_task_id": 3,
"code": "retrieval",
"name": "取稿",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 10,
"config_task_id": 3,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 12,
"config_task_id": 3,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 23,
"config_task_id": 3,
"code": "newspaper_issued",
"name": "报纸签发",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 24,
"config_task_id": 3,
"code": "wechat_group_reference",
"name": "微信组稿引用",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 25,
"config_task_id": 3,
"code": "website_release",
"name": "网站发布",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 13,
"config_task_id": 3,
"code": "app_release",
"name": "APP发布",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
},
{
"id": 14,
"config_task_id": 3,
"code": "wechat_release",
"name": "微信发布",
"sort_order": 9,
"is_default": 1,
"is_checked": 1
},
{
"id": 15,
"config_task_id": 3,
"code": "blog_release",
"name": "微博发布",
"sort_order": 10,
"is_default": 1,
"is_checked": 1
},
{
"id": 26,
"config_task_id": 3,
"code": "qq_release",
"name": "企鹅号发布",
"sort_order": 11,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 4,
"code": "other",
"name": "手动任务",
"is_checked": 1,
"steps": []
}
]
}
SELECT * FROM `pa_config_task` WHERE `is_deleted`=0
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_task` WHERE `is_deleted`=0
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1) ORDER BY `sort_order`, `id` DESC

10、新建更新租户的任务类型与步骤设置的方法文件(/api/rests/config_group_task_step/UpdateAction.php)

<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace api/rests/config_group_task_step;
use Yii;
use api/models/ConfigGroupTask;
use api/models/ConfigGroupTaskStep;
use api/models/redis/cmc_console/User as RedisCmcConsoleUser;
use api/services/ConfigGroupTaskStepService;
use yii/base/Model;
use yii/base/InvalidConfigException;
use yii/helpers/ArrayHelper;
use yii/web/UnprocessableEntityHttpException;
use yii/web/ServerErrorHttpException;
/**
* 更新租户的任务类型与步骤设置:/config-group-task-steps/{group_id}(config-group-task-step/update)
*
* For more details and usage information on CreateAction, see the [guide article on rest controllers](guide:rest-controllers).
*
* @author Qiang Wang <shuijingwanwq@163.com>
* @since 1.0
*/
class UpdateAction extends Action
{
const IS_CHECKED_NO = 0; //是否被勾选:否
const IS_CHECKED_YES = 1; //是否被勾选:是
/**
* @var string the scenario to be assigned to the model before it is validated and updated.
* $id {config_column_id}
*/
public $scenario = Model::SCENARIO_DEFAULT;
/**
* Updates an existing model.
* @param string $id the primary key of the model.
* @return array the model being updated
* @throws InvalidConfigException if a registered parser does not implement the [[RequestParserInterface]].
* @throws ServerErrorHttpException if there is any error when updating the model
* @throws /Throwable
*/
public function run($id)
{
// 当前用户的身份实例,未认证用户则为 Null
/* @var $identity RedisCmcConsoleUser */
$identity = Yii::$app->user->identity;
// 比对:group_id,检查其值是否等于:my-group-id
if ($id != 'my-group-id') {
throw new UnprocessableEntityHttpException(Yii::t('error', '226053'), 226053);
}
/* @var $modelClass ConfigGroupTaskStep */
$modelClass = $this->modelClass;
$requestParams = Yii::$app->getRequest()->getBodyParams();
/* @var $configGroupTaskItem ConfigGroupTask */
// 基于租户ID查找资源(租户的任务配置、是否被删除:否)列表
$configGroupTaskItems = ConfigGroupTask::find()->equalGroupId()->isDeletedNo()->indexBy('config_task_id')->all();
/* @var $configGroupTaskStepItem ConfigGroupTaskStep */
// 基于租户ID查找资源(租户的任务步骤配置、是否被删除:否)列表
$configGroupTaskStepItems = $modelClass::find()->equalGroupId()->isDeletedNo()->indexBy(['config_task_step_id'])->all();
if (!is_array($requestParams)) {
return ['code' => 226010, 'message' => Yii::t('error', '226010')];
}
$configGroupTasks = [];
$configGroupTaskSteps = [];
foreach ($requestParams as $configGroupTaskKey => $configGroupTask) {
// 检查 任务配置的ID、任务配置的是否勾选 是否存在
if (!ArrayHelper::keyExists('id', $configGroupTask) || !ArrayHelper::keyExists('is_checked', $configGroupTask) || !in_array($configGroupTask['is_checked'], [static::IS_CHECKED_NO, static::IS_CHECKED_YES])) {
throw new UnprocessableEntityHttpException(Yii::t('error', '226080'), 226080);
}
if ($configGroupTask['is_checked'] == static::IS_CHECKED_YES) {
$configGroupTasks[$configGroupTask['id']] = [
'config_task_id' => $configGroupTask['id'],
];
}
// 检查 任务步骤配置列表 是否存在
if (ArrayHelper::keyExists('steps', $configGroupTask)) {
foreach ($configGroupTask['steps'] as $configGroupTaskStep) {
// 检查 步骤ID、步骤顺序、步骤是否勾选 是否存在
if (!ArrayHelper::keyExists('id', $configGroupTaskStep) || !ArrayHelper::keyExists('sort_order', $configGroupTaskStep) || !ArrayHelper::keyExists('is_checked', $configGroupTaskStep) || !in_array($configGroupTaskStep['is_checked'], [static::IS_CHECKED_NO, static::IS_CHECKED_YES])) {
throw new UnprocessableEntityHttpException(Yii::t('error', '226080'), 226080);
}
$configGroupTaskSteps[$configGroupTaskStep['id']] = [
'config_task_id' => $configGroupTask['id'],
'config_task_step_id' => $configGroupTaskStep['id'],
'sort_order' => $configGroupTaskStep['sort_order'],
'is_default' => $configGroupTaskStep['is_checked'] == static::IS_CHECKED_YES ? $modelClass::IS_DEFAULT_YES : $modelClass::IS_DEFAULT_NO,
];
}
}
}
/* 租户的任务配置 */
// 使用键名比较计算数组的差集,如果不为空,则删除 (软删除) 出现在 租户的任务配置模型(MySQL) 中但是未出现在 租户的任务配置 中的记录
$configGroupTaskDiffItems = array_diff_key($configGroupTaskItems, $configGroupTasks);
$configGroupTasks = array_values($configGroupTasks);
$configGroupTaskModels = [];
foreach ($configGroupTasks as $configGroupTask) {
if (isset($configGroupTaskItems[$configGroupTask['config_task_id']])) {
$configGroupTaskItems[$configGroupTask['config_task_id']]->scenario = ConfigGroupTask::SCENARIO_UPDATE;
$configGroupTaskModels[] = $configGroupTaskItems[$configGroupTask['config_task_id']];
} else {
$configGroupTaskModels[] = new ConfigGroupTask([
'scenario' => ConfigGroupTask::SCENARIO_UPDATE,
]);
}
}
// 批量填充模型属性
if (!empty($configGroupTaskModels) && !Model::loadMultiple($configGroupTaskModels, $configGroupTasks, '')) {
return ['code' => 226010, 'message' => Yii::t('error', '226010')];
}
// 批量验证模型
if (!empty($configGroupTaskModels) && !Model::validateMultiple($configGroupTaskModels)) {
$configGroupTaskModelsResult = self::handleValidateMultipleError($configGroupTaskModels);
if ($configGroupTaskModelsResult['status'] === false) {
return ['code' => $configGroupTaskModelsResult['code'], 'message' => $configGroupTaskModelsResult['message']];
}
}
/* 租户的任务步骤配置 */
// 使用键名比较计算数组的差集,如果不为空,则删除 (软删除) 出现在 租户的任务步骤配置模型(MySQL) 中但是未出现在 租户的任务步骤配置 中的记录
$configGroupTaskStepDiffItems = array_diff_key($configGroupTaskStepItems, $configGroupTaskSteps);
$configGroupTaskSteps = array_values($configGroupTaskSteps);
$configGroupTaskStepModels = [];
foreach ($configGroupTaskSteps as $configGroupTaskStep) {
if (isset($configGroupTaskStepItems[$configGroupTaskStep['config_task_step_id']])) {
$configGroupTaskStepItems[$configGroupTaskStep['config_task_step_id']]->scenario = ConfigGroupTask::SCENARIO_UPDATE;
$configGroupTaskStepModels[] = $configGroupTaskStepItems[$configGroupTaskStep['config_task_step_id']];
} else {
$configGroupTaskStepModels[] = new $modelClass([
'scenario' => $modelClass::SCENARIO_UPDATE,
]);
}
}
// 批量填充模型属性
if (!empty($configGroupTaskStepModels) && !Model::loadMultiple($configGroupTaskStepModels, $configGroupTaskSteps, '')) {
return ['code' => 226010, 'message' => Yii::t('error', '226010')];
}
// 批量验证模型
if (!empty($configGroupTaskStepModels) && !Model::validateMultiple($configGroupTaskStepModels)) {
$configGroupTaskStepModelsResult = self::handleValidateMultipleError($configGroupTaskStepModels);
if ($configGroupTaskStepModelsResult['status'] === false) {
return ['code' => $configGroupTaskStepModelsResult['code'], 'message' => $configGroupTaskStepModelsResult['message']];
}
}
/* 操作数据(事务) */
$configGroupTaskStepService = new ConfigGroupTaskStepService();
$result = $configGroupTaskStepService->update($configGroupTaskDiffItems, $configGroupTaskModels, $configGroupTaskStepDiffItems, $configGroupTaskStepModels, $identity);
if ($result['status'] === false) {
throw new ServerErrorHttpException($result['message'], $result['code']);
}
return ['code' => 10000, 'message' => Yii::t('success', '126039')];
}
}

11、新建更新租户的任务类型与步骤设置的服务文件(/api/services/ConfigGroupTaskService.php)

<?php
/**
* Created by PhpStorm.
* User: Qiang Wang
* Date: 2019/11/01
* Time: 10:17
*/
namespace api/services;
use Yii;
use yii/web/ServerErrorHttpException;
class ConfigGroupTaskService extends /common/services/ConfigGroupTaskService
{
/**
* 创建租户的任务配置
* @param object $model 对象
*
* @param bool $runValidation 保存记录之前是否执行验证 (调用 [[validate()]]),默认为 true
*
* @return array
* 格式如下:
*
* [
*     'status' => true, // 成功
*     'data' => [ // object
*     ]
* ]
*
* [
*     'status' => false, // 失败
*     'code' => 226081, // 返回码
*     'message' => '', // 说明
* ]
*
* @throws ServerErrorHttpException
*/
public function create($model, $runValidation = true)
{
if ($model->save($runValidation)) {
return ['status' => true, 'data' => $model];
} elseif ($model->hasErrors()) {
$firstError = '';
foreach ($model->getFirstErrors() as $message) {
$firstError = $message;
break;
}
return ['status' => false, 'code' => 226081, 'message' => Yii::t('error', Yii::t('error', Yii::t('error', '226081'), ['first_error' => $firstError]))];
} elseif (!$model->hasErrors()) {
throw new ServerErrorHttpException('Failed to create the object (tenant/'s task configuration) for unknown reason.');
}
}
/**
* 更新租户的任务配置
* @param object $model 对象
*
* @param bool $runValidation 保存记录之前是否执行验证 (调用 [[validate()]]),默认为 true
*
* @return array
* 格式如下:
*
* [
*     'status' => true, // 成功
*     'data' => [ // object
*     ]
* ]
*
* [
*     'status' => false, // 失败
*     'code' => 226082, // 返回码
*     'message' => '', // 说明
* ]
*
* @throws ServerErrorHttpException
*/
public function update($model, $runValidation = true)
{
if ($model->save($runValidation)) {
return ['status' => true, 'data' => $model];
} elseif ($model->hasErrors()) {
$firstError = '';
foreach ($model->getFirstErrors() as $message) {
$firstError = $message;
break;
}
return ['status' => false, 'code' => 226082, 'message' => Yii::t('error', Yii::t('error', Yii::t('error', '226082'), ['first_error' => $firstError]))];
} elseif (!$model->hasErrors()) {
throw new ServerErrorHttpException('Failed to update the object (tenant/'s task configuration) for unknown reason.');
}
}
/**
* 批量删除(删除租户的任务配置)
*
* @param $models
*
* @return bool the saved model or false if saving fails
* @throws /Throwable
*/
public function deleteMultiple($models)
{
$transaction = Yii::$app->db->beginTransaction();
try {
foreach ($models as $model) {
if($model->softDelete() === false) {
throw new ServerErrorHttpException(Yii::t('error', '226083'), 226083);
}
}
$transaction->commit();
return true;
} catch (/Throwable $e) {
$transaction->rollBack();
throw $e;
}
}
}

12、新建更新租户的任务类型与步骤设置的服务文件(/api/services/ConfigGroupTaskStepService.php)

<?php
/**
* Created by PhpStorm.
* User: Qiang Wang
* Date: 2019/11/01
* Time: 10:18
*/
namespace api/services;
use Yii;
use api/models/ConfigGroupTask;
use api/models/ConfigGroupTaskStep;
use yii/web/ServerErrorHttpException;
class ConfigGroupTaskStepService extends /common/services/ConfigGroupTaskStepService
{
/**
* 创建租户的任务步骤配置
* @param object $model 对象
*
* @param bool $runValidation 保存记录之前是否执行验证 (调用 [[validate()]]),默认为 true
*
* @return array
* 格式如下:
*
* [
*     'status' => true, // 成功
*     'data' => [ // object
*     ]
* ]
*
* [
*     'status' => false, // 失败
*     'code' => 226084, // 返回码
*     'message' => '', // 说明
* ]
*
* @throws ServerErrorHttpException
*/
public function create($model, $runValidation = true)
{
if ($model->save($runValidation)) {
return ['status' => true, 'data' => $model];
} elseif ($model->hasErrors()) {
$firstError = '';
foreach ($model->getFirstErrors() as $message) {
$firstError = $message;
break;
}
return ['status' => false, 'code' => 226084, 'message' => Yii::t('error', Yii::t('error', Yii::t('error', '226084'), ['first_error' => $firstError]))];
} elseif (!$model->hasErrors()) {
throw new ServerErrorHttpException('Failed to create the object (tenant/'s task step configuration) for unknown reason.');
}
}
/**
* 添加|还原|更新|删除租户的任务配置、添加|还原|更新|删除租户的任务步骤配置
*
* @param array $deletedConfigGroupTasks 需要删除的租户的任务配置
* 格式如下:
* [
*     [ // object
*         'id' => 1, // ID
*         'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', // 租户ID
*         'config_task_id' => 1, // 任务配置ID
*         'status' => 1, // 状态,0:禁用;1:启用
*         'is_not_isolated' => 0, // 是否跨租户(不隔离),0:否;1:是
*         'is_deleted' => 0, // 是否被删除,0:否;1:是
*         'created_at' => 1572935084, // 创建时间
*         'updated_at' => 1572935084, // 更新时间
*         'deleted_at' => 0, // 删除时间
*     ],
*     ...
* ]
*
* @param array $configGroupTasks 租户的任务配置
* 格式如下:
* [
*     [ // object
*         'config_task_id' => 1, // 任务配置ID
*     ],
*     [ // object
*         'id' => 2, // ID
*         'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', // 租户ID
*         'config_task_id' => 1, // 任务配置ID
*         'status' => 1, // 状态,0:禁用;1:启用
*         'is_not_isolated' => 0, // 是否跨租户(不隔离),0:否;1:是
*         'is_deleted' => 0, // 是否被删除,0:否;1:是
*         'created_at' => 1572935084, // 创建时间
*         'updated_at' => 1572935084, // 更新时间
*         'deleted_at' => 0, // 删除时间
*     ],
*     ...
* ]
*
* @param array $deletedConfigGroupTaskSteps 需要删除的租户的任务步骤配置
* 格式如下:
* [
*     [ // object
*         'id' => 1, // ID
*         'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', // 租户ID
*         'config_task_id' => 1, // 任务配置ID
*         'config_task_step_id' => 16, // 任务步骤配置ID
*         'config_group_task_id' => 1, // 租户的任务配置ID
*         'sort_order' => 1, // 步骤顺序,顺序排列
*         'is_default' => 1, // 是否默认步骤,1:是;0:否
*         'status' => 1, // 状态,0:禁用;1:启用
*         'is_not_isolated' => 0, // 是否跨租户(不隔离),0:否;1:是
*         'is_deleted' => 0, // 是否被删除,0:否;1:是
*         'created_at' => 1572935084, // 创建时间
*         'updated_at' => 1572935084, // 更新时间
*         'deleted_at' => 0, // 删除时间
*     ],
*     ...
* ]
*
*
* @param array $configGroupTaskSteps 租户的任务步骤配置
* 格式如下:
* [
*     [ // object
*         'config_task_id' => 1, // 任务配置ID
*         'config_task_step_id' => 16, // 任务步骤配置ID
*         'sort_order' => 1, // 步骤顺序
*         'is_default' => 1, // 是否默认步骤,1:是;0:否
*     ],
*     [ // object
*         'id' => 2, // ID
*         'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', // 租户ID
*         'config_task_id' => 1, // 任务配置ID
*         'config_task_step_id' => 1, // 任务步骤配置ID
*         'config_group_task_id' => 1, // 租户的任务配置ID
*         'sort_order' => 2, // 步骤顺序,顺序排列
*         'is_default' => 1, // 是否默认步骤,1:是;0:否
*         'status' => 1, // 状态,0:禁用;1:启用
*         'is_not_isolated' => 0, // 是否跨租户(不隔离),0:否;1:是
*         'is_deleted' => 0, // 是否被删除,0:否;1:是
*         'created_at' => 1572935084, // 创建时间
*         'updated_at' => 1572935084, // 更新时间
*         'deleted_at' => 0, // 删除时间
*     ],
*     ...
* ]
*
* @param object $identity 当前用户的身份实例
*
* @return array
* 格式如下:
*
* [
*     'status' => true, // 成功
* ]
*
* @throws /Throwable
*/
public function update($deletedConfigGroupTasks, $configGroupTasks, $deletedConfigGroupTaskSteps, $configGroupTaskSteps, $identity)
{
/* 操作数据(事务) */
$transaction = Yii::$app->db->beginTransaction();
try {
$configGroupTaskService = new ConfigGroupTaskService();
// 使用键名比较计算数组的差集,如果不为空,则删除 (软删除) 出现在 租户的任务配置模型(MySQL) 中但是未出现在 租户的任务配置列表 中的记录
$configGroupTaskService->deleteMultiple($deletedConfigGroupTasks);
// 遍历模型数组,判断在 租户的任务配置 中是否存在,如果不存在则插入,如果存在则更新(已删除则先还原)
foreach ($configGroupTasks as $configGroupTask) {
$configGroupTaskItem = ConfigGroupTask::find()->where(['group_id' => $identity->group_id, 'config_task_id' => $configGroupTask->config_task_id])->one();
/* @var $model ConfigGroupTask */
if (!isset($configGroupTaskItem)) {
$configGroupTask->group_id = $identity->group_id;
$configGroupTask->status = $configGroupTask::STATUS_ENABLED;
$configGroupTask->is_not_isolated = $configGroupTask::IS_NOT_ISOLATED_NO;
$configGroupTask->is_deleted = $configGroupTask::IS_DELETED_NO;
$configGroupTask->deleted_at = $configGroupTask::DELETED_AT_DEFAULT;
$configGroupTaskServiceCreateResult = $configGroupTaskService->create($configGroupTask, false);
if ($configGroupTaskServiceCreateResult['status'] === false) {
throw new ServerErrorHttpException($configGroupTaskServiceCreateResult['message'], $configGroupTaskServiceCreateResult['code']);
}
} else if (isset($configGroupTaskItem)) {
if ($configGroupTaskItem->is_deleted == ConfigGroupTask::IS_DELETED_YES && $configGroupTaskItem->restore() === false) {
throw new ServerErrorHttpException('Failed to restore the object (tenant/'s task configuration) for unknown reason.');
}
}
}
// 使用键名比较计算数组的差集,如果不为空,则删除 (软删除) 出现在 租户的任务步骤配置模型(MySQL) 中但是未出现在 租户的任务步骤配置列表 中的记录
$this->deleteMultiple($deletedConfigGroupTaskSteps);
$configGroupTaskItems = ConfigGroupTask::find()->where(['group_id' => $identity->group_id])->indexBy(['config_task_id'])->all();
// 遍历模型数组,判断在 租户的任务步骤配置 中是否存在,如果不存在则插入,如果存在则更新(已删除则先还原)
foreach ($configGroupTaskSteps as $configGroupTaskStep) {
$configGroupTaskStepItem = ConfigGroupTaskStep::find()->where(['group_id' => $identity->group_id, 'config_task_step_id' => $configGroupTaskStep->config_task_step_id])->one();
/* @var $model ConfigGroupTaskStep */
if (!isset($configGroupTaskStepItem)) {
$configGroupTaskStep->group_id = $identity->group_id;
$configGroupTaskStep->config_group_task_id = isset($configGroupTaskItems[$configGroupTaskStep->config_task_id]) ? $configGroupTaskItems[$configGroupTaskStep->config_task_id]['id'] : 0;
$configGroupTaskStep->status = $configGroupTaskStep::STATUS_ENABLED;
$configGroupTaskStep->is_not_isolated = $configGroupTaskStep::IS_NOT_ISOLATED_NO;
$configGroupTaskStep->is_deleted = $configGroupTaskStep::IS_DELETED_NO;
$configGroupTaskStep->deleted_at = $configGroupTaskStep::DELETED_AT_DEFAULT;
$thisUpdateResult = $this->create($configGroupTaskStep, false);
if ($thisUpdateResult['status'] === false) {
throw new ServerErrorHttpException($thisUpdateResult['message'], $thisUpdateResult['code']);
}
} else if (isset($configGroupTaskStepItem)) {
if ($configGroupTaskStepItem->is_deleted == ConfigGroupTaskStep::IS_DELETED_YES && $configGroupTaskStepItem->restore() === false) {
throw new ServerErrorHttpException('Failed to restore the object (tenant/'s task step configuration) for unknown reason.');
}
$configGroupTaskStepItem->config_group_task_id = isset($configGroupTaskItems[$configGroupTaskStep->config_task_id]) ? $configGroupTaskItems[$configGroupTaskStep->config_task_id]['id'] : 0;
$configGroupTaskStepItem->sort_order = $configGroupTaskStep->sort_order;
$configGroupTaskStepItem->is_default = $configGroupTaskStep->is_default;
if ($configGroupTaskStepItem->save(false)) {
// return ['status' => true, 'data' => $configGroupTaskStepItem];
} elseif ($configGroupTaskStepItem->hasErrors()) {
$firstError = '';
foreach ($configGroupTaskStepItem->getFirstErrors() as $message) {
$firstError = $message;
break;
}
throw new ServerErrorHttpException(Yii::t('error', Yii::t('error', Yii::t('error', '226085'), ['first_error' => $firstError])), 226085);
} elseif (!$configGroupTaskStepItem->hasErrors()) {
throw new ServerErrorHttpException('Failed to update the object (tenant/'s task step configuration) for unknown reason.');
}
}
}
$transaction->commit();
} catch(/Throwable $e) {
$transaction->rollBack();
throw $e;
}
return ['status' => true];
}
/**
* 批量删除(删除租户的任务步骤配置)
*
* @param $models
*
* @return bool the saved model or false if saving fails
* @throws /Throwable
*/
public function deleteMultiple($models)
{
$transaction = Yii::$app->db->beginTransaction();
try {
foreach ($models as $model) {
if($model->softDelete() === false) {
throw new ServerErrorHttpException(Yii::t('error', '226086'), 226086);
}
}
$transaction->commit();
return true;
} catch (/Throwable $e) {
$transaction->rollBack();
throw $e;
}
}
}

13、编辑更新租户的任务设置的模型文件(/api/models/ConfigGroupTask.php)

<?php
/**
* Created by PhpStorm.
* User: Qiang Wang
* Date: 2019/11/01
* Time: 10:07
*/
namespace api/models;
use yii/helpers/ArrayHelper;
class ConfigGroupTask extends /common/logics/ConfigGroupTask
{
const SCENARIO_UPDATE = 'update';
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_UPDATE] = ['config_task_id'];
return $scenarios;
}
/**
* @inheritdoc
*/
public function rules()
{
$rules = [
/* 添加/还原/更新、删除租户的任务配置 */
[['config_task_id'], 'required', 'on' => self::SCENARIO_UPDATE],
['config_task_id', 'exist', 'targetClass' => '/api/models/ConfigTask', 'targetAttribute' => 'id', 'filter' => ['is_deleted' => ConfigTask::IS_DELETED_NO], 'on' => self::SCENARIO_UPDATE],
];
$parentRules = parent::rules();
return ArrayHelper::merge($rules, $parentRules);
}
/**
* {@inheritdoc}
* @return ConfigGroupTaskQuery the active query used by this AR class.
*/
public static function find()
{
return new ConfigGroupTaskQuery(get_called_class());
}
}

14、编辑更新租户的任务步骤设置的模型文件(/api/models/ConfigGroupTaskStep.php)

<?php
/**
* Created by PhpStorm.
* User: Qiang Wang
* Date: 2019/11/01
* Time: 10:09
*/
namespace api/models;
use yii/helpers/ArrayHelper;
class ConfigGroupTaskStep extends /common/logics/ConfigGroupTaskStep
{
const SCENARIO_UPDATE = 'update';
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_UPDATE] = ['config_task_id', 'config_task_step_id', 'sort_order', 'is_default'];
return $scenarios;
}
/**
* @inheritdoc
*/
public function rules()
{
$rules = [
/* 添加/还原/更新、删除租户的任务步骤配置 */
[['config_task_id', 'config_task_step_id', 'sort_order', 'is_default'], 'required', 'on' => self::SCENARIO_UPDATE],
[['config_task_step_id'], 'exist', 'targetClass' => '/api/models/ConfigTaskStep', 'targetAttribute' => ['config_task_step_id' => 'id', 'config_task_id' => 'config_task_id'], 'filter' => ['is_deleted' => ConfigTask::IS_DELETED_NO, 'is_default' => ConfigTaskStep::IS_DEFAULT_YES], 'on' => self::SCENARIO_UPDATE],
];
$parentRules = parent::rules();
return ArrayHelper::merge($rules, $parentRules);
}
/**
* {@inheritdoc}
* @return ConfigGroupTaskStepQuery the active query used by this AR class.
*/
public static function find()
{
return new ConfigGroupTaskStepQuery(get_called_class());
}
}

15、在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(null)与执行的 SQL (未插入数据) 如下,如图5

在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(null)与执行的 SQL (未插入数据) 如下

图5

SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'

16、在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据([])与执行的 SQL (未插入数据) 如下,如图6

在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据([])与执行的 SQL (未插入数据) 如下

图6

SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'

17、在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(全部勾选)与执行的 SQL (分别插入 4 、23 条记录) 如下,打开表,如图7

在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(全部勾选)与执行的 SQL (分别插入 4 、23 条记录) 如下,打开表

图7

[
{
"id": 1,
"is_checked": 1,
"steps": [
{
"id": 16,
"sort_order": 1,
"is_checked": 1
},
{
"id": 1,
"sort_order": 2,
"is_checked": 1
},
{
"id": 3,
"sort_order": 3,
"is_checked": 1
},
{
"id": 4,
"sort_order": 4,
"is_checked": 1
},
{
"id": 17,
"sort_order": 5,
"is_checked": 1
},
{
"id": 5,
"sort_order": 6,
"is_checked": 1
},
{
"id": 6,
"sort_order": 7,
"is_checked": 1
}
]
},
{
"id": 2,
"is_checked": 1,
"steps": [
{
"id": 7,
"sort_order": 1,
"is_checked": 1
},
{
"id": 18,
"sort_order": 2,
"is_checked": 1
},
{
"id": 19,
"sort_order": 3,
"is_checked": 1
},
{
"id": 20,
"sort_order": 4,
"is_checked": 1
},
{
"id": 21,
"sort_order": 5,
"is_checked": 1
},
{
"id": 9,
"sort_order": 6,
"is_checked": 1
}
]
},
{
"id": 3,
"is_checked": 1,
"steps": [
{
"id": 22,
"sort_order": 1,
"is_checked": 1
},
{
"id": 10,
"sort_order": 2,
"is_checked": 1
},
{
"id": 12,
"sort_order": 3,
"is_checked": 1
},
{
"id": 23,
"sort_order": 4,
"is_checked": 1
},
{
"id": 24,
"sort_order": 5,
"is_checked": 1
},
{
"id": 25,
"sort_order": 6,
"is_checked": 1
},
{
"id": 13,
"sort_order": 7,
"is_checked": 1
},
{
"id": 14,
"sort_order": 8,
"is_checked": 1
},
{
"id": 15,
"sort_order": 9,
"is_checked": 1
},
{
"id": 26,
"sort_order": 10,
"is_checked": 1
}
]
},
{
"id": 4,
"is_checked": 1,
"steps": []
}
]
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=1) AND (`is_deleted`=0))
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=2) AND (`is_deleted`=0)) // 总计 4 次执行
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=16) AND (`pa_config_task_step`.`config_task_id`=1) AND ((`is_deleted`=0) AND (`is_default`=1)))
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=1) AND (`pa_config_task_step`.`config_task_id`=1) AND ((`is_deleted`=0) AND (`is_default`=1))) // 总计 23 次执行
Begin transaction
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=1)
INSERT INTO `pa_config_group_task` (`config_task_id`, `group_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (1, '015ce30b116ce86058fa6ab4fea4ac63', 1, 0, 0, 0, 1572935084, 1572935084)
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=2) // 总计 4 次执行
INSERT INTO `pa_config_group_task` (`config_task_id`, `group_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (2, '015ce30b116ce86058fa6ab4fea4ac63', 1, 0, 0, 0, 1572935084, 1572935084) // 总计 4 次执行
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=16)
INSERT INTO `pa_config_group_task_step` (`config_task_id`, `config_task_step_id`, `sort_order`, `is_default`, `group_id`, `config_group_task_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (1, 16, 1, 1, '015ce30b116ce86058fa6ab4fea4ac63', 1, 1, 0, 0, 0, 1572935084, 1572935084)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=1) // 总计 23 次执行
INSERT INTO `pa_config_group_task_step` (`config_task_id`, `config_task_step_id`, `sort_order`, `is_default`, `group_id`, `config_group_task_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (1, 1, 2, 1, '015ce30b116ce86058fa6ab4fea4ac63', 1, 1, 0, 0, 0, 1572935084, 1572935084) // 总计 23 次执行
Commit transaction

18、在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下

{
"code": 10000,
"message": "编辑租户的任务类型与步骤设置成功",
"data": [
{
"id": 1,
"code": "tv_broadcast",
"name": "电视播出",
"is_checked": 1,
"steps": [
{
"id": 16,
"config_task_id": 1,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 1,
"config_task_id": 1,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 3,
"config_task_id": 1,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 4,
"config_task_id": 1,
"code": "video_editing",
"name": "视频编辑",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 17,
"config_task_id": 1,
"code": "tandem_list",
"name": "串联单",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 5,
"config_task_id": 1,
"code": "program_render",
"name": "节目上传",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 6,
"config_task_id": 1,
"code": "program_authen",
"name": "节目审查",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 2,
"code": "inter_view",
"name": "采访任务",
"is_checked": 1,
"steps": [
{
"id": 7,
"config_task_id": 2,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 18,
"config_task_id": 2,
"code": "material_review",
"name": "素材审核",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 19,
"config_task_id": 2,
"code": "writing",
"name": "撰写稿件",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 20,
"config_task_id": 2,
"code": "writing_draft",
"name": "撰写通稿",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 21,
"config_task_id": 2,
"code": "final_review",
"name": "定稿审核",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 9,
"config_task_id": 2,
"code": "finish_interview",
"name": "结束采访",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 3,
"code": "rich_doc",
"name": "互联网发布",
"is_checked": 1,
"steps": [
{
"id": 22,
"config_task_id": 3,
"code": "retrieval",
"name": "取稿",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 10,
"config_task_id": 3,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 12,
"config_task_id": 3,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 23,
"config_task_id": 3,
"code": "newspaper_issued",
"name": "报纸签发",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 24,
"config_task_id": 3,
"code": "wechat_group_reference",
"name": "微信组稿引用",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 25,
"config_task_id": 3,
"code": "website_release",
"name": "网站发布",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 13,
"config_task_id": 3,
"code": "app_release",
"name": "APP发布",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 14,
"config_task_id": 3,
"code": "wechat_release",
"name": "微信发布",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
},
{
"id": 15,
"config_task_id": 3,
"code": "blog_release",
"name": "微博发布",
"sort_order": 9,
"is_default": 1,
"is_checked": 1
},
{
"id": 26,
"config_task_id": 3,
"code": "qq_release",
"name": "企鹅号发布",
"sort_order": 10,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 4,
"code": "other",
"name": "手动任务",
"is_checked": 1,
"steps": []
}
]
}
SELECT * FROM `pa_config_task` WHERE `is_deleted`=0
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task` WHERE (`id` IN (1, 2, 3, 4)) AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_task_step` WHERE (`id` IN (16, 1, 3, 4, 17, 5, 6, 7, 18, 19, 20, 21, 9, 22, 10, 12, 23, 24, 25, 13, 14, 15, 26)) AND (`is_deleted`=0) AND (`is_default`=1)

19、在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(部份勾选,租户的任务配置取消勾选 2 项,租户的任务步骤配置取消勾选 3 项)与执行的 SQL ( 5 条更新语句) 如下,打开表,如图8

在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(部份勾选,租户的任务配置取消勾选 2 项,租户的任务步骤配置取消勾选 3 项)与执行的 SQL ( 5 条更新语句) 如下,打开表

图8

[
{
"id": 1,
"is_checked": 0,
"steps": [
{
"id": 16,
"sort_order": 1,
"is_checked": 0
},
{
"id": 1,
"sort_order": 2,
"is_checked": 1
},
{
"id": 3,
"sort_order": 3,
"is_checked": 1
},
{
"id": 4,
"sort_order": 4,
"is_checked": 1
},
{
"id": 17,
"sort_order": 5,
"is_checked": 1
},
{
"id": 5,
"sort_order": 6,
"is_checked": 1
},
{
"id": 6,
"sort_order": 7,
"is_checked": 1
}
]
},
{
"id": 2,
"is_checked": 1,
"steps": [
{
"id": 7,
"sort_order": 1,
"is_checked": 0
},
{
"id": 18,
"sort_order": 2,
"is_checked": 0
},
{
"id": 19,
"sort_order": 3,
"is_checked": 1
},
{
"id": 20,
"sort_order": 4,
"is_checked": 1
},
{
"id": 21,
"sort_order": 5,
"is_checked": 1
},
{
"id": 9,
"sort_order": 6,
"is_checked": 1
}
]
},
{
"id": 3,
"is_checked": 1,
"steps": [
{
"id": 22,
"sort_order": 1,
"is_checked": 1
},
{
"id": 10,
"sort_order": 2,
"is_checked": 1
},
{
"id": 12,
"sort_order": 3,
"is_checked": 1
},
{
"id": 23,
"sort_order": 4,
"is_checked": 1
},
{
"id": 24,
"sort_order": 5,
"is_checked": 1
},
{
"id": 25,
"sort_order": 6,
"is_checked": 1
},
{
"id": 13,
"sort_order": 7,
"is_checked": 1
},
{
"id": 14,
"sort_order": 8,
"is_checked": 1
},
{
"id": 15,
"sort_order": 9,
"is_checked": 1
},
{
"id": 26,
"sort_order": 10,
"is_checked": 1
}
]
},
{
"id": 4,
"is_checked": 0,
"steps": []
}
]
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=2) AND (`is_deleted`=0))
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=3) AND (`is_deleted`=0)) // 总计 2 次执行
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=16) AND (`pa_config_task_step`.`config_task_id`=1) AND ((`is_deleted`=0) AND (`is_default`=1)))
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=1) AND (`pa_config_task_step`.`config_task_id`=1) AND ((`is_deleted`=0) AND (`is_default`=1))) // 总计 23 次执行
Begin transaction
UPDATE `pa_config_group_task` SET `is_deleted`=1, `deleted_at`=1572939461 WHERE `id`=1
UPDATE `pa_config_group_task` SET `is_deleted`=1, `deleted_at`=1572939461 WHERE `id`=4 // 总计 23 次执行
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=2)
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=3) // 总计 2 次执行
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=16)
UPDATE `pa_config_group_task_step` SET `is_default`=0, `updated_at`=1572939461 WHERE `id`=1
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=7) // 总计 2 次执行
UPDATE `pa_config_group_task_step` SET `is_default`=0, `updated_at`=1572939461 WHERE `id`=8 // 总计 3 次执行
Commit transaction

20、在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下,如图9

在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下

图9

{
"code": 10000,
"message": "编辑租户的任务类型与步骤设置成功",
"data": [
{
"id": 1,
"code": "tv_broadcast",
"name": "电视播出",
"is_checked": 0,
"steps": [
{
"id": 16,
"config_task_id": 1,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 0
},
{
"id": 1,
"config_task_id": 1,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 3,
"config_task_id": 1,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 4,
"config_task_id": 1,
"code": "video_editing",
"name": "视频编辑",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 17,
"config_task_id": 1,
"code": "tandem_list",
"name": "串联单",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 5,
"config_task_id": 1,
"code": "program_render",
"name": "节目上传",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 6,
"config_task_id": 1,
"code": "program_authen",
"name": "节目审查",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 2,
"code": "inter_view",
"name": "采访任务",
"is_checked": 1,
"steps": [
{
"id": 7,
"config_task_id": 2,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 0
},
{
"id": 18,
"config_task_id": 2,
"code": "material_review",
"name": "素材审核",
"sort_order": 2,
"is_default": 1,
"is_checked": 0
},
{
"id": 19,
"config_task_id": 2,
"code": "writing",
"name": "撰写稿件",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 20,
"config_task_id": 2,
"code": "writing_draft",
"name": "撰写通稿",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 21,
"config_task_id": 2,
"code": "final_review",
"name": "定稿审核",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 9,
"config_task_id": 2,
"code": "finish_interview",
"name": "结束采访",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 3,
"code": "rich_doc",
"name": "互联网发布",
"is_checked": 1,
"steps": [
{
"id": 22,
"config_task_id": 3,
"code": "retrieval",
"name": "取稿",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 10,
"config_task_id": 3,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 12,
"config_task_id": 3,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 23,
"config_task_id": 3,
"code": "newspaper_issued",
"name": "报纸签发",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 24,
"config_task_id": 3,
"code": "wechat_group_reference",
"name": "微信组稿引用",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 25,
"config_task_id": 3,
"code": "website_release",
"name": "网站发布",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 13,
"config_task_id": 3,
"code": "app_release",
"name": "APP发布",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 14,
"config_task_id": 3,
"code": "wechat_release",
"name": "微信发布",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
},
{
"id": 15,
"config_task_id": 3,
"code": "blog_release",
"name": "微博发布",
"sort_order": 9,
"is_default": 1,
"is_checked": 1
},
{
"id": 26,
"config_task_id": 3,
"code": "qq_release",
"name": "企鹅号发布",
"sort_order": 10,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 4,
"code": "other",
"name": "手动任务",
"is_checked": 0,
"steps": []
}
]
}
SELECT * FROM `pa_config_task` WHERE `is_deleted`=0
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task` WHERE (`id` IN (2, 3)) AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_task_step` WHERE (`id` IN (1, 3, 4, 17, 5, 6, 19, 20, 21, 9, 22, 10, 12, 23, 24, 25, 13, 14, 15, 26)) AND (`is_deleted`=0) AND (`is_default`=1)

21、在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(删除第 1 个对象,即删除第 1 个租户的任务配置(数量为 1) 及其下的所有任务步骤配置(数量为 7))与执行的 SQL ( 7 条软删除语句,因为租户的任务配置早已被软删除) 如下,打开表,如图10

在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(删除第 1 个对象,即删除第 1 个租户的任务配置(数量为 1) 及其下的所有任务步骤配置(数量为 7))与执行的 SQL ( 7 条软删除语句,因为租户的任务配置早已被软删除) 如下,打开表

图10

[
{
"id": 2,
"is_checked": 1,
"steps": [
{
"id": 7,
"sort_order": 1,
"is_checked": 0
},
{
"id": 18,
"sort_order": 2,
"is_checked": 0
},
{
"id": 19,
"sort_order": 3,
"is_checked": 1
},
{
"id": 20,
"sort_order": 4,
"is_checked": 1
},
{
"id": 21,
"sort_order": 5,
"is_checked": 1
},
{
"id": 9,
"sort_order": 6,
"is_checked": 1
}
]
},
{
"id": 3,
"is_checked": 1,
"steps": [
{
"id": 22,
"sort_order": 1,
"is_checked": 1
},
{
"id": 10,
"sort_order": 2,
"is_checked": 1
},
{
"id": 12,
"sort_order": 3,
"is_checked": 1
},
{
"id": 23,
"sort_order": 4,
"is_checked": 1
},
{
"id": 24,
"sort_order": 5,
"is_checked": 1
},
{
"id": 25,
"sort_order": 6,
"is_checked": 1
},
{
"id": 13,
"sort_order": 7,
"is_checked": 1
},
{
"id": 14,
"sort_order": 8,
"is_checked": 1
},
{
"id": 15,
"sort_order": 9,
"is_checked": 1
},
{
"id": 26,
"sort_order": 10,
"is_checked": 1
}
]
},
{
"id": 4,
"is_checked": 0,
"steps": []
}
]
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=2) AND (`is_deleted`=0))
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=3) AND (`is_deleted`=0)) // 总计 2 次执行
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=7) AND (`pa_config_task_step`.`config_task_id`=2) AND ((`is_deleted`=0) AND (`is_default`=1)))
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=18) AND (`pa_config_task_step`.`config_task_id`=2) AND ((`is_deleted`=0) AND (`is_default`=1))) // 总计 16 次执行
Begin transaction
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=2)
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=3) // 总计 2 次执行
UPDATE `pa_config_group_task_step` SET `is_deleted`=1, `deleted_at`=1572940590 WHERE `id`=1
UPDATE `pa_config_group_task_step` SET `is_deleted`=1, `deleted_at`=1572940590 WHERE `id`=2 // 总计 7 次执行
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=7)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=18) // 总计 16 次执行
Commit transaction

22、在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下,如图11

在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下

图11

{
"code": 10000,
"message": "编辑租户的任务类型与步骤设置成功",
"data": [
{
"id": 1,
"code": "tv_broadcast",
"name": "电视播出",
"is_checked": 0,
"steps": [
{
"id": 16,
"config_task_id": 1,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 0
},
{
"id": 1,
"config_task_id": 1,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 0
},
{
"id": 3,
"config_task_id": 1,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 4,
"is_default": 1,
"is_checked": 0
},
{
"id": 4,
"config_task_id": 1,
"code": "video_editing",
"name": "视频编辑",
"sort_order": 5,
"is_default": 1,
"is_checked": 0
},
{
"id": 17,
"config_task_id": 1,
"code": "tandem_list",
"name": "串联单",
"sort_order": 6,
"is_default": 1,
"is_checked": 0
},
{
"id": 5,
"config_task_id": 1,
"code": "program_render",
"name": "节目上传",
"sort_order": 7,
"is_default": 1,
"is_checked": 0
},
{
"id": 6,
"config_task_id": 1,
"code": "program_authen",
"name": "节目审查",
"sort_order": 8,
"is_default": 1,
"is_checked": 0
}
]
},
{
"id": 2,
"code": "inter_view",
"name": "采访任务",
"is_checked": 1,
"steps": [
{
"id": 7,
"config_task_id": 2,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 0
},
{
"id": 18,
"config_task_id": 2,
"code": "material_review",
"name": "素材审核",
"sort_order": 2,
"is_default": 1,
"is_checked": 0
},
{
"id": 19,
"config_task_id": 2,
"code": "writing",
"name": "撰写稿件",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 20,
"config_task_id": 2,
"code": "writing_draft",
"name": "撰写通稿",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 21,
"config_task_id": 2,
"code": "final_review",
"name": "定稿审核",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 9,
"config_task_id": 2,
"code": "finish_interview",
"name": "结束采访",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 3,
"code": "rich_doc",
"name": "互联网发布",
"is_checked": 1,
"steps": [
{
"id": 22,
"config_task_id": 3,
"code": "retrieval",
"name": "取稿",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 10,
"config_task_id": 3,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 12,
"config_task_id": 3,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 23,
"config_task_id": 3,
"code": "newspaper_issued",
"name": "报纸签发",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 24,
"config_task_id": 3,
"code": "wechat_group_reference",
"name": "微信组稿引用",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 25,
"config_task_id": 3,
"code": "website_release",
"name": "网站发布",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 13,
"config_task_id": 3,
"code": "app_release",
"name": "APP发布",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 14,
"config_task_id": 3,
"code": "wechat_release",
"name": "微信发布",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
},
{
"id": 15,
"config_task_id": 3,
"code": "blog_release",
"name": "微博发布",
"sort_order": 9,
"is_default": 1,
"is_checked": 1
},
{
"id": 26,
"config_task_id": 3,
"code": "qq_release",
"name": "企鹅号发布",
"sort_order": 10,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 4,
"code": "other",
"name": "手动任务",
"is_checked": 0,
"steps": []
}
]
}
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task` WHERE (`id` IN (2, 3)) AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_task_step` WHERE (`id` IN (19, 20, 21, 9, 22, 10, 12, 23, 24, 25, 13, 14, 15, 26)) AND (`is_deleted`=0) AND (`is_default`=1)

23、在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(全部勾选)与执行的 SQL (分别软还原 2 、9 条记录) 如下,打开表,如图12

在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(全部勾选)与执行的 SQL (分别软还原 2 、9 条记录) 如下,打开表

图12

[
{
"id": 1,
"is_checked": 1,
"steps": [
{
"id": 16,
"sort_order": 1,
"is_checked": 1
},
{
"id": 1,
"sort_order": 2,
"is_checked": 1
},
{
"id": 3,
"sort_order": 3,
"is_checked": 1
},
{
"id": 4,
"sort_order": 4,
"is_checked": 1
},
{
"id": 17,
"sort_order": 5,
"is_checked": 1
},
{
"id": 5,
"sort_order": 6,
"is_checked": 1
},
{
"id": 6,
"sort_order": 7,
"is_checked": 1
}
]
},
{
"id": 2,
"is_checked": 1,
"steps": [
{
"id": 7,
"sort_order": 1,
"is_checked": 1
},
{
"id": 18,
"sort_order": 2,
"is_checked": 1
},
{
"id": 19,
"sort_order": 3,
"is_checked": 1
},
{
"id": 20,
"sort_order": 4,
"is_checked": 1
},
{
"id": 21,
"sort_order": 5,
"is_checked": 1
},
{
"id": 9,
"sort_order": 6,
"is_checked": 1
}
]
},
{
"id": 3,
"is_checked": 1,
"steps": [
{
"id": 22,
"sort_order": 1,
"is_checked": 1
},
{
"id": 10,
"sort_order": 2,
"is_checked": 1
},
{
"id": 12,
"sort_order": 3,
"is_checked": 1
},
{
"id": 23,
"sort_order": 4,
"is_checked": 1
},
{
"id": 24,
"sort_order": 5,
"is_checked": 1
},
{
"id": 25,
"sort_order": 6,
"is_checked": 1
},
{
"id": 13,
"sort_order": 7,
"is_checked": 1
},
{
"id": 14,
"sort_order": 8,
"is_checked": 1
},
{
"id": 15,
"sort_order": 9,
"is_checked": 1
},
{
"id": 26,
"sort_order": 10,
"is_checked": 1
}
]
},
{
"id": 4,
"is_checked": 1,
"steps": []
}
]
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=1) AND (`is_deleted`=0))
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=2) AND (`is_deleted`=0)) // 总计 4 次执行
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=16) AND (`pa_config_task_step`.`config_task_id`=1) AND ((`is_deleted`=0) AND (`is_default`=1)))
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=1) AND (`pa_config_task_step`.`config_task_id`=1) AND ((`is_deleted`=0) AND (`is_default`=1))) // 总计 23 次执行
Begin transaction
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=1)
UPDATE `pa_config_group_task` SET `is_deleted`=0, `deleted_at`=0 WHERE `id`=1
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=2) // 总计 4 次执行
UPDATE `pa_config_group_task` SET `is_deleted`=0, `deleted_at`=0 WHERE `id`=4 // 总计 2 次执行
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=16)
UPDATE `pa_config_group_task_step` SET `is_deleted`=0, `deleted_at`=0 WHERE `id`=1
UPDATE `pa_config_group_task_step` SET `is_default`=1, `updated_at`=1572942440 WHERE `id`=1
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=1) // 总计 23 次执行
UPDATE `pa_config_group_task_step` SET `is_deleted`=0, `deleted_at`=0 WHERE `id`=2 // 总计 7 次执行
UPDATE `pa_config_group_task_step` SET `is_default`=1, `updated_at`=1572942440 WHERE `id`=8 // 总计 3 次执行
Commit transaction

24、在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下

{
"code": 10000,
"message": "编辑租户的任务类型与步骤设置成功",
"data": [
{
"id": 1,
"code": "tv_broadcast",
"name": "电视播出",
"is_checked": 1,
"steps": [
{
"id": 16,
"config_task_id": 1,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 1,
"config_task_id": 1,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 3,
"config_task_id": 1,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 4,
"config_task_id": 1,
"code": "video_editing",
"name": "视频编辑",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 17,
"config_task_id": 1,
"code": "tandem_list",
"name": "串联单",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 5,
"config_task_id": 1,
"code": "program_render",
"name": "节目上传",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 6,
"config_task_id": 1,
"code": "program_authen",
"name": "节目审查",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 2,
"code": "inter_view",
"name": "采访任务",
"is_checked": 1,
"steps": [
{
"id": 7,
"config_task_id": 2,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 18,
"config_task_id": 2,
"code": "material_review",
"name": "素材审核",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 19,
"config_task_id": 2,
"code": "writing",
"name": "撰写稿件",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 20,
"config_task_id": 2,
"code": "writing_draft",
"name": "撰写通稿",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 21,
"config_task_id": 2,
"code": "final_review",
"name": "定稿审核",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 9,
"config_task_id": 2,
"code": "finish_interview",
"name": "结束采访",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 3,
"code": "rich_doc",
"name": "互联网发布",
"is_checked": 1,
"steps": [
{
"id": 22,
"config_task_id": 3,
"code": "retrieval",
"name": "取稿",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 10,
"config_task_id": 3,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 12,
"config_task_id": 3,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 23,
"config_task_id": 3,
"code": "newspaper_issued",
"name": "报纸签发",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 24,
"config_task_id": 3,
"code": "wechat_group_reference",
"name": "微信组稿引用",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 25,
"config_task_id": 3,
"code": "website_release",
"name": "网站发布",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 13,
"config_task_id": 3,
"code": "app_release",
"name": "APP发布",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 14,
"config_task_id": 3,
"code": "wechat_release",
"name": "微信发布",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
},
{
"id": 15,
"config_task_id": 3,
"code": "blog_release",
"name": "微博发布",
"sort_order": 9,
"is_default": 1,
"is_checked": 1
},
{
"id": 26,
"config_task_id": 3,
"code": "qq_release",
"name": "企鹅号发布",
"sort_order": 10,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 4,
"code": "other",
"name": "手动任务",
"is_checked": 1,
"steps": []
}
]
}
SELECT * FROM `pa_config_task` WHERE `is_deleted`=0
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task` WHERE (`id` IN (1, 2, 3, 4)) AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_task_step` WHERE (`id` IN (16, 1, 3, 4, 17, 5, 6, 7, 18, 19, 20, 21, 9, 22, 10, 12, 23, 24, 25, 13, 14, 15, 26)) AND (`is_deleted`=0) AND (`is_default`=1)

25、截断 租户的任务配置表、租户的任务步骤配置表,在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(删除第 1 个对象,仅保留后 3 个对象,且其中一个对象的所有步骤全部不勾选,其中一个对象勾选部份步骤)与执行的 SQL (分别插入 2 、16 条记录) 如下,打开表,如图13、图14

截断 租户的任务配置表、租户的任务步骤配置表,在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(删除第 1 个对象,仅保留后 3 个对象,且其中一个对象的所有步骤全部不勾选,其中一个对象勾选部份步骤)与执行的 SQL (分别插入 2 、16 条记录) 如下

图13

 

打开表

图14

 

[
{
"id": 2,
"is_checked": 0,
"steps": [
{
"id": 7,
"sort_order": 1,
"is_checked": 0
},
{
"id": 18,
"sort_order": 2,
"is_checked": 0
},
{
"id": 19,
"sort_order": 3,
"is_checked": 0
},
{
"id": 20,
"sort_order": 4,
"is_checked": 0
},
{
"id": 21,
"sort_order": 5,
"is_checked": 0
},
{
"id": 9,
"sort_order": 6,
"is_checked": 0
}
]
},
{
"id": 3,
"is_checked": 1,
"steps": [
{
"id": 22,
"sort_order": 1,
"is_checked": 1
},
{
"id": 10,
"sort_order": 2,
"is_checked": 0
},
{
"id": 12,
"sort_order": 3,
"is_checked": 1
},
{
"id": 23,
"sort_order": 4,
"is_checked": 0
},
{
"id": 24,
"sort_order": 5,
"is_checked": 1
},
{
"id": 25,
"sort_order": 6,
"is_checked": 1
},
{
"id": 13,
"sort_order": 7,
"is_checked": 1
},
{
"id": 14,
"sort_order": 8,
"is_checked": 1
},
{
"id": 15,
"sort_order": 9,
"is_checked": 1
},
{
"id": 26,
"sort_order": 10,
"is_checked": 1
}
]
},
{
"id": 4,
"is_checked": 1,
"steps": []
}
]
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=3) AND (`is_deleted`=0))
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=4) AND (`is_deleted`=0)) // 总计 2 次执行
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=7) AND (`pa_config_task_step`.`config_task_id`=2) AND ((`is_deleted`=0) AND (`is_default`=1)))
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=18) AND (`pa_config_task_step`.`config_task_id`=2) AND ((`is_deleted`=0) AND (`is_default`=1))) // 总计 16 次执行
Begin transaction
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=3)
INSERT INTO `pa_config_group_task` (`config_task_id`, `group_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (3, '015ce30b116ce86058fa6ab4fea4ac63', 1, 0, 0, 0, 1572955001, 1572955001)
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=4) // 总计 2 次执行
INSERT INTO `pa_config_group_task` (`config_task_id`, `group_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (4, '015ce30b116ce86058fa6ab4fea4ac63', 1, 0, 0, 0, 1572955001, 1572955001) // 总计 2 次执行
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=7)
INSERT INTO `pa_config_group_task_step` (`config_task_id`, `config_task_step_id`, `sort_order`, `is_default`, `group_id`, `config_group_task_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (2, 7, 1, 0, '015ce30b116ce86058fa6ab4fea4ac63', 0, 1, 0, 0, 0, 1572955001, 1572955001)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=18) // 总计 16 次执行
INSERT INTO `pa_config_group_task_step` (`config_task_id`, `config_task_step_id`, `sort_order`, `is_default`, `group_id`, `config_group_task_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (2, 18, 2, 0, '015ce30b116ce86058fa6ab4fea4ac63', 0, 1, 0, 0, 0, 1572955001, 1572955001) // 总计 16 次执行
Commit transaction

26、在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下,发现 Bug,如果任务步骤配置没有勾选,那么其字段:步骤顺序、是否默认步骤未覆盖任务步骤配置表中的数据,外在表现便是:用户所设置的步骤顺序不起作用

{
"code": 10000,
"message": "编辑租户的任务类型与步骤设置成功",
"data": [
{
"id": 1,
"code": "tv_broadcast",
"name": "电视播出",
"is_checked": 0,
"steps": [
{
"id": 16,
"config_task_id": 1,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 0
},
{
"id": 1,
"config_task_id": 1,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 0
},
{
"id": 3,
"config_task_id": 1,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 4,
"is_default": 1,
"is_checked": 0
},
{
"id": 4,
"config_task_id": 1,
"code": "video_editing",
"name": "视频编辑",
"sort_order": 5,
"is_default": 1,
"is_checked": 0
},
{
"id": 17,
"config_task_id": 1,
"code": "tandem_list",
"name": "串联单",
"sort_order": 6,
"is_default": 1,
"is_checked": 0
},
{
"id": 5,
"config_task_id": 1,
"code": "program_render",
"name": "节目上传",
"sort_order": 7,
"is_default": 1,
"is_checked": 0
},
{
"id": 6,
"config_task_id": 1,
"code": "program_authen",
"name": "节目审查",
"sort_order": 8,
"is_default": 1,
"is_checked": 0
}
]
},
{
"id": 2,
"code": "inter_view",
"name": "采访任务",
"is_checked": 0,
"steps": [
{
"id": 7,
"config_task_id": 2,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 0
},
{
"id": 18,
"config_task_id": 2,
"code": "material_review",
"name": "素材审核",
"sort_order": 2,
"is_default": 1,
"is_checked": 0
},
{
"id": 19,
"config_task_id": 2,
"code": "writing",
"name": "撰写稿件",
"sort_order": 4,
"is_default": 1,
"is_checked": 0
},
{
"id": 20,
"config_task_id": 2,
"code": "writing_draft",
"name": "撰写通稿",
"sort_order": 5,
"is_default": 1,
"is_checked": 0
},
{
"id": 21,
"config_task_id": 2,
"code": "final_review",
"name": "定稿审核",
"sort_order": 6,
"is_default": 1,
"is_checked": 0
},
{
"id": 9,
"config_task_id": 2,
"code": "finish_interview",
"name": "结束采访",
"sort_order": 7,
"is_default": 1,
"is_checked": 0
}
]
},
{
"id": 3,
"code": "rich_doc",
"name": "互联网发布",
"is_checked": 1,
"steps": [
{
"id": 22,
"config_task_id": 3,
"code": "retrieval",
"name": "取稿",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 10,
"config_task_id": 3,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 0
},
{
"id": 12,
"config_task_id": 3,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 24,
"config_task_id": 3,
"code": "wechat_group_reference",
"name": "微信组稿引用",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 23,
"config_task_id": 3,
"code": "newspaper_issued",
"name": "报纸签发",
"sort_order": 5,
"is_default": 1,
"is_checked": 0
},
{
"id": 25,
"config_task_id": 3,
"code": "website_release",
"name": "网站发布",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 13,
"config_task_id": 3,
"code": "app_release",
"name": "APP发布",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 14,
"config_task_id": 3,
"code": "wechat_release",
"name": "微信发布",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
},
{
"id": 15,
"config_task_id": 3,
"code": "blog_release",
"name": "微博发布",
"sort_order": 9,
"is_default": 1,
"is_checked": 1
},
{
"id": 26,
"config_task_id": 3,
"code": "qq_release",
"name": "企鹅号发布",
"sort_order": 10,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 4,
"code": "other",
"name": "手动任务",
"is_checked": 1,
"steps": []
}
]
}
SELECT * FROM `pa_config_task` WHERE `is_deleted`=0
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task` WHERE (`id` IN (3, 4)) AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_task_step` WHERE (`id` IN (22, 12, 24, 25, 13, 14, 15, 26)) AND (`is_deleted`=0) AND (`is_default`=1)

27、编辑服务文件(/common/services/ConfigGroupTaskStepService.php),以修复 Bug,新增加一个方法的参数($groupId, $isDefaultYes = true)

<?php
/**
* Created by PhpStorm.
* User: Qiang Wang
* Date: 2019/11/01
* Time: 10:19
*/
namespace common/services;
use Yii;
use common/logics/ConfigTaskStep;
use common/logics/ConfigGroupTaskStep;
use yii/helpers/ArrayHelper;
class ConfigGroupTaskStepService extends Service
{
/**
* 基于租户ID返回数据模型(任务步骤配置)列表
* @param string $groupId 租户ID
* @param bool $isDefaultYes 是否添加条件,默认步骤,1:是
* @return array 一个 ActiveRecord 实例数组
*/
public static function findConfigTaskStepModelsByGroupId($groupId, $isDefaultYes = true)
{
// 基于租户ID查找资源(租户的任务步骤配置)列表
$configGroupTaskStepItems = ConfigGroupTaskStep::find()->where(['group_id' => $groupId])->all();
if (empty($configGroupTaskStepItems)) {
// 查找资源(任务步骤配置)列表
if ($isDefaultYes) {
$configTaskStepItems = ConfigTaskStep::find()->isDeletedNo()->isDefaultYes()->orderBy(['sort_order' => SORT_ASC, 'id' => SORT_DESC])->indexBy(['id'])->all();
} else {
$configTaskStepItems = ConfigTaskStep::find()->isDeletedNo()->orderBy(['sort_order' => SORT_ASC, 'id' => SORT_DESC])->indexBy(['id'])->all();
}
} else {
// 基于租户ID查找资源(租户的任务步骤配置、是否被删除:否)列表
if ($isDefaultYes) {
$configGroupTaskStepIsDeletedNoItems = ConfigGroupTaskStep::findAllIsDefaultYesByGroupId($groupId);
} else {
$configGroupTaskStepIsDeletedNoItems = ConfigGroupTaskStep::findAllByGroupId($groupId);
}
// 获取 任务步骤配置ID 值列表
$configTaskStepIds = ArrayHelper::getColumn($configGroupTaskStepIsDeletedNoItems, 'config_task_step_id');
// 基于多个ID查找资源(任务步骤配置)列表
if ($isDefaultYes) {
$configTaskStepIsDeletedNoItems = ConfigTaskStep::findAllIsDefaultYesByIds($configTaskStepIds);
} else {
$configTaskStepIsDeletedNoItems = ConfigTaskStep::findAllByIds($configTaskStepIds);
}
// 基于租户的任务步骤配置覆盖任务步骤配置
foreach ($configTaskStepIsDeletedNoItems as $configTaskStepIsDeletedNoItem) {
$configTaskStepIsDeletedNoItem->sort_order = $configGroupTaskStepIsDeletedNoItems[$configTaskStepIsDeletedNoItem->id]->sort_order;
$configTaskStepIsDeletedNoItem->is_default = $configGroupTaskStepIsDeletedNoItems[$configTaskStepIsDeletedNoItem->id]->is_default;
}
// 基于步骤顺序,顺序排列;基于ID,倒序排列
ArrayHelper::multisort($configTaskStepIsDeletedNoItems, ['sort_order', 'id'], [SORT_ASC, SORT_DESC]);
// 重建数组索引
$configTaskStepItems = ArrayHelper::index($configTaskStepIsDeletedNoItems, 'id');
}
return $configTaskStepItems;
}
}

28、编辑方法文件(/api/rests/config_group_task_step/EditAction.php)

<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace api/rests/config_group_task_step;
use Yii;
use api/models/ConfigTask;
use api/models/ConfigTaskStep;
use api/models/ConfigGroupTaskStep;
use api/models/redis/cmc_console/User as RedisCmcConsoleUser;
use api/services/ConfigGroupTaskService;
use api/services/ConfigGroupTaskStepService;
use yii/helpers/ArrayHelper;
use yii/web/UnprocessableEntityHttpException;
/**
* 编辑租户的任务类型与步骤设置:/config-group-task-steps/edit/my-group-id(config-group-task-step/edit)
*
* For more details and usage information on ViewAction, see the [guide article on rest controllers](guide:rest-controllers).
*
* @author Qiang Wang <shuijingwanwq@163.com>
* @since 1.0
*/
class EditAction extends Action
{
const IS_CHECKED_NO = 0; //是否被勾选:否
const IS_CHECKED_YES = 1; //是否被勾选:是
/**
* Displays a model.
* @param string $id the primary key of the model.
* @return array
* @throws UnprocessableEntityHttpException
*/
public function run($id)
{
// 当前用户的身份实例,未认证用户则为 Null
/* @var $identity RedisCmcConsoleUser */
$identity = Yii::$app->user->identity;
// 比对:group_id,检查其值是否等于:my-group-id
if ($id != 'my-group-id') {
throw new UnprocessableEntityHttpException(Yii::t('error', '226053'), 226053);
}
// 查找资源(任务配置)列表
$configTaskItems = ConfigTask::find()->isDeletedNo()->all();
// 查找资源(任务步骤配置)列表
$configTaskStepItems = ConfigTaskStep::find()->isDeletedNo()->isDefaultYes()->all();
// 基于租户ID返回数据模型(任务配置)列表
$configGroupTaskItems = ConfigGroupTaskService::findConfigTaskModelsByGroupId($identity->group_id);
// 基于租户ID返回数据模型(任务步骤配置)列表
$configGroupTaskStepItems = ConfigGroupTaskStepService::findConfigTaskStepModelsByGroupId($identity->group_id, false);
// 基于租户的任务步骤配置覆盖任务步骤配置,且基于任务配置ID分组
$configTaskStepGroupItems = [];
foreach ($configTaskStepItems as $configTaskStepItem) {
$configTaskStepGroupItem = [
'id' => $configTaskStepItem->id,
'config_task_id' => $configTaskStepItem->config_task_id,
'code' => $configTaskStepItem->step_code,
'name' => $configTaskStepItem->step_name,
'sort_order' => $configTaskStepItem->sort_order,
'is_default' => $configTaskStepItem->is_default,
'is_checked' => static::IS_CHECKED_NO,
];
if (isset($configGroupTaskStepItems[$configTaskStepItem->id])) {
$configTaskStepGroupItem['sort_order'] = $configGroupTaskStepItems[$configTaskStepItem->id]->sort_order;
$configTaskStepGroupItem['is_default'] = $configGroupTaskStepItems[$configTaskStepItem->id]->is_default;
if ($configGroupTaskStepItems[$configTaskStepItem->id]->is_default == ConfigGroupTaskStep::IS_DEFAULT_YES) {
$configTaskStepGroupItem['is_checked'] = static::IS_CHECKED_YES;
}
}
$configTaskStepGroupItems[$configTaskStepItem->config_task_id][] = $configTaskStepGroupItem;
}
$data = [];
foreach ($configTaskItems as $configTaskItem) {
// 基于步骤顺序,顺序排列;基于ID,倒序排列
if (isset($configTaskStepGroupItems[$configTaskItem->id])) {
ArrayHelper::multisort($configTaskStepGroupItems[$configTaskItem->id], ['sort_order', 'id'], [SORT_ASC, SORT_DESC]);
} else {
$configTaskStepGroupItems[$configTaskItem->id] = [];
}
$data[] = [
'id' => $configTaskItem->id,
'code' => $configTaskItem->code,
'name' => $configTaskItem->name,
'is_checked' => isset($configGroupTaskItems[$configTaskItem->id]) ? static::IS_CHECKED_YES: static::IS_CHECKED_NO,
'steps' => $configTaskStepGroupItems[$configTaskItem->id],
];
}
return ['code' => 10000, 'message' => Yii::t('success', '126038'), 'data' => $data];
}
}

29、在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下,已修复 Bug,如果任务步骤配置没有勾选,那么其字段:步骤顺序、是否默认步骤已覆盖任务步骤配置表中的数据,外在表现便是:用户所设置的步骤顺序已起作用

{
"code": 10000,
"message": "编辑租户的任务类型与步骤设置成功",
"data": [
{
"id": 1,
"code": "tv_broadcast",
"name": "电视播出",
"is_checked": 0,
"steps": [
{
"id": 16,
"config_task_id": 1,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 0
},
{
"id": 1,
"config_task_id": 1,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 0
},
{
"id": 3,
"config_task_id": 1,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 4,
"is_default": 1,
"is_checked": 0
},
{
"id": 4,
"config_task_id": 1,
"code": "video_editing",
"name": "视频编辑",
"sort_order": 5,
"is_default": 1,
"is_checked": 0
},
{
"id": 17,
"config_task_id": 1,
"code": "tandem_list",
"name": "串联单",
"sort_order": 6,
"is_default": 1,
"is_checked": 0
},
{
"id": 5,
"config_task_id": 1,
"code": "program_render",
"name": "节目上传",
"sort_order": 7,
"is_default": 1,
"is_checked": 0
},
{
"id": 6,
"config_task_id": 1,
"code": "program_authen",
"name": "节目审查",
"sort_order": 8,
"is_default": 1,
"is_checked": 0
}
]
},
{
"id": 2,
"code": "inter_view",
"name": "采访任务",
"is_checked": 0,
"steps": [
{
"id": 7,
"config_task_id": 2,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 0,
"is_checked": 0
},
{
"id": 18,
"config_task_id": 2,
"code": "material_review",
"name": "素材审核",
"sort_order": 2,
"is_default": 0,
"is_checked": 0
},
{
"id": 19,
"config_task_id": 2,
"code": "writing",
"name": "撰写稿件",
"sort_order": 3,
"is_default": 0,
"is_checked": 0
},
{
"id": 20,
"config_task_id": 2,
"code": "writing_draft",
"name": "撰写通稿",
"sort_order": 4,
"is_default": 0,
"is_checked": 0
},
{
"id": 21,
"config_task_id": 2,
"code": "final_review",
"name": "定稿审核",
"sort_order": 5,
"is_default": 0,
"is_checked": 0
},
{
"id": 9,
"config_task_id": 2,
"code": "finish_interview",
"name": "结束采访",
"sort_order": 6,
"is_default": 0,
"is_checked": 0
}
]
},
{
"id": 3,
"code": "rich_doc",
"name": "互联网发布",
"is_checked": 1,
"steps": [
{
"id": 22,
"config_task_id": 3,
"code": "retrieval",
"name": "取稿",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 10,
"config_task_id": 3,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 0,
"is_checked": 0
},
{
"id": 12,
"config_task_id": 3,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 23,
"config_task_id": 3,
"code": "newspaper_issued",
"name": "报纸签发",
"sort_order": 4,
"is_default": 0,
"is_checked": 0
},
{
"id": 24,
"config_task_id": 3,
"code": "wechat_group_reference",
"name": "微信组稿引用",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 25,
"config_task_id": 3,
"code": "website_release",
"name": "网站发布",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 13,
"config_task_id": 3,
"code": "app_release",
"name": "APP发布",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 14,
"config_task_id": 3,
"code": "wechat_release",
"name": "微信发布",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
},
{
"id": 15,
"config_task_id": 3,
"code": "blog_release",
"name": "微博发布",
"sort_order": 9,
"is_default": 1,
"is_checked": 1
},
{
"id": 26,
"config_task_id": 3,
"code": "qq_release",
"name": "企鹅号发布",
"sort_order": 10,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 4,
"code": "other",
"name": "手动任务",
"is_checked": 1,
"steps": []
}
]
}
SELECT * FROM `pa_config_task` WHERE `is_deleted`=0
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task` WHERE (`id` IN (3, 4)) AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task_step` WHERE (`id` IN (7, 18, 19, 20, 21, 9, 22, 10, 12, 23, 24, 25, 13, 14, 15, 26)) AND (`is_deleted`=0)

30、在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(全部勾选)与执行的 SQL (分别插入 2 、7 条记录,分别更新 0、8 条记录) 如下,打开表,如图15

在 Postman 中 PUT:http://api.pcs-api.localhost/v1/config-group-task-steps/my-group-id ,请求数据(全部勾选)与执行的 SQL (分别插入 2 、7 条记录,分别更新 0、8 条记录) 如下,打开表

图15

[
{
"id": 1,
"is_checked": 1,
"steps": [
{
"id": 16,
"sort_order": 1,
"is_checked": 1
},
{
"id": 1,
"sort_order": 2,
"is_checked": 1
},
{
"id": 3,
"sort_order": 3,
"is_checked": 1
},
{
"id": 4,
"sort_order": 4,
"is_checked": 1
},
{
"id": 17,
"sort_order": 5,
"is_checked": 1
},
{
"id": 5,
"sort_order": 6,
"is_checked": 1
},
{
"id": 6,
"sort_order": 7,
"is_checked": 1
}
]
},
{
"id": 2,
"is_checked": 1,
"steps": [
{
"id": 7,
"sort_order": 1,
"is_checked": 1
},
{
"id": 18,
"sort_order": 2,
"is_checked": 1
},
{
"id": 19,
"sort_order": 3,
"is_checked": 1
},
{
"id": 20,
"sort_order": 4,
"is_checked": 1
},
{
"id": 21,
"sort_order": 5,
"is_checked": 1
},
{
"id": 9,
"sort_order": 6,
"is_checked": 1
}
]
},
{
"id": 3,
"is_checked": 1,
"steps": [
{
"id": 22,
"sort_order": 1,
"is_checked": 1
},
{
"id": 10,
"sort_order": 2,
"is_checked": 1
},
{
"id": 12,
"sort_order": 3,
"is_checked": 1
},
{
"id": 23,
"sort_order": 4,
"is_checked": 1
},
{
"id": 24,
"sort_order": 5,
"is_checked": 1
},
{
"id": 25,
"sort_order": 6,
"is_checked": 1
},
{
"id": 13,
"sort_order": 7,
"is_checked": 1
},
{
"id": 14,
"sort_order": 8,
"is_checked": 1
},
{
"id": 15,
"sort_order": 9,
"is_checked": 1
},
{
"id": 26,
"sort_order": 10,
"is_checked": 1
}
]
},
{
"id": 4,
"is_checked": 1,
"steps": []
}
]
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=1) AND (`is_deleted`=0))
SELECT EXISTS(SELECT * FROM `pa_config_task` WHERE (`pa_config_task`.`id`=2) AND (`is_deleted`=0)) // 总计 4 次执行
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=16) AND (`pa_config_task_step`.`config_task_id`=1) AND ((`is_deleted`=0) AND (`is_default`=1)))
SELECT EXISTS(SELECT * FROM `pa_config_task_step` WHERE (`pa_config_task_step`.`id`=1) AND (`pa_config_task_step`.`config_task_id`=1) AND ((`is_deleted`=0) AND (`is_default`=1))) // 总计 23 次执行
Begin transaction
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=1)
INSERT INTO `pa_config_group_task` (`config_task_id`, `group_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (1, '015ce30b116ce86058fa6ab4fea4ac63', 1, 0, 0, 0, 1573004620, 1573004620)
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_id`=2) // 总计 4 次执行
INSERT INTO `pa_config_group_task` (`config_task_id`, `group_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (2, '015ce30b116ce86058fa6ab4fea4ac63', 1, 0, 0, 0, 1573004620, 1573004620) // 总计 2 次执行
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=16)
INSERT INTO `pa_config_group_task_step` (`config_task_id`, `config_task_step_id`, `sort_order`, `is_default`, `group_id`, `config_group_task_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (1, 16, 1, 1, '015ce30b116ce86058fa6ab4fea4ac63', 3, 1, 0, 0, 0, 1573004620, 1573004620)
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`config_task_step_id`=1) // 总计 23 次执行
INSERT INTO `pa_config_group_task_step` (`config_task_id`, `config_task_step_id`, `sort_order`, `is_default`, `group_id`, `config_group_task_id`, `status`, `is_not_isolated`, `is_deleted`, `deleted_at`, `created_at`, `updated_at`) VALUES (1, 1, 2, 1, '015ce30b116ce86058fa6ab4fea4ac63', 3, 1, 0, 0, 0, 1573004620, 1573004620) // 总计 7 次执行
UPDATE `pa_config_group_task_step` SET `config_group_task_id`=4, `is_default`=1, `updated_at`=1573004620 WHERE `id`=1
UPDATE `pa_config_group_task_step` SET `config_group_task_id`=4, `is_default`=1, `updated_at`=1573004620 WHERE `id`=2 // 总计 6 次执行
UPDATE `pa_config_group_task_step` SET `is_default`=1, `updated_at`=1573004620 WHERE `id`=8
UPDATE `pa_config_group_task_step` SET `is_default`=1, `updated_at`=1573004620 WHERE `id`=10 // 总计 2 次执行
Commit transaction

31、在 Postman 中 GET:http://api.pcs-api.localhost/v1/config-group-task-steps/edit/my-group-id ,当租户已自定义时,即 租户的任务配置表、租户的任务步骤配置表 中有当前租户的记录时,基于租户的相关记录判断是否勾选 任务配置表、任务步骤配置表 中的记录,响应数据与执行的 SQL 如下

{
"code": 10000,
"message": "编辑租户的任务类型与步骤设置成功",
"data": [
{
"id": 1,
"code": "tv_broadcast",
"name": "电视播出",
"is_checked": 1,
"steps": [
{
"id": 16,
"config_task_id": 1,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 1,
"config_task_id": 1,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 3,
"config_task_id": 1,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 4,
"config_task_id": 1,
"code": "video_editing",
"name": "视频编辑",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 17,
"config_task_id": 1,
"code": "tandem_list",
"name": "串联单",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 5,
"config_task_id": 1,
"code": "program_render",
"name": "节目上传",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 6,
"config_task_id": 1,
"code": "program_authen",
"name": "节目审查",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 2,
"code": "inter_view",
"name": "采访任务",
"is_checked": 1,
"steps": [
{
"id": 7,
"config_task_id": 2,
"code": "begin_shot",
"name": "上传素材",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 18,
"config_task_id": 2,
"code": "material_review",
"name": "素材审核",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 19,
"config_task_id": 2,
"code": "writing",
"name": "撰写稿件",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 20,
"config_task_id": 2,
"code": "writing_draft",
"name": "撰写通稿",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 21,
"config_task_id": 2,
"code": "final_review",
"name": "定稿审核",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 9,
"config_task_id": 2,
"code": "finish_interview",
"name": "结束采访",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 3,
"code": "rich_doc",
"name": "互联网发布",
"is_checked": 1,
"steps": [
{
"id": 22,
"config_task_id": 3,
"code": "retrieval",
"name": "取稿",
"sort_order": 1,
"is_default": 1,
"is_checked": 1
},
{
"id": 10,
"config_task_id": 3,
"code": "writing",
"name": "撰写稿件",
"sort_order": 2,
"is_default": 1,
"is_checked": 1
},
{
"id": 12,
"config_task_id": 3,
"code": "manuscript_review",
"name": "稿件审核",
"sort_order": 3,
"is_default": 1,
"is_checked": 1
},
{
"id": 23,
"config_task_id": 3,
"code": "newspaper_issued",
"name": "报纸签发",
"sort_order": 4,
"is_default": 1,
"is_checked": 1
},
{
"id": 24,
"config_task_id": 3,
"code": "wechat_group_reference",
"name": "微信组稿引用",
"sort_order": 5,
"is_default": 1,
"is_checked": 1
},
{
"id": 25,
"config_task_id": 3,
"code": "website_release",
"name": "网站发布",
"sort_order": 6,
"is_default": 1,
"is_checked": 1
},
{
"id": 13,
"config_task_id": 3,
"code": "app_release",
"name": "APP发布",
"sort_order": 7,
"is_default": 1,
"is_checked": 1
},
{
"id": 14,
"config_task_id": 3,
"code": "wechat_release",
"name": "微信发布",
"sort_order": 8,
"is_default": 1,
"is_checked": 1
},
{
"id": 15,
"config_task_id": 3,
"code": "blog_release",
"name": "微博发布",
"sort_order": 9,
"is_default": 1,
"is_checked": 1
},
{
"id": 26,
"config_task_id": 3,
"code": "qq_release",
"name": "企鹅号发布",
"sort_order": 10,
"is_default": 1,
"is_checked": 1
}
]
},
{
"id": 4,
"code": "other",
"name": "手动任务",
"is_checked": 1,
"steps": []
}
]
}
SELECT * FROM `pa_config_task` WHERE `is_deleted`=0
SELECT * FROM `pa_config_task_step` WHERE (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task` WHERE (`id` IN (3, 4, 1, 2)) AND (`is_deleted`=0)
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task_step` WHERE (`id` IN (7, 18, 19, 20, 21, 9, 22, 10, 12, 23, 24, 25, 13, 14, 15, 26, 16, 1, 3, 4, 17, 5, 6)) AND (`is_deleted`=0)

32、基于租户的任务配置,可用于创建任务时,对于 任务配置ID 的验证,编辑任务的模型文件(/api/models/PlanTask.php),新增加验证规则(validateConfigTaskId)

<?php
namespace api/models;
use Yii;
use api/models/redis/cmc_console/User as RedisCmcConsoleUser;
use api/services/ConfigGroupTaskService;
use yii/db/Expression;
use yii/helpers/ArrayHelper;
class PlanTask extends /common/logics/PlanTask
{
const SCENARIO_CREATE = 'create';
/**
* {@inheritdoc}
*/
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[self::SCENARIO_CREATE] = ['plan_id', 'config_column_id', 'title', 'config_task_id', 'occur_at', 'ended_at', 'exec_user_id', 'place', 'address', 'task_info'];
return $scenarios;
}
/**
* @inheritdoc
*/
public function rules()
{
$rules = [
/* 指派(创建任务) */
[['config_column_id'], 'validateConfigColumnId', 'when' => function($model) {
return empty($model->plan_id);
}, 'on' => self::SCENARIO_CREATE],
['config_task_id', 'exist', 'targetClass' => '/api/models/ConfigTask', 'targetAttribute' => 'id', 'filter' => ['is_deleted' => ConfigTask::IS_DELETED_NO, 'status' => ConfigTask::STATUS_ENABLED], 'on' => self::SCENARIO_CREATE], //create
['config_task_id', 'validateConfigTaskId', 'on' => self::SCENARIO_CREATE], //create
[['exec_user_id'], 'validateExecUserId', 'on' => self::SCENARIO_CREATE],
];
$parentRules = parent::rules();
return ArrayHelper::merge($rules, $parentRules);
}
/**
* 验证范围(基于租户ID返回数据模型(任务配置)列表):任务配置ID(场景:创建任务时,检查任务配置ID是否为当前租户所属的任务配置)
*
* @param string $attribute the attribute currently being validated
* @param array $params the additional name-value pairs given in the rule
*/
public function validateConfigTaskId($attribute, $params)
{
if (!$this->hasErrors()) {
// 当前用户的身份实例,未认证用户则为 Null
/* @var $identity RedisCmcConsoleUser */
$identity = Yii::$app->user->identity;
// 基于租户ID返回数据模型(任务配置)列表
$configGroupTaskItems = ConfigGroupTaskService::findConfigTaskModelsByGroupId($identity->group_id);
if (!ArrayHelper::keyExists($this->$attribute, $configGroupTaskItems)) {
$this->addError($attribute, Yii::t('error', Yii::t('error', Yii::t('error', '226087'), ['id' => $this->$attribute])));
}
}
}
响应:422
{
"code": 226004,
"message": "数据验证失败:任务配置ID:1,不属于当前租户所属的任务配置"
}

33、基于租户的任务步骤配置,可用于创建任务时,插入任务步骤表时,可插入哪些步骤,编辑 /api/services/PlanTaskService.php

// 基于租户ID返回数据模型(任务步骤配置)列表
$configGroupTaskStepItems = ConfigGroupTaskStepService::findConfigTaskStepModelsByGroupId($identity->group_id, true);
// 一个多维数组,它由第一级的 config_task_id 分组,并且不在第二级索引
$configGroupTaskStepItems = ArrayHelper::index($configGroupTaskStepItems, null, 'config_task_id');
/* @var PlanTask $model */
foreach ($models as $key => $model) {
$model->group_id = $identity->group_id;
$model->plan_id = $planId;
$model->create_user_id = $identity->id;
$model->create_name = $identity->login_name;
$model->exec_name = $model->userByExecUserId['login_name'];
$model->task_data = serialize([]);
$model->is_united = $isUnited;
$model->is_not_isolated = $isNotIsolated;
if (!$model->save(false)) {
throw new ServerErrorHttpException(Yii::t('error', '202015'), 202015);
}
/* 将模型记录转换为索引数组 */
/* 选题任务步骤 */
$configTaskSteps = isset($configGroupTaskStepItems[$model->config_task_id]) ? $configGroupTaskStepItems[$model->config_task_id] : [];
/* @var ConfigTaskStep $configTaskStep */
foreach ($configTaskSteps as $configTaskStep) {
if ($configTaskStep->status == ConfigTaskStep::STATUS_ENABLED) {
$planTaskStepRows[] = [
$model->group_id,
$model->id,
$model->title,
$configTaskStep->step_code,
$configTaskStep->step_name,
$configTaskStep->sort_order,
$model->create_name,
PlanTaskStep::STATUS_NOT_STARTED,
PlanTaskStep::IS_DELETED_NO,
$time,
$time,
PlanTaskStep::DELETED_AT_DEFAULT,
];
}
}
}

34、基于租户的任务步骤配置,总计 23 个步骤,取消勾选 5 个步骤,创建任务时,插入任务步骤表时,仅插入 18 条记录,执行 SQL 如下,如图16

基于租户的任务步骤配置,总计 23 个步骤,取消勾选 5 个步骤,创建任务时,插入任务步骤表时,仅插入 18 条记录,执行 SQL 如下

图16

SELECT * FROM `pa_config_group_task` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0)
SELECT * FROM `pa_config_task` WHERE (`id` IN (3, 4, 1, 2)) AND (`is_deleted`=0)
Begin transaction
SELECT * FROM `pa_config_group_task_step` WHERE `group_id`='015ce30b116ce86058fa6ab4fea4ac63'
SELECT * FROM `pa_config_group_task_step` WHERE (`group_id`='015ce30b116ce86058fa6ab4fea4ac63') AND (`is_deleted`=0) AND (`is_default`=1)
SELECT * FROM `pa_config_task_step` WHERE (`id` IN (7, 18, 19, 20, 21, 9, 22, 10, 12, 23, 24, 25, 13, 14, 15, 26, 5, 6)) AND (`is_deleted`=0) AND (`is_default`=1)
INSERT INTO `pa_plan_task_step` (`group_id`, `task_id`, `task_title`, `step_code`, `step_name`, `sort_order`, `updated_name`, `status`, `is_deleted`, `created_at`, `updated_at`, `deleted_at`) VALUES ('015ce30b116ce86058fa6ab4fea4ac63', 5, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 1', 'program_render', '节目上传', 6, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 5, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 1', 'program_authen', '节目审查', 7, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 6, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 2', 'begin_shot', '上传素材', 1, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 6, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 2', 'material_review', '素材审核', 2, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 6, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 2', 'writing', '撰写稿件', 3, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 6, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 2', 'writing_draft', '撰写通稿', 4, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 6, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 2', 'final_review', '定稿审核', 5, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 6, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 2', 'finish_interview', '结束采访', 6, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'retrieval', '取稿', 1, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'writing', '撰写稿件', 2, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'manuscript_review', '稿件审核', 3, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'newspaper_issued', '报纸签发', 4, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'wechat_group_reference', '微信组稿引用', 5, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'website_release', '网站发布', 6, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'app_release', 'APP发布', 7, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'wechat_release', '微信发布', 8, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'blog_release', '微博发布', 9, '13281105967', 1, 0, 1573008480, 1573008480, 0), ('015ce30b116ce86058fa6ab4fea4ac63', 7, '深圳市1 - 选题 - 13281105967 - 20191106 - 1 - 3', 'qq_release', '企鹅号发布', 10, '13281105967', 1, 0, 1573008480, 1573008480, 0)

 

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/181413.html

(0)
上一篇 2021年10月31日
下一篇 2021年10月31日

相关推荐

发表回复

登录后才能评论