SchoolPhysicalExamination/application/KitchenScale2/controller/app/Cookbook.php

1612 lines
69 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

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

<?php
namespace app\KitchenScale2\controller\app;
use think\Db;
class Cookbook extends Base{
// protected $token_time = 2592000;//30天的秒数
protected $default_head_pic = 'http://tc.pcxbc.com/tsf/head_pic.png';
protected $page_num = 10;
protected $reedaw_db_msg = [
'zhanghao'=>'app_account_number',//账号表
'juese'=>'app_user_data',//角色表
];
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_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',//用户表
];
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
################################################################接口################################################################
################################################################接口################################################################
################################################################接口################################################################
// 添加菜谱(OK)
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(!$this->verify_data_is_ok($data['cook_label'],'intnum')){
return $this->msg(10005,'cook_label 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["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 update_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(!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['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(!$this->verify_data_is_ok($data['cook_label'],'intnum')){
return $this->msg(10005,'cook_label 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');
}
if(!$this->verify_data_is_ok($data['cookbook_id'],'intnum')){
return $this->msg(10005,'cookbook_id type is error');
}
$return_data = $this->update_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'] .= "代码: " . $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 {
if(count(input('post.')) > 0){
$data = input('post.');
}
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['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');
// }
$return_data = $this->find_by_cook_label_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' => '系统错误']);
}
}
// 根据食材详细查找列表(OK)
public function find_by_food($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','food_name'=>"2724,2670",'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,'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["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'=>'3594']){
// 尝试捕获异常
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('cookbook_id', $data)){
return $this->msg(10001,'cookbook_id is miss');
}
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["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 {
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('being_followed', $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['being_followed'],'str')){
return $this->msg(10005,'cookbook_id type is error');
}
$return_data = $this->cookbook_follow_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' => '系统错误']);
}
}
// 点赞收藏菜谱(OK)
public function cookbook_like($data=['token'=>'caadd1be045a65f30b92aa805f1de54a','cookbook_id'=>'12']){
// 尝试捕获异常
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["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 {
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('food_name', $data)){
return $this->msg(10001,'food_name is miss');
}
if(!array_key_exists('food_weight', $data)){
return $this->msg(10001,'food_weight is miss');
}
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['food_weight'],'num')){
return $this->msg(10005,'food_weight type is error');
}
$return_data = $this->food_count_kcal_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' => '系统错误']);
}
}
// 食材列表查询接口(OK)
public function find_food($data=['food_name'=>'鸡肉']){
// 尝试捕获异常
try {
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('food_name', $data)){
return $this->msg(10001,'food_name is miss');
}
if(!$this->verify_data_is_ok($data['food_name'],'str')){
return $this->msg(10005,'food_name type is error');
}
$return_data = $this->find_food_action($data);
return $return_data;
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
// 记录日志
$this->record_api_log($data, $logContent, null);
return json(['status' => 'error', 'message' => '系统错误']);
}
}
// 获取所有食材列表
public function get_food_list(){
// 尝试捕获异常
// 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(!$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');
// }
$return_data = $this->get_food_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' => '系统错误']);
// }
}
// 获取所有食谱label
public function get_cookbook_label_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_cookbook_label_list_action($data);
return $return_data;
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
// 记录日志
$this->record_api_log($data, $logContent, null);
return json(['status' => 'error', 'message' => '系统错误']);
}
}
// 获取查询页页面导航食材列表
public function 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#######################################################################
#######################################################################action#######################################################################
#######################################################################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){
return $this->msg(20001,'账号信息错误');
}
if(count($data['food_list']) < 1){
return $this->msg(10001,'至少添加一个食物');
}
if(count($data['step_list']) < 1){
return $this->msg(10001,'至少添加一个步骤');
}
$food_type = [];
// 检验一下food_list是否合规食材列表
foreach ($data['food_list'] as $key => $value) {
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,'食材名称格式错误');
}
if(!$this->verify_data_is_ok($value['weight'],'intnum')){
return $this->msg(10005,'食材重量格式错误,需整数数字');
}
if(!in_array($value['id'], $food_type)){
array_push($food_type, $value['id']);
}
}
// 检验一下step_list是否合规步骤列表
foreach ($data['step_list'] as $key => $value) {
if (!array_key_exists('description', $value) || !array_key_exists('pic_list', $value)) {
return $this->msg(10001,'步骤缺少描述或者图片');
}
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
$kcal_data = $this->count_calorie($data['food_list'],$data['step_list']);
$data['food_list'] =$kcal_data;
// 处理食材卡路里end
// dump($data['food_list']);
// die;
$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')
];
// dump($insert_data);
// die;
// 启动事务
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([]);
} 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){
// 获取账号下信息以及用户信息
$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,'账号信息错误');
}
if(count($data['food_list']) < 1){
return $this->msg(10001,'至少添加一个食物');
}
if(count($data['step_list']) < 1){
return $this->msg(10001,'至少添加一个步骤');
}
$food_type = [];
// 检验一下food_list是否合规食材列表
foreach ($data['food_list'] as $key => $value) {
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,'食材名称格式错误');
}
if(!$this->verify_data_is_ok($value['weight'],'intnum')){
return $this->msg(10005,'食材重量格式错误,需整数数字');
}
if(!in_array($value['id'], $food_type)){
array_push($food_type, $value['id']);
}
}
// 检验一下step_list是否合规步骤列表
foreach ($data['step_list'] as $key => $value) {
if (!array_key_exists('description', $value) || !array_key_exists('pic_list', $value)) {
return $this->msg(10001,'步骤缺少描述或者图片');
}
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();
// if(!$user_data){
// }
// 处理食材卡路里start
$kcal_data = $this->count_calorie($data['food_list'],$data['step_list']);
$data['food_list'] =$kcal_data;
// 处理食材卡路里end
// dump($data['food_list']);
// die;
$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'],
];
// 启动事务
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){
return $this->msg([]);
}else{
return $this->msg(10002);
}
}
public function find_by_cook_label_action($data){
$page_now = array_key_exists('page',$data)?$data['page']:1;
$page_total = $page_now;
$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,'is_del'=>0])
->count();
$page_total = ceil($content_num/$page_num);
$content_list = $cfc->table($this->kitchenscale_db_msg['cookbook'])
->alias('a')
->join($this->kitchenscale_db_msg['uploadimg'].' b','a.cover = b.id','LEFT')
->where(['a.cook_label'=>$cook_label,'a.is_del'=>0])
->field('a.id,a.title,b.pic_url as cover,a.create_user_head_pic,a.create_user_nickname,a.likes_num')
// ->order('id DESC')
->page("$page_now,$page_num")
->select();
if(array_key_exists('token',$data)){
if($data['token'] != ''){
// 获取账号下信息以及用户信息
$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,'账号信息错误');
}
// 获取用户收藏列表
$my_collect_list = $cfc->table($this->kitchenscale_db_msg['collect_list'])
->where(['token'=>$data['token'],'is_del'=>0])
->column('cookbook_id');
// dump($my_collect_list);
// 处理菜谱收藏信息
foreach ($content_list as $key => $value) {
// if(in_array($value['id'],$my_collect_list)){
if(array_key_exists($value['id'],$my_collect_list)){
$content_list[$key]['is_me_like_it'] = 'yes';
}else{
$content_list[$key]['is_me_like_it'] = 'no';
}
if($value['cover'] == null){
$content_list[$key]['cover'] = 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg';
}
unset($content_list[$key]['ROW_NUMBER']);
}
}else{
foreach ($content_list as $key => $value) {
$content_list[$key]['is_me_like_it'] = 'no';
if($value['cover'] == null){
$content_list[$key]['cover'] = 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg';
}
unset($content_list[$key]['ROW_NUMBER']);
}
}
}else{
foreach ($content_list as $key => $value) {
$content_list[$key]['is_me_like_it'] = 'no';
if($value['cover'] == null){
$content_list[$key]['cover'] = 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg';
}
unset($content_list[$key]['ROW_NUMBER']);
}
}
// dump($content_list);
// die;
return $this->msg([
'page_now'=>$page_now,
'page_total'=>$page_total,
'content_list'=>$content_list
]);
}
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 = 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');
// $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'])
->where(['token'=>$data['token']])
->column('cookbook_id');
// dump($my_collect_list);
// 处理菜谱收藏信息
foreach ($content_list as $key => $value) {
// if(in_array($value['id'],$my_collect_list)){
if(array_key_exists($value['id'],$my_collect_list)){
$content_list[$key]['is_me_like_it'] = 'yes';
}else{
$content_list[$key]['is_me_like_it'] = 'no';
}
if($value['cover'] == null){
$content_list[$key]['cover'] = 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg';
}
unset($content_list[$key]['ROW_NUMBER']);
}
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(10004,'菜谱不存在');
}
$cookbook_data['food_data'] = json_decode($cookbook_data['food_data'],true);
$cookbook_data['step_data'] = json_decode($cookbook_data['step_data'],true);
// $cookbook_data['food_type'] = explode(',',$cookbook_data['food_type']);
$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);
}
}
}
}
// dump($cookbook_data);
// die;
$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]['step_num'] = "步骤".($key+1).'/'.$cookbook_data_step_data_count;
$cookbook_data['step_data'][$key]['pic_url_list'] = [];
foreach ($value['pic_list'] as $k => $v) {
if(array_key_exists($v, $cookbook_img_data)){
array_push($cookbook_data['step_data'][$key]['pic_url_list'],$cookbook_img_data[$v]);
}else{
array_push($cookbook_data['step_data'][$key]['pic_url_list'],'https://tc.pcxbc.com/kitchenscale_all/diule.jpg');
}
}
}
// $cookbook_data['cover_id'] = $cookbook_data['cover'];
if(array_key_exists($cookbook_data['cover'], $cookbook_img_data)){
$cookbook_data['cover_pic_url'] = $cookbook_img_data[$cookbook_data['cover']];
}else{
$cookbook_data['cover_pic_url'] = 'https://tc.pcxbc.com/kitchenscale_all/diule.jpg';
}
if(array_key_exists($cookbook_data['cover'], $cookbook_img_data)){
if($data['token'] != ''){
// 获取账号下信息以及用户信息
$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,'账号信息错误');
}
$collect_data = $cfc->table($this->kitchenscale_db_msg['collect_list'])
->where([
'token'=>$data['token'],
'cookbook_id'=>$data['cookbook_id'],
])
->find();
if($collect_data){
if($collect_data['is_del'] == 0){
// 如果有结果并且没被删过
$cookbook_data['collect_status'] = 'yes';
}else{
// 如果有结果被删过
$cookbook_data['collect_status'] = 'no';
}
}else{
// 如果没结果
$cookbook_data['collect_status'] = 'no';
}
}else{
$cookbook_data['collect_status'] = 'no';
}
}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'],
]);
if(count($nutrition)>0){
array_push($cookbook_data['tags'],[
'title'=>'能量',
'desc'=>'含量',
'list'=>$nutrition,
]);
}else{
array_push($cookbook_data['tags'],[
'title'=>'',
'desc'=>'',
'list'=>[],
]);
}
if(count($vitamin)>0){
array_push($cookbook_data['tags'],[
'title'=>'维生素',
'desc'=>'含量',
'list'=>$vitamin,
]);
}else{
array_push($cookbook_data['tags'],[
'title'=>'',
'desc'=>'',
'list'=>[],
]);
}
if(count($mineral)>0){
array_push($cookbook_data['tags'],[
'title'=>'矿物质',
'desc'=>'含量',
'list'=>$mineral,
]);
}else{
array_push($cookbook_data['tags'],[
'title'=>'',
'desc'=>'',
'list'=>[],
]);
}
$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['step_list'] = $cookbook_data['step_data'];
unset($cookbook_data['create_user_token']);
unset($cookbook_data['describe_data']);
unset($cookbook_data['food_data']);
unset($cookbook_data['step_data']);
unset($cookbook_data['create_time']);
unset($cookbook_data['food_type']);
unset($cookbook_data['ROW_NUMBER']);
unset($cookbook_data['is_del']);
return $this->msg($cookbook_data);
}
public function cookbook_follow_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,'账号信息错误');
}
// dump($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,'未找到菜谱');
// }
if($data['token'] == $data['being_followed']){
// 如果查询跟作者一致
return $this->msg(10003,'不能关注自己');
}
$follow_data = $cfc->table($this->kitchenscale_db_msg['followlist'])
->where([
'follow_user_token'=>$data['token'],
'being_follow_user_token'=>$data['being_followed'],
])
->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'])
->where(['id'=>$follow_data['id']])
->update(['is_del'=>$follow_data_state]);
}else{
$follow_result = $cfc->table($this->kitchenscale_db_msg['followlist'])
->insert([
'follow_user_token'=>$data['token'],
'being_follow_user_token'=>$data['being_followed'],
'create_time'=>date('Y-m-d H:i:s')
]);
}
if($follow_result){
return $this->msg([]);
}else{
return $this->msg(10002,'操作失败');
}
}
public function cookbook_like_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,'账号信息错误');
}
$cfc = Db::connect('cfc_db');
$cookbook_data = $cfc->table($this->kitchenscale_db_msg['cookbook'])->where(['id'=>$data['cookbook_id']])->field('id,create_user_token,likes_num')->find();
if(!$cookbook_data){
return $this->msg(10004,'未找到菜谱');
}
// return $this->msg(10002,'是这里');
// if($data['token'] == $cookbook_data['create_user_token']){
// // 如果查询跟作者一致
// return $this->msg(10002,'不能收藏自己');
// }
$like_data = $cfc->table($this->kitchenscale_db_msg['collect_list'])->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{
$cfc->table($this->kitchenscale_db_msg['collect_list'])
->where(['id'=>$like_data['id']])
->update(['is_del'=>$like_data_state]);
if($like_data_state == 0){
$cfc->table($this->kitchenscale_db_msg['cookbook'])->where(['id'=>$data['cookbook_id']])->setInc('likes_num');
}else{
$cfc->table($this->kitchenscale_db_msg['cookbook'])->where(['id'=>$data['cookbook_id']])->setDec('likes_num');
}
// 提交事务
Db::commit();
if($like_data_state==0){
$likes_num = $cookbook_data['likes_num']+1;
}else{
$likes_num = $cookbook_data['likes_num']-1;
if($likes_num <= 0){
$likes_num = 0;
}
}
return $this->msg([
'collect_status'=>$like_data_state==0?'yes':'no',
'likes_num'=>$likes_num
]);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return $this->msg(10002,'操作失败.');
}
}else{
// 启动事务
Db::startTrans();
try{
$cfc->table($this->kitchenscale_db_msg['collect_list'])
->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('likes_num');
// 提交事务
Db::commit();
return $this->msg([
'collect_status'=>"yes",
'likes_num'=>$cookbook_data['likes_num']+1
]);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return $this->msg(10002,'操作失败');
}
}
}
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(10004,'未登记的食材');
}
$weight = bcdiv($data['food_weight'],100,2);
$kcal = bcmul($weight,$food_data['kcal'],2);
return $this->msg(['value'=>$kcal,'unit'=>'kcal']);
}
public function find_food_action($data){
$cfc = Db::connect('cfc_db');
$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.food_name like '%".$data['food_name']."%'
");
if(count($food_data)>0){
for ($i=0; $i < count($food_data); $i++) {
if($food_data[$i]['pic_url'] != ''){
$food_data[$i]['pic_url'] = 'https://tc.pcxbc.com/kitchenscale_all'.$food_data[$i]['pic_url'];
}
}
return $this->msg($food_data);
}else{
return $this->msg(10004,'未找到该食材');
}
}
public function get_food_list_action($data){
if(!array_key_exists('page',$data)){
$data['page'] = 1;
}else{
if(!$this->verify_data_is_ok($data['page'],'intnum')){
$data['page'] = 1;
}
}
// $cp_page_num = 15;
// $cfc = Db::connect('cfc_db');
// $search_sql_str = "is_del = 0";
// if(!array_key_exists('search_data', $data)){
// $data['search_data'] = "";
// $ss = "";
// }else{
// if($data['search_data'] === ""){
// $data['search_data'] = "";
// $ss = "";
// }else{
// $ss = $data['search_data'];
// $data['search_data'] = " AND food_name LIKE '%".str_replace('[', '[[]', $ss)."%'";
// }
// }
// $search_sql_str = $search_sql_str.$data['search_data'];
// $content_num = $cfc->table($this->kitchenscale_db_msg['foodlist3'])
// ->where($search_sql_str)
// ->count();
// $page_total = ceil($content_num/$cp_page_num);
// $collect_list = $cfc->table($this->kitchenscale_db_msg['foodlist3'])
// ->where($search_sql_str)
// ->field('id,record_id,food_name as name,pic_url,Calorie_val as kcal,weight_unit as unit')
// ->page($data['page'],$cp_page_num)
// ->select();
$cp_page_num = 15;
$cfc = Db::connect('cfc_db');
$search_sql_str = "is_del = 0";
if(!array_key_exists('search_data', $data)){
$data['search_data'] = "";
$ss = "";
}else{
if($data['search_data'] === ""){
$data['search_data'] = "";
$ss = "";
}else{
$ss = $data['search_data'];
$data['search_data'] = " AND food_name LIKE '%".str_replace('[', '[[]', $ss)."%'";
}
}
$search_sql_str = $search_sql_str.$data['search_data'];
// 计算总数
$count_sql = "SELECT COUNT(*) as total FROM {$this->kitchenscale_db_msg['foodlist3']} WHERE {$search_sql_str}";
$count_result = $cfc->query($count_sql);
$content_num = $count_result[0]['total'] ?? 0;
$page_total = ceil($content_num/$cp_page_num);
// 计算分页偏移量
$page = max(1, intval($data['page']));
$offset = ($page - 1) * $cp_page_num;
// SQL Server分页查询 - 使用OFFSET FETCH语法SQL Server 2012及以上版本
$sql = "SELECT id, record_id, food_name as name, pic_url, Calorie_val as kcal, weight_unit as unit
FROM {$this->kitchenscale_db_msg['foodlist3']}
WHERE {$search_sql_str}
ORDER BY id
OFFSET {$offset} ROWS
FETCH NEXT {$cp_page_num} ROWS ONLY";
// dump($count_sql);
$collect_list = $cfc->query($sql);
if(count($collect_list) > 0){
$nutrients_list_id = [];
$nutrients_list_temporary = [];
foreach ($collect_list as $key => $value) {
$collect_list[$key]['pic_url'] = "https://tc.pcxbc.com/kitchenscale_all".$collect_list[$key]['pic_url'];
array_push($nutrients_list_id,$collect_list[$key]['record_id']);
$nutrients_list_temporary[$collect_list[$key]['record_id']] = [];
if (!is_numeric($collect_list[$key]['kcal'])) {
$collect_list[$key]['kcal'] = 0;
}
}
// 处理营养物质
$nutrients_list_data = $cfc->table($this->kitchenscale_db_msg['foodlist4'])
->where("father_id in (". implode(',',$nutrients_list_id) .")")
->field("father_id,name,name_ch,unit,value,type")
->select();
for ($i=0; $i < count($nutrients_list_data); $i++) {
if(!is_numeric($nutrients_list_data[$i]['value']) || $nutrients_list_data[$i]['value'] == 0){
continue;
}else{
array_push($nutrients_list_temporary[$nutrients_list_data[$i]['father_id']],[
'name'=>$nutrients_list_data[$i]['name'],
'name_ch'=>$nutrients_list_data[$i]['name_ch'],
'unit'=>$nutrients_list_data[$i]['unit'],
'value'=>$nutrients_list_data[$i]['value'],
'type'=>$nutrients_list_data[$i]['type'],
'type_name'=>$nutrients_list_data[$i]['type'] == 1?'能量及宏量营养素':($nutrients_list_data[$i]['type'] == 2?'维生素':'矿物质'),
'color'=>$nutrients_list_data[$i]['type'] == 1?'#C4FFE0':($nutrients_list_data[$i]['type'] == 2?'#FFEFB7':'#7DA8E0')
]);
}
}
for ($i=0; $i < count($collect_list); $i++) {
$collect_list[$i]['nutrients_four'] = [];
$collect_list[$i]['nutrients_list'] = [];
$temporary_calculate = 0;
if(array_key_exists($collect_list[$i]['record_id'],$nutrients_list_temporary)){
$collect_list[$i]['nutrients_list'] = $nutrients_list_temporary[$collect_list[$i]['record_id']];
foreach ($nutrients_list_temporary[$collect_list[$i]['record_id']] as $key => $value) {
if($value['type'] == 1){
array_push($collect_list[$i]['nutrients_four'],[
'name'=>$value['name'] == 'Carbohydrate'?'碳水':$value['name_ch'],
'unit'=>$value['unit'],
'color'=>$value['name'] == 'Carbohydrate'?'#FFB169':($value['name'] == 'Fat'?'#ED7886':($value['name'] == 'Protein'?'#5180D8':'')),
'value'=>!is_numeric($value['value'])?0:$value['value'],
]);
// 如果不为卡路里
if($value['name'] != 'Calorie'){
$temporary_calculate = $temporary_calculate+$value['value'];
}
}
}
// 处理详情当中的环数据占比
foreach ($collect_list[$i]['nutrients_four'] as $k => $v) {
if($v['name'] != '卡路里'){
$collect_list[$i]['nutrients_four'][$k]['proportion'] = bcmul(bcdiv($v['value'],$temporary_calculate,2),100,0);
}else{
$collect_list[$i]['nutrients_four'][$k]['proportion'] = 0;
}
}
}
}
}
// 记录搜索历史
if(array_key_exists('token',$data) && $data['token'] != '' && $ss != ''){
$user_data = $cfc->table($this->kitchenscale_db_msg['user'])->where(['token'=>$data['token']])->field('id,token')->find();
if($user_data){
$this->add_search_history_action(['id'=>$user_data['id'],'search_data'=>$ss,'type'=>'food']);
}
}
return $this->msg([
'page_now'=>$data['page'],
'page_total'=>$page_total,
'content_list'=>$collect_list
]);
}
public function get_cookbook_label_list_action(){
$cfc = Db::connect('cfc_db');
// 获取菜谱分类标签start
$cook_label = $cfc->table($this->kitchenscale_db_msg['cookbook_label'])
->where("is_del = 0")
->field('id,name')
->select();
$temporary_label = [];
foreach ($cook_label as $key => $value) {
unset($cook_label[$key]['ROW_NUMBER']);
$cook_label[$key]['list'] = [];
$temporary_label[$value['id']] = $key;
}
$content_list = $cfc->table($this->kitchenscale_db_msg['cookbook'])
->alias('a')
->join($this->kitchenscale_db_msg['uploadimg'].' b','a.cover = b.id','LEFT')
->where(['a.is_del'=>0])
->field('a.id,a.cook_label,a.title,b.pic_url as cover')
->select();
foreach ($content_list as $key => $value) {
unset($content_list[$key]['ROW_NUMBER']);
array_push($cook_label[$temporary_label[$value['cook_label']]]['list'],$content_list[$key]);
}
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,food_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['food_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['food_name']]);
}
}
return $this->msg($result);
// 获取菜谱分类标签end
}
#######################################################################小工具#######################################################################
#######################################################################小工具#######################################################################
#######################################################################小工具#######################################################################
// 处理食材的卡路里
public function count_calorie($data,$step){
$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("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']];
}
// dump($data);
// dump($foot_kcal2);
// die;
foreach ($data as $key => $value) {
if(array_key_exists($value['name'], $foot_kcal2)){
$data[$key]['id'] = $foot_kcal2[$value['name']][0];
$data[$key]['kcal'] = $foot_kcal2[$value['name']][1];
}else{
$data[$key]['kcal'] = '0';
$data[$key]['id'] = 0;
}
$data[$key]['unit'] = 'g';
}
return $data;
}
// 加 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);
}
public function chuli_shuju(){
$cfc = Db::connect('cfc_db');
// $foot_kcal = $cfc->table('app_user_cookbook')->field("food_data,id")->select();
// $foot_name = [];
// // dump($foot_kcal);
// foreach ($foot_kcal as $key => $value) {
// unset($foot_kcal[$key]['ROW_NUMBER']);
// $foot_kcal[$key]['food_data'] = json_decode($foot_kcal[$key]['food_data'],true);
// foreach ($foot_kcal[$key]['food_data'] as $k => $v) {
// $linshi_data = $v;
// // dump($linshi_data);
// $foot_kcal[$key]['food_data'][$k] = [];
// $foot_kcal[$key]['food_data'][$k]['name'] = $linshi_data['name'];
// $foot_kcal[$key]['food_data'][$k]['weight'] = $linshi_data['weight'];
// $foot_kcal[$key]['food_data'][$k]['unit'] = 'g';
// $foot_kcal[$key]['food_data'][$k]['kcal'] = rtrim($linshi_data['kcal'], "kcal");
// if(!in_array($linshi_data['name'], $foot_name)){
// array_push($foot_name,$linshi_data['name']);
// }
// }
// // $foot_kcal[$key]['food_data'] = $foot_kcal[$key]['food_data'][0];
// // $foot_kcal[$key]['food_data'] = json_encode($foot_kcal[$key]['food_data']);
// }
// $shicai = $cfc->table($this->kitchenscale_db_msg['foodlist3'])->where("name in ('".implode("','", $foot_name)."')")->field("id,name,kcal")->select();
// $shicai2 = [];
// foreach ($shicai as $key => $value) {
// $shicai2[$value['name']] = [$value['id'],$value['kcal']];
// }
// // dump($shicai2);
// foreach ($foot_kcal as $key => $value) {
// foreach ($foot_kcal[$key]['food_data'] as $k => $v) {
// $foot_kcal[$key]['food_data'][$k]['kcal'] = $shicai2[$v['name']][1];
// $foot_kcal[$key]['food_data'][$k]['id'] = $shicai2[$v['name']][0];
// }
// // $foot_kcal[$key]['food_data'] = $foot_kcal[$key]['food_data'][0];
// $foot_kcal[$key]['food_data'] = json_encode($foot_kcal[$key]['food_data']);
// }
// // dump($foot_kcal);
// // die;
// foreach ($foot_kcal as $key => $value) {
// $cfc->table('app_user_cookbook')->where(['id'=>$value['id']])->update(['food_data'=>$value['food_data']]);
// }
// dump($foot_kcal);
// die;
$sql = "SELECT father_id,count(*) as num FROM app_z_national_standard_food_type_4 GROUP BY father_id ORDER BY num DESC";
$result = $cfc->query($sql);
$aa = [];
foreach ($result as $key => $value) {
if($value['num'] >= 30){
$aa[] = $value['father_id'];
}
}
$bb = implode("','",$aa);
$sql2 = "SELECT id,father_id FROM app_z_national_standard_food_type_4 WHERE father_id IN ('".$bb."')";
$result2 = $cfc->query($sql2);
$cc = [];
foreach ($result2 as $key => $value) {
if (array_key_exists($value['father_id'], $cc)) {
// 基本用法
if (!in_array($value['id'], $cc[$value['father_id']])) {
$cc[$value['father_id']][] = $value['id'];
}
} else {
$cc[$value['father_id']] = [$value['id']];
}
}
$toDeleteStructured = [];
foreach ($cc as $key => $value) {
// 每个数组有58个元素后29个是需要删除的
$deletePart = array_slice($value, 29, 29);
$toDeleteStructured[$key] = $deletePart;
// $toDeleteStructured[$key] = count($deletePart);
}
foreach ($toDeleteStructured as $key => $value) {
$zz = implode("','",$value);
$result3 = $cfc->table('app_z_national_standard_food_type_4')
->where("id in ('".$zz."')")
->update(['is_del'=>1]);
dump($key);
dump($result3);
// $sql3 = "UPDATE app_z_national_standard_food_type_4 SET is_del = 1 WHERE id IN (".$zz.")";
// $result3 = $cfc->query($sql3);
}
// foreach ($toDeleteStructured as $key => $value) {
// foreach ($value as $k => $v) {
// $dd[] = $v;
// }
// }
// $zz = implode(",",$dd);
// $sql3 = "UPDATE app_z_national_standard_food_type_4 SET is_del = 1 WHERE id IN (".$zz.")";
// $result3 = $cfc->query($sql3);
// dump($result3);
// dump($toDeleteStructured);
}
}