• [交流吐槽] 【CodeArts有病毒?】我真是第一次遇见还有报毒的IDE软件
    这可不是我从什么歪门邪道的地方下载下来的,是你们CodeArts弹出来的自动更新,下载下来的。之前在官网下的,卡巴斯基也一直报毒。尽管我相信这个是没毒的,但是我的安全软件它不认啊。可别说什么加白名单,我相信绝对不止只有我一个会出现这种情况。 
  • [热门活动] 码动泉城 · AI Meetup 济南站
    AI 正在重塑软件开发的底层逻辑。从代码生成到智能体协同,从单工具提效到全链路赋能,“AI + 开发”已经不再是锦上添花的实验,而是每位开发者必须面对的新范式。然而,工具割裂、场景脱节、实践模糊…… 痛点依然存在——我们离真正的“智能开发”还有多远?这个八月,AtomGit 联合华为云 HCDG 走进济南,带来一场聚焦“开源 × AI”落地的技术沙龙。我们邀请了来自一线的技术专家,围绕智能编程助手设计、鸿蒙开发实战、智能体集群开发、生产级 AI Agent 平台等话题,分享亲身实践经验。这不是一场坐而论道的峰会,而是一次开发者之间的深度对话——来泉城,一起“码”出新范式。时间:2026 年 8 月 15 日(星期六)14:00地点:山东省济南市历下区经十路 11001 号 中国人寿大厦北楼 41F 4108扫描海报二维码或点击链接,立即报名 👇  
  • [问题求助] 关于云道码个人使用的相关建议
    首先,要感谢华为公司能提供这款免费工具给大家使用,使用云道码大半年了,总体上使用还是基本可以,从3月份开始使用到现在,云道码是越来越好了,开发人员很给力。但是,对于我们这种非专业的仅仅是业余爱好者来说,都是在慢慢的学习过程,在使用的过程中,官方还是很给力的,很多问题都是比较耐心的解释和回复,个人觉得收费是必须的,毕竟免费的东西都不会长久,更不利于大家的发展,现就具体使用情况来提出建议意见,希望官方适时调整和采纳。一是升级迭代问题。有2次升级后,出现2-3天无法正常使用的情况,有一次是5/6月份(记不清了),这次是最近的这次(7.30号),出现几次无法正常使用的情况,比如:调用错误、自动终止等2-3种情况(本次),其他网友出现的乱码我还没有出现过,对于我们用户说,升级没有任何时限要求,但是要求软件稳定,升级后就不能出现诸多问题,不然我们大家都怕升级的。建议迭代升级要力求软件稳定、可靠,可以不赶时间,但不能出错,1-2个月更新一次也行。建议,官方在这方面适当考虑下,不求升级频率,但求质量稳定。二是功能恢复问题。原来软件支持直接截图后,复制粘贴到对话框内,现在升级后前几个版本就不支持了,必须以本地图片的方式上传,这个不方便和科学啊,我们用户使用不便。建议恢复这个功能。三是词元计费问题。我本身也支持收费,也看了很多网友购买了使用量的抱怨,看起来几千万,但是半天或者一天就给干完了,这确实不科学,虽然官方给的价格不高,但是对于我们来说不低,我一直迟迟没有购买,一直使用免费的,有2个原因。一个是本身我正常上班时间都是在搬砖(吃饭的必要性),工作日大部分时间是无法使用,基本上都是晚上21点左右才能正常使用。还有就是,我看了很多网友买了后,都是几天时间就干完了,不够用,当然这些网友都是买的计量的,不是包月的用户当然吃不消。但是,我计划购买包月的,不过昨天看了下价格还是不便宜啊(如图),为什么个人开发者必须一次性需要购买5个人数啊,还是无法更改的。建议,所有处于新手保护期的人,前3次续费或购买(新手选购或续费时,可以提醒),可以自由选择人数1-5人和时间期限(标注1),保护期3次之后按照现在的计费模式来执行。同时增值特征(标注2)内的内容,可以随时订购和不续约,不受任何时间限制,因为这个功能不是长期性和必要性的。如此购买的人,应该会增加很多。   
  • [问题求助] 对话崩溃白屏
    在VS Code 的codearts agent插件中,对话长一点就崩溃白屏,请问怎么处理? 
  • [问题求助] AMD64的linux版codearts什么时候出
    请问AMD64的linux版codearts什么时候出?插件太容易崩了
  • [交流吐槽] 码道7.30版本太难用了,简单的问题写入文件半天写不明白。
    码道7.30版本太难用了,简单的问题写入文件半天写不明白。这个是真不行,分析问题还行,就到写入文件一直卡着,这次升级体验非常差,以前几分钟的事情,现在哪怕你等个1小时还在写入 卡住。
  • [问题求助] 并发会话数已达上限
    您好!我使用VSCode工具的云道码插件,阅读本地文件后就会提示这些信息{"error_code":"TM.00001041","error_msg":"并发会话数已达上限(3个),请关闭部分会话后重试。"},新开会话也没用。
  • [问题求助] 部分.cs文件无法打开,请修复问题
    部分.cs文件无法打开,请修复问题
  • [交流吐槽] 怎么GLM5.2模型还是200k不是1m上下文?
    怎么时候能变成1m呢?还有准备上k3还是dsv4pro呢
  • HarmonyOS PC端的CodeArts IDE链接数据库报错 command 'huaweicloud.createConnection' not found怎么解决
    HarmonyOS PC端的CodeArts IDE链接数据库报错 command 'huaweicloud.createConnection' not found怎么解决   
  • [问题求助] 一直没敢更新,今天更新后,思考变慢了,一看思考内容全是乱码,早知道不更新了
    一直没敢更新,今天更新后,思考变慢了,点开详情一看,输出的内容全是乱码,早知道不更新了,现在工具完全废了的状态
  • [交流吐槽] 华为云码道(CodeArts)今晚更新什么模型?GLM 5.2还是KIMI K3?
     华为云码道(CodeArts)今晚更新什么模型?GLM 5.2还是KIMI  K3?
  • [问题求助] 码道今天更新吗
    码道今天会更新吗,大概什么时候会更新,会上新模型吗
  • [高校训练营] 基于华为云码道(CodeArts)代码智能体的ForumAdmin:论坛管理系统
    基于华为云码道(CodeArts)代码智能体的ForumAdmin:论坛管理系统一、项目简介本次实战我使用华为云码道(CodeArts)代码智能体完成了 ForumAdmin 论坛管理系统。项目围绕"管理员、版主、会员"三种角色展开,实现了登录、发帖、跟帖、删帖、置顶等论坛基础功能,同时实现了DFA敏感词过滤算法、管理员禁言与用户拉黑双层机制、BCrypt密码加密存储,以及Discourse风格的现代论坛UI,形成了功能完备、权限清晰、内容安全的论坛管理系统。代码仓库:ForumAdmin(GitCode)前端:Vue 3 + Vite + Element Plus + Pinia + Vue Router + Axios后端:Java 17 + Spring Boot 3 + MyBatis-Plus + Sa-Token + BCrypt + Druid数据库:MySQL 9.4ForumAdmin 首页二、原始任务与完成情况原题为:论坛管理。实现论坛的版主管理、版块管理、内容管理。需要登陆进入论坛,可以发帖、跟帖和删帖以及置顶等功能。同时能够对敏感词汇进行过滤,拉黑某些会员。我将原题拆成了可验收的功能项,并为每项建立"页面操作 + 后端权限"的证据闭环:原题要求实现方式对应证据登录进入论坛Sa-Token 会话管理、BCrypt 密码加密、注册、退出登录页、注册页版主管理ADMIN 分配版主;MODERATOR 可进入后台管理版块管理页、角色标签显示版块管理创建、编辑、删除、排序、版主绑定版块管理页内容管理帖子/回复分页管理、置顶、删除帖子列表、帖子详情页发帖登录会员选择版块并发布,发布前完成禁言校验和敏感词过滤发帖弹窗、发帖接口跟帖帖子详情页回复,禁言用户和被拉黑用户不可回复帖子详情页、回复区域删帖作者或管理者可删除;逻辑删除删除按钮、删除接口置顶ADMIN 或 MODERATOR 可置顶/取消置顶,置顶优先排序置顶按钮、帖子列表排序敏感词过滤DFA 算法 O(n) 时间复杂度,词库动态重载敏感词管理页、发帖过滤效果拉黑会员管理员禁言(全站) + 用户拉黑(个人);发帖和回复前后端拦截黑名单页、禁言操作、拉黑按钮三、码道代码智能体开发实录我全程使用华为云码道(CodeArts)代码智能体进行开发,从项目初始化到最终UI改造,智能体深度参与了每个阶段。以下是按时间顺序的开发实录:3.1 项目创建与任务理解在码道代码智能体中创建项目后,我将原始任务描述提交给智能体:"实现论坛的版主管理、版块管理、内容管理。需要登陆进入论坛,可以发帖、跟帖和删帖以及置顶等功能。同时能够对敏感词汇进行过滤,拉黑某些会员。"智能体准确理解了需求,并主动拆解为以下模块:用户认证与权限管理(登录/注册/角色控制)版块管理(CRUD + 版主绑定)帖子与回复(发帖/跟帖/删帖/置顶)敏感词过滤(DFA算法)拉黑会员(用户屏蔽机制)3.2 后端项目搭建智能体一步完成了 Spring Boot 3 后端项目初始化,包括:引入 spring-boot-starter-web、mybatis-plus-spring-boot3-starter、sa-token-spring-boot3-starter、druid-spring-boot-3-starter、spring-security-crypto 等核心依赖配置 application.yml(数据源、MyBatis-Plus逻辑删除、Sa-Token会话参数)创建 Result 统一响应封装和 GlobalExceptionHandler 全局异常处理设计6张数据库表(user / section / post / reply / sensitive_word / user_block),编写 init.sql3.3 前端项目搭建智能体使用 Vite 脚手架创建 Vue 3 前端项目,集成:Element Plus 组件库及图标库Pinia 状态管理(用户token和userInfo持久化)Axios 请求封装(baseURL代理、token拦截器、401自动跳转)Vue Router 路由配置(含登录守卫)3.4 核心功能实现智能体按模块逐步生成完整CRUD代码:5组 Entity + Mapper + Service + Controller:User、Section、Post、Reply、SensitiveWordSa-Token RBAC权限:实现 StpInterface 接口,根据用户uid动态返回角色列表BCrypt密码加密:注册时加密存储,登录时matches验证;DataInitializer启动自动检测并转换明文密码DFA敏感词过滤算法:智能体独立实现了确定有限自动机,包括字典构建、匹配检测、文本替换三个核心方法拉黑与禁言双层机制:新增 user_block 表和 UserBlockController,帖子列表SQL动态过滤被拉黑用户,回复前校验帖子作者是否拉黑了回复人3.5 Bug修复与优化开发过程中遇到多个问题,智能体均快速定位并修复:问题原因智能体解决方案版块名称乱码PowerShell管道传输SQL编码丢失移除SQL初始数据,改用Java DataInitializer自动初始化,确保UTF-8密码明文存储初始实现未加密引入BCryptPasswordEncoder,DataInitializer自动检测并转换后台管理按钮不可见仅ADMIN角色可见扩展为ADMIN和MODERATOR均可进入帖子详情API返回nullgetById不关联查询新增selectDetailById关联查询用户名/版块名/回复数帖子创建标题/内容为空前后端均未校验前端表单验证 + 后端参数非空校验3.6 UI改造智能体根据我确认的Discourse风格方案,完成了全部页面改造:创建公共 AppHeader 组件(白底头部 + Logo + 角色标签 + 管理入口)首页:横向分类标签 + 帖子行(头像+标题+分类标签+回复数)+ 浮动发帖按钮帖子详情:时间线流式回复(圆点+连线)+ 底部固定编辑器登录页:浅灰背景 + 圆角卡片后台管理:白底侧边栏 + 图标菜单配色统一:主背景#fff、链接蓝#0088cc、分类标签彩色3.7 开发效率总结通过码道代码智能体,整个项目从零到功能完备仅用时约2天。智能体在以下方面显著提升了效率:代码生成:后端CRUD、前端页面、API接口等重复性代码一键生成算法实现:DFA敏感词过滤等非平凡算法智能体独立完成Bug修复:编码乱码、密码明文等问题智能体快速定位根因并修复架构决策:技术选型(Sa-Token vs Spring Security)、权限模型设计等智能体给出了合理建议一致性保障:公共组件、统一响应封装、路由守卫等确保了代码风格一致四、系统架构与业务闭环整体架构保持前后端分离,开发模式下前端Vite Dev Server代理后端API:会员 / 版主 / 管理员 │ ▼ Vue 3 + Vite (5173) │ Axios → /api 代理 ▼ Sa-Token 会话认证 │ ├── 用户服务 ── BCrypt 密码验证 ├── 论坛业务服务 ── MyBatis-Plus ── MySQL 9.4 ├── RBAC 权限 ── ADMIN / MODERATOR / MEMBER ├── 敏感词 DFA ── 过滤/替换 └── 拉黑/禁言 ── 帖子过滤 + 回复拦截发帖和回复走统一治理链路:提交内容 → 校验是否被禁言(user.status = 0) → 校验是否被帖子作者拉黑 → DFA 敏感词过滤(替换为 ***) → 保存并返回这种设计确保了:禁言用户无法发帖和回帖;被拉黑用户的帖子不会出现在列表中;被帖子作者拉黑的用户无法回复该帖子;敏感词在保存前即被过滤替换。五、逐项功能实现1. 登录进入论坛系统支持注册、登录和退出。登录成功后前端携带 Sa-Token 的 UUID Token 访问需要授权的接口;密码使用 BCrypt 加密存储。登录页面注册页面登录接口实现:@PostMapping("/login") public Result<Map<String, Object>> login(@RequestBody Map<String, String> params) { User user = userService.login(params.get("username"), params.get("password")); Map<String, Object> data = new HashMap<>(); data.put("token", StpUtil.getTokenValue()); data.put("user", user); return Result.ok(data); } Sa-Token 权限配置,根据用户角色动态返回权限列表:@Component public class SaTokenConfig implements StpInterface { private final UserMapper userMapper; @Override public List<String> getPermissionList(Object loginId, String loginType) { return new ArrayList<>(); } @Override public List<String> getRoleList(Object loginId, String loginType) { List<String> roles = new ArrayList<>(); User user = userMapper.selectById(Long.valueOf(loginId.toString())); if (user != null) { roles.add(user.getRole()); } return roles; } } 2. 版主管理管理员可以在版块管理页为每个版块分配版主(通过 moderatorId 字段)。系统实现了三级角色权限控制:角色前台后台管理说明ADMIN发帖/回帖/删帖/置顶版块管理+用户管理(禁言)+敏感词管理超级管理员MODERATOR发帖/回帖/删帖/置顶可进入后台版主MEMBER发帖/回帖不可进入普通会员前端通过角色标签清晰展示当前用户身份:3. 版块管理系统实现了版块的创建、编辑、删除、排序和版主配置。DataInitializer 在启动时自动检查并修复版块数据,确保中文编码正确:private static final String[][] DEFAULT_SECTIONS = { {"技术交流", "讨论技术相关话题"}, {"生活杂谈", "分享生活点滴"}, {"求助问答", "提出问题寻求帮助"} }; 版块管理页面4. 发帖与跟帖登录会员可以选择版块发布帖子,并在帖子详情页回复。发帖与回复都会先检查禁言状态和拉黑关系,再进行敏感词过滤。发帖接口实现(含校验与敏感词过滤):@PostMapping("/add") public Result<Void> add(@RequestBody Post post) { if (post.getTitle() == null || post.getTitle().trim().isEmpty()) { return Result.fail("标题不能为空"); } if (post.getContent() == null || post.getContent().trim().isEmpty()) { return Result.fail("内容不能为空"); } if (post.getSectionId() == null) { return Result.fail("请选择版块"); } Long userId = StpUtil.getLoginIdAsLong(); User user = userService.getById(userId); if (user.getStatus() == 0) { return Result.fail("您已被禁言,无法发帖"); } post.setUserId(userId); post.setTitle(sensitiveWordService.filter(post.getTitle())); post.setContent(sensitiveWordService.filter(post.getContent())); post.setIsTop(0); postService.save(post); return Result.ok(); } 回复接口实现(含拉黑校验):@PostMapping("/add") public Result<Void> add(@RequestBody Reply reply) { Long userId = StpUtil.getLoginIdAsLong(); User user = userService.getById(userId); if (user.getStatus() == 0) { return Result.fail("您已被禁言,无法回复"); } Post post = postService.getById(reply.getPostId()); if (post != null && userBlockService.hasBlocked(post.getUserId(), userId)) { return Result.fail("帖子作者已拉黑您,无法回复"); } reply.setUserId(userId); reply.setContent(sensitiveWordService.filter(reply.getContent())); replyService.save(reply); return Result.ok(); } 帖子列表关联查询,一次SQL获取用户名、版块名和回复数:@Select("<script>" + "SELECT p.*, u.username, u.nickname, s.name AS section_name, " + "(SELECT COUNT(*) FROM reply r WHERE r.post_id = p.id AND r.is_deleted = 0) AS reply_count " + "FROM post p LEFT JOIN user u ON p.user_id = u.uid LEFT JOIN section s ON p.section_id = s.id " + "WHERE p.is_deleted = 0 " + "<if test='blockedIds != null and blockedIds.size() > 0'>" + "AND p.user_id NOT IN " + "<foreach collection='blockedIds' item='id' open='(' separator=',' close=')'>#{id}</foreach>" + "</if>" + " ORDER BY p.is_top DESC, p.create_time DESC" + "</script>") IPage<Post> selectPageAll(Page<Post> page, @Param("blockedIds") java.util.List<Long> blockedIds); 帖子详情页5. 删帖与置顶作者可以删除自己的帖子,管理员和版主可以执行管理删除。删除采用 MyBatis-Plus 逻辑删除(is_deleted 字段),不会物理清除数据。置顶操作更新 is_top 字段,帖子列表按置顶优先、时间倒序排列。置顶接口:@PutMapping("/top/{id}") public Result<Void> top(@PathVariable Long id, @RequestParam Integer isTop) { postService.setTop(id, isTop); return Result.ok(); } 逻辑删除配置:mybatis-plus: global-config: db-config: logic-delete-field: isDeleted logic-delete-value: 1 logic-not-delete-value: 0 6. 敏感词过滤敏感词管理支持新增、删除和动态重载。过滤算法采用 DFA(确定有限自动机),时间复杂度为 O(n),其中 n 为待过滤文本长度,与敏感词数量无关。DFA 核心实现:@Component public class SensitiveWordFilter { private final Map<Character, Object> dictMap = new HashMap<>(); private static final String REPLACEMENT = "***"; public void loadWords(List<SensitiveWord> words) { dictMap.clear(); for (SensitiveWord sw : words) { String word = sw.getWord().trim(); if (word.isEmpty()) continue; Map<Character, Object> current = dictMap; for (int i = 0; i < word.length(); i++) { char c = word.charAt(i); Object next = current.get(c); if (next == null) { Map<Character, Object> newNode = new HashMap<>(); current.put(c, newNode); current = newNode; } else { current = (Map<Character, Object>) next; } } current.put('\0', null); } } public String filter(String text) { if (text == null || text.isEmpty()) { return text; } StringBuilder result = new StringBuilder(text); for (int i = 0; i < text.length(); i++) { int length = checkSensitiveWord(text, i); if (length > 0) { for (int j = i; j < i + length; j++) { result.setCharAt(j, REPLACEMENT.charAt(0)); } i += length - 1; } } return result.toString(); } @SuppressWarnings("unchecked") private int checkSensitiveWord(String text, int startIndex) { Map<Character, Object> current = dictMap; int length = 0; for (int i = startIndex; i < text.length(); i++) { char c = text.charAt(i); Object next = current.get(c); if (next == null) { break; } length++; current = (Map<Character, Object>) next; if (current.containsKey('\0')) { return length; } } return 0; } } 词库动态重载接口:@GetMapping("/refresh") public Result<Void> refresh() { sensitiveWordService.refreshDict(); return Result.ok(); } 敏感词管理页面7. 拉黑会员系统实现了双层机制:管理员禁言:全站级别,修改 user.status = 0,禁言用户可登录但无法发帖和回帖用户拉黑:个人级别,通过 user_block 表记录,拉黑后看不到对方帖子,对方无法回复自己的帖子操作执行者范围效果禁言管理员全站可登录,但无法发帖、回帖拉黑任何用户个人我看不到他的帖子,他不能回复我的帖子拉黑接口实现:@RestController @RequestMapping("/api/block") @RequiredArgsConstructor public class UserBlockController { private final UserBlockService userBlockService; @PostMapping("/add/{blockedUserId}") public Result<Void> block(@PathVariable Long blockedUserId) { Long userId = StpUtil.getLoginIdAsLong(); userBlockService.block(userId, blockedUserId); return Result.ok(); } @DeleteMapping("/remove/{blockedUserId}") public Result<Void> unblock(@PathVariable Long blockedUserId) { Long userId = StpUtil.getLoginIdAsLong(); userBlockService.unblock(userId, blockedUserId); return Result.ok(); } @GetMapping("/list") public Result<List<UserBlock>> myBlockList() { Long userId = StpUtil.getLoginIdAsLong(); return Result.ok(userBlockService.myBlockList(userId)); } } 帖子列表查询时动态过滤被拉黑用户的帖子:@GetMapping("/list") public Result<IPage<Post>> list(@RequestParam(required = false) Long sectionId, @RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size) { List<Long> blockedIds = Collections.emptyList(); if (StpUtil.isLogin()) { blockedIds = userBlockService.getBlockedUserIds(StpUtil.getLoginIdAsLong()); } if (sectionId != null) { return Result.ok(postService.pageBySectionId(sectionId, page, size, blockedIds)); } return Result.ok(postService.pageAll(page, size, blockedIds)); } 黑名单管理页面8. Discourse 风格 UI系统采用 Discourse 风格的现代论坛 UI 设计,主要特点包括:白底头部:统一的 AppHeader 组件,包含 Logo、用户信息、角色标签、管理入口横向分类标签:版块以彩色标签形式横向排列,点击切换过滤帖子列表:每行显示头像、标题、分类标签、回复数,替代传统表格时间线流式回复:帖子详情页回复以圆点+连线的时间线形式展示底部固定编辑器:回复输入框固定在页面底部,随时可输入浮动发帖按钮:右下角圆形按钮,点击弹出发帖弹窗公共头部组件核心代码:<template> <header class="app-header"> <div class="header-inner"> <div class="header-left" @click="$router.push('/')"> <span class="logo">Forum</span> </div> <div class="header-right"> <span class="user-name">{{ userStore.userInfo?.nickname || '用户' }}</span> <el-tag v-if="userStore.userInfo?.role === 'ADMIN'" type="danger" size="small" effect="dark">管理员</el-tag> <el-tag v-else-if="userStore.userInfo?.role === 'MODERATOR'" color="#e6a23c" size="small" effect="dark" style="color:#fff;border:none">版主</el-tag> <el-tag v-else type="info" size="small" effect="plain">会员</el-tag> <el-button v-if="userStore.userInfo?.role === 'ADMIN' || userStore.userInfo?.role === 'MODERATOR'" text @click="$router.push('/admin')"> <el-icon><Setting /></el-icon> 管理 </el-button> <el-button text @click="$router.push('/blocklist')"> <el-icon><UserFilled /></el-icon> 黑名单 </el-button> <el-button text type="danger" @click="handleLogout"> <el-icon><SwitchButton /></el-icon> 退出 </el-button> </div> </div> </header> </template> 首页帖子列表核心代码:<div v-for="p in posts" :key="p.id" class="post-row" @click="$router.push(`/post/${p.id}`)"> <div class="post-avatar"> <el-avatar :size="36" :style="{ background: sectionColor(p.sectionId) }"> {{ (p.nickname || p.username || '?')[0] }} </el-avatar> </div> <div class="post-body"> <div class="post-title-row"> <el-tag v-if="p.isTop === 1" type="danger" size="small" effect="dark" class="top-tag">置顶</el-tag> <span class="post-title">{{ p.title }}</span> <span class="post-cat" :style="{ background: sectionColor(p.sectionId) + '18', color: sectionColor(p.sectionId) }">{{ p.sectionName }}</span> </div> <div class="post-meta"> <span class="meta-author">{{ p.nickname || p.username }}</span> <span class="meta-dot">·</span> <span class="meta-time">{{ p.createTime }}</span> </div> </div> <div class="post-stats"> <el-icon><ChatDotRound /></el-icon> <span>{{ p.replyCount || 0 }}</span> </div> </div> 首页全貌帖子详情时间线回复六、创新与易用性DFA 敏感词过滤:采用确定有限自动机算法,时间复杂度 O(n)(n为文本长度),与敏感词数量无关;词库支持动态热重载,无需重启服务。拉黑/禁言双层机制:管理员禁言为全站级别(修改 user.status),用户拉黑为个人级别(user_block 表),两者逻辑清晰、互不干扰,分别作用于不同场景。BCrypt 密码加密:使用 BCryptPasswordEncoder 加密存储密码,BCrypt 自带盐值,每次加密结果不同,抗彩虹表攻击。DataInitializer 启动时自动检测并转换明文密码。Discourse 风格 UI:白底头部、横向分类标签、时间线流式回复、底部固定编辑器、浮动发帖按钮,提供现代论坛体验。前后端双重校验:前端表单提交前验证必填项,后端接口同样校验参数非空,避免绕过前端直接提交空数据。数据自动修复:DataInitializer 启动时自动检测并修复中文乱码、明文密码、缺失数据等问题,确保系统开箱即用。七、码道新能力与华为云技术使用使用华为云码道(CodeArts)代码智能体完成全流程开发,从项目搭建、代码生成到功能实现和Bug修复;通过自然语言 Prompt 指导智能体完成数据库设计、CRUD 接口生成、敏感词算法实现、权限配置和 UI 改造;使用浏览器控制能力对 ADMIN、MODERATOR、MEMBER 等真实页面进行验收和截图,避免以 mock 页面冒充后端功能;项目级规则约束技术栈(SpringBoot3 + Vue3)、权限模型(RBAC 三级角色)和内容治理(DFA + 禁言 + 拉黑)。八、测试与验证结果项目完成了前端生产构建和后端编译验证:验证项结果后端编译mvn compile 通过前端生产构建npm run build 通过,所有组件正常打包浏览器真实验收多张页面证据,关键页面功能正常权限验证未登录跳转登录页,MEMBER 不可进入后台验证命令如下:# 后端编译 cd backend mvn compile # 前端生产构建 cd ../frontend npm run build九、本地运行本地开发# 1. 初始化数据库 mysql -u root -p < sql/init.sql # 2. 启动后端 cd backend mvn spring-boot:run # 3. 另开终端启动前端 cd frontend npm install npm run dev访问 http://localhost:5173,后端API端口为 8080。一键启动项目提供了 start.bat 一键启动脚本,双击即可同时启动后端和前端。默认账号账号密码角色adminadmin123ADMINmoderatormod123MODERATORmembermem123MEMBER十、逐项对应评分项项目成果与证据创新易用DFA敏感词O(n)过滤、拉黑/禁言双层机制、BCrypt加密、Discourse风格UI、前后端双重校验、数据自动修复功能完备原题10个功能点全部闭环;登录/注册/发帖/回帖/删帖/置顶/敏感词/禁言/拉黑/版块管理全部实现技术能力码道全流程开发、Sa-Token认证+RBAC、DFA算法、MyBatis-Plus逻辑删除、前后端分离架构文档完整性开发日志、数据库设计、API接口、本地运行说明、默认账号、一键启动脚本完整十一、项目成果总结这次实战让我从"实现一个能发帖的页面",进一步走到了"构建一个权限正确、内容安全、UI现代、开箱即用的论坛系统"。ForumAdmin 已在本地完成核心功能、生产构建验证和真实页面验收;项目同时保留了开发日志、数据库设计、API接口文档和运行说明,方便评审复现。核心成果:6张数据库表:user / section / post / reply / sensitive_word / user_block,支持逻辑删除和自动时间填充DFA敏感词过滤:O(n)时间复杂度,动态词库热重载拉黑/禁言双层机制:全站禁言与个人屏蔽分离,逻辑清晰BCrypt密码加密:启动自动检测并转换明文密码Discourse风格UI:白底头部、横向分类标签、时间线回复、浮动发帖按钮一键启动:start.bat 双击即可运行
  • [高校训练营] 智车云——基于华为云码道的汽车经销商智能经营平台
    智车云:华为云码道辅助构建汽车经销商智能经营平台案例定位:面向汽车经销商集团的 DMS、CRM、F&I 与 BI 一体化智能经营平台技术栈:Java 17、Spring Boot 3、Vue 3、TypeScript、PostgreSQL、Redis、RabbitMQ、MinIO、Docker Compose开发方式:使用华为云码道(CodeArts)代码智能体辅助项目理解、任务拆解、跨文件开发、测试补齐、接口联调与容器化排障案例版本:V1.0编制日期:2026 年 7 月一、概述1.1 案例介绍汽车经销商的经营链路横跨车辆采购、库存周转、客户跟进、报价审批、订单履约、金融保险、收款结算和交付复盘。传统系统往往按部门分散建设,造成同一辆车、同一位客户和同一笔订单在多个系统之间重复录入,库存状态与利润口径不一致,关键经营风险只能依赖人工发现。本案例使用华为云码道(CodeArts)代码智能体,构建了“智车云”汽车经销商智能经营平台。系统以 VIN 为车辆唯一主线、以 客户旅程为成交主线、以 单车利润为经营主线,覆盖经营驾驶舱、车辆库存、客户线索、报价审批、销售订单、金融结算、交付中心、经营分析和 AI 助手等模块。智车云并非只把线下表单搬到网页,而是将关键业务约束落实为系统可执行、可拒绝、可追溯的规则:车辆和订单状态由显式状态机控制,禁止非法越级;低于保护价或综合利润为负的报价必须进入审批;订单和收款使用幂等键防止重复提交;交付前自动生成 14 项检查清单,必要项未完成不能交车;租户、门店、角色和数据范围共同控制数据可见性;关键操作写入状态日志和审计记录;经营驾驶舱与 AI 助手基于真实业务数据生成预警和建议。平台中的“AI 助手”目前采用可解释的规则评分和自然语言查询能力,负责库存、线索和销售数据的查询与经营建议;华为云码道则用于研发阶段的代码理解、生成、测试和调试,两者职责不同。案例亮点本案例不是“生成几个页面”的简单展示,而是以汽车销售真实业务闭环为验收主线:用 VIN 串联车辆全生命周期,用 状态机和幂等机制守住交易一致性,用 利润防火墙和 14 项交付清单固化经营规则,再由 经营驾驶舱与 AI 助手把交易数据转化为可执行建议。华为云码道贯穿需求拆解、跨文件编码、测试补齐、联调排障和容器化验收全过程。1.2 业务问题与建设目标原始问题直接经营后果建设目标验收口径车辆、客户和订单分散记录重复录入、车辆错锁或重复销售,责任链难追溯以 VIN、客户与订单建立统一交易主线同一车辆只能进入一条有效成交链路,状态变化有日志优惠与利润依赖个人经验低价成交后才发现亏损,审批依据不统一将保护价、成本、佣金和优惠固化为利润防火墙低于保护价或综合利润为负时自动标记并阻止无原因提交跟进、收款和交付依赖人工提醒客户流失、重复收款、交付漏项,容易产生投诉使用任务、幂等键和交付清单建立履约门禁重复请求不重复入账,必要检查项未完成不能交车集团与门店数据边界模糊跨门店越权查看,经营口径难统一以租户、门店、角色和数据范围控制可见性普通门店账号只能访问授权范围,关键操作可审计经营数据缺少统一视图库存积压、线索转化和交付风险发现滞后建设经营驾驶舱和分析模块看板指标、图表与业务明细保持一致1.3 适用对象企业开发者:需要构建汽车经销商 DMS、CRM、进销存或多门店经营系统的研发人员;个人开发者:希望学习 Spring Boot、Vue 3、Docker Compose 全栈工程实践的开发者;高校学生:需要完成软件工程、数据库、企业应用开发或智能编码课程设计的学生;架构与产品人员:关注状态一致性、利润管控、多租户、可审计和演示数据设计的人员。1.4 案例时间阅读本文并在本地完成核心功能复现,建议预留约 150 分钟:阶段建议时间环境准备与代码获取20 分钟架构与业务规则理解20 分钟核心功能构建与调试65 分钟容器化部署25 分钟业务验收与复盘20 分钟首次拉取 Docker 镜像或安装依赖时,耗时会受网络环境影响。1.5 案例流程准备华为云码道代码智能体、Docker Desktop 和项目源码;让码道读取项目目录、依赖、领域对象和部署配置,建立共享上下文;按“实体—仓储—服务—接口—前端—测试”的顺序完成业务切片;运行编译、单元测试和接口联调,将错误日志与相关文件交给码道分析;使用 Docker Compose 启动前端、后端及四个基础设施服务;通过经营驾驶舱、利润审批、订单状态、交付清单和 AI 查询完成验收;整理案例文档、演示视频与代码仓库链接并提交。图 1 华为云码道辅助开发闭环如图 1 所示,码道不是一次性生成代码后即结束,而是参与“理解—拆解—实现—验证—修正—交付”的持续闭环。每个任务切片都要求同时给出代码、测试或可复核运行结果;涉及金额、权限、状态迁移和数据删除等高风险决策时,由开发者保留最终确认权。1.6 资源总览资源名称建议规格费用说明华为云码道(CodeArts)代码智能体体验版、基础版或专业版,按实际账号开通以控制台当前套餐和计费规则为准本地开发环境JDK 17、Node.js 20、Docker Desktop、4 核 8 GB 以上本地资源,无额外云费用PostgreSQL、Redis、RabbitMQ、MinIO通过 Docker Compose 启动使用本地容器,无额外云费用可选云开发主机4 vCPU、8 GB 内存、40 GB 系统盘如使用云资源,体验完成后及时释放本案例默认采用本地 Docker Compose,可在不购买数据库、缓存、消息队列和对象存储云服务的情况下完成体验。生产环境应替换演示账号和默认口令,并使用密钥管理服务保存敏感配置。1.7 演示与源码地址演示视频:请替换为审核通过后的公开视频链接源码仓库:请替换为 GitHub、Gitee、GitCode 或 CodeArts Repo 链接本地管理端:http://localhost本地演示账号:admin / 123456演示账号仅用于本地案例体验,请勿在生产环境继续使用该密码。二、环境和资源准备2.1 开通并登录华为云码道注册并登录华为云账号;进入华为开发者空间或华为云码道产品页面;按账号权限开通可用套餐;在华为云码道 IDE、VS Code/JetBrains 插件或码道 CLI 中登录;打开智车云项目根目录,使智能体能够读取 README、前后端源码、数据库迁移和 Docker 配置。涉及文件删除、外部命令执行、敏感信息或生产数据时,应保留人工确认,不开启不必要的自动批准权限。2.2 本地开发环境类别版本或规格用途JavaJDK 17、Maven 3.8+构建 Spring Boot 3.3.6 后端前端Node.js 20、npm构建 Vue 3 + TypeScript 管理端容器Docker Desktop、Docker Compose v2一键启动 6 个服务数据PostgreSQL 17、Redis 7业务持久化、会话和缓存中间件RabbitMQ 3、MinIO领域事件、对象存储可选客户端微信开发者工具运行微信小程序端2.3 获取代码并建立项目上下文git clone <your-repository-url> cd zhiheyun首次让码道读取项目时,不要立即要求其修改代码,可以先使用以下提示词:请先只分析、不修改代码: 1. 阅读 README、backend/pom.xml、frontend/package.json; 2. 阅读 application.yml、docker-compose.yml 和数据库迁移脚本; 3. 总结系统架构、业务域、关键状态机、金额计算和多租户边界; 4. 列出“车辆锁定—订单收款—交付完成”链路涉及的文件; 5. 给出风险清单和最小可验证任务拆解。建议把 README 作为第一层上下文,再按任务引用具体业务文件。一次修改应尽量同时提供领域实体、Repository、Service、Controller、前端 API 和测试文件,避免只根据单文件做出局部正确、全局不一致的实现。2.4 关键配置配置位置关键内容说明backend/src/main/resources/application.yml数据源、Redis、RabbitMQ、MinIO、Sa-Token本地直接运行默认连接 localhostdeploy/docker/docker-compose.yml6 个服务、端口、依赖和数据卷容器内通过服务名互相访问frontend/nginx.conf/api 反向代理将前端 API 请求转发到 backend:8080backend/src/main/resources/db/migrationV1~V6 迁移和演示数据Flyway 启动时按版本自动执行生产环境不得直接提交真实密码、访问密钥或 Token。敏感配置应使用环境变量、密钥管理服务或部署平台的 Secret 能力注入。三、构建智车云应用3.1 总体架构与设计思路智车云采用前后端分离和容器化部署架构:浏览器 / 管理端 │ ▼ Nginx + Vue 3 + TypeScript + Element Plus + ECharts │ REST / JSON ▼ Spring Boot 3 + Sa-Token + Spring Data JPA │ ├── PostgreSQL:交易数据、状态日志、审计数据 ├── Redis:登录会话与缓存 ├── RabbitMQ:领域事件与异步通知 └── MinIO:附件与影像对象存储Nginx 提供静态资源和 API 反向代理;Spring Boot 对外暴露 REST 接口,并通过领域服务承载业务规则;PostgreSQL 保存交易数据,Redis 支撑会话与缓存,RabbitMQ 用于非阻塞领域事件,MinIO 用于附件和影像存储。Flyway 使表结构、字典和演示数据随应用版本演进。图 2 智车云系统总体架构架构设计遵循“页面只表达交互、接口只负责协议、服务承载业务规则、数据库完成最终约束”的分层原则。这样既能让管理端、小程序等不同终端复用同一套规则,也能防止通过绕过前端校验直接修改车辆、订单或收款状态。3.1.1 业务域与模块边界业务域核心对象核心能力组织权限Tenant、Group、Store、Department、User、Role多租户、门店组织、RBAC、数据范围车型与库存Brand、Series、Model、Vehicle、TransferVIN 管理、在途入库、锁定调拨、库存预警客户与线索Customer、Lead、FollowUp、TestDrive销售漏斗、公海池、撞单防护、跟进计划报价与订单Quotation、PriceApproval、Order、OrderChange利润防火墙、审批、订单状态机、变更留痕金融与结算FinanceApplication、Policy、Payment、Invoice、Settlement金融、保险、收退款、发票、单车利润交付与分析DeliveryTask、DeliveryChecklist、DashboardData14 项交付门禁、经营驾驶舱、销售漏斗智能建议AiSuggestion线索评分、库存建议、下一最佳行动3.1.2 数据与状态一致性原则金额字段统一使用 PostgreSQL DECIMAL 与 Java BigDecimal;VIN、订单号、发票号和幂等键由数据库唯一约束或业务校验保护;车辆与订单分别使用显式状态机,终态不可逆;取消订单时释放已锁定车辆;关键操作在同一本地事务中更新主对象和状态日志;非阻塞领域事件用于后续通知和扩展处理;Flyway 同时管理表结构、字典和演示数据,避免环境之间发生结构漂移。3.2 核心功能与旗舰业务闭环3.2.1 功能完备性矩阵功能端状态演示价值登录认证与数据权限管理端已实现验证登录态、角色和数据范围经营驾驶舱管理端已实现展示 KPI、销售漏斗、库存结构和 AI 建议车辆库存管理端已实现展示 VIN、状态、库龄、成本、库位与预警客户线索管理端已实现展示等级、状态、跟进计划、公海流转与认领报价与利润审批管理端已实现验证保护价、综合利润和降价原因销售订单管理端已实现验证状态推进、车辆锁定和订单幂等金融与收款结算管理端已实现验证金融、保险、收款、发票和结算交付控制塔管理端已实现验证交付任务、检查清单和完成门禁经营分析管理端已实现展示销售漏斗和库存状态分布AI 助手管理端已实现使用自然语言查询经营数据和库存建议微信小程序壳客户端已实现基础页面承载看车、预约、订单和个人中心入口3.2.2 端到端旗舰闭环演示时选择一名高意向客户和一辆在库车辆作为贯穿对象:在客户线索中确认手机号撞单结果、当前负责人和下一次跟进时间;选择目标车辆生成报价,系统汇总采购成本、资金占用、附加收入和优惠;制造一次低价报价,验证未填写降价原因时无法提交;审批通过后创建订单并锁定 VIN;使用相同幂等键重复提交,确认系统不会创建第二笔订单;完成收款,验证相同幂等键不会重复入账;交付中心完成 14 项检查,必要项未完成时不能确认交付;订单完成后,收入、成本、毛利和销售漏斗同步进入经营驾驶舱。同一条业务主线同时验证利润、状态、幂等、权限、审计和看板一致性,比逐页介绍菜单更能体现系统完整度。图 3 从线索到经营复盘的端到端旗舰业务闭环图 3 将客户、报价、车辆、订单、收款、交付和经营分析串成一个可重复演示的故事。评审者不仅能看到“功能存在”,还可以观察同一 VIN 的状态如何推进、异常操作如何被拒绝、最终数据如何回流经营看板。3.3 项目结构与代码部署zhiheyun/ ├── backend/ │ └── src/main/ │ ├── java/.../domain # 领域对象 │ ├── java/.../repository # 数据访问 │ ├── java/.../service # 业务规则与事务 │ ├── java/.../state # 车辆、订单状态机 │ ├── java/.../controller # REST 接口 │ └── resources/db/migration ├── frontend/ │ └── src/ │ ├── api # 11 个 API 模块 │ ├── pages # 16 个管理端页面 │ ├── stores # Pinia 状态 │ └── router # 页面路由与鉴权守卫 ├── miniprogram/ # 微信小程序基础页面 └── deploy/ ├── docker/docker-compose.yml └── scripts/start.sh一键启动:# 方式一:使用根目录脚本 ./deploy/scripts/start.sh # 方式二:直接使用 Docker Compose cd deploy/docker docker compose up -d --build 查看容器状态与后端日志:docker compose ps docker compose logs --tail=200 backend健康检查:curl http://localhost:8080/api/actuator/health curl http://localhost:8080/api/v3/api-docs服务入口:服务地址说明管理端http://localhost默认管理员 admin / 123456后端 APIhttp://localhost:8080/api统一上下文路径Swagger UIhttp://localhost:8080/api/swagger-ui.html接口浏览与调试RabbitMQhttp://localhost:15672消息队列管理台MinIOhttp://localhost:9001对象存储管理台3.4 使用华为云码道辅助开发及调试3.4.1 项目理解与任务拆解首次进入项目时,不要求码道直接“生成整套系统”,而是先建立共享上下文:业务目标、工程结构、依赖版本、数据模型、状态机和验收条件。你是本项目的结对开发者。请先只分析、不修改代码: 1. 读取 README、backend/pom.xml、frontend/package.json; 2. 识别业务域、关键状态机、金额计算和多租户边界; 3. 列出“车辆锁定—订单收款—交付完成”链路涉及的文件; 4. 给出风险清单和最小可验证任务拆解。使用原则:先让智能体解释现状,再批准修改;先完成一个可验证的业务切片,再扩展到相邻模块;金额、权限、状态、删除和敏感配置必须人工审查;智能体建议只有在编译、测试和业务验收通过后才视为完成。3.4.2 跨文件实现:利润防火墙报价模块涉及车型保护价、车辆采购成本、资金占用成本、附加收入、优惠、审批单和前端提示,不能只修改单一页面。请完善报价利润防火墙: - 所有金额使用 BigDecimal; - 计算成交总额、预估毛利和综合利润; - 低于车型保护价或综合利润为负时标记风险; - 提交审批前必须校验降价原因; - 补充正常报价、低于保护价、未填原因三个单元测试; - 不改变现有 REST 返回结构。码道根据实体、Repository、Service、Controller、前端 API、页面和测试文件的共同上下文生成跨文件修改建议。人工重点核验空值处理、金额正负号、补贴与置换抵扣方向、采购成本来源、舍入方式和审批状态。核心利润计算示例:BigDecimal grossProfit = total .subtract(purchaseCost) .subtract(fundOccupancyCost); BigDecimal comprehensiveProfit = grossProfit .add(accessoryProfit) .add(financeCommission) .add(insuranceCommission) .add(manufacturerRebate) .subtract(salesCommission); if (comprehensiveProfit.compareTo(BigDecimal.ZERO) < 0) { quotation.setBelowProfitLine(true); } 3.4.3 状态机与边界测试车辆与订单状态转换集中在专用组件中维护,Service 不通过任意字符串直接修改状态:private static final Map<String, Set<String>> TRANSITIONS = Map.of( "IN_STOCK", Set.of("RESERVED", "LOCKED"), "LOCKED", Set.of("CONTRACTED", "RESERVED", "IN_STOCK"), "CONTRACTED", Set.of("PENDING_DELIVERY", "LOCKED"), "PENDING_DELIVERY", Set.of("DELIVERED", "CONTRACTED"), "DELIVERED", Set.of() ); stateMachine.validateTransition(fromStatus, toStatus); 补充测试时使用的提示词:请阅读 OrderStateMachine 和业务枚举,以“任何终态不可逆、 任何草稿不可直接完成”为业务不变量,补充 JUnit 5 测试。 测试名称使用中文 DisplayName,不启动 Spring 容器。项目包含 5 个核心测试类、32 个业务单元测试:测试类用例数重点覆盖OrderStateMachineTest5合法流转、终态保护、禁止越级完成VehicleStateMachineTest6入库、锁定、释放、交付终态CustomerServiceTest6手机号撞单、公海移入/认领、跟进计数QuotationServiceTest6金额计算、保护价、审批前置条件VehicleServiceTest9VIN 唯一、成本合计、库龄预警、租户校验3.4.4 前后端接口联调联调时将浏览器 Network 中的请求 URL、状态码、响应体和后端异常栈一并提供给码道,并同时引用前端 API 封装、类型定义、Controller 和统一返回结构。现象根因或诊断方向修正位置前端请求出现 /api/apiAxios baseURL 与 Nginx proxy_pass 重复拼接request.ts、nginx.conf登录后仍跳回登录页Token 名称、Pinia 持久化或路由守卫不一致auth store、router、Sa-Token 配置图表显示 0 或空白Dashboard DTO、统一响应 data 层级或 ECharts 映射错误AnalyticsController、analytics API、DashboardPage枚举状态显示英文缺少前端状态映射页面组件与类型定义后端健康检查短暂为 DOWNRabbitMQ 尚未完成启动,应用健康检查已开始探测容器依赖、重试与就绪检查对于修复建议,必须重新执行接口请求和页面操作,确认问题能够复现、修复后消失且没有引入回归。3.4.5 容器与数据库调试常见故障按照以下顺序排查:Docker Desktop 是否已启动;PostgreSQL、Redis、RabbitMQ、MinIO 是否健康;Flyway V1~V6 是否完成迁移;Spring Boot 是否启动并连接到中间件;Nginx 是否正确代理 /api;前端页面是否拿到正确响应。容器内服务地址必须使用 postgres、redis、rabbitmq 和 minio 等 Compose 服务名,不能使用 localhost。3.4.6 CodeArts 贡献与人工把关任务切片码道主要产出人工决策可追溯证据理解工程目录地图、业务域、依赖版本、风险清单以源码为准纠正文档差异README、pom.xml、package.json、领域目录利润防火墙跨实体、服务、接口、页面和测试的修改建议确认金额方向、保护价、舍入和审批口径QuotationService、QuotationServiceTest状态机与幂等合法/非法转换矩阵和重复请求边界拒绝绕过 Service 直接改状态Vehicle/OrderStateMachine、PaymentService前后端联调根据 Network、异常栈和配置定位问题复现问题,只接受回归通过的修正request.ts、nginx.conf、Controller、运行日志演示数据按外键依赖组织迁移和数据检查清单检查数量、日期、状态、金额和看板一致性Flyway V1~V6本案例没有生产工时采集数据,因此不虚构固定的“效率提升百分比”。码道的贡献以可复核产出衡量:任务是否拆清、跨文件命名是否一致、边界测试是否补齐、错误是否能通过日志定位并完成回归。涉及金额、权限、状态和数据删除时,始终由开发者最终确认。3.5 核心技术难点与解决思路3.5.1 跨对象状态一致性难点不在于保存一个状态字段,而在于保证所有入口遵循相同规则,并处理取消、退回和终态。解决方案是把状态转换从 Controller 和页面中抽离到状态机,Service 只调用 validateTransition,再在同一事务中保存业务对象和状态日志。3.5.2 金额精度与利润口径利润计算涉及车价、现金优惠、精品、金融、保险、上牌、延保、置换、厂家补贴、采购成本和资金占用成本。使用 BigDecimal 只是基础,还必须统一空值、舍入、币种、计算顺序和公式版本。3.5.3 多租户与数据权限应用层隔离最常见的问题是新 Repository 方法遗漏 tenantId。当前方案使用租户字段、服务层归属校验、角色数据范围上下文和审计日志;生产环境还应评估 PostgreSQL Row-Level Security、复合唯一索引和跨租户自动化测试。3.5.4 重复提交与并发幂等前端重复点击、网络重试或消息重复消费均可能产生重复数据。订单和收款使用 idempotencyKey 查询拦截,并建议在数据库建立 tenant_id + idempotency_key 唯一索引,将“查询—创建”放入一个事务,由唯一约束完成最终保护。3.5.5 消息可靠性普通站内通知不是主交易的强依赖,因此当前发布失败只记录告警,不回滚车辆或订单。如果事件被用于库存同步、财务记账等关键场景,应升级为 Outbox:业务事务写入事件表,后台可靠投递,消费者使用 eventId 幂等处理,并配置重试和死信队列。3.5.6 演示数据的业务一致性单纯增加记录数量不会让演示更可信。数据必须围绕业务故事组织:高意向但久未跟进的客户触发建议;超过 90 天的车辆触发库存预警;低价报价触发审批;待交付订单展示检查清单;已完成订单支撑利润和漏斗分析。数据之间的日期、状态、金额和外键必须互相一致。Flyway V1~V6 脚本负责结构、基础数据、大规模数据和展示场景的版本化管理。3.6 测试、异常处理与验收3.6.1 代码级验证# 后端单元测试 cd backend mvn test # 前端生产构建 cd ../frontend npm install npm run build # 容器构建与启动 cd ../deploy/docker docker compose up -d --build 3.6.2 健康与运行验收检查项命令或入口通过标准容器状态docker compose psPostgreSQL 为 healthy,其余服务为 Up后端健康GET /api/actuator/healthHTTP 200,status=UPAPI 文档/api/swagger-ui.html页面正常加载并列出业务接口管理端http://localhost登录后进入经营驾驶舱,图表正常渲染数据库迁移后端日志、flyway_schema_historyV1~V6 均成功,无 checksum 冲突消息与对象存储15672、9001 管理台控制台可访问,服务无持续错误3.6.3 核心业务验收场景操作预期结果车辆状态尝试将 LOCKED 直接改为 DELIVERED接口拒绝并返回非法状态转换利润防火墙创建低于保护价的报价,不填写原因直接提交标记风险,提交审批被拒绝订单幂等使用相同幂等键连续创建订单第二次请求提示订单已存在收款幂等使用相同幂等键连续收款第二次请求被拦截,实收金额不重复增加交付门禁必要清单未完成时确认交付提示剩余项数,任务不能完成公海客户客户转入公海后由其他销售认领负责人更新,公海标识清除看板数据切换订单或车辆状态后刷新看板KPI、漏斗和库存分布与明细一致3.6.4 项目与演示数据当前工程和演示环境包含:8 个主要业务域;59 张数据库表;40 个领域类;16 个管理端页面和 11 个前端 API 模块;4 家门店、40+ 名员工;8 个品牌、18 个车系和 18 个车型;125 辆车辆、80+ 位客户;多状态销售订单、收款、发票、金融、保险、交付和结算数据;5 个测试类、32 个核心业务单元测试;前端、后端、PostgreSQL、Redis、RabbitMQ、MinIO 共 6 个容器服务。演示的亮点不在数据量本身,而在数据可以触发真实经营规则:超期线索产生跟进建议、长库龄车辆触发预警、低价报价进入审批、重复请求被拦截、未完成检查项不能交付,最终看板与交易明细保持一致。3.7 运行效果登录系统后可以依次完成以下演示:经营驾驶舱:查看在库车辆、新线索、待交付订单、超期库存、销售漏斗、库存分布和 AI 建议;图 4 经营驾驶舱:核心 KPI、销售漏斗、库存结构与 AI 经营建议看板不是独立维护的静态数字,而是交易数据的聚合视图。演示时可先记录 KPI,再切换车辆或订单状态并刷新页面,验证明细变化能够同步反映到驾驶舱。车辆库存:查看 VIN、状态、库龄、采购成本、总成本、库位和合格证;图 5 VIN 级车辆库存:状态、成本、库位和合格证统一管理每一行库存都对应一辆真实 VIN 车辆。车辆从在途、在库、锁定到已交付的状态变化受到状态机约束,采购成本与总成本则为报价利润校验和单车结算提供统一口径。客户线索:查看客户来源、等级、状态、最近跟进和下次计划;销售订单:查看订单金额、已付金额、业务状态和推进操作;交付控制塔:查看计划交付日期、检查进度和标准化清单;图 6 标准化交付检查清单:必要项未完成不得确认交付系统默认生成覆盖证照、车辆、随车物品和仪式准备等类别的 14 项清单。它既是操作指引,也是系统门禁:前端显示完成进度,后端再次校验必要项,避免只靠页面按钮控制业务结果。经营分析:切换销售漏斗与库存分析;AI 助手:输入“哪些车辆库存超过 90 天”,系统返回真实超期库存数据,并展示清库与跨店调拨建议。图 7 AI 经营助手:以自然语言查询真实业务数据并生成可解释建议AI 助手的回答来自系统库存、线索与销售数据,而非预置一段固定文案;右侧建议卡同时呈现触发车辆、库龄、建议动作和评分。演示时可继续追问具体 VIN、库龄区间或门店范围,体现从“看数据”到“做决策”的闭环。图 8 工程规模与可复核验收证据图 8 给出的数字来自当前工程结构、数据库迁移和自动化测试结果,用于说明案例的完成度,而不是用无法追溯的“效率提升百分比”包装成果。评审者可通过源码目录、Flyway 记录、测试报告、容器状态和健康接口逐项复核。3.8 总结、已知局限与展望智车云将汽车经销商分散的库存、客户、销售、财务和交付数据整合为统一经营平台,并将关键业务规则落实为可执行、可拒绝、可追溯的系统约束。华为云码道代码智能体在项目理解、任务拆解、跨文件开发、测试生成、接口联调和容器化排障过程中提供了有效辅助,使复杂全栈业务系统能够更快完成开发、验证和交付。已知局限:当前案例默认使用本地 Docker Compose,尚未提供长期稳定的生产公网地址;平台内置 AI 助手当前以规则评分和经营数据查询为主,不等同于通用大模型智能体;多租户隔离以应用层校验为主,生产环境仍需统一 Repository 过滤策略并评估数据库 RLS;普通领域事件采用非阻塞发送,关键业务事件尚未实现完整 Outbox;演示账号和默认密码仅适用于本地体验;生产环境仍需补充 HTTPS、密钥托管、备份恢复、监控告警和压力测试。后续可将平台 AI 助手接入企业知识库和大模型推理服务,同时保留确定性规则作为安全兜底;还可将本地 PostgreSQL、Redis、RabbitMQ 和 MinIO 替换为对应云服务,构建面向生产环境的高可用部署方案。四、释放资源4.1 停止本地项目cd deploy/docker # 停止并移除容器与网络,保留数据库等数据卷 docker compose down # 确认不再需要演示数据时,才删除数据卷 docker compose down -v docker compose down -v 会删除 PostgreSQL、Redis、RabbitMQ、MinIO 等数据卷,演示数据将无法直接恢复。仅在确认无需保留时执行。4.2 释放可选云资源如果复现过程中使用了云开发主机、ECS、弹性公网 IP 或数据盘,应在体验结束后:备份需要保留的数据库和日志;停止或删除云服务器和额外数据盘;释放不再使用的弹性公网 IP;删除临时访问密钥和测试账号;检查安全组是否仍存在不必要的放通规则;在费用中心确认没有持续计费资源。五、扩展资料与复现指引5.1 项目内资料资料位置用途项目说明README.md能力、架构、业务域、启动方式和演示数据后端依赖backend/pom.xmlSpring Boot 和依赖版本数据库模型backend/src/main/resources/db/migration表结构、字典和演示数据部署编排deploy/docker/docker-compose.yml本地全栈部署自动化测试backend/src/test/java32 个核心业务用例前端代码frontend/src页面、API、状态管理和路由5.2 推荐复现路径先看演示:通过演示视频了解驾驶舱、库存、客户、订单、交付、分析和 AI 助手;再运行项目:阅读根目录 README,使用 Docker Compose 启动完整环境;理解业务规则:重点阅读车辆状态机、订单状态机、报价利润和交付服务;验证质量:运行后端测试和前端生产构建;复现异常路径:验证非法状态、负利润、重复订单、重复收款和未完成交付清单;阅读迁移脚本:理解演示数据如何围绕业务故事组织;尝试二次开发:使用码道新增业务字段、接口、页面和测试,并完成回归。5.3 开源内容边界公开仓库应提供复现本案例所需的应用源码、测试、部署脚本和说明文档。个人凭据、真实客户数据、本地开发工具配置、运行期日志和数据库数据文件不得提交到公开仓库。提交案例前建议依次核验:代码仓库无需特殊权限即可访问;演示视频无需登录或提取码即可播放;README 中的启动命令能够在全新环境复现;演示账号不包含真实个人数据;文档中的数量、功能状态和测试结果与当前源码一致;所有密钥、Token、密码和私有地址均已清理。六、 演示demo链接https://www.bilibili.com/video/BV1dFg96MEPL/?vd_source=ac4e7ae16e8e5366bd0510ab13603e8d
总条数:697 到第
上滑加载中