From ba1bb76c8db03697fc4f83aa1c96b9ecaec55e98 Mon Sep 17 00:00:00 2001 From: Cool <747682928@qq.com> Date: Tue, 7 May 2024 18:29:28 +0800 Subject: [PATCH] =?UTF-8?q?Duan=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/DashboardController.java | 30 ++++++++++ .../org/jeecg/duan/java/entity/Ranking.java | 29 +++++++++ .../jeecg/duan/java/mapper/MusicMapper.java | 9 +++ .../jeecg/duan/java/mapper/xml/MusicXml.xml | 5 ++ .../jeecg/duan/java/service/MusicService.java | 11 ++++ .../java/service/impl/MusicServiceImpl.java | 52 ++++++++++++++++ .../java/org/jeecg/duan/scala/Analysis.scala | 59 +++++++++++++++++++ .../main/java/org/jeecg/duan/scala/App.scala | 26 ++++++++ 8 files changed, 221 insertions(+) create mode 100644 system/start/src/main/java/org/jeecg/duan/java/controller/DashboardController.java create mode 100644 system/start/src/main/java/org/jeecg/duan/java/entity/Ranking.java create mode 100644 system/start/src/main/java/org/jeecg/duan/java/mapper/MusicMapper.java create mode 100644 system/start/src/main/java/org/jeecg/duan/java/mapper/xml/MusicXml.xml create mode 100644 system/start/src/main/java/org/jeecg/duan/java/service/MusicService.java create mode 100644 system/start/src/main/java/org/jeecg/duan/java/service/impl/MusicServiceImpl.java create mode 100644 system/start/src/main/java/org/jeecg/duan/scala/Analysis.scala create mode 100644 system/start/src/main/java/org/jeecg/duan/scala/App.scala diff --git a/system/start/src/main/java/org/jeecg/duan/java/controller/DashboardController.java b/system/start/src/main/java/org/jeecg/duan/java/controller/DashboardController.java new file mode 100644 index 0000000..ece5e94 --- /dev/null +++ b/system/start/src/main/java/org/jeecg/duan/java/controller/DashboardController.java @@ -0,0 +1,30 @@ +package org.jeecg.duan.java.controller; + +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import net.sf.json.JSONArray; +import org.jeecg.common.api.vo.Result; + +import org.jeecg.duan.java.service.MusicService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "流行音乐分析平台") +@RestController +@RequestMapping("/cool/music") +@Slf4j +public class DashboardController { + @Autowired + MusicService musicService; + + @GetMapping("/getRanking") + public Result getRanking() throws InterruptedException { + + Thread.sleep(2000); + + return musicService.getRanking(); + } + +} diff --git a/system/start/src/main/java/org/jeecg/duan/java/entity/Ranking.java b/system/start/src/main/java/org/jeecg/duan/java/entity/Ranking.java new file mode 100644 index 0000000..c934679 --- /dev/null +++ b/system/start/src/main/java/org/jeecg/duan/java/entity/Ranking.java @@ -0,0 +1,29 @@ +package org.jeecg.duan.java.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@TableName("comment_list") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="音乐评论排行榜对象", description="流行音乐分析") +public class Ranking { + private static final long serialVersionUID = 1L; + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String name; + + @ApiModelProperty(value = "歌手") + private String singer; + + @ApiModelProperty(value = "评论数") + private Integer comment; +} diff --git a/system/start/src/main/java/org/jeecg/duan/java/mapper/MusicMapper.java b/system/start/src/main/java/org/jeecg/duan/java/mapper/MusicMapper.java new file mode 100644 index 0000000..4d23c37 --- /dev/null +++ b/system/start/src/main/java/org/jeecg/duan/java/mapper/MusicMapper.java @@ -0,0 +1,9 @@ +package org.jeecg.duan.java.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.duan.java.entity.Ranking; + +public interface MusicMapper extends BaseMapper { + +} diff --git a/system/start/src/main/java/org/jeecg/duan/java/mapper/xml/MusicXml.xml b/system/start/src/main/java/org/jeecg/duan/java/mapper/xml/MusicXml.xml new file mode 100644 index 0000000..2fed3bd --- /dev/null +++ b/system/start/src/main/java/org/jeecg/duan/java/mapper/xml/MusicXml.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/system/start/src/main/java/org/jeecg/duan/java/service/MusicService.java b/system/start/src/main/java/org/jeecg/duan/java/service/MusicService.java new file mode 100644 index 0000000..5d17b47 --- /dev/null +++ b/system/start/src/main/java/org/jeecg/duan/java/service/MusicService.java @@ -0,0 +1,11 @@ +package org.jeecg.duan.java.service; + +import net.sf.json.JSONArray; +import org.jeecg.common.api.vo.Result; + + + +public interface MusicService { + + public Result getRanking(); +} diff --git a/system/start/src/main/java/org/jeecg/duan/java/service/impl/MusicServiceImpl.java b/system/start/src/main/java/org/jeecg/duan/java/service/impl/MusicServiceImpl.java new file mode 100644 index 0000000..84cb874 --- /dev/null +++ b/system/start/src/main/java/org/jeecg/duan/java/service/impl/MusicServiceImpl.java @@ -0,0 +1,52 @@ +package org.jeecg.duan.java.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.jeecg.common.api.vo.Result; + +import org.jeecg.duan.java.entity.Ranking; +import org.jeecg.duan.java.mapper.MusicMapper; +import org.jeecg.duan.java.service.MusicService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class MusicServiceImpl extends ServiceImpl implements MusicService { + + @Autowired + private MusicMapper musicMapper; + + @Override + public Result getRanking() { + ComparatorList comparatorList = new ComparatorList(); + List rankings = musicMapper.selectList(null); + JSONArray result = new JSONArray(); + System.out.println(rankings); + Collections.sort(rankings, comparatorList); + for (Ranking ranking : rankings) { + System.out.println("\n\n\n\n\n" + ranking); + JSONObject object = new JSONObject(); + object.put("comment", ranking.getComment()); + object.put("singer", ranking.getSinger()); + object.put("songName", ranking.getName()); + result.add(object); + } + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.setSql("comment=comment- FLOOR( RAND()*100 )"); + musicMapper.update(null,updateWrapper); + + return Result.OK(result); + } +} + +class ComparatorList implements Comparator { + + @Override + public int compare(Ranking o1, Ranking o2) { + return o1.getComment() > o2.getComment() ? 1 : -1; + } +} diff --git a/system/start/src/main/java/org/jeecg/duan/scala/Analysis.scala b/system/start/src/main/java/org/jeecg/duan/scala/Analysis.scala new file mode 100644 index 0000000..cb6d95b --- /dev/null +++ b/system/start/src/main/java/org/jeecg/duan/scala/Analysis.scala @@ -0,0 +1,59 @@ +package org.jeecg.duan.scala + +import com.alibaba.fastjson.{JSONArray, JSONObject} +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper +import org.jeecg.duan.java.entity.Ranking +import org.jeecg.duan.java.mapper.MusicMapper +import org.jeecg.modules.drag.config.common.Result +import org.springframework.beans.factory.annotation.Autowired + + +import java.util.{Collections, Comparator} + +/** + * 这个对象提供了排行榜分析的功能。 + */ +object Analysis { + + @Autowired + private val musicMapper: MusicMapper = null + + /** + * 检索排行榜并根据评论进行排序。 + * + * @return Result 包含根据评论排序的排行榜的 JSON 数组。 + */ + def getRanking: Result[JSONArray] = { + val comparatorList: ComparatorList = new ComparatorList + val rankings: List[Ranking] = null // 从数据库或其他来源获取排行榜 + val result: JSONArray = new JSONArray + System.out.println(rankings) // 用于调试的日志排行榜 + Collections sort(rankings, comparatorList) // 对排行榜进行排序 + for (ranking <- rankings) { + System.out.println("\n\n\n\n\n" + ranking) // 打印每个排名信息,用于调试 + val `object`: JSONObject = new JSONObject + `object`.put("comment", ranking.getComment) // 将评论信息添加到 JSON 对象中 + `object`.put("singer", ranking.getSinger) // 将歌手信息添加到 JSON 对象中 + `object`.put("songName", ranking.getName) // 将歌曲名称添加到 JSON 对象中 + result.add(`object`) // 将 JSON 对象添加到结果数组中 + } + val updateWrapper: UpdateWrapper[Ranking] = new UpdateWrapper[Ranking] + updateWrapper.setSql("comment=comment- FLOOR( RAND()*100 )") // 随机减少评论数量 + musicMapper.update(null, updateWrapper) // 更新数据库中的排行榜评论数量 + return Result.OK(result) // 返回带有排序后排行榜信息的成功结果 + + } + + + private class ComparatorList extends Comparator[Ranking] { + override def compare(o1: Ranking, o2: Ranking): Int = { + if (o1.getComment > o2.getComment) { + 1 + } + else { + -(1) + } + } + } + +} diff --git a/system/start/src/main/java/org/jeecg/duan/scala/App.scala b/system/start/src/main/java/org/jeecg/duan/scala/App.scala new file mode 100644 index 0000000..15ad279 --- /dev/null +++ b/system/start/src/main/java/org/jeecg/duan/scala/App.scala @@ -0,0 +1,26 @@ +package org.jeecg.duan + +import org.apache.log4j.{Level, Logger} +import org.apache.spark.{SparkConf, SparkContext} + +object App extends { + + def main(args: Array[String]): Unit = { + Logger.getLogger("org").setLevel(Level.ERROR) + val conf = new SparkConf().setAppName("wordcount") + val sc = new SparkContext(conf) + + //数据文件从HDFS上读取 + //val rdd = sc.textFile("hdfs://vm1:8020/wordcount") + + //模拟数据 + val data: List[String] = List("abc abc bcd bcd", "111 111 111 111") + sc.parallelize(data) + .flatMap(_.split(" ")) + .map((_, 1)) + .reduceByKey(_ + _) + .sortBy(x => x._2, false) + .map(x => x._1 + "\t" + x._2) + .saveAsTextFile("hdfs://vm1:8020/wordcount") + } +}