drag-create-api/app/admin/logic/Code/CodeModuleCategoryAudit.php

106 lines
4.4 KiB
PHP

<?php
namespace app\admin\logic\Code;
use app\common\model\Code\CodeModuleCategory as ModelCodeModuleCategory;
use app\common\exception\Tool;
class CodeModuleCategoryAudit
{
/**
* 代码块类目审核处理
*
* @param array $code_module_category_guids 类目guid数组
* @param int $code_module_category_audit 审核状态
* @return void
* @date 2023-07-05
* @author xjh
* @since 1.0.0
*/
public static function handleAudit(array $code_module_category_guids, int $code_module_category_audit): void
{
foreach ($code_module_category_guids as $code_module_category_guid) {
$module_category = ModelCodeModuleCategory::find($code_module_category_guid);
if (!$module_category) {
throwErrorMsg("含有不存在的类目!");
}
//主类目审核处理
if ($module_category->code_module_category_parent_guid == ModelCodeModuleCategory::MASTER_DEFAULT) {
self::handleMainCategory($module_category, $code_module_category_audit);
}
//子类目审核处理
else {
self::handleSonCategory($module_category, $code_module_category_audit);
}
}
}
/**
* 代码块主类目审核处理
*
* @param ModelCodeModuleCategory $module_category 模型实例
* @param int $code_module_category_audit 审核状态
* @return void
* @date 2023-07-05
* @author xjh
* @since 1.0.0
*/
public static function handleMainCategory(ModelCodeModuleCategory $module_category, int $code_module_category_audit): void
{
//主类目的审核将会直接将所属的子类目们审核状态连带修改
//(例: 主类目审核通过则子类目将会全员审核状态为通过)
//【主类目更新】
$module_category->code_module_category_audit = $code_module_category_audit;
$module_category->save();
//【所属子类目们的更新】
ModelCodeModuleCategory::where('code_module_category_parent_guid', $module_category->code_module_category_guid)->select()->update([
'code_module_category_audit' => $code_module_category_audit
]);
}
/**
* 代码块子类目审核处理
*
* @param ModelCodeModuleCategory $module_category 模型实例
* @param int $code_module_category_audit 审核状态
* @return void
* @date 2023-07-05
* @author xjh
* @since 1.0.0
*/
public static function handleSonCategory(ModelCodeModuleCategory $module_category, int $code_module_category_audit): void
{
//【当前子类目更新】
$module_category->code_module_category_audit = $code_module_category_audit;
$module_category->save();
//【所属主类目更新】
$module_category_parent_guid = $module_category->code_module_category_parent_guid;
//当前主类目含未审核子类目的数量
$count = ModelCodeModuleCategory::scope('auditUnaudited')->where([
['code_module_category_parent_guid', '=', $module_category_parent_guid],
['code_module_category_guid', '<>', $module_category->code_module_category_guid],
])->count();
//当未审核子类目的数量为0的时候
//【场景一】若此时所有的已审核子类目状态都为不通过,则自动将所属的主类目审核状态设置为不通过
//【场景二】若此时所有的已审核子类目状态包含着通过与不通过的状态,则自动将所属的主类目审核状态设置为通过
if ($count == 0) {
$son_category_audits = ModelCodeModuleCategory::scope('auditPass')->where('code_module_category_parent_guid', $module_category_parent_guid)
->column('code_module_category_audit');
//是否全部子类目审核都不通过
$is_all_not_failed = true;
foreach ($son_category_audits as $son_category_audit) {
if ($son_category_audit != ModelCodeModuleCategory::AUDIT_FAILED) {
$is_all_not_failed = false;
break;
}
}
ModelCodeModuleCategory::update([
'code_module_category_guid' => $module_category_parent_guid,
'code_module_category_audit' => $is_all_not_failed ? ModelCodeModuleCategory::AUDIT_FAILED : ModelCodeModuleCategory::AUDIT_PASS,
]);
}
}
}