From 20de6611fd78b5509b6ea0658b02a1e664693478 Mon Sep 17 00:00:00 2001
From: whb <17803890193@163.com>
Date: Thu, 24 Apr 2025 18:54:43 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B9=B4=E5=BA=A6=E3=80=81?=
=?UTF-8?q?=E6=9C=88=E5=BA=A6=E6=95=B0=E6=8D=AE=E6=9F=A5=E8=AF=A2=E3=80=81?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=8B=E8=BD=BD=E3=80=81=E8=9B=8B=E7=B3=95?=
=?UTF-8?q?=E6=8C=87=E6=95=B0=E7=AD=94=E6=A1=88=E5=9B=9E=E6=98=BE=E3=80=81?=
=?UTF-8?q?=E5=88=86=E6=9E=90=E5=9B=9E=E6=98=BE=E3=80=81=E5=AE=9E=E8=AE=AD?=
=?UTF-8?q?=E6=8F=90=E4=BA=A4=E3=80=81=E9=87=8D=E6=96=B0=E5=AE=9E=E8=AE=AD?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 15 +-
.../stu/IndustryDemandAnalysisController.java | 175 +++++
.../StuDigitalMarketingModelController.java | 317 +++++++++
.../linkCommerce/entity/HyxqfxStuAnswer.java | 11 +
.../entity/HyxqfxStuAnswerExample.java | 60 ++
.../entity/dto/AnalyzeDataDTO.java | 16 +
.../linkCommerce/entity/dto/AprioriDTO.java | 23 +
.../entity/dto/AssociationRulesDTO.java | 25 +
.../entity/dto/ClusterAnalysisDTO.java | 18 +
.../entity/dto/ClusterScatterPlotDTO.java | 23 +
.../linkCommerce/entity/dto/DSExportDTO.java | 18 +
.../entity/dto/DataPreprocessingDTO.java | 19 +
.../entity/dto/DescriptiveStatistics.java | 50 ++
.../entity/dto/DescriptiveStatisticsDTO.java | 15 +
.../entity/dto/EmotionalAnalysisDto.java | 19 +
.../linkCommerce/entity/dto/KmeansDTO.java | 17 +
.../linkCommerce/entity/dto/LogisticDTO.java | 21 +
.../entity/dto/LogisticPredictDTO.java | 16 +
.../entity/dto/MonthlyCakeIndex.java | 19 +
.../dto/NewDescriptiveStatisticsDTO.java | 48 ++
.../linkCommerce/entity/dto/RAnalysisDTO.java | 16 +
.../entity/dto/RAnalysisExportDTO.java | 16 +
.../entity/dto/RegressionAnalysisDTO.java | 20 +
.../entity/dto/StatisticsDTO.java | 17 +
.../entity/dto/StuIndustryAnalysisDTO.java | 30 +
.../entity/dto/WordFrequencyDTO.java | 14 +
.../entity/dto/YearCakeIndexDto.java | 21 +
.../IndustryDemandAnalysisService.java | 8 +
.../StuDigitalMarketingModelService.java | 28 +
.../IndustryDemandAnalysisServiceImpl.java | 12 +
.../StuDigitalMarketingModelServiceImpl.java | 645 ++++++++++++++++++
.../sztzjy/linkCommerce/util/StringUtils.java | 24 +
.../linkCommerce/util/algorithm/Apriori.java | 288 ++++++++
.../util/algorithm/BaiDuZhiNengYun.java | 41 ++
.../linkCommerce/util/algorithm/Data.java | 11 +
.../linkCommerce/util/algorithm/DataDeal.java | 237 +++++++
.../algorithm/DescriptiveStatisticsUtil.java | 135 ++++
.../linkCommerce/util/algorithm/KMeans.java | 182 +++++
.../util/algorithm/KMeansResult.java | 288 ++++++++
.../util/algorithm/LinearRegression.java | 96 +++
.../util/algorithm/LogisticRegression.java | 57 ++
.../util/algorithm/ResourceFileIoAdapter.java | 23 +
.../util/algorithm/TrainDataSet.java | 50 ++
.../linkCommerce/util/excel/DataListener.java | 183 +++++
.../mappers/HyxqfxStuAnswerMapper.xml | 29 +-
45 files changed, 3386 insertions(+), 10 deletions(-)
create mode 100644 src/main/java/com/sztzjy/linkCommerce/controller/stu/IndustryDemandAnalysisController.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/controller/stu/StuDigitalMarketingModelController.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/AnalyzeDataDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/AprioriDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/AssociationRulesDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/ClusterAnalysisDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/ClusterScatterPlotDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/DSExportDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/DataPreprocessingDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/DescriptiveStatistics.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/DescriptiveStatisticsDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/EmotionalAnalysisDto.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/KmeansDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/LogisticDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/LogisticPredictDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/MonthlyCakeIndex.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/NewDescriptiveStatisticsDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/RAnalysisDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/RAnalysisExportDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/RegressionAnalysisDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/StatisticsDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/StuIndustryAnalysisDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/WordFrequencyDTO.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/entity/dto/YearCakeIndexDto.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/service/IndustryDemandAnalysisService.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/service/StuDigitalMarketingModelService.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/service/impl/IndustryDemandAnalysisServiceImpl.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/service/impl/StuDigitalMarketingModelServiceImpl.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/StringUtils.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/Apriori.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/BaiDuZhiNengYun.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/Data.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/DataDeal.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/DescriptiveStatisticsUtil.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/KMeans.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/KMeansResult.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/LinearRegression.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/LogisticRegression.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/ResourceFileIoAdapter.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/algorithm/TrainDataSet.java
create mode 100644 src/main/java/com/sztzjy/linkCommerce/util/excel/DataListener.java
diff --git a/pom.xml b/pom.xml
index 13a6a9e..9d0f048 100644
--- a/pom.xml
+++ b/pom.xml
@@ -244,14 +244,19 @@
-
-
-
-
-
+
+ com.hankcs
+ hanlp
+ portable-1.8.4
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.3
+
diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/IndustryDemandAnalysisController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/IndustryDemandAnalysisController.java
new file mode 100644
index 0000000..2213df2
--- /dev/null
+++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/IndustryDemandAnalysisController.java
@@ -0,0 +1,175 @@
+package com.sztzjy.linkCommerce.controller.stu;
+
+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.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.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;
+
+
+
+
+ //数据查询
+ @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());
+
+ 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)
+ {
+ //计分规则
+
+
+ }
+
+ }
+
+
+
+}
diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/StuDigitalMarketingModelController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/StuDigitalMarketingModelController.java
new file mode 100644
index 0000000..3b871e3
--- /dev/null
+++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/StuDigitalMarketingModelController.java
@@ -0,0 +1,317 @@
+package com.sztzjy.linkCommerce.controller.stu;
+
+import com.sztzjy.linkCommerce.annotation.AnonymousAccess;
+import com.sztzjy.linkCommerce.entity.*;
+import com.sztzjy.linkCommerce.entity.dto.*;
+import com.sztzjy.linkCommerce.mapper.StuUserCommentMapper;
+import com.sztzjy.linkCommerce.service.StuDigitalMarketingModelService;
+import com.sztzjy.linkCommerce.util.BigDecimalUtils;
+import com.sztzjy.linkCommerce.util.ResultEntity;
+import com.sztzjy.linkCommerce.util.algorithm.Apriori;
+import com.sztzjy.linkCommerce.util.algorithm.KMeans;
+import com.sztzjy.linkCommerce.util.algorithm.LogisticRegression;
+import com.sztzjy.linkCommerce.util.excel.ImportExcelUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.util.*;
+
+import static com.sztzjy.linkCommerce.util.algorithm.KMeans.*;
+import static com.sztzjy.linkCommerce.util.algorithm.KMeansResult.*;
+
+/**
+ * @author tz
+ * @date 2024/6/13 10:43
+ */
+@Api(tags = "数字营销模型")
+@RequestMapping("api/model")
+@RestController
+public class StuDigitalMarketingModelController {
+
+ @Value("${file.path}")
+ private String filePath;
+
+ @Resource
+ StuDigitalMarketingModelService modelService;
+ @Resource
+ StuUserCommentMapper stuUserCommentMapper;
+
+ @ApiOperation("选择指标--下拉框")
+ @PostMapping("/dropdownBox")
+ @AnonymousAccess
+ public ResultEntity dropdownBox(String userId) {
+ List list=modelService.dropdownBox(userId);
+ return new ResultEntity(HttpStatus.OK,"成功",list);
+ }
+
+ @ApiOperation("选择指标--查看指标")
+ @PostMapping("/viewMetrics")
+ @AnonymousAccess
+ public ResultEntity viewMetrics(@ApiParam("用户ID") String userId,
+ @ApiParam("表格名") String tableName,
+ @ApiParam("算法名称") String algorithmName) {
+ List list=modelService.viewMetrics(userId,tableName,algorithmName);
+ return new ResultEntity(HttpStatus.OK,"成功",list);
+ }
+
+
+ @ApiOperation("选择指标--分析数据展示")
+ @PostMapping("/viewAnalyzeData")
+ @AnonymousAccess
+ public ResultEntity viewAnalyzeData(@RequestBody AnalyzeDataDTO analyzeDataDTO) {
+
+ return modelService.viewAnalyzeData(analyzeDataDTO);
+ }
+
+ @ApiOperation("数据预处理")
+ @PostMapping("/dataPreprocessing")
+ @AnonymousAccess
+ public ResultEntity dataPreprocessing(@RequestBody DataPreprocessingDTO dto) {
+
+ String userId = dto.getUserId();
+ String method = dto.getMethod();
+ List