本文档描述了从 alien-store(app端商户)迁移到 alien-store-platform(web端商户)的获取店铺今日收益接口。
接口描述:查询指定店铺在当天(00:00:00 至 23:59:59)的总收益,包括所有收入类型(代金券、团购等),返回格式化后的金额(单位:元)。
GET /alienStore/storeIncomeDetailsRecord/todayIncome?storeId=102StoreIncomeDetailsRecordController.todayIncome()StoreIncomeDetailsRecordServiceImpl.todayIncome()GET /alienStorePlatform/storeManage/getTodayIncome?storeId=102StoreManageController.getTodayIncome()StoreManageServiceImpl.getTodayIncome()Query 参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| storeId | Integer | 是 | 店铺ID |
请求示例:
GET /alienStorePlatform/storeManage/getTodayIncome?storeId=102
成功响应:
{
"code": 200,
"msg": "查询成功",
"data": "1234.56",
"success": true
}
说明:
data 字段为字符串类型"0.00" - 今日无收益"123.45" - 今日收益123.45元"10000.00" - 今日收益10000元失败响应:
{
"code": 500,
"msg": "{错误信息}",
"data": null,
"success": false
}
LambdaQueryWrapper<StoreIncomeDetailsRecord> wrapper = new LambdaQueryWrapper<>();
LocalDate today = LocalDate.now();
wrapper.eq(StoreIncomeDetailsRecord::getStoreId, storeId)
.ge(StoreIncomeDetailsRecord::getCreatedTime, today + " 00:00:00")
.le(StoreIncomeDetailsRecord::getCreatedTime, today + " 23:59:59");
List<StoreIncomeDetailsRecord> incomeList = storeIncomeDetailsRecordMapper.selectList(wrapper);
查询条件:
时间范围说明:
createdTime 归属日期int totalIncome = 0;
if (incomeList != null && !incomeList.isEmpty()) {
totalIncome = incomeList.stream()
.mapToInt(StoreIncomeDetailsRecord::getMoney)
.sum();
}
计算规则:
money 字段(单位:分)空值处理:
totalIncome = 0totalIncome = 0String incomeStr = new BigDecimal(totalIncome)
.divide(new BigDecimal(100), 2, RoundingMode.DOWN)
.toString();
转换规则:
totalIncome(单位:分,int类型)incomeStr(单位:元,String类型)示例:
| 原始值(分) | 转换后(元) | 说明 |
|---|---|---|
| 0 | "0.00" | 无收益 |
| 100 | "1.00" | 1元 |
| 12345 | "123.45" | 123.45元 |
| 123456 | "1234.56" | 1234.56元 |
| 99999 | "999.99" | 999.99元 |
| 1000099 | "10000.99" | 10000.99元 |
舍入示例:
| 原始值(分) | DOWN模式 | HALF_UP模式(对比) |
|---|---|---|
| 12344 | "123.44" | "123.44" |
| 12345 | "123.45" | "123.45" |
| 12346 | "123.46" | "123.46" |
注:本接口使用 DOWN 模式,直接截断小数部分,不进行四舍五入。
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| store_id | INT | 店铺ID |
| income_type | INT | 收入类型(0:全部, 1:代金, 2:团购) |
| business_id | INT | 业务ID(优惠券ID或团购ID) |
| money | INT | 收入金额(单位:分) |
| commission | INT | 手续费(单位:分) |
| user_order_id | INT | 用户订单ID |
| cash_out_id | INT | 提现记录ID(提现后才有值) |
| delete_flag | INT | 删除标记(0:未删除, 1:已删除) |
| created_time | DATETIME | 创建时间(收益到账时间) |
| updated_time | DATETIME | 更新时间 |
重要索引:
id)idx_store_created (store_id, created_time)idx_created_time (created_time)说明:
money 字段存储的是收入金额(不含手续费)commission 字段存储的是平台手续费money - commissionmoney 字段总和(收入金额)请求:
GET /alienStorePlatform/storeManage/getTodayIncome?storeId=102
数据库数据(假设今天是2025-01-15):
| id | store_id | income_type | money(分) | created_time |
|---|---|---|---|---|
| 1 | 102 | 1 | 5000 | 2025-01-15 10:30:00 |
| 2 | 102 | 2 | 8000 | 2025-01-15 14:20:00 |
| 3 | 102 | 1 | 3456 | 2025-01-15 18:45:00 |
计算过程:
响应:
{
"code": 200,
"msg": "查询成功",
"data": "164.56",
"success": true
}
请求:
GET /alienStorePlatform/storeManage/getTodayIncome?storeId=102
数据库数据:
响应:
{
"code": 200,
"msg": "查询成功",
"data": "0.00",
"success": true
}
说明:收益按 created_time 归属日期
数据库数据:
| id | store_id | money(分) | created_time |
|---|---|---|---|
| 1 | 102 | 5000 | 2025-01-14 23:59:59 |
| 2 | 102 | 8000 | 2025-01-15 00:00:00 |
| 3 | 102 | 3456 | 2025-01-15 23:59:59 |
| 4 | 102 | 2000 | 2025-01-16 00:00:00 |
2025-01-15 的收益:
响应(查询日期:2025-01-15):
{
"code": 200,
"msg": "查询成功",
"data": "114.56",
"success": true
}
数据库数据:
| id | store_id | income_type | money(分) | created_time | 说明 |
|---|---|---|---|---|---|
| 1 | 102 | 1 | 5000 | 2025-01-15 10:00:00 | 代金券 |
| 2 | 102 | 2 | 8000 | 2025-01-15 14:00:00 | 团购 |
| 3 | 102 | 0 | 2000 | 2025-01-15 18:00:00 | 其他 |
统计结果:
响应:
{
"code": 200,
"msg": "查询成功",
"data": "150.00",
"success": true
}
alien-store-platform/src/main/java/shop/alien/storeplatform/controller/StoreManageController.javaalien-store-platform/src/main/java/shop/alien/storeplatform/service/StoreManageService.javaalien-store-platform/src/main/java/shop/alien/storeplatform/service/impl/StoreManageServiceImpl.javaalien-entity/src/main/java/shop/alien/entity/store/StoreIncomeDetailsRecord.javaalien-entity/src/main/java/shop/alien/mapper/StoreIncomeDetailsRecordMapper.java前置条件:
今日有收入记录
curl -X GET "http://localhost:8080/alienStorePlatform/storeManage/getTodayIncome?storeId=102"
期望结果:
"123.45"前置条件:
今日无收入记录
curl -X GET "http://localhost:8080/alienStorePlatform/storeManage/getTodayIncome?storeId=102"
期望结果:
{
"code": 200,
"data": "0.00",
"success": true
}
测试步骤:
期望结果:
前置条件:
期望结果:
验证不同金额的格式化:
| 数据库值(分) | API返回(元) |
|---|---|
| 0 | "0.00" |
| 1 | "0.01" |
| 10 | "0.10" |
| 100 | "1.00" |
| 999 | "9.99" |
| 12345 | "123.45" |
| 1000000 | "10000.00" |
created_time 归属日期,不受查询时间影响本接口统计所有收入类型:
| income_type | 说明 |
|---|---|
| 0 | 全部/其他 |
| 1 | 代金券 |
| 2 | 团购 |
money 字段(收入金额)commission 字段(手续费)示例:
收入金额(money): 10000分 = 100.00元
手续费(commission): 300分 = 3.00元
实际到账: 9700分 = 97.00元
本接口返回: "100.00"(收入金额)
delete_flag=1 的记录数据库索引:
CREATE INDEX idx_store_created ON store_income_details_record(store_id, created_time);
查询优化:
created_time(记录创建时间)| 功能 | 原接口(alien-store) | 新接口(alien-store-platform) |
|---|---|---|
| 今日收益 | /alienStore/storeIncomeDetailsRecord/todayIncome |
/alienStorePlatform/storeManage/getTodayIncome |
| Controller | StoreIncomeDetailsRecordController |
StoreManageController |
| Service | StoreIncomeDetailsRecordService |
StoreManageService |
主要变化:
StoreManageController 统一管理public Map<Integer, String> getTodayIncomeByType(Integer storeId) {
// 按 incomeType 分组统计
}
public String getIncomeByDate(Integer storeId, String date) {
// 查询指定日期的收益
}
public String getIncomeByDateRange(Integer storeId, String startDate, String endDate) {
// 查询日期范围的总收益
}
public List<StoreIncomeDetailsRecord> getTodayIncomeDetails(Integer storeId) {
// 返回今日所有收入记录
}
| 版本 | 日期 | 说明 | 作者 |
|---|---|---|---|
| 1.0.0 | 2025-01-xx | 初始版本,迁移今日收益查询功能 | ssk |
如有问题,请联系: