250723提交

This commit is contained in:
tsf 2025-07-23 21:32:05 +08:00
parent 4a82d90a56
commit 17b7b2a85e
30 changed files with 2997 additions and 497 deletions

View File

@ -0,0 +1,146 @@
<?php
namespace app\KitchenScale\controller\app;
use think\Db;
use think\Cache;
class Aipart extends Base{
protected $default_head_pic = 'http://tc.pcxbc.com/tsf/head_pic.png';
protected $page_num = 10;
protected $kitchenscale_db_msg = [
'cookbook'=>'app_user_cookbook',//菜谱表
'foodlist3'=>'app_food_type_three',//食材列表3
'user'=>'app_user_data',//banner
];
// 百度接口参数
protected $baidu_api_key = "3WRiEJgo0P0Zz3bmV3V1kJsS";
protected $baidu_secret_key = "yUNCE4QpuO8Ht7kmZm7IRFwr1kECCFv4";
protected $baidu_accesstoken_expire_time = 432000;//5天
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
################################################################百度接口################################################################
################################################################百度接口################################################################
################################################################百度接口################################################################
// 百度图片识别食材
public function baidu_identify_food(){
try {
// 你的业务逻辑
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('token', $data)){
return $this->msg(10001);
}
if(!array_key_exists('img_str', $data)){
return $this->msg(10001);
}
if(!$this->verify_data_is_ok($data['token'],'str')){
return $this->msg(10005);
}
if(!$this->verify_data_is_ok($data['img_str'],'str')){
return $this->msg(10005);
}
$result = $this->baidu_identify_food_action($data['img_str']);
return $result;
} 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";
// dump($data);
// die;
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 识别食材
private function baidu_identify_food_action($img_str){
// dump($str);
$access_token = $this->baidu_get_accesstoken();
if($access_token == false){
return $this->msg(10002,'识别失败01');
}
// dump($access_token);
// die;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://aip.baidubce.com/rest/2.0/image-classify/v1/classify/ingredient?access_token=".$access_token,
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query(array(
'image' => $img_str,
'top_num'=>10
)),
CURLOPT_HTTPHEADER => array(
'Content-Type: application/x-www-form-urlencoded',
'Accept: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
$result = json_decode($response,true);
if(array_key_exists('result',$result)){
// return ['code'=>0,'data'=>$result['result']];
return $this->msg(['name'=>$result['result'][0]['name']]);
}else{
return $this->msg(10002,'识别失败02');
}
}
// 获取AccessToken
private function baidu_get_accesstoken(){
$baidu_cache = cache('baidu_accesstoken');
if($baidu_cache != false){
// dump($baidu_cache);
// die;
return $baidu_cache;
}
$baidu_cache = cache('baidu_accesstoken');
$curl = curl_init();
$postData = array(
'grant_type' => 'client_credentials',
'client_id' => $this->baidu_api_key,
'client_secret' => $this->baidu_secret_key
);
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://aip.baidubce.com/oauth/2.0/token',
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query($postData)
));
$response = curl_exec($curl);
curl_close($curl);
$rtn = json_decode($response,true);
// dump($rtn);
if(array_key_exists('access_token',$rtn)){
cache('baidu_accesstoken', $rtn['access_token'], ($rtn['expires_in']-$this->baidu_accesstoken_expire_time));
return $rtn['access_token'];
}else{
return false;
}
}
}

View File

