package com.sztzjy.linkCommerce.controller.stu; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.IdUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSONObject; import com.nimbusds.jose.shaded.gson.Gson; import com.sztzjy.linkCommerce.annotation.AnonymousAccess; import com.sztzjy.linkCommerce.entity.*; import com.sztzjy.linkCommerce.entity.dto.MonthlyCakeIndex; import com.sztzjy.linkCommerce.entity.dto.StuIndustryAnalysisDTO; import com.sztzjy.linkCommerce.entity.dto.YearCakeIndexDto; import com.sztzjy.linkCommerce.mapper.HyxqfxAnswerMapper; import com.sztzjy.linkCommerce.mapper.HyxqfxDataMapper; import com.sztzjy.linkCommerce.mapper.HyxqfxStuAnswerMapper; import com.sztzjy.linkCommerce.mapper.StuGradeMapper; import com.sztzjy.linkCommerce.service.IndustryDemandAnalysisService; import com.sztzjy.linkCommerce.util.ResultEntity; import com.sztzjy.linkCommerce.util.excel.DataListener; import com.sztzjy.linkCommerce.util.excel.DemoDataListener; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.math.BigDecimal; import java.util.*; /** * @author 17803 * @date 2025-04-24 13:30 */ @Api(tags = "行业需求分析") @RestController @RequestMapping("api/industryAnalysis") public class IndustryDemandAnalysisController { @Autowired private IndustryDemandAnalysisService service; @Autowired private HyxqfxDataMapper hyxqfxDataMapper; @Autowired private HyxqfxStuAnswerMapper hyxqfxStuAnswerMapper; @Autowired private StuGradeMapper stuGradeMapper; //数据查询 @ApiOperation("行业需求分析提交") @PostMapping("/analysisSubmit") @AnonymousAccess @Transactional(rollbackFor = Exception.class) public ResultEntity uploadExcel(@RequestBody StuIndustryAnalysisDTO analysisDTO) { //查询数据 HyxqfxStuAnswerExample example = new HyxqfxStuAnswerExample(); example.createCriteria().andUserIdEqualTo(analysisDTO.getUserId()); List hyxqfxStuAnswerList = hyxqfxStuAnswerMapper.selectByExample(example); if (!CollectionUtils.isEmpty(hyxqfxStuAnswerList)) { return new ResultEntity<>(HttpStatus.OK); } //读取文件内容 批量导入excel中 以文件名区分 Map yearMap = new HashMap<>(); yearMap.put("2018年",0.28); yearMap.put("2019年",0.25); yearMap.put("2020年",0.24); yearMap.put("2021年",0.22); yearMap.put("2022年",0.21); yearMap.put("2023年",0.22); yearMap.put("2024年",0.20); Map monthMap = new HashMap<>(); monthMap.put("2024年4月",0.21); monthMap.put("2024年5月",0.20); monthMap.put("2024年6月",0.20); monthMap.put("2024年7月",0.22); monthMap.put("2024年8月",0.33); monthMap.put("2024年9月",0.30); monthMap.put("2024年10月",0.33); monthMap.put("2024年11月",0.23); monthMap.put("2024年12月",0.22); monthMap.put("2025年1月",0.22); monthMap.put("2025年2月",0.15); monthMap.put("2025年3月",0.27); int count = 0; List yearCakeIndexDtoList = analysisDTO.getYearCakeIndexDtoList(); for (YearCakeIndexDto yearCakeIndexDto : yearCakeIndexDtoList) { Double v = yearMap.get(yearCakeIndexDto.getYear()); if (yearCakeIndexDto.getYearAnswer() == null || v != yearCakeIndexDto.getYearAnswer()) { count ++; } } //分别将两个字段转为json格式 List monthlyCakeIndexList = analysisDTO.getMonthlyCakeIndexList(); for (MonthlyCakeIndex yearCakeIndexDto : monthlyCakeIndexList) { Double v = monthMap.get(yearCakeIndexDto.getYear()); if (yearCakeIndexDto.getMonthAnswer() == null || v != yearCakeIndexDto.getMonthAnswer()) { count ++; } } String jsonString = JSONObject.toJSONString(analysisDTO); HyxqfxStuAnswer hyxqfxStuAnswer = new HyxqfxStuAnswer(); hyxqfxStuAnswer.setId(IdUtil.randomUUID()); hyxqfxStuAnswer.setUserId(analysisDTO.getUserId()); hyxqfxStuAnswer.setAnswer(jsonString); hyxqfxStuAnswer.setErrorNumber(count); hyxqfxStuAnswerMapper.insertSelective(hyxqfxStuAnswer); //插入主观题 SubjectiveQuestions subjectiveQuestions = new SubjectiveQuestions(); subjectiveQuestions.setId(IdUtil.randomUUID()); subjectiveQuestions.setUserId(analysisDTO.getUserId()); subjectiveQuestions.setModule("行业需求分析"); subjectiveQuestions.setProject("市场需求挖掘"); subjectiveQuestions.setCreateTime(new Date()); subjectiveQuestions.setSubjectiveContent(analysisDTO.getContext()); subjectiveQuestions.setSubjectiveContent(analysisDTO.getContext()); //查询是否已经有成绩 StuGradeExample stuGradeExample = new StuGradeExample(); stuGradeExample.createCriteria().andUserIdEqualTo(analysisDTO.getUserId()).andProjectEqualTo("市场需求挖掘").andModuleEqualTo("行业需求分析"); List stuGradeList = stuGradeMapper.selectByExample(stuGradeExample); if (!CollectionUtils.isEmpty(stuGradeList)) { StuGrade stuGrade = stuGradeList.get(0); BigDecimal score = stuGrade.getScore(); BigDecimal error = Convert.toBigDecimal(count); score = score.subtract(error); if (score.compareTo(BigDecimal.valueOf(100)) > 0) { stuGrade.setScore(BigDecimal.valueOf(100)); }else { stuGrade.setScore(score); } stuGradeMapper.updateByPrimaryKeySelective(stuGrade); }else { //将分数写入成绩表 StuGrade stuGrade = new StuGrade(); stuGrade.setId(IdUtil.randomUUID()); stuGrade.setUserId(analysisDTO.getUserId()); stuGrade.setCreateTime(new Date()); stuGrade.setModule("行业需求分析"); stuGrade.setProject("市场需求挖掘"); stuGrade.setClassName(analysisDTO.getClassName()); stuGrade.setContent(analysisDTO.getContext()); stuGrade.setName(analysisDTO.getName()); stuGrade.setSchoolId(analysisDTO.getSchoolId()); stuGrade.setScore(BigDecimal.valueOf(100-count)); stuGradeMapper.insertSelective(stuGrade); } return new ResultEntity<>(HttpStatus.OK, "上传成功"); } @ApiOperation("行业需求分析根据用户ID查询") @GetMapping("/selectByUserId") @AnonymousAccess public ResultEntity selectByUserId(@ApiParam("用户ID") String userId) { //读取文件内容 批量导入excel中 以文件名区分\ HyxqfxStuAnswerExample hyxqfxStuAnswer = new HyxqfxStuAnswerExample(); hyxqfxStuAnswer.createCriteria().andUserIdEqualTo(userId); List hyxqfxStuAnswersList = hyxqfxStuAnswerMapper.selectByExampleWithBLOBs(hyxqfxStuAnswer); if (CollectionUtils.isEmpty(hyxqfxStuAnswersList)) { return new ResultEntity<>(HttpStatus.OK); }else { JSONObject jsonObject = JSONObject.parseObject(hyxqfxStuAnswersList.get(0).getAnswer()); return new ResultEntity<>(HttpStatus.OK,jsonObject); } } public void jiaoYanCodeSize(String code){ String[] strings = code.split(","); if (strings.length>=20) { //计分规则 } } }