813 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			813 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace app\api\controller\backend;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use app\common\controller\Api;
							 | 
						|||
| 
								 | 
							
								use app\api\model\Admin as AdminModel;
							 | 
						|||
| 
								 | 
							
								use think\Db;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/**
							 | 
						|||
| 
								 | 
							
								 * 月度控制器
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								class Monthly extends Api
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    protected $noNeedLogin = ['*'];
							 | 
						|||
| 
								 | 
							
								    protected $noNeedRight = ['*'];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public function getEvaluation()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $id = $this->request->header('Token');
							 | 
						|||
| 
								 | 
							
								        if(!$id){
							 | 
						|||
| 
								 | 
							
								            return $this->error('缺少参数');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $group_id = Db::name('user')->where('token', $id)->value('group_id');
							 | 
						|||
| 
								 | 
							
								        if(!$group_id){
							 | 
						|||
| 
								 | 
							
								            return $this->error('未查询到该用户科室');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $data = Db::name('evaluation_schedule')->where('evaluation_type', 3)->select(); 
							 | 
						|||
| 
								 | 
							
								        // 初始化结果数组
							 | 
						|||
| 
								 | 
							
								        $result = [];
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 遍历获取的数据
							 | 
						|||
| 
								 | 
							
								        foreach ($data as $key => $value) {
							 | 
						|||
| 
								 | 
							
								            // 获取当前记录的 user_group_id 字段
							 | 
						|||
| 
								 | 
							
								            $userGroupId = $value['user_group_id'];
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            // 检查传入的 user_id 是否存在于 user_group_id 中
							 | 
						|||
| 
								 | 
							
								            if (in_array($group_id, explode(',', $userGroupId))) {
							 | 
						|||
| 
								 | 
							
								                // 如果存在,将该记录添加到结果数组中
							 | 
						|||
| 
								 | 
							
								                $result[] = $value;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        if($result){
							 | 
						|||
| 
								 | 
							
								            return $this->success('返回成功', $result);
							 | 
						|||
| 
								 | 
							
								        }else {
							 | 
						|||
| 
								 | 
							
								            return $this->error('未找到相关记录');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 首页
							 | 
						|||
| 
								 | 
							
								     *
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function getMonthlyData()
							 | 
						|||
| 
								 | 
							
								    {   
							 | 
						|||
| 
								 | 
							
								        $token = $this->request->header('Token');
							 | 
						|||
| 
								 | 
							
								        $evaluation_id = $this->request->post('id');
							 | 
						|||
| 
								 | 
							
								        $time = $this->request->post('time', date('Y'));
							 | 
						|||
| 
								 | 
							
								        if(!$token){
							 | 
						|||
| 
								 | 
							
								            return $this->error('缺少参数');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        if(!$time){
							 | 
						|||
| 
								 | 
							
								            return $this->error('暂无数据');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $id = Db::name('user')->where('token', $token)->value('id');
							 | 
						|||
| 
								 | 
							
								       
							 | 
						|||
| 
								 | 
							
								        // 从数据库中获取计划
							 | 
						|||
| 
								 | 
							
								        $data = Db::name('evaluation_schedule')->where('id', $evaluation_id)->find();
							 | 
						|||
| 
								 | 
							
								        if (!$data) {
							 | 
						|||
| 
								 | 
							
								            return $this->error('暂无数据');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        if($time == date('Y')){
							 | 
						|||
| 
								 | 
							
								            $currentMonth = date('Y-m');
							 | 
						|||
| 
								 | 
							
								            $createtime =  $time . '-01';
							 | 
						|||
| 
								 | 
							
								        }else{
							 | 
						|||
| 
								 | 
							
								            $createtime = $time. '-01';
							 | 
						|||
| 
								 | 
							
								            $currentMonth =  $time. '-12';
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 初始化月份数组
							 | 
						|||
| 
								 | 
							
								        $periods = [];
							 | 
						|||
| 
								 | 
							
								        $startMonth = date('Y-m', strtotime($createtime));
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        while ($startMonth <= $currentMonth) {
							 | 
						|||
| 
								 | 
							
								            $periods[] = $startMonth;
							 | 
						|||
| 
								 | 
							
								            $startMonth = date('Y-m', strtotime("+1 month", strtotime($startMonth)));
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								       
							 | 
						|||
| 
								 | 
							
								        // 获取月度的评分记录
							 | 
						|||
| 
								 | 
							
								        $scoringrecord = Db::name('scoringrecord')->where('scoring_period', 3)->where('evaluation_schedule_id',$evaluation_id)->where('user_id', $id)->select();
							 | 
						|||
| 
								 | 
							
								        // 整理评分记录,以月份为键
							 | 
						|||
| 
								 | 
							
								        $scoringMonths = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($scoringrecord as $record) {
							 | 
						|||
| 
								 | 
							
								            $recordMonth = date('Y-m', strtotime($record['term']));
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            if (!isset($scoringMonths[$recordMonth])) {
							 | 
						|||
| 
								 | 
							
								                $scoringMonths[$recordMonth] = [
							 | 
						|||
| 
								 | 
							
								                    'plus_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'minus_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'self_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'department_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'hospital_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'createtime' => $record['createtime'],
							 | 
						|||
| 
								 | 
							
								                ];
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								           
							 | 
						|||
| 
								 | 
							
								            // 假设加减分通过 `value` 字段的正负来判断
							 | 
						|||
| 
								 | 
							
								            if ($record['value'] > 0) {
							 | 
						|||
| 
								 | 
							
								                $scoringMonths[$recordMonth]['plus_score'] += $record['value'];
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                $scoringMonths[$recordMonth]['minus_score'] += $record['value'];
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								            $scoringMonths[$recordMonth]['self_score'] += $record['self_score'];
							 | 
						|||
| 
								 | 
							
								            $scoringMonths[$recordMonth]['department_score'] += $record['department_score'];
							 | 
						|||
| 
								 | 
							
								            $scoringMonths[$recordMonth]['hospital_score'] += $record['hospital_score'];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $user =  Db::name('user')->where('id', $id)->find();
							 | 
						|||
| 
								 | 
							
								        if(!$user){
							 | 
						|||
| 
								 | 
							
								            return $this->error('未查到该用户');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // 对比并输出结果
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        $result = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($periods as $month) {
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            if (isset($scoringMonths[$month])) {
							 | 
						|||
| 
								 | 
							
								                // return $this->error('未查到该用户',$scoringMonths);
							 | 
						|||
| 
								 | 
							
								                if($month != date('Y-m')){
							 | 
						|||
| 
								 | 
							
								                    $if_month = 1;
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    $if_month = 2;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                if($scoringMonths[$month]['self_score']){
							 | 
						|||
| 
								 | 
							
								                    $if_month = 1;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                $result[] = [
							 | 
						|||
| 
								 | 
							
								                    'month' => $month,
							 | 
						|||
| 
								 | 
							
								                    'user' => $user['nickname'],
							 | 
						|||
| 
								 | 
							
								                    'currentMonth' => $currentMonth,
							 | 
						|||
| 
								 | 
							
								                    'plus_score' => $scoringMonths[$month]['plus_score'],
							 | 
						|||
| 
								 | 
							
								                    'minus_score' => $scoringMonths[$month]['minus_score'],
							 | 
						|||
| 
								 | 
							
								                    'self_score' => $scoringMonths[$month]['self_score'],
							 | 
						|||
| 
								 | 
							
								                    'department_score' => $scoringMonths[$month]['department_score'],
							 | 
						|||
| 
								 | 
							
								                    'hospital_score' => $scoringMonths[$month]['hospital_score'],
							 | 
						|||
| 
								 | 
							
								                    'if' => 2,
							 | 
						|||
| 
								 | 
							
								                    'if_month' => $if_month,
							 | 
						|||
| 
								 | 
							
								                    'createtime' => $scoringMonths[$month]['createtime'],
							 | 
						|||
| 
								 | 
							
								                ];
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                if($month != date('Y-m')){
							 | 
						|||
| 
								 | 
							
								                    $if_month = 1;
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    $if_month = 2;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                $result[] = [
							 | 
						|||
| 
								 | 
							
								                    'month' => $month,
							 | 
						|||
| 
								 | 
							
								                    'user' => $user['nickname'],
							 | 
						|||
| 
								 | 
							
								                    'currentMonth' => $currentMonth,
							 | 
						|||
| 
								 | 
							
								                    'plus_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'minus_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'self_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'department_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'hospital_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'if' => 1, 
							 | 
						|||
| 
								 | 
							
								                    'if_month' => $if_month,
							 | 
						|||
| 
								 | 
							
								                    'createtime' => null,
							 | 
						|||
| 
								 | 
							
								                ];
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        // 返回结果
							 | 
						|||
| 
								 | 
							
								        $sortedResult = $this->sortByMonthDescending($result);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        return $this->success('请求成功',$sortedResult);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    public function sortByMonthDescending($array) {
							 | 
						|||
| 
								 | 
							
								        // 使用 usort 函数对数组进行排序
							 | 
						|||
| 
								 | 
							
								        usort($array, function ($a, $b) {
							 | 
						|||
| 
								 | 
							
								            // 将 month 字段转换为时间戳以便比较
							 | 
						|||
| 
								 | 
							
								            $timeA = strtotime($a['month']);
							 | 
						|||
| 
								 | 
							
								            $timeB = strtotime($b['month']);
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            // 按时间戳降序排列
							 | 
						|||
| 
								 | 
							
								            return $timeB - $timeA;
							 | 
						|||
| 
								 | 
							
								        });
							 | 
						|||
| 
								 | 
							
								     
							 | 
						|||
| 
								 | 
							
								        return $array;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     *添加数据
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function create()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        // 获取 JSON 数据(假设通过 POST 请求传入)
							 | 
						|||
| 
								 | 
							
								        $jsonData = htmlspecialchars_decode($this->request->post('json'));
							 | 
						|||
| 
								 | 
							
								        // $jsonData = htmlspecialchars_decode($_POST['json']);
							 | 
						|||
| 
								 | 
							
								        // var_dump($jsonData);die();
							 | 
						|||
| 
								 | 
							
								        $user_id = $this->request->post('user_id');
							 | 
						|||
| 
								 | 
							
								        $evaluation_schedule_id = $this->request->post('evaluation_schedule_id');
							 | 
						|||
| 
								 | 
							
								        // 将 JSON 解码为 PHP 数组
							 | 
						|||
| 
								 | 
							
								        $dataArray = json_decode($jsonData, true);
							 | 
						|||
| 
								 | 
							
								        if (!$dataArray) {
							 | 
						|||
| 
								 | 
							
								            return $this->error('JSON 数据解析失败');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        if(!$user_id){
							 | 
						|||
| 
								 | 
							
								            return $this->error('缺少参数');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $user = Db::name('user')->where('id', $user_id)->find();
							 | 
						|||
| 
								 | 
							
								        if(!$user){
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $if = Db::name('scoringrecord')->where('term', date('Y-m'))
							 | 
						|||
| 
								 | 
							
								                                        ->where('user_id',$user['id'])
							 | 
						|||
| 
								 | 
							
								                                        ->where('type', 1)
							 | 
						|||
| 
								 | 
							
								                                        ->where('scoring_period', 3)
							 | 
						|||
| 
								 | 
							
								                                        ->where('evaluation_schedule_id', $evaluation_schedule_id)
							 | 
						|||
| 
								 | 
							
								                                        ->select();
							 | 
						|||
| 
								 | 
							
								        if($if){
							 | 
						|||
| 
								 | 
							
								            return $this->error('该月份已提交,请勿重复提交');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // 准备要插入的数据
							 | 
						|||
| 
								 | 
							
								        $insertData = [];
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 遍历父项目
							 | 
						|||
| 
								 | 
							
								        foreach ($dataArray as $parent) {
							 | 
						|||
| 
								 | 
							
								            // 父项目信息
							 | 
						|||
| 
								 | 
							
								            $parentId = $parent['id'];
							 | 
						|||
| 
								 | 
							
								            $parentName = $parent['project_name'];
							 | 
						|||
| 
								 | 
							
								            $parentBaseScore = $parent['base_score'];
							 | 
						|||
| 
								 | 
							
								            // return $this->success('数据插入成功111', $parent);
							 | 
						|||
| 
								 | 
							
								            // 遍历子项目
							 | 
						|||
| 
								 | 
							
								            if (isset($parent['children']) && is_array($parent['children'])) {
							 | 
						|||
| 
								 | 
							
								                foreach ($parent['children'] as $child) {
							 | 
						|||
| 
								 | 
							
								                   
							 | 
						|||
| 
								 | 
							
								                    $insertData[] = [
							 | 
						|||
| 
								 | 
							
								                        'user_id' => $user['id'], // 示例:可以根据实际需求分配用户ID
							 | 
						|||
| 
								 | 
							
								                        'group_id' => $user['group_id'], // 示例:部门ID
							 | 
						|||
| 
								 | 
							
								                        'basic_id' => $child['id'], 
							 | 
						|||
| 
								 | 
							
								                        'evaluation_schedule_id' => $evaluation_schedule_id, 
							 | 
						|||
| 
								 | 
							
								                        'plus_id' => null, 
							 | 
						|||
| 
								 | 
							
								                        'self_score' => $child['content_score'], // 子项目的 content_score
							 | 
						|||
| 
								 | 
							
								                        'department_score' => null, // 需要手动评分时可以设为 NULL
							 | 
						|||
| 
								 | 
							
								                        'party_branch_score' => null,
							 | 
						|||
| 
								 | 
							
								                        'hospital_score' => null,
							 | 
						|||
| 
								 | 
							
								                        'scoring_period' => 3, // 评分类型
							 | 
						|||
| 
								 | 
							
								                        'term' => date('Y-m'), // 届数
							 | 
						|||
| 
								 | 
							
								                        'status' => 1, // 默认状态
							 | 
						|||
| 
								 | 
							
								                        'type' => 1, // 类型:1为自提
							 | 
						|||
| 
								 | 
							
								                        'value' => null, // 基础分值
							 | 
						|||
| 
								 | 
							
								                        'createtime' => date('Y-m-d H:i:s'), // 当前时间戳
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    ];
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								       
							 | 
						|||
| 
								 | 
							
								        // 插入数据到数据库
							 | 
						|||
| 
								 | 
							
								        if (!empty($insertData)) {
							 | 
						|||
| 
								 | 
							
								            $result = Db::name('scoringrecord')->strict(false)->insertAll($insertData);
							 | 
						|||
| 
								 | 
							
								            if ($result) {
							 | 
						|||
| 
								 | 
							
								                return $this->success('数据插入成功', $result);
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                return $this->error('数据插入失败');
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            return $this->error('没有可插入的数据');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public function getMonthly(){
							 | 
						|||
| 
								 | 
							
								        $id = $this->request->post('id');
							 | 
						|||
| 
								 | 
							
								        if(!$id){
							 | 
						|||
| 
								 | 
							
								            return $this->error('参数错误');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $ids =  Db::name('evaluation_schedule')->where('id', $id)->find();
							 | 
						|||
| 
								 | 
							
								        if(!$ids){
							 | 
						|||
| 
								 | 
							
								            return $this->error('未查询到相关计划');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // 从 schedule 中获取 basic_rating_id 字段
							 | 
						|||
| 
								 | 
							
								        $basicRatingIds = $ids['basic_rating_id'];
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 将 basic_rating_id 字符串转换为数组
							 | 
						|||
| 
								 | 
							
								        $basicRatingIdArray = explode(',', $basicRatingIds);
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 查询 basic_rating_table 表中 id 在 basic_rating_id 数组中的记录
							 | 
						|||
| 
								 | 
							
								        $data = Db::name('basic_rating_table')
							 | 
						|||
| 
								 | 
							
								            ->whereIn('id', $basicRatingIdArray)
							 | 
						|||
| 
								 | 
							
								            ->select();
							 | 
						|||
| 
								 | 
							
								        // 构建层级结构
							 | 
						|||
| 
								 | 
							
								        $tree = $this->buildTree($data);
							 | 
						|||
| 
								 | 
							
								        return $this->success('请求成功',$tree);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public function getMonthlyFind(){
							 | 
						|||
| 
								 | 
							
								        $user_id = $this->request->post('user_id');
							 | 
						|||
| 
								 | 
							
								        $month = $this->request->post('month');
							 | 
						|||
| 
								 | 
							
								        $evaluation_schedule_id = $this->request->post('evaluation_schedule_id');
							 | 
						|||
| 
								 | 
							
								        $where = [
							 | 
						|||
| 
								 | 
							
								            'user_id' => $user_id,
							 | 
						|||
| 
								 | 
							
								            'term' => $month,
							 | 
						|||
| 
								 | 
							
								            'scoring_period' => 3,
							 | 
						|||
| 
								 | 
							
								            'evaluation_schedule_id' => $evaluation_schedule_id,
							 | 
						|||
| 
								 | 
							
								        ];
							 | 
						|||
| 
								 | 
							
								        $ids = Db::name('evaluation_schedule')->where('id', $evaluation_schedule_id)->find();
							 | 
						|||
| 
								 | 
							
								        if(!$ids){
							 | 
						|||
| 
								 | 
							
								            return $this->error('未查询到相关计划');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // 从 schedule 中获取 basic_rating_id 字段
							 | 
						|||
| 
								 | 
							
								        $basicRatingIds = $ids['basic_rating_id'];
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 将 basic_rating_id 字符串转换为数组
							 | 
						|||
| 
								 | 
							
								        $basicRatingIdArray = explode(',', $basicRatingIds);
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 查询 basic_rating_table 表中 id 在 basic_rating_id 数组中的记录
							 | 
						|||
| 
								 | 
							
								        $data = Db::name('basic_rating_table')
							 | 
						|||
| 
								 | 
							
								            ->whereIn('id', $basicRatingIdArray)
							 | 
						|||
| 
								 | 
							
								            ->select();
							 | 
						|||
| 
								 | 
							
								        $scoringrecord = Db::name('scoringrecord')
							 | 
						|||
| 
								 | 
							
								                ->where($where)
							 | 
						|||
| 
								 | 
							
								                ->select();
							 | 
						|||
| 
								 | 
							
								        $scoringrecordMap = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($scoringrecord as $record) {
							 | 
						|||
| 
								 | 
							
								            $scoringrecordMap[$record['basic_id']] = $record;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        foreach ($data as &$item) {
							 | 
						|||
| 
								 | 
							
								            if (isset($scoringrecordMap[$item['id']])) {
							 | 
						|||
| 
								 | 
							
								                $item['self_score'] = $scoringrecordMap[$item['id']]['self_score'];
							 | 
						|||
| 
								 | 
							
								                $item['content_score'] = $scoringrecordMap[$item['id']]['self_score'];
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                $item['self_score'] = null; // 或者其他适当的默认值
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // 构建层级结构
							 | 
						|||
| 
								 | 
							
								        $tree = $this->buildTreetwo($data);
							 | 
						|||
| 
								 | 
							
								        return $this->success('请求成功',$tree);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    private function buildTree(array $data, $parentId = 0)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $tree = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($data as $item) {
							 | 
						|||
| 
								 | 
							
								            if ($item['pid'] == $parentId) {
							 | 
						|||
| 
								 | 
							
								                // 添加 content_score 并设置其值与 base_score 相同
							 | 
						|||
| 
								 | 
							
								                if (isset($item['base_score'])) {
							 | 
						|||
| 
								 | 
							
								                    $item['content_score'] = 0;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                
							 | 
						|||
| 
								 | 
							
								                $children = $this->buildTree($data, $item['id']);
							 | 
						|||
| 
								 | 
							
								                if ($children) {
							 | 
						|||
| 
								 | 
							
								                    $item['children'] = $children;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                
							 | 
						|||
| 
								 | 
							
								                $tree[] = $item;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $tree;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    private function buildTreetwo(array $data, $parentId = 0)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $tree = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($data as $item) {
							 | 
						|||
| 
								 | 
							
								            if ($item['pid'] == $parentId) {
							 | 
						|||
| 
								 | 
							
								                $children = $this->buildTreetwo($data, $item['id']);
							 | 
						|||
| 
								 | 
							
								                if ($children) {
							 | 
						|||
| 
								 | 
							
								                    $item['children'] = $children;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                
							 | 
						|||
| 
								 | 
							
								                $tree[] = $item;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return $tree;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public function getUserGroup(){
							 | 
						|||
| 
								 | 
							
								        $token = $this->request->header('token');
							 | 
						|||
| 
								 | 
							
								        if (!$token) {
							 | 
						|||
| 
								 | 
							
								            return $this->error('参数错误');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								        // 查找用户信息
							 | 
						|||
| 
								 | 
							
								        $user = Db::name('user')->where('token', $token)->find();
							 | 
						|||
| 
								 | 
							
								        if (!$user) {
							 | 
						|||
| 
								 | 
							
								            return $this->error('用户不存在');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								         
							 | 
						|||
| 
								 | 
							
								        $data = [];
							 | 
						|||
| 
								 | 
							
								        // 如果用户ID为1,查出所有组别
							 | 
						|||
| 
								 | 
							
								        if ($user['id'] == 237) {
							 | 
						|||
| 
								 | 
							
								            // 查询所有组别
							 | 
						|||
| 
								 | 
							
								            $data = Db::name('user_group')->select();
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            // 查找用户所在组别信息
							 | 
						|||
| 
								 | 
							
								            $group = Db::name('user_group')->where('id', $user['group_id'])->find();
							 | 
						|||
| 
								 | 
							
								            // return $this->success('查询成功', $user);
							 | 
						|||
| 
								 | 
							
								            if (!$group) {
							 | 
						|||
| 
								 | 
							
								                return $this->error('用户组别不存在');
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								            // 判断是否为父级
							 | 
						|||
| 
								 | 
							
								            if ($group['pid'] == 0) {
							 | 
						|||
| 
								 | 
							
								                // 如果是父级,查出父级以及子级
							 | 
						|||
| 
								 | 
							
								                $data[] = $group;
							 | 
						|||
| 
								 | 
							
								                $subGroups = Db::name('user_group')->where('pid', $group['id'])->select();
							 | 
						|||
| 
								 | 
							
								                foreach ($subGroups as $subGroup) {
							 | 
						|||
| 
								 | 
							
								                    $data[] = $subGroup;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                // 如果是子级,只查出子级
							 | 
						|||
| 
								 | 
							
								                $data[] = $group;
							 | 
						|||
| 
								 | 
							
								                return $this->success('查询成功', $data);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								        // 构建树状结构
							 | 
						|||
| 
								 | 
							
								        $tree = $this->buildTree($data);
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								        return $this->success('查询成功', $tree);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    //获取科室有多少考评时间项
							 | 
						|||
| 
								 | 
							
								    public function getGroupEvaluation(){
							 | 
						|||
| 
								 | 
							
								        // 获取请求中传入的科室ID
							 | 
						|||
| 
								 | 
							
								        $groupId = $this->request->post('group_id');
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 检查参数是否存在
							 | 
						|||
| 
								 | 
							
								        if (!$groupId) {
							 | 
						|||
| 
								 | 
							
								            return $this->error('参数错误');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								        // 查询指定科室的考评时间数据
							 | 
						|||
| 
								 | 
							
								        $allResults = Db::name('evaluation_schedule')
							 | 
						|||
| 
								 | 
							
								                ->where('evaluation_type', '=', '3')
							 | 
						|||
| 
								 | 
							
								                ->select();
							 | 
						|||
| 
								 | 
							
								                
							 | 
						|||
| 
								 | 
							
								       // 初始化过滤后的结果数组
							 | 
						|||
| 
								 | 
							
								       $filteredResults = [];
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								       // 循环判断每个记录的 user_group_id
							 | 
						|||
| 
								 | 
							
								       foreach ($allResults as $result) {
							 | 
						|||
| 
								 | 
							
								           $userGroupId = $result['user_group_id'];
							 | 
						|||
| 
								 | 
							
								           
							 | 
						|||
| 
								 | 
							
								           // 将 user_group_id 转换为数组
							 | 
						|||
| 
								 | 
							
								           $userGroupIdArray = explode(',', $userGroupId);
							 | 
						|||
| 
								 | 
							
								           
							 | 
						|||
| 
								 | 
							
								           // 使用 in_array 判断是否包含指定的 group_id
							 | 
						|||
| 
								 | 
							
								           if (in_array($groupId, $userGroupIdArray)) {
							 | 
						|||
| 
								 | 
							
								                array_push($filteredResults, $result);
							 | 
						|||
| 
								 | 
							
								            //    $filteredResults[] = $result;
							 | 
						|||
| 
								 | 
							
								           }
							 | 
						|||
| 
								 | 
							
								       }
							 | 
						|||
| 
								 | 
							
								        // 返回查询结果
							 | 
						|||
| 
								 | 
							
								        if ($filteredResults) {
							 | 
						|||
| 
								 | 
							
								            return $this->success('查询成功', $filteredResults);
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            return $this->error('未找到相关数据');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }   
							 | 
						|||
| 
								 | 
							
								    public function getUserList(){
							 | 
						|||
| 
								 | 
							
								        $groupId = $this->request->post('group_id');
							 | 
						|||
| 
								 | 
							
								        $user_id = $this->request->post('user_id');
							 | 
						|||
| 
								 | 
							
								        $time = $this->request->post('time',date('Y-m'));
							 | 
						|||
| 
								 | 
							
								        $evaluation_schedule_id = $this->request->post('evaluation_schedule_id');  
							 | 
						|||
| 
								 | 
							
								        $page = $this->request->post('page',1);
							 | 
						|||
| 
								 | 
							
								        $size = $this->request->post('size',10);
							 | 
						|||
| 
								 | 
							
								        $where = [];
							 | 
						|||
| 
								 | 
							
								        if(!$groupId){
							 | 
						|||
| 
								 | 
							
								            return $this->error('参数错误');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        if($user_id){
							 | 
						|||
| 
								 | 
							
								            $where['id'] = $user_id;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $where['group_id'] = $groupId;
							 | 
						|||
| 
								 | 
							
								        //  return $this->success('查询成功', $where);
							 | 
						|||
| 
								 | 
							
								        $result = Db::name('user')
							 | 
						|||
| 
								 | 
							
								                ->where($where)
							 | 
						|||
| 
								 | 
							
								                ->page($page,$size)
							 | 
						|||
| 
								 | 
							
								                ->select();
							 | 
						|||
| 
								 | 
							
								        $count = Db::name('user')
							 | 
						|||
| 
								 | 
							
								                ->where($where)
							 | 
						|||
| 
								 | 
							
								                ->count();
							 | 
						|||
| 
								 | 
							
								        // $time = date('Y-m');
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        foreach ($result as $key => $value) {
							 | 
						|||
| 
								 | 
							
								            $result[$key]['group_name'] = Db::name('user_group')->where('id', $value['group_id'])->value('name');
							 | 
						|||
| 
								 | 
							
								            $result[$key]['user_scoringrecord'] = Db::name('scoringrecord')->where('user_id', $value['id'])->where('term', $time)->where('evaluation_schedule_id',$evaluation_schedule_id)->sum('self_score');
							 | 
						|||
| 
								 | 
							
								            $result[$key]['department_score_scoringrecord'] = Db::name('scoringrecord')->where('user_id', $value['id'])->where('term', $time)->where('evaluation_schedule_id',$evaluation_schedule_id)->sum('department_score');
							 | 
						|||
| 
								 | 
							
								            $result[$key]['hospital_score_scoringrecord'] = Db::name('scoringrecord')->where('user_id', $value['id'])->where('term', $time)->where('evaluation_schedule_id',$evaluation_schedule_id)->sum('hospital_score');
							 | 
						|||
| 
								 | 
							
								            $result[$key]['time'] = $time;
							 | 
						|||
| 
								 | 
							
								            $result[$key]['zongjiafen'] = 0;
							 | 
						|||
| 
								 | 
							
								            $result[$key]['scoringrecord_status'] = '1';
							 | 
						|||
| 
								 | 
							
								            if($result[$key]['user_scoringrecord'] == 0){
							 | 
						|||
| 
								 | 
							
								                $result[$key]['scoringrecord_status'] = '2';
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								             if($result[$key]['department_score_scoringrecord'] != 0){
							 | 
						|||
| 
								 | 
							
								                $result[$key]['scoringrecord_status'] = '3';
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            if($result[$key]['hospital_score_scoringrecord'] != 0){
							 | 
						|||
| 
								 | 
							
								                $result[$key]['scoringrecord_status'] = '4';
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $data = [
							 | 
						|||
| 
								 | 
							
								                'result' => $result,
							 | 
						|||
| 
								 | 
							
								                'count' => $count,
							 | 
						|||
| 
								 | 
							
								        ];
							 | 
						|||
| 
								 | 
							
								        return $this->success('查询成功', $data);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public function getMonthlyListFind(){
							 | 
						|||
| 
								 | 
							
								        $user_id = $this->request->post('user_id');
							 | 
						|||
| 
								 | 
							
								        $month = $this->request->post('month');
							 | 
						|||
| 
								 | 
							
								        $evaluation_schedule_id = $this->request->post('evaluation_schedule_id');
							 | 
						|||
| 
								 | 
							
								        $where = [
							 | 
						|||
| 
								 | 
							
								            'user_id' => $user_id,
							 | 
						|||
| 
								 | 
							
								            'term' => $month,
							 | 
						|||
| 
								 | 
							
								            'scoring_period' => 3,
							 | 
						|||
| 
								 | 
							
								            'evaluation_schedule_id' => $evaluation_schedule_id,
							 | 
						|||
| 
								 | 
							
								        ];
							 | 
						|||
| 
								 | 
							
								        $ids = Db::name('evaluation_schedule')->where('id', $evaluation_schedule_id)->find();
							 | 
						|||
| 
								 | 
							
								        if(!$ids){
							 | 
						|||
| 
								 | 
							
								            return $this->error('未查询到相关计划');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // 从 schedule 中获取 basic_rating_id 字段
							 | 
						|||
| 
								 | 
							
								        $basicRatingIds = $ids['basic_rating_id'];
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 将 basic_rating_id 字符串转换为数组
							 | 
						|||
| 
								 | 
							
								        $basicRatingIdArray = explode(',', $basicRatingIds);
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 查询 basic_rating_table 表中 id 在 basic_rating_id 数组中的记录
							 | 
						|||
| 
								 | 
							
								        $data = Db::name('basic_rating_table')
							 | 
						|||
| 
								 | 
							
								            ->whereIn('id', $basicRatingIdArray)
							 | 
						|||
| 
								 | 
							
								            ->select();
							 | 
						|||
| 
								 | 
							
								        $scoringrecord = Db::name('scoringrecord')
							 | 
						|||
| 
								 | 
							
								                ->where($where)
							 | 
						|||
| 
								 | 
							
								                ->select();
							 | 
						|||
| 
								 | 
							
								        $scoringrecordMap = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($scoringrecord as $record) {
							 | 
						|||
| 
								 | 
							
								            $scoringrecordMap[$record['basic_id']] = $record;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        foreach ($data as &$item) {
							 | 
						|||
| 
								 | 
							
								            if (isset($scoringrecordMap[$item['id']])) {
							 | 
						|||
| 
								 | 
							
								                $item['self_score'] = $scoringrecordMap[$item['id']]['self_score'];
							 | 
						|||
| 
								 | 
							
								                $item['content_score'] = $scoringrecordMap[$item['id']]['self_score'];
							 | 
						|||
| 
								 | 
							
								                $item['department_score'] = $scoringrecordMap[$item['id']]['department_score'];
							 | 
						|||
| 
								 | 
							
								                $item['hospital_score'] = $scoringrecordMap[$item['id']]['hospital_score'];
							 | 
						|||
| 
								 | 
							
								                if(!$item['department_score']){
							 | 
						|||
| 
								 | 
							
								                    $item['department_score'] = 0;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                if(!$item['hospital_score']){
							 | 
						|||
| 
								 | 
							
								                    $item['hospital_score'] = 0;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                $item['self_score'] = null; // 或者其他适当的默认值
							 | 
						|||
| 
								 | 
							
								                $item['department_score'] = 0;
							 | 
						|||
| 
								 | 
							
								                $item['hospital_score'] = 0;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // 构建层级结构
							 | 
						|||
| 
								 | 
							
								        $tree = $this->buildTreetwo($data);
							 | 
						|||
| 
								 | 
							
								        return $this->success('请求成功',$tree);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    public function getMonthlyListUpdate() {
							 | 
						|||
| 
								 | 
							
								        // 获取 JSON 数据(假设通过 POST 请求传入)
							 | 
						|||
| 
								 | 
							
								    $jsonData = htmlspecialchars_decode($this->request->post('json'));
							 | 
						|||
| 
								 | 
							
								    $user_id = $this->request->post('user_id');
							 | 
						|||
| 
								 | 
							
								    $evaluation_schedule_id = $this->request->post('evaluation_schedule_id');
							 | 
						|||
| 
								 | 
							
								    $term = $this->request->post('term',date('Y-m'));
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								    // 将 JSON 解码为 PHP 数组
							 | 
						|||
| 
								 | 
							
								    $dataArray = json_decode($jsonData, true);
							 | 
						|||
| 
								 | 
							
								    // return $this->success('json', $dataArray);
							 | 
						|||
| 
								 | 
							
								    if (!$dataArray) {
							 | 
						|||
| 
								 | 
							
								        return $this->error('JSON 数据解析失败');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    if (!$user_id) {
							 | 
						|||
| 
								 | 
							
								        return $this->error('缺少参数');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    // 查询用户是否存在
							 | 
						|||
| 
								 | 
							
								        $user = Db::name('user')->where('id', $user_id)->find();
							 | 
						|||
| 
								 | 
							
								        if (!$user) {
							 | 
						|||
| 
								 | 
							
								            return $this->error('用户不存在');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 检查该用户在该月份和评分周期是否已有记录
							 | 
						|||
| 
								 | 
							
								        $existingRecords = Db::name('scoringrecord')
							 | 
						|||
| 
								 | 
							
								            ->where('term', $term)
							 | 
						|||
| 
								 | 
							
								            ->where('user_id', $user['id'])
							 | 
						|||
| 
								 | 
							
								            ->where('type', 1)
							 | 
						|||
| 
								 | 
							
								            ->where('scoring_period', 3)
							 | 
						|||
| 
								 | 
							
								            ->where('evaluation_schedule_id', $evaluation_schedule_id)
							 | 
						|||
| 
								 | 
							
								            ->select();
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        if (empty($existingRecords)) {
							 | 
						|||
| 
								 | 
							
								            return $this->error('未找到该月份的记录,无法更新');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 准备更新的数据
							 | 
						|||
| 
								 | 
							
								        $updateData = [];
							 | 
						|||
| 
								 | 
							
								        $recordMap = []; // 用于快速匹配子项目记录
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 构建记录索引(以 `basic_id` 为键)
							 | 
						|||
| 
								 | 
							
								        foreach ($existingRecords as $record) {
							 | 
						|||
| 
								 | 
							
								            $recordMap[$record['basic_id']] = $record['id'];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        // 遍历 JSON 数据,处理子项目
							 | 
						|||
| 
								 | 
							
								        foreach ($dataArray as $parent) {
							 | 
						|||
| 
								 | 
							
								            if (isset($parent['children']) && is_array($parent['children'])) {
							 | 
						|||
| 
								 | 
							
								                foreach ($parent['children'] as $child) {
							 | 
						|||
| 
								 | 
							
								                    $basicId = $child['id'] ?? null;
							 | 
						|||
| 
								 | 
							
								                    $contentScore = $child['content_score'] ?? null;
							 | 
						|||
| 
								 | 
							
								                    $department_score = $child['department_score'] ?? null;
							 | 
						|||
| 
								 | 
							
								                    $hospital_score = $child['hospital_score'] ?? null;
							 | 
						|||
| 
								 | 
							
								                    // 检查数据有效性
							 | 
						|||
| 
								 | 
							
								                    if ($basicId && $contentScore !== null && isset($recordMap[$basicId])) {
							 | 
						|||
| 
								 | 
							
								                        $updateData[] = [
							 | 
						|||
| 
								 | 
							
								                            'id' => $recordMap[$basicId],
							 | 
						|||
| 
								 | 
							
								                            'self_score' => $contentScore,
							 | 
						|||
| 
								 | 
							
								                            'department_score' => $department_score,
							 | 
						|||
| 
								 | 
							
								                            'hospital_score' => $hospital_score,
							 | 
						|||
| 
								 | 
							
								                            // 'updatetime' => date('Y-m-d H:i:s'),
							 | 
						|||
| 
								 | 
							
								                        ];
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // return $this->success('数据更新成功', $updateData);
							 | 
						|||
| 
								 | 
							
								        // 执行批量更新
							 | 
						|||
| 
								 | 
							
								        if (!empty($updateData)) {
							 | 
						|||
| 
								 | 
							
								            // 严格模式下更新
							 | 
						|||
| 
								 | 
							
								            foreach($updateData as $key => $val){
							 | 
						|||
| 
								 | 
							
								                $result =  Db::table('lr_scoringrecord')->where('id',$val['id'])->update($val);
							 | 
						|||
| 
								 | 
							
								                // if(!$result){
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                //     return $this->error('数据更新失败',$val);
							 | 
						|||
| 
								 | 
							
								                // }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            return $this->success('数据更新成功', $result);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // $result = Db::table('lr_scoringrecord')->strict(true)->update($updateData);
							 | 
						|||
| 
								 | 
							
								            // if ($result) {
							 | 
						|||
| 
								 | 
							
								            //     return $this->success('数据更新成功', $result);
							 | 
						|||
| 
								 | 
							
								            // } else {
							 | 
						|||
| 
								 | 
							
								            //     return $this->error('数据更新失败');
							 | 
						|||
| 
								 | 
							
								            // }
							 | 
						|||
| 
								 | 
							
								        } else {
							 | 
						|||
| 
								 | 
							
								            return $this->error('没有可更新的数据');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								        public function getMonthlyFindData()
							 | 
						|||
| 
								 | 
							
								    {   
							 | 
						|||
| 
								 | 
							
								        $token = $this->request->header('Token');
							 | 
						|||
| 
								 | 
							
								        $id = $this->request->post('user_id');
							 | 
						|||
| 
								 | 
							
								        $evaluation_id = $this->request->post('evaluation_id');
							 | 
						|||
| 
								 | 
							
								        $time = $this->request->post('time', date('Y'));
							 | 
						|||
| 
								 | 
							
								        if(!$token){
							 | 
						|||
| 
								 | 
							
								            return $this->error('缺少参数');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        if(!$id){
							 | 
						|||
| 
								 | 
							
								            return $this->error('缺少参数');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        if(!$time){
							 | 
						|||
| 
								 | 
							
								            return $this->error('暂无数据');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $if_user = Db::name('user')->where('token', $token)->value('id');
							 | 
						|||
| 
								 | 
							
								        if(!$if_user){
							 | 
						|||
| 
								 | 
							
								            return $this->error('该角色不存在');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								       
							 | 
						|||
| 
								 | 
							
								        // 从数据库中获取计划
							 | 
						|||
| 
								 | 
							
								        $data = Db::name('evaluation_schedule')->where('id', $evaluation_id)->find();
							 | 
						|||
| 
								 | 
							
								        if (!$data) {
							 | 
						|||
| 
								 | 
							
								            return $this->error('暂无数据');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        if($time == date('Y')){
							 | 
						|||
| 
								 | 
							
								            $currentMonth = date('Y-m');
							 | 
						|||
| 
								 | 
							
								            $createtime =  $time . '-01';
							 | 
						|||
| 
								 | 
							
								        }else{
							 | 
						|||
| 
								 | 
							
								            $createtime = $time. '-01';
							 | 
						|||
| 
								 | 
							
								            $currentMonth =  $time. '-12';
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        // 初始化月份数组
							 | 
						|||
| 
								 | 
							
								        $periods = [];
							 | 
						|||
| 
								 | 
							
								        $startMonth = date('Y-m', strtotime($createtime));
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        while ($startMonth <= $currentMonth) {
							 | 
						|||
| 
								 | 
							
								            $periods[] = $startMonth;
							 | 
						|||
| 
								 | 
							
								            $startMonth = date('Y-m', strtotime("+1 month", strtotime($startMonth)));
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								       
							 | 
						|||
| 
								 | 
							
								        // 获取月度的评分记录
							 | 
						|||
| 
								 | 
							
								        $scoringrecord = Db::name('scoringrecord')->where('scoring_period', 3)->where('evaluation_schedule_id',$evaluation_id)->where('user_id', $id)->select();
							 | 
						|||
| 
								 | 
							
								        // 整理评分记录,以月份为键
							 | 
						|||
| 
								 | 
							
								        $scoringMonths = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($scoringrecord as $record) {
							 | 
						|||
| 
								 | 
							
								            $recordMonth = date('Y-m', strtotime($record['term']));
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            if (!isset($scoringMonths[$recordMonth])) {
							 | 
						|||
| 
								 | 
							
								                $scoringMonths[$recordMonth] = [
							 | 
						|||
| 
								 | 
							
								                    'plus_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'minus_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'self_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'department_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'hospital_score' => 0,
							 | 
						|||
| 
								 | 
							
								                    'createtime' => $record['createtime'],
							 | 
						|||
| 
								 | 
							
								                ];
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								           
							 | 
						|||
| 
								 | 
							
								            // 假设加减分通过 `value` 字段的正负来判断
							 | 
						|||
| 
								 | 
							
								            if ($record['value'] > 0) {
							 | 
						|||
| 
								 | 
							
								                $scoringMonths[$recordMonth]['plus_score'] += $record['value'];
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                $scoringMonths[$recordMonth]['minus_score'] += $record['value'];
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								            $scoringMonths[$recordMonth]['self_score'] += $record['self_score'];
							 | 
						|||
| 
								 | 
							
								            $scoringMonths[$recordMonth]['department_score'] += $record['department_score'];
							 | 
						|||
| 
								 | 
							
								            $scoringMonths[$recordMonth]['hospital_score'] += $record['hospital_score'];
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $user =  Db::name('user')->where('id', $id)->find();
							 | 
						|||
| 
								 | 
							
								        if(!$user){
							 | 
						|||
| 
								 | 
							
								            return $this->error('未查到该用户');
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        // 对比并输出结果
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								        $result = [];
							 | 
						|||
| 
								 | 
							
								        foreach ($periods as $month) {
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            if (isset($scoringMonths[$month])) {
							 | 
						|||
| 
								 | 
							
								                // return $this->error('未查到该用户',$scoringMonths);
							 | 
						|||
| 
								 | 
							
								                if($month != date('Y-m')){
							 | 
						|||
| 
								 | 
							
								                    $if_month = 1;
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    $if_month = 2;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                if($scoringMonths[$month]['self_score']){
							 | 
						|||
| 
								 | 
							
								                    $if_month = 1;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                $scoringrecord_status = 2;
							 | 
						|||
| 
								 | 
							
								                if($scoringMonths[$month]['self_score']){
							 | 
						|||
| 
								 | 
							
								                    $scoringrecord_status = 1;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                if($scoringMonths[$month]['department_score']){
							 | 
						|||
| 
								 | 
							
								                    $scoringrecord_status = 3;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                if($scoringMonths[$month]['hospital_score']){
							 | 
						|||
| 
								 | 
							
								                    $scoringrecord_status = 4;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                $result[] = [
							 | 
						|||
| 
								 | 
							
								                    'id' => $id,
							 | 
						|||
| 
								 | 
							
								                    'month' => $month,
							 | 
						|||
| 
								 | 
							
								                    'user' => $user['nickname'],
							 | 
						|||
| 
								 | 
							
								                    'currentMonth' => $currentMonth,
							 | 
						|||
| 
								 | 
							
								                    'plus_score' => $scoringMonths[$month]['plus_score'],
							 | 
						|||
| 
								 | 
							
								                    'minus_score' => $scoringMonths[$month]['minus_score'],
							 | 
						|||
| 
								 | 
							
								                    'self_score' => $scoringMonths[$month]['self_score'],
							 | 
						|||
| 
								 | 
							
								                    'department_score' => $scoringMonths[$month]['department_score'],
							 | 
						|||
| 
								 | 
							
								                    'hospital_score' => $scoringMonths[$month]['hospital_score'],
							 | 
						|||
| 
								 | 
							
								                    'if' => 2,
							 | 
						|||
| 
								 | 
							
								                    'if_month' => $if_month,
							 | 
						|||
| 
								 | 
							
								                    'scoringrecord_status' => $scoringrecord_status,
							 | 
						|||
| 
								 | 
							
								                    'createtime' => $scoringMonths[$month]['createtime'],
							 | 
						|||
| 
								 | 
							
								                ];
							 | 
						|||
| 
								 | 
							
								            } else {
							 | 
						|||
| 
								 | 
							
								                if($month != date('Y-m')){
							 | 
						|||
| 
								 | 
							
								                    $if_month = 1;
							 | 
						|||
| 
								 | 
							
								                }else{
							 | 
						|||
| 
								 | 
							
								                    $if_month = 2;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                $result[] = [
							 | 
						|||
| 
								 | 
							
								                    'id' => $id,
							 | 
						|||
| 
								 | 
							
								                    'month' => $month,
							 | 
						|||
| 
								 | 
							
								                    'user' => $user['nickname'],
							 | 
						|||
| 
								 | 
							
								                    'currentMonth' => $currentMonth,
							 | 
						|||
| 
								 | 
							
								                    'plus_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'minus_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'self_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'department_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'hospital_score' => '',
							 | 
						|||
| 
								 | 
							
								                    'if' => 1, 
							 | 
						|||
| 
								 | 
							
								                    'if_month' => $if_month,
							 | 
						|||
| 
								 | 
							
								                    'scoringrecord_status' => 2,
							 | 
						|||
| 
								 | 
							
								                    'createtime' => null,
							 | 
						|||
| 
								 | 
							
								                ];
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        // 返回结果
							 | 
						|||
| 
								 | 
							
								        $sortedResult = $this->sortByMonthDescending($result);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        return $this->success('请求成功',$sortedResult);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |