chore: 添加静态资源文件和版本配置文件
添加大量图片、字体、音频等静态资源文件,包括用户界面图片、模板文件和安装界面素材 添加系统版本配置文件(.version)和常量定义文件(.constant) 更新供应商依赖文件,包括Symfony VarDumper组件和相关许可证文件 添加验证码配置文件(captcha.php)和.gitignore规则
This commit is contained in:
310
app/controller/admin/v1/user/UserLabel.php
Normal file
310
app/controller/admin/v1/user/UserLabel.php
Normal file
@@ -0,0 +1,310 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2026 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace app\controller\admin\v1\user;
|
||||
|
||||
use app\controller\admin\AuthController;
|
||||
use app\services\user\label\UserLabelCateServices;
|
||||
use app\services\user\label\UserLabelRelationServices;
|
||||
use app\services\user\label\UserLabelServices;
|
||||
use crmeb\services\wechat\config\WorkConfig;
|
||||
use crmeb\services\wechat\Work;
|
||||
use think\annotation\Inject;
|
||||
|
||||
/**
|
||||
* 用户标签控制器
|
||||
* Class UserLabel
|
||||
* @package app\controller\admin\v1\user
|
||||
*/
|
||||
class UserLabel extends AuthController
|
||||
{
|
||||
|
||||
/**
|
||||
* @var UserLabelServices
|
||||
*/
|
||||
#[Inject]
|
||||
protected UserLabelServices $services;
|
||||
|
||||
/**
|
||||
* 标签列表
|
||||
* @return mixed
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$where = $this->request->getMore([
|
||||
['label_cate', ''],
|
||||
['label_name', ''],
|
||||
['label_type', ''],
|
||||
['status', ''],
|
||||
]);
|
||||
$where['type'] = 0;
|
||||
return $this->success($this->services->getList($where));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取带分类的用户标签列表
|
||||
* @param UserLabelCateServices $userLabelCateServices
|
||||
* @return mixed
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function tree_list(UserLabelCateServices $userLabelCateServices)
|
||||
{
|
||||
[$label_type] = $this->request->getMore([
|
||||
['label_type', ''],
|
||||
], true);
|
||||
$cate = $userLabelCateServices->getLabelCateAll();
|
||||
$data = [];
|
||||
$label = [];
|
||||
if ($cate) {
|
||||
foreach ($cate as $value) {
|
||||
$data[] = [
|
||||
'id' => $value['id'] ?? 0,
|
||||
'value' => $value['id'] ?? 0,
|
||||
'label_cate' => 0,
|
||||
'label_name' => $value['name'] ?? '',
|
||||
'label' => $value['name'] ?? '',
|
||||
'store_id' => $value['store_id'] ?? 0,
|
||||
'type' => $value['type'] ?? 1,
|
||||
];
|
||||
}
|
||||
$label = $this->services->getList(['type' => 0, 'label_type' => $label_type]);
|
||||
$label = $label['list'] ?? [];
|
||||
if ($label) {
|
||||
foreach ($label as &$item) {
|
||||
$item['label'] = $item['label_name'];
|
||||
$item['value'] = $item['id'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->success($this->services->get_tree_children($data, $label));
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加修改标签表单
|
||||
* @return mixed
|
||||
* @throws \FormBuilder\Exception\FormBuilderException
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
[$id, $label_cate] = $this->request->getMore([
|
||||
['id', 0],
|
||||
['label_cate', 0]
|
||||
], true);
|
||||
return $this->success($this->services->add((int)$id, 0, 0, $label_cate));
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存标签表单数据
|
||||
* @param int $id
|
||||
* @return mixed
|
||||
*/
|
||||
public function save()
|
||||
{
|
||||
$data = $this->request->postMore([
|
||||
['id', 0],
|
||||
['label_cate', 0],
|
||||
['label_name', ''],//标签名称数组
|
||||
['label_type', 1],//标签类型,1:手动;2 自动
|
||||
['is_product', 0],//商品条件,1 开启 0 关闭
|
||||
['is_property', 0],//资产条件,1 开启 0 关闭
|
||||
['is_trade', 0],//交易条件,1 开启0 关闭
|
||||
['is_customer', 0],//客户条件,1 开启 0 关闭
|
||||
['is_condition', 1],//条件类型,1 条件满足任一,2全部条件满足
|
||||
['product', []],//商品条件
|
||||
['property', []],//资产条件
|
||||
['trade', []],//交易条件
|
||||
['customer', []],//客户条件
|
||||
['status', 1],//状态
|
||||
]);
|
||||
// if (!$data['label_name'] = trim($data['label_name'])) return $this->fail('会员标签不能为空!');
|
||||
$label_name = is_array($data['label_name']) ? $data['label_name'] : [$data['label_name']];
|
||||
foreach ($label_name as $value) {
|
||||
if ($this->services->fieldExists('label_name', $value, (int)$data['id'])) {
|
||||
return $this->fail("会员标签{$value}已存在!");
|
||||
}
|
||||
}
|
||||
$this->services->saveData((int)$data['id'], $data);
|
||||
return $this->success('保存成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
* @param $id
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
[$id] = $this->request->getMore([
|
||||
['id', 0],
|
||||
], true);
|
||||
if (!$id) return $this->fail('数据不存在');
|
||||
$this->services->delLabel((int)$id);
|
||||
return $this->success('刪除成功!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 标签分类
|
||||
* @param UserLabelCateServices $services
|
||||
* @return mixed
|
||||
*/
|
||||
public function getUserLabel(UserLabelCateServices $services, $uid)
|
||||
{
|
||||
[$uids, $all, $where] = $this->request->postMore([
|
||||
['uids', []],
|
||||
['all', 0],
|
||||
['where', ""],
|
||||
], true);
|
||||
if (count($uids) == 1) {
|
||||
$uid = $uids[0] ?? 0;
|
||||
}
|
||||
return $this->success($services->getUserLabel((int)$uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置用户标签
|
||||
* @param UserLabelRelationServices $services
|
||||
* @param $uid
|
||||
* @return mixed
|
||||
*/
|
||||
public function setUserLabel(UserLabelRelationServices $services, $uid)
|
||||
{
|
||||
[$labels, $unLabelIds] = $this->request->postMore([
|
||||
['label_ids', []],
|
||||
['un_label_ids', []]
|
||||
], true);
|
||||
if (!count($labels) && !count($unLabelIds)) {
|
||||
return $this->fail('请先添加用户标签');
|
||||
}
|
||||
if ($services->setUserLable($uid, $labels) && $services->unUserLabel($uid, $unLabelIds)) {
|
||||
return $this->success('设置成功');
|
||||
} else {
|
||||
return $this->fail('设置失败');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步客户标签
|
||||
* @param WorkConfig $config
|
||||
* @return mixed
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\DbException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
*/
|
||||
public function synchroWorkLabel(WorkConfig $config, Work $work)
|
||||
{
|
||||
if (!$config->corpId) {
|
||||
return $this->fail('请先配置企业微信ID');
|
||||
}
|
||||
$config = $work->getAppConfig(WorkConfig::TYPE_USER);
|
||||
// if (empty($config['secret'])) {
|
||||
// return $this->fail('请先配置企业微信客户secret');
|
||||
// }
|
||||
if ($this->services->authWorkClientLabel()) {
|
||||
return $this->success('已加入消息队列,进行同步。请稍等片刻');
|
||||
} else {
|
||||
return $this->fail('加入消息队列失败');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取标签详情信息
|
||||
* @param int $id 标签ID
|
||||
* @return mixed
|
||||
*/
|
||||
public function info($id)
|
||||
{
|
||||
if (!$id) {
|
||||
return $this->fail('数据不存在');
|
||||
}
|
||||
$info = $this->services->getInfo($id);
|
||||
return $this->success($info);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量处理用户标签检查
|
||||
* @return mixed
|
||||
*/
|
||||
public function batchProcess()
|
||||
{
|
||||
[$labelIds, $action] = $this->request->postMore([
|
||||
['label_ids', []],
|
||||
['action', 'update']
|
||||
], true);
|
||||
|
||||
if (empty($labelIds)) {
|
||||
return $this->fail('请选择要处理的标签');
|
||||
}
|
||||
|
||||
try {
|
||||
/** @var \app\services\user\label\UserLabelBatchProcessServices $batchProcessServices */
|
||||
$batchProcessServices = app()->make(\app\services\user\label\UserLabelBatchProcessServices::class);
|
||||
$result = $batchProcessServices->processLabelChange($labelIds, $action);
|
||||
|
||||
if ($result) {
|
||||
return $this->success('批量处理任务已启动,正在后台处理中,请稍后查看处理结果');
|
||||
} else {
|
||||
return $this->fail('批量处理任务启动失败');
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
return $this->fail('批量处理失败:' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取批量处理状态
|
||||
* @return mixed
|
||||
*/
|
||||
public function batchStatus()
|
||||
{
|
||||
try {
|
||||
/** @var \app\services\user\label\UserLabelBatchProcessServices $batchProcessServices */
|
||||
$batchProcessServices = app()->make(\app\services\user\label\UserLabelBatchProcessServices::class);
|
||||
$status = $batchProcessServices->getBatchProcessStatus();
|
||||
return $this->success($status);
|
||||
} catch (\Throwable $e) {
|
||||
return $this->fail('获取处理状态失败:' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 触发所有自动标签的用户检查
|
||||
* @return mixed
|
||||
*/
|
||||
public function processAllAutoLabels()
|
||||
{
|
||||
try {
|
||||
// 获取所有自动标签
|
||||
$autoLabels = $this->services->getLabelList([
|
||||
'label_type' => 2, // 自动标签
|
||||
'status' => 1 // 启用状态
|
||||
]);
|
||||
|
||||
if (empty($autoLabels)) {
|
||||
return $this->fail('没有找到启用的自动标签');
|
||||
}
|
||||
|
||||
$labelIds = array_column($autoLabels, 'id');
|
||||
|
||||
/** @var \app\services\user\label\UserLabelBatchProcessServices $batchProcessServices */
|
||||
$batchProcessServices = app()->make(\app\services\user\label\UserLabelBatchProcessServices::class);
|
||||
$result = $batchProcessServices->processLabelChange($labelIds, 'check_all');
|
||||
|
||||
if ($result) {
|
||||
return $this->success('所有自动标签检查任务已启动,共处理 ' . count($labelIds) . ' 个标签,正在后台处理中');
|
||||
} else {
|
||||
return $this->fail('批量处理任务启动失败');
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
return $this->fail('处理失败:' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user