@ -43,6 +43,9 @@ class Base extends Controller{
################################################################接口################################################################
// 接口记录
public function record_api_log($params, $error = null, $response = null){
// dump($params);
// dump($error);
// die;
$logContent = "接口请求参数:" . json_encode($params, JSON_UNESCAPED_UNICODE) . PHP_EOL;
if ($error) {
$logContent .= "错误信息:" . $error['all_content'] . PHP_EOL;
@ -55,9 +58,9 @@ class Base extends Controller{
$logContent .= "返回信息:" . json_encode($response, JSON_UNESCAPED_UNICODE) . PHP_EOL;
}
// 使用ThinkPHP的日志记录方法
Log::record($logContent, 'api_log');
Log::record($logContent, 'api_log');
}
// 判断token是否过期
public function token_time_validate($token){

View File

@ -16,13 +16,18 @@ class Cookbook extends Base{
];
protected $kitchenscale_db_msg = [
'cookbook'=>'app_user_cookbook',//菜谱表
'cookbook_food_relation'=>'app_user_cookbook_food_relation',//菜谱表
'cookbook_label'=>'app_user_cookbook_label',//菜谱标签表
'uploadimg'=>'app_user_upload_img',//素材表
'followlist'=>'app_user_follow_list',//关注列表
'collect_list'=>'app_user_collect_list',//收藏列表
'foodlist1'=>'app_food_type_one',//食材列表3
'foodlist2'=>'app_food_type_two',//食材列表3
'foodlist3'=>'app_food_type_three',//食材列表3
'foodlist1'=>'app_z_national_standard_food_type_1',//食材列表3
'foodlist2'=>'app_z_national_standard_food_type_2',//食材列表3
'foodlist3'=>'app_z_national_standard_food_type_3',//食材列表3
'foodlist4'=>'app_z_national_standard_food_type_4',//食材列表3
'nutrition'=>'app_user_cookbook_nutrition',//能量
'vitamin'=>'app_user_cookbook_vitamin',//维生素
'mineral'=>'app_user_cookbook_mineral',//矿物质
'user_kcal_log'=>'app_user_kcal_log',//食材列表3
'user'=>'app_user_data',//banner
];
@ -85,7 +90,7 @@ class Cookbook extends Base{
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $e->getFile();
// $logContent["flie"] = $e->getFile();
// $logContent["line"] = $e->getLine();
// $logContent['all_content'] = "异常信息:\n";
// $logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
@ -94,14 +99,14 @@ class Cookbook extends Base{
// $logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
// $logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
// // 记录日志
// // $this->record_api_log($data, $logContent, null);
// $this->record_api_log($data, $logContent, null);
// return json(['status' => 'error', 'message' => '系统错误']);
// }
}
// 修改菜谱(OK)
public function update_cookbook(){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -153,25 +158,25 @@ class Cookbook extends Base{
$return_data = $this->update_cookbook_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
// 根据菜谱标签查询列表(首页用)(OK)
public function find_by_cook_label($data=['token'=>'','cook_label'=>4,'page'=>'1']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -179,37 +184,37 @@ class Cookbook extends Base{
if(!array_key_exists('cook_label', $data)){
return $this->msg(10001,'cook_label is miss');
}
if(!array_key_exists('page', $data)){
return $this->msg(10001,'page is miss');
}
// if(!array_key_exists('page', $data)){
// return $this->msg(10001,'page is miss');
// }
if(!$this->verify_data_is_ok($data['cook_label'],'intnum')){
return $this->msg(10005,'cook_label type is error');
}
if(!$this->verify_data_is_ok($data['page'],'intnum')){
return $this->msg(10005,'page type is error');
}
// if(!$this->verify_data_is_ok($data['page'],'intnum')){
// return $this->msg(10005,'page type is error');
// }
$return_data = $this->find_by_cook_label_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
// 根据食材详细查找列表(OK)
public function find_by_food($data=['token'=>'caadd1be045a65f3','food_name'=>'猪肉','page'=>'1']){
public function find_by_food($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','food_name'=>"2724,2670",'page'=>'1']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -219,39 +224,39 @@ class Cookbook extends Base{
if(!array_key_exists('food_name', $data)){
return $this->msg(10001,'food_name is miss');
}
if(!array_key_exists('page', $data)){
return $this->msg(10001,'page is miss');
}
// if(!array_key_exists('page', $data)){
// return $this->msg(10001,'page is miss');
// }
if(!$this->verify_data_is_ok($data['token'],'str')){
return $this->msg(10005,'token type is error');
}
if(!$this->verify_data_is_ok($data['food_name'],'str')){
return $this->msg(10005,'food_name type is error');
}
if(!$this->verify_data_is_ok($data['page'],'intnum')){
return $this->msg(10005,'page type is error');
return $this->msg(10005,'tofood_nameken type is error');
}
// if(!$this->verify_data_is_ok($data['page'],'intnum')){
// return $this->msg(10005,'page type is error');
// }
$return_data = $this->find_by_food_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
// 查询食谱的详情(OK)
public function cookbook_details($data=['token'=>'','cookbook_id'=>'21']){
public function cookbook_details($data=['token'=>'','cookbook_id'=>'3594']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -263,25 +268,25 @@ class Cookbook extends Base{
}
$return_data = $this->cookbook_details_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
// 关注行为(OK)
public function cookbook_follow($data=['token'=>'caadd1be045a65f3','being_followed'=>'caadd1be045a65f30b92aa805f1de54a']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -299,25 +304,25 @@ class Cookbook extends Base{
}
$return_data = $this->cookbook_follow_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
// 点赞收藏菜谱(OK)
public function cookbook_like($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','cookbook_id'=>'12']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -335,25 +340,25 @@ class Cookbook extends Base{
}
$return_data = $this->cookbook_like_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
// 计算当前食材重量的卡路里(OK)
public function food_count_kcal($data=['food_name'=>'鸡肉','food_weight'=>456.37]){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -372,25 +377,25 @@ class Cookbook extends Base{
$return_data = $this->food_count_kcal_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
// 食材列表查询接口(OK)
public function find_food($data=['food_name'=>'鸡肉']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -403,62 +408,62 @@ class Cookbook extends Base{
$return_data = $this->find_food_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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 get_food_list($data=['food_level2_id'=>'4','search_data'=>'','page'=>1]){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('food_level2_id', $data)){
return $this->msg(10001,'food_level2_id is miss');
}
if(!array_key_exists('page', $data)){
return $this->msg(10001,'page is miss');
}
// if(!array_key_exists('page', $data)){
// return $this->msg(10001,'page is miss');
// }
if(!$this->verify_data_is_ok($data['food_level2_id'],'intnum')){
return $this->msg(10005,'food_level2_id type is error');
}
if(!$this->verify_data_is_ok($data['page'],'intnum')){
return $this->msg(10005,'page type is error');
}
// if(!$this->verify_data_is_ok($data['page'],'intnum')){
// return $this->msg(10005,'page type is error');
// }
$return_data = $this->get_food_list_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
// 获取所有食谱label
public function get_cookbook_label_list($data=['token'=>'caadd1be045a65f30b92aa805f1de54a']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -471,20 +476,52 @@ class Cookbook extends Base{
$return_data = $this->get_cookbook_label_list_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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 get_search_food_page_list($data=['token'=>'caadd1be045a65f30b92aa805f1de54a']){
// 尝试捕获异常
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('token', $data)){
return $this->msg(10001,'token is miss');
}
if(!$this->verify_data_is_ok($data['token'],'str')){
return $this->msg(10005,'token type is error');
}
$return_data = $this->get_search_food_page_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' => '系统错误']);
}
}
#######################################################################action#######################################################################
@ -492,6 +529,7 @@ class Cookbook extends Base{
#######################################################################action#######################################################################
public function add_cookbook_action($data){
// 获取账号下信息以及用户信息
$user_data = Db::table($this->reedaw_db_msg['zhanghao'])->where(['token'=>$data['token']])->field('id,token,nickname,head_pic')->find();
if(!$user_data){
@ -507,8 +545,8 @@ class Cookbook extends Base{
$food_type = [];
// 检验一下food_list是否合规食材列表
foreach ($data['food_list'] as $key => $value) {
if (!array_key_exists('name', $value) || !array_key_exists('weight', $value)) {
return $this->msg(10001,'食材缺少名称或者重量');
if (!array_key_exists('id', $value) || !array_key_exists('weight', $value)) {
return $this->msg(10001,'食材缺少id或者重量');
}
if(!$this->verify_data_is_ok($value['name'],'str')){
return $this->msg(10005,'食材名称格式错误');
@ -516,8 +554,8 @@ class Cookbook extends Base{
if(!$this->verify_data_is_ok($value['weight'],'intnum')){
return $this->msg(10005,'食材重量格式错误,需整数数字');
}
if(!in_array($value['name'], $food_type)){
array_push($food_type, $value['name']);
if(!in_array($value['id'], $food_type)){
array_push($food_type, $value['id']);
}
}
// 检验一下step_list是否合规步骤列表
@ -534,10 +572,12 @@ class Cookbook extends Base{
}
}
}
$cfc = Db::connect('cfc_db');
// 获取账号下信息以及用户信息
$user_data = Db::table($this->reedaw_db_msg['zhanghao'])->where(['token'=>$data['token']])->field('id,token,nickname,head_pic')->find();
// 处理食材卡路里start
$kcal_data = $this->count_calorie($data['food_list'],$data['step_list']);
$data['food_list'] =$kcal_data;
@ -554,19 +594,36 @@ class Cookbook extends Base{
'describe_data'=>$data['description'],
'food_data'=>json_encode($data['food_list']),
'step_data'=>json_encode($data['step_list']),
'food_type'=>implode(',', $food_type),
// 'food_type'=>implode(',', $food_type),
'cook_label'=>$data['cook_label'],
'create_time'=>date('Y-m-d H:i:s')
];
// dump($insert_data);
// die;
$cook_book_result = $cfc->table($this->kitchenscale_db_msg['cookbook'])->insert($insert_data);
if($cook_book_result){
// 启动事务
Db::startTrans();
try{
$cook_book_result = $cfc->table($this->kitchenscale_db_msg['cookbook'])->insertGetId($insert_data);
$food_type_insert = [];
foreach ($food_type as $key => $value) {
array_push($food_type_insert,['cookbook_id'=>$cook_book_result,'food_id'=>$value]);
}
$cfc->table($this->kitchenscale_db_msg['cookbook_food_relation'])->insertAll($food_type_insert);
// 提交事务
Db::commit();
return $this->msg([]);
}else{
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return $this->msg(10002);
}
// if($cook_book_result){
// return $this->msg([]);
// }else{
// return $this->msg(10002);
// }
}
public function update_cookbook_action($data){
// 获取账号下信息以及用户信息
@ -584,8 +641,8 @@ class Cookbook extends Base{
$food_type = [];
// 检验一下food_list是否合规食材列表
foreach ($data['food_list'] as $key => $value) {
if (!array_key_exists('name', $value) || !array_key_exists('weight', $value)) {
return $this->msg(10001,'食材缺少名称或者重量');
if (!array_key_exists('id', $value) || !array_key_exists('weight', $value)) {
return $this->msg(10001,'食材缺少id或者重量');
}
if(!$this->verify_data_is_ok($value['name'],'str')){
return $this->msg(10005,'食材名称格式错误');
@ -593,8 +650,8 @@ class Cookbook extends Base{
if(!$this->verify_data_is_ok($value['weight'],'intnum')){
return $this->msg(10005,'食材重量格式错误,需整数数字');
}
if(!in_array($value['name'], $food_type)){
array_push($food_type, $value['name']);
if(!in_array($value['id'], $food_type)){
array_push($food_type, $value['id']);
}
}
// 检验一下step_list是否合规步骤列表
@ -634,12 +691,30 @@ class Cookbook extends Base{
'describe_data'=>$data['description'],
'food_data'=>json_encode($data['food_list']),
'step_data'=>json_encode($data['step_list']),
'food_type'=>implode(',', $food_type),
// 'food_type'=>implode(',', $food_type),
'cook_label'=>$data['cook_label'],
];
$cook_book_result = $cfc->table($this->kitchenscale_db_msg['cookbook'])->where(['id'=>$data['cookbook_id']])->update($insert_data);
// 启动事务
Db::startTrans();
try{
$cook_book_result = $cfc->table($this->kitchenscale_db_msg['cookbook'])->where(['id'=>$data['cookbook_id']])->update($insert_data);
$food_type_insert = [];
foreach ($food_type as $key => $value) {
array_push($food_type_insert,['cookbook_id'=>$data['cookbook_id'],'food_id'=>$value]);
}
$cfc->table($this->kitchenscale_db_msg['cookbook_food_relation'])->where('cookbook_id',$data['cookbook_id'])->delete();
$cfc->table($this->kitchenscale_db_msg['cookbook_food_relation'])->insertAll($food_type_insert);
// 提交事务
Db::commit();
return $this->msg([]);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return $this->msg(10002);
}
// dump($cook_book_result);
// die;
if($cook_book_result){
@ -651,8 +726,8 @@ class Cookbook extends Base{
public function find_by_cook_label_action($data){
$page_now = $data['page'];
$page_total = $data['page'];
$page_now = array_key_exists('page',$data)?$data['page']:1;
$page_total = $page_now;
$page_num = 20;
$cook_label = $data['cook_label'];
@ -723,28 +798,61 @@ class Cookbook extends Base{
]);
}
public function find_by_food_action($data){
// 获取账号下信息以及用户信息
$user_data = Db::table($this->reedaw_db_msg['zhanghao'])->where(['token'=>$data['token']])->field('id,token,nickname,head_pic')->find();
if(!$user_data){
return $this->msg(20001,'账号信息错误');
}
$page_now = $data['page'];
$page_total = $data['page'];
$page_now = array_key_exists('page',$data)?$data['page']:1;
$page_total = $page_now;
$page_num = 20;
$food_name = $data['food_name'];
$cfc = Db::connect('cfc_db');
$content_num = $cfc->table($this->kitchenscale_db_msg['cookbook'])
->where("food_type like '%$food_name%'")
->count();
$page_total = ceil($content_num/$page_num);
$content_list = $cfc->table($this->kitchenscale_db_msg['cookbook'])
->alias('cookbook')
->join($this->kitchenscale_db_msg['uploadimg'].' uploadimg','cookbook.cover = uploadimg.id','LEFT')
->where("cookbook.food_type like '%$food_name%'")
->field('cookbook.id,cookbook.title,uploadimg.pic_url as cover,cookbook.create_user_head_pic,cookbook.create_user_nickname,cookbook.likes_num')
// $food_name = implode(',',$food_name);
// dump($food_name);
// die;
$content_num = $cfc->table($this->kitchenscale_db_msg['cookbook_food_relation'])
->where("food_id in ($food_name)")
->group('cookbook_id')
->field('count(distinct cookbook_id) as count') // 显式指定列名
->select(); // 然后获取结果
// dump($content_num);
$page_total = ceil(count($content_num)/$page_num);
$content_list = $cfc->table($this->kitchenscale_db_msg['cookbook_food_relation'])
->alias('a')
->join($this->kitchenscale_db_msg['cookbook'].' b','a.cookbook_id = b.id','LEFT')
->join($this->kitchenscale_db_msg['uploadimg'].' c','b.cover = c.id','LEFT')
->where("a.food_id in ($food_name)")
->field('b.id,b.title,c.pic_url as cover,b.create_user_head_pic,b.create_user_nickname,b.likes_num')
->group('b.id,b.title,c.pic_url,b.create_user_head_pic,b.create_user_nickname,b.likes_num')
->page("$page_now,$page_num")
->select();
// dump($food_name);
// dump($content_num);
// dump($page_total);
// dump($content_list);
// die;
// $content_num = $cfc->table($this->kitchenscale_db_msg['cookbook'])
// ->where("food_type like '%$food_name%'")
// ->count();
// $page_total = ceil($content_num/$page_num);
// $content_list = $cfc->table($this->kitchenscale_db_msg['cookbook'])
// ->alias('cookbook')
// ->join($this->kitchenscale_db_msg['uploadimg'].' uploadimg','cookbook.cover = uploadimg.id','LEFT')
// ->where("cookbook.food_type like '%$food_name%'")
// ->field('cookbook.id,cookbook.title,uploadimg.pic_url as cover,cookbook.create_user_head_pic,cookbook.create_user_nickname,cookbook.likes_num')
// ->page("$page_now,$page_num")
// ->select();
// 获取用户收藏列表
$my_collect_list = $cfc->table($this->kitchenscale_db_msg['collect_list'])
@ -764,7 +872,7 @@ class Cookbook extends Base{
}
unset($content_list[$key]['ROW_NUMBER']);
}
return $this->msg([
'page_now'=>$page_now,
'page_total'=>$page_total,
@ -860,12 +968,51 @@ class Cookbook extends Base{
}else{
$cookbook_data['collect_status'] = 'no';
}
// 处理营养物质
$nutrition = $cfc->table($this->kitchenscale_db_msg['nutrition'])->where(['cookbook_id'=>$data['cookbook_id']])->field('name_en,name_ch as name,unit,value as weight,nrv')->select();
$vitamin = $cfc->table($this->kitchenscale_db_msg['vitamin'])->where(['cookbook_id'=>$data['cookbook_id']])->field('name_en,name_ch as name,unit,value as weight,nrv')->select();
$mineral = $cfc->table($this->kitchenscale_db_msg['mineral'])->where(['cookbook_id'=>$data['cookbook_id']])->field('name_en,name_ch as name,unit,value as weight,nrv')->select();
$cookbook_data['tags'] = [];
array_push($cookbook_data['tags'],[
'title'=>'所需食材',
'desc'=>'重量',
'list'=>$cookbook_data['food_data'],
]);
array_push($cookbook_data['tags'],[
'title'=>'能量',
'desc'=>'含量',
'list'=>$nutrition,
]);
array_push($cookbook_data['tags'],[
'title'=>'维生素',
'desc'=>'含量',
'list'=>$vitamin,
]);
array_push($cookbook_data['tags'],[
'title'=>'矿物质',
'desc'=>'含量',
'list'=>$mineral,
]);
// $cookbook_data['nutrition']['list'] = $nutrition;
// // $cookbook_data['nutrition']['title'] = '能量及宏量营养素';
// $cookbook_data['nutrition']['title'] = '能量';
// $cookbook_data['nutrition']['desc'] = '含量';
// $cookbook_data['vitamin']['list'] = $vitamin;
// $cookbook_data['vitamin']['title'] = '维生素';
// $cookbook_data['vitamin']['desc'] = '含量';
// $cookbook_data['mineral']['list'] = $mineral;
// $cookbook_data['mineral']['title'] = '矿物质';
// $cookbook_data['mineral']['desc'] = '含量';
$cookbook_data['token'] = $cookbook_data['create_user_token'];
$cookbook_data['description'] = $cookbook_data['describe_data'];
$cookbook_data['food_list'] = $cookbook_data['food_data'];
// $cookbook_data['food_list'] = $cookbook_data['food_data'];
$cookbook_data['step_list'] = $cookbook_data['step_data'];
unset($cookbook_data['create_user_token']);
unset($cookbook_data['describe_data']);
@ -1019,13 +1166,13 @@ class Cookbook extends Base{
}
public function find_food_action($data){
$cfc = Db::connect('cfc_db');
$food_data = $cfc->query("select f3.id,f3.name,f3.kcal,f2.id as up_one_level_id,f1.id as up_two_level_id
$food_data = $cfc->query("select f3.id,f3.food_name as name,f3.pic_url,f3.Calorie_val as kcal,f3.weight_unit as unit,f2.id as up_one_level_id,f1.id as up_two_level_id
from ".$this->kitchenscale_db_msg['foodlist3']." as f3
LEFT JOIN ".$this->kitchenscale_db_msg['foodlist2']." as f2
on f3.two_id = f2.id
LEFT JOIN ".$this->kitchenscale_db_msg['foodlist1']." as f1
on f2.one_id = f1.id
where f3.is_del=0 AND f3.name like '%".$data['food_name']."%'
where f3.is_del=0 AND f3.food_name like '%".$data['food_name']."%'
");
if(count($food_data)>0){
@ -1035,7 +1182,12 @@ class Cookbook extends Base{
}
}
public function get_food_list_action($data){
$cp_page_num = 100;
if(!array_key_exists('page',$data)){
$data['page'] = 1;
}
$cp_page_num = 30;
$cfc = Db::connect('cfc_db');
// 获取食材分类列表start
// $foodlist1 = $cfc->table($this->kitchenscale_db_msg['foodlist1'])->where("is_del = 0")->field('id,name')->select();
@ -1068,9 +1220,14 @@ class Cookbook extends Base{
// ->join($this->kitchenscale_db_msg['foodlist2'].' b','a.two_id = b.id','LEFT')
// ->join($this->kitchenscale_db_msg['foodlist1'].' c','b.one_id = c.id','LEFT')
->where($search_sql_str)
->field('id,name,kcal,unit')
->field('id,food_name as name,pic_url,Calorie_val as kcal,weight_unit as unit')
->page($data['page'],$cp_page_num)
->select();
foreach ($collect_list as $key => $value) {
$collect_list[$key]['pic_url'] = "https://tc.pcxbc.com/kitchenscale_all".$collect_list[$key]['pic_url'];
}
// $return_data = [];
// $temporary_arr = [];
// foreach ($collect_list as $key => $value) {
@ -1121,6 +1278,43 @@ class Cookbook extends Base{
return $this->msg($cook_label);
// 获取菜谱分类标签end
}
public function get_search_food_page_list_action($data){
$cfc = Db::connect('cfc_db');
// 获取菜谱分类标签start
// 蔬菜类id4 6 7
// 肉类id10 11 14
$data_list = $cfc->table($this->kitchenscale_db_msg['foodlist3'])
->where('two_id in (4,6,7,10,11,14) and is_popular = 1')
->field('id,name,two_id')
->select();
$result = [
'food'=>[
'title'=>'流行食材',
'list'=>[
[
'title'=>'蔬菜',
'list'=>[]
],
[
'title'=>'肉类',
'list'=>[]
],
]
],
'log'=>[],
];
foreach ($data_list as $key => $value) {
if($value['two_id'] == 4 || $value['two_id'] == 6 || $value['two_id'] == 7){
array_push($result['food']['list'][0]['list'],['id'=>$value['id'],'name'=>$value['name']]);
}else if($value['two_id'] == 10 || $value['two_id'] == 11 || $value['two_id'] == 14){
array_push($result['food']['list'][1]['list'],['id'=>$value['id'],'name'=>$value['name']]);
}
}
return $this->msg($result);
// 获取菜谱分类标签end
}
@ -1132,10 +1326,10 @@ class Cookbook extends Base{
// 处理食材的卡路里
public function count_calorie($data,$step){
$foot_name = array_column($data, 'name');
$foot_name = array_column($data, 'id');
$foot_name = array_unique($foot_name);
$cfc = Db::connect('cfc_db');
$foot_kcal = $cfc->table($this->kitchenscale_db_msg['foodlist3'])->where("name in ('".implode("','", $foot_name)."')")->field("id,name,kcal")->select();
$foot_kcal = $cfc->table($this->kitchenscale_db_msg['foodlist3'])->where("id in ('".implode("','", $foot_name)."')")->field("id,food_name as name,Calorie_val as kcal")->select();
$foot_kcal2 = [];
foreach ($foot_kcal as $key => $value) {
$foot_kcal2[$value['name']] = [$value['id'],$value['kcal']];
@ -1154,19 +1348,6 @@ class Cookbook extends Base{
$data[$key]['unit'] = 'g';
}
// foreach ($data as $key => $value) {
// if(array_key_exists($value['name'], $foot_kcal2)){
// // $data[$key]['kcal'] = $this->count_calorie_action($value['weight'],$foot_kcal2[$value['name']]).'kcal';
// $data[$key]['kcal'] = $this->count_calorie_action($value['weight'],$foot_kcal2[$value['name']]);
// }else{
// // $data[$key]['kcal'] = '0kcal';
// $data[$key]['kcal'] = '0';
// }
// // $data[$key]['weight'] = $data[$key]['weight'].'g';
// $data[$key]['unit'] = 'g';
// $data[$key]['id'] = 'g';
// }
return $data;
}

View File

@ -18,7 +18,7 @@ class Countfood extends Base{
'uploadimg'=>'app_user_upload_img',//素材表
'followlist'=>'app_user_follow_list',//关注列表
'collect_list'=>'app_user_collect_list',//收藏列表
'foodlist3'=>'app_food_type_three',//食材列表3
'foodlist3'=>'app_standard_food_type_three',//食材列表3
'eat_log'=>'app_user_kcal_log',//食材列表3
'user'=>'app_user_data',//banner
];
@ -32,9 +32,9 @@ class Countfood extends Base{
################################################################接口################################################################
// 添加每日摄入记录
public function add_intake_food($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','aud_id'=>1,'meals_type'=>'午加餐','food_list'=>[['id'=>1,'weight'=>'150','unit'=>'g'],['id'=>2,'weight'=>'100','unit'=>'g']]]){
public function add_intake_food($data=['token'=>'3e5876042361c8cb42bd48c46918f737','aud_id'=>6,'meals_type'=>'早餐','food_list'=>[['id'=>2778,'name'=>"啤酒X",'weight'=>'150','unit'=>'g']]]){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -58,25 +58,25 @@ class Countfood extends Base{
}
$return_data = $this->add_intake_food_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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 get_countfoot_content($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','aud_id'=>61,'time'=>'2025-03-17']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -101,25 +101,25 @@ class Countfood extends Base{
$return_data = $this->get_countfoot_content_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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 get_log_list($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','aud_id'=>1,'s_time'=>'2025-03-15','e_time'=>'2025-03-16']){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -150,25 +150,25 @@ class Countfood extends Base{
$return_data = $this->get_log_list_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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 set_up_content($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','aud_id'=>61]){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -187,25 +187,25 @@ class Countfood extends Base{
$return_data = $this->set_up_content_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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 set_user_kcal($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','aud_id'=>61,'set_kcal'=>2000]){
// 尝试捕获异常
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -230,20 +230,20 @@ class Countfood extends Base{
$return_data = $this->set_user_kcal_action($data);
return $return_data;
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["file"] = $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' => '系统错误']);
// }
} 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' => '系统错误']);
}
}
#######################################################################action#######################################################################
#######################################################################action#######################################################################
@ -254,6 +254,7 @@ class Countfood extends Base{
// 除 bcdiv(,,20)
public function add_intake_food_action($data){
$cfc = Db::connect('cfc_db');
$user_data = $cfc->table($this->kitchenscale_db_msg['user'])
->where(["id"=>$data['aud_id']])
@ -262,6 +263,7 @@ class Countfood extends Base{
if(!$user_data){
return $this->msg(10003);
}
// 统计食物的id
$food_id_arr = [];
@ -286,6 +288,7 @@ class Countfood extends Base{
}
array_push($food_id_arr,$value['id']);
}
$food_content = $cfc->table($this->kitchenscale_db_msg['foodlist3'])
->where("id in (".implode(',',$food_id_arr).")")
->field('id,name,kcal,carbohydrate,protein,fat')
@ -320,12 +323,13 @@ class Countfood extends Base{
// die;
// 数据库数据字段id,aud_id,meals_type,food_id,food_name,weight,kcal_val,carbohydrate_val,protein_val,fat_val,create_time
// 启动事务
Db::startTrans();
try{
$result = $cfc->table($this->kitchenscale_db_msg['eat_log'])->insertAll($data['food_list']);
if ($result !== count($data['food_list'])) {
Db::rollback();
return $this->msg(10001);
return $this->msg(10002,'添加数据错误');
} else {
Db::commit();
return $this->msg([]);
@ -335,6 +339,11 @@ class Countfood extends Base{
Db::rollback();
return $this->msg(10002);
}
// dump($data);
// dump($food_id_arr);
// dump($food_content);
// die;
}
public function get_countfoot_content_action($data){
$cfc = Db::connect('cfc_db');

View File

@ -18,9 +18,10 @@ class Index extends Base{
'cookbook'=>'app_user_cookbook',//菜谱表
'cookbook_label'=>'app_user_cookbook_label',//菜谱标签表
'uploadimg'=>'app_user_upload_img',//图片素材表
'foodlist1'=>'app_food_type_one',//食材列表1
'foodlist2'=>'app_food_type_two',//食材列表2
'foodlist3'=>'app_food_type_three',//食材列表3
'foodlist1'=>'app_z_national_standard_food_type_1',//食材列表1
'foodlist2'=>'app_z_national_standard_food_type_2',//食材列表2
'foodlist3'=>'app_z_national_standard_food_type_3',//食材列表3
'foodlist4'=>'app_z_national_standard_food_type_4',//食材列表3
'collect_list'=>'app_user_collect_list',//点赞表
'banner'=>'app_banner_data',//banner
'version'=>'app_version_log',//版本表
@ -157,7 +158,7 @@ class Index extends Base{
// 获取默认配置信息(包含:食材的分类列表,用户角色信息)(OK)
public function get_default_config($data = ['token'=>'']){
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -169,25 +170,25 @@ class Index extends Base{
// }
$return_data = $this->get_default_config_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'] .= "接口: get_default_config\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 $this->msg(99999);
// }
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "接口: get_default_config\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 $this->msg(99999);
}
}
// 首页搜索接口(OK)
public function search_column($data = ['search_data'=>'鱼','token'=>'']){
// try {
public function search_column($data = ['search_data'=>'鱼','token'=>'','page'=>1]){
try {
// 你的业务逻辑
if(count(input('post.')) > 0){
$data = input('post.');
@ -195,25 +196,31 @@ class Index extends Base{
if(!array_key_exists('search_data', $data)){
return $this->msg(10001);
}
// if(!array_key_exists('page', $data)){
// return $this->msg(10001,'page is miss');
// }
if(!$this->verify_data_is_ok($data['search_data'],'str')){
return $this->msg(10005);
}
// if(!$this->verify_data_is_ok($data['page'],'intnum')){
// return $this->msg(10005,'page type is error');
// }
$return_data = $this->search_column_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'] .= "接口: (search_column)\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 $this->msg(99999);
// }
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "接口: (search_column)\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 $this->msg(99999);
}
}
#######################################################################action#######################################################################
@ -234,9 +241,14 @@ class Index extends Base{
['name'=>'健康食谱','jump_url'=>'/pages/menu/menu','icon'=>'https://tc.pcxbc.com/kitchenscale_all/vajra4.png'],
],
];
$cfc = Db::connect('cfc_db');
// // 获取食材分类列表start
$foodlist1 = $cfc->table($this->kitchenscale_db_msg['foodlist1'])->where("is_del = 0")->field('id,name')->select();
// $foodlist1 = $cfc->table($this->kitchenscale_db_msg['foodlist1'])->where("is_del = 0")->order('sort_num desc')->field('id,name')->select();
$foodlist1 = $cfc->query("SELECT id,name FROM ".$this->kitchenscale_db_msg['foodlist1']." WHERE is_del = 0 ORDER BY sort_num");
// dump($foodlist1);
// die;
$foodlist2 = $cfc->table($this->kitchenscale_db_msg['foodlist2'])->where("is_del = 0")->field('id,name,one_id')->select();
// dump($foodlist3);
foreach ($foodlist1 as $key => $value) {
@ -314,13 +326,23 @@ class Index extends Base{
// $cookbook = new Cookbook();
$cfc = Db::connect('cfc_db');
$page_now = array_key_exists('page',$data)?$data['page']:1;
$page_total = $page_now;
$page_num = 20;
// 获取菜谱信息
$content_num = $cfc->table($this->kitchenscale_db_msg['cookbook'])
->where("title LIKE '%".$data['search_data']."%' OR describe_data LIKE '%".$data['search_data']."%'")
->count();
$page_total = ceil($content_num/$page_num);
$content_list = $cfc->table($this->kitchenscale_db_msg['cookbook'])
->alias('cookbook')
->join($this->kitchenscale_db_msg['uploadimg'].' uploadimg','cookbook.cover = uploadimg.id','LEFT')
->where("cookbook.title LIKE '%".$data['search_data']."%' OR cookbook.describe_data LIKE '%".$data['search_data']."%'")
->field("cookbook.id,cookbook.title,cookbook.create_user_head_pic,cookbook.create_user_nickname,cookbook.likes_num,uploadimg.pic_url as cover")
->page("$page_now,$page_num")
->select();
if(count($content_list)<=0){
return $this->msg([]);
}
@ -366,7 +388,12 @@ class Index extends Base{
unset($content_list[$key]['ROW_NUMBER']);
}
}
return $this->msg($content_list);
return $this->msg([
'page_now'=>$page_now,
'page_total'=>$page_total,
'content_list'=>$content_list
]);
}

View File

@ -0,0 +1,705 @@
<?php
namespace app\KitchenScale\controller\app;
use think\Db;
use PHPMailer\PHPMailer\PHPMailer;
use app\app\controller\Wechat;// 引入Wechat服务类
class Login extends Base{
protected $code_time = 50;
// protected $token_time = 2592000;//30天的秒数
protected $default_head_pic = 'http://tc.pcxbc.com/tsf/head_pic.png';
protected $login_use_db_name = [
'1'=>'app_account_number',
];
################################################################接口################################################################
################################################################接口################################################################
################################################################接口################################################################
// 注册
public function register_action($data = ['data'=>13408173311,'password'=>'123','code'=>'746119']){
try {
// 你的业务逻辑
// 验证是否前段发送过来的数据
if(count(input('post.')) > 0){
$data = input('post.');
}
// 验证数据项是否完整
if(!array_key_exists('data', $data) || !array_key_exists('password', $data) || !array_key_exists('code', $data)){
return $this->msg(10001);
}
// 验证数据值是否合规
if(!$data['data'] || !$data['password'] || !$data['code']){
return $this->msg(10006);
}
if(!$this->verify_data_is_ok($data['password'],'str')){
return $this->msg(10005);
}
if(!$this->verify_data_is_ok($data['code'],'num')){
return $this->msg(10005);
}
// 验证是手机还是邮箱
$montage_data = $this->is_tel_email($data['data']);
if($montage_data == false){
return $this->msg(10005);
}
// 查询账号是否已经注册
$inspect_repeat = Db::table($this->login_use_db_name['1'])->where([$montage_data=>$data['data'],'is_del'=>0])->count();
if($inspect_repeat > 0){
return $this->msg(10002,'注册失败,账号已存在');
}
// 检查验证码
$code_result = $this->check_code($data['data'],$data['code']);
if($code_result !== true){
return $this->msg(10002,$code_result);
}
// 验证完之后
$set_data = [];
if($montage_data == 'tel'){
$set_data['tel'] = $data['data'];
}else{
$set_data['email'] = $data['data'];
}
$set_data['password'] = $data['password'];
$set_data['head_pic'] = $this->default_head_pic;
$set_data['nickname'] = '用户'.time();
$set_data['create_time'] = date('Y-m-d H:i:s');
$set_data['login_time'] = date('Y-m-d H:i:s');
$set_data['token'] = md5($data['data'].$this->create_random_string(12).time());
$result = Db::table($this->login_use_db_name['1'])->insertGetId($set_data);
if($result){
$return_data = $this->msg(['token'=>$set_data['token'],'aan_id'=>$result]);
}else{
$return_data = $this->msg(10002);
}
// 成功
$this->record_api_log($data, null, $return_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'] .= "方法: " . __METHOD__ . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 重置密码
public function reset_password($data = ['data'=>'18530934717','password'=>'ceshi1','c_password'=>'ceshi1','code'=>'491661']){
try {
// 你的业务逻辑
// 验证是否前段发送过来的数据
if(count(input('post.')) > 0){
$data = input('post.');
}
// 验证数据项是否完整
if(!array_key_exists('data', $data) || !array_key_exists('password', $data) || !array_key_exists('c_password', $data) || !array_key_exists('code', $data)){
return $this->msg(10001);
}
// 验证数据值是否合规
if($data['password'] != $data['c_password']){
return $this->msg(10003,'两次密码不一致');
}
if($data['password'] == ''){
return $this->msg(10003,'密码不能为空');
}
if(!$this->verify_data_is_ok($data['password'],'str')){
return $this->msg(10005);
}
if(!$this->verify_data_is_ok($data['code'],'num')){
return $this->msg(10005);
}
// 检查验证码
$code_result = $this->check_code($data['data'],$data['code']);
if($code_result !== true){
return $this->msg(10003,$code_result);
}
$t_y = $this->is_tel_email($data['data']);
if($t_y === false){
return $this->msg(10003,'账号格式错误');
}
// 检查账号是否存在
$find_data = Db::table($this->login_use_db_name['1'])->where([$t_y=>$data['data'],'is_del'=>0])->field('id,token')->find();
if(!$find_data){
return $this->msg(10003);
}
$result = Db::table($this->login_use_db_name['1'])->where([$t_y=>$data['data']])->update(['password'=>$data['password']]);
if($result){
$return_data = $this->msg(['token'=>$find_data['token'],'aan_id'=>$find_data['id']]);
}else{
$return_data = $this->msg(10002);
}
// 成功
$this->record_api_log($data, null, $return_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'] .= "方法: " . __METHOD__ . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 登录
public function login_action($data = ['data'=>'18530934717','validate_data'=>'0932','type'=>'login','validate_type'=>'password']){
try {
// 你的业务逻辑
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('data', $data) || !array_key_exists('validate_data', $data) || !array_key_exists('validate_type', $data)){
return $this->msg(10001);
}
// 检测是否为手机
$montage_data = $this->is_tel_email($data['data']);
if($montage_data == false){
return $this->msg(10005);
}
$verify_result[$montage_data] = $data['data'];
$verify_result['is_del'] = 0;
// 检测校验途径
if($data['validate_type'] == 'code'){
$code_name = $data['data'];
if($this->check_code($code_name,$data['validate_data']) === true){
$result = Db::table($this->login_use_db_name['1'])->where($verify_result)->field('id,token')->find();
if($result){
Db::table($this->login_use_db_name['1'])->where($verify_result)->update(['login_time'=>date('Y-m-d H:i:s')]);
$return_data = $this->msg(['token'=>$result['token'],'aan_id'=>$result['id']]);
}else{
$set_data['password'] = '';
$set_data[$montage_data] = $data['data'];
$set_data['head_pic'] = $this->default_head_pic;
$set_data['nickname'] = '用户'.$data['data'];
$set_data['create_time'] = date('Y-m-d H:i:s');
$set_data['login_time'] = date('Y-m-d H:i:s');
$set_data['token'] = md5($data['data'].$this->create_random_string(12).time());
$result = Db::table($this->login_use_db_name['1'])->insertGetId($set_data);
if($result){
$return_data = $this->msg(['token'=>$set_data['token'],'aan_id'=>$result],'登录成功');
}else{
$return_data = $this->msg(10002);
}
}
}else{
$return_data = $this->msg(10003,'登录失败,验证码错误或失效');
}
}else if($data['validate_type'] == 'password'){
// $verify_result['password'] = $data['validate_data'];
$result = Db::table($this->login_use_db_name['1'])->where($verify_result)->field('id,token,password')->find();
if($result){
if($result['password'] == ''){
$return_data = $this->msg(10003,'该账户未设密码,请用验证码登录');
}
if($data['validate_data'] != $result['password']){
$return_data = $this->msg(10003,'账号密码错误');
}else{
Db::table($this->login_use_db_name['1'])->where($verify_result)->update(['login_time'=>date('Y-m-d H:i:s')]);
$return_data = $this->msg(['token'=>$result['token'],'aan_id'=>$result['id']],'登录成功');
}
}else{
$return_data = $this->msg(10003,'账号未注册,请先注册');
}
}else{
$return_data = $this->msg(10003,'校验参数错误');
}
// 成功
$this->record_api_log($data, null, $return_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'] .= "方法: " . __METHOD__ . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 微信手机号快捷登录
public function wechat_quick_login(){
try {
// 你的业务逻辑
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('code', $data)){
// return $this->msg(10001,'');
return $this->msg(10001,'code is miss');
}
if(!array_key_exists('encryptedData', $data)){
return $this->msg(10001,'encryptedData is miss');
}
if(!array_key_exists('iv', $data)){
return $this->msg(10001,'iv is miss');
}
// 校验参数
if (empty($data['code'])) {
return $this->msg(10001,'code is miss.');
}
if (empty($data['encryptedData'])) {
return $this->msg(10001,'encryptedData is miss.');
}
if (empty($data['iv'])) {
return $this->msg(10001,'iv is miss.');
}
// 调用Wechat服务类处理微信登录逻辑
$wechatService = new Wechat();
$result = $wechatService->handleWechatLogin($data['code'], $data['encryptedData'], $data['iv']);
// die;
if($result['code'] == 0){
// return $this->msg($result['code'],$result['msg']);
$user_data = Db::table($this->login_use_db_name['1'])->where(['tel'=>$result['data']['phoneNumber'],'is_del'=>0])->find();
if($user_data){
Db::table($this->login_use_db_name['1'])->where(['token'=>$user_data['token']])->update(['login_time'=>date('Y-m-d H:i:s')]);
$return_data = $this->msg(['token'=>$user_data['token'],'aan_id'=>$user_data['id']]);
}else{
$set_data['password'] = '';
$set_data['tel'] = $result['data']['phoneNumber'];
$set_data['head_pic'] = $this->default_head_pic;
$set_data['nickname'] = '用户'.$result['data']['phoneNumber'];
$set_data['create_time'] = date('Y-m-d H:i:s');
$set_data['login_time'] = date('Y-m-d H:i:s');
$set_data['token'] = md5($result['data']['phoneNumber'].$this->create_random_string(12).time());
$set_user_result = Db::table($this->login_use_db_name['1'])->insertGetId($set_data);
if($set_user_result){
$return_data = $this->msg(['token'=>$set_data['token'],'aan_id'=>$set_user_result],'登录成功');
}else{
$return_data = $this->msg(10002);
}
}
return $return_data;
}else{
return $this->msg($result['code'],$result['msg']);
}
} 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'] .= "方法: " . __METHOD__ . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 退出登录操作
public function user_quit_account($data=['token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
try {
// 你的业务逻辑
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('token', $data)){
$return_data = $this->msg(10001);
}
if($this->token_time_validate($data['token']) === false){
$return_data = $this->msg(20001);
}
$result = Db::table($this->login_use_db_name['1'])->where(['token'=>$data['token']])->update(['login_time'=>'2024-09-01 00:00:00']);
if($result){
$return_data = $this->msg([]);
}else{
$return_data = $this->msg(10002);
}
// 成功
$this->record_api_log($data, null, $return_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'] .= "方法: " . __METHOD__ . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 删除账号
public function delete_account($data=['token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
try {
// 你的业务逻辑
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('token', $data)){
$return_data = $this->msg(10001);
}
$result = Db::table($this->login_use_db_name['1'])->where(['token'=>$data['token']])->update(['is_del'=>1,'login_time'=>'2024-09-01 00:00:00']);
if($result){
$return_data = $this->msg([]);
}else{
$return_data = $this->msg(10002);
}
// 成功
$this->record_api_log($data, null, $return_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'] .= "方法: " . __METHOD__ . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
################################################################接口################################################################
################################################################接口################################################################
################################################################接口################################################################
// 发送验证码 手机/邮箱
/* 接口说明(发邮件)
* $data手机或者邮箱信息 字符串
* $type验证类型是注册用还是其他用途 字符串 默认register注册register、login、reset_password
* $road是手机还是邮箱还是其他 字符串 默认tel或email
*/
//18736019909
public function send_phone_email_code($data = ['data'=>'18736019909']){
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('data', $data)){
return $this->msg(10001);
}
if(cache($data['data'])){
return $this->msg(10002,'60秒仅可发送一次验证码');
}
$num = mt_rand(100000,999999);
if (preg_match('/^\d{11}$/', $data['data'])) {
// 本公司短信
$result = $this->send_tel_code($data['data'],$num);
// 阿里云短信
// $sms_all = new Smsaliyun;
// $result = $sms_all->send_sms($data['data'],$num);
// dump($result);
$road = 'tel';
}else{
$result = $this->send_email_code([$data['data']],['title'=>'体测APP验证码','from_user_name'=>'体测APP','content'=>$num]);
$road = 'email';
}
if(is_array($result) && $result['code'] == 0){
cache($data['data'], $num, $this->code_time);
// return $this->msg(['code'=>$num]);
return $this->msg([]);
// return true;
}else{
return $this->msg(10010,'验证码发送失败');
// return false;
}
}
################################内部调用################################
/* 接口说明(发手机短信)
*/
public function send_tel_code($tel,$code){
// 初始化cURL会话
$ch = curl_init();
$headers = [
'Accept: application/json',
'Content-Type: application/json',
];
// 设置头部信息
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 设置请求的URL
$url = "http://sms.ybhdmob.com/Message/Send?token=ybhdmob";
curl_setopt($ch, CURLOPT_URL, $url);
// 设置为POST请求
curl_setopt($ch, CURLOPT_POST, 1);
// 设置POST数据
$postData = array(
'phone' => $tel,
// 'content' => '【巨天】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
// 'content' => '【郑州品传科技】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
// 'content' => '【每日一称】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
'content' => '【小白健康】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
);
$postData = json_encode($postData);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// 设置返回结果不直接输出,而是返回到变量中
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 发送请求并获取响应
$response = curl_exec($ch);
// dump($response);
// 检查是否有错误发生
if (curl_errno($ch)) {
$error_message = curl_error($ch);
return "请求错误: " . $error_message;
}
// 关闭cURL会话
curl_close($ch);
// 处理响应
// dump(json_decode($response,true));
if ($response) {
return json_decode($response,true);
} else {
echo "未收到响应";
}
}
// 手机号区分
function getCarrierByPhone($phone) {
// 验证手机号格式11位数字且以1开头
if (!preg_match('/^1[3-9]\d{9}$/', $phone)) {
return '无效手机号';
}
$prefix3 = substr($phone, 0, 3);
// 2025年最新3位号段排除4位号段
$carriers = [
'中国移动' => ['134', '135', '136', '137', '138', '139', '150', '151', '152', '157', '158', '159', '178', '182', '183', '184', '187', '188', '195', '197', '198'],
'中国联通' => ['130', '131', '132', '155', '156', '166', '175', '176', '185', '186', '196'],
'中国电信' => ['133', '153', '173', '177', '180', '181', '189', '190', '191', '193', '199'],
'中国广电' => ['192']
];
foreach ($carriers as $carrier => $segments) {
if (in_array($prefix3, $segments)) {
return $carrier;
}
}
return '未知运营商';
}
/* 接口说明(发邮件)
* $address收件人的邮箱地址 数组 格式: ['460834639@qq.com','460834639@qq.com'.......]
* $content邮件的主题数据信息 数组 格式:['title'=>'123','from_user_name'=>'123','content'=>'123']
* $annex附件路径信息 字符串
*/
public function send_email_code($address,$content,$annex=''){
// $ad = '460834639@qq.com';
$ad1 = '295155911@qq.com';
$mail = new PHPMailer(); //实例化
$mail->IsSMTP(); // 启用SMTP
$mail->Host = "smtp.126.com"; //SMTP服务器 163邮箱例子
$mail->Port = 465; //邮件发送端口
$mail->SMTPAuth = true; //启用SMTP认证
$mail->SMTPSecure = 'ssl';
$mail->CharSet = "UTF-8"; //字符集
$mail->Encoding = "base64"; //编码方式
$mail->Username = "tsf3920322@126.com"; //你的邮箱
$mail->Password = "HLWXNRPUCTHJFIIX"; //你的密码(邮箱后台的授权密码)
$mail->From = "tsf3920322@126.com"; //发件人地址(也就是你的邮箱)
// $mail->Subject = "微盟测试邮件"; //邮件标题
$mail->Subject = $content['title']; //邮件标题
// $mail->FromName = "微盟体测中心"; //发件人姓名
$mail->FromName = $content['from_user_name']; //发件人姓名
for ($i=0; $i < count($address); $i++) {
$mail->AddAddress($address[$i], ""); //添加收件人(地址,昵称)
}
if($annex != ''){
// $url = ROOT_PATH. 'public' . DS . 'tsf' . DS .'demoooo.jpg';
$mail->AddAttachment($annex,''); // 添加附件,并指定名称
}
$mail->IsHTML(true); //支持html格式内容
$neirong = '<div style="margin: 0; padding: 0;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="background: #f3f3f3; min-width: 350px; font-size: 1px; line-height: normal;">
<tbody><tr>
<td align="center" valign="top">
<table cellpadding="0" cellspacing="0" border="0" width="750" class="table750" style="width: 100%; max-width: 750px; min-width: 350px; background: #f3f3f3;">
<tbody><tr>
<td class="mob_pad" width="25" style="width: 25px; max-width: 25px; min-width: 25px;">&nbsp;</td>
<td align="center" valign="top" style="background: #ffffff;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="width: 100% !important; min-width: 100%; max-width: 100%; background: #f3f3f3;">
<tbody><tr>
<td align="right" valign="top">
<div class="top_pad" style="height: 25px; line-height: 25px; font-size: 23px;">&nbsp;</div>
</td>
</tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" border="0" width="88%" style="width: 88% !important; min-width: 88%; max-width: 88%;">
<tbody><tr>
<td align="left" valign="top">
<div style="height: 39px; line-height: 39px; font-size: 37px;">&nbsp;</div>
<font class="mob_title1" face="\'Source Sans Pro\', sans-serif" color="#1a1a1a" style="font-size: 52px; line-height: 55px; font-weight: 300; letter-spacing: -1.5px;">
<span class="mob_title1" style="font-family: \'Nunito\', Arial, Tahoma, Geneva, sans-serif; color: #fb966e; font-size: 48px; line-height: 55px; font-weight: 700; letter-spacing: -1.5px;">Reedaw!</span>
</font>
<div style="height: 73px; line-height: 73px; font-size: 71px;">&nbsp;</div>
</td>
</tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" border="0" width="88%" style="width: 88% !important; min-width: 88%; max-width: 88%;">
<tbody><tr>
<td align="left" valign="top">
<div style="height: 33px; line-height: 33px; font-size: 31px;">&nbsp;</div>
<font face="\'Nunito\', sans-serif" color="#585858" style="font-size: 24px; line-height: 32px;">
<span style="font-family: \'Nunito\', Arial, Tahoma, Geneva, sans-serif; color: #585858; font-size: 24px; line-height: 32px;">感谢您选择锐动产品!</span>
</font>
<div style="height: 33px; line-height: 33px; font-size: 31px;">&nbsp;</div>
<font face="\'Nunito\', sans-serif" color="#585858" style="font-size: 24px; line-height: 32px;">
<span style="font-family: \'Nunito\', Arial, Tahoma, Geneva, sans-serif; color: #585858; font-size: 24px; line-height: 32px;">以下6位数字是邮箱验证码请在需要的位置填写以通过验证</span>
</font>
<div style="height: 18px; line-height: 33px; font-size: 31px;">&nbsp;</div>
<font face="\'Nunito\', sans-serif" color="#585858" style="font-size: 24px; line-height: 32px;">
<span style="font-family: \'Nunito\', Arial, Tahoma, Geneva, sans-serif; color: #aaaaaa; font-size: 16px; line-height: 32px;">(如果您从未请求发送邮箱验证码,请忽略此邮件)</span>
</font>
<div style="height: 33px; line-height: 33px; font-size: 31px;">&nbsp;</div>
<table class="mob_btn" cellpadding="0" cellspacing="0" border="0" style="background: #fb966e; border-radius: 4px;">
<tbody><tr>
<td align="center" valign="top">
<span style="display: block; border: 1px solid #fb966e; border-radius: 0px; padding: 6px 12px; font-family: \'Nunito\', Arial, Verdana, Tahoma, Geneva, sans-serif; color: #ffffff; font-size: 20px; line-height: 30px; text-decoration: none; white-space: nowrap; font-weight: 600;">
<font face="\'Nunito\', sans-serif" color="#ffffff" style="font-size: 20px; line-height: 30px; text-decoration: none; white-space: nowrap; font-weight: 600;">
<span style="font-family: \'Nunito\', Arial, Verdana, Tahoma, Geneva, sans-serif; color: #ffffff; font-size: 20px; line-height: 30px; text-decoration: none; white-space: nowrap; font-weight: 600;">'.$content['content'].'</span>
</font>
</span>
</td>
</tr>
</tbody></table>
<div style="height: 75px; line-height: 75px; font-size: 73px;">&nbsp;</div>
</td>
</tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="width: 100% !important; min-width: 100%; max-width: 100%; background: #f3f3f3;">
<tbody><tr>
<td align="center" valign="top">
<div style="height: 34px; line-height: 34px; font-size: 32px;">&nbsp;</div>
<table cellpadding="0" cellspacing="0" border="0" width="88%" style="width: 88% !important; min-width: 88%; max-width: 88%;">
<tbody><tr>
<td align="center" valign="top">
<div style="height:12px; line-height: 34px; font-size: 32px;">&nbsp;</div>
<font face="\'Nunito\', sans-serif" color="#868686" style="font-size: 17px; line-height: 20px;">
<span style="font-family: \'Nunito\', Arial, Tahoma, Geneva, sans-serif; color: #868686; font-size: 17px; line-height: 20px;">© Zhengzhou Pinchuan Technology Co., Ltd. </span>
</font>
<div style="height: 3px; line-height: 3px; font-size: 1px;">&nbsp;</div>
<font face="\'Nunito\', sans-serif" color="#1a1a1a" style="font-size: 17px; line-height: 20px;">
<span style="font-family: \'Nunito\', Arial, Tahoma, Geneva, sans-serif; color: #1a1a1a; font-size: 17px; line-height: 20px;"><a target="_blank" style="font-family: \'Nunito\', Arial, Tahoma, Geneva, sans-serif; color: #1a1a1a; font-size: 17px; line-height: 20px; text-decoration: none;" href="https://paoluz.link/"></a></span>
</font>
<div style="height: 35px; line-height: 35px; font-size: 33px;">&nbsp;</div>
</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</td>
<td class="mob_pad" width="25" style="width: 25px; max-width: 25px; min-width: 25px;">&nbsp;</td>
</tr>
</tbody></table>
</td>
</tr>
</tbody></table>
</div>';
$mail->Body = $neirong; //邮件主体内容
//发送
if (!$mail->Send()) {
return ['code' => 10003,'msg'=>$mail->ErrorInfo];
// return $mail->ErrorInfo;
} else {
return ['code' => 0];
// return 'success';
}
}
public function check_code($data = 18530934717 , $code = 123456){
// // 默认验证码正确
if(cache($data) == false){
return '验证码过期';
}else{
if($code != cache($data)){
return '验证码错误';
}
}
return true;
}
################################################################other################################################################
################################################################other################################################################
################################################################other################################################################
public function create_random_string($length = 12)
{
//创建随机字符
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
}

View File

@ -37,7 +37,7 @@ class Usercenter extends Base{
// 获取角色信息
public function get_user_msg($data = ['token'=>'caadd1be045a65f30b92aa805f1de54a']){
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -49,24 +49,24 @@ class Usercenter extends Base{
}
$return_data = $this->get_user_msg_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'] .= "接口: get_default_config\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 $this->msg(99999);
// }
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "接口: get_default_config\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 $this->msg(99999);
}
}
// 修改用户
public function update_user_msg($data = ['token'=>'caadd1be045a65f30b92aa805f1de54a','nickname'=>'测试人员001','gender'=>'1','age'=>'18','height'=>'165.34','weight'=>'55.55']){
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -108,25 +108,25 @@ class Usercenter extends Base{
}
$return_data = $this->update_user_msg_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'] .= "接口: get_default_config\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 $this->msg(99999);
// }
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "接口: get_default_config\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 $this->msg(99999);
}
}
// 获取用户收藏点赞列表(OK)
public function get_user_collect_list($data = ['token'=>'caadd1be045a65f30b92aa805f1de54a','page'=>1,'search_data'=>'']){
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -144,25 +144,25 @@ class Usercenter extends Base{
}
$return_data = $this->get_user_collect_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'] .= "接口: get_default_config\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 $this->msg(99999);
// }
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "接口: get_default_config\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 $this->msg(99999);
}
}
// 我的菜谱
public function get_my_cookbook($data = ['token'=>'caadd1be045a65f30b92aa805f1de54a','page'=>1,'search_data'=>'']){
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -180,25 +180,25 @@ class Usercenter extends Base{
}
$return_data = $this->get_my_cookbook_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'] .= "接口: get_default_config\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 $this->msg(99999);
// }
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "接口: get_default_config\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 $this->msg(99999);
}
}
// 菜谱删除
public function del_my_cookbook($data = ['token'=>'caadd1be045a65f30b92aa805f1de54a','aud_id'=>1,'cookbook_id'=>'33']){
// try {
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -222,20 +222,20 @@ class Usercenter extends Base{
}
$return_data = $this->del_my_cookbook_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'] .= "接口: get_default_config\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 $this->msg(99999);
// }
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "接口: get_default_config\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 $this->msg(99999);
}
}

View File

@ -4,12 +4,13 @@ namespace app\KitchenScale\controller\app;
use think\Db;
use PHPMailer\PHPMailer\PHPMailer;
class Wechat extends Base{
// reedaw的小程序信息
private $app_id = 'wx1f32af4f93c913f6'; // 微信小程序的AppID
private $app_secret = '21c6660d94d635cea4831253c60fc6e2'; // 微信小程序的AppSecret
private $app_id = 'wx1f32af4f93c913f6'; // 轻厨记的微信小程序的AppID
private $app_secret = '851f809f6abbbeeeb95d313ada80d025'; // 轻厨记的微信小程序的AppSecret
// ed7cda5874f0eef3360e782a3db73c80

View File

@ -38,7 +38,8 @@ class Appversion extends Base{
// if($data['e_time']){
// $parameter['create_time'] = ['<=',$data['e_time']];
// }
}
}
$num = Db::table('app_version_log')->where($parameter)->count();
$result = Db::table('app_version_log')->where($parameter)->order('id desc')->page($page,$this->page_num)->select();
if(!$pd){

View File

@ -85,6 +85,9 @@ class Editortext extends Base{
if(!$article_data){
return $this->msg(10004);
}
if($article_data['scene_id'] == 2){
header("Location: ".$article_data['content']);
}
$result = $article_data;
// 处理是否有过点赞
if(array_key_exists('token', $data)){
@ -155,6 +158,7 @@ class Editortext extends Base{
'sector'=>implode(',', $data['sector']),
'type'=>implode(',', $data['type']),
'cover_image'=>"upload_pic/".$pic_data['name'],
'scene_id'=>$data["scene_id"],
]);
if($result){
return $this->msg([]);
@ -177,7 +181,8 @@ class Editortext extends Base{
'update_time'=>date('Y-m-d H:i:s'),
'sector'=>implode(',', $data['sector']),
'type'=>implode(',', $data['type']),
'cover_image'=>"upload_pic/".$pic_data['name']
'cover_image'=>"upload_pic/".$pic_data['name'],
'scene_id'=>$data["scene_id"],
]);
if($result){
return $this->msg([]);

View File

@ -91,7 +91,7 @@ class Notice extends Base{
'pic' => $data['banner_img'],
'type' => $data['type'],
'jump_url' => $data['jump_url'],
'parameter_data' => $data['parameter_data'],
'parameter_data' => $data['parameter_data'] != '' ? $data['parameter_data'] : 999999,
'create_time' => date('Y-m-d H:i:s'),
'scene_data' => $data['scene_data'],
];
@ -101,6 +101,8 @@ class Notice extends Base{
$action_data['jump_url'] = "https://tc.pcxbc.com/editortext/model_content";
}else if($action_data['type'] == 2){
$action_data['jump_url'] = "weixin://dl/business/?appid=".$data['parameter_data']."&path=".$data['jump_url'];
}else if($action_data['type'] == 3){
$action_data['jump_url'] = $data['jump_url'];
}else{
return $this->msg(10002,'选择类型错误');
}
@ -108,7 +110,7 @@ class Notice extends Base{
$result = Db::table('admin_notice_banner')->insertGetId($action_data);
}else{
unset($action_data['create_time']);
unset($action_data['scene_data']);
// unset($action_data['scene_data']);
$result = Db::table('admin_notice_banner')->where(['id'=>$data['id']])->update($action_data);
}
if($result){

View File

@ -29,7 +29,7 @@
<form action="" method="post" class="layui-form layui-form-pane">
<div class="layui-form-item">
<label for="title_v" class="layui-form-label">
<span class="x-red"></span>标题描述
<span class="x-red"></span>标题描述
</label>
<div class="layui-input-inline">
<input type="text" id="title_v" name="title_v" required="" lay-verify="title_v" autocomplete="off" class="layui-input">
@ -37,7 +37,7 @@
</div>
<div class="layui-form-item">
<label for="title_v" class="layui-form-label">
<span class="x-red"></span>上传封面
<span class="x-red"></span>上传封面
</label>
<div class="layui-input-inline">
<div class="layui-btn" onclick="xadmin.open('图片管理','/admin/pic','80%','80%')">点击选择</div>
@ -55,7 +55,7 @@
<div class="layui-form-item layui-form-text" style="max-width: 440px;">
<label class="layui-form-label">
发布板块
<span class="x-red"></span>发布板块
</label>
<table class="layui-table layui-input-block">
<tbody>
@ -76,7 +76,7 @@
</div>
<div class="layui-form-item layui-form-text" style="max-width: 440px;">
<label class="layui-form-label">
发布类型
<span class="x-red"></span>发布类型
</label>
<table class="layui-table layui-input-block">
<tbody>
@ -98,9 +98,29 @@
</tbody>
</table>
</div>
<div class="layui-form-item layui-form-text" style="max-width: 90%;">
<div class="layui-form-item">
<label for="scene_data" class="layui-form-label">
<span class="x-red"></span>选择场景
</label>
<div class="layui-input-inline" style="width: 80%;">
<select id="scene_data" name="scene_data" lay-filter="scene_data" lay-verify="scene_data">
<option value="0">请选择使用场景</option>
<option value="1">图文编辑</option>
<option value="2">微信公众号文章链接</option>
</select>
</div>
</div>
<div class="layui-form-item" id="parameter_data_box">
<label for="parameter_data" class="layui-form-label">
<span class="x-red"></span>填写链接
</label>
<div class="layui-input-inline" style="width: 80%;">
<input type="text" id="parameter_data" name="parameter_data" lay-verify="parameter_data" autocomplete="off" class="layui-input" placeholder="请填写公众号文章链接">
</div>
</div>
<div class="layui-form-item layui-form-text" style="max-width: 90%;" id="editor_wrapper_box">
<label for="desc" class="layui-form-label">
内容编辑
<span class="x-red"></span>内容编辑
</label>
<div id="editor—wrapper">
<div id="toolbar-container"><!-- 工具栏 --></div>
@ -186,6 +206,8 @@
var sector_arr = []
var type_arr = []
var pd = true
$('#parameter_data_box').hide();
$('#editor_wrapper_box').hide();
layui.use(['form'], function () {
form = layui.form;
form.verify({
@ -194,6 +216,11 @@
return '请先选择添加标题';
}
},
scene_data: function(value) {
if (value == 0) {
return '请选择场景';
}
},
});
//监听提交
form.on('submit(add)',function(data) {
@ -267,6 +294,23 @@
}
}
});
form.on('select(scene_data)', function(data){
var value = data.value;
// 根据选择的值显示/隐藏对应的元素
if(value === '1') {
$('#editor_wrapper_box').show();
$('#parameter_data_box').hide();
} else if(value === '2') {
$('#parameter_data_box').show();
$('#editor_wrapper_box').hide();
} else {
// 值为0或其他时两个都隐藏
$('#parameter_data_box').hide();
$('#editor_wrapper_box').hide();
}
});
});
@ -283,6 +327,12 @@
'sector':sector_arr,
'type':type_arr,
'content':html,
'scene_id':$('#scene_data').val(),
}
if($('#scene_data').val() == 2){
data.content = $('#parameter_data').val();
}else if($('#scene_data').val() == 0){
return
}
// var formdata = new FormData();
// formdata.append('cover_image',$('#upload_file_app')[0].files[0])
@ -290,7 +340,8 @@
// formdata.append('sector',sector_arr)
// formdata.append('type',type_arr)
// formdata.append('content',html)
// console.log(formdata)
// console.log(data)
// return
pd = false
load()
$.ajax({

View File

@ -140,7 +140,39 @@
</tbody>
</table>
</div>
<div class="layui-form-item layui-form-text" style="max-width: 90%;">
<div class="layui-form-item">
<label for="scene_data" class="layui-form-label">
<span class="x-red"></span>选择场景
</label>
<div class="layui-input-inline" style="width: 80%;">
<select id="scene_data" name="scene_data" lay-filter="scene_data" lay-verify="scene_data">
{if condition="$result.scene_id == 0"}
<option value="0" selected>请选择使用场景</option>
<option value="1">图文编辑</option>
<option value="2">微信公众号文章链接</option>
{elseif condition="$result.scene_id == 1"/}
<option value="0">请选择使用场景</option>
<option value="1" selected>图文编辑</option>
<option value="2">微信公众号文章链接</option>
{elseif condition="$result.scene_id == 2"/}
<option value="0">请选择使用场景</option>
<option value="1">图文编辑</option>
<option value="2" selected>微信公众号文章链接</option>
{else /}
{/if}
</select>
</div>
</div>
<div class="layui-form-item" id="parameter_data_box">
<label for="parameter_data" class="layui-form-label">
<span class="x-red"></span>填写链接
</label>
<div class="layui-input-inline" style="width: 80%;">
<input type="text" id="parameter_data" name="parameter_data" lay-verify="parameter_data" autocomplete="off" class="layui-input" placeholder="请填写公众号文章链接">
</div>
</div>
<div class="layui-form-item layui-form-text" style="max-width: 90%;" id="editor_wrapper_box">
<label for="desc" class="layui-form-label">
内容编辑
</label>
@ -169,7 +201,10 @@
$('#banner_img').val(pic_data[0])
}
}
var content_str = '{$result.content}';
$('#parameter_data').val(content_str)
// var content_str = '';
var html
const { createEditor, createToolbar } = window.wangEditor
@ -230,8 +265,20 @@
var id = '{$result.id}'
var sector_arr = '{$result.sector}'.split(",")
var type_arr = '{$result.type}'.split(",")
console.log(sector_arr)
// console.log(sector_arr)
console.log($('#scene_data').val())
var pd = true
if($('#scene_data').val() == 0){
$('#parameter_data_box').hide();
$('#editor_wrapper_box').hide();
}else if($('#scene_data').val() == 1){
$('#parameter_data_box').hide();
$('#editor_wrapper_box').show();
}else if($('#scene_data').val() == 2){
$('#parameter_data_box').show();
$('#editor_wrapper_box').hide();
}
layui.use(['form'], function () {
form = layui.form;
form.verify({
@ -240,7 +287,13 @@
return '请先选择添加标题';
}
},
scene_data: function(value) {
if (value == 0) {
return '请选择场景';
}
},
});
//监听提交
form.on('submit(add)',function(data) {
@ -313,7 +366,22 @@
}
console.log(type_arr)
});
form.on('select(scene_data)', function(data){
var value = data.value;
// 根据选择的值显示/隐藏对应的元素
if(value === '1') {
$('#editor_wrapper_box').show();
$('#parameter_data_box').hide();
} else if(value === '2') {
$('#parameter_data_box').show();
$('#editor_wrapper_box').hide();
} else {
// 值为0或其他时两个都隐藏
$('#parameter_data_box').hide();
$('#editor_wrapper_box').hide();
}
});
});
@ -333,6 +401,12 @@
'sector':sector_arr,
'type':type_arr,
'content':html,
'scene_id':$('#scene_data').val(),
}
if($('#scene_data').val() == 2){
data.content = $('#parameter_data').val();
}else if($('#scene_data').val() == 0){
return
}
// var formdata = new FormData();
// formdata.append('cover_image',$('#upload_file_app')[0].files[0])

View File

@ -171,7 +171,7 @@
}
});
});
function edit_order_action(e,data,str,id){
if($(e).val() == data){
return

View File

@ -66,10 +66,11 @@
<option value="0">请选择跳转类型</option>
<option value="1">站内文章</option>
<option value="2">微信小程序</option>
<option value="3">公众号文章链接</option>
</select>
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-item" id="parameter_data_box">
<label for="parameter_data" class="layui-form-label">
<span class="x-red"></span>填写关键参数
</label>
@ -77,7 +78,7 @@
<input type="text" id="parameter_data" name="parameter_data" lay-verify="parameter_data" autocomplete="off" class="layui-input" onfocus="pd_data_type()">
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-item" id="jump_url_box">
<label for="jump_url" class="layui-form-label">
<span class="x-red"></span>页面路径
</label>
@ -154,8 +155,10 @@
}
},
parameter_data: function(value) {
if (value == 0) {
return '请先填写关键参数信息';
if($('#data_type').val() == '1' || $('#data_type').val() == '2'){
if (value == 0) {
return '请先填写关键参数信息';
}
}
},
jump_url: function(value) {
@ -167,6 +170,20 @@
},
});
form.on('select(data_type)', function(data){
$('#parameter_data_box').show();
$('#jump_url_box').show();
$('#parameter_data').val('');
$('#jump_url').val('');
$('#jump_url').attr('placeholder', '');
if(data.value == 1){
// $('#parameter_data_box').hide();
$('#jump_url_box').hide();
}else if(data.value == 2){
}else if(data.value == 3){
$('#parameter_data_box').hide();
}
});
//监听提交
form.on('submit(add)',function(data) {
//发异步把数据提交给php

View File

@ -49,17 +49,17 @@
</label>
<div class="layui-input-inline" style="width: 80%;">
<select id="scene_data" name="scene_data" lay-filter="scene_data" lay-verify="scene_data">
{if condition="$result.type == 1"}
{if condition="$result.scene_data == 1"}
<option value="0">请选择使用场景</option>
<option value="1" selected>首屏弹窗</option>
<option value="2">滚动公告</option>
<option value="3">首页banner</option>
{elseif condition="$result.type == 2"/}
{elseif condition="$result.scene_data == 2"/}
<option value="0">请选择使用场景</option>
<option value="1">首屏弹窗</option>
<option value="2" selected>滚动公告</option>
<option value="3">首页banner</option>
{elseif condition="$result.type == 3"/}
{elseif condition="$result.scene_data == 3"/}
<option value="0">请选择使用场景</option>
<option value="1">首屏弹窗</option>
<option value="2">滚动公告</option>
@ -84,27 +84,48 @@
<option value="0">请选择跳转类型</option>
<option value="1" selected>站内文章</option>
<option value="2">微信小程序</option>
<option value="3">公众号文章链接</option>
{elseif condition="$result.type == 2"/}
<option value="0">请选择跳转类型</option>
<option value="1">站内文章</option>
<option value="2" selected>微信小程序</option>
<option value="3">公众号文章链接</option>
{elseif condition="$result.type == 3"/}
<option value="0">请选择跳转类型</option>
<option value="1">站内文章</option>
<option value="2">微信小程序</option>
<option value="3" selected>公众号文章链接</option>
{else /}
<option value="0" selected>请选择跳转类型</option>
<option value="1">站内文章</option>
<option value="2">微信小程序</option>
<option value="3">公众号文章链接</option>
{/if}
</select>
</div>
</div>
<div class="layui-form-item">
<label for="parameter_data" class="layui-form-label">
<span class="x-red"></span>填写关键参数
</label>
<div class="layui-input-inline" style="width: 80%;">
<input type="text" id="parameter_data" name="parameter_data" lay-verify="parameter_data" autocomplete="off" class="layui-input" onfocus="pd_data_type()" value="{$result.parameter_data}">
{if condition="$result.type == 1 or $result.type == 2"}
<div class="layui-form-item" style="display:block;" id="parameter_data_box">
<label for="parameter_data" class="layui-form-label">
<span class="x-red"></span>填写关键参数
</label>
<div class="layui-input-inline" style="width: 80%;">
<input type="text" id="parameter_data" name="parameter_data" lay-verify="parameter_data" autocomplete="off" class="layui-input" onfocus="pd_data_type()" value="{$result.parameter_data}">
</div>
</div>
</div>
<div class="layui-form-item">
{else /}
<div class="layui-form-item" style="display:none;" id="parameter_data_box">
<label for="parameter_data" class="layui-form-label">
<span class="x-red"></span>填写关键参数
</label>
<div class="layui-input-inline" style="width: 80%;">
<input type="text" id="parameter_data" name="parameter_data" lay-verify="parameter_data" autocomplete="off" class="layui-input" onfocus="pd_data_type()" value="{$result.parameter_data}">
</div>
</div>
{/if}
{if condition="$result.type == 2 or $result.type == 3"}
<div class="layui-form-item" style="display:block;" id="jump_url_box">
<label for="jump_url" class="layui-form-label">
<span class="x-red"></span>页面路径
</label>
@ -112,6 +133,18 @@
<input type="text" id="jump_url" name="jump_url" lay-verify="jump_url" autocomplete="off" class="layui-input" placeholder="若选择站内文章,则无需填写该项" value="{$result.jump_url}">
</div>
</div>
{else /}
<div class="layui-form-item" style="display:none;" id="jump_url_box">
<label for="jump_url" class="layui-form-label">
<span class="x-red"></span>页面路径
</label>
<div class="layui-input-inline" style="width: 80%;">
<input type="text" id="jump_url" name="jump_url" lay-verify="jump_url" autocomplete="off" class="layui-input" placeholder="若选择站内文章,则无需填写该项" value="{$result.jump_url}">
</div>
</div>
{/if}
<div class="layui-form-item" style="display: flex;flex-direction: row;justify-content: center;">
<button class="layui-btn" lay-filter="add" lay-submit="">修改</button>
</div>
@ -181,19 +214,37 @@
}
},
parameter_data: function(value) {
if (value == 0) {
return '请先填写关键参数信息';
console.log(value)
if($('#data_type').val() == '1' || $('#data_type').val() == '2'){
if (value == 0) {
return '请先填写关键参数信息';
}
}
},
jump_url: function(value) {
if ($('#data_type').val() == 2) {
if ($('#data_type').val() == 3) {
if($('#jump_url').val() == ''){
return '请先填写微信小程序页面路径';
return '请填写公众号文章链接';
}
}
},
});
form.on('select(data_type)', function(data){
$('#parameter_data_box').show();
$('#jump_url_box').show();
$('#parameter_data').val('');
$('#jump_url').val('');
$('#jump_url').attr('placeholder', '');
if(data.value == 1){
// $('#parameter_data_box').hide();
$('#jump_url_box').hide();
}else if(data.value == 2){
}else if(data.value == 3){
$('#parameter_data_box').hide();
}
});
//监听提交
form.on('submit(add)',function(data) {
//发异步把数据提交给php

View File

@ -712,6 +712,9 @@ class Base extends Controller{
public function ceshiyong($aa = 4,$gd = 0.2){
phpinfo();
die;
$token = 'cd3f27cf4c4002170ea7bceeb723ac91';
$data = Db::table('pc_bmistand2')->select();

View File

@ -319,7 +319,7 @@ class Card extends Base{
}
// 修改初始体重/目标体重
public function card_modify_weight($data = ['aud_id'=>'11','weight'=>'50','type'=>2,'time'=>'2024-10-01','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
public function card_modify_weight($data = ['aud_id'=>'3967','weight'=>'124','type'=>1,'time'=>'','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
try {
// 你的业务逻辑
if(count(input('post.')) > 0){
@ -1214,6 +1214,7 @@ class Card extends Base{
where acbd.aud_id = ".$data['aud_id']."
order by acbd.record_time desc
");
if($data['type'] == 1){
// 修改目标体重
$bhw_date = ['target_weight'=>$data['weight']];
@ -1224,13 +1225,13 @@ class Card extends Base{
return $this->msg(10005);
}
$result_update = Db::table($this->card_use_db_name['2'])->where(['id'=>$data['aud_id']])->update($bhw_date);
// $result_update = true;
if($result_update){
$target_current = $this->base_target_initial_cumulative_weight([
'weight'=>$result[0]['weight'],
'target_weight'=>$data['type'] == 1?$data['weight']:$result[0]['target_weight'],
'initial_weight'=>$data['type'] == 1?$result[0]['initial_weight']:$data['weight'],
'initial_date'=>$data['type'] == 1?$result[0]['initial_date']:$data['time'],
'weight'=>count($result) <= 0?0:$result[0]['weight'],
'target_weight'=>$data['type'] == 1?$data['weight']:(count($result) <= 0?0:$result[0]['target_weight']),
'initial_weight'=>$data['type'] == 1?(count($result) <= 0?0:$result[0]['initial_weight']):$data['weight'],
'initial_date'=>$data['type'] == 1?(count($result) <= 0?'':$result[0]['initial_date']):$data['time'],
]);
return $this->msg($target_current);

View File

@ -11,7 +11,7 @@ use app\app\controller\Wechat;// 引入Wechat服务类
class Login extends Base{
protected $code_time = 50;
// protected $token_time = 2592000;//30天的秒数
protected $default_head_pic = 'http://tc.pcxbc.com/tsf/head_pic.png';
protected $default_head_pic = 'https://tc.pcxbc.com/tsf/head_pic.png';
protected $login_use_db_name = [
'1'=>'app_account_number',
];
@ -457,7 +457,7 @@ class Login extends Base{
*/
public function send_tel_code($tel,$code){
// 初始化cURL会话
$ch = curl_init();
$ch = curl_init();
$headers = [
'Accept: application/json',
'Content-Type: application/json',
@ -472,12 +472,10 @@ class Login extends Base{
// 设置POST数据
$postData = array(
'phone' => $tel,
// 'content' => '您好欢迎使用Reedaw,您的手机验证码是:'.$code.',验证码三分钟内有效,若非本人操作,请忽略!'
// 'content' => '【Reedaw】您好欢迎使用Reedaw您的验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
'content' => '【巨天】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
// 'content' => '【小白秤】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
// 'content' => '【品传科技】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
// 'content' => '【巨天】您好,欢迎使用巨天,您的手机验证码是:'.$code.',验证码一分钟内有效,若非本人操作,请忽略!'
// 'content' => '【巨天】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
// 'content' => '【郑州品传科技】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
// 'content' => '【每日一称】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
'content' => '【小白健康】您好欢迎使用Reedaw您的手机验证码是'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信'
);
$postData = json_encode($postData);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
@ -501,6 +499,31 @@ class Login extends Base{
echo "未收到响应";
}
}
// 手机号区分
function getCarrierByPhone($phone) {
// 验证手机号格式11位数字且以1开头
if (!preg_match('/^1[3-9]\d{9}$/', $phone)) {
return '无效手机号';
}
$prefix3 = substr($phone, 0, 3);
// 2025年最新3位号段排除4位号段
$carriers = [
'中国移动' => ['134', '135', '136', '137', '138', '139', '150', '151', '152', '157', '158', '159', '178', '182', '183', '184', '187', '188', '195', '197', '198'],
'中国联通' => ['130', '131', '132', '155', '156', '166', '175', '176', '185', '186', '196'],
'中国电信' => ['133', '153', '173', '177', '180', '181', '189', '190', '191', '193', '199'],
'中国广电' => ['192']
];
foreach ($carriers as $carrier => $segments) {
if (in_array($prefix3, $segments)) {
return $carrier;
}
}
return '未知运营商';
}
/* 接口说明(发邮件)
* $address收件人的邮箱地址 数组 格式: ['460834639@qq.com','460834639@qq.com'.......]
* $content邮件的主题数据信息 数组 格式:['title'=>'123','from_user_name'=>'123','content'=>'123']

View File

@ -448,7 +448,7 @@ class Msginformation extends Base{
];
// return $this->msg($return_data);
// 所有可用记录.
$all_data = Db::table($this->msginformation_use_db_name['3'])->where("is_del = 0 AND scene_data IN (1,2,3)")->select();
$all_data = Db::table($this->msginformation_use_db_name['3'])->where("is_del = 0 AND scene_data IN (1,2,3)")->order('sort_num')->select();
// 用户阅读记录
$user_read_log = Db::table($this->msginformation_use_db_name['2'])->where(['token'=>$data['token']])->field('aetc_id')->select();
$user_read_data = [];
@ -460,7 +460,9 @@ class Msginformation extends Base{
foreach ($all_data as $key => $value) {
if($value['type'] == '1'){
if(in_array($value['parameter_data'], $user_read_data)){
// 如果读过
if($value['scene_data'] != 3){
// 如果不是banner
unset($all_data[$key]);
}else{
// $all_data[$key]['jump_url'] = $all_data[$key]['jump_url']."&token=".$data['token'];
@ -474,6 +476,10 @@ class Msginformation extends Base{
$all_data[$key]['type'] = 'h5';
$all_data[$key]['id'] = $value['parameter_data'];
}
}else if($value['type'] == '3'){
$all_data[$key]['jump_url'] = $all_data[$key]['jump_url'];
$all_data[$key]['type'] = 'h5';
$all_data[$key]['id'] = $value['parameter_data'];
}else{
$all_data[$key]['type'] = 'wechat';
// 提取查询字符串部分(?后面的部分)
@ -500,12 +506,14 @@ class Msginformation extends Base{
// 分类信息
foreach ($all_data as $key => $value) {
// 1:首屏弹窗2滚动公告3banner
if($value['scene_data'] == '1'){
array_push($return_data['pop'],$value);
}else if($value['scene_data'] == '2'){
array_push($return_data['notice'],$value);
}else if($value['scene_data'] == '3'){
array_push($return_data['banner'],$value);
}
}

View File

@ -64,6 +64,8 @@ class Skip extends Base{
if($this->validate_user_identity($data['aud_id']) === false){
$return_data = $this->msg(10003);
}
$return_data = $this->skip_manual_recording_action($data);
// 成功
@ -251,7 +253,7 @@ class Skip extends Base{
// 分秒转换为秒
$data['time'] = abs($data['time_m'])*60+abs($data['time_s']);
$user_msg_content = Db::table($this->skip_use_db_name['2'])->where(['id'=>$data['aud_id']])->count();
if($user_msg_content<=0){
if($user_msg_content<=0){
return $this->msg(10004);
}
if(!array_key_exists('kcal', $data)){
@ -278,6 +280,7 @@ class Skip extends Base{
'create_time'=>date('Y-m-d H:i:s'),
'last_update_time'=>date('Y-m-d H:i:s'),
'jump_num'=>$data['num'],
'jump_time'=>$data['time'],
'jump_kcal'=>$kcal_data['totalCalories'],
'average_num'=>$kcal_data['averageAchievement'],

View File

@ -364,9 +364,29 @@ class Qrcode extends Base{
##################################################################儿童膳食食谱文档跳转start##################################################################
##################################################################儿童膳食食谱文档跳转start##################################################################
##################################################################儿童膳食食谱文档跳转start##################################################################
public function children_meals_cookbook(){
// header("Location: http://121.36.67.254:3000/tiansf/childrens-dietary-recipes");
header("Location: http://git.ybhdmob.com:3000/tiansf/childrens-dietary-recipes");
}
##################################################################儿童膳食食谱文档跳转end##################################################################
##################################################################儿童膳食食谱文档跳转end##################################################################
##################################################################儿童膳食食谱文档跳转end##################################################################
##################################################################二维码-厨房秤小程序跳转start##################################################################
##################################################################二维码-厨房秤小程序跳转start##################################################################
##################################################################二维码-厨房秤小程序跳转start##################################################################
public function kitchen_qrcode(){
return $this->fetch();
}
##################################################################二维码-厨房秤小程序跳转end##################################################################
##################################################################二维码-厨房秤小程序跳转end##################################################################
##################################################################二维码-厨房秤小程序跳转end##################################################################

View File

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1,minimum-scale=1, maximum-scale=1,user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no, email=no">
<meta name="full-screen" content="true">
<meta name="screen-orientation" content="portrait">
<meta name="x5-fullscreen" content="true">
<meta name="360-fullscreen" content="true">
<title>loading...</title>
<script src="/x_admin/js/jq.js"></script>
<style>
*{
padding: 0 0;
margin: 0 0;
}
</style>
</head>
<body id="box_k">
</body>
</html>
<script>
function isWeixin() {
var ua = navigator.userAgent.toLowerCase();
return /micromessenger/i.test(ua);
}
function isIOS() {
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
return /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream;
}
window.location.href = 'weixin://dl/business/?appid=wx9c0b7a436ada6d1e&path=pages/home/home';
</script>

View File

@ -45,6 +45,12 @@ Route::any('/little_tips_del_action', 'code/qrcode/little_tips_del_action');
Route::any('/add_label_action', 'code/qrcode/add_label_action');
Route::any('/update_title_action', 'code/qrcode/update_title_action');
// 儿童膳食食谱
Route::any('/children_meals_cookbook', 'code/qrcode/children_meals_cookbook');
// 厨房秤的二维码
Route::any('/kitchen_qrcode', 'code/qrcode/kitchen_qrcode');
@ -462,7 +468,6 @@ Route::any('/testedition/kitchenscale/pic_upload_action', 'app/kitchenscale/test
// 首页内容################################################################
// 检测版本及判断是否登录失效
Route::any('/kitchenscale/login_invalid_version', 'app/Kitchenscale/app.Index/login_invalid_version');
Route::any('/testedition/kitchenscale/login_invalid_version', 'app/kitchenscale/testapp.index/login_invalid_version');
@ -512,8 +517,9 @@ Route::any('/testedition/kitchenscale/get_food_list', 'app/kitchenscale/testapp.
// 获取所有食谱label
Route::any('/kitchenscale/get_cookbook_label_list', 'app/kitchenscale/app.cookbook/get_cookbook_label_list');
Route::any('/testedition/kitchenscale/get_cookbook_label_list', 'app/kitchenscale/testapp.cookbook/get_cookbook_label_list');
// 获取查询页页面导航食材列表
Route::any('/kitchenscale/get_search_food_page_list', 'app/kitchenscale/app.cookbook/get_search_food_page_list');
Route::any('/testedition/kitchenscale/get_search_food_page_list', 'app/kitchenscale/testapp.cookbook/get_search_food_page_list');
// 计食器################################################################
@ -535,8 +541,6 @@ Route::any('/testedition/kitchenscale/set_user_kcal', 'app/kitchenscale/testapp.
// 我的################################################################
// 获取角色信息
Route::any('/kitchenscale/get_user_msg', 'app/kitchenscale/app.usercenter/get_user_msg');
Route::any('/testedition/kitchenscale/get_user_msg', 'app/kitchenscale/testapp.usercenter/get_user_msg');
@ -553,6 +557,13 @@ Route::any('/testedition/kitchenscale/get_my_cookbook', 'app/kitchenscale/testap
Route::any('/kitchenscale/del_my_cookbook', 'app/kitchenscale/app.usercenter/del_my_cookbook');
Route::any('/testedition/kitchenscale/del_my_cookbook', 'app/kitchenscale/testapp.usercenter/del_my_cookbook');
// 百度图片识别接口################################################################
// 获取AccessToken
// Route::any('/kitchenscale/baidu_get_accesstoken', 'app/kitchenscale/app.aipart/baidu_get_accesstoken');
// Route::any('/testedition/kitchenscale/baidu_get_accesstoken', 'app/kitchenscale/testapp.aipart/baidu_get_accesstoken');
// 识别食材
Route::any('/kitchenscale/baidu_identify_food', 'app/kitchenscale/app.aipart/baidu_identify_food');
// 测试用内容################################################################
@ -581,6 +592,25 @@ Route::any('/testedition/ceshiyong', 'testapp/base/ceshiyong');
Route::any('/kitchenscale/chuli_shuju', 'app/kitchenscale/app.cookbook/chuli_shuju');
// 测试用控制器
Route::any('/readExcelFile_a', 'test/testuse/readExcelFile_a');
Route::any('/readExcelFile_b', 'test/testuse/readExcelFile_b');
Route::any('/save_caidan_content', 'test/testuse/save_caidan_content');
Route::any('/caipu_shuju_chuli', 'test/testuse/caipu_shuju_chuli');
Route::any('/clean_data_all_page', 'test/testuse/clean_data_all_page');
Route::any('/clean_data_all', 'test/testuse/clean_data_all');
Route::any('/download_picture_api', 'test/testuse/download_picture_api');
Route::any('/update_cookbook_data_api', 'test/testuse/update_cookbook_data_api');
Route::any('/cun_bendi_pic', 'test/testuse/cun_bendi_pic');
// Route::any('/app_update_file/*', 'app/sportstesting/aaaaaaaaaaaaaaa');
// 处理404错误 z

View File

@ -0,0 +1,776 @@
<?php
namespace app\test\controller;
use think\Controller;
use think\Db;
use app\bj\controller\Common;
use think\Log;
use \think\Validate;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
class Testuse extends Controller{
// 收集表A
public function readExcelFile_a() {
// Excel文件路径示例
$filePath = 'D:\数据\厨房秤\食谱\excelA.xlsx';
try {
// 加载Excel文件
$spreadsheet = IOFactory::load($filePath);
// 获取第一个工作表Sheet1
$sheet = $spreadsheet->getSheet(0);
// 将工作表数据转换为数组
$data = $sheet->toArray();
$temporary_arr_title = $data[0];
unset($data[0]);
$temporary_arr = [];
$temporary_arr2 = [];
foreach ($data as $key => $value) {
if($value[0] == 112 || $value[0] == 113 || $value[0] == 114 || $value[0] == 115 || $value[0] == 116 || $value[0] == 117 || $value[0] == 118 || $value[0] == 119 || $value[0] == 120 || $value[0] == 121){
// unset();
unset($data[$key]);
}
}
foreach ($data as $key => $value) {
$temporary_arr2 = [];
foreach ($temporary_arr_title as $k => $v) {
$temporary_arr2[$v] = $value[$k];
}
array_push($temporary_arr,$temporary_arr2);
}
foreach ($temporary_arr as $key => $value) {
$temporary_arr[$key]['record_id'] = $value['id'];
$temporary_arr[$key]['Calorie_name'] = $value['Calorie'];
$temporary_arr[$key]['Protein_name'] = $value['Protein'];
$temporary_arr[$key]['Fat_name'] = $value['Fat'];
$temporary_arr[$key]['Carbohydrate_name'] = $value['Carbohydrate'];
$temporary_arr[$key]['food_name'] = $value['name'];
unset($temporary_arr[$key]['id']);
unset($temporary_arr[$key]['Calorie']);
unset($temporary_arr[$key]['Protein']);
unset($temporary_arr[$key]['Fat']);
unset($temporary_arr[$key]['Carbohydrate']);
unset($temporary_arr[$key]['name']);
if($value['image'] == ''){
$temporary_arr[$key]['pic_url'] = '/food_img/none.png';
}else{
$result = $this->downloadImageWithName($value['image'], $value['id']);
if($result['success'] == true){
$temporary_arr[$key]['pic_url'] = '/food_img/'.$result['filename'];
}else{
$temporary_arr[$key]['pic_url'] = 'error';
}
}
unset($temporary_arr[$key]['image']);
}
// dump($temporary_arr);
// die;
$cfc = Db::connect('cfc_db');
// 获取账号下信息以及用户信息
$user_data = $cfc->table('app_z_national_standard_food_type_3')->insertAll($temporary_arr);
dump($user_data);
die;
} catch (\Exception $e) {
// 输出错误信息
dump(['error' => true, 'message' => $e->getMessage()]);
}
}
// 收集表B
public function readExcelFile_b() {
// Excel文件路径示例
$filePath = 'D:\数据\厨房秤\食谱\excelB.xlsx';
try {
// 加载Excel文件
$spreadsheet = IOFactory::load($filePath);
// 获取第一个工作表Sheet1
$sheet = $spreadsheet->getSheet(0);
// 将工作表数据转换为数组
$data = $sheet->toArray();
$temporary_arr_title = $data[0];
unset($data[0]);
$temporary_arr = [];
$temporary_arr2 = [];
foreach ($data as $key => $value) {
if($value[0] == 112 || $value[0] == 113 || $value[0] == 114 || $value[0] == 115 || $value[0] == 116 || $value[0] == 117 || $value[0] == 118 || $value[0] == 119 || $value[0] == 120 || $value[0] == 121){
// unset();
unset($data[$key]);
}
}
foreach ($data as $key => $value) {
$temporary_arr2 = [];
foreach ($temporary_arr_title as $k => $v) {
$temporary_arr2[$v] = $value[$k];
}
$temporary_arr2['name_ch'] = $temporary_arr2['desc'];
unset($temporary_arr2['desc']);
unset($temporary_arr2['description']);
array_push($temporary_arr,$temporary_arr2);
}
// dump($temporary_arr);
$cfc = Db::connect('cfc_db');
// 获取账号下信息以及用户信息
$user_data = $cfc->table('app_z_national_standard_food_type_4')->insertAll($temporary_arr);
dump($user_data);
die;
} catch (\Exception $e) {
// 输出错误信息
dump(['error' => true, 'message' => $e->getMessage()]);
}
}
public function downloadImageWithName($remoteUrl, $name, $localDir = '')
{
try {
// 设置默认本地目录
if (empty($localDir)) {
$localDir = 'D:\phpstudy_pro\WWW\reedaw\SchoolPhysicalExamination\public\food_img';
// $localDir = 'D:\phpstudy_pro\WWW\reedaw\SchoolPhysicalExamination\public\kitchenscale_all\cook_img';
}
// 检查并创建目录
if (!is_dir($localDir)) {
mkdir($localDir, 0755, true);
}
// 从URL中获取文件扩展名
$urlParts = parse_url($remoteUrl);
$pathInfo = pathinfo($urlParts['path']);
$extension = isset($pathInfo['extension']) ? $pathInfo['extension'] : 'jpg';
// 构建完整文件名和路径
$filename = $name . 'xt' . time() . '.jpg';
$localPath = rtrim($localDir, '/\\') . DIRECTORY_SEPARATOR . $filename;
// 使用cURL下载图片
$ch = curl_init($remoteUrl);
$fp = fopen($localPath, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
fclose($fp);
// 验证下载结果
if ($result === false || $httpCode != 200 || !file_exists($localPath)) {
throw new \Exception('图片下载或保存失败');
}
// 返回简化结果
return [
'success' => true,
'filename' => $filename
];
} catch (\Exception $e) {
Log::error('图片下载失败: ' . $e->getMessage() . ' URL: ' . $remoteUrl);
return [
'success' => false,
'filename' => ''
];
}
}
public function downloadImageWithName2($remoteUrl, $name, $localDir = ''){
try {
// 设置默认本地目录
if (empty($localDir)) {
// $localDir = 'D:\phpstudy_pro\WWW\reedaw\SchoolPhysicalExamination\public\food_img';
$localDir = 'D:\phpstudy_pro\WWW\reedaw\SchoolPhysicalExamination\public\kitchenscale_all\cook_img';
}
// 检查并创建目录
if (!is_dir($localDir)) {
mkdir($localDir, 0755, true);
}
// 从URL中获取文件扩展名
$urlParts = parse_url($remoteUrl);
$pathInfo = pathinfo($urlParts['path']);
$extension = isset($pathInfo['extension']) ? $pathInfo['extension'] : 'jpg';
// 构建完整文件名和路径
$filename = $name . 'cook' . time() . '.jpg';
$localPath = rtrim($localDir, '/\\') . DIRECTORY_SEPARATOR . $filename;
// 使用cURL下载图片
$ch = curl_init($remoteUrl);
$fp = fopen($localPath, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
fclose($fp);
// 验证下载结果
if ($result === false || $httpCode != 200 || !file_exists($localPath)) {
return [
'success' => false,
'filename' => '图片下载或保存失败'
];
}
// 返回简化结果
return [
'success' => true,
'filename' => $filename
];
} catch (\Exception $e) {
Log::error('图片下载失败: ' . $e->getMessage() . ' URL: ' . $remoteUrl);
return [
'success' => false,
'filename' => '图片下载或保存失败'
];
}
}
//
// 偷数据存start#########################################################################################################
public function save_caidan_content(){
// 添加CORS响应头必须放在任何输出之前
header('Access-Control-Allow-Origin: https://www.nutridata.cn');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
// 如果是OPTIONS预检请求直接返回204
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('HTTP/1.1 204 No Content');
exit;
}
$data = input('post.');
$pic = 'none_str';
// if($data['image'] == ''){
// $pic = '/kitchenscale_all/food_img/none.png';
// }else{
// $result = $this->downloadImageWithName2($data['image'], $data['id']);
// if($result['success'] == true){
// $pic = '/kitchenscale_all/cook_img/'.$result['filename'];
// }else{
// $pic = 'error';
// }
// }
$save_data['content'] = json_encode($data);
// $save_data['pic_url'] = $pic;
$cfc = Db::connect('cfc_db');
// 获取账号下信息以及用户信息
$user_data = $cfc->table('linshi_caidan_biao')->insert($save_data);
if($user_data){
return $this->msg(0,'success',[]);
}else{
return $this->msg(9999,'error',[]);
}
}
// 偷数据存end#########################################################################################################
// 处理偷过来的数据start#########################################################################################################
public function clean_data_all_page(){
return $this->fetch();
}
public function clean_data_all(){
$page = 1;
$ok_num = 0;
$no_num = 0;
$jieshou_data = input();
$page = $jieshou_data['page'];
$cfc = Db::connect('cfc_db');
$cha = $cfc->table('linshi_caidan_biao')->where('is_clean = 0')->page("$page,25")->select();
// dump();
// die;
if(count($cha) <= 0){
return $this->msg(99999,'失败',[]);
}
foreach ($cha as $key => $value) {
$cha[$key]['data'] = json_decode($value['content'],true);
}
$cookbook_arr = [];
$foodlist_arr = [];
$cookbook_nutrition = [];//营养
$cookbook_vitamin = [];//维生素
$cookbook_mineral = [];//矿物质
$cookbook_quantifier = [];//量词
$foodlist_arr_temporary = [];
foreach ($cha as $key => $value) {
$cookbook_nutrition = [];//营养
$cookbook_vitamin = [];//维生素
$cookbook_mineral = [];//矿物质
$cookbook_quantifier = [];//量词
$cookbook_arr = [];
$foodlist_arr_temporary = [];
// 处理食谱详情
$cookbook_arr['title'] = $value['data']['name'];
$cookbook_arr['cover'] = 19;
$cookbook_arr['create_user_token'] = 'caadd1be045a65f30b92aa805f1de54a';
$cookbook_arr['create_user_head_pic'] = "https://tc.pcxbc.com/tsf/head_pic.png";
$cookbook_arr['create_user_nickname'] = "clown";
$cookbook_arr['describe_data'] = "";
$cookbook_arr['food_data'] = [];
$cookbook_arr['step_data'] = [];
$cookbook_arr['create_time'] = date('Y-m-d H:i:s');
$cookbook_arr['cook_label'] = 8;
$cookbook_arr['original_cookbook_id'] = $value['data']['id'];
foreach ($value['data']['major'] as $k1 => $v1) {
$zhao = $cfc->table('app_z_national_standard_food_type_3')->where(['record_id'=>$v1['ingrId']])->select();
if(count($zhao) > 0){
array_push($cookbook_arr['food_data'],[
'id' => $zhao[0]['id'],
'name' => $zhao[0]['food_name'],
'weight' => $v1['note'],
'kcal' => $zhao[0]['Calorie_val'],
'unit' => 'g',
]);
array_push($foodlist_arr_temporary,$zhao[0]['id']);
}
}
foreach ($value['data']['dishCooksteps'] as $k2 => $v2) {
if($v2['content'] != ''){
array_push($cookbook_arr['step_data'],[
'pic_list' => [],
'description' => $v2['content']
]);
}
}
$cookbook_arr['food_data'] = json_encode($cookbook_arr['food_data']);
$cookbook_arr['step_data'] = json_encode($cookbook_arr['step_data']);
// 处理营养物质
foreach ($value['data']['nutritionMap']['能量及宏量营养素'] as $nutrition_k => $nutrition_v) {
array_push($cookbook_nutrition,[
'name_en'=>$nutrition_v['name'],
'name_ch'=>$nutrition_v['desc'],
'unit'=>$nutrition_v['unit'],
'value'=>$nutrition_v['value'],
'nrv'=>$nutrition_v['nrv'],
'nutriSort'=>$nutrition_v['nutriSort'],
'description'=>$nutrition_v['description'],
]);
}
// 处理维生素
foreach ($value['data']['nutritionMap']['维生素'] as $vitamin_k => $vitamin_v) {
array_push($cookbook_vitamin,[
'name_en'=>$vitamin_v['name'],
'name_ch'=>$vitamin_v['desc'],
'unit'=>$vitamin_v['unit'],
'value'=>$vitamin_v['value'],
'nrv'=>$vitamin_v['nrv'],
'nutriSort'=>$vitamin_v['nutriSort'],
'description'=>$vitamin_v['description'],
]);
}
// 处理矿物质
foreach ($value['data']['nutritionMap']['矿物质'] as $mineral_k => $mineral_v) {
array_push($cookbook_mineral,[
'name_en'=>$mineral_v['name'],
'name_ch'=>$mineral_v['desc'],
'unit'=>$mineral_v['unit'],
'value'=>$mineral_v['value'],
'nrv'=>$mineral_v['nrv'],
'nutriSort'=>$mineral_v['nutriSort'],
'description'=>$mineral_v['description'],
]);
}
// 处理量词
foreach ($value['data']['unit'] as $quantifier_k => $quantifier_v) {
array_push($cookbook_quantifier,[
'name_ch'=>$quantifier_v['unit'],
'value'=>$quantifier_v['value'],
]);
}
// 启动事务
$cfc->startTrans();
try{
// 存食谱
$cook_book_id = $cfc->table('app_user_cookbook')->insertGetId($cookbook_arr);
// 存食谱所含食材
$foodlist_arr = [];
foreach ($foodlist_arr_temporary as $k3 => $v3) {
array_push($foodlist_arr,['cookbook_id'=>$cook_book_id,'food_id'=>$v3]);
}
$cfc->table('app_user_cookbook_food_relation')->insertAll($foodlist_arr);
//存营养
foreach ($cookbook_nutrition as $k4 => $v4) {
$cookbook_nutrition[$k4]['cookbook_id'] = $cook_book_id;
}
// dump($cookbook_nutrition);
$cfc->table('app_user_cookbook_nutrition')->insertAll($cookbook_nutrition);
//存维生素
foreach ($cookbook_vitamin as $k5 => $v5) {
$cookbook_vitamin[$k5]['cookbook_id'] = $cook_book_id;
}
// dump($cookbook_vitamin);
$cfc->table('app_user_cookbook_vitamin')->insertAll($cookbook_vitamin);
//存矿物质
foreach ($cookbook_mineral as $k6 => $v6) {
$cookbook_mineral[$k6]['cookbook_id'] = $cook_book_id;
}
// dump($cookbook_mineral);
$cfc->table('app_user_cookbook_mineral')->insertAll($cookbook_mineral);
// //存量词
foreach ($cookbook_quantifier as $k7 => $v7) {
$cookbook_quantifier[$k7]['cookbook_id'] = $cook_book_id;
}
$cfc->table('app_user_cookbook_quantifier')->insertAll($cookbook_quantifier);
// 修改原始数据
$cfc->table('linshi_caidan_biao')->where(['id'=>$value['id']])->update(['is_clean'=>1,'name'=>$value['data']['name'],'yuanshi_id'=>$value['data']['id']]);
// 提交事务
$cfc->commit();
$ok_num = $ok_num+1;
} catch (\Exception $e) {
// 回滚事务
$cfc->rollback();
$no_num = $no_num+1;
}
}
// dump($ok_num);
// dump($no_num);
// die;
return $this->msg(0,'成功',['ok'=>$ok_num,'no'=>$no_num]);
}
// 处理偷过来的数据end#########################################################################################################
// 获取图片接口start#########################################################################################################
public function download_picture_api(){
// 添加CORS响应头必须放在任何输出之前
header('Access-Control-Allow-Origin: https://www.nutridata.cn');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
// 如果是OPTIONS预检请求直接返回204
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('HTTP/1.1 204 No Content');
exit;
}
$cfc = Db::connect('cfc_db');
$result = $cfc->table('linshi_caidan_biao')->where("pic_clean = 0")->field('id,pic_url,is_clean,name,yuanshi_id')->find();
if($result){
return $this->msg(0,'成功',$result);
}else{
return $this->msg(99999,'失败',[]);
}
}
public function update_cookbook_data_api(){
// 添加CORS响应头必须放在任何输出之前
header('Access-Control-Allow-Origin: https://www.nutridata.cn');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
// 如果是OPTIONS预检请求直接返回204
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('HTTP/1.1 204 No Content');
exit;
}
$data = input('post.');
// return $this->msg(0,'成功',$data);
$cfc = Db::connect('cfc_db');
$result = $cfc->table('linshi_caidan_biao')->where(["yuanshi_id"=>$data['id']])->update(['category'=>$data['category']]);
if($result){
return $this->msg(0,'成功',$result);
}else{
return $this->msg(99999,'失败',[]);
}
}
public function cun_bendi_pic()
{
// 记录接收到的数据
// file_put_contents('request_log.txt', date('Y-m-d H:i:s')."\n".json_encode($_POST)."\n\n", FILE_APPEND);
// 强制设置 JSON 响应头
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
exit;
}
$data = input('post.');
$cfc = Db::connect('cfc_db');
$msg_str = '本次存储成功';
$update_data = [
'pic_clean'=>1
];
if(!array_key_exists('id',$data) || $data['id'] == ''){
// $update_data['pic_url'] = 'id_miss';
// $updateResult = $cfc->table('linshi_caidan_biao')
// ->where(["yuanshi_id" => $data['id']])
// ->update($update_data);
return $this->msg(0, $msg_str,'id_miss');
}
if(!array_key_exists('image',$data) || $data['image'] == ''){
$update_data['pic_url'] = 'no_data';
$updateResult = $cfc->table('linshi_caidan_biao')
->where(["yuanshi_id" => $data['id']])
->update($update_data);
return $this->msg(0, $msg_str,'no_data');
}
$pic_result = $this->downloadImageWithName2($data['image'],$data['id']);
$update_data['pic_url'] = $pic_result['filename'];
// 更新数据库
$cfc = Db::connect('cfc_db');
$updateResult = $cfc->table('linshi_caidan_biao')
->where(["yuanshi_id" => $data['id']])
->update($update_data);
return $this->msg(0, $msg_str,$updateResult);
}
// public function cun_bendi_pic()
// {
// // 强制设置 JSON 响应头
// header('Content-Type: application/json; charset=utf-8');
// header('Access-Control-Allow-Origin: *');
// header('Access-Control-Allow-Methods: POST, OPTIONS');
// header('Access-Control-Allow-Headers: Content-Type');
// if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
// exit;
// }
// try {
// // 确保获取原始 POST 数据
// $rawData = file_get_contents('php://input');
// $data = json_decode($rawData, true);
// if (empty($data['id']) || empty($data['image'])) {
// throw new Exception('参数不完整');
// }
// // 验证 id 是否为整数
// if (!is_numeric($data['id'])) {
// throw new Exception('ID 必须为整数');
// }
// $id = (int)$data['id'];
// $ossUrl = trim($data['image']);
// // 验证 OSS 链接
// if (!filter_var($ossUrl, FILTER_VALIDATE_URL)) {
// throw new Exception('无效的 OSS 链接');
// }
// $filename = $id . 'cook' . time() . '.jpg';
// $savePath = 'D:/phpstudy_pro/WWW/reedaw/SchoolPhysicalExamination/public/kitchenscale_all/cook_img/';
// // 创建目录(如果不存在)
// if (!file_exists($savePath)) {
// mkdir($savePath, 0777, true);
// }
// // 使用 cURL 获取 OSS 图片(更可靠)
// $ch = curl_init();
// curl_setopt($ch, CURLOPT_URL, $ossUrl);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// $imageData = curl_exec($ch);
// if (curl_errno($ch)) {
// throw new Exception('获取 OSS 图片失败: ' . curl_error($ch));
// }
// $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// curl_close($ch);
// if ($httpCode !== 200) {
// throw new Exception('OSS 返回错误状态码: ' . $httpCode);
// }
// // 保存图片
// $result = file_put_contents($savePath . $filename, $imageData);
// if ($result === false) {
// throw new Exception('写入文件失败');
// }
// // 更新数据库
// $update_data = [
// 'pic_clean' => 1,
// 'pic_url' => $filename
// ];
// $cfc = Db::connect('cfc_db');
// $updateResult = $cfc->table('linshi_caidan_biao')
// ->where(["yuanshi_id" => $id])
// ->update($update_data);
// // 返回成功响应
// echo json_encode([
// 'code' => 0,
// 'msg' => '图片保存成功',
// 'data' => [
// 'filename' => $filename,
// 'db_affected' => $updateResult
// ]
// ], JSON_UNESCAPED_UNICODE);
// } catch (Exception $e) {
// // 返回错误响应
// echo json_encode([
// 'code' => 1,
// 'msg' => $e->getMessage(),
// 'data' => null
// ], JSON_UNESCAPED_UNICODE);
// }
// exit; // 确保没有其他输出
// }
// 获取图片接口end#########################################################################################################
public function caipu_shuju_chuli()
{
// 初始化SQL Server数据库连接
$cfc = Db::connect('cfc_db');
// 查询需要处理的原始数据
$yuanshi_data = $cfc->table('linshi_caidan_biao')
->where(['pic_clean' => 1,'is_move_ok'=>0])
->page("1,100")
->field('id,pic_url,name,yuanshi_id,category,pic_clean')
->select();
// dump($yuanshi_data);
// die;
$yuanshi_mulu = 'D:\phpstudy_pro\WWW\reedaw\SchoolPhysicalExamination\public\kitchenscale_all\cook_img';
$new_mulu = 'D:\phpstudy_pro\WWW\reedaw\SchoolPhysicalExamination\public\kitchenscale_all\cook_img\linshi';
$result = [
'all'=>count($yuanshi_data),
'ok'=>0,
'no'=>0,
'none'=>0,
];
$temporary_arr_data = [];
$temporary_arr_ok = [];
$temporary_arr_none = [];
foreach ($yuanshi_data as $key => $value) {
// 如果文件不存在这个目录下
// dump($yuanshi_mulu.DS.$value['pic_url']);
if (!file_exists($yuanshi_mulu.DS.$value['pic_url'])) {
$result['none'] = $result['none']+1;
array_push($temporary_arr_none,$value['yuanshi_id']);
continue;
}else{
$result['ok'] = $result['ok']+1;
array_push($temporary_arr_data,[
'user_token' => 'caadd1be045a65f30b92aa805f1de54a',
'pic_name' => $value['pic_url'],
'pic_url' => "https://tc.pcxbc.com/kitchenscale_all/cook_img/".$value['pic_url'],
'create_time' => date('Y-m-d H:i:s'),
'special_record_str' => $value['yuanshi_id']
]);
}
}
// 启动事务
$cfc->startTrans();
try {
if($result['ok'] > 0){
$cfc->table('app_user_upload_img')->insertAll($temporary_arr_data);
$cfc->table('linshi_caidan_biao')->where("yuanshi_id in ('".implode("','",$temporary_arr_ok)."')")->update(['is_move_ok'=>1]);
}
if($result['none'] > 0){
$cfc->table('linshi_caidan_biao')->where("yuanshi_id in ('".implode("','",$temporary_arr_none)."')")->update(['is_move_ok'=>2]);
}
$cfc->commit();
dump($result);
} catch (\Exception $e) {
$cfc->rollback();
dump($e);
}
// dump($result);
// dump($temporary_arr_ok);
// dump($temporary_arr_no);
// dump($temporary_arr_none);
// dump($temporary_arr_data);
// die;
}
###################################################################################################################
###################################################################################################################
###################################################################################################################
public function msg($code,$str,$data){
return json(['code'=>$code,'msg'=>$str,'data'=>$data]);
}
}

View File

@ -1,15 +0,0 @@
<?php
namespace app\test\controller;
use think\Controller;
use think\Db;
use app\bj\controller\Common;
use think\Log;
use \think\Validate;
class Text extends Controller{
public function demo(){
echo '你好';
}
}

View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>洗数据</title>
<script src="/x_admin/js/jq.js"></script>
</head>
<body>
<div onclick="start_action()">开始</div>
<div>当前第<span class="jilu">1</span></div>
<div>累积成功<span class="ok">0</span></div>
<div>累积失败<span class="no">0</span></div>
</body>
</html>
<script>
var page = 1;
var page_str = 1;
var ok_str = 0;
var no_str = 0;
function start_action(){
$.ajax({
url:"clean_data_all", //请求的url地址
dataType:"json", //返回格式为json
async:true,//请求是否异步默认为异步这也是ajax重要特性
data:{"page":page}, //参数值
type:"POST", //请求方式
success:function(req){
//请求成功时处理
if(req.code == 0){
page_str = page_str+1;
$('.jilu').html(page_str)
ok_str = ok_str + req.data.ok
no_str = no_str + req.data.no
$('.ok').html(ok_str)
$('.no').html(no_str)
setTimeout(() => {
start_action()
}, 1000);
}else if(req.code == 99999){
return
}
},
error:function(){
//请求出错处理
}});
}
</script>

View File

@ -319,8 +319,8 @@ class Card extends Base{
}
// 修改初始体重/目标体重
public function card_modify_weight($data = ['aud_id'=>'11','weight'=>'50','type'=>2,'time'=>'2024-10-01','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
// 修改初始体重/目标体重{"aud_id":"3967","time":"","weight":"124","type":1,"aan_id":"3475"}
public function card_modify_weight($data = ['aud_id'=>'3967','weight'=>'124','type'=>1,'time'=>'','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
try {
// 你的业务逻辑
if(count(input('post.')) > 0){
@ -1279,6 +1279,7 @@ class Card extends Base{
where acbd.aud_id = ".$data['aud_id']."
order by acbd.record_time desc
");
if($data['type'] == 1){
// 修改目标体重
$bhw_date = ['target_weight'=>$data['weight']];
@ -1289,13 +1290,13 @@ class Card extends Base{
return $this->msg(10005);
}
$result_update = Db::table($this->card_use_db_name['2'])->where(['id'=>$data['aud_id']])->update($bhw_date);
// $result_update = true;
if($result_update){
$target_current = $this->base_target_initial_cumulative_weight([
'weight'=>$result[0]['weight'],
'target_weight'=>$data['type'] == 1?$data['weight']:$result[0]['target_weight'],
'initial_weight'=>$data['type'] == 1?$result[0]['initial_weight']:$data['weight'],
'initial_date'=>$data['type'] == 1?$result[0]['initial_date']:$data['time'],
'weight'=>count($result) <= 0?0:$result[0]['weight'],
'target_weight'=>$data['type'] == 1?$data['weight']:(count($result) <= 0?0:$result[0]['target_weight']),
'initial_weight'=>$data['type'] == 1?(count($result) <= 0?0:$result[0]['initial_weight']):$data['weight'],
'initial_date'=>$data['type'] == 1?(count($result) <= 0?'':$result[0]['initial_date']):$data['time'],
]);
return $this->msg($target_current);

View File

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0 0;
padding: 0 0;
}
#big_box{
width: 100vw;
}
#down_file{
width: 100vw;
height: 20vw;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
}
img{
display: block;
width: 100%;
}
a{
width: 100vw;
text-align: center;
line-height: 10vw;
}
</style>
<script>
var title = '12岁以上青少年长高食谱'
document.addEventListener('DOMContentLoaded', function() {
// Change the page title
document.title = title;
// Insert 48 images in the img_box div
const imgBox = document.getElementById('img_box');
for (let i = 1; i <= 48; i++) {
const img = document.createElement('img');
img.src = `./img/9861b4373f4d41051ea7a931b882e767-${i}.jpg`;
img.alt = `Recipe image ${i}`;
imgBox.appendChild(img);
}
// Update the download link to PDF with forced download
const downloadLink = document.querySelector('#down_file a');
downloadLink.href = 'http://wm.reedaw.com/children_meals_cookbook/'+title+'/'+title+'.pdf';
downloadLink.setAttribute('download', '12岁以上青少年长高食谱.pdf');
downloadLink.textContent = '点击下载文件';
});
</script>
</head>
<body>
<div id="big_box">
<div id="img_box"></div>
<div id="down_file">
<a href=""></a>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,211 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>目录</title>
<style>
*{
margin: 0 0;
padding: 0 0;
}
#big_box{
width: 100vw;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: center;
align-items: center;
}
.one_box{
width: 95vw;
text-align: center;
min-height: 10vw;
line-height: 10vw;
border: 2px solid wheat;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: center;
align-items: center;
}
.two_box{
width: 90vw;
text-align: center;
min-height: 10vw;
line-height: 10vw;
border: 2px solid coral;
}
.child_div{
width: 100%;
text-align: center;
height: 10vw;
line-height: 10vw;
background-color: darkgray;
}
img{
display: block;
width: 100%;
}
a{
width: 100vw;
text-align: center;
line-height: 10vw;
}
/* 添加的折叠样式 */
.one_box_c {
overflow: hidden;
height: 0;
transition: height 0.3s ease;
}
.two_box_c {
overflow: hidden;
height: 0;
transition: height 0.3s ease;
}
</style>
</head>
<body>
<div id="big_box">
<div class="one_box">
<div class="one_box_t">0~6岁宝宝辅食</div>
<div class="one_box_c">
<div class="two_box">
<div class="two_box_t">01-宝宝辅食(文档)</div>
<div class="two_box_c">
<div class="child_div">1岁3个月宝宝辅食.doc</div>
</div>
</div>
<div class="two_box">
<div class="two_box_t">01-宝宝辅食(文档)</div>
<div class="two_box_c">
<div class="child_div">1岁3个月宝宝辅食.doc</div>
</div>
</div>
</div>
</div>
<div class="one_box">
<div class="one_box_t">0~6岁宝宝辅食</div>
<div class="one_box_c">
<div class="two_box">
<div class="two_box_t">01-宝宝辅食(文档)</div>
<div class="two_box_c">
<div class="child_div">1岁3个月宝宝辅食.doc</div>
</div>
</div>
</div>
</div>
<div class="one_box">
<div class="one_box_t">0~6岁宝宝辅食</div>
<div class="one_box_c">
<div class="two_box">
<div class="two_box_t">01-宝宝辅食(文档)</div>
<div class="two_box_c">
<div class="child_div">1岁3个月宝宝辅食.doc</div>
</div>
</div>
</div>
</div>
<div class="one_box">
<div class="one_box_t">0~6岁宝宝辅食</div>
<div class="one_box_c">
<div class="two_box">
<div class="two_box_t">01-宝宝辅食(文档)</div>
<div class="two_box_c">
<div class="child_div">1岁3个月宝宝辅食.doc</div>
</div>
</div>
</div>
</div>
<div class="child_div">12岁以上青少年长高食谱</div>
</div>
</body>
</html>
<script>
document.addEventListener('DOMContentLoaded', function() {
// 获取所有一级和二级容器
const oneBoxes = document.querySelectorAll('.one_box');
const twoBoxes = document.querySelectorAll('.two_box');
// 初始化所有一级容器高度为0
function resetAllOneBoxes() {
oneBoxes.forEach(box => {
const content = box.querySelector('.one_box_c');
content.style.height = '0';
});
}
// 一级菜单点击事件
oneBoxes.forEach(box => {
const title = box.querySelector('.one_box_t');
const content = box.querySelector('.one_box_c');
title.addEventListener('click', function(e) {
e.stopPropagation();
// 如果当前内容已经展开,则关闭它
if (content.style.height !== '0px' && content.style.height !== '') {
content.style.height = '0';
} else {
// 否则关闭所有一级菜单,然后展开当前
resetAllOneBoxes();
// 计算内容高度并展开
const contentHeight = content.scrollHeight;
content.style.height = contentHeight + 'px';
}
});
});
// 二级菜单点击事件 - 修改为不影响其他two_box
twoBoxes.forEach(box => {
const title = box.querySelector('.two_box_t');
const content = box.querySelector('.two_box_c');
title.addEventListener('click', function(e) {
e.stopPropagation();
// 切换当前二级内容的展开/关闭状态
if (content.style.height !== '0px' && content.style.height !== '') {
content.style.height = '0';
} else {
const contentHeight = content.scrollHeight;
content.style.height = contentHeight + 'px';
}
});
});
// 初始化所有内容为关闭状态
resetAllOneBoxes();
});
</script>
<script>
// 获取所有 child_div 元素
const childDivs = document.querySelectorAll('.child_div');
// 定义 jump 函数
function jump() {
const title = this.textContent.trim(); // 获取当前点击的 div 的文本内容
const encodedTitle = encodeURIComponent(title); // 编码标题,确保 URL 有效
// 创建或使用现有的 downloadLink
let downloadLink = window.downloadLink;
if (!downloadLink) {
downloadLink = document.createElement('a');
downloadLink.style.display = 'none';
document.body.appendChild(downloadLink);
window.downloadLink = downloadLink; // 存储为全局变量以便复用
}
// 设置链接并跳转
// downloadLink.href = `http://wm.reedaw.com/children_meals_cookbook/${encodedTitle}/${encodedTitle}.html`;
downloadLink.href = `https://tc.pcxbc.com/children_meals_cookbook/${encodedTitle}/${encodedTitle}.html`;
downloadLink.click();
}
// 为每个 child_div 添加点击事件
childDivs.forEach(div => {
div.addEventListener('click', jump);
div.style.cursor = 'pointer'; // 添加手型光标,提示可点击
});
</script>