ctms/ctms-api/controllers/gm/v1/PlatController.php
fm453 4b842ebf3d ADD:添加后台管理端接口;
DEL:删除不必要的头部注释;
FIX:修正若干已知错误;
2025-06-30 09:40:13 +08:00

289 lines
7.7 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace api\controllers\gm\v1;
use Yii;
use yii\data\Pagination;
use yii\helpers\Url;
use addons\models\AcPlat;
class PlatController extends Common
{
//主界面
public function actionIndex()
{
$apis = [
'list' => '平台清单',
'detail' => '平台详情',
'add'=>'添加',
'edit'=>'编辑',
'exts'=>'扩展参数',
'delete'=>'删除',
'show'=>'显示',
'hide'=>'隐藏',
'ajax'=>'ajax操作'
];
$this->result('您正使用CMTS-GM系统平台管理接口', $apis, 200);
}
public function actionList()
{
$s = $this->search();
$res = $s['res'];
if (!$res) {
$this->result('没有查询到相应的数据!', [], 0);
}
$data= [
'total'=>$s['query']->count(),
'plats' => $res,
'stores' => $s['stores'],
'page'=>$this->page
];
$this->result('平台查询成功!', $data, 200);
}
public function actionDetail()
{
$pid = $this->pid;
$post = $this->postdata;
$id = isset($post['id']) ? $post['id'] : 0;
if ($id <= 0) {
$this->result('查询参数错误!');
}
$model = new AcPlat();
$detail = $model->findOne($id)->toArray();
if(!$detail) $this->result('未查询到相应数据');
$exts = $this->showExt($detail);
foreach ($exts as $k => $v) {
$detail[$k] = $v;
}
$this->result('查询成功!', $detail, 200);
}
public function actionAdd()
{
//数据预检查、编排
$data = $this->preSave('add');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
$model = new AcPlat();
foreach ($data as $key=>$val) {
$model->$key = $val;
}
$res = $model->save();
$msg = '数据保存失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据保存成功!';
$return = [];
$return['id']= $model->attributes['id']; //获取插入后id;
$this->result($msg,$return, 200);
}
public function actionEdit()
{
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '数据编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '数据编辑成功!';
$return = [];
$return['data']= $detail;
$this->result($msg,$return, 200);
}
//编辑平台参数
public function actionExts()
{
$pid = $this->pid;
if(!$pid) $this->result('您正使用本系统内部接口,禁止非法链接使用!');
if($this->user_id !=1) $this->result('修改失败,平台配置仅支持超级管理员修改!');
$detail = $this->preUpdate();
//数据预检查、编排
$data = $this->preSave('edit');
if(!$data) $this->result('数据预检查未通过,保存失败', $data, 100);
$exts = $this->saveExt();
if(!$exts) $this->result('参数为空,保存失败', [], 100);
$detail->remark = $exts;
$res = $detail->save();
$msg = '参数编辑失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '参数编辑成功!';
$this->result($msg,[], 200);
}
public function actionDelete()
{
$detail = $this->preUpdate();
$data = [];
$data['update_at'] = time();
$data['deleted'] = $detail->deleted + 1;
//保存资料
foreach ($data as $key=>$val) {
$detail->$key = $val;
}
$res = $detail->save();
$msg = '平台删除失败!';
if(!$res) $this->result($msg, [], 100);
$msg = '平台删除成功!';
$this->result($msg,[], 200);
}
public function actionAjax()
{
$detail = $this->preUpdate();
$get = Yii::$app->request->get();
$msg = '';
$errorCode = 0;
$detail->update_at = time();
switch ($get['do']) {
case 'hide':
$detail->status_code = 0;
$res = $detail->save();
if ($res) {
$msg = '平台隐藏标记成功';
$errorCode = 200;
} else {
$msg = '平台隐藏标记失败';
}
break;
case 'show':
$detail->status_code = 1;
$res = $detail->save();
if ($res) {
$msg = '平台显示标记成功';
$errorCode = 200;
} else {
$msg = '平台显示标记失败';
}
break;
default:
break;
}
$this->result($msg,[], $errorCode);
}
private function search(){
$return = [];
$model = new AcPlat();
$where = [];
$where[] = 'and';
$post = $this->postdata;
$search = $post['search'] ?? [];
$search['title'] = isset($search['title']) ? trim(htmlspecialchars_decode($search['title'])) : '';
if (!$search['title']) {
$where[] = ['LIKE', 'title', $search['title']];
}
$where[] = ['=', 'deleted', 0];
$data = $model->find()->where($where);
$pages = new Pagination(['totalCount' => $data->count(), 'pageSize' => $this->pageSize]);
$_orderby = 'orderby DESC,update_at DESC';
$res = $data->offset($pages->offset)->limit($pages->limit)->orderBy($_orderby)->indexBy('id')->all();
return ['res'=>$res,'query'=>$data];
}
/*
* 数据更新前的预检查,返回对应关联数据
* 必须确保get与post数据中均包含需更新的数据id且一致
* */
private function preUpdate()
{
$id = (int)Yii::$app->request->get('id');
if(!$id) $this->result('请求错误未携带ID参数');
$post = $this->postdata;
if($post['id'] != $id) $this->result('传参id与请求数据不匹配',[],403);
$model = new AcPlat();
$res = $model->findOne($id);
if(!$res) $this->result('未查询到相应数据',[],404);
return $res;
}
/*
* 数据保存前的预检查(查重、参数校验等)
* 要保存的数据[],直接从post中取出
* @op操作类型add,edit……
* 校验机制:
* 编辑数据时必须用get方式传入参数id并与post进来的数据id进行比对只有一致时才能继续;
* 查重:禁止录入重复数据
* 返回:校验重组后的数据
* */
private function preSave($op)
{
$post = $this->postdata;
$title = trim($post['title']) ?? '';
if(!$title) $this->result('请传入平台名称');
$data = [];
//格式化数据
//目标键=》POST键
$model = new AcPlat();
switch ($op) {
case 'add':
$data['create_at'] = time();
$data['update_at'] = $data['create_at'];
break;
case 'edit':
//编辑模式下没有改mobile避免校验重复性
$id = (int)Yii::$app->request->get('id');
$_id = (int)$post['id'];
if(!$id != $_id) $this->result('id参数不匹配请检查');
$data['update_at'] = time();
break;
}
$cols = ['thumb' => 'thumb'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
$cols = ['status_code' => 'status_code', 'deleted' => 'deleted','order_by'=>'order_by'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? (int)$post[$key] : 0;
}
$exts = $this->saveExt();
if($exts) $data['remark'] = $exts;
return $data;
}
/*
* 格式化显示扩展字段
* @data 平台数据[]
* 返回[]
* */
private function showExt($data){
$json = $data['remark'];
$res = json_decode($json,true);
return $res;
}
private function saveExt()
{
$post = $this->postdata;
$data = [];
//目标键=》POST键
$cols = ['cw_phone' => 'cw_phone'];
foreach ($cols as $col => $key) {
$data[$col] = isset($post[$key]) ? trim($post[$key]) : '';
}
if(!$data) return false;
return json_encode($data, JSON_UNESCAPED_UNICODE);
}
}