2025-01-22 12:31:08 +08:00
< ? php
namespace app\KitchenScale\controller\app ;
use think\Db ;
class Cookbook extends Base {
2025-03-08 14:04:09 +08:00
2025-01-22 12:31:08 +08:00
// protected $token_time = 2592000;//30天的秒数
protected $default_head_pic = 'http://tc.pcxbc.com/tsf/head_pic.png' ;
protected $reedaw_db_msg = [
'zhanghao' => 'app_account_number' , //账号表
'juese' => 'app_user_data' , //角色表
];
protected $kitchenscale_db_msg = [
'cookbook' => 'app_user_cookbook' , //菜谱表
'uploadimg' => 'app_user_upload_img' , //素材表
'followlist' => 'app_user_follow_list' , //关注列表
2025-03-07 11:42:26 +08:00
'collect_list' => 'app_user_collect_list' , //收藏列表
2025-03-07 18:13:24 +08:00
'foodlist3' => 'app_food_type_three' , //食材列表3
2025-01-22 12:31:08 +08:00
];
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
################################################################接口################################################################
################################################################接口################################################################
################################################################接口################################################################
2025-03-07 18:13:24 +08:00
// 添加菜谱(OK)
2025-01-22 12:31:08 +08:00
public function add_cookbook (){
// 尝试捕获异常
// try {
if ( count ( input ( 'post.' )) > 0 ){
$data = input ( 'post.' );
}
if ( ! array_key_exists ( 'token' , $data )){
return $this -> msg ( 10001 , 'token is miss' );
}
if ( ! array_key_exists ( 'cover' , $data )){
return $this -> msg ( 10001 , 'cover is miss' );
}
if ( ! array_key_exists ( 'description' , $data )){
return $this -> msg ( 10001 , 'description is miss' );
}
if ( ! array_key_exists ( 'cook_label' , $data )){
return $this -> msg ( 10001 , 'cook_label is miss' );
}
if ( ! array_key_exists ( 'food_list' , $data )){
$data [ 'food_list' ] = [];
}
if ( ! array_key_exists ( 'step_list' , $data )){
$data [ 'step_list' ] = [];
}
if ( ! $this -> verify_data_is_ok ( $data [ 'token' ], 'str' )){
return $this -> msg ( 10005 , 'token type is error' );
}
if ( ! $this -> verify_data_is_ok ( $data [ 'cover' ], 'intnum' )){
return $this -> msg ( 10005 , 'cover type is error' );
}
if ( ! $this -> verify_data_is_ok ( $data [ 'description' ], 'str' )){
return $this -> msg ( 10005 , 'description type is error' );
}
if ( ! is_array ( $data [ 'food_list' ])) {
return $this -> msg ( 10005 , 'food_list type is error' );
}
if ( ! is_array ( $data [ 'step_list' ])) {
return $this -> msg ( 10005 , 'step_list type is error' );
}
$return_data = $this -> add_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' => '系统错误']);
// }
}
2025-03-07 11:42:26 +08:00
// 根据菜谱标签查询列表(首页用)(OK)
public function find_by_cook_label ( $data = [ 'token' => 'caadd1be045a65f3' , 'cook_label' => '家常菜谱' , 'page' => '1' ]){
2025-01-22 12:31:08 +08:00
// 尝试捕获异常
// try {
if ( count ( input ( 'post.' )) > 0 ){
$data = input ( 'post.' );
}
if ( ! array_key_exists ( 'token' , $data )){
return $this -> msg ( 10001 , 'token is miss' );
}
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 ( ! $this -> verify_data_is_ok ( $data [ 'token' ], 'str' )){
return $this -> msg ( 10005 , 'token type is error' );
}
if ( ! $this -> verify_data_is_ok ( $data [ 'cook_label' ], 'str' )){
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' );
}
$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' => '系统错误']);
// }
}
2025-03-07 11:42:26 +08:00
// 根据食材详细查找列表(OK)
2025-01-22 12:31:08 +08:00
public function find_by_food ( $data = [ 'token' => 'caadd1be045a65f3' , 'food_name' => '猪肉' , 'page' => '1' ]){
// 尝试捕获异常
// try {
if ( count ( input ( 'post.' )) > 0 ){
$data = input ( 'post.' );
}
if ( ! array_key_exists ( 'token' , $data )){
return $this -> msg ( 10001 , 'token is miss' );
}
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 ( ! $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_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' => '系统错误']);
// }
}
2025-03-07 18:13:24 +08:00
// 查询食谱的详情(OK)
public function cookbook_details ( $data = [ 'token' => 'caadd1be045a65f30b92aa805f1de54a' , 'cookbook_id' => '17' ]){
2025-01-22 12:31:08 +08:00
// 尝试捕获异常
// try {
if ( count ( input ( 'post.' )) > 0 ){
$data = input ( 'post.' );
}
if ( ! array_key_exists ( 'token' , $data )){
return $this -> msg ( 10001 , 'token is miss' );
}
if ( ! array_key_exists ( 'cookbook_id' , $data )){
return $this -> msg ( 10001 , 'cookbook_id 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 [ 'cookbook_id' ], 'intnum' )){
return $this -> msg ( 10005 , 'cookbook_id type is error' );
}
$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' => '系统错误']);
// }
}
2025-03-07 18:13:24 +08:00
// 关注行为(OK)
public function cookbook_follow ( $data = [ 'token' => 'caadd1be045a65f3' , 'being_followed' => 'caadd1be045a65f30b92aa805f1de54a' ]){
2025-01-22 12:31:08 +08:00
// 尝试捕获异常
// try {
if ( count ( input ( 'post.' )) > 0 ){
$data = input ( 'post.' );
}
if ( ! array_key_exists ( 'token' , $data )){
return $this -> msg ( 10001 , 'token is miss' );
}
2025-03-07 18:13:24 +08:00
if ( ! array_key_exists ( 'being_followed' , $data )){
2025-01-22 12:31:08 +08:00
return $this -> msg ( 10001 , 'cookbook_id is miss' );
}
if ( ! $this -> verify_data_is_ok ( $data [ 'token' ], 'str' )){
return $this -> msg ( 10005 , 'token type is error' );
}
2025-03-07 18:13:24 +08:00
if ( ! $this -> verify_data_is_ok ( $data [ 'being_followed' ], 'str' )){
2025-01-22 12:31:08 +08:00
return $this -> msg ( 10005 , 'cookbook_id type is error' );
}
$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' => '系统错误']);
// }
}
2025-03-07 18:13:24 +08:00
// 点赞收藏菜谱(OK)
public function cookbook_like ( $data = [ 'token' => 'caadd1be045a65f30b92aa805f1de54a' , 'cookbook_id' => '12' ]){
2025-01-22 12:31:08 +08:00
// 尝试捕获异常
// try {
if ( count ( input ( 'post.' )) > 0 ){
$data = input ( 'post.' );
}
if ( ! array_key_exists ( 'token' , $data )){
return $this -> msg ( 10001 , 'token is miss' );
}
if ( ! array_key_exists ( 'cookbook_id' , $data )){
return $this -> msg ( 10001 , 'cookbook_id 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 [ 'cookbook_id' ], 'intnum' )){
return $this -> msg ( 10005 , 'cookbook_id type is error' );
}
$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' => '系统错误']);
// }
}
2025-03-08 14:04:09 +08:00
// 计算当前食材重量的卡路里(OK)
2025-03-07 18:13:24 +08:00
public function food_count_kcal ( $data = [ 'token' => 'caadd1be045a65f30b92aa805f1de54a' , 'food_name' => '鸡肉' , 'food_weight' => 456.37 ]){
2025-01-22 12:31:08 +08:00
// 尝试捕获异常
// try {
if ( count ( input ( 'post.' )) > 0 ){
$data = input ( 'post.' );
}
if ( ! array_key_exists ( 'token' , $data )){
return $this -> msg ( 10001 , 'token is miss' );
}
2025-03-07 18:13:24 +08:00
if ( ! array_key_exists ( 'food_name' , $data )){
return $this -> msg ( 10001 , 'food_name is miss' );
2025-01-22 12:31:08 +08:00
}
if ( ! array_key_exists ( 'food_weight' , $data )){
return $this -> msg ( 10001 , 'food_weight is miss' );
}
if ( ! $this -> verify_data_is_ok ( $data [ 'token' ], 'str' )){
return $this -> msg ( 10005 , 'token type is error' );
}
2025-03-07 18:13:24 +08:00
if ( ! $this -> verify_data_is_ok ( $data [ 'food_name' ], 'str' )){
2025-03-08 14:04:09 +08:00
return $this -> msg ( 10005 , 'food_name type is error' );
2025-03-07 18:13:24 +08:00
}
if ( ! $this -> verify_data_is_ok ( $data [ 'food_weight' ], 'num' )){
2025-03-08 14:04:09 +08:00
return $this -> msg ( 10005 , 'food_weight type is error' );
2025-01-22 12:31:08 +08:00
}
2025-03-07 18:13:24 +08:00
$return_data = $this -> food_count_kcal_action ( $data );
2025-01-22 12:31:08 +08:00
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' => '系统错误']);
// }
}
2025-03-08 14:04:09 +08:00
// 保存每日餐食食物信息
public function save_food_list ( $data = [ 'token' => 'caadd1be045a65f30b92aa805f1de54a' , 'food_list' => [[ 'name' => '鸡肉' , 'weight' => 456.37 , 'kcal' => 761.52 ]]]){
// 尝试捕获异常
// try {
if ( count ( input ( 'post.' )) > 0 ){
$data = input ( 'post.' );
}
if ( ! array_key_exists ( 'token' , $data )){
return $this -> msg ( 10001 , 'token is miss' );
}
if ( ! array_key_exists ( 'food_list' , $data )){
return $this -> msg ( 10001 , 'food_list is miss' );
}
if ( ! $this -> verify_data_is_ok ( $data [ 'token' ], 'str' )){
return $this -> msg ( 10005 , 'token type is error' );
}
$return_data = $this -> save_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' => '系统错误']);
// }
}
2025-03-07 18:13:24 +08:00
#######################################################################action#######################################################################
#######################################################################action#######################################################################
2025-01-22 12:31:08 +08:00
#######################################################################action#######################################################################
public function add_cookbook_action ( $data ){
if ( count ( $data [ 'food_list' ]) < 1 ){
return $this -> msg ( 10005 , '至少添加一个食物' );
}
if ( count ( $data [ 'step_list' ]) < 1 ){
return $this -> msg ( 10005 , '至少添加一个步骤' );
}
$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 ( 10005 , '食材缺少名称或者重量' );
}
if ( ! $this -> verify_data_is_ok ( $value [ 'name' ], 'str' )){
2025-03-07 18:13:24 +08:00
return $this -> msg ( 10005 , '食材名称格式错误' );
2025-01-22 12:31:08 +08:00
}
if ( ! $this -> verify_data_is_ok ( $value [ 'weight' ], 'intnum' )){
return $this -> msg ( 10005 , '食材重量格式错误,需整数数字' );
}
array_push ( $food_type , $value [ 'name' ]);
}
// 检验一下step_list是否合规( 步骤列表)
foreach ( $data [ 'step_list' ] as $key => $value ) {
if ( ! array_key_exists ( 'description' , $value ) || ! array_key_exists ( 'pic_list' , $value )) {
return $this -> msg ( 10005 , '步骤缺少描述或者图片' );
}
if ( ! $this -> verify_data_is_ok ( $value [ 'description' ], 'str' )){
return $this -> msg ( 10005 , '步骤描述格式错误,需要正常字符' );
}
foreach ( $value [ 'pic_list' ] as $k => $v ) {
if ( ! $this -> verify_data_is_ok ( $v , 'intnum' )){
return $this -> msg ( 10005 , '步骤中图片ID错误,需整数数字' );
}
}
}
$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
2025-03-07 18:13:24 +08:00
$kcal_data = $this -> count_calorie ( $data [ 'food_list' ], $data [ 'step_list' ]);
$data [ 'food_list' ] = $kcal_data [ 0 ];
$data [ 'step_list' ] = $kcal_data [ 1 ];
2025-01-22 12:31:08 +08:00
// 处理食材卡路里end
$insert_data = [
'title' => $data [ 'title' ],
'cover' => $data [ 'cover' ],
'create_user_token' => $user_data [ 'token' ],
'create_user_head_pic' => $user_data [ 'head_pic' ],
'create_user_nickname' => $user_data [ 'nickname' ],
'describe_data' => $data [ 'description' ],
'food_data' => json_encode ( $data [ 'food_list' ]),
'step_data' => json_encode ( $data [ 'step_list' ]),
'food_type' => implode ( ',' , $food_type ),
'cook_label' => $data [ 'cook_label' ],
'create_time' => date ( 'Y-m-d H:i:s' )
];
$cook_book_result = $cfc -> table ( $this -> kitchenscale_db_msg [ 'cookbook' ]) -> insert ( $insert_data );
if ( $cook_book_result ){
return $this -> msg ([]);
} else {
return $this -> msg ( 10002 );
}
}
public function find_by_cook_label_action ( $data ){
$page_now = $data [ 'page' ];
$page_total = $data [ 'page' ];
$page_num = 20 ;
$cook_label = $data [ 'cook_label' ];
$cfc = Db :: connect ( 'cfc_db' );
$content_num = $cfc -> table ( $this -> kitchenscale_db_msg [ 'cookbook' ])
-> where ([ 'cook_label' => $cook_label ])
-> count ();
2025-03-07 11:42:26 +08:00
2025-01-22 12:31:08 +08:00
$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.cook_label' => $cook_label ])
-> field ( 'cookbook.id,cookbook.title,uploadimg.pic_url as cover,cookbook.create_user_head_pic,cookbook.create_user_nickname,cookbook.like_it as like_num' )
-> page ( " $page_now , $page_num " )
-> select ();
2025-03-07 11:42:26 +08:00
// 获取用户收藏列表
$my_collect_list = $cfc -> table ( $this -> kitchenscale_db_msg [ 'collect_list' ])
-> where ([ 'token' => $data [ 'token' ]])
-> column ( 'cookbook_id' );
// dump($my_collect_list);
// 处理菜谱收藏信息
2025-01-22 12:31:08 +08:00
foreach ( $content_list as $key => $value ) {
2025-03-07 11:42:26 +08:00
// if(in_array($value['id'],$my_collect_list)){
if ( array_key_exists ( $value [ 'id' ], $my_collect_list )){
$content_list [ $key ][ 'is_me_like_it' ] = 1 ;
2025-01-22 12:31:08 +08:00
} else {
2025-03-07 11:42:26 +08:00
$content_list [ $key ][ 'is_me_like_it' ] = 0 ;
2025-01-22 12:31:08 +08:00
}
2025-03-07 11:42:26 +08:00
if ( $value [ 'cover' ] == null ){
$content_list [ $key ][ 'cover' ] = 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg' ;
2025-01-22 12:31:08 +08:00
}
2025-03-07 11:42:26 +08:00
unset ( $content_list [ $key ][ 'ROW_NUMBER' ]);
2025-01-22 12:31:08 +08:00
}
return $this -> msg ([
'page_now' => $page_now ,
'page_total' => $page_total ,
'content_list' => $content_list
]);
}
public function find_by_food_action ( $data ){
$page_now = $data [ 'page' ];
$page_total = $data [ 'page' ];
$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 %' " )
2025-03-07 11:42:26 +08:00
-> field ( 'cookbook.id,cookbook.title,uploadimg.pic_url as cover,cookbook.create_user_head_pic,cookbook.create_user_nickname,cookbook.like_it as like_num' )
2025-01-22 12:31:08 +08:00
-> page ( " $page_now , $page_num " )
-> select ();
2025-03-07 11:42:26 +08:00
// 获取用户收藏列表
$my_collect_list = $cfc -> table ( $this -> kitchenscale_db_msg [ 'collect_list' ])
-> where ([ 'token' => $data [ 'token' ]])
-> column ( 'cookbook_id' );
// dump($my_collect_list);
// 处理菜谱收藏信息
2025-01-22 12:31:08 +08:00
foreach ( $content_list as $key => $value ) {
2025-03-07 11:42:26 +08:00
// if(in_array($value['id'],$my_collect_list)){
if ( array_key_exists ( $value [ 'id' ], $my_collect_list )){
$content_list [ $key ][ 'is_me_like_it' ] = 1 ;
2025-01-22 12:31:08 +08:00
} else {
2025-03-07 11:42:26 +08:00
$content_list [ $key ][ 'is_me_like_it' ] = 0 ;
2025-01-22 12:31:08 +08:00
}
2025-03-07 11:42:26 +08:00
if ( $value [ 'cover' ] == null ){
$content_list [ $key ][ 'cover' ] = 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg' ;
2025-01-22 12:31:08 +08:00
}
2025-03-07 11:42:26 +08:00
unset ( $content_list [ $key ][ 'ROW_NUMBER' ]);
2025-01-22 12:31:08 +08:00
}
return $this -> msg ([
'page_now' => $page_now ,
'page_total' => $page_total ,
'content_list' => $content_list
]);
}
public function cookbook_details_action ( $data ){
$cfc = Db :: connect ( 'cfc_db' );
$img_arr = [];
// 查询菜谱详情
$cookbook_data = $cfc -> table ( $this -> kitchenscale_db_msg [ 'cookbook' ]) -> where ([ 'id' => $data [ 'cookbook_id' ]]) -> find ();
if ( ! $cookbook_data ){
return $this -> msg ( 10002 , '菜谱不存在' );
}
$cookbook_data [ 'food_data' ] = json_decode ( $cookbook_data [ 'food_data' ], true );
$cookbook_data [ 'step_data' ] = json_decode ( $cookbook_data [ 'step_data' ], true );
$cookbook_data_step_data_count = count ( $cookbook_data [ 'step_data' ]);
// 设置需要的图片id
array_push ( $img_arr , $cookbook_data [ 'cover' ]);
foreach ( $cookbook_data [ 'step_data' ] as $key => $value ) {
if ( count ( $value [ 'pic_list' ]) > 0 ){
foreach ( $value [ 'pic_list' ] as $k => $v ) {
if ( ! in_array ( $v , $img_arr )){
array_push ( $img_arr , $v );
}
}
}
}
$img_arr = implode ( ',' , $img_arr );
// 查找需要的图片
$img_arr_data = $cfc -> table ( $this -> kitchenscale_db_msg [ 'uploadimg' ]) -> where ( " id in ( $img_arr ) AND is_del = 0 " ) -> field ( 'id,pic_name,pic_url' ) -> select ();
$cookbook_img_data = [];
// 处理菜谱图片
foreach ( $img_arr_data as $key => $value ) {
$cookbook_img_data [ $value [ 'id' ]] = $value [ 'pic_url' ];
}
// 设置菜谱图片
foreach ( $cookbook_data [ 'step_data' ] as $key => $value ) {
$cookbook_data [ 'step_data' ][ $key ][ 'pic_list_ls' ] = [];
foreach ( $value [ 'pic_list' ] as $k => $v ) {
if ( array_key_exists ( $v , $cookbook_img_data )){
array_push ( $cookbook_data [ 'step_data' ][ $key ][ 'pic_list_ls' ], $cookbook_img_data [ $v ]);
} else {
array_push ( $cookbook_data [ 'step_data' ][ $key ][ 'pic_list_ls' ], 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg' );
}
}
$cookbook_data [ 'step_data' ][ $key ][ 'pic_list' ] = $cookbook_data [ 'step_data' ][ $key ][ 'pic_list_ls' ];
unset ( $cookbook_data [ 'step_data' ][ $key ][ 'pic_list_ls' ]);
$cookbook_data [ 'step_data' ][ $key ][ 'step_num' ] = " 步骤 " . ( $key + 1 ) . '/' . $cookbook_data_step_data_count ;
}
if ( array_key_exists ( $cookbook_data [ 'cover' ], $cookbook_img_data )){
$cookbook_data [ 'cover' ] = $cookbook_img_data [ $cookbook_data [ 'cover' ]];
} else {
$cookbook_data [ 'cover' ] = 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg' ;
}
// 处理关注跟收藏信息
if ( $data [ 'token' ] == $cookbook_data [ 'create_user_token' ]){
// 如果查询跟作者一致
2025-03-07 18:13:24 +08:00
$cookbook_data [ 'follow_status' ] = 'myself' ;
$cookbook_data [ 'collect_status' ] = 'myself' ;
2025-01-22 12:31:08 +08:00
} else {
$follow_data = $cfc -> table ( $this -> kitchenscale_db_msg [ 'followlist' ])
-> where ([
'follow_user_token' => $data [ 'token' ],
'being_follow_user_token' => $cookbook_data [ 'create_user_token' ],
])
-> find ();
if ( $follow_data ){
if ( $follow_data [ 'is_del' ] == 0 ){
// 如果有结果并且没被删过
2025-03-07 18:13:24 +08:00
$cookbook_data [ 'follow_status' ] = 'yes' ;
2025-01-22 12:31:08 +08:00
} else {
// 如果有结果被删过
2025-03-07 18:13:24 +08:00
$cookbook_data [ 'follow_status' ] = 'no' ;
2025-01-22 12:31:08 +08:00
}
} else {
// 如果没结果
2025-03-07 18:13:24 +08:00
$cookbook_data [ 'follow_status' ] = 'no' ;
2025-01-22 12:31:08 +08:00
}
2025-03-07 11:42:26 +08:00
$collect_data = $cfc -> table ( $this -> kitchenscale_db_msg [ 'collect_list' ])
2025-01-22 12:31:08 +08:00
-> where ([
'token' => $data [ 'token' ],
'cookbook_id' => $data [ 'cookbook_id' ],
])
-> find ();
if ( $collect_data ){
if ( $collect_data [ 'is_del' ] == 0 ){
// 如果有结果并且没被删过
2025-03-07 18:13:24 +08:00
$cookbook_data [ 'collect_status' ] = 'yes' ;
2025-01-22 12:31:08 +08:00
} else {
// 如果有结果被删过
2025-03-07 18:13:24 +08:00
$cookbook_data [ 'collect_status' ] = 'no' ;
2025-01-22 12:31:08 +08:00
}
} else {
// 如果没结果
2025-03-07 18:13:24 +08:00
$cookbook_data [ 'collect_status' ] = 'no' ;
2025-01-22 12:31:08 +08:00
}
}
// 添加阅读量
$read_num = $cfc -> table ( $this -> kitchenscale_db_msg [ 'cookbook' ]) -> where ([ 'id' => $data [ 'cookbook_id' ]]) -> setInc ( 'read_it' );
if ( $read_num ){
$cookbook_data [ 'read_it' ] = $cookbook_data [ 'read_it' ] + 1 ;
}
2025-03-07 18:13:24 +08:00
// unset($cookbook_data['create_user_token']);
2025-01-22 12:31:08 +08:00
unset ( $cookbook_data [ 'create_time' ]);
unset ( $cookbook_data [ 'cook_label' ]);
unset ( $cookbook_data [ 'food_type' ]);
unset ( $cookbook_data [ 'ROW_NUMBER' ]);
return $this -> msg ( $cookbook_data );
}
public function cookbook_follow_action ( $data ){
// dump($data);
$cfc = Db :: connect ( 'cfc_db' );
2025-03-07 18:13:24 +08:00
// $cookbook_data = $cfc->table($this->kitchenscale_db_msg['cookbook'])->where(['id'=>$data['cookbook_id']])->field('id,create_user_token')->find();
// if(!$cookbook_data){
// return $this->msg(10002,'未找到菜谱');
// }
if ( $data [ 'token' ] == $data [ 'being_followed' ]){
2025-01-22 12:31:08 +08:00
// 如果查询跟作者一致
return $this -> msg ( 10002 , '不能关注自己' );
}
$follow_data = $cfc -> table ( $this -> kitchenscale_db_msg [ 'followlist' ])
-> where ([
'follow_user_token' => $data [ 'token' ],
2025-03-07 18:13:24 +08:00
'being_follow_user_token' => $data [ 'being_followed' ],
2025-01-22 12:31:08 +08:00
])
-> find ();
$follow_data_state = 0 ;
if ( $follow_data ){
if ( $follow_data [ 'is_del' ] == 0 ){
// 如果当前是关注状态
$follow_data_state = 1 ;
} else {
$follow_data_state = 0 ;
}
$follow_result = $cfc -> table ( $this -> kitchenscale_db_msg [ 'followlist' ])
2025-03-07 18:13:24 +08:00
-> where ([ 'id' => $follow_data [ 'id' ]])
2025-01-22 12:31:08 +08:00
-> update ([ 'is_del' => $follow_data_state ]);
} else {
$follow_result = $cfc -> table ( $this -> kitchenscale_db_msg [ 'followlist' ])
-> insert ([
'follow_user_token' => $data [ 'token' ],
2025-03-07 18:13:24 +08:00
'being_follow_user_token' => $data [ 'being_followed' ],
2025-01-22 12:31:08 +08:00
'create_time' => date ( 'Y-m-d H:i:s' )
]);
}
if ( $follow_result ){
return $this -> msg ([]);
} else {
return $this -> msg ( 10001 , '操作失败' );
}
}
public function cookbook_like_action ( $data ){
$cfc = Db :: connect ( 'cfc_db' );
$cookbook_data = $cfc -> table ( $this -> kitchenscale_db_msg [ 'cookbook' ]) -> where ([ 'id' => $data [ 'cookbook_id' ]]) -> field ( 'id,create_user_token' ) -> find ();
if ( ! $cookbook_data ){
return $this -> msg ( 10002 , '未找到菜谱' );
}
2025-03-07 18:13:24 +08:00
// if($data['token'] == $cookbook_data['create_user_token']){
// // 如果查询跟作者一致
// return $this->msg(10002,'不能收藏自己');
// }
2025-03-07 11:42:26 +08:00
$like_data = $cfc -> table ( $this -> kitchenscale_db_msg [ 'collect_list' ])
2025-01-22 12:31:08 +08:00
-> where ([
'token' => $data [ 'token' ],
'cookbook_id' => $data [ 'cookbook_id' ],
])
-> find ();
$like_data_state = 0 ;
if ( $like_data ){
if ( $like_data [ 'is_del' ] == 0 ){
// 如果当前是关注状态
$like_data_state = 1 ;
} else {
$like_data_state = 0 ;
}
// 启动事务
Db :: startTrans ();
try {
2025-03-07 11:42:26 +08:00
$cfc -> table ( $this -> kitchenscale_db_msg [ 'collect_list' ])
2025-03-07 18:13:24 +08:00
-> where ([ 'id' => $like_data [ 'id' ]])
2025-01-22 12:31:08 +08:00
-> update ([ 'is_del' => $like_data_state ]);
if ( $like_data_state == 0 ){
$cfc -> table ( $this -> kitchenscale_db_msg [ 'cookbook' ]) -> where ([ 'id' => $data [ 'cookbook_id' ]]) -> setInc ( 'like_it' );
} else {
$cfc -> table ( $this -> kitchenscale_db_msg [ 'cookbook' ]) -> where ([ 'id' => $data [ 'cookbook_id' ]]) -> setDec ( 'like_it' );
}
// 提交事务
Db :: commit ();
return $this -> msg ([]);
} catch ( \Exception $e ) {
// 回滚事务
Db :: rollback ();
return $this -> msg ( 10001 , '操作失败' );
}
} else {
// 启动事务
Db :: startTrans ();
try {
2025-03-07 11:42:26 +08:00
$cfc -> table ( $this -> kitchenscale_db_msg [ 'collect_list' ])
2025-01-22 12:31:08 +08:00
-> insert ([
'token' => $data [ 'token' ],
'cookbook_id' => $data [ 'cookbook_id' ],
'create_time' => date ( 'Y-m-d H:i:s' )
]);
$cfc -> table ( $this -> kitchenscale_db_msg [ 'cookbook' ]) -> where ([ 'id' => $data [ 'cookbook_id' ]]) -> setInc ( 'like_it' );
// 提交事务
Db :: commit ();
return $this -> msg ([]);
} catch ( \Exception $e ) {
// 回滚事务
Db :: rollback ();
return $this -> msg ( 10001 , '操作失败' );
}
}
}
2025-03-07 18:13:24 +08:00
public function food_count_kcal_action ( $data ){
$cfc = Db :: connect ( 'cfc_db' );
$food_data = $cfc -> table ( $this -> kitchenscale_db_msg [ 'foodlist3' ]) -> where ([ 'name' => $data [ 'food_name' ]]) -> field ( " kcal " ) -> find ();
if ( ! $food_data ){
return $this -> msg ( 10002 , '未登记的食材' );
2025-01-22 12:31:08 +08:00
}
2025-03-07 18:13:24 +08:00
$weight = bcdiv ( $data [ 'food_weight' ], 100 , 2 );
$kcal = bcmul ( $weight , $food_data [ 'kcal' ], 2 );
2025-03-08 14:04:09 +08:00
return $this -> msg ([ 'value' => $kcal , 'unit' => 'kcal' ]);
}
public function save_food_list_action ( $data ){
$cfc = Db :: connect ( 'cfc_db' );
foreach ( $data [ 'food_list' ] as $key => $value ) {
if ( ! array_key_exists ( 'name' , $value ) || ! array_key_exists ( 'weight' , $value ) || ! array_key_exists ( 'kcal' , $value )){
return $this -> msg ( 10001 , 'food_list content lost' );
}
if ( ! $this -> verify_data_is_ok ( $value [ 'name' ], 'str' )){
return $this -> msg ( 10005 , 'name type is error' );
}
if ( ! $this -> verify_data_is_ok ( $value [ 'weight' ], 'num' )){
return $this -> msg ( 10005 , 'weight type is error' );
}
if ( ! $this -> verify_data_is_ok ( $value [ 'kcal' ], 'num' )){
return $this -> msg ( 10005 , 'kcal type is error' );
}
}
if ( ! array_key_exists ( 'eat_time' , $data )){
$data [ 'eat_time' ] = date ( 'Y-m-d H:i:s' );
} else {
if ( ! $this -> verify_data_is_ok ( $value [ 'kcal' ], 'datetime' )){
return $this -> msg ( 10005 , 'kcal type is error' );
}
}
$result = $cfc -> table ( $this -> kitchenscale_db_msg [ 'foodlist3' ])
-> insert ([
]);
2025-01-22 12:31:08 +08:00
}
2025-03-07 18:13:24 +08:00
#######################################################################小工具#######################################################################
#######################################################################小工具#######################################################################
#######################################################################小工具#######################################################################
// 处理食材的卡路里
public function count_calorie ( $data , $step ){
$foot_name = array_column ( $data , 'name' );
$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 ( " name,kcal " ) -> select ();
$foot_kcal2 = [];
foreach ( $foot_kcal as $key => $value ) {
$foot_kcal2 [ $value [ 'name' ]] = $value [ 'kcal' ];
}
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' ;
} else {
$data [ $key ][ 'kcal' ] = '0kcal' ;
}
$data [ $key ][ 'weight' ] = $data [ $key ][ 'weight' ] . 'g' ;
}
foreach ( $step as $key => $value ) {
foreach ( $value [ 'foot_list' ] as $k => $v ) {
if ( array_key_exists ( $v [ 'name' ], $foot_kcal2 )){
$step [ $key ][ 'foot_list' ][ $k ][ 'kcal' ] = $this -> count_calorie_action ( $v [ 'weight' ], $foot_kcal2 [ $v [ 'name' ]]) . 'kcal' ;
} else {
$step [ $key ][ 'foot_list' ][ $k ][ 'kcal' ] = '0kcal' ;
}
$step [ $key ][ 'foot_list' ][ $k ][ 'weight' ] = $step [ $key ][ 'foot_list' ][ $k ][ 'weight' ] . 'g' ;
}
}
return [ $data , $step ];
}
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
// 计算卡路里
public function count_calorie_action ( $weight , $kcal ){
$weight = bcdiv ( $weight , 100 , 2 );
return bcmul ( $weight , $kcal , 2 );
}
2025-01-22 12:31:08 +08:00
}