作为一名在校园里摸爬滚打多年的老学长,我深知每到毕业季或学期末,宿舍楼道里堆满的闲置物品有多让人头疼。从九成新的教材、只用过几次的健身器材,到几乎全新的电子设备,这些物品往往因为缺乏有效的流通渠道而被直接丢弃。这正是我决定开发这个校园闲置交易系统的初衷——用技术手段解决这个看似微小却实际影响每个学生生活的痛点。
传统线下交易方式存在三个致命缺陷:信息传播范围有限(可能只在一个宿舍楼内)、交易效率低下(需要反复约时间看货)、缺乏信任机制(担心买到假货或遇到放鸽子)。而市面上主流二手平台又太过通用,缺乏针对校园场景的特殊优化,比如无法验证学生身份、不支持校内自提点、没有课程教材分类等。
经过对三个毕业班学生的需求调研,我们最终确定了这套技术方案:
采用前后端分离架构不是赶时髦,而是基于三个实际考量:

关键设计决策:放弃使用Spring Session做分布式会话,改用JWT无状态认证。因为校园场景下并发量不会太高(日均UV<5000),且学生设备更换频繁,无状态设计更适合移动端。
采用改良版JWT方案解决三个常见校园场景问题:
java复制// JWT生成核心代码
public String generateToken(User user, String deviceId) {
return Jwts.builder()
.setSubject(user.getUsername())
.claim("userId", user.getId())
.claim("role", user.getRole())
.claim("device", deviceId) // 设备指纹
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 6 * 60 * 60 * 1000))
.signWith(SignatureAlgorithm.HS512, secret)
.compact();
}
针对校园物品特点做了五项优化:
vue复制<!-- 商品表单关键代码 -->
<el-form-item prop="title" label="商品标题">
<el-input
v-model="form.title"
@blur="autoCategory"
placeholder="包含关键词更易被搜索到">
</el-input>
</el-form-item>
<el-form-item label="教材信息" v-if="category==='教材'">
<isbn-input v-model="form.isbn" />
</el-form-item>
在原方案基础上增加了三个重要改进:
用户表新增字段:
sql复制ALTER TABLE user_info ADD COLUMN (
student_id VARCHAR(20) COMMENT '学号',
credit_score TINYINT DEFAULT 100 COMMENT '信用分',
dormitory VARCHAR(50) COMMENT '宿舍楼信息'
);
商品表特殊设计:
订单表状态机设计:
java复制// 使用状态模式处理订单流转
public enum OrderStatus {
PENDING_PAYMENT(0, "待支付") {
@Override
public boolean canChangeTo(OrderStatus status) {
return status == PAID || status == CANCELLED;
}
},
PAID(1, "已支付") {
@Override
public boolean canChangeTo(OrderStatus status) {
return status == COMPLETED || status == REFUNDING;
}
};
// 其他状态省略...
}
针对校园场景的四个高频操作做了特别优化:
在学校机房部署时遇到的三个坑及解决方案:
MySQL被限制公网访问:改用SSH隧道连接
bash复制ssh -L 3306:localhost:3306 username@jumpserver
微信支付证书问题:将pfx证书放在resources/cert目录下,用ClassPathResource加载
CDN加速失效:因为校园网屏蔽了常见CDN域名,改为使用学校提供的静态资源服务器
开发阶段推荐使用这些工具组合:
特别提醒:在校园服务器上慎用JVM监控工具,我们曾因VisualVM占用太多内存被网管警告。
如果用作毕业设计,可以考虑:
我在实际开发中发现,系统最耗时的不是技术实现,而是处理各种校园特殊情况。比如:
这些经验可能不会出现在任何教科书里,但却是项目真正能落地运行的关键。建议开发前至少访谈20个不同年级的学生,了解他们的真实交易习惯。