package com.qmth.distributed.print.api;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qmth.boot.api.constant.ApiConstant;
import com.qmth.distributed.print.business.bean.dto.obe.CourseRequirementMatrixDto;
import com.qmth.distributed.print.business.bean.dto.report.ObeCourseRequirementDto;
import com.qmth.distributed.print.business.bean.dto.report.ObeSubRequirementsDto;
import com.qmth.distributed.print.business.bean.result.ObeCourseRequirementListResult;
import com.qmth.distributed.print.business.bean.result.ScoreResult;
import com.qmth.distributed.print.business.entity.ObeCourseRequirementReport;
import com.qmth.distributed.print.business.service.ObeCourseRequirementReportService;
import com.qmth.distributed.print.business.service.TRExamStudentService;
import com.qmth.teachcloud.common.contant.SystemConstant;
import com.qmth.teachcloud.common.util.JacksonUtil;
import com.qmth.teachcloud.common.util.Result;
import com.qmth.teachcloud.common.util.ResultUtil;
import io.swagger.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * <p>
 * obe专业达成度报表 前端控制器
 * </p>
 *
 * @author wangliang
 * @since 2024-02-18
 */
@Api(tags = "obe专业达成度报表Controller")
@RestController
@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_OBE)
public class ObeReportController {
    private final static Logger log = LoggerFactory.getLogger(ObeReportController.class);

    @Resource
    ObeCourseRequirementReportService obeCourseRequirementReportService;

    @Resource
    TRExamStudentService trExamStudentService;

