SchoolPhysicalExamination/application/OutsideInterface/controller/ZhiZhaoTuan/ApiJk.php

407 lines
16 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\OutsideInterface\controller\ZhiZhaoTuan;
use think\Db;
class ApiJk extends Base
{
// 智照团保存表单信息
// 添加菜谱(OK)
// 根据食材详细查找列表(OK)
public function activity_list(){
// 尝试捕获异常
try {
$data = input('post.');
$return_data = $this->activity_list_action($data);
return $return_data;
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
// 记录日志
$this->record_api_log($data, $logContent, null);
return json(['status' => 'error', 'message' => '系统错误']);
}
}
public function details_data(){
// 尝试捕获异常
try {
$data = input('post.');
// $data = ['id'=>3];
if(!array_key_exists('id', $data)){
return $this->msg(10001,'id is miss');
}
if(!$this->verify_data_is_ok($data['id'],'intnum')){
return $this->msg(10005,'id type is error');
}
$return_data = $this->details_data_action($data);
return $return_data;
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
// 记录日志
$this->record_api_log($data, $logContent, null);
return json(['status' => 'error', 'message' => '系统错误']);
}
}
public function save_activity_data(){
// 尝试捕获异常
try {
$data = input('post.');
// $data = '{"id":"3","tel":"13915547489","content":[{"name":"姓名","type":"text","placeholder":"请输入姓名","is_must":"true","value":"大力","error":false},{"name":"电话","type":"text","placeholder":"请输入姓名","is_must":"true","value":"15237988596","error":false},{"name":"性别","type":"select","placeholder":"请选择性别","is_must":"true","options":["男","女"],"value":"男","error":false},{"name":"兴趣","type":"checkbox","placeholder":"请选择兴趣","is_must":"true","options":["跳舞","跳操","跳绳","跳远","跳高"],"value":["跳舞","跳远"],"error":false},{"name":"其他","type":"textarea","placeholder":"","is_must":"false","value":"哈","error":false}],"appid":"wxbbddd1888da43ab0","sessionid":"opv6R67fwcnu7-Rrts_ijylHQLCc"}';
// dump($data);
// // dump(json_decode($data,true));
// die;
// $data = json_decode($data,true);
if(!array_key_exists('id', $data)){
return $this->msg(10001,'id is miss');
}
if(!array_key_exists('tel', $data)){
return $this->msg(10001,'tel is miss');
}
if(!array_key_exists('content', $data)){
return $this->msg(10001,'content is miss');
}
if(!$this->verify_data_is_ok($data['id'],'intnum')){
return $this->msg(10005,'id type is error');
}
// if(!$this->verify_data_is_ok($data['tel'],'intnum')){
// return $this->msg(10005,'id type is error');
// }
$return_data = $this->save_activity_data_action($data);
return $return_data;
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
// 记录日志
$this->record_api_log($data, $logContent, null);
return json(['status' => 'error', 'message' => '系统错误']);
}
}
###########################################################################################################################################################
###########################################################################################################################################################
###########################################################################################################################################################
public function activity_list_action($data){
$page_now = array_key_exists('page',$data)?$data['page']:1;
$page_total = $page_now;
$page_num = 20;
$zzt_db = Db::connect('zzt_db');
$content_num = $zzt_db->table('pc_activity_registration')
->where("is_del = 0")
->count(); // 然后获取结果
// dump($content_num);
$page_total = ceil($content_num/$page_num);
$content_list = $zzt_db->table('pc_activity_registration')
->alias('a')
->join('pc_pic_manage b','a.pic = b.id','LEFT')
->where("a.is_del = 0")
->field('a.id,a.title,a.people_num,a.start_time,a.end_time,b.url_data')
->page("$page_now,$page_num")
->select();
return $this->msg([
'page_now'=>$page_now,
'page_total'=>$page_total,
'content_list'=>$content_list
]);
}
public function details_data_action($data){
$zzt_db = Db::connect('zzt_db');
$result = $zzt_db->table('pc_activity_registration')
->alias('a')
->join('pc_pic_manage b','a.pic = b.id','LEFT')
->where(["a.id"=>$data['id']])
->field('a.id,a.title,a.people_num,a.people_num_now,a.start_time,a.end_time,a.text_content,a.form_content,b.url_data as pic')
->find(); // 然后获取结果
// dump($result);
if($result){
$result['status'] = 1;
// $people_num = $zzt_db->table('pc_activity_registration_log')
// ->where(["par_id"=>$data['id']])
// ->count();
if(date('Y-m-d H:i:s') >= $result['end_time']){
$result['status'] = 0;
}
if($result['people_num_now']>=$result['people_num']){
$result['status'] = 0;
}
$result['form_content'] = json_decode($result['form_content'],true);
foreach ($result['form_content'] as $key => $value) {
if($value['type'] == 'checkbox'){
$result['form_content'][$key]['value'] = [];
}else{
$result['form_content'][$key]['value'] = "";
}
}
unset($result['people_num_now']);
return $this->msg($result);
}else{
return $this->msg(10002);
}
}
public function save_activity_data_action($data){
// $zzt_db = Db::connect('zzt_db');
// $result = $zzt_db->table('pc_activity_registration')
// ->where(["id"=>$data['id']])
// ->field('id,people_num,people_num_now,start_time,end_time,form_content')
// ->find(); // 然后获取结果
// $result['form_content'] = json_decode($result['form_content'],true);
// dump($result);
// dump($data);
// die;
// if(!$result){
// return $this->msg(10004);
// }
// if(date('Y-m-d H:i:s') < $result['start_time']){
// return $this->msg(10002,'活动还未开始');
// }
// if(date('Y-m-d H:i:s') > $result['end_time']){
// return $this->msg(10002,'活动已经结束');
// }
// if($result['people_num_now']>=$result['people_num']){
// return $this->msg(10002,'名额已报满');
// }
// $people_log = $zzt_db->table('pc_activity_registration_log')
// ->where(["par_id"=>$data['id'],'tel'=>$data['tel']])
// ->count(); // 然后获取结果
// if($people_log>=1){
// return $this->msg(10002,'您已经提交过,请勿重复提交');
// }
// dump();
// die;
if($data['tel'] == ''){
$data['tel'] = time();
}
$zzt_db = Db::connect('zzt_db');
try {
// 开启事务
$zzt_db->startTrans();
// 查询活动基础信息使用WITH(UPDLOCK)加锁)
$result = $zzt_db->table('pc_activity_registration WITH(UPDLOCK)')
->where(["id" => $data['id']])
->field('id,people_num,people_num_now,start_time,end_time,form_content,is_only_once')
->find();
if (!$result) {
return $this->msg(10004);
}
$result['form_content'] = json_decode($result['form_content'], true);
// 检查活动时间
$currentTime = date('Y-m-d H:i:s');
if ($currentTime < $result['start_time']) {
$zzt_db->rollback();
return $this->msg(10002, '活动还未开始');
}
if ($currentTime > $result['end_time']) {
$zzt_db->rollback();
return $this->msg(10002, '活动已经结束');
}
// 检查是否可以重复报名
if($result['is_only_once'] == 0){ //如果是0不可重复提交
$people_log = $zzt_db->table('pc_activity_registration_log')
->where(["par_id" => $data['id'], 'tel' => $data['tel']])
->count();
if ($people_log >= 1) {
$zzt_db->rollback();
return $this->msg(10002, '您已经提交过,请勿重复提交');
}
}
// 检查名额
if ($result['people_num_now'] >= $result['people_num']) {
$zzt_db->rollback();
return $this->msg(10002, '名额已报满');
}
// 更新当前人数SQL Server 语法)
$updateResult = $zzt_db->table('pc_activity_registration')
->where(["id" => $data['id']])
->update([
"people_num_now" => $zzt_db->raw('people_num_now + 1')
]);
// 插入报名记录
$insertData = [
'par_id' => $data['id'],
'tel' => $data['tel'],
'content' => [],
'create_time' => $currentTime
];
$tm_data = [];
foreach ($data['content'] as $key => $value) {
if($value['type'] == 'checkbox'){
$tm_data[$value['name']] = implode('CH1',$value['value']);
}else{
$tm_data[$value['name']] = $value['value'];
}
}
// 调试点1检查数据结构
// dump($tm_data);
// dump($result['form_content']);
foreach ($result['form_content'] as $key => $value) {
if($value['is_must'] == 'true'){// 如果是必填的
if(array_key_exists($value['name'],$tm_data)){// 如果包含选项
// 这里可能有问题:$tm_data[$value['name']] 可能是字符串,不是数组
if(isset($tm_data[$value['name']]) && $tm_data[$value['name']] != ''){// 如果选项有值
$insertData['content'][] = ['name'=>$value['name'],'type'=>$value['type'],'value'=>$tm_data[$value['name']]];
}else{
$zzt_db->rollback();
return $this->msg(10002, '必填项目未填('.$value['name'].'');
}
}else{
$zzt_db->rollback();
return $this->msg(10002, '项目缺失('.$value['name'].'');
}
}else{
if(array_key_exists($value['name'],$tm_data)){// 如果包含选项
// 这里可能有问题:$tm_data[$value['name']] 可能是字符串,不是数组
if(isset($tm_data[$value['name']]) && $tm_data[$value['name']] != ''){// 如果选项有值
$insertData['content'][] = ['name'=>$value['name'],'type'=>$value['type'],'value'=>$tm_data[$value['name']]];
}else{
$insertData['content'][] = ['name'=>$value['name'],'type'=>$value['type'],'value'=>""];
}
}else{
$insertData['content'][] = ['name'=>$value['name'],'type'=>$value['type'],'value'=>""];
}
}
}
// 调试点2检查最终的插入数据
// dump($insertData);
$insertData['content'] = json_encode($insertData['content']);
// 检测表单内容是否重复
$people_log2 = $zzt_db->table('pc_activity_registration_log')
->where(["content" => $insertData['content']])
->count();
if ($people_log2 >= 1) {
$zzt_db->rollback();
return $this->msg(10002, '该表单内容已经提交过,请勿重复提交');
}
$insertResult = $zzt_db->table('pc_activity_registration_log')
->insert($insertData);
if ($insertResult) {
$zzt_db->commit();
return $this->msg([]);
} else {
$zzt_db->rollback();
return $this->msg(10002, '报名失败');
}
} catch (\Exception $e) {
$zzt_db->rollback();
// // 输出详细错误信息到日志
// \think\Log::error('报名系统错误:' . $e->getMessage());
// \think\Log::error('错误文件:' . $e->getFile() . ' 行号:' . $e->getLine());
// \think\Log::error('错误追踪:' . $e->getTraceAsString());
// // 如果是开发环境,直接显示错误详情
// if (config('app_debug')) {
// return $this->msg(10002, '系统错误:' . $e->getMessage() . ' 在文件:' . $e->getFile() . ' 第' . $e->getLine() . '行');
// }
return $this->msg(10002, '系统繁忙,请重试');
}
// foreach ($variable as $key => $value) {
// # code...
// }
// $data = [
// "id"=>1,
// "tel"=>15588668888,
// "content"=>[
// [
// 'name'=>'姓名',
// 'type'=>'text',
// 'value'=>'Jerry',
// ],
// [
// 'name'=>'备注',
// 'type'=>'textarea',
// 'value'=>'xxxxxxxxxxxxxxxxxxxxxxx',
// ],
// [
// 'name'=>'性别',
// 'type'=>'select',
// 'value'=>'男',
// ],
// [
// 'name'=>'兴趣',
// 'type'=>'checkbox',
// 'value'=>['选项1','选项2','选项3'],
// ],
// ],
// ];
// return $this->msg($data);
}
}