1. 项目背景与核心价值
这个基于SpringBoot+Vue的售后管理系统,是专门为电子数码类产品(如NUCT品牌)设计的全流程售后服务平台。我在实际开发中发现,这类系统要同时解决三个核心问题:厂商需要标准化售后流程、客服需要高效工单处理、用户需要透明进度查询。
传统售后管理往往依赖Excel和纸质工单,容易出现进度丢失、责任不清的问题。而现代化售后系统通过工单闭环管理,能将平均处理时效缩短40%以上。这个项目采用前后端分离架构,后端用SpringBoot提供RESTful API,前端用Vue实现动态交互,数据库选用MySQL 5.7+版本。
2. 技术架构解析
2.1 后端技术栈选型
SpringBoot 2.5.x版本是后端核心框架,选择这个版本是因为:
- 相比旧版优化了Actuator端点安全
- 内置Tomcat 9.0支持HTTP/2
- 对JDK11的兼容性更稳定
关键依赖包括:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.18.2</version>
</dependency>
2.2 前端技术方案
Vue 2.6.x作为前端主框架,配合以下核心插件:
- Element UI 2.15.x - 提供专业级UI组件
- axios 0.21.x - 处理HTTP请求
- vue-router 3.5.x - 前端路由管理
特别优化点:
javascript复制// 在main.js中配置axios拦截器
axios.interceptors.request.use(config => {
config.headers['X-Requested-With'] = 'XMLHttpRequest'
return config
})
3. 数据库设计与实现
3.1 核心表结构
工单表(t_work_order)设计要点:
sql复制CREATE TABLE `t_work_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_no` varchar(32) NOT NULL COMMENT '工单编号',
`product_sn` varchar(64) NOT NULL COMMENT '产品序列号',
`fault_type` tinyint(4) NOT NULL COMMENT '故障类型',
`status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_order_no` (`order_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 查询性能优化
针对工单列表查询的复合索引:
sql复制ALTER TABLE t_work_order
ADD INDEX idx_query (status, create_time, fault_type);
4. 核心功能实现
4.1 工单状态机设计
采用状态模式实现工单流转:
java复制public interface OrderState {
void handle(WorkOrder order);
}
@Component
@Scope("prototype")
public class PendingState implements OrderState {
@Override
public void handle(WorkOrder order) {
if (!"CREATED".equals(order.getStatus())) {
throw new IllegalStateException();
}
order.setStatus("PENDING");
}
}
4.2 文件上传服务
使用Spring Content管理售后凭证:
java复制@RestController
public class AttachmentController {
@Autowired
private AttachmentService attachmentService;
@PostMapping("/upload")
public Result upload(@RequestParam MultipartFile file) {
return attachmentService.store(file);
}
}
5. 接口文档规范
采用Swagger UI 3.0生成API文档,关键配置:
java复制@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.nuct.aftersale"))
.build();
}
}
6. 部署与运维
6.1 多环境配置
application-prod.yml关键配置:
yaml复制spring:
datasource:
url: jdbc:mysql://prod-db:3306/aftersale?useSSL=false
username: prod_user
password: ${DB_PASSWORD}
server:
port: 8080
servlet:
context-path: /api
6.2 日志收集方案
使用Logback+ELK栈:
xml复制<appender name="ELK" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>logstash:5044</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
7. 常见问题解决方案
7.1 跨域问题处理
后端CORS配置:
java复制@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.maxAge(3600);
}
}
7.2 性能优化记录
针对工单列表接口的优化措施:
- 添加二级缓存
- 使用DTO投影减少字段
- 分页查询默认限制100条
8. 项目扩展建议
- 增加微信小程序端接入
- 集成物流跟踪接口
- 添加智能客服机器人
- 实现大数据分析看板
我在实际部署时发现,Nginx配置中需要特别注意静态资源缓存策略。建议这样配置:
nginx复制location /static {
alias /var/www/static;
expires 30d;
add_header Cache-Control "public";
}