    @ApiOperation(value = "毕业要求达成度报表列表")
    @RequestMapping(value = "/requirements/list", method = RequestMethod.POST)
    @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ObeCourseRequirementListResult.class)})
    public Result requirementsList(@ApiParam(value = "专业ID", required = true) @RequestParam Long professionalId,
                                   @ApiParam(value = "培养方案名称") @RequestParam(required = false) String cultureProgramName,
                                   @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                   @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
        return ResultUtil.ok(obeCourseRequirementReportService.obeCourseRequirementReportList(new Page<>(pageNumber, pageSize), professionalId, cultureProgramName));
    }

    @ApiOperation(value = "毕业要求达成度雷达报表")
    @RequestMapping(value = "/requirements/radar/report", method = RequestMethod.POST)
    @ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度雷达报表", response = ScoreResult.class)})
    @Transactional
    public Result requirementsRadarReport(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId) {
//        String s = "[{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"cultureProgramId\":null,\"obeCourseId\":null,\"obeRequirementId\":null,\"obeSubRequirementId\":null,\"scale\":null,\"intensity\":null,\"courseCode\":\"1400\",\"courseName\":\"微积分\",\"courseSortNum\":0,\"requirementSortNum\":0,\"subRequirementSortNum\":0,\"requirementContent\":null,\"canEdit\":true,\"requirements\":[{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"工程知识\",\"orgId\":null,\"content\":\"能够将数学、自然科学、工程基础和专业知识用于解决复杂工程问题\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077696\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"1-1\",\"orgId\":null,\"scale\":0.1,\"content\":\"指标点1-1-content\"}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"问题分析\",\"orgId\":null,\"content\":\"能够应用数学、自然科学和工程科学的基本原理，识别、表达、并通过文献研究分析复杂工程问题，以获得有效结论\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077697\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"2-1\",\"orgId\":null,\"scale\":0.2,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"设计/开发解决方案\",\"orgId\":null,\"content\":\"能够设计针对复杂工程问题的解决方案，设计满足特定需求的系统、单元（部件）或工艺流程，并能够在设计环节中体现创新意识，考虑社会、健康、安全、法律、文化以及环境等因素\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077698\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"3-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"研究\",\"orgId\":null,\"content\":\"能够基于科学原理并采用科学方法对复杂工程问题进行研究，包括设计实验、分析与解释数据、并通过信息综合得到合理有效的结论\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077699\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"4-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"使用工具\",\"orgId\":null,\"content\":\"能够针对复杂工程问题，开发、选择与使用恰当的技术、资源、现代工程工具和信息技术工具，包括对复杂工程问题的预测与模拟，并能够理解其局限性\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077700\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"5-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"工程与社会\",\"orgId\":null,\"content\":\"能够基于工程相关背景知识进行合理分析，评价专业工程实践和复杂工程问题解决方案对社会、健康、安全、法律以及文化的影响，并理解应承担的责任\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077701\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"6-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"环境和可持续发展\",\"orgId\":null,\"content\":\"能够理解和评价针对复杂工程问题的工程实践对环境、社会可持续发展的影响\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077702\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"7-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"职业规范\",\"orgId\":null,\"content\":\"具有人文社会科学素养、社会责任感，能够在工程实践中理解并遵守工程职业道德和规范，履行责任\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077703\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"8-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"个人与团队\",\"orgId\":null,\"content\":\"能够在多学科背景下的团队中承担个体、团队成员以及负责人的角色\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077704\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"9-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"沟通\",\"orgId\":null,\"content\":\"能够就复杂工程问题与业界同行及社会公众进行有效沟通和交流，包括撰写报告和设计文稿、陈述发言、清晰表达或回应指令。并具备一定的国际视野，能够在跨文化背景下进行沟通和交流\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077705\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"10-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"项目管理\",\"orgId\":null,\"content\":\"理解并掌握工程管理原理与经济决策方法，并能在多学科环境中应用\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077706\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"11-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"终身学习\",\"orgId\":null,\"content\":\"具有自主学习和终身学习的意识，有不断学习和适应发展的能力\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077707\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"12-1\",\"orgId\":null,\"scale\":null,\"content\":null}]}]}]";
        String s = "[{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"cultureProgramId\":null,\"obeCourseId\":null,\"obeRequirementId\":null,\"obeSubRequirementId\":null,\"scale\":null,\"intensity\":null,\"courseCode\":\"1400\",\"courseName\":\"微积分\",\"courseSortNum\":0,\"requirementSortNum\":0,\"subRequirementSortNum\":0,\"requirementContent\":null,\"canEdit\":true,\"requirements\":[{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"工程知识\",\"orgId\":null,\"content\":\"能够将数学、自然科学、工程基础和专业知识用于解决复杂工程问题\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077696\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"1-1\",\"orgId\":null,\"scale\":0.1,\"content\":\"指标点1-1-content\"}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"问题分析\",\"orgId\":null,\"content\":\"能够应用数学、自然科学和工程科学的基本原理，识别、表达、并通过文献研究分析复杂工程问题，以获得有效结论\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077697\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"2-1\",\"orgId\":null,\"scale\":0.2,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"设计/开发解决方案\",\"orgId\":null,\"content\":\"能够设计针对复杂工程问题的解决方案，设计满足特定需求的系统、单元（部件）或工艺流程，并能够在设计环节中体现创新意识，考虑社会、健康、安全、法律、文化以及环境等因素\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077698\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"3-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"研究\",\"orgId\":null,\"content\":\"能够基于科学原理并采用科学方法对复杂工程问题进行研究，包括设计实验、分析与解释数据、并通过信息综合得到合理有效的结论\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077699\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"4-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"使用工具\",\"orgId\":null,\"content\":\"能够针对复杂工程问题，开发、选择与使用恰当的技术、资源、现代工程工具和信息技术工具，包括对复杂工程问题的预测与模拟，并能够理解其局限性\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077700\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"5-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"工程与社会\",\"orgId\":null,\"content\":\"能够基于工程相关背景知识进行合理分析，评价专业工程实践和复杂工程问题解决方案对社会、健康、安全、法律以及文化的影响，并理解应承担的责任\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077701\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"6-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"环境和可持续发展\",\"orgId\":null,\"content\":\"能够理解和评价针对复杂工程问题的工程实践对环境、社会可持续发展的影响\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077702\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"7-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"职业规范\",\"orgId\":null,\"content\":\"具有人文社会科学素养、社会责任感，能够在工程实践中理解并遵守工程职业道德和规范，履行责任\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077703\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"8-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"个人与团队\",\"orgId\":null,\"content\":\"能够在多学科背景下的团队中承担个体、团队成员以及负责人的角色\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077704\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"9-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"沟通\",\"orgId\":null,\"content\":\"能够就复杂工程问题与业界同行及社会公众进行有效沟通和交流，包括撰写报告和设计文稿、陈述发言、清晰表达或回应指令。并具备一定的国际视野，能够在跨文化背景下进行沟通和交流\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077705\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"10-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"项目管理\",\"orgId\":null,\"content\":\"理解并掌握工程管理原理与经济决策方法，并能在多学科环境中应用\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077706\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"11-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"终身学习\",\"orgId\":null,\"content\":\"具有自主学习和终身学习的意识，有不断学习和适应发展的能力\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077707\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"12-1\",\"orgId\":null,\"scale\":null,\"content\":null}]}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"cultureProgramId\":null,\"obeCourseId\":null,\"obeRequirementId\":null,\"obeSubRequirementId\":null,\"scale\":null,\"intensity\":null,\"courseCode\":\"1400\",\"courseName\":\"微积分\",\"courseSortNum\":0,\"requirementSortNum\":0,\"subRequirementSortNum\":0,\"requirementContent\":null,\"canEdit\":true,\"requirements\":[{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"工程知识\",\"orgId\":null,\"content\":\"能够将数学、自然科学、工程基础和专业知识用于解决复杂工程问题\",\"expectValue\":0.2,\"subRequirements\":[{\"id\":\"533285303218077696\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"1-1\",\"orgId\":null,\"scale\":0.3,\"content\":\"指标点1-1-content\"}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"问题分析\",\"orgId\":null,\"content\":\"能够应用数学、自然科学和工程科学的基本原理，识别、表达、并通过文献研究分析复杂工程问题，以获得有效结论\",\"expectValue\":0.4,\"subRequirements\":[{\"id\":\"533285303218077697\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"2-1\",\"orgId\":null,\"scale\":0.4,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"设计/开发解决方案\",\"orgId\":null,\"content\":\"能够设计针对复杂工程问题的解决方案，设计满足特定需求的系统、单元（部件）或工艺流程，并能够在设计环节中体现创新意识，考虑社会、健康、安全、法律、文化以及环境等因素\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077698\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"3-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"研究\",\"orgId\":null,\"content\":\"能够基于科学原理并采用科学方法对复杂工程问题进行研究，包括设计实验、分析与解释数据、并通过信息综合得到合理有效的结论\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077699\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"4-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"使用工具\",\"orgId\":null,\"content\":\"能够针对复杂工程问题，开发、选择与使用恰当的技术、资源、现代工程工具和信息技术工具，包括对复杂工程问题的预测与模拟，并能够理解其局限性\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077700\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"5-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"工程与社会\",\"orgId\":null,\"content\":\"能够基于工程相关背景知识进行合理分析，评价专业工程实践和复杂工程问题解决方案对社会、健康、安全、法律以及文化的影响，并理解应承担的责任\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077701\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"6-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"环境和可持续发展\",\"orgId\":null,\"content\":\"能够理解和评价针对复杂工程问题的工程实践对环境、社会可持续发展的影响\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077702\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"7-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"职业规范\",\"orgId\":null,\"content\":\"具有人文社会科学素养、社会责任感，能够在工程实践中理解并遵守工程职业道德和规范，履行责任\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077703\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"8-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"个人与团队\",\"orgId\":null,\"content\":\"能够在多学科背景下的团队中承担个体、团队成员以及负责人的角色\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077704\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"9-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"沟通\",\"orgId\":null,\"content\":\"能够就复杂工程问题与业界同行及社会公众进行有效沟通和交流，包括撰写报告和设计文稿、陈述发言、清晰表达或回应指令。并具备一定的国际视野，能够在跨文化背景下进行沟通和交流\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077705\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"10-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"项目管理\",\"orgId\":null,\"content\":\"理解并掌握工程管理原理与经济决策方法，并能在多学科环境中应用\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077706\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"11-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"终身学习\",\"orgId\":null,\"content\":\"具有自主学习和终身学习的意识，有不断学习和适应发展的能力\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077707\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"12-1\",\"orgId\":null,\"scale\":null,\"content\":null}]}]}]";
        List<CourseRequirementMatrixDto> courseRequirementMatrixDtoList = JSONArray.parseArray(s, CourseRequirementMatrixDto.class);
        log.info("courseRequirementMatrixDto:{}", JacksonUtil.parseJson(courseRequirementMatrixDtoList));
        Long examId = 510450135071723520L;
        Long obeCourseOutlineId = 533296474771947520L;
        Map<String, Object> map = obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutlineId, examId);
        ObeCourseRequirementDto obeCourseRequirementResultDto = null;
        List<ObeCourseRequirementDto> obeCourseRequirementDtoList = null;
        if (!CollectionUtils.isEmpty(map)) {
            obeCourseRequirementDtoList = (List<ObeCourseRequirementDto>) map.get(SystemConstant.OBE_COURSE_REQUIREMENT_DTO_LIST);
            Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = (Map<Long, List<ObeSubRequirementsDto>>) map.get(SystemConstant.OBE_SUB_REQUIREMENT_DTO_MAP);
            obeCourseRequirementResultDto = obeCourseRequirementReportService.matrixCourseReport(obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
        }
        obeCourseRequirementReportService.removeReport(cultureProgramId);
        ObeCourseRequirementReport obeCourseRequirementReport = new ObeCourseRequirementReport(
                cultureProgramId, Objects.nonNull(obeCourseRequirementResultDto) ? JacksonUtil.parseJson(obeCourseRequirementResultDto) : null,
                !CollectionUtils.isEmpty(obeCourseRequirementDtoList) ? JacksonUtil.parseJson(obeCourseRequirementDtoList) : null, Objects.nonNull(obeCourseRequirementResultDto) ? obeCourseRequirementResultDto.getMatrixDegree().doubleValue() : null);
        obeCourseRequirementReportService.save(obeCourseRequirementReport);
        return ResultUtil.ok(obeCourseRequirementResultDto);
    }

    @ApiOperation(value = "毕业要求达成度详情报表")
    @RequestMapping(value = "/requirements/detail/report", method = RequestMethod.POST)
    @ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度详情报表", response = ScoreResult.class)})
    public Result requirementsDetailReport(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId) {
        String s = "[{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"cultureProgramId\":null,\"obeCourseId\":null,\"obeRequirementId\":null,\"obeSubRequirementId\":null,\"scale\":null,\"intensity\":null,\"courseCode\":\"1400\",\"courseName\":\"微积分\",\"courseSortNum\":0,\"requirementSortNum\":0,\"subRequirementSortNum\":0,\"requirementContent\":null,\"canEdit\":true,\"requirements\":[{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"工程知识\",\"orgId\":null,\"content\":\"能够将数学、自然科学、工程基础和专业知识用于解决复杂工程问题\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077696\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"1-1\",\"orgId\":null,\"scale\":0.1,\"content\":\"指标点1-1-content\"}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"问题分析\",\"orgId\":null,\"content\":\"能够应用数学、自然科学和工程科学的基本原理，识别、表达、并通过文献研究分析复杂工程问题，以获得有效结论\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077697\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"2-1\",\"orgId\":null,\"scale\":0.2,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"设计/开发解决方案\",\"orgId\":null,\"content\":\"能够设计针对复杂工程问题的解决方案，设计满足特定需求的系统、单元（部件）或工艺流程，并能够在设计环节中体现创新意识，考虑社会、健康、安全、法律、文化以及环境等因素\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077698\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"3-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"研究\",\"orgId\":null,\"content\":\"能够基于科学原理并采用科学方法对复杂工程问题进行研究，包括设计实验、分析与解释数据、并通过信息综合得到合理有效的结论\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077699\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"4-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"使用工具\",\"orgId\":null,\"content\":\"能够针对复杂工程问题，开发、选择与使用恰当的技术、资源、现代工程工具和信息技术工具，包括对复杂工程问题的预测与模拟，并能够理解其局限性\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077700\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"5-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"工程与社会\",\"orgId\":null,\"content\":\"能够基于工程相关背景知识进行合理分析，评价专业工程实践和复杂工程问题解决方案对社会、健康、安全、法律以及文化的影响，并理解应承担的责任\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077701\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"6-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"环境和可持续发展\",\"orgId\":null,\"content\":\"能够理解和评价针对复杂工程问题的工程实践对环境、社会可持续发展的影响\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077702\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"7-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"职业规范\",\"orgId\":null,\"content\":\"具有人文社会科学素养、社会责任感，能够在工程实践中理解并遵守工程职业道德和规范，履行责任\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077703\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"8-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"个人与团队\",\"orgId\":null,\"content\":\"能够在多学科背景下的团队中承担个体、团队成员以及负责人的角色\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077704\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"9-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"沟通\",\"orgId\":null,\"content\":\"能够就复杂工程问题与业界同行及社会公众进行有效沟通和交流，包括撰写报告和设计文稿、陈述发言、清晰表达或回应指令。并具备一定的国际视野，能够在跨文化背景下进行沟通和交流\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077705\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"10-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"项目管理\",\"orgId\":null,\"content\":\"理解并掌握工程管理原理与经济决策方法，并能在多学科环境中应用\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077706\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"11-1\",\"orgId\":null,\"scale\":null,\"content\":null}]},{\"id\":null,\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"终身学习\",\"orgId\":null,\"content\":\"具有自主学习和终身学习的意识，有不断学习和适应发展的能力\",\"expectValue\":0.1,\"subRequirements\":[{\"id\":\"533285303218077707\",\"createId\":null,\"createTime\":null,\"updateId\":null,\"updateTime\":null,\"schoolId\":null,\"name\":\"12-1\",\"orgId\":null,\"scale\":null,\"content\":null}]}]}]";
        List<CourseRequirementMatrixDto> courseRequirementMatrixDtoList = JSONArray.parseArray(s, CourseRequirementMatrixDto.class);
        log.info("courseRequirementMatrixDto:{}", JacksonUtil.parseJson(courseRequirementMatrixDtoList));
        Long examId = 510450135071723520L;
        Long obeCourseOutlineId = 533296474771947520L;
        Map<String, Object> map = obeCourseRequirementReportService.matrixCourseReportInfo(courseRequirementMatrixDtoList, obeCourseOutlineId, examId);
        List<ObeCourseRequirementDto> obeCourseRequirementDtoList = null;
        if (!CollectionUtils.isEmpty(map)) {
            obeCourseRequirementDtoList = (List<ObeCourseRequirementDto>) map.get(SystemConstant.OBE_COURSE_REQUIREMENT_DTO_LIST);
            Map<Long, List<ObeSubRequirementsDto>> obeSubRequirementsDtoMap = (Map<Long, List<ObeSubRequirementsDto>>) map.get(SystemConstant.OBE_SUB_REQUIREMENT_DTO_MAP);
            obeCourseRequirementDtoList = obeCourseRequirementReportService.matrixCourseReportCommon(obeCourseRequirementDtoList, obeSubRequirementsDtoMap);
        }
        return ResultUtil.ok(obeCourseRequirementDtoList);
    }

    @ApiOperation(value = "毕业要求达成度学生报表-列表")
    @RequestMapping(value = "/student_requirement/page", method = RequestMethod.POST)
    @ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度学生报表", response = ScoreResult.class)})
    public Result requirementsStudentPage(@ApiParam(value = "培养方案ID") @RequestParam(required = false) Long cultureProgramId,
                                          @ApiParam(value = "学号/姓名") @RequestParam(required = false) String studentCodeOrName,
                                          @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                          @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
        return ResultUtil.ok(trExamStudentService.getRequirementsStudentPage(cultureProgramId, studentCodeOrName, pageNumber, pageSize));
    }

    @ApiOperation(value = "毕业要求达成度学生报表-查看详情")
    @RequestMapping(value = "/student_requirement/detail", method = RequestMethod.POST)
    @ApiResponses({@ApiResponse(code = 200, message = "毕业要求达成度学生报表", response = ScoreResult.class)})
    public Result requirementsStudentReport(@ApiParam(value = "培养方案ID", required = true) @RequestParam Long cultureProgramId,
                                            @ApiParam(value = "学号", required = true) @RequestParam String studentCode,
                                            @ApiParam(value = "学期") @RequestParam(required = false) Long semesterId) {
        return ResultUtil.ok(trExamStudentService.getRequirementsStudentReport(cultureProgramId, studentCode, semesterId));
    }
}
