Files
2026-09-14 16:32:07 +08:00

230 lines
6.2 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Breeding extends ApiController
{
function __construct()
{
header('Access-Control-Allow-Credentials: true');
parent::__construct();
//跨域
$this->load->library('session');
$this->load->model('customer_model');
//$this->session->{Customer_model::SESSION_KEY} = 1;
$this->checkUser();
}
//获取繁育人信息
public function info_get(){
$row = $this->customer_model->get($this->_user_id);
//统计数量
$this->load->model('sample_model');
$this->load->model('breeding_plan_model');
$row['total_sample'] = $this->sample_model->getUserTotal($this->_user_id);
$row['total_breeding_plan'] = $this->breeding_plan_model->getUserTotal($this->_user_id);
$this->success($row);
}
//获取种猫/犬
public function candidate_post(){
$this->load->model('sample_model');
$this->load->model('report_model');
$data = $this->json_input();
$ids = [];
if(!empty($data['tree']) && is_array($data['tree'])){
$ids = $this->_getTreeSampleIds($data['tree']);
}
$pet_sex = empty($data['pet_sex'])?0:(int)$data['pet_sex'];
$pet_species = empty($data['pet_species'])?0:(int)$data['pet_species'];
$list = $this->sample_model->getBreeding($this->_user_id,$ids,$pet_species,$pet_sex,100);
$ret = [];
foreach ($list as $val) {
$reportJson = $this->report_model->get_report_json($val['device_id'],$val['pet_species']);
$ret[] = $this->_getCandidateItem($val,$reportJson);
}
$this->success($ret);
}
//繁育计划保存
public function plan_save_post()
{
$data = $this->json_input();
if(empty($data['tree'])){
$this->error('参数不完整');
}
$tree = $data['tree'];
//保存孩子的样本id
$children_ids = [];
foreach ($tree['children'] as $item) {
if(!empty($item['id'])){
$children_ids[] = $item['id'];
}
}
//雌性
$female_id = !empty($tree['female']['self']['id'])?(int)$tree['female']['self']['id']:0;
$female_father_id = !empty($tree['female']['father']['id'])?(int)$tree['female']['father']['id']:0;
$female_mother_id = !empty($tree['female']['mother']['id'])?(int)$tree['female']['mother']['id']:0;
//雄性
$male_id = !empty($tree['male']['self']['id'])?(int)$tree['male']['self']['id']:0;
$male_father_id = !empty($tree['male']['father']['id'])?(int)$tree['male']['father']['id']:0;
$male_mother_id = !empty($tree['male']['mother']['id'])?(int)$tree['male']['mother']['id']:0;
if(empty($female_id) || empty($male_id)){
$this->error('关系不完整');
}
$this->load->model('breeding_plan_model');
$entity = [
'children_ids' => implode(',',$children_ids),
'user_id' => $this->_user_id,
'female_id' => $female_id,
'female_father_id' => $female_father_id,
'female_mother_id' => $female_mother_id,
'male_id' => $male_id,
'male_father_id' => $male_father_id,
'male_mother_id' => $male_mother_id,
];
if(empty($data['id'])){
$this->breeding_plan_model->add($entity);
}else{
$this->breeding_plan_model->update($entity,[
'id'=>$data['id']
]);
}
$this->success('保存成功');
}
//繁育计划列表
public function list_get()
{
$this->load->model('breeding_plan_model');
$ret = $this->breeding_plan_model->get($this->_user_id,'user_id',true);
$list = [];
if($ret){
//获取所有相关样品
$sample_ids = [];
foreach ($ret as $item) {
$sample_ids[] = $item['male_id'];
$sample_ids[] = $item['female_id'];
}
$this->load->model('sample_model');
//根据id获取样本信息
$samples = $this->sample_model->getByUserIds($sample_ids);
$sample_map = [];
foreach ($samples as $item) {
$this->sample_model->format($item);
$sample_map[$item['id']] = $item;
}
//格式化信息
foreach ($ret as $item) {
$male = [
'name'=>$sample_map[$item['male_id']]['pet_name'],
'pet_img'=>$sample_map[$item['male_id']]['pet_img'],
'device_id'=>$sample_map[$item['male_id']]['device_id'],
];
$female = [
'name'=>$sample_map[$item['female_id']]['pet_name'],
'pet_img'=>$sample_map[$item['female_id']]['pet_img'],
'device_id'=>$sample_map[$item['female_id']]['device_id'],
];
$tmp = [
'id'=>$item['id'],
'male'=>$male,
'female'=>$female,
];
$list[] = $tmp;
}
}
$this->success($list);
}
//繁育计划列表
public function detail_get()
{
$id = $this->input->get('id');
if(empty($id)){
$this->error('参数错误');
}
$this->load->model('breeding_plan_model');
$plan = $this->breeding_plan_model->get($id);
if(!$plan){
$this->error('计划不存在');
}
$tree = [
'male'=>[
'father'=>$this->_getNode($plan['male_father_id']),
'mother'=>$this->_getNode($plan['male_mother_id']),
'self'=>$this->_getNode($plan['male_id']),
],
'female'=>[
'father'=>$this->_getNode($plan['female_father_id']),
'mother'=>$this->_getNode($plan['female_mother_id']),
'self'=>$this->_getNode($plan['female_id']),
],
'children'=>[]
];
if(!empty($plan['children_ids'])){
$plan['children_ids'] = explode(',',$plan['children_ids']);
foreach ($plan['children_ids'] as $val) {
$tree['children'][] = $this->_getNode($val);
}
}
//如果没有children,补一个
if(empty($tree['children'])){
$tree['children'][] = [
'id'=>0,
'pet_name'=>'',
'pet_img'=>'',
];
}
$this->success($tree);
}
//繁育计划节点
protected function _getNode($sample_id)
{
$this->load->model('sample_model');
$sample = $this->sample_model->get($sample_id);
if(!$sample){
return [
'id'=>0
];
}
return $sample;
}
//繁育计划候选列表项目
protected function _getCandidateItem($sample,$reportJson)
{
$lineage = !empty($reportJson['血统分析']['body']['品系纯度'])?$reportJson['血统分析']['body']['品系纯度']:[];
$lineage = implode(',',array_keys($lineage));
$item = [
'id'=>$sample['id'],
'pet_name'=>$sample['pet_name'],
'pet_img'=>$sample['pet_img'],
'pet_sex'=>$sample['pet_sex'],
'lineage'=>$lineage,
];
return $item;
}
//繁育计划树的所有id
protected function _getTreeSampleIds($tree)
{
$ids = [];
foreach ($tree as $key=>$val) {
foreach ($val as $v) {
$ids[] = $v['id'];
}
}
return array_filter(array_unique($ids));
}
}