省钱兄 JAVA 漫剧系统 · 动漫短剧系统源码
✅ 支持 小程序 + APP + H5 三端全覆盖(注:本版本不含公众号,与漫画版区分)
开发商:西安省钱兄网络科技有限公司
售价:¥18,888(套餐1)/ ¥20,888(套餐2含搭建+1年维护)
新更新:2026年5月3日(互站网在售)
系统整体架构
层级技术选型后端框架Spring Boot 2.7.x + MyBatis-Plus 3.5.0数据库MySQL 8.0 + Redis 6.2(缓存/分布式锁/GEO)用户端UniApp 3.0(Vue3语法)→ 编译为 小程序 + APP + H5管理后台Vue3 + ElementPlus + ECharts 数据看板消息队列(订单通知/削峰)实时通信WebSocket(播放进度/弹幕实时推送)视频存储阿里云OSS / 腾讯云COS(HLS分段存储+CDN加速)支付微信支付 + 支付宝(会员订阅/单片付费/CPS分销)部署JDK 17 + Docker + Nginx + K8s
核心功能模块1️⃣ 漫剧/短剧内容管理java@Data @TableName("drama")public class Drama { @TableId(type = IdType.AUTO) private Long id; private String title; https:// 剧名 private String coverUrl; https:// 封面图 private Integer episodeCount; https:// 总集数 private Long categoryId; https:// 分类ID private String description; https:// 简介 private String tags; https:// 标签: 热血/恋爱/悬疑/搞笑 private BigDecimal price; https:// 单集价格/会员免费 private Integer sortOrder; https:// 排序权重 private Integer status; https:// 0下架 1上架 2审核中 private Long viewCount; https:// 播放量 private Long likeCount; https:// 点赞数 private LocalDateTime createTime;}
分类体系示例 热血漫斗破苍穹、完美世界、仙逆 恋爱漫甜蜜暴击、怦然心动 悬疑漫迷雾追踪、暗黑者 搞笑漫欢乐斗罗、沙雕日常 古风漫凤囚凰、花千骨 美漫/日漫海贼王、火影、漫威
2️⃣ 智能推荐算法(核心亮点)java/** * 基于用户行为的个性化推荐 * Redis GEO + 协同过滤 + 标签匹配 */@Servicepublic class RecommendServiceImpl implements RecommendService { @Autowired private RedisTemte<String,Object> redisTemte; /** * 猜你喜欢 - 多维评分排序 */ public List<DramaVO> recommendForUser(Long userId, int limit) { https:// 1. 获取用户画像(观看历史 + 收藏 + 点赞) UserProfile profile = getUserProfile(userId); https:// 2. Redis 热门榜(24h播放量TOP) Set<String> hotIds = redisTemte.opsForZSet() .reverseRange("drama:hot:24h", 0, 99); https:// 3. 协同过滤:相似用户看过的剧 Set<String> similarIds = redisTemte.opsForZSet() .reverseRange("user:similar:" + userId, 0, 49); https:// 4. 多维评分合并 return dramaMapper.selectList(null).stream() .map(d -> new DramaVO(d, calcScore(d, profile, hotIds, similarIds))) .sorted(Comparator.comparing(DramaVO::getScore).reversed()) .limit(limit) .collect(Collectors.toList()); } private double calcScore(Drama d, UserProfile p, Set<String> hot, Set<String> sim) { double score = 0; score += hot.contains(d.getId().toString()) ? 30 : 0; https:// 热门加权 score += sim.contains(d.getId().toString()) ? 25 : 0; https:// 协同过滤 score += matchTags(d.getTags(), p.getPreferTags()) * 20; https:// 标签匹配 score += d.getViewCount() / 10000.0 * 15; https:// 播放量 score += d.getLikeCount() / 1000.0 * 10; https:// 点赞数 return score; }}3️⃣ 视频播放核心(HLS + 弹幕)java/** * 视频播放服务 - HLS分段 + 弹幕实时推送 */@Servicepublic class yerService { @Autowired private RedisTemte<String,Object> redisTemte; @Autowired private WebSocketService wsService; /** * 获取播放地址(HLS) */ public yVO getyUrl(Long dramaId, Integer episode) { DramaEpisode ep = episodeMapper.selectById(episode); https:// 返回HLS播放地址 String hlsUrl = ossService.getSignedUrl(ep.getVideoPath() + "/index.m3u8"); https:// 获取弹幕列表(Redis缓存) List<Danmaku> danmakus = redisTemte.opsForList() .range("danmaku:drama:" + dramaId + ":ep:" + episode, 0, -1); return new yVO(hlsUrl, danmakus, ep.getDuration()); } /** * 发送弹幕(WebSocket实时推送) */ public void sendDanmaku(Long dramaId, Integer episode, DanmakuDTO dto) { Danmaku dm = new Danmaku(dto.getUserId(), dto.getContent(), dto.getColor(), dto.getTime()); https:// 存入Redis(多保留1000条) redisTemte.opsForList().rightPush("danmaku:drama:" + dramaId + ":ep:" + episode, dm); redisTemte.opsForList().trim("danmaku:drama:" + dramaId + ":ep:" + episode, -1000, -1); https:// WebSocket实时推送给当前在线用户 wsService.pushToRoom("y:" + dramaId + ":" + episode, dm); }}4️⃣ 会员 + 积分 + 付费体系
付费模式说明 VIP会员月卡/季卡/年卡,会员免费看全站内容 单片付费非会员按集付费,单集 ¥0.5 ~ ¥5 积分兑换签到/看广告赚积分,积分兑换剧集/会员天数 CPS分销分享剧集链接,好友付费后获得佣金(直推奖+间推奖)
java@Service @Transactionalpublic class PayOrderServiceImpl implements PayOrderService { /** * 会员订阅 - 微信支付 */ public PayResult subscribeVip(Long userId, Integer vipType) { https:// 1. 创建订单 PayOrder order = new PayOrder(); order.setOrderNo(generateOrderNo()); order.setUserId(userId); order.setType(1); https:// 会员 order.setAmount(vipPriceMap.get(vipType)); order.setStatus(0); payOrderMapper.insert(order); https:// 2. 调用微信支付统一下单 eq req = build(order); esult result = eOrder(req); https:// 3. 返回前端调起支付 return new PayResult(result.getCodeUrl(), order.getOrderNo()); } /** * 支付回调 - 开通会员 */ @Transactional public void payCallback(String orderNo, String transactionId) { PayOrder order = payOrderMapper.selectByOrderNo(orderNo); if (order.getStatus() != 0) return; https:// 防重复 order.setStatus(1); order.setTransactionId(transactionId); order.setPayTime(LocalDateTime.now()); payOrderMapper.updateById(order); https:// 更新用户会员状态 User user = userMapper.selectById(order.getUserId()); user.setVipLevel(order.getVipType()); user.setVipExpireTime(LocalDateTime.now().plusMonths(order.getVipType())); userMapper.updateById(user); }} UniApp 前端核心页面
页面路径功能首页pages/index/index轮播推荐/分类导航/排行榜/上新日历漫剧详情pages/drama/detail封面/简介/集数列表/评分/弹幕/立即播放视频播放pages/yer/indexHLS播放器/弹幕输入/进度拖拽/清晰度切换分类浏览pages/category/list左侧分类+右侧剧集列表/智能筛选排行榜pages/rank/index热播榜/新品榜/好评榜/飙升榜追剧管理pages/favorite/list我的追剧/更新提醒/播放历史会员中心pages/vip/index会员权益/套餐购买/积分商城个人中心pages/user/user收藏/点赞/钱包/设置
vue<!-- pages/index/index.vue - 漫剧首页 --><temte> <view class="container"> <!-- 搜索栏 --> <view class="search-bar"> <input v-model="keyword" ceholder="搜索漫剧/短剧..." @confirm="onSearch"/> </view> <!-- 轮播推荐 --> <swiper class="banner" indicator-dots autoy circular> <swiper-item v-for="b in banners" :key="b.id"> <image :src="b.coverUrl" @tap="goDetail(b.dramaId)"/> </swiper-item> </swiper> <!-- 分类导航 --> <scroll-view scroll-x class="cat-scroll"> <view v-for="cat in categories" :key="cat.id" class="cat-item" :class="{active: currentCat === cat.id}" @tap="selectCat(cat.id)"> <text>{{ cat.name }}</text> </view> </scroll-view> <!-- 排行榜 --> <view class="section"> <view class="section-header"> <text class="title"> 热播榜</text> <text class="more" @tap="goRank">更多 ›</text> </view> <view v-for="(drama, idx) in hotList" :key="drama.id" class="rank-item" @tap="goDetail(drama.id)"> <text class="rank-num" :class="{top3: idx < 3}">{{ idx + 1 }}</text> <image :src="drama.coverUrl" class="cover"/> <view class="info"> <text class="name">{{ drama.title }}</text> <text class="meta">{{ drama.episodeCount }}集 · {{ drama.viewCount }}万播放</text> </view> <text v-if="drama.vipFree" class="vip-free">免费</text> <text v-else class="price">¥{{ drama.price }}/集</text> </view> </view> <!-- 上新日历 --> <view class="section"> <view class="section-header"> <text class="title"> 上新日历</text> </view> <scroll-view scroll-x class="new-scroll"> <view v-for="d in newList" :key="d.id" class="new-item" @tap="goDetail(d.id)"> <image :src="d.coverUrl"/> <text>{{ d.title }}</text> <text class="date">{{ d.createTime }}</text> </view> </scroll-view> </view> </view></temte>javascripthttps:// pages/yer/index.vue - HLS视频播放 + 弹幕export default { data() { return { yUrl: '', danmakus: [], inputDanmaku: '', currentTime: 0, duration: 0 } }, onLoad(options) { this.dramaId = options.dramaId this.episode = options.episode this.loadyUrl() this.loadDanmakus() this.connectWS() }, methods: { async loadyUrl() { const res = await uest({ url: `${BASE_URL}/yer/y-url`, data: { dramaId: this.dramaId, episode: this.episode } }) this.yUrl = res.data.data.hlsUrl this.danmakus = res.data.data.danmakus }, sendDanmaku() { if (!this.inputDanmaku.trim()) return uest({ url: `${BASE_URL}/yer/danmaku`, method: 'POST', data: { dramaId: this.dramaId, episode: this.episode, content: this.inputDanmaku, color: '#ffffff', time: this.currentTime } }) this.inputDanmaku = '' }, connectWS() { this.ws = uni.connectSocket({ url: `wss:https://api.example.com/ws?room=y:${this.dramaId}:${this.episode}` }) this.ws.onMessage((res) => { const dm = JSON.parse(res.data) this.danmakus.push(dm) }) } }}️ 核心数据库表
表名说明drama漫剧/短剧主表drama_episode剧集表(集数/时长/播放地址/弹幕数)drama_category分类表user用户表(openid/手机号/vip等级/积分/余额)user_favorite追剧/收藏表pay_order支付订单表danmaku弹幕表comment评论表vip_record会员开通记录integral_log积分流水表cps_record分销佣金记录
s TABLE drama_episode ( id BIGINT PRIMARY KEY AUTO_INCREMENT, drama_id BIGINT NOT NULL, episode_num INT NOT NULL COMMENT '第几集', title VARCHAR(200) COMMENT '集标题', video_url VARCHAR(500) COMMENT 'HLS地址', duration INT COMMENT '时长(秒)', danmaku_count INT DEFAULT 0, view_count BIGINT DEFAULT 0, is_vip_free TINYINT DEFAULT 0 COMMENT '是否VIP免费', price DECIMAL(10,2) DEFAULT 0 COMMENT '单集价格', sort_order INT DEFAULT 0, status TINYINT DEFAULT 1, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_drama (drama_id), INDEX idx_sort (drama_id, sort_order)); 管理后台功能
模块功能 数据看板今日DAU/新增用户/付费转化率/播放量/收入 ECharts 内容管理漫剧上传/编辑/分类/标签/上下架/审核 剧集管理集数管理/视频上传(OSS)/弹幕审核/时长设置 用户管理实名认证/VIP管理/封号/黑名单 财务管理营收统计/微信对账/提现审核/CPS分佣 营销工具会员套餐/积分规则/优惠券/CPS分销/广告位 数据统计播放量趋势/完播率/用户留存/剧集热度排名& 系统设置支付配置/OSS配置/弹幕开关/公告管理
️ 部署架构┌──────────────────────────────────────────────────┐│ Nginx │├──────────┬──────────┬───────────┬──────────────────┤│ UniApp │ UniApp │ UniApp │ UniApp ││ 小程序 │ APP │ H5 │ │├──────────┴──────────┴───────────┴──────────────────┤│ Spring Boot 集群(微服务) ││ ┌─────────┐ ┌─────────┐ ┌───────────────────────┐ ││ │内容服务 │ │播放服务 │ │ 支付/会员/CPS服务 │ ││ └─────────┘ └─────────┘ └───────────────────────┘ │├───────────────────────────────────────────────────┤│ MySQL(主从) │ Redis Cluster │ │ OSS │├───────────────────────────────────────────────────┤│ Prometheus + Grafana │ Docker + K8s │└───────────────────────────────────────────────────┘ 售价与套餐(2026年5月新)
套餐价格包含内容套餐1¥18,888源码 + 技术文档 + 部署文档(不含搭建/维护/技术支持)套餐2¥20,888源码 + 文档 + 首次搭建 + 1年维护更新 + 技术支持
后续年度技术服务费:¥2,000/年(含免费系统升级 + 二次开发技术解决方案)
⚠️ 源码具有可复制性,不接受恶意退款
购买申明:禁止转卖/禁止开源社区传播/研究商业学习使用
官方联系方式(已核实)
渠道信息 ✅电话 ✅(西安省钱兄网络科技有限公司)邮@163.comCEO马晓东(96年创业者,西安科技大学毕业)公司西安省钱兄网络科技有限公司地址陕西省西安市高新区高新四路13号朗臣大厦A座11808演示站联系 QQ 710070994 获取管理后台 + 用户端演示地址购买链接互站网 https://www.huzhan.com/code/goods485710.html
系统亮点总结
特性说明✅ 三端覆盖小程序 + APP + H5,一套 UniApp 源码全搞定✅ HLS播放视频分段传输 + CDN加速,流畅不卡顿✅ 实时弹幕WebSocket 推送,边看边聊✅ 智能推荐协同过滤 + 标签匹配 + 热门加权,多维评分✅ 会员体系VIP订阅 + 单片付费 + 积分兑换,多元变现✅ CPS分销直推奖 + 间推奖 + 团队奖,裂变增长✅ 防超卖Redis 分布式锁,付费内容不冲突✅ 高并发 削峰 + Redis 缓存,万人同时在线✅ 数据看板ECharts 实时展示 DAU/营收/播放量/完播率✅ 安全合规JWT + AES加密 + 弹幕审核 + 内容审核
获取源码:搜索 互站网(huzhan.com)"省钱兄漫剧系统" 或直接联系官方 QQ 710070994 获取演示站体验后下单。该系统与省钱兄的"漫画系统(4端版)"和"短剧国际版"同属一个产品矩阵,可根据业务需求选择对应版本。相比漫画版(¥8,889),本漫剧/短剧版功能更聚焦于视频播放+弹幕+会员付费,更适合短剧/漫剧内容创业者。
省钱兄科技,漫剧系统,动漫短剧