DiverseYouthNightSchool/application/manystoreapi/controller/Teacher.php

413 lines
15 KiB
PHP
Raw 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 app\manystoreapi\controller;
use app\common\controller\ManystoreApiBase;
use app\common\model\manystore\UserAuth;
use app\common\model\school\classes\Teacher as Teachermodel;
use app\common\model\User;
use app\manystore\model\Manystore;
use think\Db;
use think\Exception;
use think\exception\PDOException;
use think\exception\ValidateException;
/**
* 机构API后台机构教师接口
*/
class Teacher extends ManystoreApiBase
{
// protected $noNeedLogin = ["detail",'people','spec',"teacher_list"];
// protected $noNeedRight = '*';
protected $model = null;
/**
* 初始化操作
* @access protected
*/
public function _initialize()
{
$this->model = new Teachermodel;
parent::_initialize();
//判断登录用户是否是员工
}
/**
* @ApiTitle( 老师详情)
* @ApiSummary(老师详情)
* @ApiMethod(GET)
* @ApiParams(name = "id", type = "int",required=true,description = "老师id")
* @ApiReturn({
*
*})
*/
public function detail(){
$id = $this->request->get('id/d','');
if(empty($id)){
$this->apierror(__('缺少必要参数'));
}
try {
$res = $this->model->detail($id);
} catch (\Exception $e){
// Log::log($e->getMessage());
$this->apierror($e->getMessage(),['errcode'=>$e->getCode()]);
}
$this->apisuccess('获取成功', ['detail' => $res]);
}
/**
* @ApiTitle( 老师或专家列表(取决于搜索条件))
* @ApiSummary(老师或专家列表(取决于搜索条件))
* @ApiMethod(GET)
* @ApiParams(name = "keywords", type = "string",required=false,description = "搜索关键字")
* @ApiParams(name = "page", type = "string",required=true,description = "页数")
* @ApiParams(name = "limit", type = "string",required=true,description = "条数")
* @ApiParams(name = "status", type = "string",required=false,description = "查展示专家请传1非专家也查请传0")
* @ApiParams(name = "recommend", type = "string",required=false,description = "平台首页推荐:0=否,1=是")
* @ApiParams(name = "shop_id", type = "string",required=false,description = "机构店铺id")
* @ApiParams(name = "user_id", type = "string",required=false,description = "教师用户id")
* @ApiReturn({
*
*})
*/
public function teacher_list()
{
$user_id = 0;
$user = $this->auth->getUser();//登录用户
if($user)$user_id = $user['id'];
$params=[];
$page = $this->request->get('page/d', 0); //页数
$limit = $this->request->get('limit/d', 0); //条数
$params['keywords'] = $this->request->get('keywords/s', ''); //搜索关键字
$params['status'] = $this->request->get('status/s', ''); //搜索关键字
$params['recommend'] = $this->request->get('recommend/s', ''); //搜索关键字
$params['shop_id'] = $this->request->get('shop_id/d', ''); //搜索关键字
$params['user_id'] = $this->request->get('user_id/d', ''); //搜索关键字
// $type = $this->request->get('type/s', ''); //筛选学员和教练单
try{
//当前申请状态
$res = $this->model::allList($page, $limit,$params);
// if($user_id =='670153'){
// file_put_contents("ceshi66.txt",(new AppointmentOrder())->getLastSql());
// }
}catch (\Exception $e){
$this->apierror($e->getMessage());
}
$this->apisuccess('查询成功', $res);
}
/**
* @ApiTitle( 微信小程序码)
* @ApiSummary(微信小程序码)
* @ApiMethod(GET)
* @ApiParams(name = "ids", type = "int",required=true,description = "老师id")
* @ApiReturn({
* 微信小程序码图片流
*})
*/
public function miniqrcode($ids = ''){
$param = $this->request->param();
try{
if(isset($param['ids']))$ids = $param['ids'];
//设置模拟资格
$url = \app\common\model\school\classes\Teacher::getMiniQrcodeLink($ids);
}catch (\Exception $e){
$this->apierror($e->getMessage());
}
return $url["response"];
}
protected function updateCheck($id,$params=[],$row=null){
// 课程存在售后订单则不允许操作
if($params && $row){
if(!$this->no_auth_fields_check($params,$row)){
return true;
}
}
// 课程存在未完成订单则不允许操作
$classesLib = \app\common\model\school\classes\ClassesLib::where("teacher_id",$id)->find();
if($classesLib)$this->apierror("存在正在教授的课程无法继续操作!请将课程讲师更换成其他人或者删除该课程后再操作!");
}
/**
* @ApiTitle( 老师删除)
* @ApiSummary(老师删除)
* @ApiMethod(POST)
* @ApiParams(name = "ids", type = "int",required=true,description = "老师id")
* @ApiReturn({
* 微信小程序码图片流
*})
*/
public function del($ids = "")
{
if (!$this->request->isPost()) {
$this->apierror(__("Invalid parameters"));
}
$ids = $ids ? $ids : $this->request->post("ids");
if ($ids) {
$pk = $this->model->getPk();
if($this->shopIdAutoCondition){
$this->model->where(array('shop_id'=>SHOP_ID));
}
$list = $this->model->where($pk, 'in', $ids)->select();
foreach ($list as $item) {
$this->updateCheck($item->id);
}
$count = 0;
Db::startTrans();
try {
foreach ($list as $k => $v) {
$count += $v->delete();
}
Db::commit();
} catch (PDOException $e) {
Db::rollback();
$this->apierror($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->apierror($e->getMessage());
}
if ($count) {
$this->apisuccess();
} else {
$this->apierror(__('No rows were deleted'));
}
}
$this->apierror(__('Parameter %s can not be empty', 'ids'));
}
protected function update_check(&$params,$row=null)
{
$shop_id = SHOP_ID;
$manystore = Manystore::where("shop_id", $shop_id)->find();
if (!$manystore) {
$this->apierror("店铺不存在");
}
$params["manystore_id"] = $manystore["id"];
$params["shop_id"] = $shop_id;
$user = User::where("id|nickname|realname|mobile", $params["user_id"])->find();
if(!$user) $this->apierror("未找到用户请先让用户登录小程序再提交表单");
//添加用户机构认证
try {
\app\common\model\manystore\UserAuth::auth(0,$shop_id,$user["id"],0,'shop',$this->auth->id);
}catch (\Exception $e){
}
//如果开启了检测用户授权,则检测用户是否授权
if(config("site.shop_auth_user_check")){
if(!UserAuth::authcheck($shop_id,$user["id"])) $this->apierror("用户未授权当前机构!请先让用户授权同意您再操作!");
}
$params["user_id"] = $user["id"];
$user_id = $params["user_id"];
//修改
if($row){
//用户已是其他的教师(搜索)
$teacher_user = $this->model->where("user_id",$user_id)->where("id","<>",$row["id"])->find();
if($teacher_user){
$this->apierror("用户已存在或已是其他授权机构教师!");
}
}else{
//新增
//用户已是教师(搜索)
$teacher_user = $this->model->where("user_id",$user_id)->find();
if($teacher_user){
$this->apierror("用户已存在或已是其他授权机构教师!");
}
}
}
/**
* @ApiTitle( 老师添加)
* @ApiSummary(老师添加)
* @ApiMethod(POST)
* @ApiParams(name = "user_id", type = "int",required=true,description = "教师前台用户id")
* @ApiParams(name = "name", type = "int",required=true,description = "教师名")
* @ApiParams(name = "head_image", type = "int",required=true,description = "教师头像")
* @ApiParams(name = "content", type = "int",required=true,description = "教师简介")
* @ApiParams(name = "status", type = "int",required=true,description = "机构展示专家信息:1=上架,2=下架")
* @ApiParams(name = "recommend", type = "int",required=true,description = "平台首页推荐:0=否,1=是")
* @ApiParams(name = "expert_image", type = "int",required=true,description = "专家头像")
* @ApiParams(name = "expert_content", type = "int",required=true,description = "专家介绍")
* @ApiParams(name = "weigh", type = "int",required=true,description = "weigh")
* @ApiReturn({
*
*})
*/
public function add()
{
if ($this->request->isPost()) {
$params = $this->request->post();
if ($params) {
if($this->storeIdFieldAutoFill && STORE_ID ){
$params['store_id'] = STORE_ID;
}
if($this->shopIdAutoCondition && SHOP_ID){
$params['shop_id'] = SHOP_ID;
}
try {
$this->update_check($params,$row=null);
} catch (ValidateException|PDOException|Exception $e) {
$this->apierror($e->getMessage());
}
$result = false;
Db::startTrans();
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;
$this->model->validateFailException(true)->validate($validate);
}
$this->update_check($params,$row=null);
$result = $this->model->allowField(true)->save($params);
Db::commit();
} catch (ValidateException $e) {
Db::rollback();
$this->apierror($e->getMessage());
} catch (PDOException $e) {
Db::rollback();
$this->apierror($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->apierror($e->getMessage());
}
if ($result !== false) {
$this->apisuccess();
} else {
$this->apierror(__('No rows were inserted'));
}
}
$this->apierror(__('Parameter %s can not be empty', ''));
}
}
/**
* @ApiTitle( 老师编辑)
* @ApiSummary(老师编辑)
* @ApiMethod(POST)
* @ApiParams(name = "ids", type = "int",required=true,description = "教师id")
* @ApiParams(name = "user_id", type = "int",required=true,description = "教师前台用户id")
* @ApiParams(name = "name", type = "int",required=true,description = "教师名")
* @ApiParams(name = "head_image", type = "int",required=true,description = "教师头像")
* @ApiParams(name = "content", type = "int",required=true,description = "教师简介")
* @ApiParams(name = "status", type = "int",required=true,description = "机构展示专家信息:1=上架,2=下架")
* @ApiParams(name = "recommend", type = "int",required=true,description = "平台首页推荐:0=否,1=是")
* @ApiParams(name = "expert_image", type = "int",required=true,description = "专家头像")
* @ApiParams(name = "expert_content", type = "int",required=true,description = "专家介绍")
* @ApiParams(name = "weigh", type = "int",required=true,description = "weigh")
* @ApiReturn({
*
*})
*/
public function edit($ids = null)
{
$ids = $ids ? $ids : $this->request->post("ids");
if ($this->request->isPost()) {
if($this->shopIdAutoCondition){
$this->model->where(array('shop_id'=>SHOP_ID));
}
$row = $this->model->where(array('id'=>$ids))->find();
if (!$row) {
$this->apierror(__('No Results were found'));
}
$params = $this->request->post();
if ($params) {
$result = false;
try {
$this->update_check($params,$row);
} catch (ValidateException|PDOException|Exception $e) {
$this->apierror($e->getMessage());
}
Db::startTrans();
try {
//是否采用模型验证
if ($this->modelValidate) {
$name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
$validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : $name) : $this->modelValidate;
$row->validateFailException(true)->validate($validate);
}
$this->update_check($params,$row);
$result = $row->allowField(true)->save($params);
$classesLibs = \app\common\model\school\classes\ClassesLib::where( ['teacher_id'=>$row["id"]])->select();
foreach ($classesLibs as $classesLib){
$classesLib->user_id = $row["user_id"];
$classesLib->save();
//执行课程订单更新
\app\common\model\school\classes\ClassesLib::update_classes($classesLib["id"]);
}
Db::commit();
} catch (ValidateException $e) {
Db::rollback();
$this->apierror($e->getMessage());
} catch (PDOException $e) {
Db::rollback();
$this->apierror($e->getMessage());
} catch (Exception $e) {
Db::rollback();
$this->apierror($e->getMessage());
}
if ($result !== false) {
$this->apisuccess("更新成功");
} else {
$this->apierror(__('No rows were updated'));
}
}
$this->apierror(__('Parameter %s can not be empty', ''));
}
}
}