## 功能说明
提供小区列表查询、资源分配、分配历史与使用记录查询接口,支持按名称搜索、分配前二次确认逻辑。
## 文件位置
- Controller: src/controller/smsCommunityController.ts
- Service: src/service/smsCommunityService.ts
- Model: src/model/smsCommunityModel.ts
## 接口定义
- 请求方式: GET
- 路径: /api/v1/sms/platform/:platformId/communities
- 请求参数: query keyword?:string, page:number=1, pageSize:number=20
- 响应格式:
```json
{"code":200,"data":{"list":[{"communityId":1,"communityName":"小区A","remainingCount":800,"usedTotal":200,"usedThisMonth":50,"createdAt":"2024-08-01"}],"total":1,"alertCount":1},"message":"success"}
```
- 请求方式: POST
- 路径: /api/v1/sms/community/:communityId/allocate
- 请求参数:
```json
{"platformId":1,"method":1,"amount":100,"convertRate":0.1,"count":1000,"effectiveStart":null,"effectiveEnd":null,"remark":"按金额分配","confirm":true}
```
- 响应格式:
```json
{"code":200,"data":{"beforeRemaining":0,"afterRemaining":1000,"platformAvailableAfter":3800,"allocatedUnusedAfter":2200},"message":"success"}
```
- 请求方式: GET
- 路径: /api/v1/sms/community/:communityId/alloc/history
- 请求参数: query page=1, pageSize=20
- 响应格式:
```json
{"code":200,"data":{"list":[{"method":1,"count":1000,"amount":100,"convertRate":0.1,"beforeRemaining":0,"afterRemaining":1000,"effectiveStart":null,"effectiveEnd":null,"remark":"备注","operator":"ops","createdAt":"2024-09-01"}],"total":1},"message":"success"}
```
- 请求方式: GET
- 路径: /api/v1/sms/community/:communityId/usage
- 请求参数: query page=1, pageSize=20
- 响应格式:
```json
{"code":200,"data":{"list":[{"pushTime":"2024-09-01 10:00","pushName":"通知A","content":"内容","status":1,"successCount":95,"failCount":5}],"total":1},"message":"success"}
```
## 数据库操作
- 涉及表: sms_community_quota, sms_community_alloc_log, sms_community_usage, sms_platform_resource
- SQL示例:
- 列表: SELECT ... FROM sms_community_quota WHERE platform_id=? AND community_name LIKE ? ORDER BY created_at DESC LIMIT ?,?;
- 计算本月使用: SUM(used_count) from usage filtered by month (可预聚合或视图)。
- 分配: UPDATE sms_platform_resource SET remaining_count=remaining_count-? WHERE platform_id=? AND remaining_count>=?;
- 更新小区: UPDATE sms_community_quota SET allocated_total=allocated_total+?, remaining_count=remaining_count+? WHERE community_id=?;
- 写日志: INSERT INTO sms_community_alloc_log(...);
- 使用查询: SELECT ... FROM sms_community_usage WHERE community_id=? ORDER BY push_time DESC LIMIT ?,?;
## 业务逻辑
1. 参数校验: method∈{1,2}; amount/count/convertRate>0; confirm=true方可提交;community与platform匹配校验。
2. 权限检查: 运营角色 required。
3. 数据处理:
- 列表: 过滤keyword; 计算alertCount=剩余<1000条数;返回历史使用总计、本月使用(需按usage聚合)。
- 分配: 根据method计算缺省字段(按金额时count=round(amount*convertRate);按条数时amount=round(count/convertRate,2)); 使用最终用户输入值为准;检查平台剩余可分配(remaining-已分配未使用)≥count;二次确认标志校验;扣减平台remaining_count并增加已分配未使用(通过小区记录实现);更新小区remaining/allocated_total;写入alloc_log;返回最新平台可分配与已分配未使用。
- 历史/使用: 按时间倒序分页返回全字段。
4. 返回结果: 统一code/message;分配成功返回前后值与平台剩余。
## 错误处理
- 400: 参数错误 - method非法/必填字段缺失/数值<=0/confirm=false
- 403: 无权限 - 非运营角色
- 404: 数据不存在 - communityId或platformId无效
- 409: 余额不足 - 平台剩余可分配不足或小区记录锁失败
## 验收标准
- [ ] 接口能正常调用并返回预期数据
- [ ] 参数校验正确
- [ ] 错误处理完善
105【后端】小区资源配置、历史与使用接口开发
任务描述
由谁创建
邹鹏 于 2025-12-15 18:15:13
由谁完成
由谁取消
由谁关闭
关闭原因
最后编辑
最初预计
12 h
总计消耗
0 h
预计剩余
12 h
预计开始
实际开始
截止日期