887 lines
35 KiB
PHP
Raw Normal View History

<?php
namespace app\api\controller\backend;
use app\common\controller\Api;
use app\api\model\Admin as AdminModel;
use think\Db;
/**
* 季度控制器
*/
class Year 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', 1)->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 getAnnualData()
{
$token = $this->request->header('Token');
$evaluation_id = $this->request->post('id');
$time = $this->request->post('time', date('Y'));
if(!$token){
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')){
$createtime = $time ;
$currentYear = date('Y');
$startYear = date('Y', strtotime($createtime));
}else{
$createtime = $time;
$currentYear = $time;
$startYear = $time;
}
// 初始化年度数组
$periods = [];
// return $this->error('暂无数据', $currentYear);
while ($startYear <= $currentYear) {
$periods[] = $startYear;
$startYear++;
}
// 获取年度的评分记录
$scoringrecord = Db::name('scoringrecord')->where('scoring_period', 1)->where('evaluation_schedule_id',$evaluation_id)->where('user_id', $id)->select();
// 整理评分记录,以年度为键
$scoringYears = [];
foreach ($scoringrecord as $record) {
$recordYear = date('Y', strtotime($record['term']));
if (!isset($scoringYears[$recordYear])) {
$scoringYears[$recordYear] = [
'plus_score' => 0,
'minus_score' => 0,
'self_score' => 0,
'department_score' => 0,
'party_branch_score' => 0,
'overall_party_score' => 0,
'hospital_score' => 0,
'createtime' => null, // 初始化为null
];
}
if ($record['value'] > 0) {
$scoringYears[$recordYear]['plus_score'] += $record['value'];
} else {
$scoringYears[$recordYear]['minus_score'] += $record['value'];
}
$scoringYears[$recordYear]['self_score'] += $record['self_score'];
$scoringYears[$recordYear]['department_score'] += $record['department_score'];
$scoringYears[$recordYear]['party_branch_score'] += $record['party_branch_score'];
$scoringYears[$recordYear]['overall_party_score'] += $record['overall_party_score'];
$scoringYears[$recordYear]['hospital_score'] += $record['hospital_score'];
$scoringYears[$recordYear]['createtime'] = $record['createtime']; // 记录时间
}
$user = Db::name('user')->where('id', $id)->find();
if (!$user) {
return $this->error('未查到该用户');
}
// 对比并输出结果
$result = [];
foreach ($periods as $period) {
$currentPeriod = date('Y');
if (isset($scoringYears[$period])) {
if ($period != $currentPeriod) {
$if_period = 1;
} else {
$if_period = 2;
}
if ($scoringYears[$period]['self_score']) {
$if_period = 1;
}
$createtime = $scoringYears[$period]['createtime'] ?: null; // 有值显示原值无值显示0
} else {
if ($period != $currentPeriod) {
$if_period = 1;
} else {
$if_period = 2;
}
$createtime = null; // 无记录时显示0
}
$result[] = [
'year' => $period,
'user' => $user['nickname'],
'currentYear' => $currentPeriod,
'plus_score' => $scoringYears[$period]['plus_score'] ?? '',
'minus_score' => $scoringYears[$period]['minus_score'] ?? '',
'self_score' => $scoringYears[$period]['self_score'] ?? '',
'department_score' => $scoringYears[$period]['department_score'] ?? '',
'party_branch_score' => $scoringYears[$period]['party_branch_score'] ?? '',
'overall_party_score' => $scoringYears[$period]['overall_party_score'] ?? '',
'hospital_score' => $scoringYears[$period]['hospital_score'] ?? '',
'if' => isset($scoringYears[$period]) ? 2 : 1,
'if_period' => $if_period,
'year_range' => "{$period}-01至{$period}-12",
'createtime' => $createtime,
];
}
// 返回结果
$sortedResult = $this->sortByMonthDescending($result);
return $this->success('请求成功',$sortedResult);
}
public function sortByMonthDescending($array) {
// 使用 usort 函数对数组进行排序
usort($array, function ($a, $b) {
// 将 month 字段转换为时间戳以便比较
$timeA = strtotime($a['year']);
$timeB = strtotime($b['year']);
// 按时间戳降序排列
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');
$term = $this->request->post('term');
// 将 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', $term)
->where('user_id',$user['id'])
->where('type', 1)
->where('scoring_period', 1)
->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'];
// 遍历子项目
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' => 1, // 评分类型
'term' => $term, // 届数
'status' => 1, // 默认状态
'type' => 1, // 类型1为自提
'value' => null, // 基础分值
'createtime' => date('Y-m-d H:i:s'), // 当前时间戳
];
}
}
}
// return $this->success('数据插入成功111', $insertData);
// 插入数据到数据库
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 getYear(){
$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();
// return $this->success('请求成功',$data);
// 构建层级结构
$tree = $this->buildTree($data);
return $this->success('请求成功',$tree);
}
private function buildTree(array $data, $parentId = 0)
{
$tree = [];
foreach ($data as $item) {
if ($item['pid'] == 0) {
$item['avg_score'] = 0;
}
// 添加 content_score 并设置其值与 base_score 相同
if (isset($item['base_score'])) {
$item['content_score'] = 0;
}
if ($item['pid'] == $parentId) {
$children = $this->buildTree($data, $item['id']);
if ($children) {
$item['children'] = $children;
}
$tree[] = $item;
}
}
return $tree;
}
public function getYearFind(){
$user_id = $this->request->post('user_id');
$month = $this->request->post('year');
$evaluation_schedule_id = $this->request->post('evaluation_schedule_id');
$where = [
'user_id' => $user_id,
'term' => $month,
'scoring_period' => 1,
'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 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'] == 1) {
// 查询所有组别
$data = Db::name('user_group')->select();
} else {
// 查找用户所在组别信息
$group = Db::name('user_group')->where('id', $user['group_id'])->find();
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('查询成功', $group);
}
}
// 构建树状结构
$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', '=', '1')
->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'));
$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]['party_score_scoringrecord'] = Db::name('scoringrecord')->where('user_id', $value['id'])->where('term', $time)->where('evaluation_schedule_id',$evaluation_schedule_id)->sum('party_branch_score');
$result[$key]['overall_score_scoringrecord'] = Db::name('scoringrecord')->where('user_id', $value['id'])->where('term', $time)->where('evaluation_schedule_id',$evaluation_schedule_id)->sum('overall_party_score');
//获取改年总加分的分值
$result[$key]['zongjiafenfenzhi'] = Db::name('addition_and_subtraction_records')->where('user_id', $value['id'])->where('YEAR(createtime)', $time)->where('status',2)->where('assessment_type',1)->sum('score_value');
//获取改年总减分的分值
$result[$key]['zongjianfenfenzhi'] = Db::name('addition_and_subtraction_records')->where('user_id', $value['id'])->where('YEAR(createtime)', $time)->where('status',2)->where('assessment_type',2)->sum('score_value');
$result[$key]['time'] = $time;
$result[$key]['zongjiafen'] = 0;
$result[$key]['scoringrecord_status'] = '1';
$result[$key]['total_score'] = 0;
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]['party_score_scoringrecord'] != 0){
$result[$key]['scoringrecord_status'] = '5';
}
if($result[$key]['overall_score_scoringrecord'] != 0){
$result[$key]['scoringrecord_status'] = '6';
}
if($result[$key]['hospital_score_scoringrecord'] != 0){
$result[$key]['scoringrecord_status'] = '4';
$result[$key]['total_score'] = $result[$key]['user_scoringrecord'] * 0.2 + $result[$key]['department_score_scoringrecord'] * 0.4 + $result[$key]['party_score_scoringrecord'] * 0.4 + $result[$key]['zongjiafenfenzhi'] - $result[$key]['zongjianfenfenzhi'];
}
}
$data = [
'result' => $result,
'count' => $count,
];
return $this->success('查询成功', $data);
}
public function getMonthlyListFind(){
$user_id = $this->request->post('user_id');
$month = $this->request->post('month',2025);
$evaluation_schedule_id = $this->request->post('evaluation_schedule_id');
$where = [
'user_id' => $user_id,
'term' => $month,
'scoring_period' => 1,
'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'];
$item['party_branch_score'] = $scoringrecordMap[$item['id']]['party_branch_score'];
$item['overall_party_score'] = $scoringrecordMap[$item['id']]['overall_party_score'];
if(!$item['self_score']){
$item['self_score'] = 0;
}
if(!$item['department_score']){
$item['department_score'] = 0;
}
if(!$item['hospital_score']){
$item['hospital_score'] = 0;
}
if(!$item['party_branch_score']){
$item['party_branch_score'] = 0;
}
if(!$item['overall_party_score']){
$item['overall_party_score'] = 0;
}
} else {
$item['self_score'] = 0; // 或者其他适当的默认值
$item['department_score'] = 0;
$item['hospital_score'] = 0;
$item['party_branch_score'] = 0;
$item['overall_party_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'));
$token = $this->request->header('Token');
$type = intval($this->request->post('type'));
$auth = Db::name('user')
->field('a.*,w.level')
->alias('a')
->join('auth_group w','a.auth_group_id = w.id','LEFT')
->where('a.token', $token)
->find();
if(!$auth){
return $this->error('您无权限');
}
$level = $auth['level'];
// 定义权限映射关系(使用关联数组提高可维护性)
$permissionMap = [
1 => 1, // level1 → type1
3 => 6, // level3 → type4
4 => 3, // level5 → type6
5 => 5 // level6 → type5
];
// 双重验证1.是否存在映射关系 2.类型值是否匹配
if (isset($permissionMap[$level]) && $permissionMap[$level] === $type) {
// 权限验证通过,继续执行业务逻辑
} else {
return $this->error('您无权限操作');
}
// 将 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', 1)
->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;
$party_branch_score = $child['party_branch_score'] ?? null;
$overall_party_score = $child['overall_party_score'] ?? null;
// 检查数据有效性
if ($basicId && $contentScore !== null && isset($recordMap[$basicId])) {
$updateData[] = [
'id' => $recordMap[$basicId],
'self_score' => $contentScore,
'department_score' => $department_score,
'hospital_score' => $hospital_score,
'party_branch_score' => $party_branch_score,
'overall_party_score' => $overall_party_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 getAnnualFindData()
{
$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 || !$id){
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('暂无数据');
}
$currentYear = date('Y');
$startYear = ($time == date('Y')) ? date('Y') : $time;
$endYear = $currentYear;
// 初始化年度数组
$periods = [];
while ($startYear <= $endYear) {
$periods[] = $startYear;
$startYear++;
}
// 获取年度的评分记录
$scoringrecord = Db::name('scoringrecord')
->where('scoring_period', 1)
->where('evaluation_schedule_id', $evaluation_id)
->where('user_id', $id)
->select();
// 整理评分记录,以年度为键
$scoringYears = [];
foreach ($scoringrecord as $record) {
$recordYear = date('Y', strtotime($record['term']));
if (!isset($scoringYears[$recordYear])) {
$scoringYears[$recordYear] = [
'plus_score' => 0,
'minus_score' => 0,
'self_score' => 0,
'department_score' => 0,
'hospital_score' => 0,
'party_branch_score' => 0,
'overall_party_score' => 0,
'createtime' => null,
];
}
if ($record['value'] > 0) {
$scoringYears[$recordYear]['plus_score'] += $record['value'];
} else {
$scoringYears[$recordYear]['minus_score'] += $record['value'];
}
$scoringYears[$recordYear]['self_score'] += $record['self_score'];
$scoringYears[$recordYear]['department_score'] += $record['department_score'];
$scoringYears[$recordYear]['hospital_score'] += $record['hospital_score'];
$scoringYears[$recordYear]['party_branch_score'] += $record['party_branch_score'];
$scoringYears[$recordYear]['overall_party_score'] += $record['overall_party_score'];
$scoringYears[$recordYear]['createtime'] = $record['createtime'];
}
$user = Db::name('user')->where('id', $id)->find();
if (!$user) {
return $this->error('未查到该用户');
}
// 对比并输出结果
$result = [];
foreach ($periods as $period) {
$currentPeriod = date('Y');
$if_period = ($period != $currentPeriod) ? 1 : 2;
$createtime = null;
$total_score = 0;
$scoringrecord_status = 2;
// 初始化当前年份的评分数据
if (!isset($scoringYears[$period])) {
$scoringYears[$period] = [
'plus_score' => 0,
'minus_score' => 0,
'self_score' => 0,
'department_score' => 0,
'hospital_score' => 0,
'party_branch_score' => 0,
'overall_party_score' => 0,
'createtime' => null,
];
}
if ($scoringYears[$period]['self_score'] > 0) {
$scoringrecord_status = 1;
}
if ($scoringYears[$period]['department_score'] > 0) {
$scoringrecord_status = 3;
}
if ($scoringYears[$period]['hospital_score'] > 0) {
$scoringrecord_status = 4;
// 获取该年总加分和减分的分值
$zongjiafenfenzhi = Db::name('addition_and_subtraction_records')
->where('user_id', $id)
->where('YEAR(createtime)', $period)
->where('status', 2)
->where('assessment_type', 1)
->sum('score_value');
$zongjianfenfenzhi = Db::name('addition_and_subtraction_records')
->where('user_id', $id)
->where('YEAR(createtime)', $period)
->where('status', 2)
->where('assessment_type', 2)
->sum('score_value');
$total_score = $scoringYears[$period]['self_score'] * 0.2
+ $scoringYears[$period]['department_score'] * 0.4
+ $scoringYears[$period]['party_branch_score'] * 0.4
+ $zongjiafenfenzhi
- $zongjianfenfenzhi;
}
$result[] = [
'id' => $id,
'year' => $period,
'user' => $user['nickname'],
'currentYear' => $currentPeriod,
'plus_score' => $scoringYears[$period]['plus_score'],
'minus_score' => $scoringYears[$period]['minus_score'],
'self_score' => $scoringYears[$period]['self_score'],
'department_score' => $scoringYears[$period]['department_score'],
'hospital_score' => $scoringYears[$period]['hospital_score'],
'party_branch_score' => $scoringYears[$period]['party_branch_score'],
'overall_party_score' => $scoringYears[$period]['overall_party_score'],
'if' => isset($scoringYears[$period]) ? 2 : 1,
'if_period' => $if_period,
'scoringrecord_status' => $scoringrecord_status,
'year_range' => "{$period}-01至{$period}-12",
'createtime' => $scoringYears[$period]['createtime'],
'total_score' => $total_score,
];
}
// 返回结果
$sortedResult = $this->sortByMonthDescending($result);
return $this->success('请求成功', $sortedResult);
}
}